summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 18:33:23 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 18:33:23 +0000
commit1d5cace9db9aef76f26b2d7ba54bbb76443b00b2 (patch)
tree314a15dd1aa103da13bdc83ba1d2105a290bc5ba /doc
parentInitial commit. (diff)
downloadbash-1d5cace9db9aef76f26b2d7ba54bbb76443b00b2.tar.xz
bash-1d5cace9db9aef76f26b2d7ba54bbb76443b00b2.zip
Adding upstream version 5.0.upstream/5.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--doc/INTRO187
-rw-r--r--doc/Makefile.in341
-rw-r--r--doc/README36
-rw-r--r--doc/aosa-bash-full.pdfbin0 -> 393895 bytes
-rw-r--r--doc/bash.06171
-rw-r--r--doc/bash.110979
-rw-r--r--doc/bash.html14043
-rw-r--r--doc/bash.info11816
-rw-r--r--doc/bash.pdfbin0 -> 376866 bytes
-rw-r--r--doc/bash.ps9725
-rw-r--r--doc/bashbug.051
-rw-r--r--doc/bashbug.165
-rw-r--r--doc/bashbug.ps294
-rw-r--r--doc/bashref.dvibin0 -> 767804 bytes
-rw-r--r--doc/bashref.html15761
-rw-r--r--doc/bashref.info11816
-rw-r--r--doc/bashref.pdfbin0 -> 753125 bytes
-rw-r--r--doc/bashref.ps21558
-rw-r--r--doc/bashref.texi9246
-rw-r--r--doc/builtins.01851
-rw-r--r--doc/builtins.124
-rw-r--r--doc/builtins.ps3136
-rw-r--r--doc/fdl.texi506
-rw-r--r--doc/fdl.txt451
-rwxr-xr-xdoc/htmlpost.sh19
-rwxr-xr-xdoc/infopost.sh8
-rw-r--r--doc/rbash.059
-rw-r--r--doc/rbash.18
-rw-r--r--doc/rbash.ps286
-rw-r--r--doc/texinfo.tex11045
-rw-r--r--doc/version.texi11
31 files changed, 129493 insertions, 0 deletions
diff --git a/doc/INTRO b/doc/INTRO
new file mode 100644
index 0000000..29f208a
--- /dev/null
+++ b/doc/INTRO
@@ -0,0 +1,187 @@
+ BASH - The Bourne-Again Shell
+
+Bash is the shell, or command language interpreter, that will appear
+in the GNU operating system. Bash is an sh-compatible shell that
+incorporates useful features from the Korn shell (ksh) and C shell
+(csh). It is intended to conform to the IEEE POSIX P1003.2/ISO 9945.2
+Shell and Tools standard. It offers functional improvements over sh
+for both programming and interactive use. In addition, most sh scripts
+can be run by Bash without modification.
+
+Bash is quite portable. It uses a configuration system that discovers
+characteristics of the compilation platform at build time, and may
+therefore be built on nearly every version of UNIX. Ports to
+UNIX-like systems such as QNX and Minix and to non-UNIX systems such
+as OS/2, Windows 95, and Windows NT are available.
+
+Bash includes the following features:
+
+Editing and Completion
+
+Bash offers a command-line editing facility which permits users to
+edit command lines using familiar emacs or vi-style editing commands.
+Editing allows corrections to be made without having to erase back
+to the point of error or start the command line anew. The editing
+facilities include a feature that allows users to complete command and
+file names.
+
+The Bash line editing library is fully customizable. Users may define
+their own key bindings -- the action taken when a key is pressed. A
+number of variables to fine-tune editing behavior are also available.
+
+History and Command Re-entry
+
+The Bash history feature remembers commands entered to the shell and
+allows them to be recalled and re-executed. The history list may be
+of unlimited size. Bash allows users to search for previous commands
+and reuse portions of those commands when composing new ones. The
+history list may be saved across shell sessions.
+
+Bash allows users to control which commands are saved on the history
+list.
+
+Job Control
+
+On systems that support it, Bash provides an interface to the
+operating system's job control facilities, which allow processes
+to be suspended and restarted, and moved between the foreground
+and background. Bash allows users to selectively `forget' about
+background jobs.
+
+Shell Functions and Aliases
+
+These mechanisms are available to bind a user-selected identifier to a
+list of commands that will be executed when the identifier is used as
+a command name. Functions allow local variables and recursion, and
+have access to the environment of the calling shell. Aliases may be
+used to create a mnemonic for a command name, expand a single word to
+a complex command, or ensure that a command is called with a basic set
+of options.
+
+Arrays
+
+Bash-2.0 supports indexed arrays of unlimited size. The subscript for
+an array is an arithmetic expression. Arrays may be assigned to with
+a new compound assignment syntax, and several builtins have options to
+operate on array variables. Bash includes a number of built-in array
+variables.
+
+Arithmetic
+
+Bash allows users to perform integer arithmetic in any base from two
+to sixty-four. Nearly all of the C language arithmetic operators are
+available with the same syntax and precedence as in C. Arithmetic
+expansion allows an arithmetic expression to be evaluated and the
+result substituted into the command line. Shell variables can be used
+as operands, and the value of an expression may be assigned to a
+variable.
+
+An arithmetic expression may be used as a command; the exit status of
+the command is the value of the expression.
+
+ANSI-C Quoting
+
+There is a new quoting syntax that allows backslash-escaped characters
+in strings to be expanded according to the ANSI C standard.
+
+Tilde Expansion
+
+Users' home directories may be expanded using this feature. Words
+beginning with a tilde may also be expanded to the current or previous
+working directory.
+
+Brace Expansion
+
+Brace expansion is a convenient way to generate a list of strings that
+share a common prefix or suffix.
+
+Substring Capabilities
+
+Bash allows new strings to be created by removing leading or trailing
+substrings from existing variable values, or by specifying a starting
+offset and length. Portions of variable values may be matched against
+shell patterns and the matching portion removed or a new value
+substituted.
+
+Indirect Variable Expansion
+
+Bash makes it easy to find the value of a shell variable whose name is
+the value of another variable.
+
+Expanded I/O Capabilities
+
+Bash provides several input and output features not available in sh,
+including the ability to:
+
+ o specify a file or file descriptor for both input and output
+ o read from or write to asynchronous processes using named pipes
+ o read lines ending in backslash
+ o display a prompt on the terminal before a read
+ o format menus and interpret responses to them
+ o echo lines exactly as input without escape processing
+
+Control of Builtin Commands
+
+Bash implements several builtin commands to give users more control
+over which commands are executed. The enable builtin allows other
+builtin commands to be selectively enabled or disabled. The command
+and builtin builtins change the order in which the shell searches for
+commands.
+
+On systems that provide dynamic loading, new builtins may be loaded
+into a running shell from a shared object file. These new builtins
+have access to all of the shell facilities.
+
+Help
+
+Bash includes a built-in help facility.
+
+Shell Optional Behavior
+
+There is a great deal of customizable shell behavior. The shopt
+builtin command provides a unified interface that allows users to
+alter shell defaults.
+
+Prompt Customization
+
+Bash allows the primary and secondary prompts to be customized by
+interpreting a number of backslash-escaped special characters.
+Parameter and variable expansion is also performed on the values of
+the primary and secondary prompt strings before they are displayed.
+
+Security
+
+Bash provides a restricted shell environment. It is also possible to
+control the execution of setuid/setgid scripts.
+
+Directory Stack
+
+Bash provides a `directory stack', to which directories may be added
+and removed. The current directory may be changed to any directory in
+the stack. It is easy to toggle between two directories in the stack.
+The directory stack may be saved and restored across different shell
+invocations.
+
+POSIX Mode
+
+Bash is nearly completely conformant to POSIX.2. POSIX mode changes
+those few areas where the Bash default behavior differs from the
+standard to match the standard. In POSIX mode, Bash is POSIX.2
+compliant.
+
+Internationalization
+
+Bash provides a new quoting syntax that allows strings to be
+translated according to the current locale. The locale in which the
+shell itself runs may also be changed, so that the shell messages
+themselves may be language-specific.
+
+The command-line editing facilities allow the input of eight-bit
+characters, so most of the ISO-8859 family of character sets are
+supported.
+
+Command Timing
+
+Bash allows external commands, shell builtin commands and shell functions
+to be timed. The format used to display the timing information may be
+changed by the user.
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..5f0756c
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,341 @@
+# This Makefile is for the Bash/documentation directory -*- text -*-.
+#
+# Copyright (C) 2003-2015 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 3 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, see <http://www.gnu.org/licenses/>.
+
+PACKAGE = @PACKAGE_NAME@
+VERSION = @PACKAGE_VERSION@
+
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+
+#
+SHELL = @MAKE_SHELL@
+RM = rm -f
+
+topdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+datarootdir = @datarootdir@
+
+infodir = @infodir@
+
+docdir = @docdir@
+
+# set this to a directory name to have the HTML files installed
+htmldir = @htmldir@
+
+# Support an alternate destination root directory for package building
+DESTDIR =
+
+mandir = @mandir@
+manpfx = man
+
+man1ext = .1
+man1dir = $(mandir)/$(manpfx)1
+man3ext = .3
+man3dir = $(mandir)/$(manpfx)3
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+BUILD_DIR = @BUILD_DIR@
+
+SUPPORT_SRCDIR = $(topdir)/support
+
+# bad style
+RL_LIBDIR = $(topdir)/lib/readline
+
+# unused
+TEXINDEX = texindex
+TEX = tex
+
+MAKEINFO = makeinfo
+TEXI2DVI = ${SUPPORT_SRCDIR}/texi2dvi
+TEXI2HTML = ${SUPPORT_SRCDIR}/texi2html
+MAN2HTML = ${BUILD_DIR}/support/man2html
+HTMLPOST = ${srcdir}/htmlpost.sh
+INFOPOST = ${srcdir}/infopost.sh
+QUIETPS = #set this to -q to shut up dvips
+PAPERSIZE = letter # change to a4 for A4-size paper
+PSDPI = 600 # could be 300 if you like
+DVIPS = dvips -D ${PSDPI} $(QUIETPS) -t ${PAPERSIZE} -o $@ # tricky
+# experimental; uses external texi2dvi for now; this needs pdftex to be present
+TEXI2PDF = texi2dvi --pdf
+
+TEXINPUTDIR = $(RL_LIBDIR)/doc
+SET_TEXINPUTS = TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS
+
+# These tools might not be available; they're not required
+DVIPDF = dvipdfm -o $@ -p ${PAPERSIZE}
+PSPDF = gs -sPAPERSIZE=${PAPERSIZE} -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@
+
+MKDIRS = ${SUPPORT_SRCDIR}/mkdirs
+
+# This should be a program that converts troff to an ascii-readable format
+# added the -P -c for benefit of Mac OS X, which insists on adding colors if
+# it's not present
+NROFF = groff -Tascii -P -c
+
+# This should be a program that converts troff to postscript
+GROFF = groff
+
+HSUSER = $(RL_LIBDIR)/doc/hsuser.texi
+RLUSER = $(RL_LIBDIR)/doc/rluser.texi
+
+BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi
+
+.SUFFIXES: .0 .1 .3 .ms .ps .txt .dvi .html .pdf
+
+.1.ps:
+ $(RM) $@
+ -${GROFF} -man $< > $@
+
+.1.0:
+ $(RM) $@
+ -${NROFF} -man $< > $@
+
+.1.html:
+ $(RM) $@
+ -${MAN2HTML} $< | ${HTMLPOST} > $@
+
+.ms.ps:
+ $(RM) $@
+ -${GROFF} -ms $< > $@
+
+.ms.txt:
+ $(RM) $@
+ -${NROFF} -ms $< > $@
+
+.3.ps:
+ $(RM) $@
+ -${GROFF} -man $< > $@
+
+.3.0:
+ $(RM) $@
+ -${NROFF} -man $< > $@
+
+.3.html:
+ $(RM) $@
+ -${MAN2HTML} $< > $@
+
+.ps.pdf:
+ $(RM) $@
+ -${PSPDF} $<
+
+.dvi.pdf:
+ $(RM) $@
+ -${DVIPDF} $<
+
+.dvi.ps:
+ ${RM} $@
+ -${DVIPS} $<
+
+#.texi.pdf:
+# $(RM) $@
+# -${TEXI2PDF} $<
+
+all: ps info dvi text html $(MAN2HTML)
+nodvi: ps info text html
+everything: all pdf
+
+PSFILES = bash.ps bashbug.ps article.ps builtins.ps rbash.ps
+DVIFILES = bashref.dvi bashref.ps
+INFOFILES = bashref.info bash.info
+MAN0FILES = bash.0 bashbug.0 builtins.0 rbash.0
+HTMLFILES = bashref.html bash.html
+PDFFILES = bash.pdf bashref.pdf article.pdf rose94.pdf
+
+ps: ${PSFILES}
+dvi: ${DVIFILES}
+info: ${INFOFILES}
+text: ${MAN0FILES}
+html: ${HTMLFILES}
+pdf: ${PDFFILES}
+
+bashref.dvi: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
+ ${SET_TEXINPUTS} $(TEXI2DVI) $(srcdir)/bashref.texi || { ${RM} $@ ; exit 1; }
+
+bashref.info: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
+ $(MAKEINFO) --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi
+
+# experimental
+bashref.pdf: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
+ ${SET_TEXINPUTS} $(TEXI2PDF) $(srcdir)/bashref.texi || { ${RM} $@ ; exit 1; }
+
+
+# can also use:
+# $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/bashref.texi
+bashref.html: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
+ $(MAKEINFO) --html --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi
+
+bash.info: bashref.info
+ ${SHELL} ${INFOPOST} < $(srcdir)/bashref.info > $@ ; \
+
+bash.txt: bash.1
+bash.ps: bash.1
+bash.html: bash.1
+bashbug.ps: bashbug.1
+builtins.ps: builtins.1 bash.1
+rbash.ps: rbash.1 bash.1
+bash.0: bash.1
+bashbug.0: bashbug.1
+builtins.0: builtins.1 bash.1
+rbash.0: rbash.1 bash.1
+article.ps: article.ms
+
+bashref.ps: bashref.dvi
+
+article.pdf: article.ps
+#bashref.pdf: bashref.dvi
+# experimental
+bashref.pdf: bashref.texi
+bash.pdf: bash.ps
+rose94.pdf: rose94.ps
+
+OTHER_DOCS = $(srcdir)/FAQ $(srcdir)/INTRO
+OTHER_INSTALLED_DOCS = FAQ INTRO
+
+$(MAN2HTML): ${topdir}/support/man2html.c
+ -( cd ${BUILD_DIR}/support ; ${MAKE} ${MFLAGS} man2html)
+
+clean:
+ $(RM) *.aux *.bak *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps \
+ *.pgs *.bt *.bts *.rw *.rws *.fns *.kys *.tps *.vrs *.o
+ ${RM} core *.core
+
+mostlyclean: clean
+ $(RM) Makefile
+
+distclean: clean maybe-clean
+ $(RM) Makefile
+
+maintainer-clean: clean
+ ${RM} ${PSFILES} ${DVIFILES} ${INFOFILES} ${MAN0FILES} ${HTMLFILES}
+ ${RM} ${CREATED_FAQ}
+ $(RM) Makefile
+
+maybe-clean:
+ -if test "X$(topdir)" != "X$(BUILD_DIR)"; then \
+ $(RM) ${PSFILES} ${DVIFILES} ${INFOFILES} ${MAN0FILES} ${HTMLFILES}; \
+ fi
+
+installdirs:
+ -$(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(man1dir)
+ -$(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(infodir)
+ -$(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(docdir)
+ -if test -n "$(htmldir)" ; then \
+ $(SHELL) $(SUPPORT_SRCDIR)/mkinstalldirs $(DESTDIR)$(htmldir) ; \
+ fi
+
+install: info installdirs
+ -$(INSTALL_DATA) $(srcdir)/bash.1 $(DESTDIR)$(man1dir)/bash${man1ext}
+ -$(INSTALL_DATA) $(srcdir)/bashbug.1 $(DESTDIR)$(man1dir)/bashbug${man1ext}
+ -$(INSTALL_DATA) $(OTHER_DOCS) $(DESTDIR)$(docdir)
+# uncomment the next lines to install the builtins man page
+# sed 's:bash\.1:man1/&:' $(srcdir)/builtins.1 > $${TMPDIR:-/var/tmp}/builtins.1
+# -$(INSTALL_DATA) $${TMPDIR:-/var/tmp}/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext}
+# -$(RM) $${TMPDIR:-/var/tmp}/builtins.1
+ -if test -f bash.info; then d=.; else d=$(srcdir); fi; \
+ $(INSTALL_DATA) $$d/bash.info $(DESTDIR)$(infodir)/bash.info
+# run install-info if it is present to update the info directory
+ if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
+ install-info --dir-file=$(DESTDIR)$(infodir)/dir $(DESTDIR)$(infodir)/bash.info; \
+ else true; fi
+# if htmldir is set, install the html files into that directory
+ -if test -n "${htmldir}" ; then \
+ $(INSTALL_DATA) $(srcdir)/bash.html $(DESTDIR)$(htmldir) ; \
+ $(INSTALL_DATA) $(srcdir)/bashref.html $(DESTDIR)$(htmldir) ; \
+ fi
+
+install_builtins: installdirs
+ sed 's:bash\.1:man1/&:' $(srcdir)/builtins.1 > $${TMPDIR:-/var/tmp}/builtins.1
+ -$(INSTALL_DATA) $${TMPDIR:-/var/tmp}/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext}
+ -$(RM) $${TMPDIR:-/var/tmp}/builtins.1
+
+install_everything: install install_builtins
+
+install-html: html
+ -if test -n "${htmldir}" ; then \
+ $(INSTALL_DATA) $(srcdir)/bash.html $(DESTDIR)$(htmldir) ; \
+ $(INSTALL_DATA) $(srcdir)/bashref.html $(DESTDIR)$(htmldir) ; \
+ fi
+
+uninstall:
+ -$(RM) $(DESTDIR)$(man1dir)/bash${man1ext} $(DESTDIR)$(man1dir)/bashbug${man1ext}
+ -$(RM) $(DESTDIR)$(man1dir)/bash_builtins${man1ext}
+ $(RM) $(DESTDIR)$(infodir)/bash.info
+# run install-info if it is present to update the info directory
+ if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
+ install-info --delete --dir-file=$(DESTDIR)$(infodir)/dir $(DESTDIR)$(infodir)/bash.info; \
+ else true; fi
+ -( cd $(DESTDIR)$(docdir) && $(RM) $(OTHER_INSTALLED_DOCS) )
+ -if test -n "$(htmldir)" ; then \
+ $(RM) $(DESTDIR)$(htmldir)/bash.html ; \
+ $(RM) $(DESTDIR)$(htmldir)/bashref.html ; \
+ fi
+
+# for use by chet
+CREATED_FAQ = faq.news faq.news2 faq.mail faq.version
+
+faq: ${CREATED_FAQ}
+
+faq.version: FAQ.version FAQ
+ sh mkfaqvers FAQ.version > $@
+
+faq.headers.mail: FAQ.headers.mail FAQ
+ sh mkfaqvers FAQ.headers.mail > $@
+
+faq.headers.news: FAQ.headers.news FAQ
+ sh mkfaqvers FAQ.headers.news > $@
+
+faq.headers.news2: FAQ.headers.news2 FAQ
+ sh mkfaqvers FAQ.headers.news2 > $@
+
+faq.news: FAQ faq.headers.news faq.version
+ $(RM) $@
+ cat faq.headers.news faq.version FAQ > $@
+
+faq.news2: FAQ faq.headers.news2 faq.version
+ $(RM) $@
+ cat faq.headers.news2 faq.version FAQ > $@
+
+faq.mail: FAQ faq.headers.mail faq.version
+ $(RM) $@
+ cat faq.headers.mail faq.version FAQ > $@
+
+inst: bashref.texi
+ $(SHELL) ./mkinstall
+ cmp -s INSTALL ../INSTALL || mv INSTALL ../INSTALL
+ $(RM) INSTALL
+
+posix: bashref.texi
+ $(SHELL) ./mkposix
+ cmp -s POSIX ../POSIX || mv POSIX ../POSIX
+ $(RM) POSIX
+
+rbash: bashref.texi
+ $(SH) ./mkrbash
+ cmp -s RBASH ../RBASH || mv RBASH ../RBASH
+ $(RM) RBASH
+
+xdist: everything inst posix rbash
diff --git a/doc/README b/doc/README
new file mode 100644
index 0000000..e3a1d24
--- /dev/null
+++ b/doc/README
@@ -0,0 +1,36 @@
+This directory contains the bash documentation.
+
+FAQ - a set of frequently-asked questions about Bash with answers
+INTRO - a short introduction to bash
+article.ms - an article I wrote about bash for The Linux Journal
+bash.1 - the bash man page
+builtins.1 - a man page that documents the builtins, extracted from bash.1
+bashref.texi - the `bash reference manual'
+bashref.info - the `bash reference manual' processed by `makeinfo'
+readline.3 - the readline man page
+
+The `.ps' files are postscript versions of the above. The `.html'
+files are HTML versions of the man page and reference manual. The
+`.0' files are formatted manual pages. The `.txt' versions are
+ascii -- the output of `groff -Tascii'.
+
+The rest of this file explains how to use the `builtins.1' man page.
+
+For each command in the list of builtins create a file in man/man1 called:
+
+${command}.1
+
+eg.
+for.1
+type.1
+alias.1
+etc.
+
+All these files are identical as follows:
+
+jaws@jaws(264)$ cat alias.1
+.so man1/builtins.1
+jaws@jaws(265)$
+
+Make sure you adjust the .so line in builtins.1 to reflect where you
+put it.
diff --git a/doc/aosa-bash-full.pdf b/doc/aosa-bash-full.pdf
new file mode 100644
index 0000000..0181549
--- /dev/null
+++ b/doc/aosa-bash-full.pdf
Binary files differ
diff --git a/doc/bash.0 b/doc/bash.0
new file mode 100644
index 0000000..a062b8a
--- /dev/null
+++ b/doc/bash.0
@@ -0,0 +1,6171 @@
+BASH(1) General Commands Manual BASH(1)
+
+
+
+NNAAMMEE
+ bash - GNU Bourne-Again SHell
+
+SSYYNNOOPPSSIISS
+ bbaasshh [options] [command_string | file]
+
+CCOOPPYYRRIIGGHHTT
+ Bash is Copyright (C) 1989-2018 by the Free Software Foundation, Inc.
+
+DDEESSCCRRIIPPTTIIOONN
+ BBaasshh is an sshh-compatible command language interpreter that executes
+ commands read from the standard input or from a file. BBaasshh also incor-
+ porates useful features from the _K_o_r_n and _C shells (kksshh and ccsshh).
+
+ BBaasshh is intended to be a conformant implementation of the Shell and
+ Utilities portion of the IEEE POSIX specification (IEEE Standard
+ 1003.1). BBaasshh can be configured to be POSIX-conformant by default.
+
+OOPPTTIIOONNSS
+ All of the single-character shell options documented in the description
+ of the sseett builtin command, including --oo, can be used as options when
+ the shell is invoked. In addition, bbaasshh interprets the following
+ options when it is invoked:
+
+ --cc If the --cc option is present, then commands are read from the
+ first non-option argument _c_o_m_m_a_n_d___s_t_r_i_n_g. If there are argu-
+ ments after the _c_o_m_m_a_n_d___s_t_r_i_n_g, the first argument is
+ assigned to $$00 and any remaining arguments are assigned to
+ the positional parameters. The assignment to $$00 sets the
+ name of the shell, which is used in warning and error mes-
+ sages.
+ --ii If the --ii option is present, the shell is _i_n_t_e_r_a_c_t_i_v_e.
+ --ll Make bbaasshh act as if it had been invoked as a login shell (see
+ IINNVVOOCCAATTIIOONN below).
+ --rr If the --rr option is present, the shell becomes _r_e_s_t_r_i_c_t_e_d
+ (see RREESSTTRRIICCTTEEDD SSHHEELLLL below).
+ --ss If the --ss 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 or when reading input
+ through a pipe.
+ --DD A list of all double-quoted strings preceded by $$ is printed
+ on the standard output. These are the strings that are sub-
+ ject to language translation when the current locale is not CC
+ or PPOOSSIIXX. This implies the --nn option; no commands will be
+ executed.
+ [[--++]]OO [[_s_h_o_p_t___o_p_t_i_o_n]]
+ _s_h_o_p_t___o_p_t_i_o_n is one of the shell options accepted by the
+ sshhoopptt builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). If
+ _s_h_o_p_t___o_p_t_i_o_n is present, --OO sets the value of that option; ++OO
+ unsets it. If _s_h_o_p_t___o_p_t_i_o_n is not supplied, the names and
+ values of the shell options accepted by sshhoopptt are printed on
+ the standard output. If the invocation option is ++OO, the
+ output is displayed in a format that may be reused as input.
+ ---- A ---- signals the end of options and disables further option
+ processing. Any arguments after the ---- are treated as file-
+ names and arguments. An argument of -- is equivalent to ----.
+
+ BBaasshh also interprets a number of multi-character options. These
+ options must appear on the command line before the single-character
+ options to be recognized.
+
+ ----ddeebbuuggggeerr
+ Arrange for the debugger profile to be executed before the shell
+ starts. Turns on extended debugging mode (see the description
+ of the eexxttddeebbuugg option to the sshhoopptt builtin below).
+ ----dduummpp--ppoo--ssttrriinnggss
+ Equivalent to --DD, but the output is in the GNU _g_e_t_t_e_x_t ppoo (por-
+ table object) file format.
+ ----dduummpp--ssttrriinnggss
+ Equivalent to --DD.
+ ----hheellpp Display a usage message on standard output and exit success-
+ fully.
+ ----iinniitt--ffiillee _f_i_l_e
+ ----rrccffiillee _f_i_l_e
+ Execute commands from _f_i_l_e instead of the standard personal ini-
+ tialization file _~_/_._b_a_s_h_r_c if the shell is interactive (see
+ IINNVVOOCCAATTIIOONN below).
+
+ ----llooggiinn
+ Equivalent to --ll.
+
+ ----nnooeeddiittiinngg
+ Do not use the GNU rreeaaddlliinnee library to read command lines when
+ the shell is interactive.
+
+ ----nnoopprrooffiillee
+ Do not read either the system-wide startup file _/_e_t_c_/_p_r_o_f_i_l_e or
+ any of the personal initialization files _~_/_._b_a_s_h___p_r_o_f_i_l_e,
+ _~_/_._b_a_s_h___l_o_g_i_n, or _~_/_._p_r_o_f_i_l_e. By default, bbaasshh reads these
+ files when it is invoked as a login shell (see IINNVVOOCCAATTIIOONN
+ below).
+
+ ----nnoorrcc Do not read and execute the personal initialization file
+ _~_/_._b_a_s_h_r_c if the shell is interactive. This option is on by
+ default if the shell is invoked as sshh.
+
+ ----ppoossiixx
+ Change the behavior of bbaasshh where the default operation differs
+ from the POSIX standard to match the standard (_p_o_s_i_x _m_o_d_e). See
+ SSEEEE AALLSSOO below for a reference to a document that details how
+ posix mode affects bash's behavior.
+
+ ----rreessttrriicctteedd
+ The shell becomes restricted (see RREESSTTRRIICCTTEEDD SSHHEELLLL below).
+
+ ----vveerrbboossee
+ Equivalent to --vv.
+
+ ----vveerrssiioonn
+ Show version information for this instance of bbaasshh on the stan-
+ dard output and exit successfully.
+
+AARRGGUUMMEENNTTSS
+ If arguments remain after option processing, and neither the --cc nor the
+ --ss option has been supplied, the first argument is assumed to be the
+ name of a file containing shell commands. If bbaasshh is invoked in this
+ fashion, $$00 is set to the name of the file, and the positional parame-
+ ters are set to the remaining arguments. BBaasshh reads and executes com-
+ mands from this file, then exits. BBaasshh's exit status is the exit sta-
+ tus of the last command executed in the script. If no commands are
+ executed, the exit status is 0. An attempt is first made to open the
+ file in the current directory, and, if no file is found, then the shell
+ searches the directories in PPAATTHH for the script.
+
+IINNVVOOCCAATTIIOONN
+ A _l_o_g_i_n _s_h_e_l_l is one whose first character of argument zero is a --, or
+ one started with the ----llooggiinn option.
+
+ An _i_n_t_e_r_a_c_t_i_v_e shell is one started without non-option arguments
+ (unless --ss is specified) and without the --cc option whose standard input
+ and error are both connected to terminals (as determined by _i_s_a_t_t_y(3)),
+ or one started with the --ii option. PPSS11 is set and $$-- includes ii if
+ bbaasshh is interactive, allowing a shell script or a startup file to test
+ this state.
+
+ The following paragraphs describe how bbaasshh executes its startup files.
+ If any of the files exist but cannot be read, bbaasshh reports an error.
+ Tildes are expanded in filenames as described below under TTiillddee EExxppaann--
+ ssiioonn in the EEXXPPAANNSSIIOONN section.
+
+ When bbaasshh is invoked as an interactive login shell, or as a non-inter-
+ active shell with the ----llooggiinn option, it first reads and executes com-
+ mands from the file _/_e_t_c_/_p_r_o_f_i_l_e, if that file exists. After reading
+ that file, it looks for _~_/_._b_a_s_h___p_r_o_f_i_l_e, _~_/_._b_a_s_h___l_o_g_i_n, and _~_/_._p_r_o_f_i_l_e,
+ in that order, and reads and executes commands from the first one that
+ exists and is readable. The ----nnoopprrooffiillee option may be used when the
+ shell is started to inhibit this behavior.
+
+ When an interactive login shell exits, or a non-interactive login shell
+ executes the eexxiitt builtin command, bbaasshh reads and executes commands
+ from the file _~_/_._b_a_s_h___l_o_g_o_u_t, if it exists.
+
+ When an interactive shell that is not a login shell is started, bbaasshh
+ reads and executes commands from _~_/_._b_a_s_h_r_c, if that file exists. This
+ may be inhibited by using the ----nnoorrcc option. The ----rrccffiillee _f_i_l_e option
+ will force bbaasshh to read and execute commands from _f_i_l_e instead of
+ _~_/_._b_a_s_h_r_c.
+
+ When bbaasshh is started non-interactively, to run a shell script, for
+ example, it looks for the variable BBAASSHH__EENNVV 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. BBaasshh behaves as if the following com-
+ mand were executed:
+ if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
+ but the value of the PPAATTHH variable is not used to search for the file-
+ name.
+
+ If bbaasshh is invoked with the name sshh, it tries to mimic the startup
+ behavior of historical versions of sshh as closely as possible, while
+ conforming to the POSIX standard as well. When invoked as an interac-
+ tive login shell, or a non-interactive shell with the ----llooggiinn option,
+ it first attempts to read and execute commands from _/_e_t_c_/_p_r_o_f_i_l_e and
+ _~_/_._p_r_o_f_i_l_e, in that order. The ----nnoopprrooffiillee option may be used to
+ inhibit this behavior. When invoked as an interactive shell with the
+ name sshh, bbaasshh looks for the variable EENNVV, 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 sshh does not attempt to read and exe-
+ cute commands from any other startup files, the ----rrccffiillee option has no
+ effect. A non-interactive shell invoked with the name sshh does not
+ attempt to read any other startup files. When invoked as sshh, bbaasshh
+ enters _p_o_s_i_x mode after the startup files are read.
+
+ When bbaasshh is started in _p_o_s_i_x mode, as with the ----ppoossiixx command line
+ option, it follows the POSIX standard for startup files. In this mode,
+ interactive shells expand the EENNVV variable and commands are read and
+ executed from the file whose name is the expanded value. No other
+ startup files are read.
+
+ BBaasshh attempts to determine when it is being run with its standard input
+ connected to a network connection, as when executed by the remote shell
+ daemon, usually _r_s_h_d, or the secure shell daemon _s_s_h_d. If bbaasshh deter-
+ mines it is being run in this fashion, it reads and executes commands
+ from _~_/_._b_a_s_h_r_c, if that file exists and is readable. It will not do
+ this if invoked as sshh. The ----nnoorrcc option may be used to inhibit this
+ behavior, and the ----rrccffiillee option may be used to force another file to
+ be read, but neither _r_s_h_d nor _s_s_h_d generally invoke the shell with
+ those options or allow them to be specified.
+
+ If the shell is started with the effective user (group) id not equal to
+ the real user (group) id, and the --pp option is not supplied, no startup
+ files are read, shell functions are not inherited from the environment,
+ the SSHHEELLLLOOPPTTSS, BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they
+ appear in the environment, are ignored, and the effective user id is
+ set to the real user id. If the --pp option is supplied at invocation,
+ the startup behavior is the same, but the effective user id is not
+ reset.
+
+DDEEFFIINNIITTIIOONNSS
+ The following definitions are used throughout the rest of this docu-
+ ment.
+ bbllaannkk A space or tab.
+ wwoorrdd A sequence of characters considered as a single unit by the
+ shell. Also known as a ttookkeenn.
+ nnaammee A _w_o_r_d consisting only of alphanumeric characters and under-
+ scores, and beginning with an alphabetic character or an under-
+ score. Also referred to as an iiddeennttiiffiieerr.
+ mmeettaacchhaarraacctteerr
+ A character that, when unquoted, separates words. One of the
+ following:
+ || && ;; (( )) << >> ssppaaccee ttaabb nneewwlliinnee
+ ccoonnttrrooll ooppeerraattoorr
+ A _t_o_k_e_n that performs a control function. It is one of the fol-
+ lowing symbols:
+ |||| && &&&& ;; ;;;; ;;&& ;;;;&& (( )) || ||&& <<nneewwlliinnee>>
+
+RREESSEERRVVEEDD WWOORRDDSS
+ _R_e_s_e_r_v_e_d _w_o_r_d_s are words that have a special meaning to the shell. The
+ following words are recognized as reserved when unquoted and either the
+ first word of a simple command (see SSHHEELLLL GGRRAAMMMMAARR below) or the third
+ word of a ccaassee or ffoorr command:
+
+ !! ccaassee ccoopprroocc ddoo ddoonnee eelliiff eellssee eessaacc ffii ffoorr ffuunnccttiioonn iiff iinn sseelleecctt
+ tthheenn uunnttiill wwhhiillee {{ }} ttiimmee [[[[ ]]]]
+
+SSHHEELLLL GGRRAAMMMMAARR
+ SSiimmppllee CCoommmmaannddss
+ A _s_i_m_p_l_e _c_o_m_m_a_n_d is a sequence of optional variable assignments fol-
+ lowed by bbllaannkk-separated words and redirections, and terminated by a
+ _c_o_n_t_r_o_l _o_p_e_r_a_t_o_r. The first word specifies the command to be executed,
+ and is passed as argument zero. The remaining words are passed as
+ arguments to the invoked command.
+
+ The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if
+ the command is terminated by signal _n.
+
+ PPiippeelliinneess
+ A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of
+ the control operators || or ||&&. The format for a pipeline is:
+
+ [ttiimmee [--pp]] [ ! ] _c_o_m_m_a_n_d [ [|||||&&] _c_o_m_m_a_n_d_2 ... ]
+
+ The standard output of _c_o_m_m_a_n_d is connected via a pipe to the standard
+ input of _c_o_m_m_a_n_d_2. This connection is performed before any redirec-
+ tions specified by the command (see RREEDDIIRREECCTTIIOONN below). If ||&& is used,
+ _c_o_m_m_a_n_d's standard error, in addition to its standard output, is con-
+ nected to _c_o_m_m_a_n_d_2's standard input through the pipe; it is shorthand
+ for 22>>&&11 ||. This implicit redirection of the standard error to the
+ standard output is performed after any redirections specified by the
+ command.
+
+ The return status of a pipeline is the exit status of the last command,
+ unless the ppiippeeffaaiill option is enabled. If ppiippeeffaaiill 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 success-
+ fully. If the reserved word !! precedes a pipeline, the exit status of
+ that pipeline 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.
+
+ If the ttiimmee reserved word precedes a pipeline, the elapsed as well as
+ user and system time consumed by its execution are reported when the
+ pipeline terminates. The --pp option changes the output format to that
+ specified by POSIX. When the shell is in _p_o_s_i_x _m_o_d_e, it does not rec-
+ ognize ttiimmee as a reserved word if the next token begins with a `-'.
+ The TTIIMMEEFFOORRMMAATT variable may be set to a format string that specifies
+ how the timing information should be displayed; see the description of
+ TTIIMMEEFFOORRMMAATT under SShheellll VVaarriiaabblleess below.
+
+ When the shell is in _p_o_s_i_x _m_o_d_e, ttiimmee may be followed by a newline. In
+ this case, the shell displays the total user and system time consumed
+ by the shell and its children. The TTIIMMEEFFOORRMMAATT variable may be used to
+ specify the format of the time information.
+
+ Each command in a pipeline is executed as a separate process (i.e., in
+ a subshell). See CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT for a description of a
+ subshell environment. If the llaassttppiippee option is enabled using the
+ sshhoopptt builtin (see the description of sshhoopptt below), the last element of
+ a pipeline may be run by the shell process.
+
+ LLiissttss
+ A _l_i_s_t is a sequence of one or more pipelines separated by one of the
+ operators ;;, &&, &&&&, or ||||, and optionally terminated by one of ;;, &&, or
+ <<nneewwlliinnee>>.
+
+ Of these list operators, &&&& and |||| have equal precedence, followed by ;;
+ and &&, which have equal precedence.
+
+ A sequence of one or more newlines may appear in a _l_i_s_t instead of a
+ semicolon to delimit commands.
+
+ If a command is terminated by the control operator &&, the shell exe-
+ cutes the command in the _b_a_c_k_g_r_o_u_n_d in a subshell. The shell does not
+ wait for the command to finish, and the return status is 0. These are
+ referred to as _a_s_y_n_c_h_r_o_n_o_u_s commands. Commands separated by a ;; are
+ executed sequentially; the shell waits for each command to terminate in
+ turn. The return status is the exit status of the last command exe-
+ cuted.
+
+ AND and OR lists are sequences of one or more pipelines separated by
+ the &&&& and |||| control operators, respectively. AND and OR lists are
+ executed with left associativity. An AND list has the form
+
+ _c_o_m_m_a_n_d_1 &&&& _c_o_m_m_a_n_d_2
+
+ _c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns an exit status
+ of zero (success).
+
+ An OR list has the form
+
+ _c_o_m_m_a_n_d_1 |||| _c_o_m_m_a_n_d_2
+
+ _c_o_m_m_a_n_d_2 is executed if, and only if, _c_o_m_m_a_n_d_1 returns a non-zero exit
+ status. The return status of AND and OR lists is the exit status of
+ the last command executed in the list.
+
+ CCoommppoouunndd CCoommmmaannddss
+ A _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d is one of the following. In most cases a _l_i_s_t in a
+ command's description may be separated from the rest of the command by
+ one or more newlines, and may be followed by a newline in place of a
+ semicolon.
+
+ (_l_i_s_t) _l_i_s_t is executed in a subshell environment (see CCOOMMMMAANNDD EEXXEECCUU--
+ TTIIOONN EENNVVIIRROONNMMEENNTT below). Variable assignments and builtin com-
+ mands that affect the shell's environment do not remain in
+ effect after the command completes. The return status is the
+ exit status of _l_i_s_t.
+
+ { _l_i_s_t; }
+ _l_i_s_t is simply executed in the current shell environment. _l_i_s_t
+ must be terminated with a newline or semicolon. This is known
+ as a _g_r_o_u_p _c_o_m_m_a_n_d. The return status is the exit status of
+ _l_i_s_t. Note that unlike the metacharacters (( and )), {{ and }} are
+ _r_e_s_e_r_v_e_d _w_o_r_d_s and must occur where a reserved word is permitted
+ to be recognized. Since they do not cause a word break, they
+ must be separated from _l_i_s_t by whitespace or another shell
+ metacharacter.
+
+ ((_e_x_p_r_e_s_s_i_o_n))
+ The _e_x_p_r_e_s_s_i_o_n is evaluated according to the rules described
+ below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If the value of the expres-
+ sion is non-zero, the return status is 0; otherwise the return
+ status is 1. This is exactly equivalent to lleett ""_e_x_p_r_e_s_s_i_o_n"".
+
+ [[[[ _e_x_p_r_e_s_s_i_o_n ]]]]
+ Return a status of 0 or 1 depending on the evaluation of the
+ conditional expression _e_x_p_r_e_s_s_i_o_n. Expressions are composed of
+ the primaries described below under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS.
+ Word splitting and pathname expansion are not performed on the
+ words between the [[[[ and ]]]]; tilde expansion, parameter and
+ variable expansion, arithmetic expansion, command substitution,
+ process substitution, and quote removal are performed. Condi-
+ tional operators such as --ff must be unquoted to be recognized as
+ primaries.
+
+ When used with [[[[, the << and >> operators sort lexicographically
+ using the current locale.
+
+ When the ==== and !!== operators are used, the string to the right
+ of the operator is considered a pattern and matched according to
+ the rules described below under PPaatttteerrnn MMaattcchhiinngg, as if the eexxtt--
+ gglloobb shell option were enabled. The == operator is equivalent to
+ ====. If the nnooccaasseemmaattcchh shell option is enabled, the match is
+ performed without regard to the case of alphabetic characters.
+ The return value is 0 if the string matches (====) or does not
+ match (!!==) the pattern, and 1 otherwise. Any part of the pat-
+ tern may be quoted to force the quoted portion to be matched as
+ a string.
+
+ An additional binary operator, ==~~, is available, with the same
+ precedence as ==== and !!==. When it is used, the string to the
+ right of the operator is considered a POSIX extended regular
+ expression and matched accordingly (as in _r_e_g_e_x(3)). The return
+ value is 0 if the string matches the pattern, and 1 otherwise.
+ If the regular expression is syntactically incorrect, the condi-
+ tional expression's return value is 2. If the nnooccaasseemmaattcchh shell
+ option is enabled, the match is performed without regard to the
+ case of alphabetic characters. Any part of the pattern may be
+ quoted to force the quoted portion to be matched as a string.
+ Bracket expressions in regular expressions must be treated care-
+ fully, since normal quoting characters lose their meanings
+ between brackets. If the pattern is stored in a shell variable,
+ quoting the variable expansion forces the entire pattern to be
+ matched as a string. Substrings matched by parenthesized subex-
+ pressions within the regular expression are saved in the array
+ variable BBAASSHH__RREEMMAATTCCHH. The element of BBAASSHH__RREEMMAATTCCHH with index 0
+ is the portion of the string matching the entire regular expres-
+ sion. The element of BBAASSHH__RREEMMAATTCCHH with index _n is the portion
+ of the string matching the _nth parenthesized subexpression.
+
+ Expressions may be combined using the following operators,
+ listed in decreasing order of precedence:
+
+ (( _e_x_p_r_e_s_s_i_o_n ))
+ Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to
+ override the normal precedence of operators.
+ !! _e_x_p_r_e_s_s_i_o_n
+ True if _e_x_p_r_e_s_s_i_o_n is false.
+ _e_x_p_r_e_s_s_i_o_n_1 &&&& _e_x_p_r_e_s_s_i_o_n_2
+ True if both _e_x_p_r_e_s_s_i_o_n_1 and _e_x_p_r_e_s_s_i_o_n_2 are true.
+ _e_x_p_r_e_s_s_i_o_n_1 |||| _e_x_p_r_e_s_s_i_o_n_2
+ True if either _e_x_p_r_e_s_s_i_o_n_1 or _e_x_p_r_e_s_s_i_o_n_2 is true.
+
+ The &&&& and |||| operators do not evaluate _e_x_p_r_e_s_s_i_o_n_2 if the value
+ of _e_x_p_r_e_s_s_i_o_n_1 is sufficient to determine the return value of
+ the entire conditional expression.
+
+ ffoorr _n_a_m_e [ [ iinn [ _w_o_r_d _._._. ] ] ; ] ddoo _l_i_s_t ; ddoonnee
+ The list of words following iinn is expanded, generating a list of
+ items. The variable _n_a_m_e is set to each element of this list in
+ turn, and _l_i_s_t is executed each time. If the iinn _w_o_r_d is omit-
+ ted, the ffoorr command executes _l_i_s_t once for each positional
+ parameter that is set (see PPAARRAAMMEETTEERRSS below). The return status
+ is the exit status of the last command that executes. If the
+ expansion of the items following iinn results in an empty list, no
+ commands are executed, and the return status is 0.
+
+ ffoorr (( _e_x_p_r_1 ; _e_x_p_r_2 ; _e_x_p_r_3 )) ; ddoo _l_i_s_t ; ddoonnee
+ First, the arithmetic expression _e_x_p_r_1 is evaluated according to
+ the rules described below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. The
+ arithmetic expression _e_x_p_r_2 is then evaluated repeatedly until
+ it evaluates to zero. Each time _e_x_p_r_2 evaluates to a non-zero
+ value, _l_i_s_t is executed and the arithmetic expression _e_x_p_r_3 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 _l_i_s_t that is executed, or false if any of the expres-
+ sions is invalid.
+
+ sseelleecctt _n_a_m_e [ iinn _w_o_r_d ] ; ddoo _l_i_s_t ; ddoonnee
+ The list of words following iinn is expanded, generating a list of
+ items. The set of expanded words is printed on the standard
+ error, each preceded by a number. If the iinn _w_o_r_d is omitted,
+ the positional parameters are printed (see PPAARRAAMMEETTEERRSS below).
+ The PPSS33 prompt is then displayed and a line read from the stan-
+ dard input. If the line consists of a number corresponding to
+ one of the displayed words, then the value of _n_a_m_e is set to
+ that word. If the line is empty, the words and prompt are dis-
+ played again. If EOF is read, the command completes. Any other
+ value read causes _n_a_m_e to be set to null. The line read is
+ saved in the variable RREEPPLLYY. The _l_i_s_t is executed after each
+ selection until a bbrreeaakk command is executed. The exit status of
+ sseelleecctt is the exit status of the last command executed in _l_i_s_t,
+ or zero if no commands were executed.
+
+ ccaassee _w_o_r_d iinn [ [(] _p_a_t_t_e_r_n [ || _p_a_t_t_e_r_n ] ... ) _l_i_s_t ;; ] ... eessaacc
+ A ccaassee command first expands _w_o_r_d, and tries to match it against
+ each _p_a_t_t_e_r_n in turn, using the matching rules described under
+ PPaatttteerrnn MMaattcchhiinngg below. The _w_o_r_d is expanded using tilde expan-
+ sion, parameter and variable expansion, arithmetic expansion,
+ command substitution, process substitution and quote removal.
+ Each _p_a_t_t_e_r_n examined is expanded using tilde expansion, parame-
+ ter and variable expansion, arithmetic expansion, command sub-
+ stitution, and process substitution. If the nnooccaasseemmaattcchh shell
+ option is enabled, the match is performed without regard to the
+ case of alphabetic characters. When a match is found, the cor-
+ responding _l_i_s_t is executed. If the ;;;; operator is used, no
+ subsequent matches are attempted after the first pattern match.
+ Using ;;&& in place of ;;;; causes execution to continue with the
+ _l_i_s_t associated with the next set of patterns. Using ;;;;&& in
+ place of ;;;; causes the shell to test the next pattern list in
+ the statement, if any, and execute any associated _l_i_s_t on a suc-
+ cessful match. The exit status is zero if no pattern matches.
+ Otherwise, it is the exit status of the last command executed in
+ _l_i_s_t.
+
+ iiff _l_i_s_t; tthheenn _l_i_s_t; [ eelliiff _l_i_s_t; tthheenn _l_i_s_t; ] ... [ eellssee _l_i_s_t; ] ffii
+ The iiff _l_i_s_t is executed. If its exit status is zero, the tthheenn
+ _l_i_s_t is executed. Otherwise, each eelliiff _l_i_s_t is executed in
+ turn, and if its exit status is zero, the corresponding tthheenn
+ _l_i_s_t is executed and the command completes. Otherwise, the eellssee
+ _l_i_s_t is executed, if present. The exit status is the exit sta-
+ tus of the last command executed, or zero if no condition tested
+ true.
+
+ wwhhiillee _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee
+ uunnttiill _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee
+ The wwhhiillee command continuously executes the list _l_i_s_t_-_2 as long
+ as the last command in the list _l_i_s_t_-_1 returns an exit status of
+ zero. The uunnttiill command is identical to the wwhhiillee command,
+ except that the test is negated: _l_i_s_t_-_2 is executed as long as
+ the last command in _l_i_s_t_-_1 returns a non-zero exit status. The
+ exit status of the wwhhiillee and uunnttiill commands is the exit status
+ of the last command executed in _l_i_s_t_-_2, or zero if none was exe-
+ cuted.
+
+ CCoopprroocceesssseess
+ A _c_o_p_r_o_c_e_s_s is a shell command preceded by the ccoopprroocc reserved word. A
+ coprocess is executed asynchronously in a subshell, as if the command
+ had been terminated with the && control operator, with a two-way pipe
+ established between the executing shell and the coprocess.
+
+ The format for a coprocess is:
+
+ ccoopprroocc [_N_A_M_E] _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s]
+
+ This creates a coprocess named _N_A_M_E. If _N_A_M_E is not supplied, the
+ default name is CCOOPPRROOCC. _N_A_M_E must not be supplied if _c_o_m_m_a_n_d is a _s_i_m_-
+ _p_l_e _c_o_m_m_a_n_d (see above); otherwise, it is interpreted as the first word
+ of the simple command. When the coprocess is executed, the shell cre-
+ ates an array variable (see AArrrraayyss below) named _N_A_M_E in the context of
+ the executing shell. The standard output of _c_o_m_m_a_n_d is connected via a
+ pipe to a file descriptor in the executing shell, and that file
+ descriptor is assigned to _N_A_M_E[0]. The standard input of _c_o_m_m_a_n_d is
+ connected via a pipe to a file descriptor in the executing shell, and
+ that file descriptor is assigned to _N_A_M_E[1]. This pipe is established
+ before any redirections specified by the command (see RREEDDIIRREECCTTIIOONN
+ below). The file descriptors can be utilized as arguments to shell
+ commands and redirections using standard word expansions. Other than
+ those created to execute command and process substitutions, the file
+ descriptors are not available in subshells. The process ID of the
+ shell spawned to execute the coprocess is available as the value of the
+ variable _N_A_M_E_PID. The wwaaiitt builtin command may be used to wait for
+ the coprocess to terminate.
+
+ Since the coprocess is created as an asynchronous command, the ccoopprroocc
+ command always returns success. The return status of a coprocess is
+ the exit status of _c_o_m_m_a_n_d.
+
+ SShheellll FFuunnccttiioonn DDeeffiinniittiioonnss
+ A shell function is an object that is called like a simple command and
+ executes a compound command with a new set of positional parameters.
+ Shell functions are declared as follows:
+
+ _n_a_m_e () _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n]
+ ffuunnccttiioonn _n_a_m_e [()] _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n]
+ This defines a function named _n_a_m_e. The reserved word ffuunnccttiioonn
+ is optional. If the ffuunnccttiioonn reserved word is supplied, the
+ parentheses are optional. The _b_o_d_y of the function is the com-
+ pound command _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d (see CCoommppoouunndd CCoommmmaannddss above).
+ That command is usually a _l_i_s_t of commands between { and }, but
+ may be any command listed under CCoommppoouunndd CCoommmmaannddss above, with
+ one exception: If the ffuunnccttiioonn reserved word is used, but the
+ parentheses are not supplied, the braces are required. _c_o_m_-
+ _p_o_u_n_d_-_c_o_m_m_a_n_d is executed whenever _n_a_m_e is specified as the name
+ of a simple command. When in _p_o_s_i_x _m_o_d_e, _n_a_m_e may not be the
+ name of one of the POSIX _s_p_e_c_i_a_l _b_u_i_l_t_i_n_s. Any redirections
+ (see RREEDDIIRREECCTTIIOONN below) specified when a function is defined are
+ performed when the function is executed. 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 exe-
+ cuted, the exit status of a function is the exit status of the
+ last command executed in the body. (See FFUUNNCCTTIIOONNSS below.)
+
+CCOOMMMMEENNTTSS
+ In a non-interactive shell, or an interactive shell in which the iinntteerr--
+ aaccttiivvee__ccoommmmeennttss option to the sshhoopptt builtin is enabled (see SSHHEELLLL
+ BBUUIILLTTIINN CCOOMMMMAANNDDSS below), a word beginning with ## causes that word and
+ all remaining characters on that line to be ignored. An interactive
+ shell without the iinntteerraaccttiivvee__ccoommmmeennttss option enabled does not allow
+ comments. The iinntteerraaccttiivvee__ccoommmmeennttss option is on by default in interac-
+ tive shells.
+
+QQUUOOTTIINNGG
+ _Q_u_o_t_i_n_g is used to remove the special meaning of certain characters or
+ words to the shell. Quoting can be used to disable special treatment
+ for special characters, to prevent reserved words from being recognized
+ as such, and to prevent parameter expansion.
+
+ Each of the _m_e_t_a_c_h_a_r_a_c_t_e_r_s listed above under DDEEFFIINNIITTIIOONNSS 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 HHIISS--
+ TTOORRYY EEXXPPAANNSSIIOONN below), the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character, usually !!, must
+ be quoted to prevent history expansion.
+
+ There are three quoting mechanisms: the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r, single
+ quotes, and double quotes.
+
+ A non-quoted backslash (\\) is the _e_s_c_a_p_e _c_h_a_r_a_c_t_e_r. It preserves the
+ literal value of the next character that follows, with the exception of
+ <newline>. If a \\<newline> pair appears, and the backslash is not
+ itself quoted, the \\<newline> is treated as a line continuation (that
+ is, it is removed from the input stream and effectively ignored).
+
+ Enclosing characters in single quotes preserves the literal value of
+ each character within the quotes. A single quote may not occur between
+ single quotes, even when preceded by a backslash.
+
+ Enclosing characters in double quotes preserves the literal value of
+ all characters within the quotes, with the exception of $$, ``, \\, and,
+ when history expansion is enabled, !!. When the shell is in _p_o_s_i_x _m_o_d_e,
+ the !! has no special meaning within double quotes, even when history
+ expansion is enabled. The characters $$ and `` retain their special
+ meaning within double quotes. The backslash retains its special mean-
+ ing only when followed by one of the following characters: $$, ``, "", \\,
+ or <<nneewwlliinnee>>. A double quote may be quoted within double quotes by
+ preceding it with a backslash. If enabled, history expansion will be
+ performed unless an !! appearing in double quotes is escaped using a
+ backslash. The backslash preceding the !! is not removed.
+
+ The special parameters ** and @@ have special meaning when in double
+ quotes (see PPAARRAAMMEETTEERRSS below).
+
+ Words of the form $$'_s_t_r_i_n_g' are treated specially. The word expands to
+ _s_t_r_i_n_g, with backslash-escaped characters replaced as specified by the
+ ANSI C standard. Backslash escape sequences, if present, are decoded
+ as follows:
+ \\aa alert (bell)
+ \\bb backspace
+ \\ee
+ \\EE an escape character
+ \\ff form feed
+ \\nn new line
+ \\rr carriage return
+ \\tt horizontal tab
+ \\vv vertical tab
+ \\\\ backslash
+ \\'' single quote
+ \\"" double quote
+ \\?? question mark
+ \\_n_n_n the eight-bit character whose value is the octal value
+ _n_n_n (one to three octal digits)
+ \\xx_H_H the eight-bit character whose value is the hexadecimal
+ value _H_H (one or two hex digits)
+ \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value _H_H_H_H (one to four hex digits)
+ \\UU_H_H_H_H_H_H_H_H
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits)
+ \\cc_x a control-_x character
+
+ The expanded result is single-quoted, as if the dollar sign had not
+ been present.
+
+ A double-quoted string preceded by a dollar sign ($$"_s_t_r_i_n_g") will cause
+ the string to be translated according to the current locale. If the
+ current locale is CC or PPOOSSIIXX, the dollar sign is ignored. If the
+ string is translated and replaced, the replacement is double-quoted.
+
+PPAARRAAMMEETTEERRSS
+ A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num-
+ ber, or one of the special characters listed below under SSppeecciiaall PPaarraamm--
+ eetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a
+ _v_a_l_u_e and zero or more _a_t_t_r_i_b_u_t_e_s. Attributes are assigned using the
+ ddeeccllaarree builtin command (see ddeeccllaarree below in SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS).
+
+ 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 uunnsseett builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+
+ A _v_a_r_i_a_b_l_e may be assigned to by a statement of the form
+
+ _n_a_m_e=[_v_a_l_u_e]
+
+ If _v_a_l_u_e is not given, the variable is assigned the null string. All
+ _v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com-
+ mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN--
+ SSIIOONN below). If the variable has its iinntteeggeerr attribute set, then _v_a_l_u_e
+ is evaluated as an arithmetic expression even if the $((...)) expansion
+ is not used (see AArriitthhmmeettiicc EExxppaannssiioonn below). Word splitting is not
+ performed, with the exception of ""$$@@"" as explained below under SSppeecciiaall
+ PPaarraammeetteerrss. Pathname expansion is not performed. Assignment state-
+ ments may also appear as arguments to the aalliiaass, ddeeccllaarree, ttyyppeesseett,
+ eexxppoorrtt, rreeaaddoonnllyy, and llooccaall builtin commands (_d_e_c_l_a_r_a_t_i_o_n commands).
+ When in _p_o_s_i_x _m_o_d_e, these builtins may appear in a command after one or
+ more instances of the ccoommmmaanndd builtin and retain these assignment
+ statement properties.
+
+ In the context where an assignment statement is assigning a value to a
+ shell variable or array index, the += operator can be used to append to
+ or add to the variable's previous value. This includes arguments to
+ builtin commands such as ddeeccllaarree that accept assignment statements
+ (_d_e_c_l_a_r_a_t_i_o_n commands). When += is applied to a variable for which the
+ _i_n_t_e_g_e_r attribute has been set, _v_a_l_u_e is evaluated as an arithmetic
+ expression and added to the variable's current value, which is also
+ evaluated. When += is applied to an array variable using compound
+ assignment (see AArrrraayyss below), the variable's value is not unset (as it
+ is when using =), and new values are appended to the array beginning at
+ one greater than the array's maximum index (for indexed arrays) or
+ added as additional key-value pairs in an associative array. When
+ applied to a string-valued variable, _v_a_l_u_e is expanded and appended to
+ the variable's value.
+
+ A variable can be assigned the _n_a_m_e_r_e_f attribute using the --nn option to
+ the ddeeccllaarree or llooccaall builtin commands (see the descriptions of ddeeccllaarree
+ and llooccaall below) to create a _n_a_m_e_r_e_f, or a reference to another vari-
+ able. This allows variables to be manipulated indirectly. Whenever
+ the nameref variable is referenced, assigned to, unset, or has its
+ attributes modified (other than using or changing the _n_a_m_e_r_e_f attribute
+ itself), the operation is actually performed on the variable specified
+ by the nameref variable's value. A nameref is commonly used within
+ shell functions to refer to a variable whose name is passed as an argu-
+ ment to the function. For instance, if a variable name is passed to a
+ shell function as its first argument, running
+ declare -n ref=$1
+ inside the function creates a nameref variable rreeff whose value is the
+ variable name passed as the first argument. References and assignments
+ to rreeff, and changes to its attributes, are treated as references,
+ assignments, and attribute modifications to the variable whose name was
+ passed as $$11. If the control variable in a ffoorr loop has the nameref
+ attribute, the list of words can be a list of shell variables, and a
+ name reference will be established for each word in the list, in turn,
+ when the loop is executed. Array variables cannot be given the nnaammeerreeff
+ attribute. However, nameref variables can reference array variables
+ and subscripted array variables. Namerefs can be unset using the --nn
+ option to the uunnsseett builtin. Otherwise, if uunnsseett is executed with the
+ name of a nameref variable as an argument, the variable referenced by
+ the nameref variable will be unset.
+
+ PPoossiittiioonnaall PPaarraammeetteerrss
+ A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r is a parameter denoted by one or more digits,
+ other than the single digit 0. Positional parameters are assigned from
+ the shell's arguments when it is invoked, and may be reassigned using
+ the sseett builtin command. Positional parameters may not be assigned to
+ with assignment statements. The positional parameters are temporarily
+ replaced when a shell function is executed (see FFUUNNCCTTIIOONNSS below).
+
+ When a positional parameter consisting of more than a single digit is
+ expanded, it must be enclosed in braces (see EEXXPPAANNSSIIOONN below).
+
+ SSppeecciiaall PPaarraammeetteerrss
+ The shell treats several parameters specially. These parameters may
+ only be referenced; assignment to them is not allowed.
+ ** Expands to the positional parameters, starting from one. When
+ the expansion is not within double quotes, each positional
+ parameter expands to a separate word. In contexts where it is
+ performed, those words are subject to further word splitting and
+ pathname expansion. 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 IIFFSS special
+ variable. That is, "$$**" is equivalent to "$$11_c$$22_c......", where _c
+ is the first character of the value of the IIFFSS variable. If IIFFSS
+ is unset, the parameters are separated by spaces. If IIFFSS is
+ null, the parameters are joined without intervening separators.
+ @@ Expands to the positional parameters, starting from one. In
+ contexts where word splitting is performed, this expands each
+ positional parameter to a separate word; if not within double
+ quotes, these words are subject to word splitting. In contexts
+ where word splitting is not performed, this expands to a single
+ word with each positional parameter separated by a space. When
+ the expansion occurs within double quotes, each parameter
+ expands to a separate word. That is, "$$@@" is equivalent to "$$11"
+ "$$22" ... If the double-quoted expansion occurs within a word,
+ the expansion of the first parameter is joined with the begin-
+ ning part of the original word, and the expansion of the last
+ parameter is joined with the last part of the original word.
+ When there are no positional parameters, "$$@@" and $$@@ expand to
+ nothing (i.e., they are removed).
+ ## Expands to the number of positional parameters in decimal.
+ ?? Expands to the exit status of the most recently executed fore-
+ ground pipeline.
+ -- Expands to the current option flags as specified upon invoca-
+ tion, by the sseett builtin command, or those set by the shell
+ itself (such as the --ii option).
+ $$ Expands to the process ID of the shell. In a () subshell, it
+ expands to the process ID of the current shell, not the sub-
+ shell.
+ !! Expands to the process ID of the job most recently placed into
+ the background, whether executed as an asynchronous command or
+ using the bbgg builtin (see JJOOBB CCOONNTTRROOLL below).
+ 00 Expands to the name of the shell or shell script. This is set
+ at shell initialization. If bbaasshh is invoked with a file of com-
+ mands, $$00 is set to the name of that file. If bbaasshh is started
+ with the --cc option, then $$00 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 bbaasshh, as given by argument
+ zero.
+ __ At shell startup, set to the absolute pathname used to invoke
+ the shell or shell script being executed as passed in the envi-
+ ronment or argument list. Subsequently, expands to the last
+ argument to the previous simple command executed in the fore-
+ ground, 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 currently being checked.
+
+ SShheellll VVaarriiaabblleess
+ The following variables are set by the shell:
+
+ BBAASSHH Expands to the full filename used to invoke this instance of
+ bbaasshh.
+ BBAASSHHOOPPTTSS
+ A colon-separated list of enabled shell options. Each word in
+ the list is a valid argument for the --ss option to the sshhoopptt
+ builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The options
+ appearing in BBAASSHHOOPPTTSS are those reported as _o_n by sshhoopptt. If
+ this variable is in the environment when bbaasshh starts up, each
+ shell option in the list will be enabled before reading any
+ startup files. This variable is read-only.
+ BBAASSHHPPIIDD
+ Expands to the process ID of the current bbaasshh process. This
+ differs from $$$$ under certain circumstances, such as subshells
+ that do not require bbaasshh to be re-initialized. Assignments to
+ BBAASSHHPPIIDD have no effect. If BBAASSHHPPIIDD is unset, it loses its spe-
+ cial properties, even if it is subsequently reset.
+ BBAASSHH__AALLIIAASSEESS
+ An associative array variable whose members correspond to the
+ internal list of aliases as maintained by the aalliiaass builtin.
+ Elements added to this array appear in the alias list; however,
+ unsetting array elements currently does not cause aliases to be
+ removed from the alias list. If BBAASSHH__AALLIIAASSEESS is unset, it loses
+ its special properties, even if it is subsequently reset.
+ BBAASSHH__AARRGGCC
+ An array variable whose values are the number of parameters in
+ each frame of the current bbaasshh execution call stack. The number
+ of parameters to the current subroutine (shell function or
+ script executed with .. or ssoouurrccee) is at the top of the stack.
+ When a subroutine is executed, the number of parameters passed
+ is pushed onto BBAASSHH__AARRGGCC. The shell sets BBAASSHH__AARRGGCC only when in
+ extended debugging mode (see the description of the eexxttddeebbuugg
+ option to the sshhoopptt builtin below). Setting eexxttddeebbuugg after the
+ shell has started to execute a script, or referencing this vari-
+ able when eexxttddeebbuugg is not set, may result in inconsistent val-
+ ues.
+ BBAASSHH__AARRGGVV
+ An array variable containing all of the parameters in the cur-
+ rent bbaasshh 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 exe-
+ cuted, the parameters supplied are pushed onto BBAASSHH__AARRGGVV. The
+ shell sets BBAASSHH__AARRGGVV only when in extended debugging mode (see
+ the description of the eexxttddeebbuugg option to the sshhoopptt builtin
+ below). Setting eexxttddeebbuugg after the shell has started to execute
+ a script, or referencing this variable when eexxttddeebbuugg is not set,
+ may result in inconsistent values.
+ BBAASSHH__AARRGGVV00
+ When referenced, this variable expands to the name of the shell
+ or shell script (identical to $$00; see the description of special
+ parameter 0 above). Assignment to BBAASSHH__AARRGGVV00 causes the value
+ assigned to also be assigned to $$00. If BBAASSHH__AARRGGVV00 is unset, it
+ loses its special properties, even if it is subsequently reset.
+ BBAASSHH__CCMMDDSS
+ An associative array variable whose members correspond to the
+ internal hash table of commands as maintained by the hhaasshh
+ builtin. Elements added to this array appear in the hash table;
+ however, unsetting array elements currently does not cause com-
+ mand names to be removed from the hash table. If BBAASSHH__CCMMDDSS is
+ unset, it loses its special properties, even if it is subse-
+ quently reset.
+ BBAASSHH__CCOOMMMMAANNDD
+ 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.
+ BBAASSHH__EEXXEECCUUTTIIOONN__SSTTRRIINNGG
+ The command argument to the --cc invocation option.
+ BBAASSHH__LLIINNEENNOO
+ An array variable whose members are the line numbers in source
+ files where each corresponding member of FFUUNNCCNNAAMMEE was invoked.
+ $${{BBAASSHH__LLIINNEENNOO[[_$_i]]}} is the line number in the source file
+ ($${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}}) where $${{FFUUNNCCNNAAMMEE[[_$_i]]}} was called (or
+ $${{BBAASSHH__LLIINNEENNOO[[_$_i_-_1]]}} if referenced within another shell func-
+ tion). Use LLIINNEENNOO to obtain the current line number.
+ BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH
+ A colon-separated list of directories in which the shell looks
+ for dynamically loadable builtins specified by the eennaabbllee com-
+ mand.
+ BBAASSHH__RREEMMAATTCCHH
+ An array variable whose members are assigned by the ==~~ binary
+ operator to the [[[[ conditional command. The element with index
+ 0 is the portion of the string matching the entire regular
+ expression. The element with index _n is the portion of the
+ string matching the _nth parenthesized subexpression. This vari-
+ able is read-only.
+ BBAASSHH__SSOOUURRCCEE
+ An array variable whose members are the source filenames where
+ the corresponding shell function names in the FFUUNNCCNNAAMMEE array
+ variable are defined. The shell function $${{FFUUNNCCNNAAMMEE[[_$_i]]}} is
+ defined in the file $${{BBAASSHH__SSOOUURRCCEE[[_$_i]]}} and called from
+ $${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}}.
+ BBAASSHH__SSUUBBSSHHEELLLL
+ Incremented by one within each subshell or subshell environment
+ when the shell begins executing in that environment. The ini-
+ tial value is 0.
+ BBAASSHH__VVEERRSSIINNFFOO
+ A readonly array variable whose members hold version information
+ for this instance of bbaasshh. The values assigned to the array
+ members are as follows:
+ BBAASSHH__VVEERRSSIINNFFOO[[0]] The major version number (the _r_e_l_e_a_s_e).
+ BBAASSHH__VVEERRSSIINNFFOO[[1]] The minor version number (the _v_e_r_s_i_o_n).
+ BBAASSHH__VVEERRSSIINNFFOO[[2]] The patch level.
+ BBAASSHH__VVEERRSSIINNFFOO[[3]] The build version.
+ BBAASSHH__VVEERRSSIINNFFOO[[4]] The release status (e.g., _b_e_t_a_1).
+ BBAASSHH__VVEERRSSIINNFFOO[[5]] The value of MMAACCHHTTYYPPEE.
+ BBAASSHH__VVEERRSSIIOONN
+ Expands to a string describing the version of this instance of
+ bbaasshh.
+ CCOOMMPP__CCWWOORRDD
+ An index into $${{CCOOMMPP__WWOORRDDSS}} of the word containing the current
+ cursor position. This variable is available only in shell func-
+ tions invoked by the programmable completion facilities (see
+ PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
+ CCOOMMPP__KKEEYY
+ The key (or final key of a key sequence) used to invoke the cur-
+ rent completion function.
+ CCOOMMPP__LLIINNEE
+ The current command line. This variable is available only in
+ shell functions and external commands invoked by the program-
+ mable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
+ CCOOMMPP__PPOOIINNTT
+ The index of the current cursor position relative to the begin-
+ ning 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 $${{##CCOOMMPP__LLIINNEE}}. This variable is available only in
+ shell functions and external commands invoked by the program-
+ mable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
+ CCOOMMPP__TTYYPPEE
+ Set to an integer value corresponding to the type of completion
+ attempted that caused a completion function to be called: _T_A_B,
+ for normal completion, _?, for listing completions after succes-
+ sive tabs, _!, for listing alternatives on partial word comple-
+ tion, _@, to list completions if the word is not unmodified, or
+ _%, for menu completion. This variable is available only in
+ shell functions and external commands invoked by the program-
+ mable completion facilities (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
+ CCOOMMPP__WWOORRDDBBRREEAAKKSS
+ The set of characters that the rreeaaddlliinnee library treats as word
+ separators when performing word completion. If CCOOMMPP__WWOORRDDBBRREEAAKKSS
+ is unset, it loses its special properties, even if it is subse-
+ quently reset.
+ CCOOMMPP__WWOORRDDSS
+ An array variable (see AArrrraayyss below) consisting of the individ-
+ ual words in the current command line. The line is split into
+ words as rreeaaddlliinnee would split it, using CCOOMMPP__WWOORRDDBBRREEAAKKSS as
+ described above. This variable is available only in shell func-
+ tions invoked by the programmable completion facilities (see
+ PPrrooggrraammmmaabbllee CCoommpplleettiioonn below).
+ CCOOPPRROOCC An array variable (see AArrrraayyss below) created to hold the file
+ descriptors for output from and input to an unnamed coprocess
+ (see CCoopprroocceesssseess above).
+ DDIIRRSSTTAACCKK
+ An array variable (see AArrrraayyss below) containing the current con-
+ tents of the directory stack. Directories appear in the stack
+ in the order they are displayed by the ddiirrss builtin. Assigning
+ to members of this array variable may be used to modify directo-
+ ries already in the stack, but the ppuusshhdd and ppooppdd builtins must
+ be used to add and remove directories. Assignment to this vari-
+ able will not change the current directory. If DDIIRRSSTTAACCKK is
+ unset, it loses its special properties, even if it is subse-
+ quently reset.
+ EEPPOOCCHHRREEAALLTTIIMMEE
+ Each time this parameter is referenced, it expands to the number
+ of seconds since the Unix Epoch (see _t_i_m_e(3)) as a floating
+ point value with micro-second granularity. Assignments to
+ EEPPOOCCHHRREEAALLTTIIMMEE are ignored. If EEPPOOCCHHRREEAALLTTIIMMEE is unset, it loses
+ its special properties, even if it is subsequently reset.
+ EEPPOOCCHHSSEECCOONNDDSS
+ Each time this parameter is referenced, it expands to the number
+ of seconds since the Unix Epoch (see _t_i_m_e(3)). Assignments to
+ EEPPOOCCHHSSEECCOONNDDSS are ignored. If EEPPOOCCHHSSEECCOONNDDSS is unset, it loses
+ its special properties, even if it is subsequently reset.
+ EEUUIIDD Expands to the effective user ID of the current user, initial-
+ ized at shell startup. This variable is readonly.
+ FFUUNNCCNNAAMMEE
+ 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 bot-
+ tom-most element (the one with the highest index) is "main".
+ This variable exists only when a shell function is executing.
+ Assignments to FFUUNNCCNNAAMMEE have no effect. If FFUUNNCCNNAAMMEE is unset,
+ it loses its special properties, even if it is subsequently
+ reset.
+
+ This variable can be used with BBAASSHH__LLIINNEENNOO and BBAASSHH__SSOOUURRCCEE.
+ Each element of FFUUNNCCNNAAMMEE has corresponding elements in
+ BBAASSHH__LLIINNEENNOO and BBAASSHH__SSOOUURRCCEE to describe the call stack. For
+ instance, $${{FFUUNNCCNNAAMMEE[[_$_i]]}} was called from the file
+ $${{BBAASSHH__SSOOUURRCCEE[[_$_i_+_1]]}} at line number $${{BBAASSHH__LLIINNEENNOO[[_$_i]]}}. The
+ ccaalllleerr builtin displays the current call stack using this infor-
+ mation.
+ GGRROOUUPPSS An array variable containing the list of groups of which the
+ current user is a member. Assignments to GGRROOUUPPSS have no effect.
+ If GGRROOUUPPSS is unset, it loses its special properties, even if it
+ is subsequently reset.
+ HHIISSTTCCMMDD
+ The history number, or index in the history list, of the current
+ command. If HHIISSTTCCMMDD is unset, it loses its special properties,
+ even if it is subsequently reset.
+ HHOOSSTTNNAAMMEE
+ Automatically set to the name of the current host.
+ HHOOSSTTTTYYPPEE
+ Automatically set to a string that uniquely describes the type
+ of machine on which bbaasshh is executing. The default is system-
+ dependent.
+ LLIINNEENNOO Each time this parameter is referenced, the shell substitutes a
+ decimal number representing the current sequential line number
+ (starting with 1) within a script or function. When not in a
+ script or function, the value substituted is not guaranteed to
+ be meaningful. If LLIINNEENNOO is unset, it loses its special proper-
+ ties, even if it is subsequently reset.
+ MMAACCHHTTYYPPEE
+ Automatically set to a string that fully describes the system
+ type on which bbaasshh is executing, in the standard GNU _c_p_u_-_c_o_m_-
+ _p_a_n_y_-_s_y_s_t_e_m format. The default is system-dependent.
+ MMAAPPFFIILLEE
+ An array variable (see AArrrraayyss below) created to hold the text
+ read by the mmaappffiillee builtin when no variable name is supplied.
+ OOLLDDPPWWDD The previous working directory as set by the ccdd command.
+ OOPPTTAARRGG The value of the last option argument processed by the ggeettooppttss
+ builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+ OOPPTTIINNDD The index of the next argument to be processed by the ggeettooppttss
+ builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+ OOSSTTYYPPEE Automatically set to a string that describes the operating sys-
+ tem on which bbaasshh is executing. The default is system-depen-
+ dent.
+ PPIIPPEESSTTAATTUUSS
+ An array variable (see AArrrraayyss below) containing a list of exit
+ status values from the processes in the most-recently-executed
+ foreground pipeline (which may contain only a single command).
+ PPPPIIDD The process ID of the shell's parent. This variable is read-
+ only.
+ PPWWDD The current working directory as set by the ccdd command.
+ RRAANNDDOOMM Each time this parameter is referenced, a random integer between
+ 0 and 32767 is generated. The sequence of random numbers may be
+ initialized by assigning a value to RRAANNDDOOMM. If RRAANNDDOOMM is unset,
+ it loses its special properties, even if it is subsequently
+ reset.
+ RREEAADDLLIINNEE__LLIINNEE
+ The contents of the rreeaaddlliinnee line buffer, for use with "bind -x"
+ (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+ RREEAADDLLIINNEE__PPOOIINNTT
+ The position of the insertion point in the rreeaaddlliinnee line buffer,
+ for use with "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+ RREEPPLLYY Set to the line of input read by the rreeaadd builtin command when
+ no arguments are supplied.
+ SSEECCOONNDDSS
+ Each time this parameter is referenced, the number of seconds
+ since shell invocation is returned. If a value is assigned to
+ SSEECCOONNDDSS, the value returned upon subsequent references is the
+ number of seconds since the assignment plus the value assigned.
+ If SSEECCOONNDDSS is unset, it loses its special properties, even if it
+ is subsequently reset.
+ SSHHEELLLLOOPPTTSS
+ A colon-separated list of enabled shell options. Each word in
+ the list is a valid argument for the --oo option to the sseett
+ builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The options
+ appearing in SSHHEELLLLOOPPTTSS are those reported as _o_n by sseett --oo. If
+ this variable is in the environment when bbaasshh starts up, each
+ shell option in the list will be enabled before reading any
+ startup files. This variable is read-only.
+ SSHHLLVVLL Incremented by one each time an instance of bbaasshh is started.
+ UUIIDD Expands to the user ID of the current user, initialized at shell
+ startup. This variable is readonly.
+
+ The following variables are used by the shell. In some cases, bbaasshh
+ assigns a default value to a variable; these cases are noted below.
+
+ BBAASSHH__CCOOMMPPAATT
+ The value is used to set the shell's compatibility level. See
+ the description of the sshhoopptt builtin below under SSHHEELLLL BBUUIILLTTIINN
+ CCOOMMMMAANNDDSS for a description of the various compatibility levels
+ and their effects. The value may be a decimal number (e.g.,
+ 4.2) or an integer (e.g., 42) corresponding to the desired com-
+ patibility level. If BBAASSHH__CCOOMMPPAATT is unset or set to the empty
+ string, the compatibility level is set to the default for the
+ current version. If BBAASSHH__CCOOMMPPAATT is set to a value that is not
+ one of the valid compatibility levels, the shell prints an error
+ message and sets the compatibility level to the default for the
+ current version. The valid compatibility levels correspond to
+ the compatibility options accepted by the sshhoopptt builtin
+ described below (for example, ccoommppaatt4422 means that 4.2 and 42 are
+ valid values). The current version is also a valid value.
+ BBAASSHH__EENNVV
+ If this parameter is set when bbaasshh is executing a shell script,
+ its value is interpreted as a filename containing commands to
+ initialize the shell, as in _~_/_._b_a_s_h_r_c. The value of BBAASSHH__EENNVV is
+ subjected to parameter expansion, command substitution, and
+ arithmetic expansion before being interpreted as a filename.
+ PPAATTHH is not used to search for the resultant filename.
+ BBAASSHH__XXTTRRAACCEEFFDD
+ If set to an integer corresponding to a valid file descriptor,
+ bbaasshh will write the trace output generated when _s_e_t _-_x is
+ enabled to that file descriptor. The file descriptor is closed
+ when BBAASSHH__XXTTRRAACCEEFFDD is unset or assigned a new value. Unsetting
+ BBAASSHH__XXTTRRAACCEEFFDD or assigning it the empty string causes the trace
+ output to be sent to the standard error. Note that setting
+ BBAASSHH__XXTTRRAACCEEFFDD to 2 (the standard error file descriptor) and then
+ unsetting it will result in the standard error being closed.
+ CCDDPPAATTHH The search path for the ccdd command. This is a colon-separated
+ list of directories in which the shell looks for destination
+ directories specified by the ccdd command. A sample value is
+ ".:~:/usr".
+ CCHHIILLDD__MMAAXX
+ Set the number of exited child status values for the shell to
+ remember. Bash will not allow this value to be decreased below
+ a POSIX-mandated minimum, and there is a maximum value (cur-
+ rently 8192) that this may not exceed. The minimum value is
+ system-dependent.
+ CCOOLLUUMMNNSS
+ Used by the sseelleecctt compound command to determine the terminal
+ width when printing selection lists. Automatically set if the
+ cchheecckkwwiinnssiizzee option is enabled or in an interactive shell upon
+ receipt of a SSIIGGWWIINNCCHH.
+ CCOOMMPPRREEPPLLYY
+ An array variable from which bbaasshh reads the possible completions
+ generated by a shell function invoked by the programmable com-
+ pletion facility (see PPrrooggrraammmmaabbllee CCoommpplleettiioonn below). Each
+ array element contains one possible completion.
+ EEMMAACCSS If bbaasshh finds this variable in the environment when the shell
+ starts with value "t", it assumes that the shell is running in
+ an Emacs shell buffer and disables line editing.
+ EENNVV Similar to BBAASSHH__EENNVV; used when the shell is invoked in _p_o_s_i_x
+ _m_o_d_e.
+ EEXXEECCIIGGNNOORREE
+ A colon-separated list of shell patterns (see PPaatttteerrnn MMaattcchhiinngg)
+ defining the list of filenames to be ignored by command search
+ using PPAATTHH. Files whose full pathnames match one of these pat-
+ terns are not considered executable files for the purposes of
+ completion and command execution via PPAATTHH lookup. This does not
+ affect the behavior of the [[, tteesstt, and [[[[ commands. Full path-
+ names in the command hash table are not subject to EEXXEECCIIGGNNOORREE.
+ Use this variable to ignore shared library files that have the
+ executable bit set, but are not executable files. The pattern
+ matching honors the setting of the eexxttgglloobb shell option.
+ FFCCEEDDIITT The default editor for the ffcc builtin command.
+ FFIIGGNNOORREE
+ A colon-separated list of suffixes to ignore when performing
+ filename completion (see RREEAADDLLIINNEE below). A filename whose suf-
+ fix matches one of the entries in FFIIGGNNOORREE is excluded from the
+ list of matched filenames. A sample value is ".o:~".
+ FFUUNNCCNNEESSTT
+ If set to a numeric value greater than 0, defines a maximum
+ function nesting level. Function invocations that exceed this
+ nesting level will cause the current command to abort.
+ GGLLOOBBIIGGNNOORREE
+ A colon-separated list of patterns defining the set of file
+ names to be ignored by pathname expansion. If a file name
+ matched by a pathname expansion pattern also matches one of the
+ patterns in GGLLOOBBIIGGNNOORREE, it is removed from the list of matches.
+ HHIISSTTCCOONNTTRROOLL
+ A colon-separated list of values controlling how commands are
+ saved on the history list. If the list of values includes
+ _i_g_n_o_r_e_s_p_a_c_e, lines which begin with a ssppaaccee character are not
+ saved in the history list. A value of _i_g_n_o_r_e_d_u_p_s causes lines
+ matching the previous history entry to not be saved. A value of
+ _i_g_n_o_r_e_b_o_t_h is shorthand for _i_g_n_o_r_e_s_p_a_c_e and _i_g_n_o_r_e_d_u_p_s. A value
+ of _e_r_a_s_e_d_u_p_s 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 HHIISSTTCCOONNTTRROOLL 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 HHIISSTTIIGGNNOORREE. 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 HHIISSTTCCOONNTTRROOLL.
+ HHIISSTTFFIILLEE
+ The name of the file in which command history is saved (see HHIISS--
+ TTOORRYY below). The default value is _~_/_._b_a_s_h___h_i_s_t_o_r_y. If unset,
+ the command history is not saved when a shell exits.
+ HHIISSTTFFIILLEESSIIZZEE
+ The maximum number of lines contained in the history file. When
+ this variable is assigned a value, the history file is trun-
+ cated, if necessary, to contain no more than that number of
+ lines by removing the oldest entries. The history file is also
+ truncated to this size after writing it when a shell exits. If
+ the value is 0, the history file is truncated to zero size.
+ Non-numeric values and numeric values less than zero inhibit
+ truncation. The shell sets the default value to the value of
+ HHIISSTTSSIIZZEE after reading any startup files.
+ HHIISSTTIIGGNNOORREE
+ 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 com-
+ plete line (no implicit `**' is appended). Each pattern is
+ tested against the line after the checks specified by HHIISSTTCCOONN--
+ TTRROOLL are applied. In addition to the normal shell pattern
+ matching characters, `&&' matches the previous history line. `&&'
+ may be escaped using a backslash; the backslash is removed
+ before attempting a match. The second and subsequent lines of a
+ multi-line compound command are not tested, and are added to the
+ history regardless of the value of HHIISSTTIIGGNNOORREE. The pattern
+ matching honors the setting of the eexxttgglloobb shell option.
+ HHIISSTTSSIIZZEE
+ The number of commands to remember in the command history (see
+ HHIISSTTOORRYY below). If the value is 0, commands are not saved in
+ the history list. Numeric values less than zero result in every
+ command being saved on the history list (there is no limit).
+ The shell sets the default value to 500 after reading any
+ startup files.
+ HHIISSTTTTIIMMEEFFOORRMMAATT
+ If this variable is set and not null, its value is used as a
+ format string for _s_t_r_f_t_i_m_e(3) to print the time stamp associated
+ with each history entry displayed by the hhiissttoorryy builtin. If
+ this variable is set, time stamps are written to the history
+ file so they may be preserved across shell sessions. This uses
+ the history comment character to distinguish timestamps from
+ other history lines.
+ HHOOMMEE The home directory of the current user; the default argument for
+ the ccdd builtin command. The value of this variable is also used
+ when performing tilde expansion.
+ HHOOSSTTFFIILLEE
+ Contains the name of a file in the same format as _/_e_t_c_/_h_o_s_t_s
+ 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, bbaasshh adds the contents of
+ the new file to the existing list. If HHOOSSTTFFIILLEE is set, but has
+ no value, or does not name a readable file, bbaasshh attempts to
+ read _/_e_t_c_/_h_o_s_t_s to obtain the list of possible hostname comple-
+ tions. When HHOOSSTTFFIILLEE is unset, the hostname list is cleared.
+ IIFFSS The _I_n_t_e_r_n_a_l _F_i_e_l_d _S_e_p_a_r_a_t_o_r that is used for word splitting
+ after expansion and to split lines into words with the rreeaadd
+ builtin command. The default value is ``<space><tab><new-
+ line>''.
+ IIGGNNOORREEEEOOFF
+ Controls the action of an interactive shell on receipt of an EEOOFF
+ character as the sole input. If set, the value is the number of
+ consecutive EEOOFF characters which must be typed as the first
+ characters on an input line before bbaasshh exits. If the variable
+ exists but does not have a numeric value, or has no value, the
+ default value is 10. If it does not exist, EEOOFF signifies the
+ end of input to the shell.
+ IINNPPUUTTRRCC
+ The filename for the rreeaaddlliinnee startup file, overriding the
+ default of _~_/_._i_n_p_u_t_r_c (see RREEAADDLLIINNEE below).
+ IINNSSIIDDEE__EEMMAACCSS
+ If this variable appears in the environment when the shell
+ starts, bbaasshh assumes that it is running inside an Emacs shell
+ buffer and may disable line editing, depending on the value of
+ TTEERRMM.
+ LLAANNGG Used to determine the locale category for any category not
+ specifically selected with a variable starting with LLCC__.
+ LLCC__AALLLL This variable overrides the value of LLAANNGG and any other LLCC__
+ variable specifying a locale category.
+ LLCC__CCOOLLLLAATTEE
+ This variable determines the collation order used when sorting
+ the results of pathname expansion, and determines the behavior
+ of range expressions, equivalence classes, and collating
+ sequences within pathname expansion and pattern matching.
+ LLCC__CCTTYYPPEE
+ This variable determines the interpretation of characters and
+ the behavior of character classes within pathname expansion and
+ pattern matching.
+ LLCC__MMEESSSSAAGGEESS
+ This variable determines the locale used to translate double-
+ quoted strings preceded by a $$.
+ LLCC__NNUUMMEERRIICC
+ This variable determines the locale category used for number
+ formatting.
+ LLCC__TTIIMMEE
+ This variable determines the locale category used for data and
+ time formatting.
+ LLIINNEESS Used by the sseelleecctt compound command to determine the column
+ length for printing selection lists. Automatically set if the
+ cchheecckkwwiinnssiizzee option is enabled or in an interactive shell upon
+ receipt of a SSIIGGWWIINNCCHH.
+ MMAAIILL If this parameter is set to a file or directory name and the
+ MMAAIILLPPAATTHH variable is not set, bbaasshh informs the user of the
+ arrival of mail in the specified file or Maildir-format direc-
+ tory.
+ MMAAIILLCCHHEECCKK
+ Specifies how often (in seconds) bbaasshh checks for mail. 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.
+ MMAAIILLPPAATTHH
+ A colon-separated list of filenames to be checked for mail. The
+ message to be printed when mail arrives in a particular file may
+ be specified by separating the filename from the message with a
+ `?'. When used in the text of the message, $$__ expands to the
+ name of the current mailfile. Example:
+ MMAAIILLPPAATTHH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has
+ mail!"'
+ BBaasshh can be configured to supply a default value for this vari-
+ able (there is no value by default), but the location of the
+ user mail files that it uses is system dependent (e.g.,
+ /var/mail/$$UUSSEERR).
+ OOPPTTEERRRR If set to the value 1, bbaasshh displays error messages generated by
+ the ggeettooppttss builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+ OOPPTTEERRRR is initialized to 1 each time the shell is invoked or a
+ shell script is executed.
+ PPAATTHH The search path for commands. It is a colon-separated list of
+ directories in which the shell looks for commands (see CCOOMMMMAANNDD
+ EEXXEECCUUTTIIOONN below). A zero-length (null) directory name in the
+ value of PPAATTHH indicates the current directory. A null directory
+ name may appear as two adjacent colons, or as an initial or
+ trailing colon. The default path is system-dependent, and is
+ set by the administrator who installs bbaasshh. A common value is
+ ``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''.
+ PPOOSSIIXXLLYY__CCOORRRREECCTT
+ If this variable is in the environment when bbaasshh starts, the
+ shell enters _p_o_s_i_x _m_o_d_e before reading the startup files, as if
+ the ----ppoossiixx invocation option had been supplied. If it is set
+ while the shell is running, bbaasshh enables _p_o_s_i_x _m_o_d_e, as if the
+ command _s_e_t _-_o _p_o_s_i_x had been executed. When the shell enters
+ _p_o_s_i_x _m_o_d_e, it sets this variable if it was not already set.
+ PPRROOMMPPTT__CCOOMMMMAANNDD
+ If set, the value is executed as a command prior to issuing each
+ primary prompt.
+ PPRROOMMPPTT__DDIIRRTTRRIIMM
+ If set to a number greater than zero, the value is used as the
+ number of trailing directory components to retain when expanding
+ the \\ww and \\WW prompt string escapes (see PPRROOMMPPTTIINNGG below).
+ Characters removed are replaced with an ellipsis.
+ PPSS00 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below)
+ and displayed by interactive shells after reading a command and
+ before the command is executed.
+ PPSS11 The value of this parameter is expanded (see PPRROOMMPPTTIINNGG below)
+ and used as the primary prompt string. The default value is
+ ``\\ss--\\vv\\$$ ''.
+ PPSS22 The value of this parameter is expanded as with PPSS11 and used as
+ the secondary prompt string. The default is ``>> ''.
+ PPSS33 The value of this parameter is used as the prompt for the sseelleecctt
+ command (see SSHHEELLLL GGRRAAMMMMAARR above).
+ PPSS44 The value of this parameter is expanded as with PPSS11 and the
+ value is printed before each command bbaasshh displays during an
+ execution trace. The first character of the expanded value of
+ PPSS44 is replicated multiple times, as necessary, to indicate mul-
+ tiple levels of indirection. The default is ``++ ''.
+ SSHHEELLLL The full pathname to the shell is kept in this environment vari-
+ able. If it is not set when the shell starts, bbaasshh assigns to
+ it the full pathname of the current user's login shell.
+ TTIIMMEEFFOORRMMAATT
+ The value of this parameter is used as a format string specify-
+ ing how the timing information for pipelines prefixed with the
+ ttiimmee reserved word should be displayed. The %% character intro-
+ duces 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.
+ %%%% A literal %%.
+ %%[[_p]][[ll]]RR The elapsed time in seconds.
+ %%[[_p]][[ll]]UU The number of CPU seconds spent in user mode.
+ %%[[_p]][[ll]]SS The number of CPU seconds spent in system mode.
+ %%PP The CPU percentage, computed as (%U + %S) / %R.
+
+ The optional _p is a digit specifying the _p_r_e_c_i_s_i_o_n, the number
+ of fractional digits after a decimal point. A value of 0 causes
+ no decimal point or fraction to be output. At most three places
+ after the decimal point may be specified; values of _p greater
+ than 3 are changed to 3. If _p is not specified, the value 3 is
+ used.
+
+ The optional ll specifies a longer format, including minutes, of
+ the form _M_Mm_S_S._F_Fs. The value of _p determines whether or not
+ the fraction is included.
+
+ If this variable is not set, bbaasshh acts as if it had the value
+ $$''\\nnrreeaall\\tt%%33llRR\\nnuusseerr\\tt%%33llUU\\nnssyyss\\tt%%33llSS''. If the value is null,
+ no timing information is displayed. A trailing newline is added
+ when the format string is displayed.
+ TTMMOOUUTT If set to a value greater than zero, TTMMOOUUTT is treated as the
+ default timeout for the rreeaadd builtin. The sseelleecctt command termi-
+ nates if input does not arrive after TTMMOOUUTT seconds when input is
+ coming from a terminal. In an interactive shell, the value is
+ interpreted as the number of seconds to wait for a line of input
+ after issuing the primary prompt. BBaasshh terminates after waiting
+ for that number of seconds if a complete line of input does not
+ arrive.
+ TTMMPPDDIIRR If set, bbaasshh uses its value as the name of a directory in which
+ bbaasshh creates temporary files for the shell's use.
+ aauuttoo__rreessuummee
+ This variable controls how the shell interacts with the user and
+ job control. If this variable is set, single word simple com-
+ mands without redirections are treated as candidates for resump-
+ tion of an existing stopped job. There is no ambiguity allowed;
+ if there is more than one job beginning with the string typed,
+ the job most recently accessed is selected. The _n_a_m_e of a
+ stopped job, in this context, is the command line used to start
+ it. If set to the value _e_x_a_c_t, the string supplied must match
+ the name of a stopped job exactly; if set to _s_u_b_s_t_r_i_n_g, the
+ string supplied needs to match a substring of the name of a
+ stopped job. The _s_u_b_s_t_r_i_n_g value provides functionality analo-
+ gous to the %%?? job identifier (see JJOOBB CCOONNTTRROOLL below). 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
+ %%_s_t_r_i_n_g job identifier.
+ hhiissttcchhaarrss
+ The two or three characters which control history expansion and
+ tokenization (see HHIISSTTOORRYY EEXXPPAANNSSIIOONN below). The first character
+ is the _h_i_s_t_o_r_y _e_x_p_a_n_s_i_o_n character, the character which signals
+ the start of a history expansion, normally `!!'. The second
+ character is the _q_u_i_c_k _s_u_b_s_t_i_t_u_t_i_o_n character, which is used as
+ shorthand for re-running the previous command entered, substi-
+ tuting one string for another in the command. The default is
+ `^^'. The optional third character is the character which indi-
+ cates that the remainder of the line is a comment when found as
+ the first character of a word, normally `##'. The history com-
+ ment 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.
+
+ AArrrraayyss
+ BBaasshh provides one-dimensional indexed and associative array variables.
+ Any variable may be used as an indexed array; the ddeeccllaarree 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 con-
+ tiguously. Indexed arrays are referenced using integers (including
+ arithmetic expressions) and are zero-based; associative arrays are ref-
+ erenced using arbitrary strings. Unless otherwise noted, indexed array
+ indices must be non-negative integers.
+
+ An indexed array is created automatically if any variable is assigned
+ to using the syntax _n_a_m_e[_s_u_b_s_c_r_i_p_t]=_v_a_l_u_e. The _s_u_b_s_c_r_i_p_t is treated as
+ an arithmetic expression that must evaluate to a number. To explicitly
+ declare an indexed array, use ddeeccllaarree --aa _n_a_m_e (see SSHHEELLLL BBUUIILLTTIINN CCOOMM--
+ MMAANNDDSS below). ddeeccllaarree --aa _n_a_m_e[[_s_u_b_s_c_r_i_p_t]] is also accepted; the _s_u_b_-
+ _s_c_r_i_p_t is ignored.
+
+ Associative arrays are created using ddeeccllaarree --AA _n_a_m_e.
+
+ Attributes may be specified for an array variable using the ddeeccllaarree and
+ rreeaaddoonnllyy builtins. Each attribute applies to all members of an array.
+
+ Arrays are assigned to using compound assignments of the form
+ _n_a_m_e=((value_1 ... value_n)), where each _v_a_l_u_e is of the form [_s_u_b_-
+ _s_c_r_i_p_t]=_s_t_r_i_n_g. Indexed array assignments do not require anything but
+ _s_t_r_i_n_g. When assigning to indexed arrays, if the optional brackets and
+ subscript are supplied, that index is assigned to; otherwise the index
+ of the element assigned is the last index assigned to by the statement
+ plus one. Indexing starts at zero.
+
+ When assigning to an associative array, the subscript is required.
+
+ This syntax is also accepted by the ddeeccllaarree builtin. Individual array
+ elements may be assigned to using the _n_a_m_e[_s_u_b_s_c_r_i_p_t]=_v_a_l_u_e syntax
+ introduced above. When assigning to an indexed array, if _n_a_m_e is sub-
+ scripted by a negative number, that number is interpreted as relative
+ to one greater than the maximum index of _n_a_m_e, so negative indices
+ count back from the end of the array, and an index of -1 references the
+ last element.
+
+ Any element of an array may be referenced using ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}.
+ The braces are required to avoid conflicts with pathname expansion. If
+ _s_u_b_s_c_r_i_p_t is @@ or **, the word expands to all members of _n_a_m_e. These
+ subscripts differ only when the word appears within double quotes. If
+ the word is double-quoted, ${_n_a_m_e[*]} expands to a single word with the
+ value of each array member separated by the first character of the IIFFSS
+ special variable, and ${_n_a_m_e[@]} expands each element of _n_a_m_e to a sep-
+ arate word. When there are no array members, ${_n_a_m_e[@]} expands to
+ nothing. If the double-quoted expansion occurs within a word, the
+ expansion of the first parameter is joined with the beginning part of
+ the original word, and the expansion of the last parameter is joined
+ with the last part of the original word. This is analogous to the
+ expansion of the special parameters ** and @@ (see SSppeecciiaall PPaarraammeetteerrss
+ above). ${#_n_a_m_e[_s_u_b_s_c_r_i_p_t]} expands to the length of ${_n_a_m_e[_s_u_b_-
+ _s_c_r_i_p_t]}. If _s_u_b_s_c_r_i_p_t is ** or @@, the expansion is the number of ele-
+ ments in the array. If the _s_u_b_s_c_r_i_p_t used to reference an element of
+ an indexed array evaluates to a number less than zero, it is inter-
+ preted as relative to one greater than the maximum index of the array,
+ so negative indices count back from the end of the array, and an index
+ of -1 references the last element.
+
+ Referencing an array variable without a subscript is equivalent to ref-
+ erencing the array with a subscript of 0. Any reference to a variable
+ using a valid subscript is legal, and bbaasshh will create an array if nec-
+ essary.
+
+ An array variable is considered set if a subscript has been assigned a
+ value. The null string is a valid value.
+
+ It is possible to obtain the keys (indices) of an array as well as the
+ values. ${!!_n_a_m_e[_@]} and ${!!_n_a_m_e[_*]} expand to the indices assigned in
+ array variable _n_a_m_e. The treatment when in double quotes is similar to
+ the expansion of the special parameters _@ and _* within double quotes.
+
+ The uunnsseett builtin is used to destroy arrays. uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t]
+ destroys the array element at index _s_u_b_s_c_r_i_p_t, for both indexed and
+ associative arrays. Negative subscripts to indexed arrays are inter-
+ preted as described above. Unsetting the last element of an array
+ variable does not unset the variable. uunnsseett _n_a_m_e, where _n_a_m_e is an
+ array, or uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t], where _s_u_b_s_c_r_i_p_t is ** or @@, removes the
+ entire array.
+
+ When using a variable name with a subscript as an argument to a com-
+ mand, such as with uunnsseett, without using the word expansion syntax
+ described above, the argument is subject to pathname expansion. If
+ pathname expansion is not desired, the argument should be quoted.
+
+ The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to
+ specify an indexed array and a --AA option to specify an associative
+ array. If both options are supplied, --AA takes precedence. The rreeaadd
+ builtin accepts a --aa option to assign a list of words read from the
+ standard input to an array. The sseett and ddeeccllaarree builtins display array
+ values in a way that allows them to be reused as assignments.
+
+EEXXPPAANNSSIIOONN
+ Expansion is performed on the command line after it has been split into
+ words. There are seven kinds of expansion performed: _b_r_a_c_e _e_x_p_a_n_s_i_o_n,
+ _t_i_l_d_e _e_x_p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_-
+ _t_i_o_n, _a_r_i_t_h_m_e_t_i_c _e_x_p_a_n_s_i_o_n, _w_o_r_d _s_p_l_i_t_t_i_n_g, and _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n.
+
+ The order of expansions is: brace expansion; tilde expansion, parameter
+ and variable expansion, arithmetic expansion, and command substitution
+ (done in a left-to-right fashion); word splitting; and pathname expan-
+ sion.
+
+ On systems that can support it, there is an additional expansion avail-
+ able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. This is performed at the same time as
+ tilde, parameter, variable, and arithmetic expansion and command sub-
+ stitution.
+
+ After these expansions are performed, quote characters present in the
+ original word are removed unless they have been quoted themselves
+ (_q_u_o_t_e _r_e_m_o_v_a_l).
+
+ Only brace expansion, word splitting, and pathname expansion can
+ increase 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 "$$@@" and "$${{_n_a_m_e[[@@]]}}", and, in most cases, $$** and
+ $${{_n_a_m_e[[**]]}} as explained above (see PPAARRAAMMEETTEERRSS).
+
+ BBrraaccee EExxppaannssiioonn
+ _B_r_a_c_e _e_x_p_a_n_s_i_o_n is a mechanism by which arbitrary strings may be gener-
+ ated. This mechanism is similar to _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, but the file-
+ names generated need not exist. Patterns to be brace expanded take the
+ form of an optional _p_r_e_a_m_b_l_e, followed by either a series of comma-sep-
+ arated strings or a sequence expression between a pair of braces, fol-
+ lowed by an optional _p_o_s_t_s_c_r_i_p_t. The preamble is prefixed to each
+ string contained within the braces, and the postscript is then appended
+ to each resulting string, expanding left to right.
+
+ Brace expansions may be nested. The results of each expanded string
+ are not sorted; left to right order is preserved. For example,
+ a{{d,c,b}}e expands into `ade ace abe'.
+
+ A sequence expression takes the form {{_x...._y[[...._i_n_c_r]]}}, where _x and _y are
+ either integers or single characters, and _i_n_c_r, an optional increment,
+ is an integer. When integers are supplied, the expression expands to
+ each number between _x and _y, inclusive. Supplied integers may be pre-
+ fixed with _0 to force each term to have the same width. When either _x
+ or _y begins with a zero, the shell attempts to force all generated
+ terms to contain the same number of digits, zero-padding where neces-
+ sary. When characters are supplied, the expression expands to each
+ character lexicographically between _x and _y, inclusive, using the
+ default C locale. Note that both _x and _y must be of the same type.
+ When the increment is supplied, it is used as the difference between
+ each term. The default increment is 1 or -1 as appropriate.
+
+ Brace expansion is performed before any other expansions, and any char-
+ acters special to other expansions are preserved in the result. It is
+ strictly textual. BBaasshh does not apply any syntactic interpretation to
+ the context of the expansion or the text between the braces.
+
+ A correctly-formed brace expansion must contain unquoted opening and
+ closing braces, and at least one unquoted comma or a valid sequence
+ expression. Any incorrectly formed brace expansion is left unchanged.
+ A {{ or ,, may be quoted with a backslash to prevent its being considered
+ part of a brace expression. To avoid conflicts with parameter expan-
+ sion, the string $${{ is not considered eligible for brace expansion, and
+ inhibits brace expansion until the closing }}.
+
+ This construct is typically used as shorthand when the common prefix of
+ the strings to be generated is longer than in the above example:
+
+ mkdir /usr/local/src/bash/{old,new,dist,bugs}
+ or
+ chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+
+ Brace expansion introduces a slight incompatibility with historical
+ versions of sshh. sshh does not treat opening or closing braces specially
+ when they appear as part of a word, and preserves them in the output.
+ BBaasshh removes braces from words as a consequence of brace expansion.
+ For example, a word entered to sshh as _f_i_l_e_{_1_,_2_} appears identically in
+ the output. The same word is output as _f_i_l_e_1 _f_i_l_e_2 after expansion by
+ bbaasshh. If strict compatibility with sshh is desired, start bbaasshh with the
+ ++BB option or disable brace expansion with the ++BB option to the sseett com-
+ mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+
+ TTiillddee EExxppaannssiioonn
+ If a word begins with an unquoted tilde character (`~~'), all of the
+ characters preceding the first unquoted slash (or all characters, if
+ there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. 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 _l_o_g_i_n _n_a_m_e.
+ If this login name is the null string, the tilde is replaced with the
+ value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the home direc-
+ tory of the user executing the shell is substituted instead. Other-
+ wise, the tilde-prefix is replaced with the home directory associated
+ with the specified login name.
+
+ If the tilde-prefix is a `~+', the value of the shell variable PPWWDD
+ replaces the tilde-prefix. If the tilde-prefix is a `~-', the value of
+ the shell variable OOLLDDPPWWDD, if it is set, is substituted. If the char-
+ acters following the tilde in the tilde-prefix consist of a number _N,
+ optionally prefixed by a `+' or a `-', the tilde-prefix is replaced
+ with the corresponding element from the directory stack, as it would be
+ displayed by the ddiirrss builtin invoked with the tilde-prefix as an argu-
+ ment. If the characters following the tilde in the tilde-prefix con-
+ sist of a number without a leading `+' or `-', `+' is assumed.
+
+ If the login name is invalid, or the tilde expansion fails, the word is
+ unchanged.
+
+ Each variable assignment is checked for unquoted tilde-prefixes immedi-
+ ately following a :: or the first ==. In these cases, tilde expansion is
+ also performed. Consequently, one may use filenames with tildes in
+ assignments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the
+ expanded value.
+
+ Bash also performs tilde expansion on words satisfying the conditions
+ of variable assignments (as described above under PPAARRAAMMEETTEERRSS) when they
+ appear as arguments to simple commands. Bash does not do this, except
+ for the _d_e_c_l_a_r_a_t_i_o_n commands listed above, when in _p_o_s_i_x _m_o_d_e.
+
+ PPaarraammeetteerr EExxppaannssiioonn
+ The `$$' character introduces parameter expansion, command substitution,
+ or arithmetic expansion. The parameter name or symbol to be expanded
+ may be enclosed in braces, which are optional but serve to protect the
+ variable to be expanded from characters immediately following it which
+ could be interpreted as part of the name.
+
+ When braces are used, the matching ending brace is the first `}}' not
+ escaped by a backslash or within a quoted string, and not within an
+ embedded arithmetic expansion, command substitution, or parameter
+ expansion.
+
+ ${_p_a_r_a_m_e_t_e_r}
+ The value of _p_a_r_a_m_e_t_e_r is substituted. The braces are required
+ when _p_a_r_a_m_e_t_e_r is a positional parameter with more than one
+ digit, or when _p_a_r_a_m_e_t_e_r is followed by a character which is not
+ to be interpreted as part of its name. The _p_a_r_a_m_e_t_e_r is a shell
+ parameter as described above PPAARRAAMMEETTEERRSS) or an array reference
+ (AArrrraayyss).
+
+ If the first character of _p_a_r_a_m_e_t_e_r is an exclamation point (!!), and
+ _p_a_r_a_m_e_t_e_r is not a _n_a_m_e_r_e_f, it introduces a level of indirection. BBaasshh
+ uses the value formed by expanding the rest of _p_a_r_a_m_e_t_e_r as the new
+ _p_a_r_a_m_e_t_e_r; this is then expanded and that value is used in the rest of
+ the expansion, rather than the expansion of the original _p_a_r_a_m_e_t_e_r.
+ This is known as _i_n_d_i_r_e_c_t _e_x_p_a_n_s_i_o_n. The value is subject to tilde
+ expansion, parameter expansion, command substitution, and arithmetic
+ expansion. If _p_a_r_a_m_e_t_e_r is a nameref, this expands to the name of the
+ parameter referenced by _p_a_r_a_m_e_t_e_r instead of performing the complete
+ indirect expansion. The exceptions to this are the expansions of
+ ${!!_p_r_e_f_i_x**} and ${!!_n_a_m_e[_@]} described below. The exclamation point
+ must immediately follow the left brace in order to introduce indirec-
+ tion.
+
+ In each of the cases below, _w_o_r_d is subject to tilde expansion, parame-
+ ter expansion, command substitution, and arithmetic expansion.
+
+ When not performing substring expansion, using the forms documented
+ below (e.g., ::--), bbaasshh tests for a parameter that is unset or null.
+ Omitting the colon results in a test only for a parameter that is
+ unset.
+
+ ${_p_a_r_a_m_e_t_e_r::--_w_o_r_d}
+ UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan-
+ sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r
+ is substituted.
+ ${_p_a_r_a_m_e_t_e_r::==_w_o_r_d}
+ AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the
+ expansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r. The value of _p_a_r_a_m_-
+ _e_t_e_r is then substituted. Positional parameters and special
+ parameters may not be assigned to in this way.
+ ${_p_a_r_a_m_e_t_e_r::??_w_o_r_d}
+ DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset,
+ the expansion of _w_o_r_d (or a message to that effect if _w_o_r_d is
+ not present) is written to the standard error and the shell, if
+ it is not interactive, exits. Otherwise, the value of _p_a_r_a_m_e_t_e_r
+ is substituted.
+ ${_p_a_r_a_m_e_t_e_r::++_w_o_r_d}
+ UUssee AAlltteerrnnaattee VVaalluuee. If _p_a_r_a_m_e_t_e_r is null or unset, nothing is
+ substituted, otherwise the expansion of _w_o_r_d is substituted.
+ ${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t}
+ ${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t::_l_e_n_g_t_h}
+ SSuubbssttrriinngg EExxppaannssiioonn. Expands to up to _l_e_n_g_t_h characters of the
+ value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_-
+ _s_e_t. If _p_a_r_a_m_e_t_e_r is @@, an indexed array subscripted by @@ or **,
+ or an associative array name, the results differ as described
+ below. If _l_e_n_g_t_h is omitted, expands to the substring of the
+ value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_s_e_t
+ and extending to the end of the value. _l_e_n_g_t_h and _o_f_f_s_e_t are
+ arithmetic expressions (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN below).
+
+ If _o_f_f_s_e_t evaluates to a number less than zero, the value is
+ used as an offset in characters from the end of the value of
+ _p_a_r_a_m_e_t_e_r. If _l_e_n_g_t_h evaluates to a number less than zero, it
+ is interpreted as an offset in characters from the end of the
+ value of _p_a_r_a_m_e_t_e_r rather than a number of characters, and the
+ expansion is the characters between _o_f_f_s_e_t and that result.
+ Note that a negative offset must be separated from the colon by
+ at least one space to avoid being confused with the ::-- expan-
+ sion.
+
+ If _p_a_r_a_m_e_t_e_r is @@, the result is _l_e_n_g_t_h positional parameters
+ beginning at _o_f_f_s_e_t. A negative _o_f_f_s_e_t is taken relative to one
+ greater than the greatest positional parameter, so an offset of
+ -1 evaluates to the last positional parameter. It is an expan-
+ sion error if _l_e_n_g_t_h evaluates to a number less than zero.
+
+ If _p_a_r_a_m_e_t_e_r is an indexed array name subscripted by @ or *, the
+ result is the _l_e_n_g_t_h members of the array beginning with
+ ${_p_a_r_a_m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is taken relative to
+ one greater than the maximum index of the specified array. It
+ is an expansion error if _l_e_n_g_t_h evaluates to a number less than
+ zero.
+
+ Substring expansion applied to an associative array produces
+ undefined results.
+
+ Substring indexing is zero-based unless the positional parame-
+ ters are used, in which case the indexing starts at 1 by
+ default. If _o_f_f_s_e_t is 0, and the positional parameters are
+ used, $$00 is prefixed to the list.
+
+ ${!!_p_r_e_f_i_x**}
+ ${!!_p_r_e_f_i_x@@}
+ NNaammeess mmaattcchhiinngg pprreeffiixx. Expands to the names of variables whose
+ names begin with _p_r_e_f_i_x, separated by the first character of the
+ IIFFSS special variable. When _@ is used and the expansion appears
+ within double quotes, each variable name expands to a separate
+ word.
+
+ ${!!_n_a_m_e[_@]}
+ ${!!_n_a_m_e[_*]}
+ LLiisstt ooff aarrrraayy kkeeyyss. If _n_a_m_e is an array variable, expands to
+ the list of array indices (keys) assigned in _n_a_m_e. If _n_a_m_e is
+ not an array, expands to 0 if _n_a_m_e is set and null otherwise.
+ When _@ is used and the expansion appears within double quotes,
+ each key expands to a separate word.
+
+ ${##_p_a_r_a_m_e_t_e_r}
+ PPaarraammeetteerr lleennggtthh. The length in characters of the value of
+ _p_a_r_a_m_e_t_e_r is substituted. If _p_a_r_a_m_e_t_e_r is ** or @@, the value
+ substituted is the number of positional parameters. If _p_a_r_a_m_e_-
+ _t_e_r is an array name subscripted by ** or @@, the value substi-
+ tuted is the number of elements in the array. If _p_a_r_a_m_e_t_e_r is
+ an indexed array name subscripted by a negative number, that
+ number is interpreted as relative to one greater than the maxi-
+ mum index of _p_a_r_a_m_e_t_e_r, so negative indices count back from the
+ end of the array, and an index of -1 references the last ele-
+ ment.
+
+ ${_p_a_r_a_m_e_t_e_r##_w_o_r_d}
+ ${_p_a_r_a_m_e_t_e_r####_w_o_r_d}
+ RReemmoovvee mmaattcchhiinngg pprreeffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce
+ a pattern just as in pathname expansion, and matched against the
+ expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt--
+ tteerrnn MMaattcchhiinngg below. If the pattern matches the beginning of
+ the value of _p_a_r_a_m_e_t_e_r, then the result of the expansion is the
+ expanded value of _p_a_r_a_m_e_t_e_r with the shortest matching pattern
+ (the ``##'' case) or the longest matching pattern (the ``####''
+ case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern removal
+ operation is applied to each positional parameter in turn, and
+ the expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is an array
+ variable subscripted with @@ or **, the pattern removal operation
+ is applied to each member of the array in turn, and the expan-
+ sion is the resultant list.
+
+ ${_p_a_r_a_m_e_t_e_r%%_w_o_r_d}
+ ${_p_a_r_a_m_e_t_e_r%%%%_w_o_r_d}
+ RReemmoovvee mmaattcchhiinngg ssuuffffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce
+ a pattern just as in pathname expansion, and matched against the
+ expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt--
+ tteerrnn MMaattcchhiinngg below. If the pattern matches a trailing portion
+ of the expanded value of _p_a_r_a_m_e_t_e_r, then the result of the
+ expansion is the expanded value of _p_a_r_a_m_e_t_e_r with the shortest
+ matching pattern (the ``%%'' case) or the longest matching pat-
+ tern (the ``%%%%'' case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the
+ pattern removal operation is applied to each positional parame-
+ ter in turn, and the expansion is the resultant list. If _p_a_r_a_m_-
+ _e_t_e_r is an array variable subscripted with @@ or **, the pattern
+ removal operation is applied to each member of the array in
+ turn, and the expansion is the resultant list.
+
+ ${_p_a_r_a_m_e_t_e_r//_p_a_t_t_e_r_n//_s_t_r_i_n_g}
+ PPaatttteerrnn ssuubbssttiittuuttiioonn. The _p_a_t_t_e_r_n is expanded to produce a pat-
+ tern just as in pathname expansion, _P_a_r_a_m_e_t_e_r is expanded and
+ the longest match of _p_a_t_t_e_r_n against its value is replaced with
+ _s_t_r_i_n_g. The match is performed using the rules described under
+ PPaatttteerrnn MMaattcchhiinngg below. If _p_a_t_t_e_r_n begins with //, all matches
+ of _p_a_t_t_e_r_n are replaced with _s_t_r_i_n_g. Normally only the first
+ match is replaced. If _p_a_t_t_e_r_n begins with ##, it must match at
+ the beginning of the expanded value of _p_a_r_a_m_e_t_e_r. If _p_a_t_t_e_r_n
+ begins with %%, it must match at the end of the expanded value of
+ _p_a_r_a_m_e_t_e_r. If _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted
+ and the // following _p_a_t_t_e_r_n may be omitted. If the nnooccaasseemmaattcchh
+ shell option is enabled, the match is performed without regard
+ to the case of alphabetic characters. If _p_a_r_a_m_e_t_e_r is @@ or **,
+ the substitution operation is applied to each positional parame-
+ ter in turn, and the expansion is the resultant list. If _p_a_r_a_m_-
+ _e_t_e_r is an array variable subscripted with @@ or **, the substitu-
+ tion operation is applied to each member of the array in turn,
+ and the expansion is the resultant list.
+
+ ${_p_a_r_a_m_e_t_e_r^^_p_a_t_t_e_r_n}
+ ${_p_a_r_a_m_e_t_e_r^^^^_p_a_t_t_e_r_n}
+ ${_p_a_r_a_m_e_t_e_r,,_p_a_t_t_e_r_n}
+ ${_p_a_r_a_m_e_t_e_r,,,,_p_a_t_t_e_r_n}
+ CCaassee mmooddiiffiiccaattiioonn. This expansion modifies the case of alpha-
+ betic characters in _p_a_r_a_m_e_t_e_r. The _p_a_t_t_e_r_n is expanded to pro-
+ duce a pattern just as in pathname expansion. Each character in
+ the expanded value of _p_a_r_a_m_e_t_e_r is tested against _p_a_t_t_e_r_n, and,
+ if it matches the pattern, its case is converted. The pattern
+ should not attempt to match more than one character. The ^^
+ operator converts lowercase letters matching _p_a_t_t_e_r_n to upper-
+ case; the ,, operator converts matching uppercase letters to low-
+ ercase. The ^^^^ and ,,,, expansions convert each matched character
+ in the expanded value; the ^^ and ,, expansions match and convert
+ only the first character in the expanded value. If _p_a_t_t_e_r_n is
+ omitted, it is treated like a ??, which matches every character.
+ If _p_a_r_a_m_e_t_e_r is @@ or **, the case modification operation is
+ applied to each positional parameter in turn, and the expansion
+ is the resultant list. If _p_a_r_a_m_e_t_e_r is an array variable sub-
+ scripted with @@ or **, the case modification operation is applied
+ to each member of the array in turn, and the expansion is the
+ resultant list.
+
+ ${_p_a_r_a_m_e_t_e_r@@_o_p_e_r_a_t_o_r}
+ PPaarraammeetteerr ttrraannssffoorrmmaattiioonn. The expansion is either a transforma-
+ tion of the value of _p_a_r_a_m_e_t_e_r or information about _p_a_r_a_m_e_t_e_r
+ itself, depending on the value of _o_p_e_r_a_t_o_r. Each _o_p_e_r_a_t_o_r is a
+ single letter:
+
+ QQ The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
+ quoted in a format that can be reused as input.
+ EE The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
+ with backslash escape sequences expanded as with the
+ $$''......'' quoting mechanism.
+ PP The expansion is a string that is the result of expanding
+ the value of _p_a_r_a_m_e_t_e_r as if it were a prompt string (see
+ PPRROOMMPPTTIINNGG below).
+ AA The expansion is a string in the form of an assignment
+ statement or ddeeccllaarree command that, if evaluated, will
+ recreate _p_a_r_a_m_e_t_e_r with its attributes and value.
+ aa The expansion is a string consisting of flag values rep-
+ resenting _p_a_r_a_m_e_t_e_r's attributes.
+
+ If _p_a_r_a_m_e_t_e_r is @@ or **, the operation is applied to each posi-
+ tional parameter in turn, and the expansion is the resultant
+ list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted with @@ or
+ **, the operation is applied to each member of the array in turn,
+ and the expansion is the resultant list.
+
+ The result of the expansion is subject to word splitting and
+ pathname expansion as described below.
+
+ CCoommmmaanndd SSuubbssttiittuuttiioonn
+ _C_o_m_m_a_n_d _s_u_b_s_t_i_t_u_t_i_o_n allows the output of a command to replace the com-
+ mand name. There are two forms:
+
+ $$((_c_o_m_m_a_n_d))
+ or
+ ``_c_o_m_m_a_n_d``
+
+ BBaasshh performs the expansion by executing _c_o_m_m_a_n_d in a subshell environ-
+ ment 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 com-
+ mand substitution $$((ccaatt _f_i_l_e)) can be replaced by the equivalent but
+ faster $$((<< _f_i_l_e)).
+
+ When the old-style backquote form of substitution is used, backslash
+ retains its literal meaning except when followed by $$, ``, or \\. The
+ first backquote not preceded by a backslash terminates the command sub-
+ stitution. When using the $(_c_o_m_m_a_n_d) form, all characters between the
+ parentheses make up the command; none are treated specially.
+
+ Command substitutions may be nested. To nest when using the backquoted
+ form, escape the inner backquotes with backslashes.
+
+ If the substitution appears within double quotes, word splitting and
+ pathname expansion are not performed on the results.
+
+ AArriitthhmmeettiicc EExxppaannssiioonn
+ Arithmetic expansion allows the evaluation of an arithmetic expression
+ and the substitution of the result. The format for arithmetic expan-
+ sion is:
+
+ $$((((_e_x_p_r_e_s_s_i_o_n))))
+
+ The _e_x_p_r_e_s_s_i_o_n 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 and variable expansion, com-
+ mand substitution, and quote removal. The result is treated as the
+ arithmetic expression to be evaluated. Arithmetic expansions may be
+ nested.
+
+ The evaluation is performed according to the rules listed below under
+ AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If _e_x_p_r_e_s_s_i_o_n is invalid, bbaasshh prints a message
+ indicating failure and no substitution occurs.
+
+ PPrroocceessss SSuubbssttiittuuttiioonn
+ _P_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n allows a process's input or output to be referred
+ to using a filename. It takes the form of <<((_l_i_s_t)) or >>((_l_i_s_t)). The
+ process _l_i_s_t is run asynchronously, and its input or output appears as
+ a filename. This filename is passed as an argument to the current com-
+ mand as the result of the expansion. If the >>((_l_i_s_t)) form is used,
+ writing to the file will provide input for _l_i_s_t. If the <<((_l_i_s_t)) form
+ is used, the file passed as an argument should be read to obtain the
+ output of _l_i_s_t. Process substitution is supported on systems that sup-
+ port named pipes (_F_I_F_O_s) or the //ddeevv//ffdd method of naming open files.
+
+ When available, process substitution is performed simultaneously with
+ parameter and variable expansion, command substitution, and arithmetic
+ expansion.
+
+ WWoorrdd SSpplliittttiinngg
+ The shell scans the results of parameter expansion, command substitu-
+ tion, and arithmetic expansion that did not occur within double quotes
+ for _w_o_r_d _s_p_l_i_t_t_i_n_g.
+
+ The shell treats each character of IIFFSS as a delimiter, and splits the
+ results of the other expansions into words using these characters as
+ field terminators. If IIFFSS is unset, or its value is exactly
+ <<ssppaaccee>><<ttaabb>><<nneewwlliinnee>>, the default, then sequences of <<ssppaaccee>>, <<ttaabb>>,
+ and <<nneewwlliinnee>> at the beginning and end of the results of the previous
+ expansions are ignored, and any sequence of IIFFSS characters not at the
+ beginning or end serves to delimit words. If IIFFSS has a value other
+ than the default, then sequences of the whitespace characters ssppaaccee,
+ ttaabb, and nneewwlliinnee are ignored at the beginning and end of the word, as
+ long as the whitespace character is in the value of IIFFSS (an IIFFSS white-
+ space character). Any character in IIFFSS that is not IIFFSS whitespace,
+ along with any adjacent IIFFSS whitespace characters, delimits a field. A
+ sequence of IIFFSS whitespace characters is also treated as a delimiter.
+ If the value of IIFFSS is null, no word splitting occurs.
+
+ Explicit null arguments ("""" or '''') are retained and passed to commands
+ as empty strings. Unquoted implicit null arguments, resulting from the
+ expansion of parameters that have no values, are removed. If a parame-
+ ter with no value is expanded within double quotes, a null argument
+ results and is retained and passed to a command as an empty string.
+ When a quoted null argument appears as part of a word whose expansion
+ is non-null, the null argument is removed. That is, the word -d''
+ becomes -d after word splitting and null argument removal.
+
+ Note that if no expansion occurs, no splitting is performed.
+
+ PPaatthhnnaammee EExxppaannssiioonn
+ After word splitting, unless the --ff option has been set, bbaasshh scans
+ each word for the characters **, ??, and [[. If one of these characters
+ appears, then the word is regarded as a _p_a_t_t_e_r_n, and replaced with an
+ alphabetically sorted list of filenames matching the pattern (see PPaatt--
+ tteerrnn MMaattcchhiinngg below). If no matching filenames are found, and the
+ shell option nnuullllgglloobb is not enabled, the word is left unchanged. If
+ the nnuullllgglloobb option is set, and no matches are found, the word is
+ removed. If the ffaaiillgglloobb shell option is set, and no matches are
+ found, an error message is printed and the command is not executed. If
+ the shell option nnooccaasseegglloobb is enabled, the match is performed without
+ regard to the case of alphabetic characters. When a pattern is used
+ for pathname expansion, the character ````..'''' at the start of a name or
+ immediately following a slash must be matched explicitly, unless the
+ shell option ddoottgglloobb is set. The filenames ````..'''' and ````....'''' must
+ always be matched explicitly, even if ddoottgglloobb is set. In other cases,
+ the ````..'''' character is not treated specially. When matching a path-
+ name, the slash character must always be matched explicitly by a slash
+ in the pattern, but in other matching contexts it can be matched by a
+ special pattern character as described below under PPaatttteerrnn MMaattcchhiinngg.
+ See the description of sshhoopptt below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS for a
+ description of the nnooccaasseegglloobb, nnuullllgglloobb, ffaaiillgglloobb, and ddoottgglloobb shell
+ options.
+
+ The GGLLOOBBIIGGNNOORREE shell variable may be used to restrict the set of file
+ names matching a _p_a_t_t_e_r_n. If GGLLOOBBIIGGNNOORREE is set, each matching file
+ name that also matches one of the patterns in GGLLOOBBIIGGNNOORREE is removed
+ from the list of matches. If the nnooccaasseegglloobb option is set, the match-
+ ing against the patterns in GGLLOOBBIIGGNNOORREE is performed without regard to
+ case. The filenames ````..'''' and ````....'''' are always ignored when GGLLOOBBIIGG--
+ NNOORREE is set and not null. However, setting GGLLOOBBIIGGNNOORREE to a non-null
+ value has the effect of enabling the ddoottgglloobb shell option, so all other
+ filenames beginning with a ````..'''' will match. To get the old behavior
+ of ignoring filenames beginning with a ````..'''', make ````..**'''' one of the
+ patterns in GGLLOOBBIIGGNNOORREE. The ddoottgglloobb option is disabled when GGLLOOBBIIGGNNOORREE
+ is unset. The pattern matching honors the setting of the eexxttgglloobb shell
+ option.
+
+ PPaatttteerrnn MMaattcchhiinngg
+
+ Any character that appears in a pattern, other than the special pattern
+ characters described below, matches itself. The NUL character may not
+ occur in a pattern. A backslash escapes the following character; the
+ escaping backslash is discarded when matching. The special pattern
+ characters must be quoted if they are to be matched literally.
+
+ The special pattern characters have the following meanings:
+
+ ** Matches any string, including the null string. When the
+ gglloobbssttaarr shell option is enabled, and ** is used in a
+ pathname expansion context, two adjacent **s used as a
+ single pattern will match all files and zero or more
+ directories and subdirectories. If followed by a //, two
+ adjacent **s will match only directories and subdirecto-
+ ries.
+ ?? Matches any single character.
+ [[......]] Matches any one of the enclosed characters. A pair of
+ characters separated by a hyphen denotes a _r_a_n_g_e _e_x_p_r_e_s_-
+ _s_i_o_n; any character that falls between those two charac-
+ ters, inclusive, using the current locale's collating
+ sequence and character set, is matched. If the first
+ character following the [[ is a !! or a ^^ then any charac-
+ ter not enclosed is matched. The sorting order of char-
+ acters in range expressions is determined by the current
+ locale and the values of the LLCC__CCOOLLLLAATTEE or LLCC__AALLLL shell
+ variables, if set. To obtain the traditional interpreta-
+ tion of range expressions, where [[aa--dd]] is equivalent to
+ [[aabbccdd]], set value of the LLCC__AALLLL shell variable to CC, or
+ enable the gglloobbaasscciiiirraannggeess shell option. A -- may be
+ matched by including it as the first or last character in
+ the set. A ]] may be matched by including it as the first
+ character in the set.
+
+ Within [[ and ]], _c_h_a_r_a_c_t_e_r _c_l_a_s_s_e_s can be specified using
+ the syntax [[::_c_l_a_s_s::]], where _c_l_a_s_s is one of the following
+ classes defined in the POSIX standard:
+ aallnnuumm aallpphhaa aasscciiii bbllaannkk ccnnttrrll ddiiggiitt ggrraapphh lloowweerr pprriinntt
+ ppuunncctt ssppaaccee uuppppeerr wwoorrdd xxddiiggiitt
+ A character class matches any character belonging to that
+ class. The wwoorrdd character class matches letters, digits,
+ and the character _.
+
+ Within [[ and ]], an _e_q_u_i_v_a_l_e_n_c_e _c_l_a_s_s can be specified
+ using the syntax [[==_c==]], which matches all characters with
+ the same collation weight (as defined by the current
+ locale) as the character _c.
+
+ Within [[ and ]], the syntax [[.._s_y_m_b_o_l..]] matches the collat-
+ ing symbol _s_y_m_b_o_l.
+
+ If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, several
+ extended pattern matching operators are recognized. In the following
+ description, a _p_a_t_t_e_r_n_-_l_i_s_t is a list of one or more patterns separated
+ by a ||. Composite patterns may be formed using one or more of the fol-
+ lowing sub-patterns:
+
+ ??((_p_a_t_t_e_r_n_-_l_i_s_t))
+ Matches zero or one occurrence of the given patterns
+ **((_p_a_t_t_e_r_n_-_l_i_s_t))
+ Matches zero or more occurrences of the given patterns
+ ++((_p_a_t_t_e_r_n_-_l_i_s_t))
+ Matches one or more occurrences of the given patterns
+ @@((_p_a_t_t_e_r_n_-_l_i_s_t))
+ Matches one of the given patterns
+ !!((_p_a_t_t_e_r_n_-_l_i_s_t))
+ Matches anything except one of the given patterns
+
+ Complicated extended pattern matching against long strings is slow,
+ especially when the patterns contain alternations and the strings con-
+ tain multiple matches. Using separate matches against shorter strings,
+ or using arrays of strings instead of a single long string, may be
+ faster.
+
+ QQuuoottee RReemmoovvaall
+ After the preceding expansions, all unquoted occurrences of the charac-
+ ters \\, '', and "" that did not result from one of the above expansions
+ are removed.
+
+RREEDDIIRREECCTTIIOONN
+ Before a command is executed, its input and output may be _r_e_d_i_r_e_c_t_e_d
+ using a special notation interpreted by the shell. Redirection allows
+ commands' file handles to be duplicated, opened, closed, made to refer
+ to different files, and can change the files the command reads from and
+ writes to. Redirection may also be used to modify file handles in the
+ current shell execution environment. The following redirection opera-
+ tors may precede or appear anywhere within a _s_i_m_p_l_e _c_o_m_m_a_n_d or may fol-
+ low a _c_o_m_m_a_n_d. Redirections are processed in the order they appear,
+ from left to right.
+
+ Each redirection that may be preceded by a file descriptor number may
+ instead be preceded by a word of the form {_v_a_r_n_a_m_e}. In this case, for
+ each redirection operator except >&- and <&-, the shell will allocate a
+ file descriptor greater than or equal to 10 and assign it to _v_a_r_n_a_m_e.
+ If >&- or <&- is preceded by {_v_a_r_n_a_m_e}, the value of _v_a_r_n_a_m_e defines
+ the file descriptor to close. If {_v_a_r_n_a_m_e} is supplied, the redirect-
+ ion persists beyond the scope of the command, allowing the shell pro-
+ grammer to manage the file descriptor himself.
+
+ In the following descriptions, if the file descriptor number is omit-
+ ted, and the first character of the redirection operator is <<, the re-
+ direction refers to the standard input (file descriptor 0). If the
+ first character of the redirection operator is >>, the redirection
+ refers to the standard output (file descriptor 1).
+
+ The word following the redirection operator in the following descrip-
+ tions, unless otherwise noted, is subjected to brace expansion, tilde
+ expansion, parameter and variable expansion, command substitution,
+ arithmetic expansion, quote removal, pathname expansion, and word
+ splitting. If it expands to more than one word, bbaasshh reports an error.
+
+ Note that the order of redirections is significant. For example, the
+ command
+
+ ls >> dirlist 2>>&&1
+
+ directs both standard output and standard error to the file _d_i_r_l_i_s_t,
+ while the command
+
+ ls 2>>&&1 >> dirlist
+
+ directs only the standard output to file _d_i_r_l_i_s_t, because the standard
+ error was duplicated from the standard output before the standard out-
+ put was redirected to _d_i_r_l_i_s_t.
+
+ BBaasshh handles several filenames specially when they are used in redirec-
+ tions, as described in the following table. If the operating system on
+ which bbaasshh is running provides these special files, bash will use them;
+ otherwise it will emulate them internally with the behavior described
+ below.
+
+ //ddeevv//ffdd//_f_d
+ If _f_d is a valid integer, file descriptor _f_d is dupli-
+ cated.
+ //ddeevv//ssttddiinn
+ File descriptor 0 is duplicated.
+ //ddeevv//ssttddoouutt
+ File descriptor 1 is duplicated.
+ //ddeevv//ssttddeerrrr
+ File descriptor 2 is duplicated.
+ //ddeevv//ttccpp//_h_o_s_t//_p_o_r_t
+ If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t
+ is an integer port number or service name, bbaasshh attempts
+ to open the corresponding TCP socket.
+ //ddeevv//uuddpp//_h_o_s_t//_p_o_r_t
+ If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t
+ is an integer port number or service name, bbaasshh attempts
+ to open the corresponding UDP socket.
+
+ A failure to open or create a file causes the redirection to fail.
+
+ Redirections using file descriptors greater than 9 should be used with
+ care, as they may conflict with file descriptors the shell uses inter-
+ nally.
+
+ RReeddiirreeccttiinngg IInnppuutt
+ Redirection of input causes the file whose name results from the expan-
+ sion of _w_o_r_d to be opened for reading on file descriptor _n, or the
+ standard input (file descriptor 0) if _n is not specified.
+
+ The general format for redirecting input is:
+
+ [_n]<<_w_o_r_d
+
+ RReeddiirreeccttiinngg OOuuttppuutt
+ Redirection of output causes the file whose name results from the
+ expansion of _w_o_r_d to be opened for writing on file descriptor _n, or the
+ standard output (file descriptor 1) if _n is not specified. If the file
+ does not exist it is created; if it does exist it is truncated to zero
+ size.
+
+ The general format for redirecting output is:
+
+ [_n]>>_w_o_r_d
+
+ If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett
+ builtin has been enabled, the redirection will fail if the file whose
+ name results from the expansion of _w_o_r_d exists and is a regular file.
+ If the redirection operator is >>||, or the redirection operator is >> and
+ the nnoocclloobbbbeerr option to the sseett builtin command is not enabled, the re-
+ direction is attempted even if the file named by _w_o_r_d exists.
+
+ AAppppeennddiinngg RReeddiirreecctteedd OOuuttppuutt
+ Redirection of output in this fashion causes the file whose name
+ results from the expansion of _w_o_r_d to be opened for appending on file
+ descriptor _n, or the standard output (file descriptor 1) if _n is not
+ specified. If the file does not exist it is created.
+
+ The general format for appending output is:
+
+ [_n]>>>>_w_o_r_d
+
+ RReeddiirreeccttiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr
+ This construct 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 _w_o_r_d.
+
+ There are two formats for redirecting standard output and standard
+ error:
+
+ &&>>_w_o_r_d
+ and
+ >>&&_w_o_r_d
+
+ Of the two forms, the first is preferred. This is semantically equiva-
+ lent to
+
+ >>_w_o_r_d 2>>&&1
+
+ When using the second form, _w_o_r_d may not expand to a number or --. If
+ it does, other redirection operators apply (see DDuupplliiccaattiinngg FFiillee
+ DDeessccrriippttoorrss below) for compatibility reasons.
+
+ AAppppeennddiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr
+ This construct allows both the standard output (file descriptor 1) and
+ the standard error output (file descriptor 2) to be appended to the
+ file whose name is the expansion of _w_o_r_d.
+
+ The format for appending standard output and standard error is:
+
+ &&>>>>_w_o_r_d
+
+ This is semantically equivalent to
+
+ >>>>_w_o_r_d 2>>&&1
+
+ (see DDuupplliiccaattiinngg FFiillee DDeessccrriippttoorrss below).
+
+ HHeerree DDooccuummeennttss
+ This type of redirection instructs the shell to read input from the
+ current source until a line containing only _d_e_l_i_m_i_t_e_r (with no trailing
+ blanks) is seen. All of the lines read up to that point are then used
+ as the standard input (or file descriptor _n if _n is specified) for a
+ command.
+
+ The format of here-documents is:
+
+ [_n]<<<<[--]_w_o_r_d
+ _h_e_r_e_-_d_o_c_u_m_e_n_t
+ _d_e_l_i_m_i_t_e_r
+
+ No parameter and variable expansion, command substitution, arithmetic
+ expansion, or pathname expansion is performed on _w_o_r_d. If any part of
+ _w_o_r_d is quoted, the _d_e_l_i_m_i_t_e_r is the result of quote removal on _w_o_r_d,
+ and the lines in the here-document are not expanded. If _w_o_r_d is
+ unquoted, all lines of the here-document are subjected to parameter
+ expansion, command substitution, and arithmetic expansion, the charac-
+ ter sequence \\<<nneewwlliinnee>> is ignored, and \\ must be used to quote the
+ characters \\, $$, and ``.
+
+ If the redirection operator is <<<<--, then all leading tab characters are
+ stripped from input lines and the line containing _d_e_l_i_m_i_t_e_r. This
+ allows here-documents within shell scripts to be indented in a natural
+ fashion.
+
+ HHeerree SSttrriinnggss
+ A variant of here documents, the format is:
+
+ [_n]<<<<<<_w_o_r_d
+
+ The _w_o_r_d undergoes tilde expansion, parameter and variable expansion,
+ command substitution, arithmetic expansion, and quote removal. Path-
+ name expansion and word splitting are not performed. The result is
+ supplied as a single string, with a newline appended, to the command on
+ its standard input (or file descriptor _n if _n is specified).
+
+ DDuupplliiccaattiinngg FFiillee DDeessccrriippttoorrss
+ The redirection operator
+
+ [_n]<<&&_w_o_r_d
+
+ is used to duplicate input file descriptors. If _w_o_r_d expands to one or
+ more digits, the file descriptor denoted by _n is made to be a copy of
+ that file descriptor. If the digits in _w_o_r_d do not specify a file
+ descriptor open for input, a redirection error occurs. If _w_o_r_d evalu-
+ ates to --, file descriptor _n is closed. If _n is not specified, the
+ standard input (file descriptor 0) is used.
+
+ The operator
+
+ [_n]>>&&_w_o_r_d
+
+ is used similarly to duplicate output file descriptors. If _n is not
+ specified, the standard output (file descriptor 1) is used. If the
+ digits in _w_o_r_d do not specify a file descriptor open for output, a re-
+ direction error occurs. If _w_o_r_d evaluates to --, file descriptor _n is
+ closed. As a special case, if _n is omitted, and _w_o_r_d does not expand
+ to one or more digits or --, the standard output and standard error are
+ redirected as described previously.
+
+ MMoovviinngg FFiillee DDeessccrriippttoorrss
+ The redirection operator
+
+ [_n]<<&&_d_i_g_i_t--
+
+ moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard
+ input (file descriptor 0) if _n is not specified. _d_i_g_i_t is closed after
+ being duplicated to _n.
+
+ Similarly, the redirection operator
+
+ [_n]>>&&_d_i_g_i_t--
+
+ moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard
+ output (file descriptor 1) if _n is not specified.
+
+ OOppeenniinngg FFiillee DDeessccrriippttoorrss ffoorr RReeaaddiinngg aanndd WWrriittiinngg
+ The redirection operator
+
+ [_n]<<>>_w_o_r_d
+
+ causes the file whose name is the expansion of _w_o_r_d to be opened for
+ both reading and writing on file descriptor _n, or on file descriptor 0
+ if _n is not specified. If the file does not exist, it is created.
+
+AALLIIAASSEESS
+ _A_l_i_a_s_e_s 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 aalliiaass and uunnaalliiaass builtin
+ commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The first word of each
+ simple command, if unquoted, is checked to see if it has an alias. If
+ so, that word is replaced by the text of the alias. The characters //,
+ $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s 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 llss to llss --FF, for instance, and
+ bbaasshh does not try to recursively expand the replacement text. If the
+ last character of the alias value is a _b_l_a_n_k, then the next command
+ word following the alias is also checked for alias expansion.
+
+ Aliases are created and listed with the aalliiaass command, and removed with
+ the uunnaalliiaass command.
+
+ There is no mechanism for using arguments in the replacement text. If
+ arguments are needed, a shell function should be used (see FFUUNNCCTTIIOONNSS
+ below).
+
+ Aliases are not expanded when the shell is not interactive, unless the
+ eexxppaanndd__aalliiaasseess shell option is set using sshhoopptt (see the description of
+ sshhoopptt under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+
+ The rules concerning the definition and use of aliases are somewhat
+ confusing. BBaasshh always reads at least one complete line of input, and
+ all lines that make up a compound command, before executing any of the
+ commands on that line or the compound command. 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 command. As a
+ consequence, aliases defined in a function are not available until
+ after that function is executed. To be safe, always put alias defini-
+ tions on a separate line, and do not use aalliiaass in compound commands.
+
+ For almost every purpose, aliases are superseded by shell functions.
+
+FFUUNNCCTTIIOONNSS
+ A shell function, defined as described above under SSHHEELLLL GGRRAAMMMMAARR,
+ stores a series of commands for later execution. 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. Functions are executed
+ in the context of the current shell; no new process is created to
+ interpret them (contrast this with the execution of a shell script).
+ When a function is executed, the arguments to the function become the
+ positional parameters during its execution. The special parameter ## is
+ updated to reflect the change. Special parameter 00 is unchanged. The
+ first element of the FFUUNNCCNNAAMMEE variable is set to the name of the func-
+ tion while the function is executing.
+
+ All other aspects of the shell execution environment are identical
+ between a function and its caller with these exceptions: the DDEEBBUUGG and
+ RREETTUURRNN traps (see the description of the ttrraapp builtin under SSHHEELLLL
+ BBUUIILLTTIINN CCOOMMMMAANNDDSS below) are not inherited unless the function has been
+ given the ttrraaccee attribute (see the description of the ddeeccllaarree builtin
+ below) or the --oo ffuunnccttrraaccee shell option has been enabled with the sseett
+ builtin (in which case all functions inherit the DDEEBBUUGG and RREETTUURRNN
+ traps), and the EERRRR trap is not inherited unless the --oo eerrrrttrraaccee shell
+ option has been enabled.
+
+ Variables local to the function may be declared with the llooccaall builtin
+ command. Ordinarily, variables and their values are shared between the
+ function and its caller. If a variable is declared llooccaall, the vari-
+ able's visible scope is restricted to that function and its children
+ (including the functions it calls). Local variables "shadow" variables
+ with the same name declared at previous scopes. For instance, a local
+ variable declared in a function hides a global variable of the same
+ name: references and assignments refer to the local variable, leaving
+ the global variable unmodified. When the function returns, the global
+ variable is once again visible.
+
+ The shell uses _d_y_n_a_m_i_c _s_c_o_p_i_n_g to control a variable's visibility
+ within functions. With dynamic scoping, visible variables and their
+ values are a result of the sequence of function calls that caused exe-
+ cution to reach the current function. The value of a variable that a
+ function sees depends on its value within its caller, if any, whether
+ that caller is the "global" scope or another shell function. This is
+ also the value that a local variable declaration "shadows", and the
+ value that is restored when the function returns.
+
+ For example, if a variable _v_a_r is declared as local in function _f_u_n_c_1,
+ and _f_u_n_c_1 calls another function _f_u_n_c_2, references to _v_a_r made from
+ within _f_u_n_c_2 will resolve to the local variable _v_a_r from _f_u_n_c_1, shadow-
+ ing any global variable named _v_a_r.
+
+ The uunnsseett builtin also acts using the same dynamic scope: if a variable
+ is local to the current scope, uunnsseett will unset it; otherwise the unset
+ will refer to the variable found in any calling scope as described
+ above. If a variable at the current local scope is unset, it will
+ remain so until it is reset in that scope or until the function
+ returns. Once the function returns, any instance of the variable at a
+ previous scope will become visible. If the unset acts on a variable at
+ a previous scope, any instance of a variable with that name that had
+ been shadowed will become visible.
+
+ The FFUUNNCCNNEESSTT variable, if set to a numeric value greater than 0,
+ defines a maximum function nesting level. Function invocations that
+ exceed the limit cause the entire command to abort.
+
+ If the builtin command rreettuurrnn is executed in a function, the function
+ completes and execution resumes with the next command after the func-
+ tion call. Any command associated with the RREETTUURRNN trap is executed
+ before execution resumes. When a function completes, the values of the
+ positional parameters and the special parameter ## are restored to the
+ values they had prior to the function's execution.
+
+ Function names and definitions may be listed with the --ff option to the
+ ddeeccllaarree or ttyyppeesseett builtin commands. The --FF option to ddeeccllaarree or ttyyppee--
+ sseett will list the function names only (and optionally the source file
+ and line number, if the eexxttddeebbuugg shell option is enabled). Functions
+ may be exported so that subshells automatically have them defined with
+ the --ff option to the eexxppoorrtt builtin. A function definition may be
+ deleted using the --ff option to the uunnsseett builtin.
+
+ Functions may be recursive. The FFUUNNCCNNEESSTT variable may be used to limit
+ the depth of the function call stack and restrict the number of func-
+ tion invocations. By default, no limit is imposed on the number of
+ recursive calls.
+
+AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN
+ The shell allows arithmetic expressions to be evaluated, under certain
+ circumstances (see the lleett and ddeeccllaarree builtin commands, the (((( com-
+ pound command, and AArriitthhmmeettiicc EExxppaannssiioonn). 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 fol-
+ lowing list of operators is grouped into levels of equal-precedence
+ operators. The levels are listed in order of decreasing precedence.
+
+ _i_d++++ _i_d----
+ variable post-increment and post-decrement
+ -- ++ unary minus and plus
+ ++++_i_d ----_i_d
+ variable pre-increment and pre-decrement
+ !! ~~ logical and bitwise negation
+ **** exponentiation
+ ** // %% multiplication, division, remainder
+ ++ -- addition, subtraction
+ <<<< >>>> left and right bitwise shifts
+ <<== >>== << >>
+ comparison
+ ==== !!== equality and inequality
+ && bitwise AND
+ ^^ bitwise exclusive OR
+ || bitwise OR
+ &&&& logical AND
+ |||| logical OR
+ _e_x_p_r??_e_x_p_r::_e_x_p_r
+ conditional operator
+ == **== //== %%== ++== --== <<<<== >>>>== &&== ^^== ||==
+ assignment
+ _e_x_p_r_1 ,, _e_x_p_r_2
+ comma
+
+ Shell variables are allowed as operands; parameter expansion is per-
+ formed 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 _i_n_t_e_g_e_r
+ attribute using ddeeccllaarree --ii is assigned a value. A null value evaluates
+ to 0. A shell variable need not have its _i_n_t_e_g_e_r attribute turned on
+ to be used in an expression.
+
+ Constants with a leading 0 are interpreted as octal numbers. A leading
+ 0x or 0X denotes hexadecimal. Otherwise, numbers take the form
+ [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal number between 2 and 64
+ representing the arithmetic base, and _n is a number in that base. If
+ _b_a_s_e_# is omitted, then base 10 is used. When specifying _n, the digits
+ greater than 9 are represented by the lowercase letters, the uppercase
+ letters, @, and _, in that order. If _b_a_s_e is less than or equal to 36,
+ lowercase and uppercase letters may be used interchangeably to repre-
+ sent numbers between 10 and 35.
+
+ Operators are evaluated in order of precedence. Sub-expressions in
+ parentheses are evaluated first and may override the precedence rules
+ above.
+
+CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS
+ Conditional expressions are used by the [[[[ compound command and the
+ tteesstt and [[ builtin commands to test file attributes and perform string
+ and arithmetic comparisons. The tteesstt abd [[ commands determine their
+ behavior based on the number of arguments; see the descriptions of
+ those commands for any other command-specific actions.
+
+ Expressions are formed from the following unary or binary primaries.
+ BBaasshh handles several filenames specially when they are used in expres-
+ sions. If the operating system on which bbaasshh is running provides these
+ special files, bash will use them; otherwise it will emulate them
+ internally with this behavior: If any _f_i_l_e argument to one of the pri-
+ maries is of the form _/_d_e_v_/_f_d_/_n, then file descriptor _n is checked. If
+ the _f_i_l_e argument to one of the primaries is one of _/_d_e_v_/_s_t_d_i_n,
+ _/_d_e_v_/_s_t_d_o_u_t, or _/_d_e_v_/_s_t_d_e_r_r, file descriptor 0, 1, or 2, respectively,
+ is checked.
+
+ Unless otherwise specified, primaries that operate on files follow sym-
+ bolic links and operate on the target of the link, rather than the link
+ itself.
+
+ When used with [[[[, the << and >> operators sort lexicographically using
+ the current locale. The tteesstt command sorts using ASCII ordering.
+
+ --aa _f_i_l_e
+ True if _f_i_l_e exists.
+ --bb _f_i_l_e
+ True if _f_i_l_e exists and is a block special file.
+ --cc _f_i_l_e
+ True if _f_i_l_e exists and is a character special file.
+ --dd _f_i_l_e
+ True if _f_i_l_e exists and is a directory.
+ --ee _f_i_l_e
+ True if _f_i_l_e exists.
+ --ff _f_i_l_e
+ True if _f_i_l_e exists and is a regular file.
+ --gg _f_i_l_e
+ True if _f_i_l_e exists and is set-group-id.
+ --hh _f_i_l_e
+ True if _f_i_l_e exists and is a symbolic link.
+ --kk _f_i_l_e
+ True if _f_i_l_e exists and its ``sticky'' bit is set.
+ --pp _f_i_l_e
+ True if _f_i_l_e exists and is a named pipe (FIFO).
+ --rr _f_i_l_e
+ True if _f_i_l_e exists and is readable.
+ --ss _f_i_l_e
+ True if _f_i_l_e exists and has a size greater than zero.
+ --tt _f_d True if file descriptor _f_d is open and refers to a terminal.
+ --uu _f_i_l_e
+ True if _f_i_l_e exists and its set-user-id bit is set.
+ --ww _f_i_l_e
+ True if _f_i_l_e exists and is writable.
+ --xx _f_i_l_e
+ True if _f_i_l_e exists and is executable.
+ --GG _f_i_l_e
+ True if _f_i_l_e exists and is owned by the effective group id.
+ --LL _f_i_l_e
+ True if _f_i_l_e exists and is a symbolic link.
+ --NN _f_i_l_e
+ True if _f_i_l_e exists and has been modified since it was last
+ read.
+ --OO _f_i_l_e
+ True if _f_i_l_e exists and is owned by the effective user id.
+ --SS _f_i_l_e
+ True if _f_i_l_e exists and is a socket.
+ _f_i_l_e_1 --eeff _f_i_l_e_2
+ True if _f_i_l_e_1 and _f_i_l_e_2 refer to the same device and inode num-
+ bers.
+ _f_i_l_e_1 -nntt _f_i_l_e_2
+ True if _f_i_l_e_1 is newer (according to modification date) than
+ _f_i_l_e_2, or if _f_i_l_e_1 exists and _f_i_l_e_2 does not.
+ _f_i_l_e_1 -oott _f_i_l_e_2
+ True if _f_i_l_e_1 is older than _f_i_l_e_2, or if _f_i_l_e_2 exists and _f_i_l_e_1
+ does not.
+ --oo _o_p_t_n_a_m_e
+ True if the shell option _o_p_t_n_a_m_e is enabled. See the list of
+ options under the description of the --oo option to the sseett
+ builtin below.
+ --vv _v_a_r_n_a_m_e
+ True if the shell variable _v_a_r_n_a_m_e is set (has been assigned a
+ value).
+ --RR _v_a_r_n_a_m_e
+ True if the shell variable _v_a_r_n_a_m_e is set and is a name refer-
+ ence.
+ --zz _s_t_r_i_n_g
+ True if the length of _s_t_r_i_n_g is zero.
+ _s_t_r_i_n_g
+ --nn _s_t_r_i_n_g
+ True if the length of _s_t_r_i_n_g is non-zero.
+
+ _s_t_r_i_n_g_1 ==== _s_t_r_i_n_g_2
+ _s_t_r_i_n_g_1 == _s_t_r_i_n_g_2
+ True if the strings are equal. == should be used with the tteesstt
+ command for POSIX conformance. When used with the [[[[ command,
+ this performs pattern matching as described above (CCoommppoouunndd CCoomm--
+ mmaannddss).
+
+ _s_t_r_i_n_g_1 !!== _s_t_r_i_n_g_2
+ True if the strings are not equal.
+
+ _s_t_r_i_n_g_1 << _s_t_r_i_n_g_2
+ True if _s_t_r_i_n_g_1 sorts before _s_t_r_i_n_g_2 lexicographically.
+
+ _s_t_r_i_n_g_1 >> _s_t_r_i_n_g_2
+ True if _s_t_r_i_n_g_1 sorts after _s_t_r_i_n_g_2 lexicographically.
+
+ _a_r_g_1 OOPP _a_r_g_2
+ OOPP is one of --eeqq, --nnee, --lltt, --llee, --ggtt, or --ggee. These arithmetic
+ binary operators return true if _a_r_g_1 is equal to, not equal to,
+ less than, less than or equal to, greater than, or greater than
+ or equal to _a_r_g_2, respectively. _A_r_g_1 and _a_r_g_2 may be positive
+ or negative integers. When used with the [[[[ command, _A_r_g_1 and
+ _A_r_g_2 are evaluated as arithmetic expressions (see AARRIITTHHMMEETTIICC
+ EEVVAALLUUAATTIIOONN above).
+
+SSIIMMPPLLEE CCOOMMMMAANNDD EEXXPPAANNSSIIOONN
+ When a simple command is executed, the shell performs the following
+ expansions, assignments, and redirections, from left to right.
+
+ 1. The words that the parser has marked as variable assignments
+ (those preceding the command name) and redirections are saved
+ for later processing.
+
+ 2. The words that are not variable assignments or redirections are
+ expanded. 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.
+
+ 3. Redirections are performed as described above under RREEDDIIRREECCTTIIOONN.
+
+ 4. The text after the == in each variable assignment undergoes tilde
+ expansion, parameter expansion, command substitution, arithmetic
+ expansion, and quote removal before being assigned to the vari-
+ able.
+
+ If no command name results, the variable assignments affect the current
+ shell environment. Otherwise, the variables are added to the environ-
+ ment of the executed command and do not affect the current shell envi-
+ ronment. If any of the assignments attempts to assign a value to a
+ readonly variable, an error occurs, and the command exits with a non-
+ zero status.
+
+ If no command name results, redirections are performed, but do not
+ affect the current shell environment. A redirection error causes the
+ command to exit with a non-zero status.
+
+ If there is a command name left after expansion, execution proceeds as
+ described below. Otherwise, the command exits. If one of the expan-
+ sions 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.
+
+CCOOMMMMAANNDD EEXXEECCUUTTIIOONN
+ 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.
+
+ 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 above in FFUUNNCCTTIIOONNSS. 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.
+
+ If the name is neither a shell function nor a builtin, and contains no
+ slashes, bbaasshh searches each element of the PPAATTHH for a directory con-
+ taining an executable file by that name. BBaasshh uses a hash table to
+ remember the full pathnames of executable files (see hhaasshh under SSHHEELLLL
+ BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A full search of the directories in PPAATTHH is
+ performed only if the command is not found in the hash table. If the
+ search is unsuccessful, the shell searches for a defined shell function
+ named ccoommmmaanndd__nnoott__ffoouunndd__hhaannddllee. If that function exists, it is invoked
+ in a separate execution environment with the original command and the
+ original command's arguments as its arguments, and the function's exit
+ status becomes the exit status of that subshell. If that function is
+ not defined, the shell prints an error message and returns an exit sta-
+ tus of 127.
+
+ If the search is successful, or if the command name contains one or
+ more slashes, the shell executes the named program in a separate execu-
+ tion environment. Argument 0 is set to the name given, and the remain-
+ ing arguments to the command are set to the arguments given, if any.
+
+ 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 _s_h_e_l_l _s_c_r_i_p_t, a
+ file containing shell commands. A subshell is spawned to execute it.
+ This subshell reinitializes itself, so that the effect is as if a new
+ shell had been invoked to handle the script, with the exception that
+ the locations of commands remembered by the parent (see hhaasshh below
+ under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS) are retained by the child.
+
+ If the program is a file beginning with ##!!, the remainder of the first
+ line specifies an interpreter for the program. The shell executes the
+ specified interpreter on operating systems that do not handle this exe-
+ cutable format themselves. The arguments to the interpreter consist of
+ a single optional argument following the interpreter name on the first
+ line of the program, followed by the name of the program, followed by
+ the command arguments, if any.
+
+CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT
+ The shell has an _e_x_e_c_u_t_i_o_n _e_n_v_i_r_o_n_m_e_n_t, which consists of the follow-
+ ing:
+
+ +o open files inherited by the shell at invocation, as modified by
+ redirections supplied to the eexxeecc builtin
+
+ +o the current working directory as set by ccdd, ppuusshhdd, or ppooppdd, or
+ inherited by the shell at invocation
+
+ +o the file creation mode mask as set by uummaasskk or inherited from
+ the shell's parent
+
+ +o current traps set by ttrraapp
+
+ +o shell parameters that are set by variable assignment or with sseett
+ or inherited from the shell's parent in the environment
+
+ +o shell functions defined during execution or inherited from the
+ shell's parent in the environment
+
+ +o options enabled at invocation (either by default or with com-
+ mand-line arguments) or by sseett
+
+ +o options enabled by sshhoopptt
+
+ +o shell aliases defined with aalliiaass
+
+ +o various process IDs, including those of background jobs, the
+ value of $$$$, and the value of PPPPIIDD
+
+ When a simple command other than a builtin or shell function is to be
+ executed, it is invoked in a separate execution environment that con-
+ sists of the following. Unless otherwise noted, the values are inher-
+ ited from the shell.
+
+
+ +o the shell's open files, plus any modifications and additions
+ specified by redirections to the command
+
+ +o the current working directory
+
+ +o the file creation mode mask
+
+ +o shell variables and functions marked for export, along with
+ variables exported for the command, passed in the environment
+
+ +o traps caught by the shell are reset to the values inherited from
+ the shell's parent, and traps ignored by the shell are ignored
+
+ A command invoked in this separate environment cannot affect the
+ shell's execution environment.
+
+ Command substitution, commands grouped with parentheses, and asynchro-
+ nous 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 invoca-
+ tion. Builtin commands that are invoked as part of a pipeline are also
+ executed in a subshell environment. Changes made to the subshell envi-
+ ronment cannot affect the shell's execution environment.
+
+ Subshells spawned to execute command substitutions inherit the value of
+ the --ee option from the parent shell. When not in _p_o_s_i_x _m_o_d_e, bbaasshh
+ clears the --ee option in such subshells.
+
+ If a command is followed by a && and job control is not active, the
+ default standard input for the command is the empty file _/_d_e_v_/_n_u_l_l.
+ Otherwise, the invoked command inherits the file descriptors of the
+ calling shell as modified by redirections.
+
+EENNVVIIRROONNMMEENNTT
+ When a program is invoked it is given an array of strings called the
+ _e_n_v_i_r_o_n_m_e_n_t. This is a list of _n_a_m_e-_v_a_l_u_e pairs, of the form
+ _n_a_m_e=_v_a_l_u_e.
+
+ The shell 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 _e_x_p_o_r_t to child pro-
+ cesses. Executed commands inherit the environment. The eexxppoorrtt and
+ ddeeccllaarree --xx commands allow parameters and functions to be added to and
+ deleted from the environment. If the value of a parameter in the envi-
+ ronment 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 modi-
+ fied in the shell, less any pairs removed by the uunnsseett command, plus
+ any additions via the eexxppoorrtt and ddeeccllaarree --xx commands.
+
+ The environment for any _s_i_m_p_l_e _c_o_m_m_a_n_d or function may be augmented
+ temporarily by prefixing it with parameter assignments, as described
+ above in PPAARRAAMMEETTEERRSS. These assignment statements affect only the envi-
+ ronment seen by that command.
+
+ If the --kk option is set (see the sseett builtin command below), then _a_l_l
+ parameter assignments are placed in the environment for a command, not
+ just those that precede the command name.
+
+ When bbaasshh invokes an external command, the variable __ is set to the
+ full filename of the command and passed to that command in its environ-
+ ment.
+
+EEXXIITT SSTTAATTUUSS
+ The exit status of an executed command is the value returned by the
+ _w_a_i_t_p_i_d system call or equivalent function. Exit statuses fall between
+ 0 and 255, though, as explained below, the shell may use values above
+ 125 specially. Exit statuses from shell builtins and compound commands
+ are also limited to this range. Under certain circumstances, the shell
+ will use special values to indicate specific failure modes.
+
+ For the shell's purposes, a command which exits with a zero exit status
+ has succeeded. An exit status of zero indicates success. A non-zero
+ exit status indicates failure. When a command terminates on a fatal
+ signal _N, bbaasshh uses the value of 128+_N as the exit status.
+
+ If a command is not found, the child process created to execute it
+ returns a status of 127. If a command is found but is not executable,
+ the return status is 126.
+
+ If a command fails because of an error during expansion or redirection,
+ the exit status is greater than zero.
+
+ Shell builtin commands return a status of 0 (_t_r_u_e) if successful, and
+ non-zero (_f_a_l_s_e) if an error occurs while they execute. All builtins
+ return an exit status of 2 to indicate incorrect usage, generally
+ invalid options or missing arguments.
+
+ BBaasshh itself returns the exit status of the last command executed,
+ unless a syntax error occurs, in which case it exits with a non-zero
+ value. See also the eexxiitt builtin command below.
+
+SSIIGGNNAALLSS
+ When bbaasshh is interactive, in the absence of any traps, it ignores
+ SSIIGGTTEERRMM (so that kkiillll 00 does not kill an interactive shell), and SSIIGGIINNTT
+ is caught and handled (so that the wwaaiitt builtin is interruptible). In
+ all cases, bbaasshh ignores SSIIGGQQUUIITT. If job control is in effect, bbaasshh
+ ignores SSIIGGTTTTIINN, SSIIGGTTTTOOUU, and SSIIGGTTSSTTPP.
+
+ Non-builtin commands run by bbaasshh have signal handlers set to the values
+ inherited by the shell from its parent. When job control is not in
+ effect, asynchronous commands ignore SSIIGGIINNTT and SSIIGGQQUUIITT in addition to
+ these inherited handlers. Commands run as a result of command substi-
+ tution ignore the keyboard-generated job control signals SSIIGGTTTTIINN, SSIIGGTT--
+ TTOOUU, and SSIIGGTTSSTTPP.
+
+ The shell exits by default upon receipt of a SSIIGGHHUUPP. Before exiting,
+ an interactive shell resends the SSIIGGHHUUPP to all jobs, running or
+ stopped. Stopped jobs are sent SSIIGGCCOONNTT to ensure that they receive the
+ SSIIGGHHUUPP. To prevent the shell from sending the signal to a particular
+ job, it should be removed from the jobs table with the ddiissoowwnn builtin
+ (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or marked to not receive SSIIGGHHUUPP
+ using ddiissoowwnn --hh.
+
+ If the hhuuppoonneexxiitt shell option has been set with sshhoopptt, bbaasshh sends a
+ SSIIGGHHUUPP to all jobs when an interactive login shell exits.
+
+ If bbaasshh 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 com-
+ mand completes. When bbaasshh is waiting for an asynchronous command via
+ the wwaaiitt builtin, the reception of a signal for which a trap has been
+ set will cause the wwaaiitt builtin to return immediately with an exit sta-
+ tus greater than 128, immediately after which the trap is executed.
+
+JJOOBB CCOONNTTRROOLL
+ _J_o_b _c_o_n_t_r_o_l refers to the ability to selectively stop (_s_u_s_p_e_n_d) the
+ execution of processes and continue (_r_e_s_u_m_e) their execution at a later
+ point. A user typically employs this facility via an interactive
+ interface supplied jointly by the operating system kernel's terminal
+ driver and bbaasshh.
+
+ The shell associates a _j_o_b with each pipeline. It keeps a table of
+ currently executing jobs, which may be listed with the jjoobbss command.
+ When bbaasshh starts a job asynchronously (in the _b_a_c_k_g_r_o_u_n_d), it prints a
+ line that looks like:
+
+ [1] 25647
+
+ 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. BBaasshh
+ uses the _j_o_b abstraction as the basis for job control.
+
+ To facilitate the implementation of the user interface to job control,
+ the operating system maintains the notion of a _c_u_r_r_e_n_t _t_e_r_m_i_n_a_l _p_r_o_c_e_s_s
+ _g_r_o_u_p _I_D. 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 SSIIGGIINNTT. These processes are said to be in
+ the _f_o_r_e_g_r_o_u_n_d. _B_a_c_k_g_r_o_u_n_d processes are those whose process group ID
+ differs from the terminal's; such processes are immune to keyboard-gen-
+ erated signals. Only foreground processes are allowed to read from or,
+ if the user so specifies with stty tostop, write to the terminal.
+ Background processes which attempt to read from (write to when stty
+ tostop is in effect) the terminal are sent a SSIIGGTTTTIINN ((SSIIGGTTTTOOUU)) signal
+ by the kernel's terminal driver, which, unless caught, suspends the
+ process.
+
+ If the operating system on which bbaasshh is running supports job control,
+ bbaasshh contains facilities to use it. Typing the _s_u_s_p_e_n_d character (typ-
+ ically ^^ZZ, Control-Z) while a process is running causes that process to
+ be stopped and returns control to bbaasshh. Typing the _d_e_l_a_y_e_d _s_u_s_p_e_n_d
+ character (typically ^^YY, Control-Y) causes the process to be stopped
+ when it attempts to read input from the terminal, and control to be
+ returned to bbaasshh. The user may then manipulate the state of this job,
+ using the bbgg command to continue it in the background, the ffgg command
+ to continue it in the foreground, or the kkiillll command to kill it. A ^^ZZ
+ takes effect immediately, and has the additional side effect of causing
+ pending output and typeahead to be discarded.
+
+ There are a number of ways to refer to a job in the shell. The charac-
+ ter %% introduces a job specification (_j_o_b_s_p_e_c). Job number _n may be
+ referred to as %%nn. 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, %%ccee refers to a stopped ccee job. If a prefix
+ matches more than one job, bbaasshh reports an error. Using %%??ccee, on the
+ other hand, refers to any job containing the string ccee in its command
+ line. If the substring matches more than one job, bbaasshh reports an
+ error. The symbols %%%% and %%++ refer to the shell's notion of the _c_u_r_-
+ _r_e_n_t _j_o_b, which is the last job stopped while it was in the foreground
+ or started in the background. The _p_r_e_v_i_o_u_s _j_o_b may be referenced using
+ %%--. If there is only a single job, %%++ and %%-- can both be used to refer
+ to that job. In output pertaining to jobs (e.g., the output of the
+ jjoobbss command), the current job is always flagged with a ++, and the pre-
+ vious job with a --. A single % (with no accompanying job specifica-
+ tion) also refers to the current job.
+
+ Simply naming a job can be used to bring it into the foreground: %%11 is
+ a synonym for ````ffgg %%11'''', bringing job 1 from the background into the
+ foreground. Similarly, ````%%11 &&'''' resumes job 1 in the background,
+ equivalent to ````bbgg %%11''''.
+
+ The shell learns immediately whenever a job changes state. Normally,
+ bbaasshh 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 --bb
+ option to the sseett builtin command is enabled, bbaasshh reports such changes
+ immediately. Any trap on SSIIGGCCHHLLDD is executed for each child that
+ exits.
+
+ If an attempt to exit bbaasshh is made while jobs are stopped (or, if the
+ cchheecckkjjoobbss shell option has been enabled using the sshhoopptt builtin, run-
+ ning), the shell prints a warning message, and, if the cchheecckkjjoobbss option
+ is enabled, lists the jobs and their statuses. The jjoobbss command may
+ then be used to inspect their status. If a second attempt to exit is
+ made without an intervening command, the shell does not print another
+ warning, and any stopped jobs are terminated.
+
+ When the shell is waiting for a job or process using the wwaaiitt builtin,
+ and job control is enabled, wwaaiitt will return when the job changes
+ state. The --ff option will force wwaaiitt to wait until the job or process
+ terminates before returning.
+
+PPRROOMMPPTTIINNGG
+ When executing interactively, bbaasshh displays the primary prompt PPSS11 when
+ it is ready to read a command, and the secondary prompt PPSS22 when it
+ needs more input to complete a command. BBaasshh displays PPSS00 after it
+ reads a command but before executing it. BBaasshh displays PPSS44 as
+ described above before tracing each command when the --xx option is
+ enabled. BBaasshh allows these prompt strings to be customized by insert-
+ ing a number of backslash-escaped special characters that are decoded
+ as follows:
+ \\aa an ASCII bell character (07)
+ \\dd the date in "Weekday Month Date" format (e.g., "Tue May
+ 26")
+ \\DD{{_f_o_r_m_a_t}}
+ the _f_o_r_m_a_t is passed to _s_t_r_f_t_i_m_e(3) and the result is
+ inserted into the prompt string; an empty _f_o_r_m_a_t results
+ in a locale-specific time representation. The braces are
+ required
+ \\ee an ASCII escape character (033)
+ \\hh the hostname up to the first `.'
+ \\HH the hostname
+ \\jj the number of jobs currently managed by the shell
+ \\ll the basename of the shell's terminal device name
+ \\nn newline
+ \\rr carriage return
+ \\ss the name of the shell, the basename of $$00 (the portion
+ following the final slash)
+ \\tt the current time in 24-hour HH:MM:SS format
+ \\TT the current time in 12-hour HH:MM:SS format
+ \\@@ the current time in 12-hour am/pm format
+ \\AA the current time in 24-hour HH:MM format
+ \\uu the username of the current user
+ \\vv the version of bbaasshh (e.g., 2.00)
+ \\VV the release of bbaasshh, version + patch level (e.g., 2.00.0)
+ \\ww the current working directory, with $$HHOOMMEE abbreviated
+ with a tilde (uses the value of the PPRROOMMPPTT__DDIIRRTTRRIIMM vari-
+ able)
+ \\WW the basename of the current working directory, with $$HHOOMMEE
+ abbreviated with a tilde
+ \\!! the history number of this command
+ \\## the command number of this command
+ \\$$ if the effective UID is 0, a ##, otherwise a $$
+ \\_n_n_n the character corresponding to the octal number _n_n_n
+ \\\\ a backslash
+ \\[[ begin a sequence of non-printing characters, which could
+ be used to embed a terminal control sequence into the
+ prompt
+ \\]] end a sequence of non-printing characters
+
+ 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 HHIISSTTOORRYY
+ below), while the command number is the position in the sequence of
+ commands executed during the current shell session. After the string
+ is decoded, it is expanded via parameter expansion, command substitu-
+ tion, arithmetic expansion, and quote removal, subject to the value of
+ the pprroommppttvvaarrss shell option (see the description of the sshhoopptt command
+ under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+
+RREEAADDLLIINNEE
+ This is the library that handles reading input when using an interac-
+ tive shell, unless the ----nnooeeddiittiinngg option is given at shell invocation.
+ Line editing is also used when using the --ee option to the rreeaadd builtin.
+ By default, the line editing commands are similar to those of Emacs. A
+ vi-style line editing interface is also available. Line editing can be
+ enabled at any time using the --oo eemmaaccss or --oo vvii options to the sseett
+ builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). To turn off line editing
+ after the shell is running, use the ++oo eemmaaccss or ++oo vvii options to the
+ sseett builtin.
+
+ RReeaaddlliinnee NNoottaattiioonn
+ In this section, the Emacs-style notation is used to denote keystrokes.
+ Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Simi-
+ larly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On key-
+ boards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key
+ then the _x key. This makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x
+ means ESC-Control-_x, or press the Escape key then hold the Control key
+ while pressing the _x key.)
+
+ Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which normally act as
+ a repeat count. Sometimes, however, it is the sign of the argument
+ that is significant. Passing a negative argument to a command that
+ acts in the forward direction (e.g., kkiillll--lliinnee) causes that command to
+ act in a backward direction. Commands whose behavior with arguments
+ deviates from this are noted below.
+
+ When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved
+ for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a
+ _k_i_l_l _r_i_n_g. Consecutive kills cause the text to be accumulated into one
+ unit, which can be yanked all at once. Commands which do not kill text
+ separate the chunks of text on the kill ring.
+
+ RReeaaddlliinnee IInniittiiaalliizzaattiioonn
+ Readline is customized by putting commands in an initialization file
+ (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of
+ the IINNPPUUTTRRCC variable. If that variable is unset, the default is
+ _~_/_._i_n_p_u_t_r_c. When a program which uses the readline library starts up,
+ the initialization file is read, and the key bindings and variables are
+ set. There are only a few basic constructs allowed in the readline
+ initialization file. Blank lines are ignored. Lines beginning with a
+ ## are comments. Lines beginning with a $$ indicate conditional con-
+ structs. Other lines denote key bindings and variable settings.
+
+ The default key-bindings may be changed with an _i_n_p_u_t_r_c file. Other
+ programs that use this library may add their own commands and bindings.
+
+ For example, placing
+
+ M-Control-u: universal-argument
+ or
+ C-Meta-u: universal-argument
+ into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_-
+ _s_a_l_-_a_r_g_u_m_e_n_t.
+
+ The following symbolic character names are recognized: _R_U_B_O_U_T, _D_E_L,
+ _E_S_C, _L_F_D, _N_E_W_L_I_N_E, _R_E_T, _R_E_T_U_R_N, _S_P_C, _S_P_A_C_E, and _T_A_B.
+
+ In addition to command names, readline allows keys to be bound to a
+ string that is inserted when the key is pressed (a _m_a_c_r_o).
+
+ RReeaaddlliinnee KKeeyy BBiinnddiinnggss
+ The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple.
+ All that is required is the name of the command or the text of a macro
+ and a key sequence to which it should be bound. The name may be speci-
+ fied in one of two ways: as a symbolic key name, possibly with _M_e_t_a_- or
+ _C_o_n_t_r_o_l_- prefixes, or as a key sequence.
+
+ When using the form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_n_a_m_e is the name
+ of a key spelled out in English. For example:
+
+ Control-u: universal-argument
+ Meta-Rubout: backward-kill-word
+ Control-o: "> output"
+
+ In the above example, _C_-_u is bound to the function uunniivveerrssaall--aarrgguummeenntt,
+ _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to
+ run the macro expressed on the right hand side (that is, to insert the
+ text ``> output'' into the line).
+
+ In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs
+ from kkeeyynnaammee above in that strings denoting an entire key sequence may
+ be specified by placing the sequence within double quotes. Some GNU
+ Emacs style key escapes can be used, as in the following example, but
+ the symbolic character names are not recognized.
+
+ "\C-u": universal-argument
+ "\C-x\C-r": re-read-init-file
+ "\e[11~": "Function Key 1"
+
+ In this example, _C_-_u is again bound to the function uunniivveerrssaall--aarrgguummeenntt.
+ _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is
+ bound to insert the text ``Function Key 1''.
+
+ The full set of GNU Emacs style escape sequences is
+ \\CC-- control prefix
+ \\MM-- meta prefix
+ \\ee an escape character
+ \\\\ backslash
+ \\"" literal "
+ \\'' literal '
+
+ In addition to the GNU Emacs style escape sequences, a second set of
+ backslash escapes is available:
+ \\aa alert (bell)
+ \\bb backspace
+ \\dd delete
+ \\ff form feed
+ \\nn newline
+ \\rr carriage return
+ \\tt horizontal tab
+ \\vv vertical tab
+ \\_n_n_n the eight-bit character whose value is the octal value
+ _n_n_n (one to three digits)
+ \\xx_H_H the eight-bit character whose value is the hexadecimal
+ value _H_H (one or two hex digits)
+
+ 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 func-
+ tion name. In the macro body, the backslash escapes described above
+ are expanded. Backslash will quote any other character in the macro
+ text, including " and '.
+
+ BBaasshh allows the current readline key bindings to be displayed or modi-
+ fied with the bbiinndd builtin command. The editing mode may be switched
+ during interactive use by using the --oo option to the sseett builtin com-
+ mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+
+ RReeaaddlliinnee VVaarriiaabblleess
+ Readline has variables that can be used to further customize its behav-
+ ior. A variable may be set in the _i_n_p_u_t_r_c file with a statement of the
+ form
+
+ sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e
+
+ Except where noted, readline variables can take the values OOnn or OOffff
+ (without regard to case). Unrecognized variable names are ignored.
+ When a variable value is read, empty or null values, "on" (case-insen-
+ sitive), and "1" are equivalent to OOnn. All other values are equivalent
+ to OOffff. The variables and their default values are:
+
+ bbeellll--ssttyyllee ((aauuddiibbllee))
+ Controls what happens when readline wants to ring the terminal
+ bell. If set to nnoonnee, readline never rings the bell. If set to
+ vviissiibbllee, readline uses a visible bell if one is available. If
+ set to aauuddiibbllee, readline attempts to ring the terminal's bell.
+ bbiinndd--ttttyy--ssppeecciiaall--cchhaarrss ((OOnn))
+ If set to OOnn, readline attempts to bind the control characters
+ treated specially by the kernel's terminal driver to their read-
+ line equivalents.
+ bblliinnkk--mmaattcchhiinngg--ppaarreenn ((OOffff))
+ If set to OOnn, readline attempts to briefly move the cursor to an
+ opening parenthesis when a closing parenthesis is inserted.
+ ccoolloorreedd--ccoommpplleettiioonn--pprreeffiixx ((OOffff))
+ If set to OOnn, when listing completions, readline displays the
+ common prefix of the set of possible completions using a differ-
+ ent color. The color definitions are taken from the value of
+ the LLSS__CCOOLLOORRSS environment variable.
+ ccoolloorreedd--ssttaattss ((OOffff))
+ If set to OOnn, readline displays possible completions using dif-
+ ferent colors to indicate their file type. The color defini-
+ tions are taken from the value of the LLSS__CCOOLLOORRSS environment
+ variable.
+ ccoommmmeenntt--bbeeggiinn ((````##''''))
+ The string that is inserted when the readline iinnsseerrtt--ccoommmmeenntt
+ command is executed. This command is bound to MM--## in emacs mode
+ and to ## in vi command mode.
+ ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh ((--11))
+ The number of screen columns used to display possible matches
+ when performing completion. The value is ignored if it is less
+ than 0 or greater than the terminal screen width. A value of 0
+ will cause matches to be displayed one per line. The default
+ value is -1.
+ ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff))
+ If set to OOnn, readline performs filename matching and completion
+ in a case-insensitive fashion.
+ ccoommpplleettiioonn--mmaapp--ccaassee ((OOffff))
+ If set to OOnn, and ccoommpplleettiioonn--iiggnnoorree--ccaassee is enabled, readline
+ treats hyphens (_-) and underscores (__) as equivalent when per-
+ forming case-insensitive filename matching and completion.
+ ccoommpplleettiioonn--pprreeffiixx--ddiissppllaayy--lleennggtthh ((00))
+ The length in characters of the common prefix of a list of pos-
+ sible completions that is displayed without modification. When
+ set to a value greater than zero, common prefixes longer than
+ this value are replaced with an ellipsis when displaying possi-
+ ble completions.
+ ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000))
+ This determines when the user is queried about viewing the num-
+ ber of possible completions generated by the ppoossssiibbllee--ccoommppllee--
+ ttiioonnss command. It may be set to any integer value greater than
+ or equal to zero. If the number of possible completions is
+ greater than or equal to the value of this variable, the user is
+ asked whether or not he wishes to view them; otherwise they are
+ simply listed on the terminal.
+ ccoonnvveerrtt--mmeettaa ((OOnn))
+ If set to OOnn, readline will convert characters with the eighth
+ bit set to an ASCII key sequence by stripping the eighth bit and
+ prefixing an escape character (in effect, using escape as the
+ _m_e_t_a _p_r_e_f_i_x). The default is _O_n, but readline will set it to
+ _O_f_f if the locale contains eight-bit characters.
+ ddiissaabbllee--ccoommpplleettiioonn ((OOffff))
+ If set to OOnn, readline will inhibit word completion. Completion
+ characters will be inserted into the line as if they had been
+ mapped to sseellff--iinnsseerrtt.
+ eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn))
+ When set to OOnn, on operating systems that indicate they support
+ it, readline echoes a character corresponding to a signal gener-
+ ated from the keyboard.
+ eeddiittiinngg--mmooddee ((eemmaaccss))
+ Controls whether readline begins with a set of key bindings sim-
+ ilar to _E_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can be set to either eemmaaccss or
+ vvii.
+ eemmaaccss--mmooddee--ssttrriinngg ((@@))
+ If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is
+ displayed immediately before the last line of the primary prompt
+ when emacs editing mode is active. The value is expanded like a
+ key binding, so the standard set of meta- and control prefixes
+ and backslash escape sequences is available. Use the \1 and \2
+ escapes to begin and end sequences of non-printing characters,
+ which can be used to embed a terminal control sequence into the
+ mode string.
+ eennaabbllee--bbrraacckkeetteedd--ppaassttee ((OOffff))
+ When set to OOnn, readline will configure the terminal in a way
+ that will enable it to insert each paste into the editing buffer
+ as a single string of characters, instead of treating each char-
+ acter as if it had been read from the keyboard. This can pre-
+ vent pasted characters from being interpreted as editing com-
+ mands.
+ eennaabbllee--kkeeyyppaadd ((OOffff))
+ When set to OOnn, readline will try to enable the application key-
+ pad when it is called. Some systems need this to enable the
+ arrow keys.
+ eennaabbllee--mmeettaa--kkeeyy ((OOnn))
+ When set to OOnn, readline will try to enable any meta modifier
+ key the terminal claims to support when it is called. On many
+ terminals, the meta key is used to send eight-bit characters.
+ eexxppaanndd--ttiillddee ((OOffff))
+ If set to OOnn, tilde expansion is performed when readline
+ attempts word completion.
+ hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff))
+ If set to OOnn, the history code attempts to place point at the
+ same location on each history line retrieved with pprreevviioouuss--hhiiss--
+ ttoorryy or nneexxtt--hhiissttoorryy.
+ hhiissttoorryy--ssiizzee ((uunnsseett))
+ Set the maximum number of history entries saved in the history
+ list. If set to zero, any existing history entries are deleted
+ and no new entries are saved. If set to a value less than zero,
+ the number of history entries is not limited. By default, the
+ number of history entries is set to the value of the HHIISSTTSSIIZZEE
+ shell variable. If an attempt is made to set _h_i_s_t_o_r_y_-_s_i_z_e to a
+ non-numeric value, the maximum number of history entries will be
+ set to 500.
+ hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff))
+ When set to OOnn, makes readline use a single line for display,
+ scrolling the input horizontally on a single screen line when it
+ becomes longer than the screen width rather than wrapping to a
+ new line.
+ iinnppuutt--mmeettaa ((OOffff))
+ If set to OOnn, readline will enable eight-bit input (that is, it
+ will not strip the eighth bit from the characters it reads),
+ regardless of what the terminal claims it can support. The name
+ mmeettaa--ffllaagg is a synonym for this variable. The default is _O_f_f,
+ but readline will set it to _O_n if the locale contains eight-bit
+ characters.
+ iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[CC--JJ''''))
+ The string of characters that should terminate an incremental
+ search without subsequently executing the character as a com-
+ mand. If this variable has not been given a value, the charac-
+ ters _E_S_C and _C_-_J will terminate an incremental search.
+ kkeeyymmaapp ((eemmaaccss))
+ Set the current readline keymap. The set of valid keymap names
+ is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_-
+ _m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is
+ equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the
+ value of eeddiittiinngg--mmooddee also affects the default keymap.
+ kkeeyysseeqq--ttiimmeeoouutt ((550000))
+ Specifies the duration _r_e_a_d_l_i_n_e will wait for a character when
+ reading an ambiguous key sequence (one that can form a complete
+ key sequence using the input read so far, or can take additional
+ input to complete a longer key sequence). If no input is
+ received within the timeout, _r_e_a_d_l_i_n_e will use the shorter but
+ complete key sequence. The value is specified in milliseconds,
+ so a value of 1000 means that _r_e_a_d_l_i_n_e will wait one second for
+ additional input. If this variable is set to a value less than
+ or equal to zero, or to a non-numeric value, _r_e_a_d_l_i_n_e will wait
+ until another key is pressed to decide which key sequence to
+ complete.
+ mmaarrkk--ddiirreeccttoorriieess ((OOnn))
+ If set to OOnn, completed directory names have a slash appended.
+ mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff))
+ If set to OOnn, history lines that have been modified are dis-
+ played with a preceding asterisk (**).
+ mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff))
+ If set to OOnn, completed names which are symbolic links to direc-
+ tories have a slash appended (subject to the value of
+ mmaarrkk--ddiirreeccttoorriieess).
+ mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn))
+ This variable, when set to OOnn, causes readline to match files
+ whose names begin with a `.' (hidden files) when performing
+ filename completion. If set to OOffff, the leading `.' must be
+ supplied by the user in the filename to be completed.
+ mmeennuu--ccoommpplleettee--ddiissppllaayy--pprreeffiixx ((OOffff))
+ If set to OOnn, menu completion displays the common prefix of the
+ list of possible completions (which may be empty) before cycling
+ through the list.
+ oouuttppuutt--mmeettaa ((OOffff))
+ If set to OOnn, readline will display characters with the eighth
+ bit set directly rather than as a meta-prefixed escape sequence.
+ The default is _O_f_f, but readline will set it to _O_n if the locale
+ contains eight-bit characters.
+ ppaaggee--ccoommpplleettiioonnss ((OOnn))
+ If set to OOnn, readline uses an internal _m_o_r_e-like pager to dis-
+ play a screenful of possible completions at a time.
+ pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff))
+ If set to OOnn, readline will display completions with matches
+ sorted horizontally in alphabetical order, rather than down the
+ screen.
+ rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff))
+ If set to OOnn, readline will undo all changes to history lines
+ before returning when aacccceepptt--lliinnee is executed. By default, his-
+ tory lines may be modified and retain individual undo lists
+ across calls to rreeaaddlliinnee.
+ sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff))
+ This alters the default behavior of the completion functions.
+ If set to OOnn, words which have more than one possible completion
+ cause the matches to be listed immediately instead of ringing
+ the bell.
+ sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff))
+ This alters the default behavior of the completion functions in
+ a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to OOnn, words
+ which have more than one possible completion without any possi-
+ ble partial completion (the possible completions don't share a
+ common prefix) cause the matches to be listed immediately
+ instead of ringing the bell.
+ sshhooww--mmooddee--iinn--pprroommpptt ((OOffff))
+ If set to OOnn, add a string to the beginning of the prompt indi-
+ cating the editing mode: emacs, vi command, or vi insertion.
+ The mode strings are user-settable (e.g., _e_m_a_c_s_-_m_o_d_e_-_s_t_r_i_n_g).
+ sskkiipp--ccoommpplleetteedd--tteexxtt ((OOffff))
+ If set to OOnn, this alters the default completion behavior when
+ inserting a single match into the line. It's only active when
+ performing completion in the middle of a word. If enabled,
+ readline does not insert characters from the completion that
+ match characters after point in the word being completed, so
+ portions of the word following the cursor are not duplicated.
+ vvii--ccmmdd--mmooddee--ssttrriinngg ((((ccmmdd))))
+ If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is
+ displayed immediately before the last line of the primary prompt
+ when vi editing mode is active and in command mode. The value
+ is expanded like a key binding, so the standard set of meta- and
+ control prefixes and backslash escape sequences is available.
+ Use the \1 and \2 escapes to begin and end sequences of non-
+ printing characters, which can be used to embed a terminal con-
+ trol sequence into the mode string.
+ vvii--iinnss--mmooddee--ssttrriinngg ((((iinnss))))
+ If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is
+ displayed immediately before the last line of the primary prompt
+ when vi editing mode is active and in insertion mode. The value
+ is expanded like a key binding, so the standard set of meta- and
+ control prefixes and backslash escape sequences is available.
+ Use the \1 and \2 escapes to begin and end sequences of non-
+ printing characters, which can be used to embed a terminal con-
+ trol sequence into the mode string.
+ vviissiibbllee--ssttaattss ((OOffff))
+ If set to OOnn, a character denoting a file's type as reported by
+ _s_t_a_t(2) is appended to the filename when listing possible com-
+ pletions.
+
+ RReeaaddlliinnee CCoonnddiittiioonnaall CCoonnssttrruuccttss
+ 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.
+
+ $$iiff The $$iiff construct allows bindings to be made based on the edit-
+ ing mode, the terminal being used, or the application using
+ readline. The text of the test, after any comparison operator,
+ extends to the end of the line; unless otherwise noted, no
+ characters are required to isolate it.
+
+ mmooddee The mmooddee== form of the $$iiff directive is used to test
+ whether readline is in emacs or vi mode. This may be
+ used in conjunction with the sseett kkeeyymmaapp command, for
+ instance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and
+ _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in
+ emacs mode.
+
+ tteerrmm The tteerrmm== form may be used to include terminal-specific
+ key bindings, perhaps to bind the key sequences output by
+ the terminal's function keys. The word on the right side
+ of the == is tested against both the full name of the ter-
+ minal and the portion of the terminal name before the
+ first --. This allows _s_u_n to match both _s_u_n and _s_u_n_-_c_m_d,
+ for instance.
+
+ vveerrssiioonn
+ The vveerrssiioonn test may be used to perform comparisons
+ against specific readline versions. The vveerrssiioonn expands
+ to the current readline version. The set of comparison
+ operators includes ==, (and ====), !!==, <<==, >>==, <<, and >>.
+ The version number supplied on the right side of the
+ operator consists of a major version number, an optional
+ decimal point, and an optional minor version (e.g., 77..11).
+ If the minor version is omitted, it is assumed to be 00.
+ The operator may be separated from the string vveerrssiioonn and
+ from the version number argument by whitespace.
+
+ aapppplliiccaattiioonn
+ The aapppplliiccaattiioonn construct is used to include application-
+ specific settings. Each program using the readline
+ library sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization
+ file 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
+ bbaasshh:
+
+ $$iiff Bash
+ # Quote the current or previous word
+ "\C-xq": "\eb\"\ef\""
+ $$eennddiiff
+
+ _v_a_r_i_a_b_l_e
+ The _v_a_r_i_a_b_l_e construct provides simple equality tests for
+ readline variables and values. The permitted comparison
+ operators are _=, _=_=, and _!_=. The variable name must be
+ separated from the comparison operator by whitespace; the
+ operator may be separated from the value on the right
+ hand side by whitespace. Both string and boolean vari-
+ ables may be tested. Boolean variables must be tested
+ against the values _o_n and _o_f_f.
+
+ $$eennddiiff This command, as seen in the previous example, terminates an $$iiff
+ command.
+
+ $$eellssee Commands in this branch of the $$iiff directive are executed if the
+ test fails.
+
+ $$iinncclluuddee
+ This directive takes a single filename as an argument and reads
+ commands and bindings from that file. For example, the follow-
+ ing directive would read _/_e_t_c_/_i_n_p_u_t_r_c:
+
+ $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c
+
+ SSeeaarrcchhiinngg
+ Readline provides commands for searching through the command history
+ (see HHIISSTTOORRYY below) for lines containing a specified string. There are
+ two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l.
+
+ Incremental searches begin before the user has finished typing the
+ search string. As each character of the search string is typed, read-
+ line 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. The characters present in
+ the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an
+ incremental search. If that variable has not been assigned a value the
+ Escape and Control-J characters will terminate an incremental search.
+ Control-G will abort an incremental search and restore the original
+ line. When the search is terminated, the history entry containing the
+ search string becomes the current line.
+
+ To find other matching entries in the history list, type Control-S or
+ Control-R 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 _n_e_w_l_i_n_e will termi-
+ nate the search and accept the line, thereby executing the command from
+ the history list.
+
+ Readline remembers the last incremental search string. If two Control-
+ Rs are typed without any intervening characters defining a new search
+ string, any remembered search string is used.
+
+ Non-incremental searches read the entire search string before starting
+ to search for matching history lines. The search string may be typed
+ by the user or be part of the contents of the current line.
+
+ RReeaaddlliinnee CCoommmmaanndd NNaammeess
+ The following is a list of the names of the commands and the default
+ key sequences to which they are bound. Command names without an accom-
+ panying key sequence are unbound by default. In the following descrip-
+ tions, _p_o_i_n_t refers to the current cursor position, and _m_a_r_k refers to
+ a cursor position saved by the sseett--mmaarrkk command. The text between the
+ point and mark is referred to as the _r_e_g_i_o_n.
+
+ CCoommmmaannddss ffoorr MMoovviinngg
+ bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa))
+ Move to the start of the current line.
+ eenndd--ooff--lliinnee ((CC--ee))
+ Move to the end of the line.
+ ffoorrwwaarrdd--cchhaarr ((CC--ff))
+ Move forward a character.
+ bbaacckkwwaarrdd--cchhaarr ((CC--bb))
+ Move back a character.
+ ffoorrwwaarrdd--wwoorrdd ((MM--ff))
+ Move forward to the end of the next word. Words are composed of
+ alphanumeric characters (letters and digits).
+ bbaacckkwwaarrdd--wwoorrdd ((MM--bb))
+ Move back to the start of the current or previous word. Words
+ are composed of alphanumeric characters (letters and digits).
+ sshheellll--ffoorrwwaarrdd--wwoorrdd
+ Move forward to the end of the next word. Words are delimited
+ by non-quoted shell metacharacters.
+ sshheellll--bbaacckkwwaarrdd--wwoorrdd
+ Move back to the start of the current or previous word. Words
+ are delimited by non-quoted shell metacharacters.
+ pprreevviioouuss--ssccrreeeenn--lliinnee
+ Attempt to move point to the same physical screen column on the
+ previous physical screen line. This will not have the desired
+ effect if the current Readline line does not take up more than
+ one physical line or if point is not greater than the length of
+ the prompt plus the screen width.
+ nneexxtt--ssccrreeeenn--lliinnee
+ Attempt to move point to the same physical screen column on the
+ next physical screen line. This will not have the desired effect
+ if the current Readline line does not take up more than one
+ physical line or if the length of the current Readline line is
+ not greater than the length of the prompt plus the screen width.
+ cclleeaarr--ssccrreeeenn ((CC--ll))
+ Clear the screen leaving the current line at the top of the
+ screen. With an argument, refresh the current line without
+ clearing the screen.
+ rreeddrraaww--ccuurrrreenntt--lliinnee
+ Refresh the current line.
+
+ CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy
+ aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn))
+ Accept the line regardless of where the cursor is. If this line
+ is non-empty, add it to the history list according to the state
+ of the HHIISSTTCCOONNTTRROOLL variable. If the line is a modified history
+ line, then restore the history line to its original state.
+ pprreevviioouuss--hhiissttoorryy ((CC--pp))
+ Fetch the previous command from the history list, moving back in
+ the list.
+ nneexxtt--hhiissttoorryy ((CC--nn))
+ Fetch the next command from the history list, moving forward in
+ the list.
+ bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<))
+ Move to the first line in the history.
+ eenndd--ooff--hhiissttoorryy ((MM-->>))
+ Move to the end of the input history, i.e., the line currently
+ being entered.
+ rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr))
+ Search backward starting at the current line and moving `up'
+ through the history as necessary. This is an incremental
+ search.
+ ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss))
+ Search forward starting at the current line and moving `down'
+ through the history as necessary. This is an incremental
+ search.
+ nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp))
+ Search backward through the history starting at the current line
+ using a non-incremental search for a string supplied by the
+ user.
+ nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn))
+ Search forward through the history using a non-incremental
+ search for a string supplied by the user.
+ hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd
+ 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.
+ hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd
+ 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.
+ hhiissttoorryy--ssuubbssttrriinngg--sseeaarrcchh--bbaacckkwwaarrdd
+ Search backward through the history for the string of characters
+ between the start of the current line and the current cursor
+ position (the _p_o_i_n_t). The search string may match anywhere in a
+ history line. This is a non-incremental search.
+ hhiissttoorryy--ssuubbssttrriinngg--sseeaarrcchh--ffoorrwwaarrdd
+ Search forward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string may match anywhere in a history line. This is a non-
+ incremental search.
+ yyaannkk--nntthh--aarrgg ((MM--CC--yy))
+ Insert the first argument to the previous command (usually the
+ second word on the previous line) at point. With an argument _n,
+ insert the _nth word from the previous command (the words in the
+ previous command begin with word 0). A negative argument
+ inserts the _nth word from the end of the previous command. Once
+ the argument _n is computed, the argument is extracted as if the
+ "!_n" history expansion had been specified.
+ yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__))
+ Insert the last argument to the previous command (the last word
+ of the previous history entry). With a numeric argument, behave
+ exactly like yyaannkk--nntthh--aarrgg. Successive calls to yyaannkk--llaasstt--aarrgg
+ move back through the history list, inserting the last word (or
+ the word specified by the argument to the first call) of each
+ line in turn. Any numeric argument supplied to these successive
+ calls determines the direction to move through the history. A
+ negative argument switches the direction through the history
+ (back or forward). The history expansion facilities are used to
+ extract the last word, as if the "!$" history expansion had been
+ specified.
+ sshheellll--eexxppaanndd--lliinnee ((MM--CC--ee))
+ Expand the line as the shell does. This performs alias and his-
+ tory expansion as well as all of the shell word expansions. See
+ HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for a description of history expansion.
+ hhiissttoorryy--eexxppaanndd--lliinnee ((MM--^^))
+ Perform history expansion on the current line. See HHIISSTTOORRYY
+ EEXXPPAANNSSIIOONN below for a description of history expansion.
+ mmaaggiicc--ssppaaccee
+ Perform history expansion on the current line and insert a
+ space. See HHIISSTTOORRYY EEXXPPAANNSSIIOONN below for a description of history
+ expansion.
+ aalliiaass--eexxppaanndd--lliinnee
+ Perform alias expansion on the current line. See AALLIIAASSEESS above
+ for a description of alias expansion.
+ hhiissttoorryy--aanndd--aalliiaass--eexxppaanndd--lliinnee
+ Perform history and alias expansion on the current line.
+ iinnsseerrtt--llaasstt--aarrgguummeenntt ((MM--..,, MM--__))
+ A synonym for yyaannkk--llaasstt--aarrgg.
+ ooppeerraattee--aanndd--ggeett--nneexxtt ((CC--oo))
+ Accept the current line for execution and fetch the next line
+ relative to the current line from the history for editing. A
+ numeric argument, if supplied, specifies the history entry to
+ use instead of the current line.
+ eeddiitt--aanndd--eexxeeccuuttee--ccoommmmaanndd ((CC--xx CC--ee))
+ Invoke an editor on the current command line, and execute the
+ result as shell commands. BBaasshh attempts to invoke $$VVIISSUUAALL,
+ $$EEDDIITTOORR, and _e_m_a_c_s as the editor, in that order.
+
+ CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt
+ _e_n_d_-_o_f_-_f_i_l_e ((uussuuaallllyy CC--dd))
+ The character indicating end-of-file as set, for example, by
+ ``stty''. If this character is read when there are no charac-
+ ters on the line, and point is at the beginning of the line,
+ Readline interprets it as the end of input and returns EEOOFF.
+ ddeelleettee--cchhaarr ((CC--dd))
+ Delete the character at point. If this function is bound to the
+ same character as the tty EEOOFF character, as CC--dd commonly is, see
+ above for the effects.
+ bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt))
+ Delete the character behind the cursor. When given a numeric
+ argument, save the deleted text on the kill ring.
+ ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr
+ Delete the character under the cursor, unless the cursor is at
+ the end of the line, in which case the character behind the cur-
+ sor is deleted.
+ qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv))
+ Add the next character typed to the line verbatim. This is how
+ to insert characters like CC--qq, for example.
+ ttaabb--iinnsseerrtt ((CC--vv TTAABB))
+ Insert a tab character.
+ sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......))
+ Insert the character typed.
+ ttrraannssppoossee--cchhaarrss ((CC--tt))
+ Drag the character before point forward over the character at
+ point, moving point forward as well. If point is at the end of
+ the line, then this transposes the two characters before point.
+ Negative arguments have no effect.
+ ttrraannssppoossee--wwoorrddss ((MM--tt))
+ Drag the word before point past the word after point, moving
+ point over that word as well. If point is at the end of the
+ line, this transposes the last two words on the line.
+ uuppccaassee--wwoorrdd ((MM--uu))
+ Uppercase the current (or following) word. With a negative
+ argument, uppercase the previous word, but do not move point.
+ ddoowwnnccaassee--wwoorrdd ((MM--ll))
+ Lowercase the current (or following) word. With a negative
+ argument, lowercase the previous word, but do not move point.
+ ccaappiittaalliizzee--wwoorrdd ((MM--cc))
+ Capitalize the current (or following) word. With a negative
+ argument, capitalize the previous word, but do not move point.
+ oovveerrwwrriittee--mmooddee
+ Toggle overwrite mode. With an explicit positive numeric argu-
+ ment, switches to overwrite mode. With an explicit non-positive
+ numeric argument, switches to insert mode. This command affects
+ only eemmaaccss mode; vvii mode does overwrite differently. Each call
+ to _r_e_a_d_l_i_n_e_(_) starts in insert mode. In overwrite mode, charac-
+ ters bound to sseellff--iinnsseerrtt replace the text at point rather than
+ pushing the text to the right. Characters bound to bbaacckk--
+ wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a
+ space. By default, this command is unbound.
+
+ KKiilllliinngg aanndd YYaannkkiinngg
+ kkiillll--lliinnee ((CC--kk))
+ Kill the text from point to the end of the line.
+ bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt))
+ Kill backward to the beginning of the line.
+ uunniixx--lliinnee--ddiissccaarrdd ((CC--uu))
+ Kill backward from point to the beginning of the line. The
+ killed text is saved on the kill-ring.
+ kkiillll--wwhhoollee--lliinnee
+ Kill all characters on the current line, no matter where point
+ is.
+ kkiillll--wwoorrdd ((MM--dd))
+ 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 those used by ffoorrwwaarrdd--wwoorrdd.
+ bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt))
+ Kill the word behind point. Word boundaries are the same as
+ those used by bbaacckkwwaarrdd--wwoorrdd.
+ sshheellll--kkiillll--wwoorrdd
+ 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 those used by sshheellll--ffoorrwwaarrdd--wwoorrdd.
+ sshheellll--bbaacckkwwaarrdd--kkiillll--wwoorrdd
+ Kill the word behind point. Word boundaries are the same as
+ those used by sshheellll--bbaacckkwwaarrdd--wwoorrdd.
+ uunniixx--wwoorrdd--rruubboouutt ((CC--ww))
+ Kill the word behind point, using white space as a word bound-
+ ary. The killed text is saved on the kill-ring.
+ uunniixx--ffiilleennaammee--rruubboouutt
+ 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.
+ ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\))
+ Delete all spaces and tabs around point.
+ kkiillll--rreeggiioonn
+ Kill the text in the current region.
+ ccooppyy--rreeggiioonn--aass--kkiillll
+ Copy the text in the region to the kill buffer.
+ ccooppyy--bbaacckkwwaarrdd--wwoorrdd
+ Copy the word before point to the kill buffer. The word bound-
+ aries are the same as bbaacckkwwaarrdd--wwoorrdd.
+ ccooppyy--ffoorrwwaarrdd--wwoorrdd
+ Copy the word following point to the kill buffer. The word
+ boundaries are the same as ffoorrwwaarrdd--wwoorrdd.
+ yyaannkk ((CC--yy))
+ Yank the top of the kill ring into the buffer at point.
+ yyaannkk--ppoopp ((MM--yy))
+ Rotate the kill ring, and yank the new top. Only works follow-
+ ing yyaannkk or yyaannkk--ppoopp.
+
+ NNuummeerriicc AArrgguummeennttss
+ ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----))
+ Add this digit to the argument already accumulating, or start a
+ new argument. M-- starts a negative argument.
+ uunniivveerrssaall--aarrgguummeenntt
+ 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 fol-
+ lowed by digits, executing uunniivveerrssaall--aarrgguummeenntt 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 nor 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 argu-
+ ment count four, a second time makes the argument count sixteen,
+ and so on.
+
+ CCoommpplleettiinngg
+ ccoommpplleettee ((TTAABB))
+ Attempt to perform completion on the text before point. BBaasshh
+ attempts completion treating the text as a variable (if the text
+ begins with $$), username (if the text begins with ~~), hostname
+ (if the text begins with @@), or command (including aliases and
+ functions) in turn. If none of these produces a match, filename
+ completion is attempted.
+ ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??))
+ List the possible completions of the text before point.
+ iinnsseerrtt--ccoommpplleettiioonnss ((MM--**))
+ Insert all completions of the text before point that would have
+ been generated by ppoossssiibbllee--ccoommpplleettiioonnss.
+ mmeennuu--ccoommpplleettee
+ Similar to ccoommpplleettee, but replaces the word to be completed with
+ a single match from the list of possible completions. Repeated
+ execution of mmeennuu--ccoommpplleettee 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
+ bbeellll--ssttyyllee) and the original text is restored. An argument of _n
+ moves _n positions forward in the list of matches; a negative
+ argument may be used to move backward through the list. This
+ command is intended to be bound to TTAABB, but is unbound by
+ default.
+ mmeennuu--ccoommpplleettee--bbaacckkwwaarrdd
+ Identical to mmeennuu--ccoommpplleettee, but moves backward through the list
+ of possible completions, as if mmeennuu--ccoommpplleettee had been given a
+ negative argument. This command is unbound by default.
+ ddeelleettee--cchhaarr--oorr--lliisstt
+ Deletes the character under the cursor if not at the beginning
+ or end of the line (like ddeelleettee--cchhaarr). If at the end of the
+ line, behaves identically to ppoossssiibbllee--ccoommpplleettiioonnss. This command
+ is unbound by default.
+ ccoommpplleettee--ffiilleennaammee ((MM--//))
+ Attempt filename completion on the text before point.
+ ppoossssiibbllee--ffiilleennaammee--ccoommpplleettiioonnss ((CC--xx //))
+ List the possible completions of the text before point, treating
+ it as a filename.
+ ccoommpplleettee--uusseerrnnaammee ((MM--~~))
+ Attempt completion on the text before point, treating it as a
+ username.
+ ppoossssiibbllee--uusseerrnnaammee--ccoommpplleettiioonnss ((CC--xx ~~))
+ List the possible completions of the text before point, treating
+ it as a username.
+ ccoommpplleettee--vvaarriiaabbllee ((MM--$$))
+ Attempt completion on the text before point, treating it as a
+ shell variable.
+ ppoossssiibbllee--vvaarriiaabbllee--ccoommpplleettiioonnss ((CC--xx $$))
+ List the possible completions of the text before point, treating
+ it as a shell variable.
+ ccoommpplleettee--hhoossttnnaammee ((MM--@@))
+ Attempt completion on the text before point, treating it as a
+ hostname.
+ ppoossssiibbllee--hhoossttnnaammee--ccoommpplleettiioonnss ((CC--xx @@))
+ List the possible completions of the text before point, treating
+ it as a hostname.
+ ccoommpplleettee--ccoommmmaanndd ((MM--!!))
+ 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.
+ ppoossssiibbllee--ccoommmmaanndd--ccoommpplleettiioonnss ((CC--xx !!))
+ List the possible completions of the text before point, treating
+ it as a command name.
+ ddyynnaammiicc--ccoommpplleettee--hhiissttoorryy ((MM--TTAABB))
+ Attempt completion on the text before point, comparing the text
+ against lines from the history list for possible completion
+ matches.
+ ddaabbbbrreevv--eexxppaanndd
+ Attempt menu completion on the text before point, comparing the
+ text against lines from the history list for possible completion
+ matches.
+ ccoommpplleettee--iinnttoo--bbrraacceess ((MM--{{))
+ Perform filename completion and insert the list of possible com-
+ pletions enclosed within braces so the list is available to the
+ shell (see BBrraaccee EExxppaannssiioonn above).
+
+ KKeeyybbooaarrdd MMaaccrrooss
+ ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (())
+ Begin saving the characters typed into the current keyboard
+ macro.
+ eenndd--kkbbdd--mmaaccrroo ((CC--xx ))))
+ Stop saving the characters typed into the current keyboard macro
+ and store the definition.
+ ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee))
+ Re-execute the last keyboard macro defined, by making the char-
+ acters in the macro appear as if typed at the keyboard.
+ pprriinntt--llaasstt--kkbbdd--mmaaccrroo (())
+ Print the last keyboard macro defined in a format suitable for
+ the _i_n_p_u_t_r_c file.
+
+ MMiisscceellllaanneeoouuss
+ rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr))
+ Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any
+ bindings or variable assignments found there.
+ aabboorrtt ((CC--gg))
+ Abort the current editing command and ring the terminal's bell
+ (subject to the setting of bbeellll--ssttyyllee).
+ ddoo--lloowweerrccaassee--vveerrssiioonn ((MM--AA,, MM--BB,, MM--_x,, ......))
+ If the metafied character _x is uppercase, run the command that
+ is bound to the corresponding metafied lowercase character. The
+ behavior is undefined if _x is already lowercase.
+ pprreeffiixx--mmeettaa ((EESSCC))
+ Metafy the next character typed. EESSCC ff is equivalent to MMeettaa--ff.
+ uunnddoo ((CC--__,, CC--xx CC--uu))
+ Incremental undo, separately remembered for each line.
+ rreevveerrtt--lliinnee ((MM--rr))
+ Undo all changes made to this line. This is like executing the
+ uunnddoo command enough times to return the line to its initial
+ state.
+ ttiillddee--eexxppaanndd ((MM--&&))
+ Perform tilde expansion on the current word.
+ sseett--mmaarrkk ((CC--@@,, MM--<<ssppaaccee>>))
+ Set the mark to the point. If a numeric argument is supplied,
+ the mark is set to that position.
+ eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx))
+ 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.
+ cchhaarraacctteerr--sseeaarrcchh ((CC--]]))
+ A character is read and point is moved to the next occurrence of
+ that character. A negative count searches for previous occur-
+ rences.
+ cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]]))
+ A character is read and point is moved to the previous occur-
+ rence of that character. A negative count searches for subse-
+ quent occurrences.
+ sskkiipp--ccssii--sseeqquueennccee
+ Read enough characters to consume a multi-key sequence such as
+ those defined for keys like Home and End. Such sequences begin
+ with a Control Sequence Indicator (CSI), usually ESC-[. If this
+ sequence is bound to "\[", keys producing such sequences will
+ have no effect unless explicitly bound to a readline command,
+ instead of inserting stray characters into the editing buffer.
+ This is unbound by default, but usually bound to ESC-[.
+ iinnsseerrtt--ccoommmmeenntt ((MM--##))
+ Without a numeric argument, the value of the readline ccoomm--
+ mmeenntt--bbeeggiinn 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 ccoommmmeenntt--bbeeggiinn, the value is inserted, other-
+ wise the characters in ccoommmmeenntt--bbeeggiinn are deleted from the begin-
+ ning of the line. In either case, the line is accepted as if a
+ newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn
+ 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.
+ gglloobb--ccoommpplleettee--wwoorrdd ((MM--gg))
+ 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 filenames for possible
+ completions.
+ gglloobb--eexxppaanndd--wwoorrdd ((CC--xx **))
+ The word before point is treated as a pattern for pathname
+ expansion, and the list of matching filenames is inserted,
+ replacing the word. If a numeric argument is supplied, an
+ asterisk is appended before pathname expansion.
+ gglloobb--lliisstt--eexxppaannssiioonnss ((CC--xx gg))
+ The list of expansions that would have been generated by
+ gglloobb--eexxppaanndd--wwoorrdd is displayed, and the line is redrawn. If a
+ numeric argument is supplied, an asterisk is appended before
+ pathname expansion.
+ dduummpp--ffuunnccttiioonnss
+ Print all of the functions and their key bindings to the read-
+ line output stream. If a numeric argument is supplied, the out-
+ put is formatted in such a way that it can be made part of an
+ _i_n_p_u_t_r_c file.
+ dduummpp--vvaarriiaabblleess
+ Print all of the settable readline 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 _i_n_p_u_t_r_c file.
+ dduummpp--mmaaccrrooss
+ 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
+ _i_n_p_u_t_r_c file.
+ ddiissppllaayy--sshheellll--vveerrssiioonn ((CC--xx CC--vv))
+ Display version information about the current instance of bbaasshh.
+
+ PPrrooggrraammmmaabbllee CCoommpplleettiioonn
+ When word completion is attempted for an argument to a command for
+ which a completion specification (a _c_o_m_p_s_p_e_c) has been defined using
+ the ccoommpplleettee builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below), the program-
+ mable completion facilities are invoked.
+
+ First, the command name is identified. If the command word is the
+ empty string (completion attempted at the beginning of an empty line),
+ any compspec defined with the --EE option to ccoommpplleettee is used. 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.
+ If those searches do not result in a compspec, any compspec defined
+ with the --DD option to ccoommpplleettee is used as the default. If there is no
+ default compspec, bbaasshh attempts alias expansion on the command word as
+ a final resort, and attempts to find a compspec for the command word
+ from any successful expansion.
+
+ Once a compspec has been found, it is used to generate the list of
+ matching words. If a compspec is not found, the default bbaasshh comple-
+ tion as described above under CCoommpplleettiinngg is performed.
+
+ First, the actions specified by the compspec are used. Only matches
+ which are prefixed by the word being completed are returned. When the
+ --ff or --dd option is used for filename or directory name completion, the
+ shell variable FFIIGGNNOORREE is used to filter the matches.
+
+ Any completions specified by a pathname expansion pattern to the --GG
+ option are generated next. The words generated by the pattern need not
+ match the word being completed. The GGLLOOBBIIGGNNOORREE shell variable is not
+ used to filter the matches, but the FFIIGGNNOORREE variable is used.
+
+ Next, the string specified as the argument to the --WW option is consid-
+ ered. The string is first split using the characters in the IIFFSS spe-
+ cial 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 under EEXXPPAANNSSIIOONN. The results are split using the rules
+ described above under WWoorrdd SSpplliittttiinngg. The results of the expansion are
+ prefix-matched against the word being completed, and the matching words
+ become the possible completions.
+
+ After these matches have been generated, any shell function or command
+ specified with the --FF and --CC options is invoked. When the command or
+ function is invoked, the CCOOMMPP__LLIINNEE, CCOOMMPP__PPOOIINNTT, CCOOMMPP__KKEEYY, and CCOOMMPP__TTYYPPEE
+ variables are assigned values as described above under SShheellll VVaarriiaabblleess.
+ If a shell function is being invoked, the CCOOMMPP__WWOORRDDSS and CCOOMMPP__CCWWOORRDD
+ variables are also set. When the function or command is invoked, the
+ first argument ($$11) is the name of the command whose arguments are
+ being completed, the second argument ($$22) is the word being completed,
+ and the third argument ($$33) is the word preceding the word being com-
+ pleted on the current command line. No filtering of the generated com-
+ pletions against the word being completed is performed; the function or
+ command has complete freedom in generating the matches.
+
+ Any function specified with --FF is invoked first. The function may use
+ any of the shell facilities, including the ccoommppggeenn builtin described
+ below, to generate the matches. It must put the possible completions
+ in the CCOOMMPPRREEPPLLYY array variable, one per array element.
+
+ Next, any command specified with the --CC option is invoked in an envi-
+ ronment equivalent to command substitution. It should print a list of
+ completions, one per line, to the standard output. Backslash may be
+ used to escape a newline, if necessary.
+
+ After all of the possible completions are generated, any filter speci-
+ fied with the --XX option is applied to the list. The filter is a pat-
+ tern as used for pathname expansion; a && in the pattern is replaced
+ with the text of the word being completed. A literal && may be escaped
+ with a backslash; the backslash is removed before attempting a match.
+ Any completion that matches the pattern will be removed from the list.
+ A leading !! negates the pattern; in this case any completion not match-
+ ing the pattern will be removed. If the nnooccaasseemmaattcchh shell option is
+ enabled, the match is performed without regard to the case of alpha-
+ betic characters.
+
+ Finally, any prefix and suffix specified with the --PP and --SS options are
+ added to each member of the completion list, and the result is returned
+ to the readline completion code as the list of possible completions.
+
+ If the previously-applied actions do not generate any matches, and the
+ --oo ddiirrnnaammeess option was supplied to ccoommpplleettee when the compspec was
+ defined, directory name completion is attempted.
+
+ If the --oo pplluussddiirrss option was supplied to ccoommpplleettee when the compspec
+ was defined, directory name completion is attempted and any matches are
+ added to the results of the other actions.
+
+ By default, if a compspec is found, whatever it generates is returned
+ to the completion code as the full set of possible completions. The
+ default bbaasshh completions are not attempted, and the readline default of
+ filename completion is disabled. If the --oo bbaasshhddeeffaauulltt option was sup-
+ plied to ccoommpplleettee when the compspec was defined, the bbaasshh default com-
+ pletions are attempted if the compspec generates no matches. If the --oo
+ ddeeffaauulltt option was supplied to ccoommpplleettee when the compspec was defined,
+ readline's default completion will be performed if the compspec (and,
+ if attempted, the default bbaasshh completions) generate no matches.
+
+ When a compspec indicates that directory name completion is desired,
+ the programmable completion functions force readline to append a slash
+ to completed names which are symbolic links to directories, subject to
+ the value of the mmaarrkk--ddiirreeccttoorriieess readline variable, regardless of the
+ setting of the mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess readline variable.
+
+ There is some support for dynamically modifying completions. This is
+ most useful when used in combination with a default completion speci-
+ fied with ccoommpplleettee --DD. It's possible for shell functions executed as
+ completion handlers to indicate that completion should be retried by
+ returning an exit status of 124. If a shell function returns 124, and
+ changes the compspec associated with the command on which completion is
+ being attempted (supplied as the first argument when the function is
+ executed), programmable completion restarts from the beginning, with an
+ attempt to find a new compspec for that command. This allows a set of
+ completions to be built dynamically as completion is attempted, rather
+ than being loaded all at once.
+
+ For instance, assuming that there is a library of compspecs, each kept
+ in a file corresponding to the name of the command, the following
+ default completion function would load completions dynamically:
+
+ _completion_loader()
+ {
+ . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
+ }
+ complete -D -F _completion_loader -o bashdefault -o default
+
+
+HHIISSTTOORRYY
+ When the --oo hhiissttoorryy option to the sseett builtin is enabled, the shell
+ provides access to the _c_o_m_m_a_n_d _h_i_s_t_o_r_y, the list of commands previously
+ typed. The value of the HHIISSTTSSIIZZEE variable is used as the number of
+ commands to save in a history list. The text of the last HHIISSTTSSIIZZEE com-
+ mands (default 500) is saved. The shell stores each command in the
+ history list prior to parameter and variable expansion (see EEXXPPAANNSSIIOONN
+ above) but after history expansion is performed, subject to the values
+ of the shell variables HHIISSTTIIGGNNOORREE and HHIISSTTCCOONNTTRROOLL.
+
+ On startup, the history is initialized from the file named by the vari-
+ able HHIISSTTFFIILLEE (default _~_/_._b_a_s_h___h_i_s_t_o_r_y). The file named by the value
+ of HHIISSTTFFIILLEE is truncated, if necessary, to contain no more than the
+ number of lines specified by the value of HHIISSTTFFIILLEESSIIZZEE. If HHIISSTTFFIILLEE--
+ SSIIZZEE is unset, or set to null, a non-numeric value, or a numeric value
+ less than zero, the history file is not truncated. When the history
+ file is read, lines beginning with the history comment character fol-
+ lowed immediately by a digit are interpreted as timestamps for the fol-
+ lowing history line. These timestamps are optionally displayed depend-
+ ing on the value of the HHIISSTTTTIIMMEEFFOORRMMAATT variable. When a shell with
+ history enabled exits, the last $$HHIISSTTSSIIZZEE lines are copied from the
+ history list to $$HHIISSTTFFIILLEE. If the hhiissttaappppeenndd shell option is enabled
+ (see the description of sshhoopptt under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below), the
+ lines are appended to the history file, otherwise the history file is
+ overwritten. If HHIISSTTFFIILLEE is unset, or if the history file is
+ unwritable, the history is not saved. If the HHIISSTTTTIIMMEEFFOORRMMAATT variable
+ is set, time stamps are written to the history file, marked with the
+ history comment character, so they may be preserved across shell ses-
+ sions. This uses the history comment character to distinguish time-
+ stamps from other history lines. After saving the history, the history
+ file is truncated to contain no more than HHIISSTTFFIILLEESSIIZZEE lines. If HHIISSTT--
+ FFIILLEESSIIZZEE is unset, or set to null, a non-numeric value, or a numeric
+ value less than zero, the history file is not truncated.
+
+ The builtin command ffcc (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) may be used
+ to list or edit and re-execute a portion of the history list. The hhiiss--
+ ttoorryy 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.
+
+ The shell allows control over which commands are saved on the history
+ list. The HHIISSTTCCOONNTTRROOLL and HHIISSTTIIGGNNOORREE variables may be set to cause the
+ shell to save only a subset of the commands entered. The ccmmddhhiisstt 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 lliitthhiisstt shell option
+ causes the shell to save the command with embedded newlines instead of
+ semicolons. See the description of the sshhoopptt builtin below under SSHHEELLLL
+ BBUUIILLTTIINN CCOOMMMMAANNDDSS for information on setting and unsetting shell
+ options.
+
+HHIISSTTOORRYY EEXXPPAANNSSIIOONN
+ The shell supports a history expansion feature that is similar to the
+ history expansion in ccsshh. This section describes what syntax features
+ are available. This feature is enabled by default for interactive
+ shells, and can be disabled using the ++HH option to the sseett builtin com-
+ mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). Non-interactive shells do not
+ perform history expansion by default.
+
+ History expansions introduce words from the history list into the input
+ stream, making it easy to repeat commands, insert the arguments to a
+ previous command into the current input line, or fix errors in previous
+ commands quickly.
+
+ History expansion is performed immediately after a complete line is
+ read, before the shell breaks it into words, and is performed on each
+ line individually without taking quoting on previous lines into
+ account. It takes place in two parts. The first is to determine which
+ line from the history list to use during substitution. The second is
+ to select portions of that line for inclusion into the current one.
+ The line selected from the history is the _e_v_e_n_t, and the portions of
+ that line that are acted upon are _w_o_r_d_s. Various _m_o_d_i_f_i_e_r_s are avail-
+ able to manipulate the selected words. The line is broken into words
+ in the same fashion as when reading input, so that several _m_e_t_a_c_h_a_r_a_c_-
+ _t_e_r-separated words surrounded by quotes are considered one word. His-
+ tory expansions are introduced by the appearance of the history expan-
+ sion character, which is !! by default. Only backslash (\\) and single
+ quotes can quote the history expansion character, but the history
+ expansion character is also treated as quoted if it immediately pre-
+ cedes the closing double quote in a double-quoted string.
+
+ Several characters inhibit history expansion if found immediately fol-
+ lowing the history expansion character, even if it is unquoted: space,
+ tab, newline, carriage return, and ==. If the eexxttgglloobb shell option is
+ enabled, (( will also inhibit expansion.
+
+ Several shell options settable with the sshhoopptt builtin may be used to
+ tailor the behavior of history expansion. If the hhiissttvveerriiffyy shell
+ option is enabled (see the description of the sshhoopptt builtin below), and
+ rreeaaddlliinnee is being used, history substitutions are not immediately
+ passed to the shell parser. Instead, the expanded line is reloaded
+ into the rreeaaddlliinnee editing buffer for further modification. If rreeaaddlliinnee
+ is being used, and the hhiissttrreeeeddiitt shell option is enabled, a failed
+ history substitution will be reloaded into the rreeaaddlliinnee editing buffer
+ for correction. The --pp option to the hhiissttoorryy builtin command may be
+ used to see what a history expansion will do before using it. The --ss
+ option to the hhiissttoorryy 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.
+
+ The shell allows control of the various characters used by the history
+ expansion mechanism (see the description of hhiissttcchhaarrss above under SShheellll
+ VVaarriiaabblleess). The shell uses the history comment character to mark his-
+ tory timestamps when writing the history file.
+
+ EEvveenntt DDeessiiggnnaattoorrss
+ An event designator is a reference to a command line entry in the his-
+ tory list. Unless the reference is absolute, events are relative to
+ the current position in the history list.
+
+ !! Start a history substitution, except when followed by a bbllaannkk,
+ newline, carriage return, = or ( (when the eexxttgglloobb shell option
+ is enabled using the sshhoopptt builtin).
+ !!_n Refer to command line _n.
+ !!--_n Refer to the current command minus _n.
+ !!!! Refer to the previous command. This is a synonym for `!-1'.
+ !!_s_t_r_i_n_g
+ Refer to the most recent command preceding the current position
+ in the history list starting with _s_t_r_i_n_g.
+ !!??_s_t_r_i_n_g[[??]]
+ Refer to the most recent command preceding the current position
+ in the history list containing _s_t_r_i_n_g. The trailing ?? may be
+ omitted if _s_t_r_i_n_g is followed immediately by a newline.
+ ^^_s_t_r_i_n_g_1^^_s_t_r_i_n_g_2^^
+ Quick substitution. Repeat the previous command, replacing
+ _s_t_r_i_n_g_1 with _s_t_r_i_n_g_2. Equivalent to ``!!:s/_s_t_r_i_n_g_1/_s_t_r_i_n_g_2/''
+ (see MMooddiiffiieerrss below).
+ !!## The entire command line typed so far.
+
+ WWoorrdd DDeessiiggnnaattoorrss
+ Word designators are used to select desired words from the event. A ::
+ separates the event specification from the word designator. It may be
+ omitted if the word designator begins with a ^^, $$, **, --, or %%. Words
+ are numbered from the beginning of the line, with the first word being
+ denoted by 0 (zero). Words are inserted into the current line sepa-
+ rated by single spaces.
+
+ 00 ((zzeerroo))
+ The zeroth word. For the shell, this is the command word.
+ _n The _nth word.
+ ^^ The first argument. That is, word 1.
+ $$ The last word. This is usually the last argument, but will
+ expand to the zeroth word if there is only one word in the line.
+ %% The word matched by the most recent `?_s_t_r_i_n_g?' search.
+ _x--_y A range of words; `-_y' abbreviates `0-_y'.
+ ** All of the words but the zeroth. This is a synonym for `_1_-_$'.
+ It is not an error to use ** if there is just one word in the
+ event; the empty string is returned in that case.
+ xx** Abbreviates _x_-_$.
+ xx-- Abbreviates _x_-_$ like xx**, but omits the last word.
+
+ If a word designator is supplied without an event specification, the
+ previous command is used as the event.
+
+ MMooddiiffiieerrss
+ After the optional word designator, there may appear a sequence of one
+ or more of the following modifiers, each preceded by a `:'.
+
+ hh Remove a trailing filename component, leaving only the head.
+ tt Remove all leading filename components, leaving the tail.
+ rr Remove a trailing suffix of the form _._x_x_x, leaving the basename.
+ ee Remove all but the trailing suffix.
+ pp Print the new command but do not execute it.
+ qq Quote the substituted words, escaping further substitutions.
+ xx Quote the substituted words as with qq, but break into words at
+ bbllaannkkss and newlines.
+ ss//_o_l_d//_n_e_w//
+ Substitute _n_e_w for the first occurrence of _o_l_d in the event
+ line. Any delimiter can be used in place of /. The final
+ delimiter is optional if it is the last character of the event
+ line. The delimiter may be quoted in _o_l_d and _n_e_w with a single
+ backslash. If & appears in _n_e_w, it is replaced by _o_l_d. A sin-
+ gle backslash will quote the &. If _o_l_d is null, it is set to
+ the last _o_l_d substituted, or, if no previous history substitu-
+ tions took place, the last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search.
+ && Repeat the previous substitution.
+ gg Cause changes to be applied over the entire event line. This is
+ used in conjunction with `::ss' (e.g., `::ggss//_o_l_d//_n_e_w//') or `::&&'.
+ If used with `::ss', any delimiter can be used in place of /, and
+ the final delimiter is optional if it is the last character of
+ the event line. An aa may be used as a synonym for gg.
+ GG Apply the following `ss' modifier once to each word in the event
+ line.
+
+SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
+ Unless otherwise noted, each builtin command documented in this section
+ as accepting options preceded by -- accepts ---- to signify the end of the
+ options. The ::, ttrruuee, ffaallssee, and tteesstt/[[ builtins do not accept options
+ and do not treat ---- specially. The eexxiitt, llooggoouutt, rreettuurrnn, bbrreeaakk, ccoonn--
+ ttiinnuuee, lleett, and sshhiifftt builtins accept and process arguments beginning
+ with -- without requiring ----. Other builtins that accept arguments but
+ are not specified as accepting options interpret arguments beginning
+ with -- as invalid options and require ---- to prevent this interpreta-
+ tion.
+ :: [_a_r_g_u_m_e_n_t_s]
+ No effect; the command does nothing beyond expanding _a_r_g_u_m_e_n_t_s
+ and performing any specified redirections. The return status is
+ zero.
+
+ .. _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s]
+ ssoouurrccee _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s]
+ Read and execute commands from _f_i_l_e_n_a_m_e in the current shell
+ environment and return the exit status of the last command exe-
+ cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash,
+ filenames in PPAATTHH are used to find the directory containing
+ _f_i_l_e_n_a_m_e. The file searched for in PPAATTHH need not be executable.
+ When bbaasshh is not in _p_o_s_i_x _m_o_d_e, the current directory is
+ searched if no file is found in PPAATTHH. If the ssoouurrcceeppaatthh option
+ to the sshhoopptt builtin command is turned off, the PPAATTHH is not
+ searched. If any _a_r_g_u_m_e_n_t_s are supplied, they become the posi-
+ tional parameters when _f_i_l_e_n_a_m_e is executed. Otherwise the
+ positional parameters are unchanged. If the --TT option is
+ enabled, ssoouurrccee inherits any trap on DDEEBBUUGG; if it is not, any
+ DDEEBBUUGG trap string is saved and restored around the call to
+ ssoouurrccee, and ssoouurrccee unsets the DDEEBBUUGG trap while it executes. If
+ --TT is not set, and the sourced file changes the DDEEBBUUGG trap, the
+ new value is retained when ssoouurrccee completes. The return status
+ is the status of the last command exited within the script (0 if
+ no commands are executed), and false if _f_i_l_e_n_a_m_e is not found or
+ cannot be read.
+
+ aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
+ AAlliiaass with no arguments or with the --pp option prints the list of
+ aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output. When
+ arguments are supplied, an alias is defined for each _n_a_m_e whose
+ _v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word
+ to be checked for alias substitution when the alias is expanded.
+ For each _n_a_m_e in the argument list for which no _v_a_l_u_e is sup-
+ plied, the name and value of the alias is printed. AAlliiaass
+ returns true unless a _n_a_m_e is given for which no alias has been
+ defined.
+
+ bbgg [_j_o_b_s_p_e_c ...]
+ Resume each suspended job _j_o_b_s_p_e_c in the background, as if it
+ had been started with &&. If _j_o_b_s_p_e_c is not present, the shell's
+ notion of the _c_u_r_r_e_n_t _j_o_b is used. bbgg _j_o_b_s_p_e_c returns 0 unless
+ run when job control is disabled or, when run with job control
+ enabled, any specified _j_o_b_s_p_e_c was not found or was started
+ without job control.
+
+ bbiinndd [--mm _k_e_y_m_a_p] [--llppssvvPPSSVVXX]
+ bbiinndd [--mm _k_e_y_m_a_p] [--qq _f_u_n_c_t_i_o_n] [--uu _f_u_n_c_t_i_o_n] [--rr _k_e_y_s_e_q]
+ bbiinndd [--mm _k_e_y_m_a_p] --ff _f_i_l_e_n_a_m_e
+ bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d
+ bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e
+ bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d
+ Display current rreeaaddlliinnee key and function bindings, bind a key
+ sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee
+ variable. Each non-option argument is a command as it would
+ appear in _._i_n_p_u_t_r_c, but each binding or command must be passed
+ as a separate argument; e.g., '"\C-x\C-r": re-read-init-file'.
+ Options, if supplied, have the following meanings:
+ --mm _k_e_y_m_a_p
+ Use _k_e_y_m_a_p as the keymap to be affected by the subsequent
+ bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_-
+ _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d,
+ and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e
+ is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_-
+ _d_a_r_d.
+ --ll List the names of all rreeaaddlliinnee functions.
+ --pp Display rreeaaddlliinnee function names and bindings in such a
+ way that they can be re-read.
+ --PP List current rreeaaddlliinnee function names and bindings.
+ --ss Display rreeaaddlliinnee key sequences bound to macros and the
+ strings they output in such a way that they can be re-
+ read.
+ --SS Display rreeaaddlliinnee key sequences bound to macros and the
+ strings they output.
+ --vv Display rreeaaddlliinnee variable names and values in such a way
+ that they can be re-read.
+ --VV List current rreeaaddlliinnee variable names and values.
+ --ff _f_i_l_e_n_a_m_e
+ Read key bindings from _f_i_l_e_n_a_m_e.
+ --qq _f_u_n_c_t_i_o_n
+ Query about which keys invoke the named _f_u_n_c_t_i_o_n.
+ --uu _f_u_n_c_t_i_o_n
+ Unbind all keys bound to the named _f_u_n_c_t_i_o_n.
+ --rr _k_e_y_s_e_q
+ Remove any current binding for _k_e_y_s_e_q.
+ --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d
+ Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is
+ entered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets
+ the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd--
+ lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT variable to the
+ current location of the insertion point. If the executed
+ command changes the value of RREEAADDLLIINNEE__LLIINNEE or RREEAADD--
+ LLIINNEE__PPOOIINNTT, those new values will be reflected in the
+ editing state.
+ --XX List all key sequences bound to shell commands and the
+ associated commands in a format that can be reused as
+ input.
+
+ The return value is 0 unless an unrecognized option is given or
+ an error occurred.
+
+ bbrreeaakk [_n]
+ Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is
+ specified, break _n levels. _n must be >= 1. If _n is greater
+ than the number of enclosing loops, all enclosing loops are
+ exited. The return value is 0 unless _n is not greater than or
+ equal to 1.
+
+ bbuuiillttiinn _s_h_e_l_l_-_b_u_i_l_t_i_n [_a_r_g_u_m_e_n_t_s]
+ Execute the specified shell builtin, passing it _a_r_g_u_m_e_n_t_s, and
+ return its exit status. This is useful when defining a function
+ whose name is the same as a shell builtin, retaining the func-
+ tionality of the builtin within the function. The ccdd builtin is
+ commonly redefined this way. The return status is false if
+ _s_h_e_l_l_-_b_u_i_l_t_i_n is not a shell builtin command.
+
+ ccaalllleerr [_e_x_p_r]
+ Returns the context of any active subroutine call (a shell func-
+ tion or a script executed with the .. or ssoouurrccee builtins). With-
+ out _e_x_p_r, ccaalllleerr displays the line number and source filename of
+ the current subroutine call. If a non-negative integer is sup-
+ plied as _e_x_p_r, ccaalllleerr displays the line number, subroutine name,
+ and source file corresponding to that position in the current
+ execution call stack. This extra information may be used, for
+ example, to print a stack trace. The current frame is frame 0.
+ The return value is 0 unless the shell is not executing a sub-
+ routine call or _e_x_p_r does not correspond to a valid position in
+ the call stack.
+
+ ccdd [--LL|[--PP [--ee]] [-@]] [_d_i_r]
+ Change the current directory to _d_i_r. if _d_i_r is not supplied,
+ the value of the HHOOMMEE shell variable is the default. Any addi-
+ tional arguments following _d_i_r are ignored. The variable CCDDPPAATTHH
+ defines the search path for the directory containing _d_i_r: each
+ directory name in CCDDPPAATTHH is searched for _d_i_r. Alternative
+ directory names in CCDDPPAATTHH are separated by a colon (:). A null
+ directory name in CCDDPPAATTHH is the same as the current directory,
+ i.e., ``..''. If _d_i_r begins with a slash (/), then CCDDPPAATTHH is not
+ used. The --PP option causes ccdd to use the physical directory
+ structure by resolving symbolic links while traversing _d_i_r and
+ before processing instances of _._. in _d_i_r (see also the --PP option
+ to the sseett builtin command); the --LL option forces symbolic links
+ to be followed by resolving the link after processing instances
+ of _._. in _d_i_r. If _._. appears in _d_i_r, it is processed by removing
+ the immediately previous pathname component from _d_i_r, back to a
+ slash or the beginning of _d_i_r. If the --ee option is supplied
+ with --PP, and the current working directory cannot be success-
+ fully determined after a successful directory change, ccdd will
+ return an unsuccessful status. On systems that support it, the
+ --@@ option presents the extended attributes associated with a
+ file as a directory. An argument of -- is converted to $$OOLLDDPPWWDD
+ before the directory change is attempted. If a non-empty direc-
+ tory name from CCDDPPAATTHH is used, or if -- is the first argument,
+ and the directory change is successful, the absolute pathname of
+ the new working directory is written to the standard output.
+ The return value is true if the directory was successfully
+ changed; false otherwise.
+
+ ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...]
+ Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function
+ lookup. Only builtin commands or commands found in the PPAATTHH are
+ executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is
+ performed using a default value for PPAATTHH that is guaranteed to
+ find all of the standard utilities. If either the --VV or --vv
+ option is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv
+ option causes a single word indicating the command or filename
+ used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a
+ more verbose description. If the --VV or --vv option is supplied,
+ the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If
+ neither option is supplied and an error occurred or _c_o_m_m_a_n_d can-
+ not be found, the exit status is 127. Otherwise, the exit sta-
+ tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d.
+
+ ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d]
+ Generate possible completion matches for _w_o_r_d according to the
+ _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee
+ builtin with the exception of --pp and --rr, and write the matches
+ to the standard output. When using the --FF or --CC options, the
+ various shell variables set by the programmable completion
+ facilities, while available, will not have useful values.
+
+ The matches will be generated in the same way as if the program-
+ mable completion code had generated them directly from a comple-
+ tion specification with the same flags. If _w_o_r_d is specified,
+ only those completions matching _w_o_r_d will be displayed.
+
+ The return value is true unless an invalid option is supplied,
+ or no matches were generated.
+
+ ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_-
+ _p_a_t] [--WW _w_o_r_d_l_i_s_t] [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d]
+ [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_f_i_x] _n_a_m_e [_n_a_m_e _._._.]
+ ccoommpplleettee --pprr [--DDEEII] [_n_a_m_e ...]
+ Specify how arguments to each _n_a_m_e should be completed. If the
+ --pp 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 --rr option removes a completion spec-
+ ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com-
+ pletion specifications. The --DD option indicates that other sup-
+ plied options and actions should apply to the ``default'' com-
+ mand completion; that is, completion attempted on a command for
+ which no completion has previously been defined. The --EE option
+ indicates that other supplied options and actions should apply
+ to ``empty'' command completion; that is, completion attempted
+ on a blank line. The --II option indicates that other supplied
+ options and actions should apply to completion on the inital
+ non-assignment word on the line, or after a command delimiter
+ such as ;; or ||, which is usually command name completion. If
+ multiple options are supplied, the --DD option takes precedence
+ over --EE, and both take precedence over --II. If any of --DD, --EE, or
+ --II are supplied, any other _n_a_m_e arguments are ignored; these
+ completions only apply to the case specified by the option.
+
+ The process of applying these completion specifications when
+ word completion is attempted is described above under PPrrooggrraamm--
+ mmaabbllee CCoommpplleettiioonn.
+
+ Other options, if specified, have the following meanings. The
+ arguments to the --GG, --WW, and --XX options (and, if necessary, the
+ --PP and --SS options) should be quoted to protect them from expan-
+ sion before the ccoommpplleettee builtin is invoked.
+ --oo _c_o_m_p_-_o_p_t_i_o_n
+ The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp-
+ spec's behavior beyond the simple generation of comple-
+ tions. _c_o_m_p_-_o_p_t_i_o_n may be one of:
+ bbaasshhddeeffaauulltt
+ Perform the rest of the default bbaasshh completions
+ if the compspec generates no matches.
+ ddeeffaauulltt Use readline's default filename completion if
+ the compspec generates no matches.
+ ddiirrnnaammeess
+ Perform directory name completion if the comp-
+ spec generates no matches.
+ ffiilleennaammeess
+ Tell readline that the compspec generates file-
+ names, so it can perform any filename-specific
+ processing (like adding a slash to directory
+ names, quoting special characters, or suppress-
+ ing trailing spaces). Intended to be used with
+ shell functions.
+ nnooqquuoottee Tell readline not to quote the completed words
+ if they are filenames (quoting filenames is the
+ default).
+ nnoossoorrtt Tell readline not to sort the list of possible
+ completions alphabetically.
+ nnoossppaaccee Tell readline not to append a space (the
+ default) to words completed at the end of the
+ line.
+ pplluussddiirrss
+ 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.
+ --AA _a_c_t_i_o_n
+ The _a_c_t_i_o_n may be one of the following to generate a
+ list of possible completions:
+ aalliiaass Alias names. May also be specified as --aa.
+ aarrrraayyvvaarr
+ Array variable names.
+ bbiinnddiinngg RReeaaddlliinnee key binding names.
+ bbuuiillttiinn Names of shell builtin commands. May also be
+ specified as --bb.
+ ccoommmmaanndd Command names. May also be specified as --cc.
+ ddiirreeccttoorryy
+ Directory names. May also be specified as --dd.
+ ddiissaabblleedd
+ Names of disabled shell builtins.
+ eennaabblleedd Names of enabled shell builtins.
+ eexxppoorrtt Names of exported shell variables. May also be
+ specified as --ee.
+ ffiillee File names. May also be specified as --ff.
+ ffuunnccttiioonn
+ Names of shell functions.
+ ggrroouupp Group names. May also be specified as --gg.
+ hheellppttooppiicc
+ Help topics as accepted by the hheellpp builtin.
+ hhoossttnnaammee
+ Hostnames, as taken from the file specified by
+ the HHOOSSTTFFIILLEE shell variable.
+ jjoobb Job names, if job control is active. May also
+ be specified as --jj.
+ kkeeyywwoorrdd Shell reserved words. May also be specified as
+ --kk.
+ rruunnnniinngg Names of running jobs, if job control is active.
+ sseerrvviiccee Service names. May also be specified as --ss.
+ sseettoopptt Valid arguments for the --oo option to the sseett
+ builtin.
+ sshhoopptt Shell option names as accepted by the sshhoopptt
+ builtin.
+ ssiiggnnaall Signal names.
+ ssttooppppeedd Names of stopped jobs, if job control is active.
+ uusseerr User names. May also be specified as --uu.
+ vvaarriiaabbllee
+ Names of all shell variables. May also be spec-
+ ified as --vv.
+ --CC _c_o_m_m_a_n_d
+ _c_o_m_m_a_n_d is executed in a subshell environment, and its
+ output is used as the possible completions.
+ --FF _f_u_n_c_t_i_o_n
+ The shell function _f_u_n_c_t_i_o_n is executed in the current
+ shell environment. When the function is executed, the
+ first argument ($$11) is the name of the command whose
+ arguments are being completed, the second argument ($$22)
+ is the word being completed, and the third argument ($$33)
+ is the word preceding the word being completed on the
+ current command line. When it finishes, the possible
+ completions are retrieved from the value of the CCOOMMPPRREE--
+ PPLLYY array variable.
+ --GG _g_l_o_b_p_a_t
+ The pathname expansion pattern _g_l_o_b_p_a_t is expanded to
+ generate the possible completions.
+ --PP _p_r_e_f_i_x
+ _p_r_e_f_i_x is added at the beginning of each possible com-
+ pletion after all other options have been applied.
+ --SS _s_u_f_f_i_x
+ _s_u_f_f_i_x is appended to each possible completion after all
+ other options have been applied.
+ --WW _w_o_r_d_l_i_s_t
+ The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS
+ special variable as delimiters, and each resultant word
+ is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t,
+ in order to provide a mechanism for the words to contain
+ shell metacharacters or characters in the value of IIFFSS.
+ The possible completions are the members of the resul-
+ tant list which match the word being completed.
+ --XX _f_i_l_t_e_r_p_a_t
+ _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion.
+ It is applied to the list of possible completions gener-
+ ated by the preceding options and arguments, and each
+ completion matching _f_i_l_t_e_r_p_a_t is removed from the list.
+ A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this
+ case, any completion not matching _f_i_l_t_e_r_p_a_t is removed.
+
+ The return value is true unless an invalid option is supplied,
+ an option other than --pp or --rr is supplied without a _n_a_m_e argu-
+ ment, an attempt is made to remove a completion specification
+ for a _n_a_m_e for which no specification exists, or an error occurs
+ adding a completion specification.
+
+ ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEEII] [++oo _o_p_t_i_o_n] [_n_a_m_e]
+ Modify completion options for each _n_a_m_e according to the
+ _o_p_t_i_o_ns, or for the currently-executing completion if no _n_a_m_es
+ are supplied. If no _o_p_t_i_o_ns are given, display the completion
+ options for each _n_a_m_e or the current completion. The possible
+ values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin
+ described above. The --DD option indicates that other supplied
+ options should apply to the ``default'' command completion; that
+ is, completion attempted on a command for which no completion
+ has previously been defined. The --EE option indicates that other
+ supplied options should apply to ``empty'' command completion;
+ that is, completion attempted on a blank line. The --II option
+ indicates that other supplied options should apply to completion
+ on the inital non-assignment word on the line, or after a com-
+ mand delimiter such as ;; or ||, which is usually command name
+ completion.
+
+ The return value is true unless an invalid option is supplied,
+ an attempt is made to modify the options for a _n_a_m_e for which no
+ completion specification exists, or an output error occurs.
+
+ ccoonnttiinnuuee [_n]
+ Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or
+ sseelleecctt loop. If _n is specified, resume at the _nth enclosing
+ loop. _n must be >= 1. If _n is greater than the number of
+ enclosing loops, the last enclosing loop (the ``top-level''
+ loop) is resumed. The return value is 0 unless _n is not greater
+ than or equal to 1.
+
+ ddeeccllaarree [--aaAAffFFggiillnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
+ ttyyppeesseett [--aaAAffFFggiillnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
+ Declare variables and/or give them attributes. If no _n_a_m_es are
+ given then display the values of variables. The --pp option will
+ display the attributes and values of each _n_a_m_e. When --pp is used
+ with _n_a_m_e arguments, additional options, other than --ff and --FF,
+ are ignored. When --pp is supplied without _n_a_m_e arguments, it
+ will display the attributes and values of all variables having
+ the attributes specified by the additional options. If no other
+ options are supplied with --pp, ddeeccllaarree will display the
+ attributes and values of all shell variables. The --ff option
+ will restrict the display to shell functions. The --FF option
+ inhibits the display of function definitions; only the function
+ name and attributes are printed. If the eexxttddeebbuugg shell option
+ is enabled using sshhoopptt, the source file name and line number
+ where each _n_a_m_e is defined are displayed as well. The --FF option
+ implies --ff. The --gg option forces variables to be created or
+ modified at the global scope, even when ddeeccllaarree is executed in a
+ shell function. It is ignored in all other cases. The follow-
+ ing options can be used to restrict output to variables with the
+ specified attribute or to give variables attributes:
+ --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss
+ above).
+ --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss
+ above).
+ --ff Use function names only.
+ --ii The variable is treated as an integer; arithmetic evalua-
+ tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when
+ the variable is assigned a value.
+ --ll When the variable is assigned a value, all upper-case
+ characters are converted to lower-case. The upper-case
+ attribute is disabled.
+ --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name
+ reference to another variable. That other variable is
+ defined by the value of _n_a_m_e. All references, assign-
+ ments, and attribute modifications to _n_a_m_e, except those
+ using or changing the --nn attribute itself, are performed
+ on the variable referenced by _n_a_m_e's value. The nameref
+ attribute cannot be applied to array variables.
+ --rr Make _n_a_m_es readonly. These names cannot then be assigned
+ values by subsequent assignment statements or unset.
+ --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions
+ inherit the DDEEBBUUGG and RREETTUURRNN traps from the calling
+ shell. The trace attribute has no special meaning for
+ variables.
+ --uu When the variable is assigned a value, all lower-case
+ characters are converted to upper-case. The lower-case
+ attribute is disabled.
+ --xx Mark _n_a_m_es for export to subsequent commands via the
+ environment.
+
+ Using `+' instead of `-' turns off the attribute instead, with
+ the exceptions that ++aa and ++AA may not be used to destroy array
+ variables and ++rr will not remove the readonly attribute. When
+ used in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e local, as
+ with the llooccaall command, unless the --gg option is supplied. If a
+ variable name is followed by =_v_a_l_u_e, the value of the variable
+ is set to _v_a_l_u_e. When using --aa or --AA and the compound assign-
+ ment syntax to create array variables, additional attributes do
+ not take effect until subsequent assignments. The return value
+ is 0 unless an invalid option is encountered, an attempt is made
+ to define a function using ``-f foo=bar'', an attempt is made to
+ assign a value to a readonly variable, an attempt is made to
+ assign a value to an array variable without using the compound
+ assignment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a
+ valid shell variable name, an attempt is made to turn off read-
+ only 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 --ff.
+
+ ddiirrss [[--ccllppvv]] [[++_n]] [[--_n]]
+ Without options, displays the list of currently remembered
+ directories. The default display is on a single line with
+ directory names separated by spaces. Directories are added to
+ the list with the ppuusshhdd command; the ppooppdd command removes
+ entries from the list. The current directory is always the
+ first directory in the stack.
+ --cc Clears the directory stack by deleting all of the
+ entries.
+ --ll Produces a listing using full pathnames; the default
+ listing format uses a tilde to denote the home directory.
+ --pp Print the directory stack with one entry per line.
+ --vv Print the directory stack with one entry per line, pre-
+ fixing each entry with its index in the stack.
+ ++_n Displays the _nth entry counting from the left of the list
+ shown by ddiirrss when invoked without options, starting with
+ zero.
+ --_n Displays the _nth entry counting from the right of the
+ list shown by ddiirrss when invoked without options, starting
+ with zero.
+
+ The return value is 0 unless an invalid option is supplied or _n
+ indexes beyond the end of the directory stack.
+
+ ddiissoowwnn [--aarr] [--hh] [_j_o_b_s_p_e_c ... | _p_i_d ... ]
+ Without options, remove each _j_o_b_s_p_e_c from the table of active
+ jobs. If _j_o_b_s_p_e_c is not present, and neither the --aa nor the --rr
+ option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. If the --hh option
+ is given, each _j_o_b_s_p_e_c is not removed from the table, but is
+ marked so that SSIIGGHHUUPP is not sent to the job if the shell
+ receives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is supplied, the --aa option
+ means to remove or mark all jobs; the --rr option without a _j_o_b_-
+ _s_p_e_c argument restricts operation to running jobs. The return
+ value is 0 unless a _j_o_b_s_p_e_c does not specify a valid job.
+
+ eecchhoo [--nneeEE] [_a_r_g ...]
+ Output the _a_r_gs, separated by spaces, followed by a newline.
+ The return status is 0 unless a write error occurs. If --nn is
+ specified, the trailing newline is suppressed. If the --ee option
+ is given, interpretation of the following backslash-escaped
+ characters is enabled. The --EE option disables the interpreta-
+ tion of these escape characters, even on systems where they are
+ interpreted by default. The xxppgg__eecchhoo shell option may be used
+ to dynamically determine whether or not eecchhoo expands these
+ escape characters by default. eecchhoo does not interpret ---- to
+ mean the end of options. eecchhoo interprets the following escape
+ sequences:
+ \\aa alert (bell)
+ \\bb backspace
+ \\cc suppress further output
+ \\ee
+ \\EE an escape character
+ \\ff form feed
+ \\nn new line
+ \\rr carriage return
+ \\tt horizontal tab
+ \\vv vertical tab
+ \\\\ backslash
+ \\00_n_n_n the eight-bit character whose value is the octal value
+ _n_n_n (zero to three octal digits)
+ \\xx_H_H the eight-bit character whose value is the hexadecimal
+ value _H_H (one or two hex digits)
+ \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value _H_H_H_H (one to four hex digits)
+ \\UU_H_H_H_H_H_H_H_H
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits)
+
+ eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...]
+ 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 --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are
+ enabled. For example, to use the tteesstt binary found via the PPAATTHH
+ instead of the shell builtin version, run ``enable -n test''.
+ The --ff option means to load the new builtin command _n_a_m_e from
+ shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading.
+ The --dd option will delete a builtin previously loaded with --ff.
+ If no _n_a_m_e arguments are given, or if the --pp option is supplied,
+ a list of shell builtins is printed. With no other option argu-
+ ments, the list consists of all enabled shell builtins. If --nn
+ is supplied, only disabled builtins are printed. If --aa is sup-
+ plied, the list printed includes all builtins, with an indica-
+ tion of whether or not each is enabled. If --ss is supplied, the
+ output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return
+ value is 0 unless a _n_a_m_e is not a shell builtin or there is an
+ error loading a new builtin from a shared object.
+
+ eevvaall [_a_r_g ...]
+ The _a_r_gs are read and concatenated together into a single com-
+ mand. This command is then read and executed by the shell, and
+ its exit status is returned as the value of eevvaall. If there are
+ no _a_r_g_s, or only null arguments, eevvaall returns 0.
+
+ eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]]
+ If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process
+ is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If
+ the --ll option is supplied, the shell places a dash at the begin-
+ ning of the zeroth argument passed to _c_o_m_m_a_n_d. This is what
+ _l_o_g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with
+ an empty environment. If --aa is supplied, the shell passes _n_a_m_e
+ as the zeroth argument to the executed command. If _c_o_m_m_a_n_d can-
+ not be executed for some reason, a non-interactive shell exits,
+ unless the eexxeeccffaaiill shell option is enabled. In that case, it
+ returns failure. An interactive shell returns failure if the
+ file cannot be executed. A subshell exits unconditionally if
+ eexxeecc fails. If _c_o_m_m_a_n_d is not specified, any redirections take
+ effect in the current shell, and the return status is 0. If
+ there is a redirection error, the return status is 1.
+
+ eexxiitt [_n]
+ Cause the shell to exit with a status of _n. If _n is omitted,
+ the exit status is that of the last command executed. A trap on
+ EEXXIITT is executed before the shell terminates.
+
+ eexxppoorrtt [--ffnn] [_n_a_m_e[=_w_o_r_d]] ...
+ eexxppoorrtt --pp
+ The supplied _n_a_m_e_s are marked for automatic export to the envi-
+ ronment of subsequently executed commands. If the --ff option is
+ given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or
+ if the --pp option is supplied, a list of names of all exported
+ variables is printed. The --nn option causes the export property
+ to be removed from each _n_a_m_e. If a variable name is followed by
+ =_w_o_r_d, the value of the variable is set to _w_o_r_d. eexxppoorrtt returns
+ an exit status of 0 unless an invalid option is encountered, one
+ of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup-
+ plied with a _n_a_m_e that is not a function.
+
+ ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t]
+ ffcc --ss [_p_a_t=_r_e_p] [_c_m_d]
+ The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t
+ from the history list and displays or edits and re-executes
+ them. _F_i_r_s_t and _l_a_s_t may be specified as a string (to locate
+ the last 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 _l_a_s_t is not
+ specified, it is set to the current command for listing (so that
+ ``fc -l -10'' prints the last 10 commands) and to _f_i_r_s_t other-
+ wise. If _f_i_r_s_t is not specified, it is set to the previous com-
+ mand for editing and -16 for listing.
+
+ The --nn option suppresses the command numbers when listing. The
+ --rr option reverses the order of the commands. If the --ll option
+ is given, the commands are listed on standard output. Other-
+ wise, the editor given by _e_n_a_m_e is invoked on a file containing
+ those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT
+ variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set.
+ If neither variable is set, _v_i is used. When editing is com-
+ plete, the edited commands are echoed and executed.
+
+ In the second form, _c_o_m_m_a_n_d is re-executed after each instance
+ of _p_a_t is replaced by _r_e_p. _C_o_m_m_a_n_d is interpreted the same as
+ _f_i_r_s_t above. A useful alias to use with this is ``r="fc -s"'',
+ so that typing ``r cc'' runs the last command beginning with
+ ``cc'' and typing ``r'' re-executes the last command.
+
+ If the first form is used, the return value is 0 unless an
+ invalid option is encountered or _f_i_r_s_t or _l_a_s_t specify history
+ lines out of range. If the --ee option is supplied, the return
+ value is the value of the last command executed or failure if an
+ error occurs with the temporary file of commands. If the second
+ form is used, the return status is that of the command re-exe-
+ cuted, unless _c_m_d does not specify a valid history line, in
+ which case ffcc returns failure.
+
+ ffgg [_j_o_b_s_p_e_c]
+ Resume _j_o_b_s_p_e_c in the foreground, and make it the current job.
+ If _j_o_b_s_p_e_c is not present, the shell's notion of the _c_u_r_r_e_n_t _j_o_b
+ is used. The return value is that of the command placed into
+ the foreground, or failure if run when job control is disabled
+ or, when run with job control enabled, if _j_o_b_s_p_e_c does not spec-
+ ify a valid job or _j_o_b_s_p_e_c specifies a job that was started
+ without job control.
+
+ ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g_s]
+ ggeettooppttss is used by shell procedures to parse positional parame-
+ ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog-
+ nized; if a character is followed by a colon, the option is
+ expected to have an argument, which should be separated from it
+ by white space. The colon and question mark characters may not
+ be used as option characters. Each time it is invoked, ggeettooppttss
+ places the next option in the shell variable _n_a_m_e, initializing
+ _n_a_m_e if it does not exist, and the index of the next argument to
+ be processed into the variable OOPPTTIINNDD. OOPPTTIINNDD is initialized to
+ 1 each time the shell or a shell script is invoked. When an
+ option requires an argument, ggeettooppttss places that argument into
+ the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automati-
+ cally; it must be manually reset between multiple calls to
+ ggeettooppttss within the same shell invocation if a new set of parame-
+ ters is to be used.
+
+ When the end of options is encountered, ggeettooppttss exits with a
+ return value greater than zero. OOPPTTIINNDD is set to the index of
+ the first non-option argument, and _n_a_m_e is set to ?.
+
+ ggeettooppttss normally parses the positional parameters, but if more
+ arguments are given in _a_r_g_s, ggeettooppttss parses those instead.
+
+ ggeettooppttss can report errors in two ways. If the first character
+ of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In
+ normal operation, diagnostic messages are printed when invalid
+ options or missing option arguments are encountered. If the
+ variable OOPPTTEERRRR is set to 0, no error messages will be dis-
+ played, even if the first character of _o_p_t_s_t_r_i_n_g is not a colon.
+
+ If an invalid option is seen, ggeettooppttss places ? into _n_a_m_e and, if
+ not silent, prints an error message and unsets OOPPTTAARRGG. If
+ ggeettooppttss is silent, the option character found is placed in
+ OOPPTTAARRGG and no diagnostic message is printed.
+
+ If a required argument is not found, and ggeettooppttss is not silent,
+ a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a
+ diagnostic message is printed. If ggeettooppttss is silent, then a
+ colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option
+ character found.
+
+ ggeettooppttss returns true if an option, specified or unspecified, is
+ found. It returns false if the end of options is encountered or
+ an error occurs.
+
+ hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e]
+ Each time hhaasshh is invoked, the full pathname of the command _n_a_m_e
+ is determined by searching the directories in $$PPAATTHH and remem-
+ bered. Any previously-remembered pathname is discarded. If the
+ --pp option is supplied, no path search is performed, and _f_i_l_e_n_a_m_e
+ is used as the full filename of the command. The --rr option
+ causes the shell to forget all remembered locations. The --dd
+ option causes the shell to forget the remembered location of
+ each _n_a_m_e. If the --tt option is supplied, the full pathname to
+ which each _n_a_m_e corresponds is printed. If multiple _n_a_m_e argu-
+ ments are supplied with --tt, the _n_a_m_e is printed before the
+ hashed full pathname. The --ll option causes output to be dis-
+ played in a format that may be reused as input. If no arguments
+ are given, or if only --ll is supplied, information about remem-
+ bered commands is printed. The return status is true unless a
+ _n_a_m_e is not found or an invalid option is supplied.
+
+ hheellpp [--ddmmss] [_p_a_t_t_e_r_n]
+ Display helpful information about builtin commands. If _p_a_t_t_e_r_n
+ is specified, hheellpp gives detailed help on all commands matching
+ _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control
+ structures is printed.
+ --dd Display a short description of each _p_a_t_t_e_r_n
+ --mm Display the description of each _p_a_t_t_e_r_n in a manpage-like
+ format
+ --ss Display only a short usage synopsis for each _p_a_t_t_e_r_n
+
+ The return status is 0 unless no command matches _p_a_t_t_e_r_n.
+
+ hhiissttoorryy [[_n]]
+ hhiissttoorryy --cc
+ hhiissttoorryy --dd _o_f_f_s_e_t
+ hhiissttoorryy --dd _s_t_a_r_t-_e_n_d
+ hhiissttoorryy --aannrrww [_f_i_l_e_n_a_m_e]
+ hhiissttoorryy --pp _a_r_g [_a_r_g _._._.]
+ hhiissttoorryy --ss _a_r_g [_a_r_g _._._.]
+ With no options, display the command history list with line num-
+ bers. Lines listed with a ** have been modified. An argument of
+ _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE--
+ FFOORRMMAATT is set and not null, it is used as a format string for
+ _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis-
+ played history entry. No intervening blank is printed between
+ the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is
+ supplied, it is used as the name of the history file; if not,
+ the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the
+ following meanings:
+ --cc Clear the history list by deleting all the entries.
+ --dd _o_f_f_s_e_t
+ Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t
+ is negative, it is interpreted as relative to one greater
+ than the last history position, so negative indices count
+ back from the end of the history, and an index of -1
+ refers to the current hhiissttoorryy --dd command.
+ --dd _s_t_a_r_t-_e_n_d
+ Delete the history entries between positions _s_t_a_r_t and
+ _e_n_d, inclusive. Positive and negative values for _s_t_a_r_t
+ and _e_n_d are interpreted as described above.
+ --aa Append the ``new'' history lines to the history file.
+ These are history lines entered since the beginning of
+ the current bbaasshh session, but not already appended to the
+ history file.
+ --nn Read the history lines not already read from the history
+ file into the current history list. These are lines
+ appended to the history file since the beginning of the
+ current bbaasshh session.
+ --rr Read the contents of the history file and append them to
+ the current history list.
+ --ww Write the current history list to the history file, over-
+ writing the history file's contents.
+ --pp Perform history substitution on the following _a_r_g_s and
+ display the result on the standard output. Does not
+ store the results in the history list. Each _a_r_g must be
+ quoted to disable normal history expansion.
+ --ss Store the _a_r_g_s in the history list as a single entry.
+ The last command in the history list is removed before
+ the _a_r_g_s are added.
+
+ If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa-
+ tion associated with each history entry is written to the his-
+ tory file, marked with the history comment character. When the
+ history file is read, lines beginning with the history comment
+ character followed immediately by a digit are interpreted as
+ timestamps for the following history entry. The return value is
+ 0 unless an invalid option is encountered, an error occurs while
+ reading or writing the history file, an invalid _o_f_f_s_e_t is sup-
+ plied as an argument to --dd, or the history expansion supplied as
+ an argument to --pp fails.
+
+ jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ]
+ jjoobbss --xx _c_o_m_m_a_n_d [ _a_r_g_s ... ]
+ The first form lists the active jobs. The options have the fol-
+ lowing meanings:
+ --ll List process IDs in addition to the normal information.
+ --nn Display information only about jobs that have changed
+ status since the user was last notified of their status.
+ --pp List only the process ID of the job's process group
+ leader.
+ --rr Display only running jobs.
+ --ss Display only stopped jobs.
+
+ If _j_o_b_s_p_e_c is given, output is restricted to information about
+ that job. The return status is 0 unless an invalid option is
+ encountered or an invalid _j_o_b_s_p_e_c is supplied.
+
+ If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in
+ _c_o_m_m_a_n_d or _a_r_g_s with the corresponding process group ID, and
+ executes _c_o_m_m_a_n_d passing it _a_r_g_s, returning its exit status.
+
+ kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] [_p_i_d | _j_o_b_s_p_e_c] ...
+ kkiillll --ll|--LL [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s]
+ Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes
+ named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive
+ signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or
+ a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not
+ present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the
+ signal names. If any arguments are supplied when --ll is given,
+ the names of the signals corresponding to the arguments are
+ listed, and the return status is 0. The _e_x_i_t___s_t_a_t_u_s argument to
+ --ll is a number specifying either a signal number or the exit
+ status of a process terminated by a signal. The --LL option is
+ equivalent to --ll. kkiillll returns true if at least one signal was
+ successfully sent, or false if an error occurs or an invalid
+ option is encountered.
+
+ lleett _a_r_g [_a_r_g ...]
+ Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH--
+ MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett
+ returns 1; 0 is returned otherwise.
+
+ llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ... | - ]
+ For each argument, a local variable named _n_a_m_e is created, and
+ assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted
+ by ddeeccllaarree. When llooccaall is used within a function, it causes the
+ variable _n_a_m_e to have a visible scope restricted to that func-
+ tion and its children. If _n_a_m_e is -, the set of shell options
+ is made local to the function in which llooccaall is invoked: shell
+ options changed using the sseett builtin inside the function are
+ restored to their original values when the function returns.
+ With no operands, llooccaall writes a list of local variables to the
+ standard output. It is an error to use llooccaall when not within a
+ function. The return status is 0 unless llooccaall is used outside a
+ function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a readonly
+ variable.
+
+ llooggoouutt Exit a login shell.
+
+ mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC
+ _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y]
+ rreeaaddaarrrraayy [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC
+ _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y]
+ Read lines from the standard input into the indexed array vari-
+ able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup-
+ plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if
+ supplied, have the following meanings:
+ --dd The first character of _d_e_l_i_m is used to terminate each
+ input line, rather than newline. If _d_e_l_i_m is the empty
+ string, mmaappffiillee will terminate a line when it reads a NUL
+ character.
+ --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are
+ copied.
+ --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default
+ index is 0.
+ --ss Discard the first _c_o_u_n_t lines read.
+ --tt Remove a trailing _d_e_l_i_m (default newline) from each line
+ read.
+ --uu Read lines from file descriptor _f_d instead of the stan-
+ dard input.
+ --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The
+ --cc option specifies _q_u_a_n_t_u_m.
+ --cc Specify the number of lines read between each call to
+ _c_a_l_l_b_a_c_k.
+
+ If --CC is specified without --cc, the default quantum is 5000.
+ When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next
+ array element to be assigned and the line to be assigned to that
+ element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after
+ the line is read but before the array element is assigned.
+
+ If not supplied with an explicit origin, mmaappffiillee will clear
+ _a_r_r_a_y before assigning to it.
+
+ mmaappffiillee returns successfully unless an invalid option or option
+ argument is supplied, _a_r_r_a_y is invalid or unassignable, or if
+ _a_r_r_a_y is not an indexed array.
+
+ ppooppdd [-nn] [+_n] [-_n]
+ Removes entries from the directory stack. With no arguments,
+ removes the top directory from the stack, and performs a ccdd to
+ the new top directory. Arguments, if supplied, have the follow-
+ ing meanings:
+ --nn Suppresses the normal change of directory when removing
+ directories from the stack, so that only the stack is
+ manipulated.
+ ++_n Removes the _nth entry counting from the left of the list
+ shown by ddiirrss, starting with zero. For example: ``popd
+ +0'' removes the first directory, ``popd +1'' the second.
+ --_n Removes the _nth entry counting from the right of the list
+ shown by ddiirrss, starting with zero. For example: ``popd
+ -0'' removes the last directory, ``popd -1'' the next to
+ last.
+
+ If the ppooppdd command is successful, a ddiirrss is performed as well,
+ and the return status is 0. ppooppdd returns false if an invalid
+ option is encountered, the directory stack is empty, a non-exis-
+ tent directory stack entry is specified, or the directory change
+ fails.
+
+ pprriinnttff [--vv _v_a_r] _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s]
+ Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the
+ control of the _f_o_r_m_a_t. The --vv option causes the output to be
+ assigned to the variable _v_a_r rather than being printed to the
+ standard output.
+
+ The _f_o_r_m_a_t 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 _a_r_g_u_m_e_n_t. In
+ addition to the standard _p_r_i_n_t_f(1) format specifications, pprriinnttff
+ interprets the following extensions:
+ %%bb causes pprriinnttff to expand backslash escape sequences in the
+ corresponding _a_r_g_u_m_e_n_t in the same way as eecchhoo --ee.
+ %%qq causes pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a
+ format that can be reused as shell input.
+ %%((_d_a_t_e_f_m_t))TT
+ causes pprriinnttff to output the date-time string resulting
+ from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3).
+ The corresponding _a_r_g_u_m_e_n_t is an integer representing the
+ number of seconds since the epoch. Two special argument
+ values may be used: -1 represents the current time, and
+ -2 represents the time the shell was invoked. If no
+ argument is specified, conversion behaves as if -1 had
+ been given. This is an exception to the usual pprriinnttff
+ behavior.
+
+ Arguments to non-string format specifiers are treated as C con-
+ stants, except that a leading plus or minus sign is allowed, and
+ if the leading character is a single or double quote, the value
+ is the ASCII value of the following character.
+
+ The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_-
+ _m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s 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.
+
+ ppuusshhdd [--nn] [+_n] [-_n]
+ ppuusshhdd [--nn] [_d_i_r]
+ Adds a directory to the top of the directory stack, or rotates
+ the stack, making the new top of the stack the current working
+ directory. With no arguments, ppuusshhdd exchanges the top two
+ directories and returns 0, unless the directory stack is empty.
+ Arguments, if supplied, have the following meanings:
+ --nn Suppresses the normal change of directory when rotating
+ or adding directories to the stack, so that only the
+ stack is manipulated.
+ ++_n Rotates the stack so that the _nth directory (counting
+ from the left of the list shown by ddiirrss, starting with
+ zero) is at the top.
+ --_n Rotates the stack so that the _nth directory (counting
+ from the right of the list shown by ddiirrss, starting with
+ zero) is at the top.
+ _d_i_r Adds _d_i_r to the directory stack at the top, making it the
+ new current working directory as if it had been supplied
+ as the argument to the ccdd builtin.
+
+ If the ppuusshhdd command is successful, a ddiirrss is performed as well.
+ If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r
+ fails. With the second form, ppuusshhdd returns 0 unless the direc-
+ tory stack is empty, a non-existent directory stack element is
+ specified, or the directory change to the specified new current
+ directory fails.
+
+ ppwwdd [--LLPP]
+ Print the absolute pathname of the current working directory.
+ The pathname printed contains no symbolic links if the --PP option
+ is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command
+ is enabled. If the --LL option is used, the pathname printed may
+ contain symbolic links. The return status is 0 unless an error
+ occurs while reading the name of the current directory or an
+ invalid option is supplied.
+
+ rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp
+ _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...]
+ One line is read from the standard input, or from the file
+ descriptor _f_d supplied as an argument to the --uu option, split
+ into words as described above under WWoorrdd SSpplliittttiinngg, and the
+ first word is assigned to the first _n_a_m_e, the second word to the
+ second _n_a_m_e, and so on. If there are more words than names, the
+ remaining words and their intervening delimiters are assigned to
+ the last _n_a_m_e. If there are fewer words read from the input
+ stream than names, the remaining names are assigned empty val-
+ ues. The characters in IIFFSS are used to split the line into
+ words using the same rules the shell uses for expansion
+ (described above under WWoorrdd SSpplliittttiinngg). The backslash character
+ (\\) may be used to remove any special meaning for the next char-
+ acter read and for line continuation. Options, if supplied,
+ have the following meanings:
+ --aa _a_n_a_m_e
+ The words are assigned to sequential indices of the array
+ variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any
+ new values are assigned. Other _n_a_m_e arguments are
+ ignored.
+ --dd _d_e_l_i_m
+ The first character of _d_e_l_i_m is used to terminate the
+ input line, rather than newline. If _d_e_l_i_m is the empty
+ string, rreeaadd will terminate a line when it reads a NUL
+ character.
+ --ee If the standard input is coming from a terminal, rreeaaddlliinnee
+ (see RREEAADDLLIINNEE above) is used to obtain the line. Read-
+ line uses the current (or default, if line editing was
+ not previously active) editing settings, but uses Read-
+ line's default filename completion.
+ --ii _t_e_x_t
+ If rreeaaddlliinnee is being used to read the line, _t_e_x_t is
+ placed into the editing buffer before editing begins.
+ --nn _n_c_h_a_r_s
+ rreeaadd returns after reading _n_c_h_a_r_s characters rather than
+ waiting for a complete line of input, but honors a delim-
+ iter if fewer than _n_c_h_a_r_s characters are read before the
+ delimiter.
+ --NN _n_c_h_a_r_s
+ rreeaadd returns after reading exactly _n_c_h_a_r_s characters
+ rather than waiting for a complete line of input, unless
+ EOF is encountered or rreeaadd times out. Delimiter charac-
+ ters encountered in the input are not treated specially
+ and do not cause rreeaadd to return until _n_c_h_a_r_s characters
+ are read. The result is not split on the characters in
+ IIFFSS; the intent is that the variable is assigned exactly
+ the characters read (with the exception of backslash; see
+ the --rr option below).
+ --pp _p_r_o_m_p_t
+ Display _p_r_o_m_p_t on standard error, without a trailing new-
+ line, before attempting to read any input. The prompt is
+ displayed only if input is coming from a terminal.
+ --rr Backslash does not act as an escape character. The back-
+ slash is considered to be part of the line. In particu-
+ lar, a backslash-newline pair may not then be used as a
+ line continuation.
+ --ss Silent mode. If input is coming from a terminal, charac-
+ ters are not echoed.
+ --tt _t_i_m_e_o_u_t
+ Cause rreeaadd to time out and return failure if a complete
+ line of input (or a specified number of characters) is
+ not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a deci-
+ mal number with a fractional portion following the deci-
+ mal point. This option is only effective if rreeaadd is
+ reading input from a terminal, pipe, or other special
+ file; it has no effect when reading from regular files.
+ If rreeaadd times out, rreeaadd saves any partial input read into
+ the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd
+ returns immediately, without trying to read any data.
+ The exit status is 0 if input is available on the speci-
+ fied file descriptor, non-zero otherwise. The exit sta-
+ tus is greater than 128 if the timeout is exceeded.
+ --uu _f_d Read input from file descriptor _f_d.
+
+ If no _n_a_m_e_s are supplied, the line read is assigned to the vari-
+ able RREEPPLLYY. The exit status is zero, unless end-of-file is
+ encountered, rreeaadd times out (in which case the status is greater
+ than 128), a variable assignment error (such as assigning to a
+ readonly variable) occurs, or an invalid file descriptor is sup-
+ plied as the argument to --uu.
+
+ rreeaaddoonnllyy [--aaAAff] [--pp] [_n_a_m_e[=_w_o_r_d] ...]
+ The given _n_a_m_e_s are marked readonly; the values of these _n_a_m_e_s
+ may not be changed by subsequent assignment. If the --ff option
+ is supplied, the functions corresponding to the _n_a_m_e_s are so
+ marked. The --aa option restricts the variables to indexed
+ arrays; the --AA option restricts the variables to associative
+ arrays. If both options are supplied, --AA takes precedence. If
+ no _n_a_m_e arguments are given, or if the --pp option is supplied, a
+ list of all readonly names is printed. The other options may be
+ used to restrict the output to a subset of the set of readonly
+ names. The --pp option causes output to be displayed in a format
+ that may be reused as input. If a variable name is followed by
+ =_w_o_r_d, the value of the variable is set to _w_o_r_d. The return
+ status is 0 unless an invalid option is encountered, one of the
+ _n_a_m_e_s is not a valid shell variable name, or --ff is supplied with
+ a _n_a_m_e that is not a function.
+
+ rreettuurrnn [_n]
+ Causes a function to stop executing and return the value speci-
+ fied by _n to its caller. If _n is omitted, the return status is
+ that of the last command executed in the function body. If
+ rreettuurrnn is executed by a trap handler, the last command used to
+ determine the status is the last command executed before the
+ trap handler. If rreettuurrnn is executed during a DDEEBBUUGG trap, the
+ last command used to determine the status is the last command
+ executed by the trap handler before rreettuurrnn was invoked. If
+ rreettuurrnn is used outside a function, but during execution of a
+ script by the .. (ssoouurrccee) command, it causes the shell to stop
+ executing that script and return either _n or the exit status of
+ the last command executed within the script as the exit status
+ of the script. If _n is supplied, the return value is its least
+ significant 8 bits. The return status is non-zero if rreettuurrnn is
+ supplied a non-numeric argument, or is used outside a function
+ and not during execution of a script by .. or ssoouurrccee. Any com-
+ mand associated with the RREETTUURRNN trap is executed before execu-
+ tion resumes after the function or script.
+
+ sseett [----aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...]
+ sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...]
+ Without options, the name and value of each shell variable are
+ displayed in a format that can be reused as input for setting or
+ resetting the currently-set variables. Read-only variables can-
+ not be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed.
+ The output is sorted according to the current locale. When
+ options are specified, they set or unset shell attributes. Any
+ arguments remaining after option processing are treated as val-
+ ues for the positional parameters and are assigned, in order, to
+ $$11, $$22, ...... $$_n. Options, if specified, have the following
+ meanings:
+ --aa Each variable or function that is created or modified is
+ given the export attribute and marked for export to the
+ environment of subsequent commands.
+ --bb Report the status of terminated background jobs immedi-
+ ately, rather than before the next primary prompt. This
+ is effective only when job control is enabled.
+ --ee Exit immediately if a _p_i_p_e_l_i_n_e (which may consist of a
+ single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _l_i_s_t, or a _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d
+ (see SSHHEELLLL GGRRAAMMMMAARR above), exits with a non-zero status.
+ The shell does not exit if the command that fails is
+ part of the command list immediately following a wwhhiillee
+ or uunnttiill keyword, part of the test following the iiff or
+ eelliiff reserved words, part of any command executed in a
+ &&&& or |||| list except the command following the final &&&&
+ or ||||, any command in a pipeline but the last, or if the
+ command's return value is being inverted with !!. If a
+ compound command other than a subshell returns a non-
+ zero status because a command failed while --ee was being
+ ignored, the shell does not exit. A trap on EERRRR, if
+ set, is executed before the shell exits. This option
+ applies to the shell environment and each subshell envi-
+ ronment separately (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT
+ above), and may cause subshells to exit before executing
+ all the commands in the subshell.
+
+ If a compound command or shell function executes in a
+ context where --ee is being ignored, none of the commands
+ executed within the compound command or function body
+ will be affected by the --ee setting, even if --ee is set
+ and a command returns a failure status. If a compound
+ command or shell function sets --ee while executing in a
+ context where --ee is ignored, that setting will not have
+ any effect until the compound command or the command
+ containing the function call completes.
+ --ff Disable pathname expansion.
+ --hh Remember the location of commands as they are looked up
+ for execution. This is enabled by default.
+ --kk All arguments in the form of assignment statements are
+ placed in the environment for a command, not just those
+ that precede the command name.
+ --mm Monitor mode. Job control is enabled. This option is
+ on by default for interactive shells on systems that
+ support it (see JJOOBB CCOONNTTRROOLL above). All processes run
+ in a separate process group. When a background job com-
+ pletes, the shell prints a line containing its exit sta-
+ tus.
+ --nn Read commands but do not execute them. This may be used
+ to check a shell script for syntax errors. This is
+ ignored by interactive shells.
+ --oo _o_p_t_i_o_n_-_n_a_m_e
+ The _o_p_t_i_o_n_-_n_a_m_e can be one of the following:
+ aalllleexxppoorrtt
+ Same as --aa.
+ bbrraacceeeexxppaanndd
+ Same as --BB.
+ eemmaaccss Use an emacs-style command line editing inter-
+ face. This is enabled by default when the shell
+ is interactive, unless the shell is started with
+ the ----nnooeeddiittiinngg option. This also affects the
+ editing interface used for rreeaadd --ee.
+ eerrrreexxiitt Same as --ee.
+ eerrrrttrraaccee
+ Same as --EE.
+ ffuunnccttrraaccee
+ Same as --TT.
+ hhaasshhaallll Same as --hh.
+ hhiisstteexxppaanndd
+ Same as --HH.
+ hhiissttoorryy Enable command history, as described above under
+ HHIISSTTOORRYY. This option is on by default in inter-
+ active shells.
+ iiggnnoorreeeeooff
+ The effect is as if the shell command
+ ``IGNOREEOF=10'' had been executed (see SShheellll
+ VVaarriiaabblleess above).
+ kkeeyywwoorrdd Same as --kk.
+ mmoonniittoorr Same as --mm.
+ nnoocclloobbbbeerr
+ Same as --CC.
+ nnooeexxeecc Same as --nn.
+ nnoogglloobb Same as --ff.
+ nnoolloogg Currently ignored.
+ nnoottiiffyy Same as --bb.
+ nnoouunnsseett Same as --uu.
+ oonneeccmmdd Same as --tt.
+ pphhyyssiiccaall
+ Same as --PP.
+ ppiippeeffaaiill
+ 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.
+ ppoossiixx Change the behavior of bbaasshh where the default
+ operation differs from the POSIX standard to
+ match the standard (_p_o_s_i_x _m_o_d_e). See SSEEEE AALLSSOO
+ below for a reference to a document that details
+ how posix mode affects bash's behavior.
+ pprriivviilleeggeedd
+ Same as --pp.
+ vveerrbboossee Same as --vv.
+ vvii Use a vi-style command line editing interface.
+ This also affects the editing interface used for
+ rreeaadd --ee.
+ xxttrraaccee Same as --xx.
+ If --oo is supplied with no _o_p_t_i_o_n_-_n_a_m_e, the values of the
+ current options are printed. If ++oo is supplied with no
+ _o_p_t_i_o_n_-_n_a_m_e, a series of sseett commands to recreate the
+ current option settings is displayed on the standard
+ output.
+ --pp Turn on _p_r_i_v_i_l_e_g_e_d mode. In this mode, the $$EENNVV and
+ $$BBAASSHH__EENNVV files are not processed, shell functions are
+ not inherited from the environment, and the SSHHEELLLLOOPPTTSS,
+ BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they
+ appear in the environment, are ignored. If the shell is
+ started with the effective user (group) id not equal to
+ the real user (group) id, and the --pp option is not sup-
+ plied, these actions are taken and the effective user id
+ is set to the real user id. If the --pp option is sup-
+ plied 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.
+ --tt Exit after reading and executing one command.
+ --uu Treat unset variables and parameters other than the spe-
+ cial parameters "@" and "*" as an error when performing
+ parameter expansion. If expansion is attempted on an
+ unset variable or parameter, the shell prints an error
+ message, and, if not interactive, exits with a non-zero
+ status.
+ --vv Print shell input lines as they are read.
+ --xx After expanding each _s_i_m_p_l_e _c_o_m_m_a_n_d, ffoorr command, ccaassee
+ command, sseelleecctt command, or arithmetic ffoorr command, dis-
+ play the expanded value of PPSS44, followed by the command
+ and its expanded arguments or associated word list.
+ --BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn
+ above). This is on by default.
+ --CC If set, bbaasshh does not overwrite an existing file with
+ the >>, >>&&, and <<>> redirection operators. This may be
+ overridden when creating output files by using the redi-
+ rection operator >>|| instead of >>.
+ --EE If set, any trap on EERRRR is inherited by shell functions,
+ command substitutions, and commands executed in a sub-
+ shell environment. The EERRRR trap is normally not inher-
+ ited in such cases.
+ --HH Enable !! style history substitution. This option is on
+ by default when the shell is interactive.
+ --PP If set, the shell does not resolve symbolic links when
+ executing commands such as ccdd that change the current
+ working directory. It uses the physical directory
+ structure instead. By default, bbaasshh follows the logical
+ chain of directories when performing commands which
+ change the current directory.
+ --TT If set, any traps on DDEEBBUUGG and RREETTUURRNN are inherited by
+ shell functions, command substitutions, and commands
+ executed in a subshell environment. The DDEEBBUUGG and
+ RREETTUURRNN traps are normally not inherited in such cases.
+ ---- If no arguments follow this option, then the positional
+ parameters are unset. Otherwise, the positional parame-
+ ters are set to the _a_r_gs, even if some of them begin
+ with a --.
+ -- Signal the end of options, cause all remaining _a_r_gs to
+ be assigned to the positional parameters. The --xx and --vv
+ options are turned off. If there are no _a_r_gs, the posi-
+ tional parameters remain unchanged.
+
+ The options are off by default unless otherwise noted. Using +
+ rather than - causes these options to be turned off. The
+ options can also be specified as arguments to an invocation of
+ the shell. The current set of options may be found in $$--. The
+ return status is always true unless an invalid option is encoun-
+ tered.
+
+ sshhiifftt [_n]
+ The positional parameters from _n+1 ... are renamed to $$11 ........
+ Parameters represented by the numbers $$## down to $$##-_n+1 are
+ unset. _n must be a non-negative number less than or equal to
+ $$##. If _n is 0, no parameters are changed. If _n is not given,
+ it is assumed to be 1. If _n is greater than $$##, the positional
+ parameters are not changed. The return status is greater than
+ zero if _n is greater than $$## or less than zero; otherwise 0.
+
+ sshhoopptt [--ppqqssuu] [--oo] [_o_p_t_n_a_m_e ...]
+ Toggle the values of settings controlling optional shell behav-
+ ior. The settings can be either those listed below, or, if the
+ --oo option is used, those available with the --oo option to the sseett
+ builtin command. With no options, or with the --pp option, a list
+ of all settable options is displayed, with an indication of
+ whether or not each is set; if _o_p_t_n_a_m_e_s are supplied, the output
+ is restricted to those options. The --pp option causes output to
+ be displayed in a form that may be reused as input. Other
+ options have the following meanings:
+ --ss Enable (set) each _o_p_t_n_a_m_e.
+ --uu Disable (unset) each _o_p_t_n_a_m_e.
+ --qq Suppresses normal output (quiet mode); the return status
+ indicates whether the _o_p_t_n_a_m_e is set or unset. If multi-
+ ple _o_p_t_n_a_m_e arguments are given with --qq, the return sta-
+ tus is zero if all _o_p_t_n_a_m_e_s are enabled; non-zero other-
+ wise.
+ --oo Restricts the values of _o_p_t_n_a_m_e to be those defined for
+ the --oo option to the sseett builtin.
+
+ If either --ss or --uu is used with no _o_p_t_n_a_m_e arguments, sshhoopptt
+ shows only those options which are set or unset, respectively.
+ Unless otherwise noted, the sshhoopptt options are disabled (unset)
+ by default.
+
+ The return status when listing options is zero if all _o_p_t_n_a_m_e_s
+ are enabled, non-zero otherwise. When setting or unsetting
+ options, the return status is zero unless an _o_p_t_n_a_m_e is not a
+ valid shell option.
+
+ The list of sshhoopptt options is:
+
+ aassssoocc__eexxppaanndd__oonnccee
+ If set, the shell suppresses multiple evaluation of
+ associative array subscripts during arithmetic expres-
+ sion evaluation, while executing builtins that can per-
+ form variable assignments, and while executing builtins
+ that perform array dereferencing.
+ aauuttooccdd If set, a command name that is the name of a directory
+ is executed as if it were the argument to the ccdd com-
+ mand. This option is only used by interactive shells.
+ ccddaabbllee__vvaarrss
+ If set, an argument to the ccdd builtin command that is
+ not a directory is assumed to be the name of a variable
+ whose value is the directory to change to.
+ ccddssppeellll If set, minor errors in the spelling of a directory com-
+ ponent in a ccdd command will be corrected. The errors
+ checked for are transposed characters, a missing charac-
+ ter, and one character too many. If a correction is
+ found, the corrected filename is printed, and the com-
+ mand proceeds. This option is only used by interactive
+ shells.
+ cchheecckkhhaasshh
+ If set, bbaasshh checks that a command found in the hash ta-
+ ble exists before trying to execute it. If a hashed
+ command no longer exists, a normal path search is per-
+ formed.
+ cchheecckkjjoobbss
+ If set, bbaasshh 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 JJOOBB CCOONNTTRROOLL above). The shell always postpones
+ exiting if any jobs are stopped.
+ cchheecckkwwiinnssiizzee
+ If set, bbaasshh checks the window size after each external
+ (non-builtin) command and, if necessary, updates the
+ values of LLIINNEESS and CCOOLLUUMMNNSS. This option is enabled by
+ default.
+ ccmmddhhiisstt If set, bbaasshh attempts to save all lines of a multiple-
+ line command in the same history entry. This allows
+ easy re-editing of multi-line commands. This option is
+ enabled by default, but only has an effect if command
+ history is enabled, as described above under HHIISSTTOORRYY.
+ ccoommppaatt3311
+ If set, bbaasshh changes its behavior to that of version 3.1
+ with respect to quoted arguments to the [[[[ conditional
+ command's ==~~ operator and locale-specific string compar-
+ ison when using the [[[[ conditional command's << and >>
+ operators. Bash versions prior to bash-4.1 use ASCII
+ collation and _s_t_r_c_m_p(3); bash-4.1 and later use the cur-
+ rent locale's collation sequence and _s_t_r_c_o_l_l(3).
+ ccoommppaatt3322
+ If set, bbaasshh changes its behavior to that of version 3.2
+ with respect to locale-specific string comparison when
+ using the [[[[ conditional command's << and >> operators
+ (see previous item) and the effect of interrupting a
+ command list. Bash versions 3.2 and earlier continue
+ with the next command in the list after one terminates
+ due to an interrupt.
+ ccoommppaatt4400
+ If set, bbaasshh changes its behavior to that of version 4.0
+ with respect to locale-specific string comparison when
+ using the [[[[ conditional command's << and >> operators
+ (see description of ccoommppaatt3311) and the effect of inter-
+ rupting a command list. Bash versions 4.0 and later
+ interrupt the list as if the shell received the inter-
+ rupt; previous versions continue with the next command
+ in the list.
+ ccoommppaatt4411
+ If set, bbaasshh, when in _p_o_s_i_x _m_o_d_e, treats a single quote
+ in a double-quoted parameter expansion as a special
+ character. The single quotes must match (an even num-
+ ber) and the characters between the single quotes are
+ considered quoted. This is the behavior of posix mode
+ through version 4.1. The default bash behavior remains
+ as in previous versions.
+ ccoommppaatt4422
+ If set, bbaasshh does not process the replacement string in
+ the pattern substitution word expansion using quote
+ removal.
+ ccoommppaatt4433
+ If set, bbaasshh does not print a warning message if an
+ attempt is made to use a quoted compound array assign-
+ ment as an argument to ddeeccllaarree, makes word expansion
+ errors non-fatal errors that cause the current command
+ to fail (the default behavior is to make them fatal
+ errors that cause the shell to exit), and does not reset
+ the loop state when a shell function is executed (this
+ allows bbrreeaakk or ccoonnttiinnuuee in a shell function to affect
+ loops in the caller's context).
+ ccoommppaatt4444
+ If set, bbaasshh saves the positional parameters to
+ BASH_ARGV and BASH_ARGC before they are used, regardless
+ of whether or not extended debugging mode is enabled.
+ ccoommpplleettee__ffuullllqquuoottee
+ If set, bbaasshh quotes all shell metacharacters in file-
+ names and directory names when performing completion.
+ If not set, bbaasshh removes metacharacters such as the dol-
+ lar sign from the set of characters that will be quoted
+ in completed filenames when these metacharacters appear
+ in shell variable references in words to be completed.
+ This means that dollar signs in variable names that
+ expand to directories will not be quoted; however, any
+ dollar signs appearing in filenames will not be quoted,
+ either. This is active only when bash is using back-
+ slashes to quote completed filenames. This variable is
+ set by default, which is the default bash behavior in
+ versions through 4.2.
+ ddiirreexxppaanndd
+ If set, bbaasshh replaces directory names with the results
+ of word expansion when performing filename completion.
+ This changes the contents of the readline editing buf-
+ fer. If not set, bbaasshh attempts to preserve what the
+ user typed.
+ ddiirrssppeellll
+ If set, bbaasshh attempts spelling correction on directory
+ names during word completion if the directory name ini-
+ tially supplied does not exist.
+ ddoottgglloobb If set, bbaasshh includes filenames beginning with a `.' in
+ the results of pathname expansion. The filenames ````..''''
+ and ````....'''' must always be matched explicitly, even if
+ ddoottgglloobb is set.
+ eexxeeccffaaiill
+ If set, a non-interactive shell will not exit if it can-
+ not execute the file specified as an argument to the
+ eexxeecc builtin command. An interactive shell does not
+ exit if eexxeecc fails.
+ eexxppaanndd__aalliiaasseess
+ If set, aliases are expanded as described above under
+ AALLIIAASSEESS. This option is enabled by default for interac-
+ tive shells.
+ eexxttddeebbuugg
+ If set at shell invocation, arrange to execute the
+ debugger profile before the shell starts, identical to
+ the ----ddeebbuuggggeerr option. If set after invocation, behav-
+ ior intended for use by debuggers is enabled:
+ 11.. The --FF option to the ddeeccllaarree builtin displays the
+ source file name and line number corresponding to
+ each function name supplied as an argument.
+ 22.. If the command run by the DDEEBBUUGG trap returns a
+ non-zero value, the next command is skipped and
+ not executed.
+ 33.. If the command run by the DDEEBBUUGG trap returns a
+ value of 2, and the shell is executing in a sub-
+ routine (a shell function or a shell script exe-
+ cuted by the .. or ssoouurrccee builtins), the shell
+ simulates a call to rreettuurrnn.
+ 44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described
+ in their descriptions above.
+ 55.. Function tracing is enabled: command substitu-
+ tion, shell functions, and subshells invoked with
+ (( _c_o_m_m_a_n_d )) inherit the DDEEBBUUGG and RREETTUURRNN traps.
+ 66.. Error tracing is enabled: command substitution,
+ shell functions, and subshells invoked with ((
+ _c_o_m_m_a_n_d )) inherit the EERRRR trap.
+ eexxttgglloobb If set, the extended pattern matching features described
+ above under PPaatthhnnaammee EExxppaannssiioonn are enabled.
+ eexxttqquuoottee
+ If set, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quoting is performed
+ within $${{_p_a_r_a_m_e_t_e_r}} expansions enclosed in double
+ quotes. This option is enabled by default.
+ ffaaiillgglloobb
+ If set, patterns which fail to match filenames during
+ pathname expansion result in an expansion error.
+ ffoorrccee__ffiiggnnoorree
+ If set, the suffixes specified by the FFIIGGNNOORREE shell
+ variable cause words to be ignored when performing word
+ completion even if the ignored words are the only possi-
+ ble completions. See SSHHEELLLL VVAARRIIAABBLLEESS above for a
+ description of FFIIGGNNOORREE. This option is enabled by
+ default.
+ gglloobbaasscciiiirraannggeess
+ If set, range expressions used in pattern matching
+ bracket expressions (see PPaatttteerrnn MMaattcchhiinngg above) behave
+ as if in the traditional C locale when performing com-
+ parisons. That is, the current locale's collating
+ sequence is not taken into account, so bb will not col-
+ late between AA and BB, and upper-case and lower-case
+ ASCII characters will collate together.
+ gglloobbssttaarr
+ If set, the pattern **** used in a pathname expansion con-
+ text will match all files and zero or more directories
+ and subdirectories. If the pattern is followed by a //,
+ only directories and subdirectories match.
+ ggnnuu__eerrrrffmmtt
+ If set, shell error messages are written in the standard
+ GNU error message format.
+ hhiissttaappppeenndd
+ If set, the history list is appended to the file named
+ by the value of the HHIISSTTFFIILLEE variable when the shell
+ exits, rather than overwriting the file.
+ hhiissttrreeeeddiitt
+ If set, and rreeaaddlliinnee is being used, a user is given the
+ opportunity to re-edit a failed history substitution.
+ hhiissttvveerriiffyy
+ If set, and rreeaaddlliinnee is being used, the results of his-
+ tory substitution are not immediately passed to the
+ shell parser. Instead, the resulting line is loaded
+ into the rreeaaddlliinnee editing buffer, allowing further modi-
+ fication.
+ hhoossttccoommpplleettee
+ If set, and rreeaaddlliinnee is being used, bbaasshh will attempt to
+ perform hostname completion when a word containing a @@
+ is being completed (see CCoommpplleettiinngg under RREEAADDLLIINNEE
+ above). This is enabled by default.
+ hhuuppoonneexxiitt
+ If set, bbaasshh will send SSIIGGHHUUPP to all jobs when an inter-
+ active login shell exits.
+ iinnhheerriitt__eerrrreexxiitt
+ If set, command substitution inherits the value of the
+ eerrrreexxiitt option, instead of unsetting it in the subshell
+ environment. This option is enabled when _p_o_s_i_x _m_o_d_e is
+ enabled.
+ iinntteerraaccttiivvee__ccoommmmeennttss
+ If set, allow a word beginning with ## to cause that word
+ and all remaining characters on that line to be ignored
+ in an interactive shell (see CCOOMMMMEENNTTSS above). This
+ option is enabled by default.
+ llaassttppiippee
+ If set, and job control is not active, the shell runs
+ the last command of a pipeline not executed in the back-
+ ground in the current shell environment.
+ lliitthhiisstt If set, and the ccmmddhhiisstt option is enabled, multi-line
+ commands are saved to the history with embedded newlines
+ rather than using semicolon separators where possible.
+ llooccaallvvaarr__iinnhheerriitt
+ If set, local variables inherit the value and attributes
+ of a variable of the same name that exists at a previous
+ scope before any new value is assigned. The nameref
+ attribute is not inherited.
+ llooccaallvvaarr__uunnsseett
+ If set, calling uunnsseett on local variables in previous
+ function scopes marks them so subsequent lookups find
+ them unset until that function returns. This is identi-
+ cal to the behavior of unsetting local variables at the
+ current function scope.
+ llooggiinn__sshheellll
+ The shell sets this option if it is started as a login
+ shell (see IINNVVOOCCAATTIIOONN above). The value may not be
+ changed.
+ mmaaiillwwaarrnn
+ If set, and a file that bbaasshh is checking for mail has
+ been accessed since the last time it was checked, the
+ message ``The mail in _m_a_i_l_f_i_l_e has been read'' is dis-
+ played.
+ nnoo__eemmppttyy__ccmmdd__ccoommpplleettiioonn
+ If set, and rreeaaddlliinnee is being used, bbaasshh will not
+ attempt to search the PPAATTHH for possible completions when
+ completion is attempted on an empty line.
+ nnooccaasseegglloobb
+ If set, bbaasshh matches filenames in a case-insensitive
+ fashion when performing pathname expansion (see PPaatthhnnaammee
+ EExxppaannssiioonn above).
+ nnooccaasseemmaattcchh
+ If set, bbaasshh matches patterns in a case-insensitive
+ fashion when performing matching while executing ccaassee or
+ [[[[ conditional commands, when performing pattern substi-
+ tution word expansions, or when filtering possible com-
+ pletions as part of programmable completion.
+ nnuullllgglloobb
+ If set, bbaasshh allows patterns which match no files (see
+ PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string,
+ rather than themselves.
+ pprrooggccoommpp
+ If set, the programmable completion facilities (see PPrroo--
+ ggrraammmmaabbllee CCoommpplleettiioonn above) are enabled. This option is
+ enabled by default.
+ pprrooggccoommpp__aalliiaass
+ If set, and programmable completion is enabled, bbaasshh
+ treats a command name that doesn't have any completions
+ as a possible alias and attempts alias expansion. If it
+ has an alias, bbaasshh attempts programmable completion
+ using the command word resulting from the expanded
+ alias.
+ pprroommppttvvaarrss
+ If set, prompt strings undergo parameter expansion, com-
+ mand substitution, arithmetic expansion, and quote
+ removal after being expanded as described in PPRROOMMPPTTIINNGG
+ above. This option is enabled by default.
+ rreessttrriicctteedd__sshheellll
+ The shell sets this option if it is started in
+ restricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value
+ may not be changed. This is not reset when the startup
+ files are executed, allowing the startup files to dis-
+ cover whether or not a shell is restricted.
+ sshhiifftt__vveerrbboossee
+ If set, the sshhiifftt builtin prints an error message when
+ the shift count exceeds the number of positional parame-
+ ters.
+ ssoouurrcceeppaatthh
+ If set, the ssoouurrccee (..) builtin uses the value of PPAATTHH to
+ find the directory containing the file supplied as an
+ argument. This option is enabled by default.
+ xxppgg__eecchhoo
+ If set, the eecchhoo builtin expands backslash-escape
+ sequences by default.
+
+ ssuussppeenndd [--ff]
+ Suspend the execution of this shell until it receives a SSIIGGCCOONNTT
+ signal. A login shell cannot be suspended; the --ff option can be
+ used to override this and force the suspension. The return sta-
+ tus is 0 unless the shell is a login shell and --ff is not sup-
+ plied, or if job control is not enabled.
+
+ tteesstt _e_x_p_r
+ [[ _e_x_p_r ]]
+ Return a status of 0 (true) or 1 (false) depending on the evalu-
+ ation of the conditional expression _e_x_p_r. Each operator and op-
+ erand must be a separate argument. Expressions are composed of
+ the primaries described above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS.
+ tteesstt does not accept any options, nor does it accept and ignore
+ an argument of ---- as signifying the end of options.
+
+ Expressions may be combined using the following operators,
+ listed in decreasing order of precedence. The evaluation
+ depends on the number of arguments; see below. Operator prece-
+ dence is used when there are five or more arguments.
+ !! _e_x_p_r True if _e_x_p_r is false.
+ (( _e_x_p_r ))
+ Returns the value of _e_x_p_r. This may be used to override
+ the normal precedence of operators.
+ _e_x_p_r_1 -aa _e_x_p_r_2
+ True if both _e_x_p_r_1 and _e_x_p_r_2 are true.
+ _e_x_p_r_1 -oo _e_x_p_r_2
+ True if either _e_x_p_r_1 or _e_x_p_r_2 is true.
+
+ tteesstt and [[ evaluate conditional expressions using a set of rules
+ based on the number of arguments.
+
+ 0 arguments
+ The expression is false.
+ 1 argument
+ The expression is true if and only if the argument is not
+ null.
+ 2 arguments
+ If the first argument is !!, the expression is true if and
+ only if the second argument is null. If the first argu-
+ ment is one of the unary conditional operators listed
+ above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the expression is
+ true if the unary test is true. If the first argument is
+ not a valid unary conditional operator, the expression is
+ false.
+ 3 arguments
+ The following conditions are applied in the order listed.
+ If the second argument is one of the binary conditional
+ operators listed above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the
+ result of the expression is the result of the binary test
+ using the first and third arguments as operands. The --aa
+ and --oo operators are considered binary operators when
+ there are three arguments. If the first argument is !!,
+ the value is the negation of the two-argument test using
+ the second and third arguments. If the first argument is
+ exactly (( and the third argument is exactly )), the result
+ is the one-argument test of the second argument. Other-
+ wise, the expression is false.
+ 4 arguments
+ If the first argument is !!, the result is the negation of
+ the three-argument expression composed of the remaining
+ arguments. Otherwise, the expression is parsed and eval-
+ uated according to precedence using the rules listed
+ above.
+ 5 or more arguments
+ The expression is parsed and evaluated according to
+ precedence using the rules listed above.
+
+ When used with tteesstt or [[, the << and >> operators sort lexico-
+ graphically using ASCII ordering.
+
+ ttiimmeess Print the accumulated user and system times for the shell and
+ for processes run from the shell. The return status is 0.
+
+ ttrraapp [--llpp] [[_a_r_g] _s_i_g_s_p_e_c ...]
+ The command _a_r_g is to be read and executed when the shell
+ receives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a
+ single _s_i_g_s_p_e_c) or --, each specified signal is reset to its
+ original disposition (the value it had upon entrance to the
+ shell). If _a_r_g is the null string the signal specified by each
+ _s_i_g_s_p_e_c is ignored by the shell and by the commands it invokes.
+ If _a_r_g is not present and --pp has been supplied, then the trap
+ commands associated with each _s_i_g_s_p_e_c are displayed. If no
+ arguments are supplied or if only --pp is given, ttrraapp prints the
+ list of commands associated with each signal. The --ll option
+ causes the shell to print a list of signal names and their cor-
+ responding numbers. Each _s_i_g_s_p_e_c is either a signal name
+ defined in <_s_i_g_n_a_l_._h>, or a signal number. Signal names are
+ case insensitive and the SSIIGG prefix is optional.
+
+ If a _s_i_g_s_p_e_c is EEXXIITT (0) the command _a_r_g is executed on exit
+ from the shell. If a _s_i_g_s_p_e_c is DDEEBBUUGG, the command _a_r_g is exe-
+ cuted before every _s_i_m_p_l_e _c_o_m_m_a_n_d, _f_o_r command, _c_a_s_e command,
+ _s_e_l_e_c_t command, every arithmetic _f_o_r command, and before the
+ first command executes in a shell function (see SSHHEELLLL GGRRAAMMMMAARR
+ above). Refer to the description of the eexxttddeebbuugg option to the
+ sshhoopptt builtin for details of its effect on the DDEEBBUUGG trap. If a
+ _s_i_g_s_p_e_c is RREETTUURRNN, the command _a_r_g is executed each time a shell
+ function or a script executed with the .. or ssoouurrccee builtins fin-
+ ishes executing.
+
+ If a _s_i_g_s_p_e_c is EERRRR, the command _a_r_g is executed whenever a
+ pipeline (which may consist of a single simple command), a list,
+ or a compound command returns a non-zero exit status, subject to
+ the following conditions. The EERRRR trap is not executed if the
+ failed command is part of the command list immediately following
+ a wwhhiillee or uunnttiill keyword, part of the test in an _i_f statement,
+ part of a command executed in a &&&& or |||| list except the command
+ following the final &&&& or ||||, any command in a pipeline but the
+ last, or if the command's return value is being inverted using
+ !!. These are the same conditions obeyed by the eerrrreexxiitt (--ee)
+ option.
+
+ Signals ignored upon entry to the shell cannot be trapped or
+ reset. Trapped signals that are not being ignored are reset to
+ their original values in a subshell or subshell environment when
+ one is created. The return status is false if any _s_i_g_s_p_e_c is
+ invalid; otherwise ttrraapp returns true.
+
+ ttyyppee [--aaffttppPP] _n_a_m_e [_n_a_m_e ...]
+ With no options, indicate how each _n_a_m_e would be interpreted if
+ used as a command name. If the --tt option is used, ttyyppee prints a
+ string which is one of _a_l_i_a_s, _k_e_y_w_o_r_d, _f_u_n_c_t_i_o_n, _b_u_i_l_t_i_n, or
+ _f_i_l_e if _n_a_m_e is an alias, shell reserved word, function,
+ builtin, or disk file, respectively. If the _n_a_m_e is not found,
+ then nothing is printed, and an exit status of false is
+ returned. If the --pp option is used, ttyyppee either returns the
+ name of the disk file that would be executed if _n_a_m_e were speci-
+ fied as a command name, or nothing if ``type -t name'' would not
+ return _f_i_l_e. The --PP option forces a PPAATTHH search for each _n_a_m_e,
+ even if ``type -t name'' would not return _f_i_l_e. If a command is
+ hashed, --pp and --PP print the hashed value, which is not necessar-
+ ily the file that appears first in PPAATTHH. If the --aa option is
+ used, ttyyppee prints all of the places that contain an executable
+ named _n_a_m_e. This includes aliases and functions, if and only if
+ the --pp option is not also used. The table of hashed commands is
+ not consulted when using --aa. The --ff option suppresses shell
+ function lookup, as with the ccoommmmaanndd builtin. ttyyppee returns true
+ if all of the arguments are found, false if any are not found.
+
+ uulliimmiitt [--HHSSaabbccddeeffiikkllmmnnppqqrrssttuuvvxxPPTT [_l_i_m_i_t]]
+ Provides control over the resources available to the shell and
+ to processes started by it, on systems that allow such control.
+ The --HH and --SS options specify that the hard or soft limit is set
+ for the given resource. A hard limit cannot be increased by a
+ non-root user once it is set; a soft limit may be increased up
+ to the value of the hard limit. If neither --HH nor --SS is speci-
+ fied, both the soft and hard limits are set. The value of _l_i_m_i_t
+ can be a number in the unit specified for the resource or one of
+ the special values hhaarrdd, ssoofftt, or uunnlliimmiitteedd, which stand for the
+ current hard limit, the current soft limit, and no limit,
+ respectively. If _l_i_m_i_t is omitted, the current value of the
+ soft limit of the resource is printed, unless the --HH option is
+ given. When more than one resource is specified, the limit name
+ and unit are printed before the value. Other options are inter-
+ preted as follows:
+ --aa All current limits are reported
+ --bb The maximum socket buffer size
+ --cc The maximum size of core files created
+ --dd The maximum size of a process's data segment
+ --ee The maximum scheduling priority ("nice")
+ --ff The maximum size of files written by the shell and its
+ children
+ --ii The maximum number of pending signals
+ --kk The maximum number of kqueues that may be allocated
+ --ll The maximum size that may be locked into memory
+ --mm The maximum resident set size (many systems do not honor
+ this limit)
+ --nn The maximum number of open file descriptors (most systems
+ do not allow this value to be set)
+ --pp The pipe size in 512-byte blocks (this may not be set)
+ --qq The maximum number of bytes in POSIX message queues
+ --rr The maximum real-time scheduling priority
+ --ss The maximum stack size
+ --tt The maximum amount of cpu time in seconds
+ --uu The maximum number of processes available to a single
+ user
+ --vv The maximum amount of virtual memory available to the
+ shell and, on some systems, to its children
+ --xx The maximum number of file locks
+ --PP The maximum number of pseudoterminals
+ --TT The maximum number of threads
+
+ If _l_i_m_i_t is given, and the --aa option is not used, _l_i_m_i_t is the
+ new value of the specified resource. If no option is given,
+ then --ff is assumed. Values are in 1024-byte increments, except
+ for --tt, which is in seconds; --pp, which is in units of 512-byte
+ blocks; --PP, --TT, --bb, --kk, --nn, and --uu, which are unscaled values;
+ and, when in posix mode, --cc and --ff, which are in 512-byte incre-
+ ments. The return status is 0 unless an invalid option or argu-
+ ment is supplied, or an error occurs while setting a new limit.
+
+ uummaasskk [--pp] [--SS] [_m_o_d_e]
+ The user file-creation mask is set to _m_o_d_e. If _m_o_d_e begins with
+ a digit, it is interpreted as an octal number; otherwise it is
+ interpreted as a symbolic mode mask similar to that accepted by
+ _c_h_m_o_d(1). If _m_o_d_e is omitted, the current value of the mask is
+ printed. The --SS option causes the mask to be printed in sym-
+ bolic form; the default output is an octal number. If the --pp
+ option is supplied, and _m_o_d_e is omitted, the output is in a form
+ that may be reused as input. The return status is 0 if the mode
+ was successfully changed or if no _m_o_d_e argument was supplied,
+ and false otherwise.
+
+ uunnaalliiaass [-aa] [_n_a_m_e ...]
+ Remove each _n_a_m_e from the list of defined aliases. If --aa is
+ supplied, all alias definitions are removed. The return value
+ is true unless a supplied _n_a_m_e is not a defined alias.
+
+ uunnsseett [-ffvv] [-nn] [_n_a_m_e ...]
+ For each _n_a_m_e, remove the corresponding variable or function.
+ If the --vv option is given, each _n_a_m_e refers to a shell variable,
+ and that variable is removed. Read-only variables may not be
+ unset. If --ff is specified, each _n_a_m_e refers to a shell func-
+ tion, and the function definition is removed. If the --nn option
+ is supplied, and _n_a_m_e is a variable with the _n_a_m_e_r_e_f attribute,
+ _n_a_m_e will be unset rather than the variable it references. --nn
+ has no effect if the --ff option is supplied. If no options are
+ supplied, each _n_a_m_e refers to a variable; if there is no vari-
+ able by that name, any function with that name is unset. Each
+ unset variable or function is removed from the environment
+ passed to subsequent commands. If any of CCOOMMPP__WWOORRDDBBRREEAAKKSS, RRAANN--
+ DDOOMM, SSEECCOONNDDSS, LLIINNEENNOO, HHIISSTTCCMMDD, FFUUNNCCNNAAMMEE, GGRROOUUPPSS, or DDIIRRSSTTAACCKK are
+ unset, they lose their special properties, even if they are sub-
+ sequently reset. The exit status is true unless a _n_a_m_e is read-
+ only.
+
+ wwaaiitt [--ffnn] [_i_d _._._.]
+ Wait for each specified child process and return its termination
+ status. Each _i_d may be a process ID or a job specification; if
+ a job spec is given, all processes in that job's pipeline are
+ waited for. If _i_d is not given, all currently active child pro-
+ cesses are waited for, and the return status is zero. If the --nn
+ option is supplied, wwaaiitt waits for any job to terminate and
+ returns its exit status. If the --ff option is supplied, and job
+ control is enabled, wwaaiitt forces _i_d to terminate before returning
+ its status, instead of returning when it changes status. If _i_d
+ specifies a non-existent process or job, the return status is
+ 127. Otherwise, the return status is the exit status of the
+ last process or job waited for.
+
+RREESSTTRRIICCTTEEDD SSHHEELLLL
+ If bbaasshh is started with the name rrbbaasshh, or the --rr 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. It
+ behaves identically to bbaasshh with the exception that the following are
+ disallowed or not performed:
+
+ +o changing directories with ccdd
+
+ +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, EENNVV, or BBAASSHH__EENNVV
+
+ +o specifying command names containing //
+
+ +o specifying a filename containing a // as an argument to the ..
+ builtin command
+
+ +o specifying a filename containing a slash as an argument to the
+ --pp option to the hhaasshh builtin command
+
+ +o importing function definitions from the shell environment at
+ startup
+
+ +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at
+ startup
+
+ +o redirecting output using the >, >|, <>, >&, &>, and >> redirect-
+ ion operators
+
+ +o using the eexxeecc builtin command to replace the shell with another
+ command
+
+ +o adding or deleting builtin commands with the --ff and --dd options
+ to the eennaabbllee builtin command
+
+ +o using the eennaabbllee builtin command to enable disabled shell
+ builtins
+
+ +o specifying the --pp option to the ccoommmmaanndd builtin command
+
+ +o turning off restricted mode with sseett ++rr or sseett ++oo rreessttrriicctteedd.
+
+ These restrictions are enforced after any startup files are read.
+
+ When a command that is found to be a shell script is executed (see CCOOMM--
+ MMAANNDD EEXXEECCUUTTIIOONN above), rrbbaasshh turns off any restrictions in the shell
+ spawned to execute the script.
+
+SSEEEE AALLSSOO
+ _B_a_s_h _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l, Brian Fox and Chet Ramey
+ _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
+ _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
+ _P_o_r_t_a_b_l_e _O_p_e_r_a_t_i_n_g _S_y_s_t_e_m _I_n_t_e_r_f_a_c_e _(_P_O_S_I_X_) _P_a_r_t _2_: _S_h_e_l_l _a_n_d _U_t_i_l_i_-
+ _t_i_e_s, IEEE --
+ http://pubs.opengroup.org/onlinepubs/9699919799/
+ http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
+ _s_h(1), _k_s_h(1), _c_s_h(1)
+ _e_m_a_c_s(1), _v_i(1)
+ _r_e_a_d_l_i_n_e(3)
+
+FFIILLEESS
+ _/_b_i_n_/_b_a_s_h
+ The bbaasshh executable
+ _/_e_t_c_/_p_r_o_f_i_l_e
+ The systemwide initialization file, executed for login shells
+ _~_/_._b_a_s_h___p_r_o_f_i_l_e
+ The personal initialization file, executed for login shells
+ _~_/_._b_a_s_h_r_c
+ The individual per-interactive-shell startup file
+ _~_/_._b_a_s_h___l_o_g_o_u_t
+ The individual login shell cleanup file, executed when a login
+ shell exits
+ _~_/_._i_n_p_u_t_r_c
+ Individual _r_e_a_d_l_i_n_e initialization file
+
+AAUUTTHHOORRSS
+ Brian Fox, Free Software Foundation
+ bfox@gnu.org
+
+ Chet Ramey, Case Western Reserve University
+ chet.ramey@case.edu
+
+BBUUGG RREEPPOORRTTSS
+ If you find a bug in bbaasshh,, you should report it. But first, you should
+ make sure that it really is a bug, and that it appears in the latest
+ version of bbaasshh. The latest version is always available from
+ _f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_g_n_u_/_b_a_s_h_/.
+
+ Once you have determined that a bug actually exists, use the _b_a_s_h_b_u_g
+ 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 _b_u_g_-_b_a_s_h_@_g_n_u_._o_r_g or posted to the Usenet newsgroup
+ ggnnuu..bbaasshh..bbuugg.
+
+ ALL bug reports should include:
+
+ The version number of bbaasshh
+ The hardware and operating system
+ The compiler used to compile
+ A description of the bug behaviour
+ A short script or `recipe' which exercises the bug
+
+ _b_a_s_h_b_u_g inserts the first three items automatically into the template
+ it provides for filing a bug report.
+
+ Comments and bug reports concerning this manual page should be directed
+ to _c_h_e_t_._r_a_m_e_y_@_c_a_s_e_._e_d_u.
+
+BBUUGGSS
+ It's too big and too slow.
+
+ There are some subtle differences between bbaasshh and traditional versions
+ of sshh, mostly because of the PPOOSSIIXX specification.
+
+ Aliases are confusing in some uses.
+
+ Shell builtin commands and functions are not stoppable/restartable.
+
+ Compound commands and command sequences of the form `a ; b ; c' are not
+ handled gracefully when process suspension is attempted. When a
+ process is stopped, the shell immediately executes the next command in
+ the sequence. It suffices to place the sequence of commands between
+ parentheses to force it into a subshell, which may be stopped as a
+ unit.
+
+ Array variables may not (yet) be exported.
+
+ There may be only one active coprocess at a time.
+
+
+
+GNU Bash 5.0 2018 December 7 BASH(1)
diff --git a/doc/bash.1 b/doc/bash.1
new file mode 100644
index 0000000..e6cd08d
--- /dev/null
+++ b/doc/bash.1
@@ -0,0 +1,10979 @@
+.\"
+.\" MAN PAGE COMMENTS to
+.\"
+.\" Chet Ramey
+.\" Case Western Reserve University
+.\" chet.ramey@case.edu
+.\"
+.\" Last Change: Fri Dec 7 09:48:47 EST 2018
+.\"
+.\" bash_builtins, strip all but Built-Ins section
+.if \n(zZ=1 .ig zZ
+.if \n(zY=1 .ig zY
+.TH BASH 1 "2018 December 7" "GNU Bash 5.0"
+.\"
+.\" There's some problem with having a `@'
+.\" in a tagged paragraph with the BSD man macros.
+.\" It has to do with `@' appearing in the }1 macro.
+.\" This is a problem on 4.3 BSD and Ultrix, but Sun
+.\" appears to have fixed it.
+.\" If you're seeing the characters
+.\" `@u-3p' appearing before the lines reading
+.\" `possible-hostname-completions
+.\" and `complete-hostname' down in READLINE,
+.\" then uncomment this redefinition.
+.\"
+.\" .de }1
+.\" .ds ]X \&\\*(]B\\
+.\" .nr )E 0
+.\" .if !"\\$1"" .nr )I \\$1n
+.\" .}f
+.\" .ll \\n(LLu
+.\" .in \\n()Ru+\\n(INu+\\n()Iu
+.\" .ti \\n(INu
+.\" .ie !\\n()Iu+\\n()Ru-\w\\*(]Xu-3p \{\\*(]X
+.\" .br\}
+.\" .el \\*(]X\h|\\n()Iu+\\n()Ru\c
+.\" .}f
+.\" ..
+.\"
+.\" File Name macro. This used to be `.PN', for Path Name,
+.\" but Sun doesn't seem to like that very much.
+.\"
+.de FN
+\fI\|\\$1\|\fP
+..
+.SH NAME
+bash \- GNU Bourne-Again SHell
+.SH SYNOPSIS
+.B bash
+[options]
+[command_string | file]
+.SH COPYRIGHT
+.if n Bash is Copyright (C) 1989-2018 by the Free Software Foundation, Inc.
+.if t Bash is Copyright \(co 1989-2018 by the Free Software Foundation, Inc.
+.SH DESCRIPTION
+.B Bash
+is an \fBsh\fR-compatible command language interpreter that
+executes commands read from the standard input or from a file.
+.B Bash
+also incorporates useful features from the \fIKorn\fP and \fIC\fP
+shells (\fBksh\fP and \fBcsh\fP).
+.PP
+.B Bash
+is intended to be a conformant implementation of the
+Shell and Utilities portion of the IEEE POSIX specification
+(IEEE Standard 1003.1).
+.B Bash
+can be configured to be POSIX-conformant by default.
+.SH OPTIONS
+All of the single-character shell options documented in the
+description of the \fBset\fR builtin command, including \fB\-o\fP,
+can be used as options when the shell is invoked.
+In addition, \fBbash\fR
+interprets the following options when it is invoked:
+.PP
+.PD 0
+.TP 10
+.B \-c
+If the
+.B \-c
+option is present, then commands are read from the first non-option argument
+.IR command_string .
+If there are arguments after the
+.IR command_string ,
+the first argument is assigned to
+.B $0
+and any remaining arguments are assigned to the positional parameters.
+The assignment to
+.B $0
+sets the name of the shell, which is used in warning and error messages.
+.TP
+.B \-i
+If the
+.B \-i
+option is present, the shell is
+.IR interactive .
+.TP
+.B \-l
+Make
+.B bash
+act as if it had been invoked as a login shell (see
+.SM
+.B INVOCATION
+below).
+.TP
+.B \-r
+If the
+.B \-r
+option is present, the shell becomes
+.I restricted
+(see
+.SM
+.B "RESTRICTED SHELL"
+below).
+.TP
+.B \-s
+If the
+.B \-s
+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 or when reading input
+through a pipe.
+.TP
+.B \-D
+A list of all double-quoted strings preceded by \fB$\fP
+is printed on the standard output.
+These are the strings that
+are subject to language translation when the current locale
+is not \fBC\fP or \fBPOSIX\fP.
+This implies the \fB\-n\fP option; no commands will be executed.
+.TP
+.B [\-+]O [\fIshopt_option\fP]
+\fIshopt_option\fP is one of the shell options accepted by the
+\fBshopt\fP builtin (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+If \fIshopt_option\fP is present, \fB\-O\fP sets the value of that option;
+\fB+O\fP unsets it.
+If \fIshopt_option\fP is not supplied, the names and values of the shell
+options accepted by \fBshopt\fP are printed on the standard output.
+If the invocation option is \fB+O\fP, the output is displayed in a format
+that may be reused as input.
+.TP
+.B \-\-
+A
+.B \-\-
+signals the end of options and disables further option processing.
+Any arguments after the
+.B \-\-
+are treated as filenames and arguments. An argument of
+.B \-
+is equivalent to \fB\-\-\fP.
+.PD
+.PP
+.B Bash
+also interprets a number of multi-character options.
+These options must appear on the command line before the
+single-character options to be recognized.
+.PP
+.PD 0
+.TP
+.B \-\-debugger
+Arrange for the debugger profile to be executed before the shell
+starts.
+Turns on extended debugging mode (see the description of the
+.B extdebug
+option to the
+.B shopt
+builtin below).
+.TP
+.B \-\-dump\-po\-strings
+Equivalent to \fB\-D\fP, but the output is in the GNU \fIgettext\fP
+\fBpo\fP (portable object) file format.
+.TP
+.B \-\-dump\-strings
+Equivalent to \fB\-D\fP.
+.TP
+.B \-\-help
+Display a usage message on standard output and exit successfully.
+.TP
+\fB\-\-init\-file\fP \fIfile\fP
+.PD 0
+.TP
+\fB\-\-rcfile\fP \fIfile\fP
+.PD
+Execute commands from
+.I file
+instead of the standard personal initialization file
+.I ~/.bashrc
+if the shell is interactive (see
+.SM
+.B INVOCATION
+below).
+.TP
+.B \-\-login
+Equivalent to \fB\-l\fP.
+.TP
+.B \-\-noediting
+Do not use the GNU
+.B readline
+library to read command lines when the shell is interactive.
+.TP
+.B \-\-noprofile
+Do not read either the system-wide startup file
+.FN /etc/profile
+or any of the personal initialization files
+.IR ~/.bash_profile ,
+.IR ~/.bash_login ,
+or
+.IR ~/.profile .
+By default,
+.B bash
+reads these files when it is invoked as a login shell (see
+.SM
+.B INVOCATION
+below).
+.TP
+.B \-\-norc
+Do not read and execute the personal initialization file
+.I ~/.bashrc
+if the shell is interactive.
+This option is on by default if the shell is invoked as
+.BR sh .
+.TP
+.B \-\-posix
+Change the behavior of \fBbash\fP where the default operation differs
+from the POSIX standard to match the standard (\fIposix mode\fP).
+See
+.SM
+.B "SEE ALSO"
+below for a reference to a document that details how posix mode affects
+bash's behavior.
+.TP
+.B \-\-restricted
+The shell becomes restricted (see
+.SM
+.B "RESTRICTED SHELL"
+below).
+.TP
+.B \-\-verbose
+Equivalent to \fB\-v\fP.
+.TP
+.B \-\-version
+Show version information for this instance of
+.B bash
+on the standard output and exit successfully.
+.PD
+.SH ARGUMENTS
+If arguments remain after option processing, and neither the
+.B \-c
+nor the
+.B \-s
+option has been supplied, the first argument is assumed to
+be the name of a file containing shell commands.
+If
+.B bash
+is invoked in this fashion,
+.B $0
+is set to the name of the file, and the positional parameters
+are set to the remaining arguments.
+.B Bash
+reads and executes commands from this file, then exits.
+\fBBash\fP'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.
+An attempt is first made to open the file in the current directory, and,
+if no file is found, then the shell searches the directories in
+.SM
+.B PATH
+for the script.
+.SH INVOCATION
+A \fIlogin shell\fP is one whose first character of argument zero is a
+.BR \- ,
+or one started with the
+.B \-\-login
+option.
+.PP
+An \fIinteractive\fP shell is one started without non-option arguments
+(unless \fB\-s\fP is specified)
+and without the
+.B \-c
+option
+whose standard input and error are
+both connected to terminals (as determined by
+.IR isatty (3)),
+or one started with the
+.B \-i
+option.
+.SM
+.B PS1
+is set and
+.B $\-
+includes
+.B i
+if
+.B bash
+is interactive,
+allowing a shell script or a startup file to test this state.
+.PP
+The following paragraphs describe how
+.B bash
+executes its startup files.
+If any of the files exist but cannot be read,
+.B bash
+reports an error.
+Tildes are expanded in filenames as described below under
+.B "Tilde Expansion"
+in the
+.SM
+.B EXPANSION
+section.
+.PP
+When
+.B bash
+is invoked as an interactive login shell, or as a non-interactive shell
+with the \fB\-\-login\fP option, it first reads and
+executes commands from the file \fI/etc/profile\fP, if that
+file exists.
+After reading that file, it looks for \fI~/.bash_profile\fP,
+\fI~/.bash_login\fP, and \fI~/.profile\fP, in that order, and reads
+and executes commands from the first one that exists and is readable.
+The
+.B \-\-noprofile
+option may be used when the shell is started to inhibit this behavior.
+.PP
+When an interactive login shell exits,
+or a non-interactive login shell executes the \fBexit\fP builtin command,
+.B bash
+reads and executes commands from the file \fI~/.bash_logout\fP, if it
+exists.
+.PP
+When an interactive shell that is not a login shell is started,
+.B bash
+reads and executes commands from \fI~/.bashrc\fP, if that file exists.
+This may be inhibited by using the
+.B \-\-norc
+option.
+The \fB\-\-rcfile\fP \fIfile\fP option will force
+.B bash
+to read and execute commands from \fIfile\fP instead of \fI~/.bashrc\fP.
+.PP
+When
+.B bash
+is started non-interactively, to run a shell script, for example, it
+looks for the variable
+.SM
+.B BASH_ENV
+in the environment, expands its value if it appears there, and uses the
+expanded value as the name of a file to read and execute.
+.B Bash
+behaves as if the following command were executed:
+.sp .5
+.RS
+.if t \f(CWif [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi\fP
+.if n if [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
+.RE
+.sp .5
+but the value of the
+.SM
+.B PATH
+variable is not used to search for the filename.
+.PP
+If
+.B bash
+is invoked with the name
+.BR sh ,
+it tries to mimic the startup behavior of historical versions of
+.B sh
+as closely as possible,
+while conforming to the POSIX standard as well.
+When invoked as an interactive login shell, or a non-interactive
+shell with the \fB\-\-login\fP option, it first attempts to
+read and execute commands from
+.I /etc/profile
+and
+.IR ~/.profile ,
+in that order.
+The
+.B \-\-noprofile
+option may be used to inhibit this behavior.
+When invoked as an interactive shell with the name
+.BR sh ,
+.B bash
+looks for the variable
+.SM
+.BR ENV ,
+expands its value if it is defined, and uses the
+expanded value as the name of a file to read and execute.
+Since a shell invoked as
+.B sh
+does not attempt to read and execute commands from any other startup
+files, the
+.B \-\-rcfile
+option has no effect.
+A non-interactive shell invoked with the name
+.B sh
+does not attempt to read any other startup files.
+When invoked as
+.BR sh ,
+.B bash
+enters
+.I posix
+mode after the startup files are read.
+.PP
+When
+.B bash
+is started in
+.I posix
+mode, as with the
+.B \-\-posix
+command line option, it follows the POSIX standard for startup files.
+In this mode, interactive shells expand the
+.SM
+.B ENV
+variable and commands are read and executed from the file
+whose name is the expanded value.
+No other startup files are read.
+.PP
+.B Bash
+attempts to determine when it is being run with its standard input
+connected to a network connection, as when executed by the remote shell
+daemon, usually \fIrshd\fP, or the secure shell daemon \fIsshd\fP.
+If
+.B bash
+determines it is being run in this fashion, it reads and executes
+commands from \fI~/.bashrc\fP, if that file exists and is readable.
+It will not do this if invoked as \fBsh\fP.
+The
+.B \-\-norc
+option may be used to inhibit this behavior, and the
+.B \-\-rcfile
+option may be used to force another file to be read, but neither
+\fIrshd\fP nor \fIsshd\fP generally invoke the shell with those options
+or allow them to be specified.
+.PP
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the \fB\-p\fP option is not supplied, no startup
+files are read, shell functions are not inherited from the environment, the
+.SM
+.BR SHELLOPTS ,
+.SM
+.BR BASHOPTS ,
+.SM
+.BR CDPATH ,
+and
+.SM
+.B GLOBIGNORE
+variables, if they appear in the environment, are ignored,
+and the effective user id is set to the real user id.
+If the \fB\-p\fP option is supplied at invocation, the startup behavior is
+the same, but the effective user id is not reset.
+.SH DEFINITIONS
+.PP
+The following definitions are used throughout the rest of this
+document.
+.PD 0
+.TP
+.B blank
+A space or tab.
+.TP
+.B word
+A sequence of characters considered as a single unit by the shell.
+Also known as a
+.BR token .
+.TP
+.B name
+A
+.I word
+consisting only of alphanumeric characters and underscores, and
+beginning with an alphabetic character or an underscore. Also
+referred to as an
+.BR identifier .
+.TP
+.B metacharacter
+A character that, when unquoted, separates words. One of the following:
+.br
+.RS
+.PP
+.if t \fB| & ; ( ) < > space tab newline\fP
+.if n \fB| & ; ( ) < > space tab newline\fP
+.RE
+.PP
+.TP
+.B control operator
+A \fItoken\fP that performs a control function. It is one of the following
+symbols:
+.RS
+.PP
+.if t \fB|| & && ; ;; ;& ;;& ( ) | |& <newline>\fP
+.if n \fB|| & && ; ;; ;& ;;& ( ) | |& <newline>\fP
+.RE
+.PD
+.SH "RESERVED WORDS"
+\fIReserved words\fP are words that have a special meaning to the shell.
+The following words are recognized as reserved when unquoted and either
+the first word of a simple command (see
+.SM
+.B SHELL GRAMMAR
+below) or the third word of a
+.B case
+or
+.B for
+command:
+.if t .RS
+.PP
+.B
+.if n ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
+.if t ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
+.if t .RE
+.SH "SHELL GRAMMAR"
+.SS Simple Commands
+.PP
+A \fIsimple command\fP is a sequence of optional variable assignments
+followed by \fBblank\fP-separated words and redirections, and
+terminated by a \fIcontrol operator\fP. The first word
+specifies the command to be executed, and is passed as argument zero.
+The remaining words are passed as arguments to the invoked command.
+.PP
+The return value of a \fIsimple command\fP is its exit status, or
+128+\fIn\^\fP if the command is terminated by signal
+.IR n .
+.SS Pipelines
+.PP
+A \fIpipeline\fP is a sequence of one or more commands separated by
+one of the control operators
+.B |
+or \fB|&\fP.
+The format for a pipeline is:
+.RS
+.PP
+[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ]
+.RE
+.PP
+The standard output of
+.I command
+is connected via a pipe to the standard input of
+.IR command2 .
+This connection is performed before any redirections specified by the
+command (see
+.SM
+.B REDIRECTION
+below).
+If \fB|&\fP is used, \fIcommand\fP's standard error, in addition to its
+standard output, is connected to
+\fIcommand2\fP's standard input through the pipe;
+it is shorthand for \fB2>&1 |\fP.
+This implicit redirection of the standard error to the standard output is
+performed after any redirections specified by the command.
+.PP
+The return status of a pipeline is the exit status of the last
+command, unless the \fBpipefail\fP option is enabled.
+If \fBpipefail\fP 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
+.B !
+precedes a pipeline, the exit status of that pipeline 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.
+.PP
+If the
+.B time
+reserved word precedes a pipeline, the elapsed as well as user and
+system time consumed by its execution are reported when the pipeline
+terminates.
+The \fB\-p\fP option changes the output format to that specified by POSIX.
+When the shell is in \fIposix mode\fP, it does not recognize
+\fBtime\fP as a reserved word if the next token begins with a `-'.
+The
+.SM
+.B TIMEFORMAT
+variable may be set to a format string that specifies how the timing
+information should be displayed; see the description of
+.SM
+.B TIMEFORMAT
+under
+.B "Shell Variables"
+below.
+.PP
+When the shell is in \fIposix mode\fP, \fBtime\fP
+may be followed by a newline. In this case, the shell displays the
+total user and system time consumed by the shell and its children.
+The
+.SM
+.B TIMEFORMAT
+variable may be used to specify the format of
+the time information.
+.PP
+Each command in a pipeline is executed as a separate process (i.e., in a
+subshell).
+See
+.SM
+\fBCOMMAND EXECUTION ENVIRONMENT\fP
+for a description of a subshell environment.
+If the \fBlastpipe\fP option is enabled using the \fBshopt\fP builtin
+(see the description of \fBshopt\fP below),
+the last element of a pipeline may be run by the shell process.
+.SS Lists
+.PP
+A \fIlist\fP is a sequence of one or more pipelines separated by one
+of the operators
+.BR ; ,
+.BR & ,
+.BR && ,
+or
+.BR || ,
+and optionally terminated by one of
+.BR ; ,
+.BR & ,
+or
+.BR <newline> .
+.PP
+Of these list operators,
+.B &&
+and
+.B ||
+have equal precedence, followed by
+.B ;
+and
+.BR & ,
+which have equal precedence.
+.PP
+A sequence of one or more newlines may appear in a \fIlist\fP instead
+of a semicolon to delimit commands.
+.PP
+If a command is terminated by the control operator
+.BR & ,
+the shell executes the command in the \fIbackground\fP
+in a subshell.
+The shell does not wait for the command to
+finish, and the return status is 0.
+These are referred to as \fIasynchronous\fP commands.
+Commands separated by a
+.B ;
+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.
+.PP
+AND and OR lists are sequences of one or more pipelines separated by the
+\fB&&\fP and \fB||\fP control operators, respectively.
+AND and OR lists are executed with left associativity.
+An AND list has the form
+.RS
+.PP
+\fIcommand1\fP \fB&&\fP \fIcommand2\fP
+.RE
+.PP
+.I command2
+is executed if, and only if,
+.I command1
+returns an exit status of zero (success).
+.PP
+An OR list has the form
+.RS
+.PP
+\fIcommand1\fP \fB||\fP \fIcommand2\fP
+.PP
+.RE
+.PP
+.I command2
+is executed if, and only if,
+.I command1
+returns a non-zero exit status.
+The return status of
+AND and OR lists is the exit status of the last command
+executed in the list.
+.SS Compound Commands
+.PP
+A \fIcompound command\fP is one of the following.
+In most cases a \fIlist\fP in a command's description may be separated from
+the rest of the command by one or more newlines, and may be followed by a
+newline in place of a semicolon.
+.TP
+(\fIlist\fP)
+\fIlist\fP is executed in a subshell environment (see
+.SM
+\fBCOMMAND EXECUTION ENVIRONMENT\fP
+below).
+Variable assignments and builtin
+commands that affect the shell's environment do not remain in effect
+after the command completes. The return status is the exit status of
+\fIlist\fP.
+.TP
+{ \fIlist\fP; }
+\fIlist\fP is simply executed in the current shell environment.
+\fIlist\fP must be terminated with a newline or semicolon.
+This is known as a \fIgroup command\fP.
+The return status is the exit status of
+\fIlist\fP.
+Note that unlike the metacharacters \fB(\fP and \fB)\fP, \fB{\fP and
+\fB}\fP are \fIreserved words\fP and must occur where a reserved
+word is permitted to be recognized. Since they do not cause a word
+break, they must be separated from \fIlist\fP by whitespace or another
+shell metacharacter.
+.TP
+((\fIexpression\fP))
+The \fIexpression\fP is evaluated according to the rules described
+below under
+.SM
+.BR "ARITHMETIC EVALUATION" .
+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
+\fBlet "\fIexpression\fP"\fR.
+.TP
+\fB[[\fP \fIexpression\fP \fB]]\fP
+Return a status of 0 or 1 depending on the evaluation of
+the conditional expression \fIexpression\fP.
+Expressions are composed of the primaries described below under
+.SM
+.BR "CONDITIONAL EXPRESSIONS" .
+Word splitting and pathname expansion are not performed on the words
+between the \fB[[\fP and \fB]]\fP; tilde expansion,
+parameter and variable expansion,
+arithmetic expansion, command substitution, process
+substitution, and quote removal are performed.
+Conditional operators such as \fB\-f\fP must be unquoted to be recognized
+as primaries.
+.if t .sp 0.5
+.if n .sp 1
+When used with \fB[[\fP, the \fB<\fP and \fB>\fP operators sort
+lexicographically using the current locale.
+.if t .sp 0.5
+.if n .sp 1
+When the \fB==\fP and \fB!=\fP operators are used, the string to the
+right of the operator is considered a pattern and matched according
+to the rules described below under \fBPattern Matching\fP,
+as if the \fBextglob\fP shell option were enabled.
+The \fB=\fP operator is equivalent to \fB==\fP.
+If the
+.B nocasematch
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+The return value is 0 if the string matches (\fB==\fP) or does not match
+(\fB!=\fP) the pattern, and 1 otherwise.
+Any part of the pattern may be quoted to force the quoted portion
+to be matched as a string.
+.if t .sp 0.5
+.if n .sp 1
+An additional binary operator, \fB=~\fP, is available, with the same
+precedence as \fB==\fP and \fB!=\fP.
+When it is used, the string to the right of the operator is considered
+a POSIX extended regular expression and matched accordingly (as in \fIregex\fP(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
+.B nocasematch
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+Any part of the pattern may be quoted to force the quoted portion
+to be matched as a string.
+Bracket expressions in regular expressions must be treated carefully,
+since normal quoting characters lose their meanings between brackets.
+If the pattern is stored in a shell variable, quoting the variable
+expansion forces the entire pattern to be matched as a string.
+Substrings matched by parenthesized subexpressions within the regular
+expression are saved in the array variable
+.SM
+.BR BASH_REMATCH .
+The element of
+.SM
+.B BASH_REMATCH
+with index 0 is the portion of the string
+matching the entire regular expression.
+The element of
+.SM
+.B BASH_REMATCH
+with index \fIn\fP is the portion of the
+string matching the \fIn\fPth parenthesized subexpression.
+.if t .sp 0.5
+.if n .sp 1
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence:
+.if t .sp 0.5
+.if n .sp 1
+.RS
+.PD 0
+.TP
+.B ( \fIexpression\fP )
+Returns the value of \fIexpression\fP.
+This may be used to override the normal precedence of operators.
+.TP
+.B ! \fIexpression\fP
+True if
+.I expression
+is false.
+.TP
+\fIexpression1\fP \fB&&\fP \fIexpression2\fP
+True if both
+.I expression1
+and
+.I expression2
+are true.
+.TP
+\fIexpression1\fP \fB||\fP \fIexpression2\fP
+True if either
+.I expression1
+or
+.I expression2
+is true.
+.PD
+.LP
+The \fB&&\fP and \fB||\fP
+operators do not evaluate \fIexpression2\fP if the value of
+\fIexpression1\fP is sufficient to determine the return value of
+the entire conditional expression.
+.RE
+.TP
+\fBfor\fP \fIname\fP [ [ \fBin\fP [ \fIword ...\fP ] ] ; ] \fBdo\fP \fIlist\fP ; \fBdone\fP
+The list of words following \fBin\fP is expanded, generating a list
+of items.
+The variable \fIname\fP is set to each element of this list
+in turn, and \fIlist\fP is executed each time.
+If the \fBin\fP \fIword\fP is omitted, the \fBfor\fP command executes
+\fIlist\fP once for each positional parameter that is set (see
+.SM
+.B PARAMETERS
+below).
+The return status is the exit status of the last command that executes.
+If the expansion of the items following \fBin\fP results in an empty
+list, no commands are executed, and the return status is 0.
+.TP
+\fBfor\fP (( \fIexpr1\fP ; \fIexpr2\fP ; \fIexpr3\fP )) ; \fBdo\fP \fIlist\fP ; \fBdone\fP
+First, the arithmetic expression \fIexpr1\fP is evaluated according
+to the rules described below under
+.SM
+.BR "ARITHMETIC EVALUATION" .
+The arithmetic expression \fIexpr2\fP is then evaluated repeatedly
+until it evaluates to zero.
+Each time \fIexpr2\fP evaluates to a non-zero value, \fIlist\fP is
+executed and the arithmetic expression \fIexpr3\fP 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 \fIlist\fP
+that is executed, or false if any of the expressions is invalid.
+.TP
+\fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP
+The list of words following \fBin\fP is expanded, generating a list
+of items. The set of expanded words is printed on the standard
+error, each preceded by a number. If the \fBin\fP
+\fIword\fP is omitted, the positional parameters are printed (see
+.SM
+.B PARAMETERS
+below). The
+.SM
+.B PS3
+prompt is then displayed and a line read from the standard input.
+If the line consists of a number corresponding to one of
+the displayed words, then the value of
+.I name
+is set to that word. If the line is empty, the words and prompt
+are displayed again. If EOF is read, the command completes. Any
+other value read causes
+.I name
+to be set to null. The line read is saved in the variable
+.SM
+.BR REPLY .
+The
+.I list
+is executed after each selection until a
+.B break
+command is executed.
+The exit status of
+.B select
+is the exit status of the last command executed in
+.IR list ,
+or zero if no commands were executed.
+.TP
+\fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] \
+... ) \fIlist\fP ;; ] ... \fBesac\fP
+A \fBcase\fP command first expands \fIword\fP, and tries to match
+it against each \fIpattern\fP in turn, using the matching rules
+described under
+.B Pattern Matching
+below.
+The \fIword\fP is expanded using tilde
+expansion, parameter and variable expansion, arithmetic expansion,
+command substitution, process substitution and quote removal.
+Each \fIpattern\fP examined is expanded using tilde
+expansion, parameter and variable expansion, arithmetic expansion,
+command substitution, and process substitution.
+If the
+.B nocasematch
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+When a match is found, the corresponding \fIlist\fP is executed.
+If the \fB;;\fP operator is used, no subsequent matches are attempted after
+the first pattern match.
+Using \fB;&\fP in place of \fB;;\fP causes execution to continue with
+the \fIlist\fP associated with the next set of patterns.
+Using \fB;;&\fP in place of \fB;;\fP causes the shell to test the next
+pattern list in the statement, if any, and execute any associated \fIlist\fP
+on a successful match.
+The exit status is zero if no
+pattern matches. Otherwise, it is the exit status of the
+last command executed in \fIlist\fP.
+.TP
+\fBif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; \
+[ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] ... \
+[ \fBelse\fP \fIlist\fP; ] \fBfi\fP
+The
+.B if
+.I list
+is executed. If its exit status is zero, the
+\fBthen\fP \fIlist\fP is executed. Otherwise, each \fBelif\fP
+\fIlist\fP is executed in turn, and if its exit status is zero,
+the corresponding \fBthen\fP \fIlist\fP is executed and the
+command completes. Otherwise, the \fBelse\fP \fIlist\fP is
+executed, if present. The exit status is the exit status of the
+last command executed, or zero if no condition tested true.
+.TP
+\fBwhile\fP \fIlist-1\fP; \fBdo\fP \fIlist-2\fP; \fBdone\fP
+.PD 0
+.TP
+\fBuntil\fP \fIlist-1\fP; \fBdo\fP \fIlist-2\fP; \fBdone\fP
+.PD
+The \fBwhile\fP command continuously executes the list
+\fIlist-2\fP as long as the last command in the list \fIlist-1\fP returns
+an exit status of zero. The \fBuntil\fP command is identical
+to the \fBwhile\fP command, except that the test is negated:
+.I list-2
+is executed as long as the last command in
+.I list-1
+returns a non-zero exit status.
+The exit status of the \fBwhile\fP and \fBuntil\fP commands
+is the exit status
+of the last command executed in \fIlist-2\fP, or zero if
+none was executed.
+.SS Coprocesses
+.PP
+A \fIcoprocess\fP is a shell command preceded by the \fBcoproc\fP reserved
+word.
+A coprocess is executed asynchronously in a subshell, as if the command
+had been terminated with the \fB&\fP control operator, with a two-way pipe
+established between the executing shell and the coprocess.
+.PP
+The format for a coprocess is:
+.RS
+.PP
+\fBcoproc\fP [\fINAME\fP] \fIcommand\fP [\fIredirections\fP]
+.RE
+.PP
+This creates a coprocess named \fINAME\fP.
+If \fINAME\fP is not supplied, the default name is \fBCOPROC\fP.
+\fINAME\fP must not be supplied if \fIcommand\fP is a \fIsimple
+command\fP (see above); otherwise, it is interpreted as the first word
+of the simple command.
+When the coprocess is executed, the shell creates an array variable (see
+.B Arrays
+below) named \fINAME\fP in the context of the executing shell.
+The standard output of
+.I command
+is connected via a pipe to a file descriptor in the executing shell,
+and that file descriptor is assigned to \fINAME\fP[0].
+The standard input of
+.I command
+is connected via a pipe to a file descriptor in the executing shell,
+and that file descriptor is assigned to \fINAME\fP[1].
+This pipe is established before any redirections specified by the
+command (see
+.SM
+.B REDIRECTION
+below).
+The file descriptors can be utilized as arguments to shell commands
+and redirections using standard word expansions.
+Other than those created to execute command and process substitutions,
+the file descriptors are not available in subshells.
+The process ID of the shell spawned to execute the coprocess is
+available as the value of the variable \fINAME\fP_PID.
+The \fBwait\fP
+builtin command may be used to wait for the coprocess to terminate.
+.PP
+Since the coprocess is created as an asynchronous command,
+the \fBcoproc\fP command always returns success.
+The return status of a coprocess is the exit status of \fIcommand\fP.
+.SS Shell Function Definitions
+.PP
+A shell function is an object that is called like a simple command and
+executes a compound command with a new set of positional parameters.
+Shell functions are declared as follows:
+.TP
+\fIname\fP () \fIcompound\-command\fP [\fIredirection\fP]
+.PD 0
+.TP
+\fBfunction\fP \fIname\fP [()] \fIcompound\-command\fP [\fIredirection\fP]
+.PD
+This defines a function named \fIname\fP.
+The reserved word \fBfunction\fP is optional.
+If the \fBfunction\fP reserved word is supplied, the parentheses are optional.
+The \fIbody\fP of the function is the compound command
+.I compound\-command
+(see \fBCompound Commands\fP above).
+That command is usually a \fIlist\fP of commands between { and }, but
+may be any command listed under \fBCompound Commands\fP above,
+with one exception: If the \fBfunction\fP reserved word is used, but the
+parentheses are not supplied, the braces are required.
+\fIcompound\-command\fP is executed whenever \fIname\fP is specified as the
+name of a simple command.
+When in \fIposix mode\fP, \fIname\fP may not be the name of one of the
+POSIX \fIspecial builtins\fP.
+Any redirections (see
+.SM
+.B REDIRECTION
+below) specified when a function is defined are performed
+when the function is executed.
+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. (See
+.SM
+.B FUNCTIONS
+below.)
+.SH COMMENTS
+In a non-interactive shell, or an interactive shell in which the
+.B interactive_comments
+option to the
+.B shopt
+builtin is enabled (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below), a word beginning with
+.B #
+causes that word and all remaining characters on that line to
+be ignored. An interactive shell without the
+.B interactive_comments
+option enabled does not allow comments. The
+.B interactive_comments
+option is on by default in interactive shells.
+.SH QUOTING
+\fIQuoting\fP 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.
+.PP
+Each of the \fImetacharacters\fP listed above under
+.SM
+.B DEFINITIONS
+has special meaning to the shell and must be quoted if it is to
+represent itself.
+.PP
+When the command history expansion facilities are being used
+(see
+.SM
+.B HISTORY EXPANSION
+below), the
+\fIhistory expansion\fP character, usually \fB!\fP, must be quoted
+to prevent history expansion.
+.PP
+There are three quoting mechanisms: the
+.IR "escape character" ,
+single quotes, and double quotes.
+.PP
+A non-quoted backslash (\fB\e\fP) is the
+.IR "escape character" .
+It preserves the literal value of the next character that follows,
+with the exception of <newline>. If a \fB\e\fP<newline> pair
+appears, and the backslash is not itself quoted, the \fB\e\fP<newline>
+is treated as a line continuation (that is, it is removed from the
+input stream and effectively ignored).
+.PP
+Enclosing characters in single quotes preserves the literal value
+of each character within the quotes. A single quote may not occur
+between single quotes, even when preceded by a backslash.
+.PP
+Enclosing characters in double quotes preserves the literal value
+of all characters within the quotes, with the exception of
+.BR $ ,
+.BR \` ,
+.BR \e ,
+and, when history expansion is enabled,
+.BR ! .
+When the shell is in \fIposix mode\fP, the \fB!\fP has no special meaning
+within double quotes, even when history expansion is enabled.
+The characters
+.B $
+and
+.B \`
+retain their special meaning within double quotes. The backslash
+retains its special meaning only when followed by one of the following
+characters:
+.BR $ ,
+.BR \` ,
+\^\fB"\fP\^,
+.BR \e ,
+or
+.BR <newline> .
+A double quote may be quoted within double quotes by preceding it with
+a backslash.
+If enabled, history expansion will be performed unless an
+.B !
+appearing in double quotes is escaped using a backslash.
+The backslash preceding the
+.B !
+is not removed.
+.PP
+The special parameters
+.B *
+and
+.B @
+have special meaning when in double
+quotes (see
+.SM
+.B PARAMETERS
+below).
+.PP
+Words of the form \fB$\fP\(aq\fIstring\fP\(aq are treated specially. The
+word expands to \fIstring\fP, with backslash-escaped characters replaced
+as specified by the ANSI C standard. Backslash escape sequences, if
+present, are decoded as follows:
+.RS
+.PD 0
+.TP
+.B \ea
+alert (bell)
+.TP
+.B \eb
+backspace
+.TP
+.B \ee
+.TP
+.B \eE
+an escape character
+.TP
+.B \ef
+form feed
+.TP
+.B \en
+new line
+.TP
+.B \er
+carriage return
+.TP
+.B \et
+horizontal tab
+.TP
+.B \ev
+vertical tab
+.TP
+.B \e\e
+backslash
+.TP
+.B \e\(aq
+single quote
+.TP
+.B \e\(dq
+double quote
+.TP
+.B \e?
+question mark
+.TP
+.B \e\fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
+(one to three octal digits)
+.TP
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
+.TP
+.B \eu\fIHHHH\fP
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+\fIHHHH\fP (one to four hex digits)
+.TP
+.B \eU\fIHHHHHHHH\fP
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+\fIHHHHHHHH\fP (one to eight hex digits)
+.TP
+.B \ec\fIx\fP
+a control-\fIx\fP character
+.PD
+.RE
+.LP
+The expanded result is single-quoted, as if the dollar sign had
+not been present.
+.PP
+A double-quoted string preceded by a dollar sign (\fB$\fP\(dq\fIstring\fP\(dq)
+will cause the string to be translated according to the current locale.
+If the current locale is \fBC\fP or \fBPOSIX\fP, the dollar sign
+is ignored.
+If the string is translated and replaced, the replacement is
+double-quoted.
+.SH PARAMETERS
+A
+.I parameter
+is an entity that stores values.
+It can be a
+.IR name ,
+a number, or one of the special characters listed below under
+.BR "Special Parameters" .
+A
+.I variable
+is a parameter denoted by a
+.IR name .
+A variable has a \fIvalue\fP and zero or more \fIattributes\fP.
+Attributes are assigned using the
+.B declare
+builtin command (see
+.B declare
+below in
+.SM
+.BR "SHELL BUILTIN COMMANDS" ).
+.PP
+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
+.B unset
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.PP
+A
+.I variable
+may be assigned to by a statement of the form
+.RS
+.PP
+\fIname\fP=[\fIvalue\fP]
+.RE
+.PP
+If
+.I value
+is not given, the variable is assigned the null string. All
+.I values
+undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote
+removal (see
+.SM
+.B EXPANSION
+below). If the variable has its
+.B integer
+attribute set, then
+.I value
+is evaluated as an arithmetic expression even if the $((...)) expansion is
+not used (see
+.B "Arithmetic Expansion"
+below).
+Word splitting is not performed, with the exception
+of \fB"$@"\fP as explained below under
+.BR "Special Parameters" .
+Pathname expansion is not performed.
+Assignment statements may also appear as arguments to the
+.BR alias ,
+.BR declare ,
+.BR typeset ,
+.BR export ,
+.BR readonly ,
+and
+.B local
+builtin commands (\fIdeclaration\fP commands).
+When in \fIposix mode\fP, these builtins may appear in a command after
+one or more instances of the \fBcommand\fP builtin and retain these
+assignment statement properties.
+.PP
+In the context where an assignment statement is assigning a value
+to a shell variable or array index, the += operator can be used to
+append to or add to the variable's previous value.
+This includes arguments to builtin commands such as \fBdeclare\fP that
+accept assignment statements (\fIdeclaration\fP commands).
+When += is applied to a variable for which the \fIinteger\fP attribute has been
+set, \fIvalue\fP is evaluated as an arithmetic expression and added to the
+variable's current value, which is also evaluated.
+When += is applied to an array variable using compound assignment (see
+.B Arrays
+below), the
+variable's value is not unset (as it is when using =), and new values are
+appended to the array beginning at one greater than the array's maximum index
+(for indexed arrays) or added as additional key\-value pairs in an
+associative array.
+When applied to a string-valued variable, \fIvalue\fP is expanded and
+appended to the variable's value.
+.PP
+A variable can be assigned the \fInameref\fP attribute using the
+\fB\-n\fP option to the \fBdeclare\fP or \fBlocal\fP builtin commands
+(see the descriptions of \fBdeclare\fP and \fBlocal\fP below)
+to create a \fInameref\fP, or a reference to another variable.
+This allows variables to be manipulated indirectly.
+Whenever the nameref variable is referenced, assigned to, unset, or has
+its attributes modified (other than using or changing the \fInameref\fP
+attribute itself), the
+operation is actually performed on the variable specified by the nameref
+variable's value.
+A nameref is commonly used within shell functions to refer to a variable
+whose name is passed as an argument to the function.
+For instance, if a variable name is passed to a shell function as its first
+argument, running
+.sp .5
+.RS
+.if t \f(CWdeclare -n ref=$1\fP
+.if n declare -n ref=$1
+.RE
+.sp .5
+inside the function creates a nameref variable \fBref\fP whose value is
+the variable name passed as the first argument.
+References and assignments to \fBref\fP, and changes to its attributes,
+are treated as references, assignments, and attribute modifications
+to the variable whose name was passed as \fB$1\fP.
+If the control variable in a \fBfor\fP loop has the nameref attribute,
+the list of words can be a list of shell variables, and a name reference
+will be established for each word in the list, in turn, when the loop is
+executed.
+Array variables cannot be given the \fBnameref\fP attribute.
+However, nameref variables can reference array variables and subscripted
+array variables.
+Namerefs can be unset using the \fB\-n\fP option to the \fBunset\fP builtin.
+Otherwise, if \fBunset\fP is executed with the name of a nameref variable
+as an argument, the variable referenced by the nameref variable will be unset.
+.SS Positional Parameters
+.PP
+A
+.I positional parameter
+is a parameter denoted by one or more
+digits, other than the single digit 0. Positional parameters are
+assigned from the shell's arguments when it is invoked,
+and may be reassigned using the
+.B set
+builtin command. Positional parameters may not be assigned to
+with assignment statements. The positional parameters are
+temporarily replaced when a shell function is executed (see
+.SM
+.B FUNCTIONS
+below).
+.PP
+When a positional parameter consisting of more than a single
+digit is expanded, it must be enclosed in braces (see
+.SM
+.B EXPANSION
+below).
+.SS Special Parameters
+.PP
+The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+.PD 0
+.TP
+.B *
+Expands to the positional parameters, starting from one.
+When the expansion is not within double quotes, each positional parameter
+expands to a separate word.
+In contexts where it is performed, those words
+are subject to further word splitting and pathname expansion.
+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
+.SM
+.B IFS
+special variable. That is, "\fB$*\fP" is equivalent
+to "\fB$1\fP\fIc\fP\fB$2\fP\fIc\fP\fB...\fP", where
+.I c
+is the first character of the value of the
+.SM
+.B IFS
+variable. If
+.SM
+.B IFS
+is unset, the parameters are separated by spaces.
+If
+.SM
+.B IFS
+is null, the parameters are joined without intervening separators.
+.TP
+.B @
+Expands to the positional parameters, starting from one.
+In contexts where word splitting is performed, this expands each
+positional parameter to a separate word; if not within double
+quotes, these words are subject to word splitting.
+In contexts where word splitting is not performed,
+this expands to a single word
+with each positional parameter separated by a space.
+When the
+expansion occurs within double quotes, each parameter expands to a
+separate word. That is, "\fB$@\fP" is equivalent to
+"\fB$1\fP" "\fB$2\fP" ...
+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, "\fB$@\fP" and
+.B $@
+expand to nothing (i.e., they are removed).
+.TP
+.B #
+Expands to the number of positional parameters in decimal.
+.TP
+.B ?
+Expands to the exit status of the most recently executed foreground
+pipeline.
+.TP
+.B \-
+Expands to the current option flags as specified upon invocation,
+by the
+.B set
+builtin command, or those set by the shell itself
+(such as the
+.B \-i
+option).
+.TP
+.B $
+Expands to the process ID of the shell. In a () subshell, it
+expands to the process ID of the current shell, not the
+subshell.
+.TP
+.B !
+Expands to the process ID of the job most recently placed into the
+background, whether executed as an asynchronous command or using
+the \fBbg\fP builtin (see
+.SM
+.B "JOB CONTROL"
+below).
+.TP
+.B 0
+Expands to the name of the shell or shell script. This is set at
+shell initialization. If
+.B bash
+is invoked with a file of commands,
+.B $0
+is set to the name of that file. If
+.B bash
+is started with the
+.B \-c
+option, then
+.B $0
+is set to the first argument after the string to be
+executed, if one is present. Otherwise, it is set
+to the filename used to invoke
+.BR bash ,
+as given by argument zero.
+.TP
+.B _
+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 simple
+command executed in the foreground, 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
+currently being checked.
+.PD
+.SS Shell Variables
+.PP
+The following variables are set by the shell:
+.PP
+.PD 0
+.TP
+.B BASH
+Expands to the full filename used to invoke this instance of
+.BR bash .
+.TP
+.B BASHOPTS
+A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the
+.B \-s
+option to the
+.B shopt
+builtin command (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below). The options appearing in
+.SM
+.B BASHOPTS
+are those reported as
+.I on
+by \fBshopt\fP.
+If this variable is in the environment when
+.B bash
+starts up, each shell option in the list will be enabled before
+reading any startup files.
+This variable is read-only.
+.TP
+.B BASHPID
+Expands to the process ID of the current \fBbash\fP process.
+This differs from \fB$$\fP under certain circumstances, such as subshells
+that do not require \fBbash\fP to be re-initialized.
+Assignments to
+.SM
+.B BASHPID
+have no effect.
+If
+.B BASHPID
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B BASH_ALIASES
+An associative array variable whose members correspond to the internal
+list of aliases as maintained by the \fBalias\fP builtin.
+Elements added to this array appear in the alias list; however,
+unsetting array elements currently does not cause aliases to be removed
+from the alias list.
+If
+.B BASH_ALIASES
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B BASH_ARGC
+An array variable whose values are the number of parameters in each
+frame of the current \fBbash\fP execution call stack.
+The number of
+parameters to the current subroutine (shell function or script executed
+with \fB.\fP or \fBsource\fP) is at the top of the stack.
+When a subroutine is executed, the number of parameters passed is pushed onto
+.SM
+.BR BASH_ARGC .
+The shell sets
+.SM
+.B BASH_ARGC
+only when in extended debugging mode (see the description of the
+.B extdebug
+option to the
+.B shopt
+builtin below).
+Setting \fBextdebug\fP after the shell has started to execute a script,
+or referencing this variable when \fBextdebug\fP is not set,
+may result in inconsistent values.
+.TP
+.B BASH_ARGV
+An array variable containing all of the parameters in the current \fBbash\fP
+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
+.SM
+.BR BASH_ARGV .
+The shell sets
+.SM
+.B BASH_ARGV
+only when in extended debugging mode
+(see the description of the
+.B extdebug
+option to the
+.B shopt
+builtin below).
+Setting \fBextdebug\fP after the shell has started to execute a script,
+or referencing this variable when \fBextdebug\fP is not set,
+may result in inconsistent values.
+.TP
+.B BASH_ARGV0
+When referenced, this variable expands to the name of the shell or shell
+script (identical to
+.BR $0 ;
+see the description of special parameter 0 above).
+Assignment to
+.B BASH_ARGV0
+causes the value assigned to also be assigned to \fB$0\fP.
+If
+.B BASH_ARGV0
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B BASH_CMDS
+An associative array variable whose members correspond to the internal
+hash table of commands as maintained by the \fBhash\fP builtin.
+Elements added to this array appear in the hash table; however,
+unsetting array elements currently does not cause command names to be removed
+from the hash table.
+If
+.B BASH_CMDS
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B BASH_COMMAND
+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.
+.TP
+.B BASH_EXECUTION_STRING
+The command argument to the \fB\-c\fP invocation option.
+.TP
+.B BASH_LINENO
+An array variable whose members are the line numbers in source files
+where each corresponding member of
+.SM
+.B FUNCNAME
+was invoked.
+\fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source
+file (\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP) where
+\fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP was called
+(or \fB${BASH_LINENO[\fP\fI$i-1\fP\fB]}\fP if referenced within another
+shell function).
+Use
+.SM
+.B LINENO
+to obtain the current line number.
+.TP
+.B BASH_LOADABLES_PATH
+A colon-separated list of directories in which the shell looks for
+dynamically loadable builtins specified by the
+.B enable
+command.
+.TP
+.B BASH_REMATCH
+An array variable whose members are assigned by the \fB=~\fP binary
+operator to the \fB[[\fP conditional command.
+The element with index 0 is the portion of the string
+matching the entire regular expression.
+The element with index \fIn\fP is the portion of the
+string matching the \fIn\fPth parenthesized subexpression.
+This variable is read-only.
+.TP
+.B BASH_SOURCE
+An array variable whose members are the source filenames
+where the corresponding shell function names in the
+.SM
+.B FUNCNAME
+array variable are defined.
+The shell function
+\fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP is defined in the file
+\fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fP and called from
+\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP.
+.TP
+.B BASH_SUBSHELL
+Incremented by one within each subshell or subshell environment when
+the shell begins executing in that environment.
+The initial value is 0.
+.TP
+.B BASH_VERSINFO
+A readonly array variable whose members hold version information for
+this instance of
+.BR bash .
+The values assigned to the array members are as follows:
+.sp .5
+.RS
+.TP 24
+.B BASH_VERSINFO[\fR0\fP]
+The major version number (the \fIrelease\fP).
+.TP
+.B BASH_VERSINFO[\fR1\fP]
+The minor version number (the \fIversion\fP).
+.TP
+.B BASH_VERSINFO[\fR2\fP]
+The patch level.
+.TP
+.B BASH_VERSINFO[\fR3\fP]
+The build version.
+.TP
+.B BASH_VERSINFO[\fR4\fP]
+The release status (e.g., \fIbeta1\fP).
+.TP
+.B BASH_VERSINFO[\fR5\fP]
+The value of
+.SM
+.BR MACHTYPE .
+.RE
+.TP
+.B BASH_VERSION
+Expands to a string describing the version of this instance of
+.BR bash .
+.TP
+.B COMP_CWORD
+An index into \fB${COMP_WORDS}\fP of the word containing the current
+cursor position.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B COMP_KEY
+The key (or final key of a key sequence) used to invoke the current
+completion function.
+.TP
+.B COMP_LINE
+The current command line.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B COMP_POINT
+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 \fB${#COMP_LINE}\fP.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B COMP_TYPE
+Set to an integer value corresponding to the type of completion attempted
+that caused a completion function to be called:
+\fITAB\fP, for normal completion,
+\fI?\fP, for listing completions after successive tabs,
+\fI!\fP, for listing alternatives on partial word completion,
+\fI@\fP, to list completions if the word is not unmodified,
+or
+\fI%\fP, for menu completion.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B COMP_WORDBREAKS
+The set of characters that the \fBreadline\fP library treats as word
+separators when performing word completion.
+If
+.SM
+.B COMP_WORDBREAKS
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B COMP_WORDS
+An array variable (see \fBArrays\fP below) consisting of the individual
+words in the current command line.
+The line is split into words as \fBreadline\fP would split it, using
+.SM
+.B COMP_WORDBREAKS
+as described above.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B COPROC
+An array variable (see \fBArrays\fP below) created to hold the file descriptors
+for output from and input to an unnamed coprocess (see \fBCoprocesses\fP
+above).
+.TP
+.B DIRSTACK
+An array variable (see
+.B Arrays
+below) containing the current contents of the directory stack.
+Directories appear in the stack in the order they are displayed by the
+.B dirs
+builtin.
+Assigning to members of this array variable may be used to modify
+directories already in the stack, but the
+.B pushd
+and
+.B popd
+builtins must be used to add and remove directories.
+Assignment to this variable will not change the current directory.
+If
+.SM
+.B DIRSTACK
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B EPOCHREALTIME
+Each time this parameter is referenced, it expands to the number of seconds
+since the Unix Epoch (see \fItime\fP\fR(3)\fP) as a floating point value
+with micro-second granularity.
+Assignments to
+.SM
+.B EPOCHREALTIME
+are ignored.
+If
+.SM
+.B EPOCHREALTIME
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B EPOCHSECONDS
+Each time this parameter is referenced, it expands to the number of seconds
+since the Unix Epoch (see \fItime\fP\fR(3)\fP).
+Assignments to
+.SM
+.B EPOCHSECONDS
+are ignored.
+If
+.SM
+.B EPOCHSECONDS
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B EUID
+Expands to the effective user ID of the current user, initialized at
+shell startup. This variable is readonly.
+.TP
+.B FUNCNAME
+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 (the one with the highest index) is
+.if t \f(CW"main"\fP.
+.if n "main".
+This variable exists only when a shell function is executing.
+Assignments to
+.SM
+.B FUNCNAME
+have no effect.
+If
+.SM
+.B FUNCNAME
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.if t .sp 0.5
+.if n .sp 1
+This variable can be used with \fBBASH_LINENO\fP and \fBBASH_SOURCE\fP.
+Each element of \fBFUNCNAME\fP has corresponding elements in
+\fBBASH_LINENO\fP and \fBBASH_SOURCE\fP to describe the call stack.
+For instance, \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP was called from the file
+\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP at line number
+\fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP.
+The \fBcaller\fP builtin displays the current call stack using this
+information.
+.TP
+.B GROUPS
+An array variable containing the list of groups of which the current
+user is a member.
+Assignments to
+.SM
+.B GROUPS
+have no effect.
+If
+.SM
+.B GROUPS
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B HISTCMD
+The history number, or index in the history list, of the current
+command.
+If
+.SM
+.B HISTCMD
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B HOSTNAME
+Automatically set to the name of the current host.
+.TP
+.B HOSTTYPE
+Automatically set to a string that uniquely
+describes the type of machine on which
+.B bash
+is executing.
+The default is system-dependent.
+.TP
+.B LINENO
+Each time this parameter is referenced, the shell substitutes
+a decimal number representing the current sequential line number
+(starting with 1) within a script or function. When not in a
+script or function, the value substituted is not guaranteed to
+be meaningful.
+If
+.SM
+.B LINENO
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B MACHTYPE
+Automatically set to a string that fully describes the system
+type on which
+.B bash
+is executing, in the standard GNU \fIcpu-company-system\fP format.
+The default is system-dependent.
+.TP
+.B MAPFILE
+An array variable (see \fBArrays\fP below) created to hold the text
+read by the \fBmapfile\fP builtin when no variable name is supplied.
+.TP
+.B OLDPWD
+The previous working directory as set by the
+.B cd
+command.
+.TP
+.B OPTARG
+The value of the last option argument processed by the
+.B getopts
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.TP
+.B OPTIND
+The index of the next argument to be processed by the
+.B getopts
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.TP
+.B OSTYPE
+Automatically set to a string that
+describes the operating system on which
+.B bash
+is executing.
+The default is system-dependent.
+.TP
+.B PIPESTATUS
+An array variable (see
+.B Arrays
+below) containing a list of exit status values from the processes
+in the most-recently-executed foreground pipeline (which may
+contain only a single command).
+.TP
+.B PPID
+The process ID of the shell's parent. This variable is readonly.
+.TP
+.B PWD
+The current working directory as set by the
+.B cd
+command.
+.TP
+.B RANDOM
+Each time this parameter is referenced, a random integer between
+0 and 32767 is
+generated. The sequence of random numbers may be initialized by assigning
+a value to
+.SM
+.BR RANDOM .
+If
+.SM
+.B RANDOM
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B READLINE_LINE
+The contents of the
+.B readline
+line buffer, for use with
+.if t \f(CWbind -x\fP
+.if n "bind -x"
+(see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below).
+.TP
+.B READLINE_POINT
+The position of the insertion point in the
+.B readline
+line buffer, for use with
+.if t \f(CWbind -x\fP
+.if n "bind -x"
+(see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below).
+.TP
+.B REPLY
+Set to the line of input read by the
+.B read
+builtin command when no arguments are supplied.
+.TP
+.B SECONDS
+Each time this parameter is
+referenced, the number of seconds since shell invocation is returned. If a
+value is assigned to
+.SM
+.BR SECONDS ,
+the value returned upon subsequent
+references is
+the number of seconds since the assignment plus the value assigned.
+If
+.SM
+.B SECONDS
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B SHELLOPTS
+A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the
+.B \-o
+option to the
+.B set
+builtin command (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below). The options appearing in
+.SM
+.B SHELLOPTS
+are those reported as
+.I on
+by \fBset \-o\fP.
+If this variable is in the environment when
+.B bash
+starts up, each shell option in the list will be enabled before
+reading any startup files.
+This variable is read-only.
+.TP
+.B SHLVL
+Incremented by one each time an instance of
+.B bash
+is started.
+.TP
+.B UID
+Expands to the user ID of the current user, initialized at shell startup.
+This variable is readonly.
+.PD
+.PP
+The following variables are used by the shell. In some cases,
+.B bash
+assigns a default value to a variable; these cases are noted
+below.
+.PP
+.PD 0
+.TP
+.B BASH_COMPAT
+The value is used to set the shell's compatibility level.
+See the description of the \fBshopt\fP builtin below under
+\fBSHELL BUILTIN COMMANDS\fP
+for a description of the various compatibility
+levels and their effects.
+The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
+corresponding to the desired compatibility level.
+If \fBBASH_COMPAT\fP is unset or set to the empty string, the compatibility
+level is set to the default for the current version.
+If \fBBASH_COMPAT\fP is set to a value that is not one of the valid
+compatibility levels, the shell prints an error message and sets the
+compatibility level to the default for the current version.
+The valid compatibility levels correspond to the compatibility options
+accepted by the \fBshopt\fP builtin described below (for example,
+\fBcompat42\fP means that 4.2 and 42 are valid values).
+The current version is also a valid value.
+.TP
+.B BASH_ENV
+If this parameter is set when \fBbash\fP is executing a shell script,
+its value is interpreted as a filename containing commands to
+initialize the shell, as in
+.IR ~/.bashrc .
+The value of
+.SM
+.B BASH_ENV
+is subjected to parameter expansion, command substitution, and arithmetic
+expansion before being interpreted as a filename.
+.SM
+.B PATH
+is not used to search for the resultant filename.
+.TP
+.B BASH_XTRACEFD
+If set to an integer corresponding to a valid file descriptor, \fBbash\fP
+will write the trace output generated when
+.if t \f(CWset -x\fP
+.if n \fIset -x\fP
+is enabled to that file descriptor.
+The file descriptor is closed when
+.SM
+.B BASH_XTRACEFD
+is unset or assigned a new value.
+Unsetting
+.SM
+.B BASH_XTRACEFD
+or assigning it the empty string causes the
+trace output to be sent to the standard error.
+Note that setting
+.SM
+.B BASH_XTRACEFD
+to 2 (the standard error file
+descriptor) and then unsetting it will result in the standard error
+being closed.
+.TP
+.B CDPATH
+The search path for the
+.B cd
+command.
+This is a colon-separated list of directories in which the shell looks
+for destination directories specified by the
+.B cd
+command.
+A sample value is
+.if t \f(CW".:~:/usr"\fP.
+.if n ".:~:/usr".
+.TP
+.B CHILD_MAX
+Set the number of exited child status values for the shell to remember.
+Bash will not allow this value to be decreased below a POSIX-mandated
+minimum, and there is a maximum value (currently 8192) that this may
+not exceed.
+The minimum value is system-dependent.
+.TP
+.B COLUMNS
+Used by the \fBselect\fP compound command to determine the terminal width
+when printing selection lists.
+Automatically set if the
+.B checkwinsize
+option is enabled or in an interactive shell upon receipt of a
+.SM
+.BR SIGWINCH .
+.TP
+.B COMPREPLY
+An array variable from which \fBbash\fP reads the possible completions
+generated by a shell function invoked by the programmable completion
+facility (see \fBProgrammable Completion\fP below).
+Each array element contains one possible completion.
+.TP
+.B EMACS
+If \fBbash\fP finds this variable in the environment when the shell starts
+with value
+.if t \f(CWt\fP,
+.if n "t",
+it assumes that the shell is running in an Emacs shell buffer and disables
+line editing.
+.TP
+.B ENV
+Similar to
+.SM
+.BR BASH_ENV ;
+used when the shell is invoked in \fIposix mode\fP.
+.TP
+.B EXECIGNORE
+A colon-separated list of shell patterns (see \fBPattern Matching\fP)
+defining the list of filenames to be ignored by command search using
+\fBPATH\fP.
+Files whose full pathnames match one of these patterns are not considered
+executable files for the purposes of completion and command execution
+via \fBPATH\fP lookup.
+This does not affect the behavior of the \fB[\fP, \fBtest\fP, and \fB[[\fP
+commands.
+Full pathnames in the command hash table are not subject to \fBEXECIGNORE\fP.
+Use this variable to ignore shared library files that have the executable
+bit set, but are not executable files.
+The pattern matching honors the setting of the \fBextglob\fP shell
+option.
+.TP
+.B FCEDIT
+The default editor for the
+.B fc
+builtin command.
+.TP
+.B FIGNORE
+A colon-separated list of suffixes to ignore when performing
+filename completion (see
+.SM
+.B READLINE
+below).
+A filename whose suffix matches one of the entries in
+.SM
+.B FIGNORE
+is excluded from the list of matched filenames.
+A sample value is
+.if t \f(CW".o:~"\fP.
+.if n ".o:~".
+.TP
+.B FUNCNEST
+If set to a numeric value greater than 0, defines a maximum function
+nesting level. Function invocations that exceed this nesting level
+will cause the current command to abort.
+.TP
+.B GLOBIGNORE
+A colon-separated list of patterns defining the set of file names to
+be ignored by pathname expansion.
+If a file name matched by a pathname expansion pattern also matches one
+of the patterns in
+.SM
+.BR GLOBIGNORE ,
+it is removed from the list of matches.
+.TP
+.B HISTCONTROL
+A colon-separated list of values controlling how commands are saved on
+the history list.
+If the list of values includes
+.IR ignorespace ,
+lines which begin with a
+.B space
+character are not saved in the history list.
+A value of
+.I ignoredups
+causes lines matching the previous history entry to not be saved.
+A value of
+.I ignoreboth
+is shorthand for \fIignorespace\fP and \fIignoredups\fP.
+A value of
+.I erasedups
+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
+.SM
+.B HISTCONTROL
+is unset, or does not include a valid value,
+all lines read by the shell parser are saved on the history list,
+subject to the value of
+.SM
+.BR HISTIGNORE .
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+.SM
+.BR HISTCONTROL .
+.TP
+.B HISTFILE
+The name of the file in which command history is saved (see
+.SM
+.B HISTORY
+below). The default value is \fI~/.bash_history\fP. If unset, the
+command history is not saved when a shell exits.
+.TP
+.B HISTFILESIZE
+The maximum number of lines contained in the history file. When this
+variable is assigned a value, the history file is truncated, if
+necessary,
+to contain no more than that number of lines by removing the oldest entries.
+The history file is also truncated to this size after
+writing it when a shell exits.
+If the value is 0, the history file is truncated to zero size.
+Non-numeric values and numeric values less than zero inhibit truncation.
+The shell sets the default value to the value of \fBHISTSIZE\fP
+after reading any startup files.
+.TP
+.B HISTIGNORE
+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
+`\fB*\fP' is appended). Each pattern is tested against the line
+after the checks specified by
+.SM
+.B HISTCONTROL
+are applied.
+In addition to the normal shell pattern matching characters, `\fB&\fP'
+matches the previous history line. `\fB&\fP' 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
+.SM
+.BR HISTIGNORE .
+The pattern matching honors the setting of the \fBextglob\fP shell
+option.
+.TP
+.B HISTSIZE
+The number of commands to remember in the command history (see
+.SM
+.B HISTORY
+below).
+If the value is 0, commands are not saved in the history list.
+Numeric values less than zero result in every command being saved
+on the history list (there is no limit).
+The shell sets the default value to 500 after reading any startup files.
+.TP
+.B HISTTIMEFORMAT
+If this variable is set and not null, its value is used as a format string
+for \fIstrftime\fP(3) to print the time stamp associated with each history
+entry displayed by the \fBhistory\fP builtin.
+If this variable is set, time stamps are written to the history file so
+they may be preserved across shell sessions.
+This uses the history comment character to distinguish timestamps from
+other history lines.
+.TP
+.B HOME
+The home directory of the current user; the default argument for the
+\fBcd\fP builtin command.
+The value of this variable is also used when performing tilde expansion.
+.TP
+.B HOSTFILE
+Contains the name of a file in the same format as
+.FN /etc/hosts
+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,
+.B bash
+adds the contents of the new file to the existing list.
+If
+.SM
+.B HOSTFILE
+is set, but has no value, or does not name a readable file,
+\fBbash\fP attempts to read
+.FN /etc/hosts
+to obtain the list of possible hostname completions.
+When
+.SM
+.B HOSTFILE
+is unset, the hostname list is cleared.
+.TP
+.B IFS
+The
+.I Internal Field Separator
+that is used
+for word splitting after expansion and to
+split lines into words with the
+.B read
+builtin command. The default value is
+``<space><tab><newline>''.
+.TP
+.B IGNOREEOF
+Controls the
+action of an interactive shell on receipt of an
+.SM
+.B EOF
+character as the sole input. If set, the value is the number of
+consecutive
+.SM
+.B EOF
+characters which must be
+typed as the first characters on an input line before
+.B bash
+exits. If the variable exists but does not have a numeric value, or
+has no value, the default value is 10. If it does not exist,
+.SM
+.B EOF
+signifies the end of input to the shell.
+.TP
+.B INPUTRC
+The filename for the
+.B readline
+startup file, overriding the default of
+.FN ~/.inputrc
+(see
+.SM
+.B READLINE
+below).
+.TP
+.B INSIDE_EMACS
+If this variable appears in the environment when the shell starts,
+\fBbash\fP assumes that it is running inside an Emacs shell buffer
+and may disable line editing, depending on the value of \fBTERM\fP.
+.TP
+.B LANG
+Used to determine the locale category for any category not specifically
+selected with a variable starting with \fBLC_\fP.
+.TP
+.B LC_ALL
+This variable overrides the value of
+.SM
+.B LANG
+and any other
+\fBLC_\fP variable specifying a locale category.
+.TP
+.B LC_COLLATE
+This variable determines the collation order used when sorting the
+results of pathname expansion, and determines the behavior of range
+expressions, equivalence classes, and collating sequences within
+pathname expansion and pattern matching.
+.TP
+.B LC_CTYPE
+This variable determines the interpretation of characters and the
+behavior of character classes within pathname expansion and pattern
+matching.
+.TP
+.B LC_MESSAGES
+This variable determines the locale used to translate double-quoted
+strings preceded by a \fB$\fP.
+.TP
+.B LC_NUMERIC
+This variable determines the locale category used for number formatting.
+.TP
+.B LC_TIME
+This variable determines the locale category used for data and time
+formatting.
+.TP
+.B LINES
+Used by the \fBselect\fP compound command to determine the column length
+for printing selection lists.
+Automatically set if the
+.B checkwinsize
+option is enabled or in an interactive shell upon receipt of a
+.SM
+.BR SIGWINCH .
+.TP
+.B MAIL
+If this parameter is set to a file or directory name and the
+.SM
+.B MAILPATH
+variable is not set,
+.B bash
+informs the user of the arrival of mail in the specified file or
+Maildir-format directory.
+.TP
+.B MAILCHECK
+Specifies how
+often (in seconds)
+.B bash
+checks for mail. 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.
+.TP
+.B MAILPATH
+A colon-separated list of filenames to be checked for mail.
+The message to be printed when mail arrives in a particular file
+may be specified by separating the filename from the message with a `?'.
+When used in the text of the message, \fB$_\fP expands to the name of
+the current mailfile.
+Example:
+.RS
+.PP
+\fBMAILPATH\fP=\(aq/var/mail/bfox?"You have mail":~/shell\-mail?"$_ has mail!"\(aq
+.PP
+.B Bash
+can be configured to supply
+a default value for this variable (there is no value by default),
+but the location of the user
+mail files that it uses is system dependent (e.g., /var/mail/\fB$USER\fP).
+.RE
+.TP
+.B OPTERR
+If set to the value 1,
+.B bash
+displays error messages generated by the
+.B getopts
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.SM
+.B OPTERR
+is initialized to 1 each time the shell is invoked or a shell
+script is executed.
+.TP
+.B PATH
+The search path for commands. It
+is a colon-separated list of directories in which
+the shell looks for commands (see
+.SM
+.B COMMAND EXECUTION
+below).
+A zero-length (null) directory name in the value of
+.SM
+.B PATH
+indicates the current directory.
+A null directory name may appear as two adjacent colons, or as an initial
+or trailing colon.
+The default path is system-dependent,
+and is set by the administrator who installs
+.BR bash .
+A common value is
+.na
+.if t \f(CW/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin\fP.
+.if n ``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''.
+.ad
+.TP
+.B POSIXLY_CORRECT
+If this variable is in the environment when \fBbash\fP starts, the shell
+enters \fIposix mode\fP before reading the startup files, as if the
+.B \-\-posix
+invocation option had been supplied. If it is set while the shell is
+running, \fBbash\fP enables \fIposix mode\fP, as if the command
+.if t \f(CWset -o posix\fP
+.if n \fIset -o posix\fP
+had been executed.
+When the shell enters \fIposix mode\fP, it sets this variable if it was
+not already set.
+.TP
+.B PROMPT_COMMAND
+If set, the value is executed as a command prior to issuing each primary
+prompt.
+.TP
+.B PROMPT_DIRTRIM
+If set to a number greater than zero, the value is used as the number of
+trailing directory components to retain when expanding the \fB\ew\fP and
+\fB\eW\fP prompt string escapes (see
+.SM
+.B PROMPTING
+below). Characters removed are replaced with an ellipsis.
+.TP
+.B PS0
+The value of this parameter is expanded (see
+.SM
+.B PROMPTING
+below) and displayed by interactive shells after reading a command
+and before the command is executed.
+.TP
+.B PS1
+The value of this parameter is expanded (see
+.SM
+.B PROMPTING
+below) and used as the primary prompt string. The default value is
+``\fB\es\-\ev\e$ \fP''.
+.TP
+.B PS2
+The value of this parameter is expanded as with
+.SM
+.B PS1
+and used as the secondary prompt string. The default is
+``\fB> \fP''.
+.TP
+.B PS3
+The value of this parameter is used as the prompt for the
+.B select
+command (see
+.SM
+.B SHELL GRAMMAR
+above).
+.TP
+.B PS4
+The value of this parameter is expanded as with
+.SM
+.B PS1
+and the value is printed before each command
+.B bash
+displays during an execution trace. The first character of
+the expanded value of
+.SM
+.B PS4
+is replicated multiple times, as necessary, to indicate multiple
+levels of indirection. The default is ``\fB+ \fP''.
+.TP
+.B SHELL
+The full pathname to the shell is kept in this environment variable.
+If it is not set when the shell starts,
+.B bash
+assigns to it the full pathname of the current user's login shell.
+.TP
+.B TIMEFORMAT
+The value of this parameter is used as a format string specifying
+how the timing information for pipelines prefixed with the
+.B time
+reserved word should be displayed.
+The \fB%\fP 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.
+.sp .5
+.RS
+.PD 0
+.TP 10
+.B %%
+A literal \fB%\fP.
+.TP
+.B %[\fIp\fP][l]R
+The elapsed time in seconds.
+.TP
+.B %[\fIp\fP][l]U
+The number of CPU seconds spent in user mode.
+.TP
+.B %[\fIp\fP][l]S
+The number of CPU seconds spent in system mode.
+.TP
+.B %P
+The CPU percentage, computed as (%U + %S) / %R.
+.PD
+.RE
+.IP
+The optional \fIp\fP is a digit specifying the \fIprecision\fP,
+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 \fIp\fP greater than 3 are changed to 3.
+If \fIp\fP is not specified, the value 3 is used.
+.IP
+The optional \fBl\fP specifies a longer format, including
+minutes, of the form \fIMM\fPm\fISS\fP.\fIFF\fPs.
+The value of \fIp\fP determines whether or not the fraction is
+included.
+.IP
+If this variable is not set, \fBbash\fP acts as if it had the
+value \fB$\(aq\enreal\et%3lR\enuser\et%3lU\ensys\et%3lS\(aq\fP.
+If the value is null, no timing information is displayed.
+A trailing newline is added when the format string is displayed.
+.PD 0
+.TP
+.B TMOUT
+If set to a value greater than zero,
+.SM
+.B TMOUT
+is treated as the
+default timeout for the \fBread\fP builtin.
+The \fBselect\fP command terminates if input does not arrive
+after
+.SM
+.B TMOUT
+seconds when input is coming from a terminal.
+In an interactive shell, the value is interpreted as the
+number of seconds to wait for a line of input after issuing the
+primary prompt.
+.B Bash
+terminates after waiting for that number of seconds if a complete
+line of input does not arrive.
+.TP
+.B TMPDIR
+If set, \fBbash\fP uses its value as the name of a directory in which
+\fBbash\fP creates temporary files for the shell's use.
+.TP
+.B auto_resume
+This variable controls how the shell interacts with the user and
+job control. If this variable is set, single word simple
+commands without redirections are treated as candidates for resumption
+of an existing stopped job. There is no ambiguity allowed; if there is
+more than one job beginning with the string typed, the job most recently
+accessed is selected. The
+.I name
+of a stopped job, in this context, is the command line used to
+start it.
+If set to the value
+.IR exact ,
+the string supplied must match the name of a stopped job exactly;
+if set to
+.IR substring ,
+the string supplied needs to match a substring of the name of a
+stopped job. The
+.I substring
+value provides functionality analogous to the
+.B %?
+job identifier (see
+.SM
+.B JOB CONTROL
+below). 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 \fB%\fP\fIstring\fP job identifier.
+.TP
+.B histchars
+The two or three characters which control history expansion
+and tokenization (see
+.SM
+.B HISTORY EXPANSION
+below). The first character is the \fIhistory expansion\fP character,
+the character which signals the start of a history
+expansion, normally `\fB!\fP'.
+The second character is the \fIquick substitution\fP
+character, which is used as shorthand for re-running the previous
+command entered, substituting one string for another in the command.
+The default is `\fB^\fP'.
+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, normally `\fB#\fP'. 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.
+.PD
+.SS Arrays
+.B Bash
+provides one-dimensional indexed and associative array variables.
+Any variable may be used as an indexed array; the
+.B declare
+builtin will explicitly declare an array.
+There is no maximum
+limit on the size of an array, nor any requirement that members
+be indexed or assigned contiguously.
+Indexed arrays are referenced using integers (including arithmetic
+expressions) and are zero-based; associative arrays are referenced
+using arbitrary strings.
+Unless otherwise noted, indexed array indices must be non-negative integers.
+.PP
+An indexed array is created automatically if any variable is assigned to
+using the syntax \fIname\fP[\fIsubscript\fP]=\fIvalue\fP. The
+.I subscript
+is treated as an arithmetic expression that must evaluate to a number.
+To explicitly declare an indexed array, use
+.B declare \-a \fIname\fP
+(see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.B declare \-a \fIname\fP[\fIsubscript\fP]
+is also accepted; the \fIsubscript\fP is ignored.
+.PP
+Associative arrays are created using
+.BR "declare \-A \fIname\fP" .
+.PP
+Attributes may be
+specified for an array variable using the
+.B declare
+and
+.B readonly
+builtins. Each attribute applies to all members of an array.
+.PP
+Arrays are assigned to using compound assignments of the form
+\fIname\fP=\fB(\fPvalue\fI1\fP ... value\fIn\fP\fB)\fP, where each
+\fIvalue\fP is of the form [\fIsubscript\fP]=\fIstring\fP.
+Indexed array assignments do not require anything but \fIstring\fP.
+When assigning to indexed arrays, if the optional brackets and subscript
+are 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.
+.PP
+When assigning to an associative array, the subscript is required.
+.PP
+This syntax is also accepted by the
+.B declare
+builtin. Individual array elements may be assigned to using the
+\fIname\fP[\fIsubscript\fP]=\fIvalue\fP syntax introduced above.
+When assigning to an indexed array, if
+.I name
+is subscripted by a negative number, that number is
+interpreted as relative to one greater than the maximum index of
+\fIname\fP, so negative indices count back from the end of the
+array, and an index of \-1 references the last element.
+.PP
+Any element of an array may be referenced using
+${\fIname\fP[\fIsubscript\fP]}. The braces are required to avoid
+conflicts with pathname expansion. If
+\fIsubscript\fP is \fB@\fP or \fB*\fP, the word expands to
+all members of \fIname\fP. These subscripts differ only when the
+word appears within double quotes. If the word is double-quoted,
+${\fIname\fP[*]} expands to a single
+word with the value of each array member separated by the first
+character of the
+.SM
+.B IFS
+special variable, and ${\fIname\fP[@]} expands each element of
+\fIname\fP to a separate word. When there are no array members,
+${\fIname\fP[@]} 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 \fB*\fP and \fB@\fP (see
+.B Special Parameters
+above). ${#\fIname\fP[\fIsubscript\fP]} expands to the length of
+${\fIname\fP[\fIsubscript\fP]}. If \fIsubscript\fP is \fB*\fP or
+\fB@\fP, the expansion is the number of elements in the array.
+If the
+.I subscript
+used to reference an element of an indexed array
+evaluates to a number less than zero, it is
+interpreted as relative to one greater than the maximum index of the array,
+so negative indices count back from the end of the
+array, and an index of \-1 references the last element.
+.PP
+Referencing an array variable without a subscript is equivalent to
+referencing the array with a subscript of 0.
+Any reference to a variable using a valid subscript is legal, and
+.B bash
+will create an array if necessary.
+.PP
+An array variable is considered set if a subscript has been assigned a
+value. The null string is a valid value.
+.PP
+It is possible to obtain the keys (indices) of an array as well as the values.
+${\fB!\fP\fIname\fP[\fI@\fP]} and ${\fB!\fP\fIname\fP[\fI*\fP]}
+expand to the indices assigned in array variable \fIname\fP.
+The treatment when in double quotes is similar to the expansion of the
+special parameters \fI@\fP and \fI*\fP within double quotes.
+.PP
+The
+.B unset
+builtin is used to destroy arrays. \fBunset\fP \fIname\fP[\fIsubscript\fP]
+destroys the array element at index \fIsubscript\fP,
+for both indexed and associative arrays.
+Negative subscripts to indexed arrays are interpreted as described above.
+Unsetting the last element of an array variable does not unset the variable.
+\fBunset\fP \fIname\fP, where \fIname\fP is an array, or
+\fBunset\fP \fIname\fP[\fIsubscript\fP], where
+\fIsubscript\fP is \fB*\fP or \fB@\fP, removes the entire array.
+.PP
+When using a variable name with a subscript as an argument to a command,
+such as with \fBunset\fP, without using the word expansion syntax
+described above, the argument is subject to pathname expansion.
+If pathname expansion is not desired, the argument should be quoted.
+.PP
+The
+.BR declare ,
+.BR local ,
+and
+.B readonly
+builtins each accept a
+.B \-a
+option to specify an indexed array and a
+.B \-A
+option to specify an associative array.
+If both options are supplied,
+.B \-A
+takes precedence.
+The
+.B read
+builtin accepts a
+.B \-a
+option to assign a list of words read from the standard input
+to an array. The
+.B set
+and
+.B declare
+builtins display array values in a way that allows them to be
+reused as assignments.
+.SH EXPANSION
+Expansion is performed on the command line after it has been split into
+words. There are seven kinds of expansion performed:
+.IR "brace expansion" ,
+.IR "tilde expansion" ,
+.IR "parameter and variable expansion" ,
+.IR "command substitution" ,
+.IR "arithmetic expansion" ,
+.IR "word splitting" ,
+and
+.IR "pathname expansion" .
+.PP
+The order of expansions is:
+brace expansion;
+tilde expansion, parameter and variable expansion, arithmetic expansion,
+and command substitution (done in a left-to-right fashion);
+word splitting;
+and pathname expansion.
+.PP
+On systems that can support it, there is an additional expansion
+available: \fIprocess substitution\fP.
+This is performed at the
+same time as tilde, parameter, variable, and arithmetic expansion and
+command substitution.
+.PP
+After these expansions are performed, quote characters present in the
+original word are removed unless they have been quoted themselves
+(\fIquote removal\fP).
+.PP
+Only brace expansion, word splitting, and pathname expansion
+can increase 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
+"\fB$@\fP" and "\fB${\fP\fIname\fP\fB[@]}\fP",
+and, in most cases, \fB$*\fP and \fB${\fP\fIname\fP\fB[*]}\fP
+as explained above (see
+.SM
+.BR PARAMETERS ).
+.SS Brace Expansion
+.PP
+.I "Brace expansion"
+is a mechanism by which arbitrary strings
+may be generated. This mechanism is similar to
+\fIpathname expansion\fP, but the filenames generated
+need not exist. Patterns to be brace expanded take
+the form of an optional
+.IR preamble ,
+followed by either a series of comma-separated strings or
+a sequence expression between a pair of braces, followed by
+an optional
+.IR postscript .
+The preamble is prefixed to each string contained
+within the braces, and the postscript is then appended
+to each resulting string, expanding left to right.
+.PP
+Brace expansions may be nested. The results of each expanded
+string are not sorted; left to right order is preserved.
+For example, a\fB{\fPd,c,b\fB}\fPe expands into `ade ace abe'.
+.PP
+A sequence expression takes the form
+\fB{\fP\fIx\fP\fB..\fP\fIy\fP\fB[..\fP\fIincr\fP\fB]}\fP,
+where \fIx\fP and \fIy\fP are either integers or single characters,
+and \fIincr\fP, an optional increment, is an integer.
+When integers are supplied, the expression expands to each number between
+\fIx\fP and \fIy\fP, inclusive.
+Supplied integers may be prefixed with \fI0\fP to force each term to have the
+same width.
+When either \fIx\fP or \fPy\fP begins with a zero, the shell
+attempts to force all generated terms to contain the same number of digits,
+zero-padding where necessary.
+When characters are supplied, the expression expands to each character
+lexicographically between \fIx\fP and \fIy\fP, inclusive,
+using the default C locale.
+Note that both \fIx\fP and \fIy\fP must be of the same type.
+When the increment is supplied, it is used as the difference between
+each term. The default increment is 1 or \-1 as appropriate.
+.PP
+Brace expansion is performed before any other expansions,
+and any characters special to other expansions are preserved
+in the result. It is strictly textual.
+.B Bash
+does not apply any syntactic interpretation to the context of the
+expansion or the text between the braces.
+.PP
+A correctly-formed brace expansion must contain unquoted opening
+and closing braces, and at least one unquoted comma or a valid
+sequence expression.
+Any incorrectly formed brace expansion is left unchanged.
+A \fB{\fP or \fB,\fP may be quoted with a backslash to prevent its
+being considered part of a brace expression.
+To avoid conflicts with parameter expansion, the string \fB${\fP
+is not considered eligible for brace expansion, and inhibits brace
+expansion until the closing \fB}\fP.
+.PP
+This construct is typically used as shorthand when the common
+prefix of the strings to be generated is longer than in the
+above example:
+.RS
+.PP
+mkdir /usr/local/src/bash/{old,new,dist,bugs}
+.RE
+or
+.RS
+chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+.RE
+.PP
+Brace expansion introduces a slight incompatibility with
+historical versions of
+.BR sh .
+.B sh
+does not treat opening or closing braces specially when they
+appear as part of a word, and preserves them in the output.
+.B Bash
+removes braces from words as a consequence of brace
+expansion. For example, a word entered to
+.B sh
+as \fIfile{1,2}\fP
+appears identically in the output. The same word is
+output as
+.I file1 file2
+after expansion by
+.BR bash .
+If strict compatibility with
+.B sh
+is desired, start
+.B bash
+with the
+.B +B
+option or disable brace expansion with the
+.B +B
+option to the
+.B set
+command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.SS Tilde Expansion
+.PP
+If a word begins with an unquoted tilde character (`\fB~\fP'), all of
+the characters preceding the first unquoted slash (or all characters,
+if there is no unquoted slash) are considered a \fItilde-prefix\fP.
+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 \fIlogin name\fP.
+If this login name is the null string, the tilde is replaced with the
+value of the shell parameter
+.SM
+.BR HOME .
+If
+.SM
+.B HOME
+is unset, the home directory of the user executing the shell is
+substituted instead.
+Otherwise, the tilde-prefix is replaced with the home directory
+associated with the specified login name.
+.PP
+If the tilde-prefix is a `~+', the value of the shell variable
+.SM
+.B PWD
+replaces the tilde-prefix.
+If the tilde-prefix is a `~\-', the value of the shell variable
+.SM
+.BR OLDPWD ,
+if it is set, is substituted.
+If the characters following the tilde in the tilde-prefix consist
+of a number \fIN\fP, optionally prefixed
+by a `+' or a `\-', the tilde-prefix is replaced with the corresponding
+element from the directory stack, as it would be displayed by the
+.B dirs
+builtin invoked with the tilde-prefix as an argument.
+If the characters following the tilde in the tilde-prefix consist of a
+number without a leading `+' or `\-', `+' is assumed.
+.PP
+If the login name is invalid, or the tilde expansion fails, the word
+is unchanged.
+.PP
+Each variable assignment is checked for unquoted tilde-prefixes immediately
+following a
+.B :
+or the first
+.BR = .
+In these cases, tilde expansion is also performed.
+Consequently, one may use filenames with tildes in assignments to
+.SM
+.BR PATH ,
+.SM
+.BR MAILPATH ,
+and
+.SM
+.BR CDPATH ,
+and the shell assigns the expanded value.
+.PP
+Bash also performs tilde expansion on words satisfying the conditions of
+variable assignments (as described above under
+.SM
+.BR PARAMETERS )
+when they appear as arguments to simple commands.
+Bash does not do this, except for the \fIdeclaration\fP commands listed
+above, when in \fIposix mode\fP.
+.SS Parameter Expansion
+.PP
+The `\fB$\fP' 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.
+.PP
+When braces are used, the matching ending brace is the first `\fB}\fP'
+not escaped by a backslash or within a quoted string, and not within an
+embedded arithmetic expansion, command substitution, or parameter
+expansion.
+.PP
+.PD 0
+.TP
+${\fIparameter\fP}
+The value of \fIparameter\fP is substituted. The braces are required
+when
+.I parameter
+is a positional parameter with more than one digit,
+or when
+.I parameter
+is followed by a character which is not to be
+interpreted as part of its name.
+The \fIparameter\fP is a shell parameter as described above
+\fBPARAMETERS\fP) or an array reference (\fBArrays\fP).
+.PD
+.PP
+If the first character of \fIparameter\fP is an exclamation point (\fB!\fP),
+and \fIparameter\fP is not a \fInameref\fP,
+it introduces a level of indirection.
+\fBBash\fP uses the value formed by expanding the rest of
+\fIparameter\fP as the new \fIparameter\fP; this is then
+expanded and that value is used in the rest of the expansion, rather
+than the expansion of the original \fIparameter\fP.
+This is known as \fIindirect expansion\fP.
+The value is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+If \fIparameter\fP is a nameref, this expands to the name of the
+parameter referenced by \fIparameter\fP instead of performing the
+complete indirect expansion.
+The exceptions to this are the expansions of ${\fB!\fP\fIprefix\fP\fB*\fP} and
+${\fB!\fP\fIname\fP[\fI@\fP]} described below.
+The exclamation point must immediately follow the left brace in order to
+introduce indirection.
+.PP
+In each of the cases below, \fIword\fP is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+.PP
+When not performing substring expansion, using the forms documented below
+(e.g., \fB:-\fP),
+\fBbash\fP tests for a parameter that is unset or null. Omitting the colon
+results in a test only for a parameter that is unset.
+.PP
+.PD 0
+.TP
+${\fIparameter\fP\fB:\-\fP\fIword\fP}
+\fBUse Default Values\fP. If
+.I parameter
+is unset or null, the expansion of
+.I word
+is substituted. Otherwise, the value of
+.I parameter
+is substituted.
+.TP
+${\fIparameter\fP\fB:=\fP\fIword\fP}
+\fBAssign Default Values\fP.
+If
+.I parameter
+is unset or null, the expansion of
+.I word
+is assigned to
+.IR parameter .
+The value of
+.I parameter
+is then substituted. Positional parameters and special parameters may
+not be assigned to in this way.
+.TP
+${\fIparameter\fP\fB:?\fP\fIword\fP}
+\fBDisplay Error if Null or Unset\fP.
+If
+.I parameter
+is null or unset, the expansion of \fIword\fP (or a message to that effect
+if
+.I word
+is not present) is written to the standard error and the shell, if it
+is not interactive, exits. Otherwise, the value of \fIparameter\fP is
+substituted.
+.TP
+${\fIparameter\fP\fB:+\fP\fIword\fP}
+\fBUse Alternate Value\fP.
+If
+.I parameter
+is null or unset, nothing is substituted, otherwise the expansion of
+.I word
+is substituted.
+.TP
+${\fIparameter\fP\fB:\fP\fIoffset\fP}
+.PD 0
+.TP
+${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP}
+.PD
+\fBSubstring Expansion\fP.
+Expands to up to \fIlength\fP characters of the value of \fIparameter\fP
+starting at the character specified by \fIoffset\fP.
+If \fIparameter\fP is \fB@\fP, an indexed array subscripted by
+\fB@\fP or \fB*\fP, or an associative array name, the results differ as
+described below.
+If \fIlength\fP is omitted, expands to the substring of the value of
+\fIparameter\fP starting at the character specified by \fIoffset\fP
+and extending to the end of the value.
+\fIlength\fP and \fIoffset\fP are arithmetic expressions (see
+.SM
+.B
+ARITHMETIC EVALUATION
+below).
+.sp 1
+If \fIoffset\fP evaluates to a number less than zero, the value
+is used as an offset in characters
+from the end of the value of \fIparameter\fP.
+If \fIlength\fP evaluates to a number less than zero,
+it is interpreted as an offset in characters
+from the end of the value of \fIparameter\fP rather than
+a number of characters, and the expansion is the characters between
+\fIoffset\fP and that result.
+Note that a negative offset must be separated from the colon by at least
+one space to avoid being confused with the \fB:-\fP expansion.
+.sp 1
+If \fIparameter\fP is \fB@\fP, the result is \fIlength\fP positional
+parameters beginning at \fIoffset\fP.
+A negative \fIoffset\fP is taken relative to one greater than the greatest
+positional parameter, so an offset of \-1 evaluates to the last positional
+parameter.
+It is an expansion error if \fIlength\fP evaluates to a number less than
+zero.
+.sp 1
+If \fIparameter\fP is an indexed array name subscripted by @ or *,
+the result is the \fIlength\fP
+members of the array beginning with ${\fIparameter\fP[\fIoffset\fP]}.
+A negative \fIoffset\fP is taken relative to one greater than the maximum
+index of the specified array.
+It is an expansion error if \fIlength\fP evaluates to a number less than
+zero.
+.sp 1
+Substring expansion applied to an associative array produces undefined
+results.
+.sp 1
+Substring indexing is zero-based unless the positional parameters
+are used, in which case the indexing starts at 1 by default.
+If \fIoffset\fP is 0, and the positional parameters are used, \fB$0\fP is
+prefixed to the list.
+.TP
+${\fB!\fP\fIprefix\fP\fB*\fP}
+.PD 0
+.TP
+${\fB!\fP\fIprefix\fP\fB@\fP}
+.PD
+\fBNames matching prefix\fP.
+Expands to the names of variables whose names begin with \fIprefix\fP,
+separated by the first character of the
+.SM
+.B IFS
+special variable.
+When \fI@\fP is used and the expansion appears within double quotes, each
+variable name expands to a separate word.
+.TP
+${\fB!\fP\fIname\fP[\fI@\fP]}
+.PD 0
+.TP
+${\fB!\fP\fIname\fP[\fI*\fP]}
+.PD
+\fBList of array keys\fP.
+If \fIname\fP is an array variable, expands to the list of array indices
+(keys) assigned in \fIname\fP.
+If \fIname\fP is not an array, expands to 0 if \fIname\fP is set and null
+otherwise.
+When \fI@\fP is used and the expansion appears within double quotes, each
+key expands to a separate word.
+.TP
+${\fB#\fP\fIparameter\fP}
+\fBParameter length\fP.
+The length in characters of the value of \fIparameter\fP is substituted.
+If
+.I parameter
+is
+.B *
+or
+.BR @ ,
+the value substituted is the number of positional parameters.
+If
+.I parameter
+is an array name subscripted by
+.B *
+or
+.BR @ ,
+the value substituted is the number of elements in the array.
+If
+.I parameter
+is an indexed array name subscripted by a negative number, that number is
+interpreted as relative to one greater than the maximum index of
+\fIparameter\fP, so negative indices count back from the end of the
+array, and an index of \-1 references the last element.
+.TP
+${\fIparameter\fP\fB#\fP\fIword\fP}
+.PD 0
+.TP
+${\fIparameter\fP\fB##\fP\fIword\fP}
+.PD
+\fBRemove matching prefix pattern\fP.
+The
+.I word
+is expanded to produce a pattern just as in pathname
+expansion, and matched against the expanded value of
+.I parameter
+using the rules described under
+.B Pattern Matching
+below.
+If the pattern matches the beginning of
+the value of
+.IR parameter ,
+then the result of the expansion is the expanded value of
+.I parameter
+with the shortest matching pattern (the ``\fB#\fP'' case) or the
+longest matching pattern (the ``\fB##\fP'' case) deleted.
+If
+.I parameter
+is
+.B @
+or
+.BR * ,
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+.I parameter
+is an array variable subscripted with
+.B @
+or
+.BR * ,
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+.TP
+${\fIparameter\fP\fB%\fP\fIword\fP}
+.PD 0
+.TP
+${\fIparameter\fP\fB%%\fP\fIword\fP}
+.PD
+\fBRemove matching suffix pattern\fP.
+The \fIword\fP is expanded to produce a pattern just as in
+pathname expansion, and matched against the expanded value of
+.I parameter
+using the rules described under
+.B Pattern Matching
+below.
+If the pattern matches a trailing portion of the expanded value of
+.IR parameter ,
+then the result of the expansion is the expanded value of
+.I parameter
+with the shortest matching pattern (the ``\fB%\fP'' case) or the
+longest matching pattern (the ``\fB%%\fP'' case) deleted.
+If
+.I parameter
+is
+.B @
+or
+.BR * ,
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+.I parameter
+is an array variable subscripted with
+.B @
+or
+.BR * ,
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+.TP
+${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP}
+\fBPattern substitution\fP.
+The \fIpattern\fP is expanded to produce a pattern just as in
+pathname expansion,
+\fIParameter\fP is expanded and the longest match of \fIpattern\fP
+against its value is replaced with \fIstring\fP.
+The match is performed using the rules described under
+.B Pattern Matching
+below.
+If \fIpattern\fP begins with \fB/\fP, all matches of \fIpattern\fP are
+replaced with \fIstring\fP. Normally only the first match is replaced.
+If \fIpattern\fP begins with \fB#\fP, it must match at the beginning
+of the expanded value of \fIparameter\fP.
+If \fIpattern\fP begins with \fB%\fP, it must match at the end
+of the expanded value of \fIparameter\fP.
+If \fIstring\fP is null, matches of \fIpattern\fP are deleted
+and the \fB/\fP following \fIpattern\fP may be omitted.
+If the
+.B nocasematch
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+If
+.I parameter
+is
+.B @
+or
+.BR * ,
+the substitution operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+.I parameter
+is an array variable subscripted with
+.B @
+or
+.BR * ,
+the substitution operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+.TP
+${\fIparameter\fP\fB^\fP\fIpattern\fP}
+.PD 0
+.TP
+${\fIparameter\fP\fB^^\fP\fIpattern\fP}
+.TP
+${\fIparameter\fP\fB,\fP\fIpattern\fP}
+.TP
+${\fIparameter\fP\fB,,\fP\fIpattern\fP}
+.PD
+\fBCase modification\fP.
+This expansion modifies the case of alphabetic characters in \fIparameter\fP.
+The \fIpattern\fP is expanded to produce a pattern just as in
+pathname expansion.
+Each character in the expanded value of \fIparameter\fP is tested against
+\fIpattern\fP, and, if it matches the pattern, its case is converted.
+The pattern should not attempt to match more than one character.
+The \fB^\fP operator converts lowercase letters matching \fIpattern\fP
+to uppercase; the \fB,\fP operator converts matching uppercase letters
+to lowercase.
+The \fB^^\fP and \fB,,\fP expansions convert each matched character in the
+expanded value; the \fB^\fP and \fB,\fP expansions match and convert only
+the first character in the expanded value.
+If \fIpattern\fP is omitted, it is treated like a \fB?\fP, which matches
+every character.
+If
+.I parameter
+is
+.B @
+or
+.BR * ,
+the case modification operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+.I parameter
+is an array variable subscripted with
+.B @
+or
+.BR * ,
+the case modification operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+.TP
+${\fIparameter\fP\fB@\fP\fIoperator\fP}
+\fBParameter transformation\fP.
+The expansion is either a transformation of the value of \fIparameter\fP
+or information about \fIparameter\fP itself, depending on the value of
+\fIoperator\fP. Each \fIoperator\fP is a single letter:
+.sp 1
+.RS
+.PD 0
+.TP
+.B Q
+The expansion is a string that is the value of \fIparameter\fP quoted in a
+format that can be reused as input.
+.TP
+.B E
+The expansion is a string that is the value of \fIparameter\fP with backslash
+escape sequences expanded as with the \fB$'...'\fP quoting mechanism.
+.TP
+.B P
+The expansion is a string that is the result of expanding the value of
+\fIparameter\fP as if it were a prompt string (see \fBPROMPTING\fP below).
+.TP
+.B A
+The expansion is a string in the form of
+an assignment statement or \fBdeclare\fP command that, if
+evaluated, will recreate \fIparameter\fP with its attributes and value.
+.TP
+.B a
+The expansion is a string consisting of flag values representing
+\fIparameter\fP's attributes.
+.PD
+.PP
+If
+.I parameter
+is
+.B @
+or
+.BR * ,
+the operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+.I parameter
+is an array variable subscripted with
+.B @
+or
+.BR * ,
+the operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+.sp 1
+The result of the expansion is subject to word splitting and pathname
+expansion as described below.
+.RE
+.SS Command Substitution
+.PP
+\fICommand substitution\fP allows the output of a command to replace
+the command name. There are two forms:
+.RS
+.PP
+\fB$(\fP\fIcommand\fP\|\fB)\fP
+.RE
+or
+.RS
+\fB\`\fP\fIcommand\fP\fB\`\fP
+.RE
+.PP
+.B Bash
+performs the expansion by executing \fIcommand\fP in a subshell environment
+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 \fB$(cat \fIfile\fP)\fR can be replaced by
+the equivalent but faster \fB$(< \fIfile\fP)\fR.
+.PP
+When the old-style backquote form of substitution is used,
+backslash retains its literal meaning except when followed by
+.BR $ ,
+.BR \` ,
+or
+.BR \e .
+The first backquote not preceded by a backslash terminates the
+command substitution.
+When using the $(\^\fIcommand\fP\|) form, all characters between the
+parentheses make up the command; none are treated specially.
+.PP
+Command substitutions may be nested. To nest when using the backquoted form,
+escape the inner backquotes with backslashes.
+.PP
+If the substitution appears within double quotes, word splitting and
+pathname expansion are not performed on the results.
+.SS Arithmetic Expansion
+.PP
+Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result. The format for arithmetic expansion is:
+.RS
+.PP
+\fB$((\fP\fIexpression\fP\fB))\fP
+.RE
+.PP
+The
+.I 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 and variable expansion,
+command substitution, and quote removal.
+The result is treated as the arithmetic expression to be evaluated.
+Arithmetic expansions may be nested.
+.PP
+The evaluation is performed according to the rules listed below under
+.SM
+.BR "ARITHMETIC EVALUATION" .
+If
+.I expression
+is invalid,
+.B bash
+prints a message indicating failure and no substitution occurs.
+.SS Process Substitution
+.PP
+\fIProcess substitution\fP allows a process's input or output to be
+referred to using a filename.
+It takes the form of
+\fB<(\fP\fIlist\^\fP\fB)\fP
+or
+\fB>(\fP\fIlist\^\fP\fB)\fP.
+The process \fIlist\fP is run asynchronously, and its input or output
+appears as a filename.
+This filename is
+passed as an argument to the current command as the result of the
+expansion.
+If the \fB>(\fP\fIlist\^\fP\fB)\fP form is used, writing to
+the file will provide input for \fIlist\fP. If the
+\fB<(\fP\fIlist\^\fP\fB)\fP form is used, the file passed as an
+argument should be read to obtain the output of \fIlist\fP.
+Process substitution is supported on systems that support named
+pipes (\fIFIFOs\fP) or the \fB/dev/fd\fP method of naming open files.
+.PP
+When available, process substitution is performed
+simultaneously with parameter and variable expansion,
+command substitution,
+and arithmetic expansion.
+.SS Word Splitting
+.PP
+The shell scans the results of
+parameter expansion,
+command substitution,
+and
+arithmetic expansion
+that did not occur within double quotes for
+.IR "word splitting" .
+.PP
+The shell treats each character of
+.SM
+.B IFS
+as a delimiter, and splits the results of the other
+expansions into words using these characters as field terminators.
+If
+.SM
+.B IFS
+is unset, or its
+value is exactly
+.BR <space><tab><newline> ,
+the default, then
+sequences of
+.BR <space> ,
+.BR <tab> ,
+and
+.B <newline>
+at the beginning and end of the results of the previous
+expansions are ignored, and
+any sequence of
+.SM
+.B IFS
+characters not at the beginning or end serves to delimit words.
+If
+.SM
+.B IFS
+has a value other than the default, then sequences of
+the whitespace characters
+.BR space ,
+.BR tab ,
+and
+.B newline
+are ignored at the beginning and end of the
+word, as long as the whitespace character is in the
+value of
+.SM
+.B IFS
+(an
+.SM
+.B IFS
+whitespace character).
+Any character in
+.SM
+.B IFS
+that is not
+.SM
+.B IFS
+whitespace, along with any adjacent
+.SM
+.B IFS
+whitespace characters, delimits a field.
+A sequence of
+.SM
+.B IFS
+whitespace characters is also treated as a delimiter.
+If the value of
+.SM
+.B IFS
+is null, no word splitting occurs.
+.PP
+Explicit null arguments (\^\f3"\^"\fP or \^\f3\(aq\^\(aq\fP\^) are retained
+and passed to commands as empty strings.
+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
+and passed to a command as an empty string.
+When a quoted null argument appears as part of a word whose expansion is
+non-null, the null argument is removed.
+That is, the word
+\f(CW\-d\(aq\^\(aq\fP becomes \f(CW\-d\fP after word splitting and
+null argument removal.
+.PP
+Note that if no expansion occurs, no splitting
+is performed.
+.SS Pathname Expansion
+.PP
+After word splitting,
+unless the
+.B \-f
+option has been set,
+.B bash
+scans each word for the characters
+.BR * ,
+.BR ? ,
+and
+.BR [ .
+If one of these characters appears, then the word is
+regarded as a
+.IR pattern ,
+and replaced with an alphabetically sorted list of
+filenames matching the pattern
+(see
+.SM
+.B "Pattern Matching"
+below).
+If no matching filenames are found,
+and the shell option
+.B nullglob
+is not enabled, the word is left unchanged.
+If the
+.B nullglob
+option is set, and no matches are found,
+the word is removed.
+If the
+.B failglob
+shell option is set, and no matches are found, an error message
+is printed and the command is not executed.
+If the shell option
+.B nocaseglob
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+When a pattern is used for pathname expansion,
+the character
+.B ``.''
+at the start of a name or immediately following a slash
+must be matched explicitly, unless the shell option
+.B dotglob
+is set.
+The filenames
+.B ``.''
+and
+.B ``..''
+must always be matched explicitly, even if
+.B dotglob
+is set.
+In other cases, the
+.B ``.''
+character is not treated specially.
+When matching a pathname, the slash character must always be
+matched explicitly by a slash in the pattern, but in other matching
+contexts it can be matched by a special pattern character as described
+below under
+.SM
+.BR "Pattern Matching" .
+See the description of
+.B shopt
+below under
+.SM
+.B SHELL BUILTIN COMMANDS
+for a description of the
+.BR nocaseglob ,
+.BR nullglob ,
+.BR failglob ,
+and
+.B dotglob
+shell options.
+.PP
+The
+.SM
+.B GLOBIGNORE
+shell variable may be used to restrict the set of file names matching a
+.IR pattern .
+If
+.SM
+.B GLOBIGNORE
+is set, each matching file name that also matches one of the patterns in
+.SM
+.B GLOBIGNORE
+is removed from the list of matches.
+If the \fBnocaseglob\fP option is set, the matching against the patterns in
+.SM
+.B GLOBIGNORE
+is performed without regard to case.
+The filenames
+.B ``.''
+and
+.B ``..''
+are always ignored when
+.SM
+.B GLOBIGNORE
+is set and not null. However, setting
+.SM
+.B GLOBIGNORE
+to a non-null value has the effect of enabling the
+.B dotglob
+shell option, so all other filenames beginning with a
+.B ``.''
+will match.
+To get the old behavior of ignoring filenames beginning with a
+.BR ``.'' ,
+make
+.B ``.*''
+one of the patterns in
+.SM
+.BR GLOBIGNORE .
+The
+.B dotglob
+option is disabled when
+.SM
+.B GLOBIGNORE
+is unset.
+The pattern matching honors the setting of the \fBextglob\fP shell
+option.
+.PP
+\fBPattern Matching\fP
+.PP
+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.
+.PP
+The special pattern characters have the following meanings:
+.PP
+.PD 0
+.RS
+.TP
+.B *
+Matches any string, including the null string.
+When the \fBglobstar\fP shell option is enabled, and \fB*\fP is used in
+a pathname expansion context, two adjacent \fB*\fPs used as a single
+pattern will match all files and zero or more directories and
+subdirectories.
+If followed by a \fB/\fP, two adjacent \fB*\fPs will match only directories
+and subdirectories.
+.TP
+.B ?
+Matches any single character.
+.TP
+.B [...]
+Matches any one of the enclosed characters. A pair of characters
+separated by a hyphen denotes a
+\fIrange expression\fP;
+any character that falls between those two characters, inclusive,
+using the current locale's collating sequence and character set,
+is matched. If the first character following the
+.B [
+is a
+.B !
+or a
+.B ^
+then any character not enclosed is matched.
+The sorting order of characters in range expressions is determined by
+the current locale and the values of the
+.SM
+.B LC_COLLATE
+or
+.SM
+.B LC_ALL
+shell variables, if set.
+To obtain the traditional interpretation of range expressions, where
+.B [a\-d]
+is equivalent to
+.BR [abcd] ,
+set value of the
+.B LC_ALL
+shell variable to
+.BR C ,
+or enable the
+.B globasciiranges
+shell option.
+A
+.B \-
+may be matched by including it as the first or last character
+in the set.
+A
+.B ]
+may be matched by including it as the first character
+in the set.
+.br
+.if t .sp 0.5
+.if n .sp 1
+Within
+.B [
+and
+.BR ] ,
+\fIcharacter classes\fP can be specified using the syntax
+\fB[:\fP\fIclass\fP\fB:]\fP, where \fIclass\fP is one of the
+following classes defined in the POSIX standard:
+.PP
+.RS
+.B
+.if n alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
+.if t alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
+.br
+A character class matches any character belonging to that class.
+The \fBword\fP character class matches letters, digits, and the character _.
+.br
+.if t .sp 0.5
+.if n .sp 1
+Within
+.B [
+and
+.BR ] ,
+an \fIequivalence class\fP can be specified using the syntax
+\fB[=\fP\fIc\fP\fB=]\fP, which matches all characters with the
+same collation weight (as defined by the current locale) as
+the character \fIc\fP.
+.br
+.if t .sp 0.5
+.if n .sp 1
+Within
+.B [
+and
+.BR ] ,
+the syntax \fB[.\fP\fIsymbol\fP\fB.]\fP matches the collating symbol
+\fIsymbol\fP.
+.RE
+.RE
+.PD
+.PP
+If the \fBextglob\fP shell option is enabled using the \fBshopt\fP
+builtin, several extended pattern matching operators are recognized.
+In the following description, a \fIpattern-list\fP is a list of one
+or more patterns separated by a \fB|\fP.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+.sp 1
+.PD 0
+.RS
+.TP
+\fB?(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches zero or one occurrence of the given patterns
+.TP
+\fB*(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches zero or more occurrences of the given patterns
+.TP
+\fB+(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches one or more occurrences of the given patterns
+.TP
+\fB@(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches one of the given patterns
+.TP
+\fB!(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches anything except one of the given patterns
+.RE
+.PD
+.PP
+Complicated extended pattern matching against long strings is slow,
+especially when the patterns contain alternations and the strings
+contain multiple matches.
+Using separate matches against shorter strings, or using arrays of
+strings instead of a single long string, may be faster.
+.SS Quote Removal
+.PP
+After the preceding expansions, all unquoted occurrences of the
+characters
+.BR \e ,
+.BR \(aq ,
+and \^\f3"\fP\^ that did not result from one of the above
+expansions are removed.
+.SH REDIRECTION
+Before a command is executed, its input and output
+may be
+.I redirected
+using a special notation interpreted by the shell.
+Redirection allows commands' file handles to be
+duplicated, opened, closed,
+made to refer to different files,
+and can change the files the command reads from and writes to.
+Redirection may also be used to modify file handles in the
+current shell execution environment.
+The following redirection
+operators may precede or appear anywhere within a
+.I simple command
+or may follow a
+.IR command .
+Redirections are processed in the order they appear, from
+left to right.
+.PP
+Each redirection that may be preceded by a file descriptor number
+may instead be preceded by a word of the form {\fIvarname\fP}.
+In this case, for each redirection operator except
+>&- and <&-, the shell will allocate a file descriptor greater
+than or equal to 10 and assign it to \fIvarname\fP.
+If >&- or <&- is preceded
+by {\fIvarname\fP}, the value of \fIvarname\fP defines the file
+descriptor to close.
+If {\fIvarname\fP} is supplied, the redirection persists beyond
+the scope of the command, allowing the shell programmer to manage
+the file descriptor himself.
+.PP
+In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is
+.BR < ,
+the redirection refers to the standard input (file descriptor
+0). If the first character of the redirection operator is
+.BR > ,
+the redirection refers to the standard output (file descriptor
+1).
+.PP
+The word following the redirection operator in the following
+descriptions, unless otherwise noted, is subjected to
+brace expansion, tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, quote removal,
+pathname expansion, and word splitting.
+If it expands to more than one word,
+.B bash
+reports an error.
+.PP
+Note that the order of redirections is significant. For example,
+the command
+.RS
+.PP
+ls \fB>\fP dirlist 2\fB>&\fP1
+.RE
+.PP
+directs both standard output and standard error to the file
+.IR dirlist ,
+while the command
+.RS
+.PP
+ls 2\fB>&\fP1 \fB>\fP dirlist
+.RE
+.PP
+directs only the standard output to file
+.IR dirlist ,
+because the standard error was duplicated from the standard output
+before the standard output was redirected to
+.IR dirlist .
+.PP
+\fBBash\fP handles several filenames specially when they are used in
+redirections, as described in the following table.
+If the operating system on which \fBbash\fP is running provides these
+special files, bash will use them; otherwise it will emulate them
+internally with the behavior described below.
+.RS
+.PP
+.PD 0
+.TP
+.B /dev/fd/\fIfd\fP
+If \fIfd\fP is a valid integer, file descriptor \fIfd\fP is duplicated.
+.TP
+.B /dev/stdin
+File descriptor 0 is duplicated.
+.TP
+.B /dev/stdout
+File descriptor 1 is duplicated.
+.TP
+.B /dev/stderr
+File descriptor 2 is duplicated.
+.TP
+.B /dev/tcp/\fIhost\fP/\fIport\fP
+If \fIhost\fP is a valid hostname or Internet address, and \fIport\fP
+is an integer port number or service name, \fBbash\fP attempts to open
+the corresponding TCP socket.
+.TP
+.B /dev/udp/\fIhost\fP/\fIport\fP
+If \fIhost\fP is a valid hostname or Internet address, and \fIport\fP
+is an integer port number or service name, \fBbash\fP attempts to open
+the corresponding UDP socket.
+.PD
+.RE
+.PP
+A failure to open or create a file causes the redirection to fail.
+.PP
+Redirections using file descriptors greater than 9 should be used with
+care, as they may conflict with file descriptors the shell uses
+internally.
+.SS Redirecting Input
+.PP
+Redirection of input causes the file whose name results from
+the expansion of
+.I word
+to be opened for reading on file descriptor
+.IR n ,
+or the standard input (file descriptor 0) if
+.I n
+is not specified.
+.PP
+The general format for redirecting input is:
+.RS
+.PP
+[\fIn\fP]\fB<\fP\fIword\fP
+.RE
+.SS Redirecting Output
+.PP
+Redirection of output causes the file whose name results from
+the expansion of
+.I word
+to be opened for writing on file descriptor
+.IR n ,
+or the standard output (file descriptor 1) if
+.I n
+is not specified. If the file does not exist it is created;
+if it does exist it is truncated to zero size.
+.PP
+The general format for redirecting output is:
+.RS
+.PP
+[\fIn\fP]\fB>\fP\fIword\fP
+.RE
+.PP
+If the redirection operator is
+.BR > ,
+and the
+.B noclobber
+option to the
+.B set
+builtin has been enabled, the redirection will fail if the file
+whose name results from the expansion of \fIword\fP exists and is
+a regular file.
+If the redirection operator is
+.BR >| ,
+or the redirection operator is
+.B >
+and the
+.B noclobber
+option to the
+.B set
+builtin command is not enabled, the redirection is attempted even
+if the file named by \fIword\fP exists.
+.SS Appending Redirected Output
+.PP
+Redirection of output in this fashion
+causes the file whose name results from
+the expansion of
+.I word
+to be opened for appending on file descriptor
+.IR n ,
+or the standard output (file descriptor 1) if
+.I n
+is not specified. If the file does not exist it is created.
+.PP
+The general format for appending output is:
+.RS
+.PP
+[\fIn\fP]\fB>>\fP\fIword\fP
+.RE
+.PP
+.SS Redirecting Standard Output and Standard Error
+.PP
+This construct 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
+.IR word .
+.PP
+There are two formats for redirecting standard output and
+standard error:
+.RS
+.PP
+\fB&>\fP\fIword\fP
+.RE
+and
+.RS
+\fB>&\fP\fIword\fP
+.RE
+.PP
+Of the two forms, the first is preferred.
+This is semantically equivalent to
+.RS
+.PP
+\fB>\fP\fIword\fP 2\fB>&\fP1
+.RE
+.PP
+When using the second form, \fIword\fP may not expand to a number or
+\fB\-\fP. If it does, other redirection operators apply
+(see \fBDuplicating File Descriptors\fP below) for compatibility
+reasons.
+.SS Appending Standard Output and Standard Error
+.PP
+This construct allows both the
+standard output (file descriptor 1) and
+the standard error output (file descriptor 2)
+to be appended to the file whose name is the
+expansion of
+.IR word .
+.PP
+The format for appending standard output and standard error is:
+.RS
+.PP
+\fB&>>\fP\fIword\fP
+.RE
+.PP
+This is semantically equivalent to
+.RS
+.PP
+\fB>>\fP\fIword\fP 2\fB>&\fP1
+.RE
+.PP
+(see \fBDuplicating File Descriptors\fP below).
+.SS Here Documents
+.PP
+This type of redirection instructs the shell to read input from the
+current source until a line containing only
+.I delimiter
+(with no trailing blanks)
+is seen. All of
+the lines read up to that point are then used as the standard
+input (or file descriptor \fIn\fP if \fIn\fP is specified) for a command.
+.PP
+The format of here-documents is:
+.RS
+.PP
+.nf
+[\fIn\fP]\fB<<\fP[\fB\-\fP]\fIword\fP
+ \fIhere-document\fP
+\fIdelimiter\fP
+.fi
+.RE
+.PP
+No parameter and variable expansion, command substitution,
+arithmetic expansion, or pathname expansion is performed on
+.IR word .
+If any part of
+.I word
+is quoted, the
+.I delimiter
+is the result of quote removal on
+.IR word ,
+and the lines in the here-document are not expanded.
+If \fIword\fP is unquoted,
+all lines of the here-document are subjected to
+parameter expansion, command substitution, and arithmetic expansion,
+the character sequence
+.B \e<newline>
+is ignored, and
+.B \e
+must be used to quote the characters
+.BR \e ,
+.BR $ ,
+and
+.BR \` .
+.PP
+If the redirection operator is
+.BR <<\- ,
+then all leading tab characters are stripped from input lines and the
+line containing
+.IR delimiter .
+This allows
+here-documents within shell scripts to be indented in a
+natural fashion.
+.SS "Here Strings"
+A variant of here documents, the format is:
+.RS
+.PP
+.nf
+[\fIn\fP]\fB<<<\fP\fIword\fP
+.fi
+.RE
+.PP
+The \fIword\fP undergoes
+tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal.
+Pathname expansion and word splitting are not performed.
+The result is supplied as a single string, with a newline appended,
+to the command on its
+standard input (or file descriptor \fIn\fP if \fIn\fP is specified).
+.SS "Duplicating File Descriptors"
+.PP
+The redirection operator
+.RS
+.PP
+[\fIn\fP]\fB<&\fP\fIword\fP
+.RE
+.PP
+is used to duplicate input file descriptors.
+If
+.I word
+expands to one or more digits, the file descriptor denoted by
+.I n
+is made to be a copy of that file descriptor.
+If the digits in
+.I word
+do not specify a file descriptor open for input, a redirection error occurs.
+If
+.I word
+evaluates to
+.BR \- ,
+file descriptor
+.I n
+is closed. If
+.I n
+is not specified, the standard input (file descriptor 0) is used.
+.PP
+The operator
+.RS
+.PP
+[\fIn\fP]\fB>&\fP\fIword\fP
+.RE
+.PP
+is used similarly to duplicate output file descriptors. If
+.I n
+is not specified, the standard output (file descriptor 1) is used.
+If the digits in
+.I word
+do not specify a file descriptor open for output, a redirection error occurs.
+If
+.I word
+evaluates to
+.BR \- ,
+file descriptor
+.I n
+is closed.
+As a special case, if \fIn\fP is omitted, and \fIword\fP does not
+expand to one or more digits or \fB\-\fP, the standard output and standard
+error are redirected as described previously.
+.SS "Moving File Descriptors"
+.PP
+The redirection operator
+.RS
+.PP
+[\fIn\fP]\fB<&\fP\fIdigit\fP\fB\-\fP
+.RE
+.PP
+moves the file descriptor \fIdigit\fP to file descriptor
+.IR n ,
+or the standard input (file descriptor 0) if \fIn\fP is not specified.
+\fIdigit\fP is closed after being duplicated to \fIn\fP.
+.PP
+Similarly, the redirection operator
+.RS
+.PP
+[\fIn\fP]\fB>&\fP\fIdigit\fP\fB\-\fP
+.RE
+.PP
+moves the file descriptor \fIdigit\fP to file descriptor
+.IR n ,
+or the standard output (file descriptor 1) if \fIn\fP is not specified.
+.SS "Opening File Descriptors for Reading and Writing"
+.PP
+The redirection operator
+.RS
+.PP
+[\fIn\fP]\fB<>\fP\fIword\fP
+.RE
+.PP
+causes the file whose name is the expansion of
+.I word
+to be opened for both reading and writing on file descriptor
+.IR n ,
+or on file descriptor 0 if
+.I n
+is not specified. If the file does not exist, it is created.
+.SH ALIASES
+\fIAliases\fP 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
+.B alias
+and
+.B unalias
+builtin commands (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+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 \fB/\fP, \fB$\fP, \fB\`\fP, and \fB=\fP and
+any of the shell \fImetacharacters\fP 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
+.B ls
+to
+.BR "ls \-F" ,
+for instance, and
+.B bash
+does not try to recursively expand the replacement text.
+If the last character of the alias value is a
+.IR blank ,
+then the next command
+word following the alias is also checked for alias expansion.
+.PP
+Aliases are created and listed with the
+.B alias
+command, and removed with the
+.B unalias
+command.
+.PP
+There is no mechanism for using arguments in the replacement text.
+If arguments are needed, a shell function should be used (see
+.SM
+.B FUNCTIONS
+below).
+.PP
+Aliases are not expanded when the shell is not interactive, unless
+the
+.B expand_aliases
+shell option is set using
+.B shopt
+(see the description of
+.B shopt
+under
+.SM
+\fBSHELL BUILTIN COMMANDS\fP
+below).
+.PP
+The rules concerning the definition and use of aliases are
+somewhat confusing.
+.B Bash
+always reads at least one complete line of input,
+and all lines that make up a compound command,
+before executing any of the commands on that line or the compound command.
+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 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
+.B alias
+in compound commands.
+.PP
+For almost every purpose, aliases are superseded by
+shell functions.
+.SH FUNCTIONS
+A shell function, defined as described above under
+.SM
+.BR "SHELL GRAMMAR" ,
+stores a series of commands for later execution.
+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.
+Functions are executed in the context of the
+current shell; no new process is created to interpret
+them (contrast this with the execution of a shell script).
+When a function is executed, the arguments to the
+function become the positional parameters
+during its execution.
+The special parameter
+.B #
+is updated to reflect the change. Special parameter \fB0\fP
+is unchanged.
+The first element of the
+.SM
+.B FUNCNAME
+variable is set to the name of the function while the function
+is executing.
+.PP
+All other aspects of the shell execution
+environment are identical between a function and its caller
+with these exceptions: the
+.SM
+.B DEBUG
+and
+.B RETURN
+traps (see the description of the
+.B trap
+builtin under
+.SM
+.B SHELL BUILTIN COMMANDS
+below) are not inherited unless the function has been given the
+\fBtrace\fP attribute (see the description of the
+.SM
+.B declare
+builtin below) or the
+\fB\-o functrace\fP shell option has been enabled with
+the \fBset\fP builtin
+(in which case all functions inherit the \fBDEBUG\fP and \fBRETURN\fP traps),
+and the
+.SM
+.B ERR
+trap is not inherited unless the \fB\-o errtrace\fP shell option has
+been enabled.
+.PP
+Variables local to the function may be declared with the
+.B local
+builtin command. Ordinarily, variables and their values
+are shared between the function and its caller.
+If a variable is declared \fBlocal\fP, the variable's visible scope
+is restricted to that function and its children (including the functions
+it calls).
+Local variables "shadow" variables with the same name declared at
+previous scopes.
+For instance, a local variable declared in a function
+hides a global variable of the same name: references and assignments
+refer to the local variable, leaving the global variable unmodified.
+When the function returns, the global variable is once again visible.
+.PP
+The shell uses \fIdynamic scoping\fP to control a variable's visibility
+within functions.
+With dynamic scoping, visible variables and their values
+are a result of the sequence of function calls that caused execution
+to reach the current function.
+The value of a variable that a function sees depends
+on its value within its caller, if any, whether that caller is
+the "global" scope or another shell function.
+This is also the value that a local variable
+declaration "shadows", and the value that is restored when the function
+returns.
+.PP
+For example, if a variable \fIvar\fP is declared as local in function
+\fIfunc1\fP, and \fIfunc1\fP calls another function \fIfunc2\fP,
+references to \fIvar\fP made from within \fIfunc2\fP will resolve to the
+local variable \fIvar\fP from \fIfunc1\fP, shadowing any global variable
+named \fIvar\fP.
+.PP
+The \fBunset\fP builtin also acts using the same dynamic scope: if a
+variable is local to the current scope, \fBunset\fP will unset it;
+otherwise the unset will refer to the variable found in any calling scope
+as described above.
+If a variable at the current local scope is unset, it will remain so
+until it is reset in that scope or until the function returns.
+Once the function returns, any instance of the variable at a previous
+scope will become visible.
+If the unset acts on a variable at a previous scope, any instance of a
+variable with that name that had been shadowed will become visible.
+.PP
+The \fBFUNCNEST\fP variable, if set to a numeric value greater
+than 0, defines a maximum function nesting level. Function
+invocations that exceed the limit cause the entire command to
+abort.
+.PP
+If the builtin command
+.B return
+is executed in a function, the function completes and
+execution resumes with the next command after the function
+call.
+Any command associated with the \fBRETURN\fP trap is executed
+before execution resumes.
+When a function completes, the values of the
+positional parameters and the special parameter
+.B #
+are restored to the values they had prior to the function's
+execution.
+.PP
+Function names and definitions may be listed with the
+.B \-f
+option to the
+.B declare
+or
+.B typeset
+builtin commands. The
+.B \-F
+option to
+.B declare
+or
+.B typeset
+will list the function names only
+(and optionally the source file and line number, if the \fBextdebug\fP
+shell option is enabled).
+Functions may be exported so that subshells
+automatically have them defined with the
+.B \-f
+option to the
+.B export
+builtin.
+A function definition may be deleted using the \fB\-f\fP option to
+the
+.B unset
+builtin.
+.PP
+Functions may be recursive.
+The \fBFUNCNEST\fP variable may be used to limit the depth of the
+function call stack and restrict the number of function invocations.
+By default, no limit is imposed on the number of recursive calls.
+.SH "ARITHMETIC EVALUATION"
+The shell allows arithmetic expressions to be evaluated, under
+certain circumstances (see the \fBlet\fP and \fBdeclare\fP builtin
+commands, the \fB((\fP compound command, and \fBArithmetic Expansion\fP).
+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.
+.PP
+.PD 0
+.TP
+.B \fIid\fP++ \fIid\fP\-\-
+variable post-increment and post-decrement
+.TP
+.B \- +
+unary minus and plus
+.TP
+.B ++\fIid\fP \-\-\fIid\fP
+variable pre-increment and pre-decrement
+.TP
+.B ! ~
+logical and bitwise negation
+.TP
+.B **
+exponentiation
+.TP
+.B * / %
+multiplication, division, remainder
+.TP
+.B + \-
+addition, subtraction
+.TP
+.B << >>
+left and right bitwise shifts
+.TP
+.B <= >= < >
+comparison
+.TP
+.B == !=
+equality and inequality
+.TP
+.B &
+bitwise AND
+.TP
+.B ^
+bitwise exclusive OR
+.TP
+.B |
+bitwise OR
+.TP
+.B &&
+logical AND
+.TP
+.B ||
+logical OR
+.TP
+.B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP
+conditional operator
+.TP
+.B = *= /= %= += \-= <<= >>= &= ^= |=
+assignment
+.TP
+.B \fIexpr1\fP , \fIexpr2\fP
+comma
+.PD
+.PP
+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
+\fIinteger\fP attribute using \fBdeclare \-i\fP is assigned a value.
+A null value evaluates to 0.
+A shell variable need not have its \fIinteger\fP attribute
+turned on to be used in an expression.
+.PP
+Constants with a leading 0 are interpreted as octal numbers.
+A leading 0x or 0X denotes hexadecimal.
+Otherwise, numbers take the form [\fIbase#\fP]n, where the optional \fIbase\fP
+is a decimal number between 2 and 64 representing the arithmetic
+base, and \fIn\fP is a number in that base.
+If \fIbase#\fP is omitted, then base 10 is used.
+When specifying \fIn\fP,
+the digits greater than 9 are represented by the lowercase letters,
+the uppercase letters, @, and _, in that order.
+If \fIbase\fP is less than or equal to 36, lowercase and uppercase
+letters may be used interchangeably to represent numbers between 10
+and 35.
+.PP
+Operators are evaluated in order of precedence. Sub-expressions in
+parentheses are evaluated first and may override the precedence
+rules above.
+.SH "CONDITIONAL EXPRESSIONS"
+Conditional expressions are used by the \fB[[\fP compound command and
+the \fBtest\fP and \fB[\fP builtin commands to test file attributes
+and perform string and arithmetic comparisons.
+The \fBtest\fP abd \fB[\fP commands determine their behavior based on
+the number of arguments; see the descriptions of those commands for any
+other command-specific actions.
+.PP
+Expressions are formed from the following unary or binary primaries.
+\fBBash\fP handles several filenames specially when they are used in
+expressions.
+If the operating system on which \fBbash\fP is running provides these
+special files, bash will use them; otherwise it will emulate them
+internally with this behavior:
+If any \fIfile\fP argument to one of the primaries is of the form
+\fI/dev/fd/n\fP, then file descriptor \fIn\fP is checked.
+If the \fIfile\fP argument to one of the primaries is one of
+\fI/dev/stdin\fP, \fI/dev/stdout\fP, or \fI/dev/stderr\fP, file
+descriptor 0, 1, or 2, respectively, is checked.
+.PP
+Unless otherwise specified, primaries that operate on files follow symbolic
+links and operate on the target of the link, rather than the link itself.
+.if t .sp 0.5
+.if n .sp 1
+When used with \fB[[\fP, the \fB<\fP and \fB>\fP operators sort
+lexicographically using the current locale.
+The \fBtest\fP command sorts using ASCII ordering.
+.sp 1
+.PD 0
+.TP
+.B \-a \fIfile\fP
+True if \fIfile\fP exists.
+.TP
+.B \-b \fIfile\fP
+True if \fIfile\fP exists and is a block special file.
+.TP
+.B \-c \fIfile\fP
+True if \fIfile\fP exists and is a character special file.
+.TP
+.B \-d \fIfile\fP
+True if \fIfile\fP exists and is a directory.
+.TP
+.B \-e \fIfile\fP
+True if \fIfile\fP exists.
+.TP
+.B \-f \fIfile\fP
+True if \fIfile\fP exists and is a regular file.
+.TP
+.B \-g \fIfile\fP
+True if \fIfile\fP exists and is set-group-id.
+.TP
+.B \-h \fIfile\fP
+True if \fIfile\fP exists and is a symbolic link.
+.TP
+.B \-k \fIfile\fP
+True if \fIfile\fP exists and its ``sticky'' bit is set.
+.TP
+.B \-p \fIfile\fP
+True if \fIfile\fP exists and is a named pipe (FIFO).
+.TP
+.B \-r \fIfile\fP
+True if \fIfile\fP exists and is readable.
+.TP
+.B \-s \fIfile\fP
+True if \fIfile\fP exists and has a size greater than zero.
+.TP
+.B \-t \fIfd\fP
+True if file descriptor
+.I fd
+is open and refers to a terminal.
+.TP
+.B \-u \fIfile\fP
+True if \fIfile\fP exists and its set-user-id bit is set.
+.TP
+.B \-w \fIfile\fP
+True if \fIfile\fP exists and is writable.
+.TP
+.B \-x \fIfile\fP
+True if \fIfile\fP exists and is executable.
+.TP
+.B \-G \fIfile\fP
+True if \fIfile\fP exists and is owned by the effective group id.
+.TP
+.B \-L \fIfile\fP
+True if \fIfile\fP exists and is a symbolic link.
+.TP
+.B \-N \fIfile\fP
+True if \fIfile\fP exists and has been modified since it was last read.
+.TP
+.B \-O \fIfile\fP
+True if \fIfile\fP exists and is owned by the effective user id.
+.TP
+.B \-S \fIfile\fP
+True if \fIfile\fP exists and is a socket.
+.TP
+\fIfile1\fP \fB\-ef\fP \fIfile2\fP
+True if \fIfile1\fP and \fIfile2\fP refer to the same device and
+inode numbers.
+.TP
+\fIfile1\fP \-\fBnt\fP \fIfile2\fP
+True if \fIfile1\fP is newer (according to modification date) than \fIfile2\fP,
+or if \fIfile1\fP exists and \fPfile2\fP does not.
+.TP
+\fIfile1\fP \-\fBot\fP \fIfile2\fP
+True if \fIfile1\fP is older than \fIfile2\fP, or if \fIfile2\fP exists
+and \fIfile1\fP does not.
+.TP
+.B \-o \fIoptname\fP
+True if the shell option
+.I optname
+is enabled.
+See the list of options under the description of the
+.B \-o
+option to the
+.B set
+builtin below.
+.TP
+.B \-v \fIvarname\fP
+True if the shell variable
+.I varname
+is set (has been assigned a value).
+.TP
+.B \-R \fIvarname\fP
+True if the shell variable
+.I varname
+is set and is a name reference.
+.TP
+.B \-z \fIstring\fP
+True if the length of \fIstring\fP is zero.
+.TP
+\fIstring\fP
+.PD 0
+.TP
+.B \-n \fIstring\fP
+.PD
+True if the length of
+.I string
+is non-zero.
+.TP
+\fIstring1\fP \fB==\fP \fIstring2\fP
+.PD 0
+.TP
+\fIstring1\fP \fB=\fP \fIstring2\fP
+.PD
+True if the strings are equal. \fB=\fP should be used
+with the \fBtest\fP command for POSIX conformance.
+When used with the \fB[[\fP command, this performs pattern matching as
+described above (\fBCompound Commands\fP).
+.TP
+\fIstring1\fP \fB!=\fP \fIstring2\fP
+True if the strings are not equal.
+.TP
+\fIstring1\fP \fB<\fP \fIstring2\fP
+True if \fIstring1\fP sorts before \fIstring2\fP lexicographically.
+.TP
+\fIstring1\fP \fB>\fP \fIstring2\fP
+True if \fIstring1\fP sorts after \fIstring2\fP lexicographically.
+.TP
+.I \fIarg1\fP \fBOP\fP \fIarg2\fP
+.SM
+.B OP
+is one of
+.BR \-eq ,
+.BR \-ne ,
+.BR \-lt ,
+.BR \-le ,
+.BR \-gt ,
+or
+.BR \-ge .
+These arithmetic binary operators return true if \fIarg1\fP
+is equal to, not equal to, less than, less than or equal to,
+greater than, or greater than or equal to \fIarg2\fP, respectively.
+.I Arg1
+and
+.I arg2
+may be positive or negative integers.
+When used with the \fB[[\fP command,
+.I Arg1
+and
+.I Arg2
+are evaluated as arithmetic expressions (see
+.SM
+.B "ARITHMETIC EVALUATION"
+above).
+.PD
+.SH "SIMPLE COMMAND EXPANSION"
+When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+.IP 1.
+The words that the parser has marked as variable assignments (those
+preceding the command name) and redirections are saved for later
+processing.
+.IP 2.
+The words that are not variable assignments or redirections are
+expanded. 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.
+.IP 3.
+Redirections are performed as described above under
+.SM
+.BR REDIRECTION .
+.IP 4.
+The text after the \fB=\fP in each variable assignment undergoes tilde
+expansion, parameter expansion, command substitution, arithmetic expansion,
+and quote removal before being assigned to the variable.
+.PP
+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.
+.PP
+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.
+.PP
+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.
+.SH "COMMAND EXECUTION"
+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.
+.PP
+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 above in
+.SM
+.BR FUNCTIONS .
+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.
+.PP
+If the name is neither a shell function nor a builtin,
+and contains no slashes,
+.B bash
+searches each element of the
+.SM
+.B PATH
+for a directory containing an executable file by that name.
+.B Bash
+uses a hash table to remember the full pathnames of executable
+files (see
+.B hash
+under
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below).
+A full search of the directories in
+.SM
+.B PATH
+is performed only if the command is not found in the hash table.
+If the search is unsuccessful, the shell searches for a defined shell
+function named \fBcommand_not_found_handle\fP.
+If that function exists, it is invoked in a separate execution environment
+with the original command and
+the original command's arguments as its arguments, and the function's
+exit status becomes the exit status of that subshell.
+If that function is not defined, the shell prints an error
+message and returns an exit status of 127.
+.PP
+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 given, if any.
+.PP
+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 \fIshell script\fP, a file
+containing shell commands. A subshell is spawned to execute
+it. This subshell reinitializes itself, so
+that the effect is as if a new shell had been invoked
+to handle the script, with the exception that the locations of
+commands remembered by the parent (see
+.B hash
+below under
+.SM
+\fBSHELL BUILTIN COMMANDS\fP)
+are retained by the child.
+.PP
+If the program is a file beginning with
+.BR #! ,
+the remainder of the first line specifies an interpreter
+for the program. The shell executes the
+specified interpreter on operating systems that do not
+handle this executable format themselves. The arguments to the
+interpreter consist of a single optional argument following the
+interpreter name on the first line of the program, followed
+by the name of the program, followed by the command
+arguments, if any.
+.SH COMMAND EXECUTION ENVIRONMENT
+The shell has an \fIexecution environment\fP, which consists of the
+following:
+.IP \(bu
+open files inherited by the shell at invocation, as modified by
+redirections supplied to the \fBexec\fP builtin
+.IP \(bu
+the current working directory as set by \fBcd\fP, \fBpushd\fP, or
+\fBpopd\fP, or inherited by the shell at invocation
+.IP \(bu
+the file creation mode mask as set by \fBumask\fP or inherited from
+the shell's parent
+.IP \(bu
+current traps set by \fBtrap\fP
+.IP \(bu
+shell parameters that are set by variable assignment or with \fBset\fP
+or inherited from the shell's parent in the environment
+.IP \(bu
+shell functions defined during execution or inherited from the shell's
+parent in the environment
+.IP \(bu
+options enabled at invocation (either by default or with command-line
+arguments) or by \fBset\fP
+.IP \(bu
+options enabled by \fBshopt\fP
+.IP \(bu
+shell aliases defined with \fBalias\fP
+.IP \(bu
+various process IDs, including those of background jobs, the value
+of \fB$$\fP, and the value of
+.SM
+.B PPID
+.PP
+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.
+.if n .sp 1
+.IP \(bu
+the shell's open files, plus any modifications and additions specified
+by redirections to the command
+.IP \(bu
+the current working directory
+.IP \(bu
+the file creation mode mask
+.IP \(bu
+shell variables and functions marked for export, along with variables
+exported for the command, passed in the environment
+.IP \(bu
+traps caught by the shell are reset to the values inherited from the
+shell's parent, and traps ignored by the shell are ignored
+.PP
+A command invoked in this separate environment cannot affect the
+shell's execution environment.
+.PP
+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.
+.PP
+Subshells spawned to execute command substitutions inherit the value of
+the \fB\-e\fP option from the parent shell. When not in \fIposix mode\fP,
+\fBbash\fP clears the \fB\-e\fP option in such subshells.
+.PP
+If a command is followed by a \fB&\fP and job control is not active, the
+default standard input for the command is the empty file \fI/dev/null\fP.
+Otherwise, the invoked command inherits the file descriptors of the calling
+shell as modified by redirections.
+.SH ENVIRONMENT
+When a program is invoked it is given an array of strings
+called the
+.IR environment .
+This is a list of
+\fIname\fP\-\fIvalue\fP pairs, of the form
+.IR "name\fR=\fPvalue" .
+.PP
+The shell 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
+.I export
+to child processes. Executed commands inherit the environment.
+The
+.B export
+and
+.B declare \-x
+commands allow parameters and functions to be added to and
+deleted from the environment. If the value of a parameter
+in the environment is modified, the new value becomes part
+of the environment, replacing the old. The environment
+inherited by any executed command consists of the shell's
+initial environment, whose values may be modified in the shell,
+less any pairs removed by the
+.B unset
+command, plus any additions via the
+.B export
+and
+.B declare \-x
+commands.
+.PP
+The environment for any
+.I simple command
+or function may be augmented temporarily by prefixing it with
+parameter assignments, as described above in
+.SM
+.BR PARAMETERS .
+These assignment statements affect only the environment seen
+by that command.
+.PP
+If the
+.B \-k
+option is set (see the
+.B set
+builtin command below), then
+.I all
+parameter assignments are placed in the environment for a command,
+not just those that precede the command name.
+.PP
+When
+.B bash
+invokes an external command, the variable
+.B _
+is set to the full filename of the command and passed to that
+command in its environment.
+.SH "EXIT STATUS"
+.PP
+The exit status of an executed command is the value returned by the
+\fIwaitpid\fP system call or equivalent function. Exit statuses
+fall between 0 and 255, though, as explained below, the shell may
+use values above 125 specially. Exit statuses from shell builtins and
+compound commands are also limited to this range. Under certain
+circumstances, the shell will use special values to indicate specific
+failure modes.
+.PP
+For the shell's purposes, a command which exits with a
+zero exit status has succeeded. An exit status of zero
+indicates success. A non-zero exit status indicates failure.
+When a command terminates on a fatal signal \fIN\fP, \fBbash\fP uses
+the value of 128+\fIN\fP as the exit status.
+.PP
+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.
+.PP
+If a command fails because of an error during expansion or redirection,
+the exit status is greater than zero.
+.PP
+Shell builtin commands return a status of 0 (\fItrue\fP) if
+successful, and non-zero (\fIfalse\fP) if an error occurs
+while they execute.
+All builtins return an exit status of 2 to indicate incorrect usage,
+generally invalid options or missing arguments.
+.PP
+\fBBash\fP itself returns the exit status of the last command
+executed, unless a syntax error occurs, in which case it exits
+with a non-zero value. See also the \fBexit\fP builtin
+command below.
+.SH SIGNALS
+When \fBbash\fP is interactive, in the absence of any traps, it ignores
+.SM
+.B SIGTERM
+(so that \fBkill 0\fP does not kill an interactive shell),
+and
+.SM
+.B SIGINT
+is caught and handled (so that the \fBwait\fP builtin is interruptible).
+In all cases, \fBbash\fP ignores
+.SM
+.BR SIGQUIT .
+If job control is in effect,
+.B bash
+ignores
+.SM
+.BR SIGTTIN ,
+.SM
+.BR SIGTTOU ,
+and
+.SM
+.BR SIGTSTP .
+.PP
+Non-builtin commands run by \fBbash\fP have signal handlers
+set to the values inherited by the shell from its parent.
+When job control is not in effect, asynchronous commands
+ignore
+.SM
+.B SIGINT
+and
+.SM
+.B SIGQUIT
+in addition to these inherited handlers.
+Commands run as a result of command substitution ignore the
+keyboard-generated job control signals
+.SM
+.BR SIGTTIN ,
+.SM
+.BR SIGTTOU ,
+and
+.SM
+.BR SIGTSTP .
+.PP
+The shell exits by default upon receipt of a
+.SM
+.BR SIGHUP .
+Before exiting, an interactive shell resends the
+.SM
+.B SIGHUP
+to all jobs, running or stopped.
+Stopped jobs are sent
+.SM
+.B SIGCONT
+to ensure that they receive the
+.SM
+.BR SIGHUP .
+To prevent the shell from
+sending the signal to a particular job, it should be removed from the
+jobs table with the
+.B disown
+builtin (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below) or marked
+to not receive
+.SM
+.B SIGHUP
+using
+.BR "disown \-h" .
+.PP
+If the
+.B huponexit
+shell option has been set with
+.BR shopt ,
+.B bash
+sends a
+.SM
+.B SIGHUP
+to all jobs when an interactive login shell exits.
+.PP
+If \fBbash\fP 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 \fBbash\fP is waiting for an asynchronous command via the \fBwait\fP
+builtin, the reception of a signal for which a trap has been set will
+cause the \fBwait\fP builtin to return immediately with an exit status
+greater than 128, immediately after which the trap is executed.
+.SH "JOB CONTROL"
+.I Job control
+refers to the ability to selectively stop (\fIsuspend\fP)
+the execution of processes and continue (\fIresume\fP)
+their execution at a later point. A user typically employs
+this facility via an interactive interface supplied jointly
+by the operating system kernel's terminal driver and
+.BR bash .
+.PP
+The shell associates a
+.I job
+with each pipeline. It keeps a table of currently executing
+jobs, which may be listed with the
+.B jobs
+command. When
+.B bash
+starts a job asynchronously (in the
+.IR background ),
+it prints a line that looks like:
+.RS
+.PP
+[1] 25647
+.RE
+.PP
+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.
+.B Bash
+uses the
+.I job
+abstraction as the basis for job control.
+.PP
+To facilitate the implementation of the user interface to job
+control, the operating system maintains the notion of a \fIcurrent terminal
+process group ID\fP. 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
+.SM
+.BR SIGINT .
+These processes are said to be in the
+.IR foreground .
+.I Background
+processes are those whose process group ID differs from the terminal's;
+such processes are immune to keyboard-generated signals.
+Only foreground processes are allowed to read from or, if the
+user so specifies with \f(CWstty tostop\fP, write to the
+terminal.
+Background processes which attempt to read from (write to when
+\f(CWstty tostop\fP is in effect) the
+terminal are sent a
+.SM
+.B SIGTTIN (SIGTTOU)
+signal by the kernel's terminal driver,
+which, unless caught, suspends the process.
+.PP
+If the operating system on which
+.B bash
+is running supports
+job control,
+.B bash
+contains facilities to use it.
+Typing the
+.I suspend
+character (typically
+.BR ^Z ,
+Control-Z) while a process is running
+causes that process to be stopped and returns control to
+.BR bash .
+Typing the
+.I "delayed suspend"
+character (typically
+.BR ^Y ,
+Control-Y) causes the process to be stopped when it
+attempts to read input from the terminal, and control to
+be returned to
+.BR bash .
+The user may then manipulate the state of this job, using the
+.B bg
+command to continue it in the background, the
+.B fg
+command to continue it in the foreground, or
+the
+.B kill
+command to kill it. A \fB^Z\fP takes effect immediately,
+and has the additional side effect of causing pending output
+and typeahead to be discarded.
+.PP
+There are a number of ways to refer to a job in the shell.
+The character
+.B %
+introduces a job specification (\fIjobspec\fP). Job number
+.I n
+may be referred to as
+.BR %n .
+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,
+.B %ce
+refers to a stopped
+.B ce
+job. If a prefix matches more than one job,
+.B bash
+reports an error. Using
+.BR %?ce ,
+on the other hand, refers to any job containing the string
+.B ce
+in its command line. If the substring matches more than one job,
+.B bash
+reports an error. The symbols
+.B %%
+and
+.B %+
+refer to the shell's notion of the
+.IR "current job" ,
+which is the last job stopped while it was in
+the foreground or started in the background.
+The
+.I "previous job"
+may be referenced using
+.BR %\- .
+If there is only a single job, \fB%+\fP and \fB%\-\fP can both be used
+to refer to that job.
+In output pertaining to jobs (e.g., the output of the
+.B jobs
+command), the current job is always flagged with a
+.BR + ,
+and the previous job with a
+.BR \- .
+A single % (with no accompanying job specification) also refers to the
+current job.
+.PP
+Simply naming a job can be used to bring it into the
+foreground:
+.B %1
+is a synonym for
+\fB``fg %1''\fP,
+bringing job 1 from the background into the foreground.
+Similarly,
+.B ``%1 &''
+resumes job 1 in the background, equivalent to
+\fB``bg %1''\fP.
+.PP
+The shell learns immediately whenever a job changes state.
+Normally,
+.B bash
+waits until it is about to print a prompt before reporting
+changes in a job's status so as to not interrupt
+any other output. If the
+.B \-b
+option to the
+.B set
+builtin command
+is enabled,
+.B bash
+reports such changes immediately.
+Any trap on
+.SM
+.B SIGCHLD
+is executed for each child that exits.
+.PP
+If an attempt to exit
+.B bash
+is made while jobs are stopped (or, if the \fBcheckjobs\fP shell option has
+been enabled using the \fBshopt\fP builtin, running), the shell prints a
+warning message, and, if the \fBcheckjobs\fP option is enabled, lists the
+jobs and their statuses.
+The
+.B jobs
+command may then be used to inspect their status.
+If a second attempt to exit is made without an intervening command,
+the shell does not print another warning, and any stopped
+jobs are terminated.
+.PP
+When the shell is waiting for a job or process using the \fBwait\fP
+builtin, and job control is enabled, \fBwait\fP will return when the
+job changes state. The \fB\-f\fP option will force \fBwait\fP to wait
+until the job or process terminates before returning.
+.SH PROMPTING
+When executing interactively,
+.B bash
+displays the primary prompt
+.SM
+.B PS1
+when it is ready to read a command, and the secondary prompt
+.SM
+.B PS2
+when it needs more input to complete a command.
+.B Bash
+displays
+.SM
+.B PS0
+after it reads a command but before executing it.
+.B Bash
+displays
+.SM
+.B PS4
+as described above
+before tracing each command when the \fB\-x\fP option is enabled.
+.B Bash
+allows these prompt strings to be customized by inserting a number of
+backslash-escaped special characters that are decoded as follows:
+.RS
+.PD 0
+.TP
+.B \ea
+an ASCII bell character (07)
+.TP
+.B \ed
+the date in "Weekday Month Date" format (e.g., "Tue May 26")
+.TP
+.B \eD{\fIformat\fP}
+the \fIformat\fP is passed to \fIstrftime\fP(3) and the result is inserted
+into the prompt string; an empty \fIformat\fP results in a locale-specific
+time representation. The braces are required
+.TP
+.B \ee
+an ASCII escape character (033)
+.TP
+.B \eh
+the hostname up to the first `.'
+.TP
+.B \eH
+the hostname
+.TP
+.B \ej
+the number of jobs currently managed by the shell
+.TP
+.B \el
+the basename of the shell's terminal device name
+.TP
+.B \en
+newline
+.TP
+.B \er
+carriage return
+.TP
+.B \es
+the name of the shell, the basename of
+.B $0
+(the portion following the final slash)
+.TP
+.B \et
+the current time in 24-hour HH:MM:SS format
+.TP
+.B \eT
+the current time in 12-hour HH:MM:SS format
+.TP
+.B \e@
+the current time in 12-hour am/pm format
+.TP
+.B \eA
+the current time in 24-hour HH:MM format
+.TP
+.B \eu
+the username of the current user
+.TP
+.B \ev
+the version of \fBbash\fP (e.g., 2.00)
+.TP
+.B \eV
+the release of \fBbash\fP, version + patch level (e.g., 2.00.0)
+.TP
+.B \ew
+the current working directory, with
+.SM
+.B $HOME
+abbreviated with a tilde
+(uses the value of the
+.SM
+.B PROMPT_DIRTRIM
+variable)
+.TP
+.B \eW
+the basename of the current working directory, with
+.SM
+.B $HOME
+abbreviated with a tilde
+.TP
+.B \e!
+the history number of this command
+.TP
+.B \e#
+the command number of this command
+.TP
+.B \e$
+if the effective UID is 0, a
+.BR # ,
+otherwise a
+.B $
+.TP
+.B \e\fInnn\fP
+the character corresponding to the octal number \fInnn\fP
+.TP
+.B \e\e
+a backslash
+.TP
+.B \e[
+begin a sequence of non-printing characters, which could be used to
+embed a terminal control sequence into the prompt
+.TP
+.B \e]
+end a sequence of non-printing characters
+.PD
+.RE
+.PP
+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
+.SM
+.B HISTORY
+below), while the command number is the position in the sequence
+of commands executed during the current shell session.
+After the string is decoded, it is expanded via
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal, subject to the value of the
+.B promptvars
+shell option (see the description of the
+.B shopt
+command under
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below).
+.SH READLINE
+This is the library that handles reading input when using an interactive
+shell, unless the
+.B \-\-noediting
+option is given at shell invocation.
+Line editing is also used when using the \fB\-e\fP option to the
+\fBread\fP builtin.
+By default, the line editing commands are similar to those of Emacs.
+A vi-style line editing interface is also available.
+Line editing can be enabled at any time using the
+.B \-o emacs
+or
+.B \-o vi
+options to the
+.B set
+builtin (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+To turn off line editing after the shell is running, use the
+.B +o emacs
+or
+.B +o vi
+options to the
+.B set
+builtin.
+.SS "Readline Notation"
+.PP
+In this section, the Emacs-style notation is used to denote
+keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n
+means Control\-N. Similarly,
+.I meta
+keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards
+without a
+.I meta
+key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key
+then the
+.I x
+key. This makes ESC the \fImeta prefix\fP.
+The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP,
+or press the Escape key
+then hold the Control key while pressing the
+.I x
+key.)
+.PP
+Readline commands may be given numeric
+.IR arguments ,
+which normally act as a repeat count.
+Sometimes, however, it is the sign of the argument that is significant.
+Passing a negative argument to a command that acts in the forward
+direction (e.g., \fBkill\-line\fP) causes that command to act in a
+backward direction.
+Commands whose behavior with arguments deviates from this are noted
+below.
+.PP
+When a command is described as \fIkilling\fP text, the text
+deleted is saved for possible future retrieval
+(\fIyanking\fP). The killed text is saved in a
+\fIkill ring\fP. Consecutive kills cause the text to be
+accumulated into one unit, which can be yanked all at once.
+Commands which do not kill text separate the chunks of text
+on the kill ring.
+.SS "Readline Initialization"
+.PP
+Readline is customized by putting commands in an initialization
+file (the \fIinputrc\fP file).
+The name of this file is taken from the value of the
+.SM
+.B INPUTRC
+variable. If that variable is unset, the default is
+.IR ~/.inputrc .
+When a program which uses the readline library starts up, the
+initialization file is read, and the key bindings and variables
+are set.
+There are only a few basic constructs allowed in the
+readline initialization file.
+Blank lines are ignored.
+Lines beginning with a \fB#\fP are comments.
+Lines beginning with a \fB$\fP indicate conditional constructs.
+Other lines denote key bindings and variable settings.
+.PP
+The default key-bindings may be changed with an
+.I inputrc
+file.
+Other programs that use this library may add their own commands
+and bindings.
+.PP
+For example, placing
+.RS
+.PP
+M\-Control\-u: universal\-argument
+.RE
+or
+.RS
+C\-Meta\-u: universal\-argument
+.RE
+into the
+.I inputrc
+would make M\-C\-u execute the readline command
+.IR universal\-argument .
+.PP
+The following symbolic character names are recognized:
+.IR RUBOUT ,
+.IR DEL ,
+.IR ESC ,
+.IR LFD ,
+.IR NEWLINE ,
+.IR RET ,
+.IR RETURN ,
+.IR SPC ,
+.IR SPACE ,
+and
+.IR TAB .
+.PP
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a \fImacro\fP).
+.SS "Readline Key Bindings"
+.PP
+The syntax for controlling key bindings in the
+.I inputrc
+file is simple. All that is required is the name of the
+command or the text of a macro and a key sequence to which
+it should be bound. The name may be specified in one of two ways:
+as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP
+prefixes, or as a key sequence.
+.PP
+When using the form \fBkeyname\fP:\^\fIfunction\-name\fP or \fImacro\fP,
+.I keyname
+is the name of a key spelled out in English. For example:
+.sp
+.RS
+Control-u: universal\-argument
+.br
+Meta-Rubout: backward-kill-word
+.br
+Control-o: "> output"
+.RE
+.LP
+In the above example,
+.I C\-u
+is bound to the function
+.BR universal\-argument ,
+.I M\-DEL
+is bound to the function
+.BR backward\-kill\-word ,
+and
+.I C\-o
+is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+.if t \f(CW> output\fP
+.if n ``> output''
+into the line).
+.PP
+In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP,
+.B keyseq
+differs from
+.B keyname
+above in that strings denoting
+an entire key sequence may be specified by placing the sequence
+within double quotes. Some GNU Emacs style key escapes can be
+used, as in the following example, but the symbolic character names
+are not recognized.
+.sp
+.RS
+"\eC\-u": universal\-argument
+.br
+"\eC\-x\eC\-r": re\-read\-init\-file
+.br
+"\ee[11~": "Function Key 1"
+.RE
+.PP
+In this example,
+.I C\-u
+is again bound to the function
+.BR universal\-argument .
+.I "C\-x C\-r"
+is bound to the function
+.BR re\-read\-init\-file ,
+and
+.I "ESC [ 1 1 ~"
+is bound to insert the text
+.if t \f(CWFunction Key 1\fP.
+.if n ``Function Key 1''.
+.PP
+The full set of GNU Emacs style escape sequences is
+.RS
+.PD 0
+.TP
+.B \eC\-
+control prefix
+.TP
+.B \eM\-
+meta prefix
+.TP
+.B \ee
+an escape character
+.TP
+.B \e\e
+backslash
+.TP
+.B \e"
+literal "
+.TP
+.B \e\(aq
+literal \(aq
+.RE
+.PD
+.PP
+In addition to the GNU Emacs style escape sequences, a second
+set of backslash escapes is available:
+.RS
+.PD 0
+.TP
+.B \ea
+alert (bell)
+.TP
+.B \eb
+backspace
+.TP
+.B \ed
+delete
+.TP
+.B \ef
+form feed
+.TP
+.B \en
+newline
+.TP
+.B \er
+carriage return
+.TP
+.B \et
+horizontal tab
+.TP
+.B \ev
+vertical tab
+.TP
+.B \e\fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
+(one to three digits)
+.TP
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
+.RE
+.PD
+.PP
+When entering the text of a macro, single or double quotes must
+be used to indicate a macro definition.
+Unquoted text is assumed to be a function name.
+In the macro body, the backslash escapes described above are expanded.
+Backslash will quote any other character in the macro text,
+including " and \(aq.
+.PP
+.B Bash
+allows the current readline key bindings to be displayed or modified
+with the
+.B bind
+builtin command. The editing mode may be switched during interactive
+use by using the
+.B \-o
+option to the
+.B set
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.SS "Readline Variables"
+.PP
+Readline has variables that can be used to further customize its
+behavior. A variable may be set in the
+.I inputrc
+file with a statement of the form
+.RS
+.PP
+\fBset\fP \fIvariable\-name\fP \fIvalue\fP
+.RE
+.PP
+Except where noted, readline variables can take the values
+.B On
+or
+.B Off
+(without regard to case).
+Unrecognized variable names are ignored.
+When a variable value is read, empty or null values, "on" (case-insensitive),
+and "1" are equivalent to \fBOn\fP. All other values are equivalent to
+\fBOff\fP.
+The variables and their default values are:
+.PP
+.PD 0
+.TP
+.B bell\-style (audible)
+Controls what happens when readline wants to ring the terminal bell.
+If set to \fBnone\fP, readline never rings the bell. If set to
+\fBvisible\fP, readline uses a visible bell if one is available.
+If set to \fBaudible\fP, readline attempts to ring the terminal's bell.
+.TP
+.B bind\-tty\-special\-chars (On)
+If set to \fBOn\fP, readline attempts to bind the control characters
+treated specially by the kernel's terminal driver to their readline
+equivalents.
+.TP
+.B blink\-matching\-paren (Off)
+If set to \fBOn\fP, readline attempts to briefly move the cursor to an
+opening parenthesis when a closing parenthesis is inserted.
+.TP
+.B colored\-completion\-prefix (Off)
+If set to \fBOn\fP, when listing completions, readline displays the
+common prefix of the set of possible completions using a different color.
+The color definitions are taken from the value of the \fBLS_COLORS\fP
+environment variable.
+.TP
+.B colored\-stats (Off)
+If set to \fBOn\fP, readline displays possible completions using different
+colors to indicate their file type.
+The color definitions are taken from the value of the \fBLS_COLORS\fP
+environment variable.
+.TP
+.B comment\-begin (``#'')
+The string that is inserted when the readline
+.B insert\-comment
+command is executed.
+This command is bound to
+.B M\-#
+in emacs mode and to
+.B #
+in vi command mode.
+.TP
+.B completion\-display\-width (\-1)
+The number of screen columns used to display possible matches
+when performing completion.
+The value is ignored if it is less than 0 or greater than the terminal
+screen width.
+A value of 0 will cause matches to be displayed one per line.
+The default value is \-1.
+.TP
+.B completion\-ignore\-case (Off)
+If set to \fBOn\fP, readline performs filename matching and completion
+in a case\-insensitive fashion.
+.TP
+.B completion\-map\-case (Off)
+If set to \fBOn\fP, and \fBcompletion\-ignore\-case\fP is enabled, readline
+treats hyphens (\fI\-\fP) and underscores (\fI_\fP) as equivalent when
+performing case\-insensitive filename matching and completion.
+.TP
+.B completion\-prefix\-display\-length (0)
+The length in characters of the common prefix of a list of possible
+completions that is displayed without modification. When set to a
+value greater than zero, common prefixes longer than this value are
+replaced with an ellipsis when displaying possible completions.
+.TP
+.B completion\-query\-items (100)
+This determines when the user is queried about viewing
+the number of possible completions
+generated by the \fBpossible\-completions\fP command.
+It may be set to any integer value greater than or equal to
+zero. If the number of possible completions is greater than
+or equal to the value of this variable, the user is asked whether
+or not he wishes to view them; otherwise they are simply listed
+on the terminal.
+.TP
+.B convert\-meta (On)
+If set to \fBOn\fP, readline will convert characters with the
+eighth bit set to an ASCII key sequence
+by stripping the eighth bit and prefixing an
+escape character (in effect, using escape as the \fImeta prefix\fP).
+The default is \fIOn\fP, but readline will set it to \fIOff\fP if the
+locale contains eight-bit characters.
+.TP
+.B disable\-completion (Off)
+If set to \fBOn\fP, readline will inhibit word completion. Completion
+characters will be inserted into the line as if they had been
+mapped to \fBself-insert\fP.
+.TP
+.B echo\-control\-characters (On)
+When set to \fBOn\fP, on operating systems that indicate they support it,
+readline echoes a character corresponding to a signal generated from the
+keyboard.
+.TP
+.B editing\-mode (emacs)
+Controls whether readline begins with a set of key bindings similar
+to \fIEmacs\fP or \fIvi\fP.
+.B editing\-mode
+can be set to either
+.B emacs
+or
+.BR vi .
+.TP
+.B emacs\-mode\-string (@)
+If the \fIshow\-mode\-in\-prompt\fP variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when emacs editing mode is active. The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the \e1 and \e2 escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+.TP
+.B enable\-bracketed\-paste (Off)
+When set to \fBOn\fP, readline will configure the terminal in a way
+that will enable it to insert each paste into the editing buffer as a
+single string of characters, instead of treating each character as if
+it had been read from the keyboard. This can prevent pasted characters
+from being interpreted as editing commands.
+.TP
+.B enable\-keypad (Off)
+When set to \fBOn\fP, readline will try to enable the application
+keypad when it is called. Some systems need this to enable the
+arrow keys.
+.TP
+.B enable\-meta\-key (On)
+When set to \fBOn\fP, readline will try to enable any meta modifier
+key the terminal claims to support when it is called. On many terminals,
+the meta key is used to send eight-bit characters.
+.TP
+.B expand\-tilde (Off)
+If set to \fBOn\fP, tilde expansion is performed when readline
+attempts word completion.
+.TP
+.B history\-preserve\-point (Off)
+If set to \fBOn\fP, the history code attempts to place point at the
+same location on each history line retrieved with \fBprevious-history\fP
+or \fBnext-history\fP.
+.TP
+.B history\-size (unset)
+Set the maximum number of history entries saved in the history list.
+If set to zero, any existing history entries are deleted and no new entries
+are saved.
+If set to a value less than zero, the number of history entries is not
+limited.
+By default, the number of history entries is set to the value of the
+\fBHISTSIZE\fP shell variable.
+If an attempt is made to set \fIhistory\-size\fP to a non-numeric value,
+the maximum number of history entries will be set to 500.
+.TP
+.B horizontal\-scroll\-mode (Off)
+When set to \fBOn\fP, makes readline use a single line for display,
+scrolling the input horizontally on a single screen line when it
+becomes longer than the screen width rather than wrapping to a new line.
+.TP
+.B input\-meta (Off)
+If set to \fBOn\fP, readline will enable eight-bit input (that is,
+it will not strip the eighth bit from the characters it reads),
+regardless of what the terminal claims it can support. The name
+.B meta\-flag
+is a synonym for this variable.
+The default is \fIOff\fP, but readline will set it to \fIOn\fP if the
+locale contains eight-bit characters.
+.TP
+.B isearch\-terminators (``C\-[C\-J'')
+The string of characters that should terminate an incremental
+search without subsequently executing the character as a command.
+If this variable has not been given a value, the characters
+\fIESC\fP and \fIC\-J\fP will terminate an incremental search.
+.TP
+.B keymap (emacs)
+Set the current readline keymap. The set of valid keymap names is
+\fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi,
+vi\-command\fP, and
+.IR vi\-insert .
+\fIvi\fP is equivalent to \fIvi\-command\fP; \fIemacs\fP is
+equivalent to \fIemacs\-standard\fP. The default value is
+.IR emacs ;
+the value of
+.B editing\-mode
+also affects the default keymap.
+.TP
+.B keyseq\-timeout (500)
+Specifies the duration \fIreadline\fP will wait for a character when reading an
+ambiguous key sequence (one that can form a complete key sequence using
+the input read so far, or can take additional input to complete a longer
+key sequence).
+If no input is received within the timeout, \fIreadline\fP will use the shorter
+but complete key sequence.
+The value is specified in milliseconds, so a value of 1000 means that
+\fIreadline\fP will wait one second for additional input.
+If this variable is set to a value less than or equal to zero, or to a
+non-numeric value, \fIreadline\fP will wait until another key is pressed to
+decide which key sequence to complete.
+.TP
+.B mark\-directories (On)
+If set to \fBOn\fP, completed directory names have a slash
+appended.
+.TP
+.B mark\-modified\-lines (Off)
+If set to \fBOn\fP, history lines that have been modified are displayed
+with a preceding asterisk (\fB*\fP).
+.TP
+.B mark\-symlinked\-directories (Off)
+If set to \fBOn\fP, completed names which are symbolic links to directories
+have a slash appended (subject to the value of
+\fBmark\-directories\fP).
+.TP
+.B match\-hidden\-files (On)
+This variable, when set to \fBOn\fP, causes readline to match files whose
+names begin with a `.' (hidden files) when performing filename
+completion.
+If set to \fBOff\fP, the leading `.' must be
+supplied by the user in the filename to be completed.
+.TP
+.B menu\-complete\-display\-prefix (Off)
+If set to \fBOn\fP, menu completion displays the common prefix of the
+list of possible completions (which may be empty) before cycling through
+the list.
+.TP
+.B output\-meta (Off)
+If set to \fBOn\fP, readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence.
+The default is \fIOff\fP, but readline will set it to \fIOn\fP if the
+locale contains eight-bit characters.
+.TP
+.B page\-completions (On)
+If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager
+to display a screenful of possible completions at a time.
+.TP
+.B print\-completions\-horizontally (Off)
+If set to \fBOn\fP, readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+.TP
+.B revert\-all\-at\-newline (Off)
+If set to \fBOn\fP, readline will undo all changes to history lines
+before returning when \fBaccept\-line\fP is executed. By default,
+history lines may be modified and retain individual undo lists across
+calls to \fBreadline\fP.
+.TP
+.B show\-all\-if\-ambiguous (Off)
+This alters the default behavior of the completion functions. If
+set to
+.BR On ,
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+.TP
+.B show\-all\-if\-unmodified (Off)
+This alters the default behavior of the completion functions in
+a fashion similar to \fBshow\-all\-if\-ambiguous\fP.
+If set to
+.BR On ,
+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.
+.TP
+.B show\-mode\-in\-prompt (Off)
+If set to \fBOn\fP, add a string to the beginning of the prompt
+indicating the editing mode: emacs, vi command, or vi insertion.
+The mode strings are user-settable (e.g., \fIemacs\-mode\-string\fP).
+.TP
+.B skip\-completed\-text (Off)
+If set to \fBOn\fP, this alters the default completion behavior when
+inserting a single match into the line. It's only active when
+performing completion in the middle of a word. If enabled, readline
+does not insert characters from the completion that match characters
+after point in the word being completed, so portions of the word
+following the cursor are not duplicated.
+.TP
+.B vi\-cmd\-mode\-string ((cmd))
+If the \fIshow\-mode\-in\-prompt\fP variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when vi editing mode is active and in command mode.
+The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the \e1 and \e2 escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+.TP
+.B vi\-ins\-mode\-string ((ins))
+If the \fIshow\-mode\-in\-prompt\fP variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when vi editing mode is active and in insertion mode.
+The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the \e1 and \e2 escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+.TP
+.B visible\-stats (Off)
+If set to \fBOn\fP, a character denoting a file's type as reported
+by \fIstat\fP(2) is appended to the filename when listing possible
+completions.
+.PD
+.SS "Readline Conditional Constructs"
+.PP
+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.
+.IP \fB$if\fP
+The
+.B $if
+construct allows bindings to be made based on the
+editing mode, the terminal being used, or the application using
+readline. The text of the test, after any comparison operator,
+ extends to the end of the line;
+unless otherwise noted, no characters are required to isolate it.
+.RS
+.IP \fBmode\fP
+The \fBmode=\fP form of the \fB$if\fP directive is used to test
+whether readline is in emacs or vi mode.
+This may be used in conjunction
+with the \fBset keymap\fP command, for instance, to set bindings in
+the \fIemacs\-standard\fP and \fIemacs\-ctlx\fP keymaps only if
+readline is starting out in emacs mode.
+.IP \fBterm\fP
+The \fBterm=\fP 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
+.B =
+is tested against both the full name of the terminal and the portion
+of the terminal name before the first \fB\-\fP. This allows
+.I sun
+to match both
+.I sun
+and
+.IR sun\-cmd ,
+for instance.
+.IP \fBversion\fP
+The \fBversion\fP test may be used to perform comparisons against
+specific readline versions.
+The \fBversion\fP expands to the current readline version.
+The set of comparison operators includes
+.BR = ,
+(and
+.BR == ),
+.BR != ,
+.BR <= ,
+.BR >= ,
+.BR < ,
+and
+.BR > .
+The version number supplied on the right side of the operator consists
+of a major version number, an optional decimal point, and an optional
+minor version (e.g., \fB7.1\fP). If the minor version is omitted, it
+is assumed to be \fB0\fP.
+The operator may be separated from the string \fBversion\fP
+and from the version number argument by whitespace.
+.IP \fBapplication\fP
+The \fBapplication\fP construct is used to include
+application-specific settings. Each program using the readline
+library sets the \fIapplication name\fP, and an initialization
+file 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 \fBbash\fP:
+.sp 1
+.RS
+.nf
+\fB$if\fP Bash
+# Quote the current or previous word
+"\eC\-xq": "\eeb\e"\eef\e""
+\fB$endif\fP
+.fi
+.RE
+.IP \fIvariable\fP
+The \fIvariable\fP construct provides simple equality tests for readline
+variables and values.
+The permitted comparison operators are \fI=\fP, \fI==\fP, and \fI!=\fP.
+The variable name must be separated from the comparison operator by
+whitespace; the operator may be separated from the value on the right hand
+side by whitespace.
+Both string and boolean variables may be tested. Boolean variables must be
+tested against the values \fIon\fP and \fIoff\fP.
+.RE
+.IP \fB$endif\fP
+This command, as seen in the previous example, terminates an
+\fB$if\fP command.
+.IP \fB$else\fP
+Commands in this branch of the \fB$if\fP directive are executed if
+the test fails.
+.IP \fB$include\fP
+This directive takes a single filename as an argument and reads commands
+and bindings from that file. For example, the following directive
+would read \fI/etc/inputrc\fP:
+.sp 1
+.RS
+.nf
+\fB$include\fP \^ \fI/etc/inputrc\fP
+.fi
+.RE
+.SS Searching
+.PP
+Readline provides commands for searching through the command history
+(see
+.SM
+.B HISTORY
+below) for lines containing a specified string.
+There are two search modes:
+.I incremental
+and
+.IR non-incremental .
+.PP
+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.
+The characters present in the value of the \fBisearch-terminators\fP
+variable are used to terminate an incremental search.
+If that variable has not been assigned a value the Escape and
+Control-J characters will terminate an incremental search.
+Control-G will abort an incremental search and restore the original
+line.
+When the search is terminated, the history entry containing the
+search string becomes the current line.
+.PP
+To find other matching entries in the history list, type Control-S or
+Control-R 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 \fInewline\fP will terminate the search and accept
+the line, thereby executing the command from the history list.
+.PP
+Readline remembers the last incremental search string. If two
+Control-Rs are typed without any intervening characters defining a
+new search string, any remembered search string is used.
+.PP
+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.
+.SS "Readline Command Names"
+.PP
+The following is a list of the names of the commands and the default
+key sequences to which they are bound.
+Command names without an accompanying key sequence are unbound by default.
+In the following descriptions, \fIpoint\fP refers to the current cursor
+position, and \fImark\fP refers to a cursor position saved by the
+\fBset\-mark\fP command.
+The text between the point and mark is referred to as the \fIregion\fP.
+.SS Commands for Moving
+.PP
+.PD 0
+.TP
+.B beginning\-of\-line (C\-a)
+Move to the start of the current line.
+.TP
+.B end\-of\-line (C\-e)
+Move to the end of the line.
+.TP
+.B forward\-char (C\-f)
+Move forward a character.
+.TP
+.B backward\-char (C\-b)
+Move back a character.
+.TP
+.B forward\-word (M\-f)
+Move forward to the end of the next word. Words are composed of
+alphanumeric characters (letters and digits).
+.TP
+.B backward\-word (M\-b)
+Move back to the start of the current or previous word.
+Words are composed of alphanumeric characters (letters and digits).
+.TP
+.B shell\-forward\-word
+Move forward to the end of the next word.
+Words are delimited by non-quoted shell metacharacters.
+.TP
+.B shell\-backward\-word
+Move back to the start of the current or previous word.
+Words are delimited by non-quoted shell metacharacters.
+.TP
+.B previous\-screen\-line
+Attempt to move point to the same physical screen column on the previous
+physical screen line. This will not have the desired effect if the current
+Readline line does not take up more than one physical line or if point is not
+greater than the length of the prompt plus the screen width.
+.TP
+.B next\-screen\-line
+Attempt to move point to the same physical screen column on the next
+physical screen line. This will not have the desired effect if the current
+Readline line does not take up more than one physical line or if the length
+of the current Readline line is not greater than the length of the prompt
+plus the screen width.
+.TP
+.B clear\-screen (C\-l)
+Clear the screen leaving the current line at the top of the screen.
+With an argument, refresh the current line without clearing the
+screen.
+.TP
+.B redraw\-current\-line
+Refresh the current line.
+.PD
+.SS Commands for Manipulating the History
+.PP
+.PD 0
+.TP
+.B accept\-line (Newline, Return)
+Accept the line regardless of where the cursor is. If this line is
+non-empty, add it to the history list according to the state of the
+.SM
+.B HISTCONTROL
+variable. If the line is a modified history
+line, then restore the history line to its original state.
+.TP
+.B previous\-history (C\-p)
+Fetch the previous command from the history list, moving back in
+the list.
+.TP
+.B next\-history (C\-n)
+Fetch the next command from the history list, moving forward in the
+list.
+.TP
+.B beginning\-of\-history (M\-<)
+Move to the first line in the history.
+.TP
+.B end\-of\-history (M\->)
+Move to the end of the input history, i.e., the line currently being
+entered.
+.TP
+.B reverse\-search\-history (C\-r)
+Search backward starting at the current line and moving `up' through
+the history as necessary. This is an incremental search.
+.TP
+.B forward\-search\-history (C\-s)
+Search forward starting at the current line and moving `down' through
+the history as necessary. This is an incremental search.
+.TP
+.B non\-incremental\-reverse\-search\-history (M\-p)
+Search backward through the history starting at the current line
+using a non-incremental search for a string supplied by the user.
+.TP
+.B non\-incremental\-forward\-search\-history (M\-n)
+Search forward through the history using a non-incremental search for
+a string supplied by the user.
+.TP
+.B history\-search\-forward
+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.
+.TP
+.B history\-search\-backward
+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.
+.TP
+.B history\-substring\-search\-backward
+Search backward through the history for the string of characters
+between the start of the current line and the current cursor
+position (the \fIpoint\fP).
+The search string may match anywhere in a history line.
+This is a non-incremental search.
+.TP
+.B history\-substring\-search\-forward
+Search forward through the history for the string of characters
+between the start of the current line and the point.
+The search string may match anywhere in a history line.
+This is a non-incremental search.
+.TP
+.B yank\-nth\-arg (M\-C\-y)
+Insert the first argument to the previous command (usually
+the second word on the previous line) at point.
+With an argument
+.IR n ,
+insert the \fIn\fPth word from the previous command (the words
+in the previous command begin with word 0). A negative argument
+inserts the \fIn\fPth word from the end of the previous command.
+Once the argument \fIn\fP is computed, the argument is extracted
+as if the "!\fIn\fP" history expansion had been specified.
+.TP
+.B
+yank\-last\-arg (M\-.\^, M\-_\^)
+Insert the last argument to the previous command (the last word of
+the previous history entry).
+With a numeric argument, behave exactly like \fByank\-nth\-arg\fP.
+Successive calls to \fByank\-last\-arg\fP move back through the history
+list, inserting the last word (or the word specified by the argument to
+the first call) of each line in turn.
+Any numeric argument supplied to these successive calls determines
+the direction to move through the history. A negative argument switches
+the direction through the history (back or forward).
+The history expansion facilities are used to extract the last word,
+as if the "!$" history expansion had been specified.
+.TP
+.B shell\-expand\-line (M\-C\-e)
+Expand the line as the shell does. This
+performs alias and history expansion as well as all of the shell
+word expansions. See
+.SM
+.B HISTORY EXPANSION
+below for a description of history expansion.
+.TP
+.B history\-expand\-line (M\-^)
+Perform history expansion on the current line.
+See
+.SM
+.B HISTORY EXPANSION
+below for a description of history expansion.
+.TP
+.B magic\-space
+Perform history expansion on the current line and insert a space.
+See
+.SM
+.B HISTORY EXPANSION
+below for a description of history expansion.
+.TP
+.B alias\-expand\-line
+Perform alias expansion on the current line.
+See
+.SM
+.B ALIASES
+above for a description of alias expansion.
+.TP
+.B history\-and\-alias\-expand\-line
+Perform history and alias expansion on the current line.
+.TP
+.B insert\-last\-argument (M\-.\^, M\-_\^)
+A synonym for \fByank\-last\-arg\fP.
+.TP
+.B operate\-and\-get\-next (C\-o)
+Accept the current line for execution and fetch the next line
+relative to the current line from the history for editing.
+A numeric argument, if supplied, specifies the history entry to use instead
+of the current line.
+.TP
+.B edit\-and\-execute\-command (C\-x C\-e)
+Invoke an editor on the current command line, and execute the result as shell
+commands.
+\fBBash\fP attempts to invoke
+.SM
+.BR $VISUAL ,
+.SM
+.BR $EDITOR ,
+and \fIemacs\fP as the editor, in that order.
+.PD
+.SS Commands for Changing Text
+.PP
+.PD 0
+.TP
+.B \fIend\-of\-file\fP (usually C\-d)
+The character indicating end-of-file as set, for example, by
+.if t \f(CWstty\fP.
+.if n ``stty''.
+If this character is read when there are no characters
+on the line, and point is at the beginning of the line, Readline
+interprets it as the end of input and returns
+.SM
+.BR EOF .
+.TP
+.B delete\-char (C\-d)
+Delete the character at point.
+If this function is bound to the
+same character as the tty \fBEOF\fP character, as \fBC\-d\fP
+commonly is, see above for the effects.
+.TP
+.B backward\-delete\-char (Rubout)
+Delete the character behind the cursor. When given a numeric argument,
+save the deleted text on the kill ring.
+.TP
+.B forward\-backward\-delete\-char
+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.
+.TP
+.B quoted\-insert (C\-q, C\-v)
+Add the next character typed to the line verbatim. This is
+how to insert characters like \fBC\-q\fP, for example.
+.TP
+.B tab\-insert (C\-v TAB)
+Insert a tab character.
+.TP
+.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...)
+Insert the character typed.
+.TP
+.B transpose\-chars (C\-t)
+Drag the character before point forward over the character at point,
+moving point forward as well.
+If point is at the end of the line, then this transposes
+the two characters before point.
+Negative arguments have no effect.
+.TP
+.B transpose\-words (M\-t)
+Drag the word before point past the word after point,
+moving point over that word as well.
+If point is at the end of the line, this transposes
+the last two words on the line.
+.TP
+.B upcase\-word (M\-u)
+Uppercase the current (or following) word. With a negative argument,
+uppercase the previous word, but do not move point.
+.TP
+.B downcase\-word (M\-l)
+Lowercase the current (or following) word. With a negative argument,
+lowercase the previous word, but do not move point.
+.TP
+.B capitalize\-word (M\-c)
+Capitalize the current (or following) word. With a negative argument,
+capitalize the previous word, but do not move point.
+.TP
+.B overwrite\-mode
+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
+\fBemacs\fP mode; \fBvi\fP mode does overwrite differently.
+Each call to \fIreadline()\fP starts in insert mode.
+In overwrite mode, characters bound to \fBself\-insert\fP replace
+the text at point rather than pushing the text to the right.
+Characters bound to \fBbackward\-delete\-char\fP replace the character
+before point with a space. By default, this command is unbound.
+.PD
+.SS Killing and Yanking
+.PP
+.PD 0
+.TP
+.B kill\-line (C\-k)
+Kill the text from point to the end of the line.
+.TP
+.B backward\-kill\-line (C\-x Rubout)
+Kill backward to the beginning of the line.
+.TP
+.B unix\-line\-discard (C\-u)
+Kill backward from point to the beginning of the line.
+The killed text is saved on the kill-ring.
+.\" There is no real difference between this and backward-kill-line
+.TP
+.B kill\-whole\-line
+Kill all characters on the current line, no matter where point is.
+.TP
+.B kill\-word (M\-d)
+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 those used by \fBforward\-word\fP.
+.TP
+.B backward\-kill\-word (M\-Rubout)
+Kill the word behind point.
+Word boundaries are the same as those used by \fBbackward\-word\fP.
+.TP
+.B shell\-kill\-word
+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 those used by \fBshell\-forward\-word\fP.
+.TP
+.B shell\-backward\-kill\-word
+Kill the word behind point.
+Word boundaries are the same as those used by \fBshell\-backward\-word\fP.
+.TP
+.B unix\-word\-rubout (C\-w)
+Kill the word behind point, using white space as a word boundary.
+The killed text is saved on the kill-ring.
+.TP
+.B unix\-filename\-rubout
+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.
+.TP
+.B delete\-horizontal\-space (M\-\e)
+Delete all spaces and tabs around point.
+.TP
+.B kill\-region
+Kill the text in the current region.
+.TP
+.B copy\-region\-as\-kill
+Copy the text in the region to the kill buffer.
+.TP
+.B copy\-backward\-word
+Copy the word before point to the kill buffer.
+The word boundaries are the same as \fBbackward\-word\fP.
+.TP
+.B copy\-forward\-word
+Copy the word following point to the kill buffer.
+The word boundaries are the same as \fBforward\-word\fP.
+.TP
+.B yank (C\-y)
+Yank the top of the kill ring into the buffer at point.
+.TP
+.B yank\-pop (M\-y)
+Rotate the kill ring, and yank the new top. Only works following
+.B yank
+or
+.BR yank\-pop .
+.PD
+.SS Numeric Arguments
+.PP
+.PD 0
+.TP
+.B digit\-argument (M\-0, M\-1, ..., M\-\-)
+Add this digit to the argument already accumulating, or start a new
+argument. M\-\- starts a negative argument.
+.TP
+.B universal\-argument
+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
+.B universal\-argument
+again ends the numeric argument, but is otherwise ignored.
+As a special case, if this command is immediately followed by a
+character that is neither a digit nor 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.
+.PD
+.SS Completing
+.PP
+.PD 0
+.TP
+.B complete (TAB)
+Attempt to perform completion on the text before point.
+.B Bash
+attempts completion treating the text as a variable (if the
+text begins with \fB$\fP), username (if the text begins with
+\fB~\fP), hostname (if the text begins with \fB@\fP), or
+command (including aliases and functions) in turn. If none
+of these produces a match, filename completion is attempted.
+.TP
+.B possible\-completions (M\-?)
+List the possible completions of the text before point.
+.TP
+.B insert\-completions (M\-*)
+Insert all completions of the text before point
+that would have been generated by
+\fBpossible\-completions\fP.
+.TP
+.B menu\-complete
+Similar to \fBcomplete\fP, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of \fBmenu\-complete\fP 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 \fBbell\-style\fP)
+and the original text is restored.
+An argument of \fIn\fP moves \fIn\fP 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 \fBTAB\fP, but is unbound
+by default.
+.TP
+.B menu\-complete\-backward
+Identical to \fBmenu\-complete\fP, but moves backward through the list
+of possible completions, as if \fBmenu\-complete\fP had been given a
+negative argument. This command is unbound by default.
+.TP
+.B delete\-char\-or\-list
+Deletes the character under the cursor if not at the beginning or
+end of the line (like \fBdelete\-char\fP).
+If at the end of the line, behaves identically to
+\fBpossible\-completions\fP.
+This command is unbound by default.
+.TP
+.B complete\-filename (M\-/)
+Attempt filename completion on the text before point.
+.TP
+.B possible\-filename\-completions (C\-x /)
+List the possible completions of the text before point,
+treating it as a filename.
+.TP
+.B complete\-username (M\-~)
+Attempt completion on the text before point, treating
+it as a username.
+.TP
+.B possible\-username\-completions (C\-x ~)
+List the possible completions of the text before point,
+treating it as a username.
+.TP
+.B complete\-variable (M\-$)
+Attempt completion on the text before point, treating
+it as a shell variable.
+.TP
+.B possible\-variable\-completions (C\-x $)
+List the possible completions of the text before point,
+treating it as a shell variable.
+.TP
+.B complete\-hostname (M\-@)
+Attempt completion on the text before point, treating
+it as a hostname.
+.TP
+.B possible\-hostname\-completions (C\-x @)
+List the possible completions of the text before point,
+treating it as a hostname.
+.TP
+.B complete\-command (M\-!)
+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.
+.TP
+.B possible\-command\-completions (C\-x !)
+List the possible completions of the text before point,
+treating it as a command name.
+.TP
+.B dynamic\-complete\-history (M\-TAB)
+Attempt completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+.TP
+.B dabbrev\-expand
+Attempt menu completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+.TP
+.B complete\-into\-braces (M\-{)
+Perform filename completion and insert the list of possible completions
+enclosed within braces so the list is available to the shell (see
+.B Brace Expansion
+above).
+.PD
+.SS Keyboard Macros
+.PP
+.PD 0
+.TP
+.B start\-kbd\-macro (C\-x (\^)
+Begin saving the characters typed into the current keyboard macro.
+.TP
+.B end\-kbd\-macro (C\-x )\^)
+Stop saving the characters typed into the current keyboard macro
+and store the definition.
+.TP
+.B call\-last\-kbd\-macro (C\-x e)
+Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+.TP
+.B print\-last\-kbd\-macro ()
+Print the last keyboard macro defined in a format suitable for the
+\fIinputrc\fP file.
+.PD
+.SS Miscellaneous
+.PP
+.PD 0
+.TP
+.B re\-read\-init\-file (C\-x C\-r)
+Read in the contents of the \fIinputrc\fP file, and incorporate
+any bindings or variable assignments found there.
+.TP
+.B abort (C\-g)
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+.BR bell\-style ).
+.TP
+.B do\-lowercase\-version (M\-A, M\-B, M\-\fIx\fP, ...)
+If the metafied character \fIx\fP is uppercase, run the command
+that is bound to the corresponding metafied lowercase character.
+The behavior is undefined if \fIx\fP is already lowercase.
+.TP
+.B prefix\-meta (ESC)
+Metafy the next character typed.
+.SM
+.B ESC
+.B f
+is equivalent to
+.BR Meta\-f .
+.TP
+.B undo (C\-_, C\-x C\-u)
+Incremental undo, separately remembered for each line.
+.TP
+.B revert\-line (M\-r)
+Undo all changes made to this line. This is like executing the
+.B undo
+command enough times to return the line to its initial state.
+.TP
+.B tilde\-expand (M\-&)
+Perform tilde expansion on the current word.
+.TP
+.B set\-mark (C\-@, M\-<space>)
+Set the mark to the point. If a
+numeric argument is supplied, the mark is set to that position.
+.TP
+.B exchange\-point\-and\-mark (C\-x C\-x)
+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.
+.TP
+.B character\-search (C\-])
+A character is read and point is moved to the next occurrence of that
+character. A negative count searches for previous occurrences.
+.TP
+.B character\-search\-backward (M\-C\-])
+A character is read and point is moved to the previous occurrence of that
+character. A negative count searches for subsequent occurrences.
+.TP
+.B skip\-csi\-sequence
+Read enough characters to consume a multi-key sequence such as those
+defined for keys like Home and End. Such sequences begin with a
+Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is
+bound to "\e[", keys producing such sequences will have no effect
+unless explicitly bound to a readline command, instead of inserting
+stray characters into the editing buffer. This is unbound by default,
+but usually bound to ESC\-[.
+.TP
+.B insert\-comment (M\-#)
+Without a numeric argument, the value of the readline
+.B comment\-begin
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle: if
+the characters at the beginning of the line do not match the value
+of \fBcomment\-begin\fP, the value is inserted, otherwise
+the characters in \fBcomment\-begin\fP 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
+\fBcomment\-begin\fP 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.
+.TP
+.B glob\-complete\-word (M\-g)
+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 filenames for possible completions.
+.TP
+.B glob\-expand\-word (C\-x *)
+The word before point is treated as a pattern for pathname expansion,
+and the list of matching filenames is inserted, replacing the word.
+If a numeric argument is supplied, an asterisk is appended before
+pathname expansion.
+.TP
+.B glob\-list\-expansions (C\-x g)
+The list of expansions that would have been generated by
+.B glob\-expand\-word
+is displayed, and the line is redrawn.
+If a numeric argument is supplied, an asterisk is appended before
+pathname expansion.
+.TP
+.B dump\-functions
+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 \fIinputrc\fP file.
+.TP
+.B dump\-variables
+Print all of the settable readline 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 \fIinputrc\fP file.
+.TP
+.B dump\-macros
+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 \fIinputrc\fP file.
+.TP
+.B display\-shell\-version (C\-x C\-v)
+Display version information about the current instance of
+.BR bash .
+.PD
+.SS Programmable Completion
+.PP
+When word completion is attempted for an argument to a command for
+which a completion specification (a \fIcompspec\fP) has been defined
+using the \fBcomplete\fP builtin (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below), the programmable completion facilities are invoked.
+.PP
+First, the command name is identified.
+If the command word is the empty string (completion attempted at the
+beginning of an empty line), any compspec defined with
+the \fB\-E\fP option to \fBcomplete\fP is used.
+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.
+If those searches do not result in a compspec, any compspec defined with
+the \fB\-D\fP option to \fBcomplete\fP is used as the default.
+If there is no default compspec, \fBbash\fP attempts alias expansion
+on the command word as a final resort, and attempts to find a compspec
+for the command word from any successful expansion.
+.PP
+Once a compspec has been found, it is used to generate the list of
+matching words.
+If a compspec is not found, the default \fBbash\fP completion as
+described above under \fBCompleting\fP is performed.
+.PP
+First, the actions specified by the compspec are used.
+Only matches which are prefixed by the word being completed are
+returned.
+When the
+.B \-f
+or
+.B \-d
+option is used for filename or directory name completion, the shell
+variable
+.SM
+.B FIGNORE
+is used to filter the matches.
+.PP
+Any completions specified by a pathname expansion pattern to the
+\fB\-G\fP option are generated next.
+The words generated by the pattern need not match the word
+being completed.
+The
+.SM
+.B GLOBIGNORE
+shell variable is not used to filter the matches, but the
+.SM
+.B FIGNORE
+variable is used.
+.PP
+Next, the string specified as the argument to the \fB\-W\fP option
+is considered.
+The string is first split using the characters in the
+.SM
+.B IFS
+special variable as delimiters.
+Shell quoting is honored.
+Each word is then expanded using
+brace expansion, tilde expansion, parameter and variable expansion,
+command substitution, and arithmetic expansion,
+as described above under
+.SM
+.BR EXPANSION .
+The results are split using the rules described above under
+\fBWord Splitting\fP.
+The results of the expansion are prefix-matched against the word being
+completed, and the matching words become the possible completions.
+.PP
+After these matches have been generated, any shell function or command
+specified with the \fB\-F\fP and \fB\-C\fP options is invoked.
+When the command or function is invoked, the
+.SM
+.BR COMP_LINE ,
+.SM
+.BR COMP_POINT ,
+.SM
+.BR COMP_KEY ,
+and
+.SM
+.B COMP_TYPE
+variables are assigned values as described above under
+\fBShell Variables\fP.
+If a shell function is being invoked, the
+.SM
+.B COMP_WORDS
+and
+.SM
+.B COMP_CWORD
+variables are also set.
+When the function or command is invoked,
+the first argument (\fB$1\fP) is the name of the command whose arguments are
+being completed,
+the second argument (\fB$2\fP) is the word being completed,
+and the third argument (\fB$3\fP) 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.
+.PP
+Any function specified with \fB\-F\fP is invoked first.
+The function may use any of the shell facilities, including the
+\fBcompgen\fP builtin described below, to generate the matches.
+It must put the possible completions in the
+.SM
+.B COMPREPLY
+array variable, one per array element.
+.PP
+Next, any command specified with the \fB\-C\fP 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.
+.PP
+After all of the possible completions are generated, any filter
+specified with the \fB\-X\fP option is applied to the list.
+The filter is a pattern as used for pathname expansion; a \fB&\fP
+in the pattern is replaced with the text of the word being completed.
+A literal \fB&\fP 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 \fB!\fP negates the pattern; in this case any completion
+not matching the pattern will be removed.
+If the
+.B nocasematch
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+.PP
+Finally, any prefix and suffix specified with the \fB\-P\fP and \fB\-S\fP
+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.
+.PP
+If the previously-applied actions do not generate any matches, and the
+\fB\-o dirnames\fP option was supplied to \fBcomplete\fP when the
+compspec was defined, directory name completion is attempted.
+.PP
+If the \fB\-o plusdirs\fP option was supplied to \fBcomplete\fP when the
+compspec was defined, directory name completion is attempted and any
+matches are added to the results of the other actions.
+.PP
+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 \fBbash\fP completions are not attempted, and the readline
+default of filename completion is disabled.
+If the \fB\-o bashdefault\fP option was supplied to \fBcomplete\fP when
+the compspec was defined, the \fBbash\fP default completions are attempted
+if the compspec generates no matches.
+If the \fB\-o default\fP option was supplied to \fBcomplete\fP when the
+compspec was defined, readline's default completion will be performed
+if the compspec (and, if attempted, the default \fBbash\fP completions)
+generate no matches.
+.PP
+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 \fBmark\-directories\fP readline variable, regardless
+of the setting of the \fBmark-symlinked\-directories\fP readline variable.
+.PP
+There is some support for dynamically modifying completions. This is
+most useful when used in combination with a default completion specified
+with \fBcomplete \-D\fP.
+It's possible for shell functions executed as completion
+handlers to indicate that completion should be retried by returning an
+exit status of 124. If a shell function returns 124, and changes
+the compspec associated with the command on which completion is being
+attempted (supplied as the first argument when the function is executed),
+programmable completion restarts from the beginning, with an
+attempt to find a new compspec for that command. This allows a set of
+completions to be built dynamically as completion is attempted, rather than
+being loaded all at once.
+.PP
+For instance, assuming that there is a library of compspecs, each kept in a
+file corresponding to the name of the command, the following default
+completion function would load completions dynamically:
+.PP
+\f(CW_completion_loader()
+.br
+{
+.br
+ . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
+.br
+}
+.br
+complete -D -F _completion_loader -o bashdefault -o default
+.br
+\fP
+.SH HISTORY
+When the
+.B \-o history
+option to the
+.B set
+builtin is enabled, the shell provides access to the
+\fIcommand history\fP,
+the list of commands previously typed.
+The value of the
+.SM
+.B HISTSIZE
+variable is used as the
+number of commands to save in a history list.
+The text of the last
+.SM
+.B HISTSIZE
+commands (default 500) is saved. The shell
+stores each command in the history list prior to parameter and
+variable expansion (see
+.SM
+.B EXPANSION
+above) but after history expansion is performed, subject to the
+values of the shell variables
+.SM
+.B HISTIGNORE
+and
+.SM
+.BR HISTCONTROL .
+.PP
+On startup, the history is initialized from the file named by
+the variable
+.SM
+.B HISTFILE
+(default \fI~/.bash_history\fP).
+The file named by the value of
+.SM
+.B HISTFILE
+is truncated, if necessary, to contain no more than
+the number of lines specified by the value of
+.SM
+.BR HISTFILESIZE .
+If \fBHISTFILESIZE\fP is unset, or set to null, a non-numeric value,
+or a numeric value less than zero, the history file is not truncated.
+When the history file is read,
+lines beginning with the history comment character followed immediately
+by a digit are interpreted as timestamps for the following history line.
+These timestamps are optionally displayed depending on the value of the
+.SM
+.B HISTTIMEFORMAT
+variable.
+When a shell with history enabled exits, the last
+.SM
+.B $HISTSIZE
+lines are copied from the history list to
+.SM
+.BR $HISTFILE .
+If the
+.B histappend
+shell option is enabled
+(see the description of
+.B shopt
+under
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below), the lines are appended to the history file,
+otherwise the history file is overwritten.
+If
+.SM
+.B HISTFILE
+is unset, or if the history file is unwritable, the history is
+not saved.
+If the
+.SM
+.B HISTTIMEFORMAT
+variable is set, time stamps are written to the history file, marked
+with the history comment character, so
+they may be preserved across shell sessions.
+This uses the history comment character to distinguish timestamps from
+other history lines.
+After saving the history, the history file is truncated
+to contain no more than
+.SM
+.B HISTFILESIZE
+lines. If
+.SM
+.B HISTFILESIZE
+is unset, or set to null, a non-numeric value,
+or a numeric value less than zero, the history file is not truncated.
+.PP
+The builtin command
+.B fc
+(see
+.SM
+.B SHELL BUILTIN COMMANDS
+below) may be used to list or edit and re-execute a portion of
+the history list.
+The
+.B history
+builtin may be used to display or modify the history list and
+manipulate the history file.
+When using command-line editing, search commands
+are available in each editing mode that provide access to the
+history list.
+.PP
+The shell allows control over which commands are saved on the history
+list. The
+.SM
+.B HISTCONTROL
+and
+.SM
+.B HISTIGNORE
+variables may be set to cause the shell to save only a subset of the
+commands entered.
+The
+.B cmdhist
+shell option, if enabled, causes the shell to attempt to save each
+line of a multi-line command in the same history entry, adding
+semicolons where necessary to preserve syntactic correctness.
+The
+.B lithist
+shell option causes the shell to save the command with embedded newlines
+instead of semicolons. See the description of the
+.B shopt
+builtin below under
+.SM
+.B "SHELL BUILTIN COMMANDS"
+for information on setting and unsetting shell options.
+.SH "HISTORY EXPANSION"
+.PP
+The shell supports a history expansion feature that
+is similar to the history expansion in
+.BR csh .
+This section describes what syntax features are available. This
+feature is enabled by default for interactive shells, and can be
+disabled using the
+.B +H
+option to the
+.B set
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below). Non-interactive shells do not perform history expansion
+by default.
+.PP
+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.
+.PP
+History expansion is performed immediately after a complete line
+is read, before the shell breaks it into words, and is performed
+on each line individually without taking quoting on previous lines into
+account.
+It takes place in two parts.
+The first is to determine which line from the history list
+to use during substitution.
+The second is to select portions of that line for inclusion into
+the current one.
+The line selected from the history is the \fIevent\fP,
+and the portions of that line that are acted upon are \fIwords\fP.
+Various \fImodifiers\fP are available to manipulate the selected words.
+The line is broken into words in the same fashion as when reading input,
+so that several \fImetacharacter\fP-separated words surrounded by
+quotes are considered one word.
+History expansions are introduced by the appearance of the
+history expansion character, which is \^\fB!\fP\^ by default.
+Only backslash (\^\fB\e\fP\^) and single quotes can quote
+the history expansion character, but the history expansion character is
+also treated as quoted if it immediately precedes the closing double quote
+in a double-quoted string.
+.PP
+Several characters inhibit history expansion if found immediately
+following the history expansion character, even if it is unquoted:
+space, tab, newline, carriage return, and \fB=\fP.
+If the \fBextglob\fP shell option is enabled, \fB(\fP will also
+inhibit expansion.
+.PP
+Several shell options settable with the
+.B shopt
+builtin may be used to tailor the behavior of history expansion.
+If the
+.B histverify
+shell option is enabled (see the description of the
+.B shopt
+builtin below), and
+.B readline
+is being used, history substitutions are not immediately passed to
+the shell parser.
+Instead, the expanded line is reloaded into the
+.B readline
+editing buffer for further modification.
+If
+.B readline
+is being used, and the
+.B histreedit
+shell option is enabled, a failed history substitution will be reloaded
+into the
+.B readline
+editing buffer for correction.
+The
+.B \-p
+option to the
+.B history
+builtin command may be used to see what a history expansion will
+do before using it.
+The
+.B \-s
+option to the
+.B history
+builtin may be used to add commands to the end of the history list
+without actually executing them, so that they are available for
+subsequent recall.
+.PP
+The shell allows control of the various characters used by the
+history expansion mechanism (see the description of
+.B histchars
+above under
+.BR "Shell Variables" ).
+The shell uses
+the history comment character to mark history timestamps when
+writing the history file.
+.SS Event Designators
+.PP
+An event designator is a reference to a command line entry in the
+history list.
+Unless the reference is absolute, events are relative to the current
+position in the history list.
+.PP
+.PD 0
+.TP
+.B !
+Start a history substitution, except when followed by a
+.BR blank ,
+newline, carriage return, =
+or ( (when the \fBextglob\fP shell option is enabled using
+the \fBshopt\fP builtin).
+.TP
+.B !\fIn\fR
+Refer to command line
+.IR n .
+.TP
+.B !\-\fIn\fR
+Refer to the current command minus
+.IR n .
+.TP
+.B !!
+Refer to the previous command. This is a synonym for `!\-1'.
+.TP
+.B !\fIstring\fR
+Refer to the most recent command preceding the current position in the
+history list starting with
+.IR string .
+.TP
+.B !?\fIstring\fR\fB[?]\fR
+Refer to the most recent command preceding the current position in the
+history list containing
+.IR string .
+The trailing \fB?\fP may be omitted if
+.I string
+is followed immediately by a newline.
+.TP
+.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u
+Quick substitution. Repeat the previous command, replacing
+.I string1
+with
+.IR string2 .
+Equivalent to
+``!!:s/\fIstring1\fP/\fIstring2\fP/''
+(see \fBModifiers\fP below).
+.TP
+.B !#
+The entire command line typed so far.
+.PD
+.SS Word Designators
+.PP
+Word designators are used to select desired words from the event.
+A
+.B :
+separates the event specification from the word designator.
+It may be omitted if the word designator begins with a
+.BR ^ ,
+.BR $ ,
+.BR * ,
+.BR \- ,
+or
+.BR % .
+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.
+.PP
+.PD 0
+.TP
+.B 0 (zero)
+The zeroth word. For the shell, this is the command
+word.
+.TP
+.I n
+The \fIn\fRth word.
+.TP
+.B ^
+The first argument. That is, word 1.
+.TP
+.B $
+The last word. This is usually the last argument, but will expand to the
+zeroth word if there is only one word in the line.
+.TP
+.B %
+The word matched by the most recent `?\fIstring\fR?' search.
+.TP
+.I x\fB\-\fPy
+A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'.
+.TP
+.B *
+All of the words but the zeroth. This is a synonym
+for `\fI1\-$\fP'. It is not an error to use
+.B *
+if there is just one
+word in the event; the empty string is returned in that case.
+.TP
+.B x*
+Abbreviates \fIx\-$\fP.
+.TP
+.B x\-
+Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word.
+.PD
+.PP
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+.SS Modifiers
+.PP
+After the optional word designator, there may appear a sequence of
+one or more of the following modifiers, each preceded by a `:'.
+.PP
+.PD 0
+.PP
+.TP
+.B h
+Remove a trailing filename component, leaving only the head.
+.TP
+.B t
+Remove all leading filename components, leaving the tail.
+.TP
+.B r
+Remove a trailing suffix of the form \fI.xxx\fP, leaving the
+basename.
+.TP
+.B e
+Remove all but the trailing suffix.
+.TP
+.B p
+Print the new command but do not execute it.
+.TP
+.B q
+Quote the substituted words, escaping further substitutions.
+.TP
+.B x
+Quote the substituted words as with
+.BR q ,
+but break into words at
+.B blanks
+and newlines.
+.TP
+.B s/\fIold\fP/\fInew\fP/
+Substitute
+.I new
+for the first occurrence of
+.I old
+in the event line. Any delimiter can be used in place of /. The
+final delimiter is optional if it is the last character of the
+event line. The delimiter may be quoted in
+.I old
+and
+.I new
+with a single backslash. If & appears in
+.IR new ,
+it is replaced by
+.IR old .
+A single backslash will quote the &. If
+.I old
+is null, it is set to the last
+.I old
+substituted, or, if no previous history substitutions took place,
+the last
+.I string
+in a
+.B !?\fIstring\fR\fB[?]\fR
+search.
+.TP
+.B &
+Repeat the previous substitution.
+.TP
+.B g
+Cause changes to be applied over the entire event line. This is
+used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR')
+or `\fB:&\fP'. If used with
+`\fB:s\fP', any delimiter can be used
+in place of /, and the final delimiter is optional
+if it is the last character of the event line.
+An \fBa\fP may be used as a synonym for \fBg\fP.
+.TP
+.B G
+Apply the following `\fBs\fP' modifier once to each word in the event line.
+.PD
+.SH "SHELL BUILTIN COMMANDS"
+.\" start of bash_builtins
+.zZ
+.PP
+Unless otherwise noted, each builtin command documented in this
+section as accepting options preceded by
+.B \-
+accepts
+.B \-\-
+to signify the end of the options.
+The \fB:\fP, \fBtrue\fP, \fBfalse\fP, and \fBtest\fP/\fB[\fP builtins
+do not accept options and do not treat \fB\-\-\fP specially.
+The \fBexit\fP, \fBlogout\fP, \fBreturn\fP,
+\fBbreak\fP, \fBcontinue\fP, \fBlet\fP,
+and \fBshift\fP builtins accept and process arguments beginning with
+\fB\-\fP without requiring \fB\-\-\fP.
+Other builtins that accept arguments but are not specified as accepting
+options interpret arguments beginning with \fB\-\fP as invalid options and
+require \fB\-\-\fP to prevent this interpretation.
+.sp .5
+.PD 0
+.TP
+\fB:\fP [\fIarguments\fP]
+.PD
+No effect; the command does nothing beyond expanding
+.I arguments
+and performing any specified
+redirections.
+The return status is zero.
+.TP
+\fB .\| \fP \fIfilename\fP [\fIarguments\fP]
+.PD 0
+.TP
+\fBsource\fP \fIfilename\fP [\fIarguments\fP]
+.PD
+Read and execute commands from
+.I filename
+in the current
+shell environment and return the exit status of the last command
+executed from
+.IR filename .
+If
+.I filename
+does not contain a slash, filenames in
+.SM
+.B PATH
+are used to find the directory containing
+.IR filename .
+The file searched for in
+.SM
+.B PATH
+need not be executable.
+When \fBbash\fP is not in \fIposix mode\fP, the current directory is
+searched if no file is found in
+.SM
+.BR PATH .
+If the
+.B sourcepath
+option to the
+.B shopt
+builtin command is turned off, the
+.SM
+.B PATH
+is not searched.
+If any \fIarguments\fP are supplied, they become the positional
+parameters when \fIfilename\fP is executed. Otherwise the positional
+parameters are unchanged.
+If the \fB\-T\fP option is enabled, \fBsource\fP inherits any trap on
+\fBDEBUG\fP; if it is not, any \fBDEBUG\fP trap string is saved and
+restored around the call to \fBsource\fP, and \fBsource\fP unsets the
+\fBDEBUG\fP trap while it executes.
+If \fB\-T\fP is not set, and the sourced file changes
+the \fBDEBUG\fP trap, the new value is retained when \fBsource\fP completes.
+The return status is the status of the last command exited within
+the script (0 if no commands are executed), and false if
+.I filename
+is not found or cannot be read.
+.TP
+\fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
+\fBAlias\fP with no arguments or with the
+.B \-p
+option prints the list of aliases in the form
+\fBalias\fP \fIname\fP=\fIvalue\fP on standard output.
+When arguments are supplied, an alias is defined for
+each \fIname\fP whose \fIvalue\fP is given.
+A trailing space in \fIvalue\fP causes the next word to be
+checked for alias substitution when the alias is expanded.
+For each \fIname\fP in the argument list for which no \fIvalue\fP
+is supplied, the name and value of the alias is printed.
+\fBAlias\fP returns true unless a \fIname\fP is given for which
+no alias has been defined.
+.TP
+\fBbg\fP [\fIjobspec\fP ...]
+Resume each suspended job \fIjobspec\fP in the background, as if it
+had been started with
+.BR & .
+If
+.I jobspec
+is not present, the shell's notion of the \fIcurrent job\fP is used.
+.B bg
+.I jobspec
+returns 0 unless run when job control is disabled or, when run with
+job control enabled, any specified \fIjobspec\fP was not found
+or was started without job control.
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-lpsvPSVX\fP]
+.PD 0
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-q\fP \fIfunction\fP] [\fB\-u\fP \fIfunction\fP] [\fB\-r\fP \fIkeyseq\fP]
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-f\fP \fIfilename\fP
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP:\fIshell\-command\fP
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIreadline\-command\fP
+.PD
+Display current
+.B readline
+key and function bindings, bind a key sequence to a
+.B readline
+function or macro, or set a
+.B readline
+variable.
+Each non-option argument is a command as it would appear in
+.IR .inputrc ,
+but each binding or command must be passed as a separate argument;
+e.g., '"\eC\-x\eC\-r": re\-read\-init\-file'.
+Options, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-m \fIkeymap\fP
+Use
+.I keymap
+as the keymap to be affected by the subsequent bindings.
+Acceptable
+.I keymap
+names are
+\fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi,
+vi\-move, vi\-command\fP, and
+.IR vi\-insert .
+\fIvi\fP is equivalent to \fIvi\-command\fP (\fIvi\-move\fP is also
+a synonym); \fIemacs\fP is
+equivalent to \fIemacs\-standard\fP.
+.TP
+.B \-l
+List the names of all \fBreadline\fP functions.
+.TP
+.B \-p
+Display \fBreadline\fP function names and bindings in such a way
+that they can be re-read.
+.TP
+.B \-P
+List current \fBreadline\fP function names and bindings.
+.TP
+.B \-s
+Display \fBreadline\fP key sequences bound to macros and the strings
+they output in such a way that they can be re-read.
+.TP
+.B \-S
+Display \fBreadline\fP key sequences bound to macros and the strings
+they output.
+.TP
+.B \-v
+Display \fBreadline\fP variable names and values in such a way that they
+can be re-read.
+.TP
+.B \-V
+List current \fBreadline\fP variable names and values.
+.TP
+.B \-f \fIfilename\fP
+Read key bindings from \fIfilename\fP.
+.TP
+.B \-q \fIfunction\fP
+Query about which keys invoke the named \fIfunction\fP.
+.TP
+.B \-u \fIfunction\fP
+Unbind all keys bound to the named \fIfunction\fP.
+.TP
+.B \-r \fIkeyseq\fP
+Remove any current binding for \fIkeyseq\fP.
+.TP
+.B \-x \fIkeyseq\fP:\fIshell\-command\fP
+Cause \fIshell\-command\fP to be executed whenever \fIkeyseq\fP is
+entered.
+When \fIshell\-command\fP is executed, the shell sets the
+.SM
+.B READLINE_LINE
+variable to the contents of the \fBreadline\fP line buffer and the
+.SM
+.B READLINE_POINT
+variable to the current location of the insertion point.
+If the executed command changes the value of
+.SM
+.B READLINE_LINE
+or
+.SM
+.BR READLINE_POINT ,
+those new values will be reflected in the editing state.
+.TP
+.B \-X
+List all key sequences bound to shell commands and the associated commands
+in a format that can be reused as input.
+.PD
+.PP
+The return value is 0 unless an unrecognized option is given or an
+error occurred.
+.RE
+.TP
+\fBbreak\fP [\fIn\fP]
+Exit from within a
+.BR for ,
+.BR while ,
+.BR until ,
+or
+.B select
+loop. If \fIn\fP is specified, break \fIn\fP levels.
+.I n
+must be \(>= 1. If
+.I n
+is greater than the number of enclosing loops, all enclosing loops
+are exited.
+The return value is 0 unless \fIn\fP is not greater than or equal to 1.
+.TP
+\fBbuiltin\fP \fIshell\-builtin\fP [\fIarguments\fP]
+Execute the specified shell builtin, passing it
+.IR arguments ,
+and return its exit status.
+This is useful when defining a
+function whose name is the same as a shell builtin,
+retaining the functionality of the builtin within the function.
+The \fBcd\fP builtin is commonly redefined this way.
+The return status is false if
+.I shell\-builtin
+is not a shell builtin command.
+.TP
+\fBcaller\fP [\fIexpr\fP]
+Returns the context of any active subroutine call (a shell function or
+a script executed with the \fB.\fP or \fBsource\fP builtins).
+Without \fIexpr\fP, \fBcaller\fP displays the line number and source
+filename of the current subroutine call.
+If a non-negative integer is supplied as \fIexpr\fP, \fBcaller\fP
+displays the line number, subroutine name, and source file corresponding
+to that position in the current execution call stack. This extra
+information may be used, for example, to print a stack trace. The
+current frame is frame 0.
+The return value is 0 unless the shell is not executing a subroutine
+call or \fIexpr\fP does not correspond to a valid position in the
+call stack.
+.TP
+\fBcd\fP [\fB\-L\fP|[\fB\-P\fP [\fB\-e\fP]] [\-@]] [\fIdir\fP]
+Change the current directory to \fIdir\fP.
+if \fIdir\fP is not supplied, the value of the
+.SM
+.B HOME
+shell variable is the default.
+Any additional arguments following \fIdir\fP are ignored.
+The variable
+.SM
+.B CDPATH
+defines the search path for the directory containing
+.IR dir :
+each directory name in
+.SM
+.B CDPATH
+is searched for \fIdir\fP.
+Alternative directory names in
+.SM
+.B CDPATH
+are separated by a colon (:). A null directory name in
+.SM
+.B CDPATH
+is the same as the current directory, i.e., ``\fB.\fP''. If
+.I dir
+begins with a slash (/),
+then
+.SM
+.B CDPATH
+is not used. The
+.B \-P
+option causes \fBcd\fP to use the physical directory structure
+by resolving symbolic links while traversing \fIdir\fP and
+before processing instances of \fI..\fP in \fIdir\fP (see also the
+.B \-P
+option to the
+.B set
+builtin command); the
+.B \-L
+option forces symbolic links to be followed by resolving the link
+after processing instances of \fI..\fP in \fIdir\fP.
+If \fI..\fP appears in \fIdir\fP, it is processed by removing the
+immediately previous pathname component from \fIdir\fP, back to a slash
+or the beginning of \fIdir\fP.
+If the
+.B \-e
+option is supplied with
+.BR \-P ,
+and the current working directory cannot be successfully determined
+after a successful directory change, \fBcd\fP will return an unsuccessful
+status.
+On systems that support it, the \fB\-@\fP option presents the extended
+attributes associated with a file as a directory.
+An argument of
+.B \-
+is converted to
+.SM
+.B $OLDPWD
+before the directory change is attempted.
+If a non-empty directory name from
+.SM
+.B CDPATH
+is used, or if
+\fB\-\fP is the first argument, and the directory change is
+successful, the absolute pathname of the new working directory is
+written to the standard output.
+The return value is true if the directory was successfully changed;
+false otherwise.
+.TP
+\fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP ...]
+Run
+.I command
+with
+.I args
+suppressing the normal shell function lookup.
+Only builtin commands or commands found in the
+.SM
+.B PATH
+are executed. If the
+.B \-p
+option is given, the search for
+.I command
+is performed using a default value for
+.SM
+.B PATH
+that is guaranteed to find all of the standard utilities.
+If either the
+.B \-V
+or
+.B \-v
+option is supplied, a description of
+.I command
+is printed. The
+.B \-v
+option causes a single word indicating the command or filename
+used to invoke
+.I command
+to be displayed; the
+.B \-V
+option produces a more verbose description.
+If the
+.B \-V
+or
+.B \-v
+option is supplied, the exit status is 0 if
+.I command
+was found, and 1 if not. If neither option is supplied and
+an error occurred or
+.I command
+cannot be found, the exit status is 127. Otherwise, the exit status of the
+.B command
+builtin is the exit status of
+.IR command .
+.TP
+\fBcompgen\fP [\fIoption\fP] [\fIword\fP]
+Generate possible completion matches for \fIword\fP according to
+the \fIoption\fPs, which may be any option accepted by the
+.B complete
+builtin with the exception of \fB\-p\fP and \fB\-r\fP, and write
+the matches to the standard output.
+When using the \fB\-F\fP or \fB\-C\fP options, the various shell variables
+set by the programmable completion facilities, while available, will not
+have useful values.
+.sp 1
+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 \fIword\fP is specified, only those completions matching \fIword\fP
+will be displayed.
+.sp 1
+The return value is true unless an invalid option is supplied, or no
+matches were generated.
+.TP
+\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\fP] [\fB\-DEI\fP] [\fB\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP]
+.br
+[\fB\-X\fP \fIfilterpat\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP] \fIname\fP [\fIname ...\fP]
+.PD 0
+.TP
+\fBcomplete\fP \fB\-pr\fP [\fB\-DEI\fP] [\fIname\fP ...]
+.PD
+Specify how arguments to each \fIname\fP should be completed.
+If the \fB\-p\fP 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 \fB\-r\fP option removes a completion specification for
+each \fIname\fP, or, if no \fIname\fPs are supplied, all
+completion specifications.
+The \fB\-D\fP option indicates that other supplied options and actions should
+apply to the ``default'' command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The \fB\-E\fP option indicates that other supplied options and actions should
+apply to ``empty'' command completion; that is, completion attempted on a
+blank line.
+The \fB\-I\fP option indicates that other supplied options and actions should
+apply to completion on the inital non-assignment word on the line, or after
+a command delimiter such as \fB;\fP or \fB|\fP, which is usually command
+name completion.
+If multiple options are supplied, the \fB\-D\fP option takes precedence
+over \fB\-E\fP, and both take precedence over \fB\-I\fP.
+If any of \fB\-D\fP, \fB\-E\fP, or \fB\-I\fP are supplied, any other
+\fIname\fP arguments are ignored; these completions only apply to the case
+specified by the option.
+.sp 1
+The process of applying these completion specifications when word completion
+is attempted is described above under \fBProgrammable Completion\fP.
+.sp 1
+Other options, if specified, have the following meanings.
+The arguments to the \fB\-G\fP, \fB\-W\fP, and \fB\-X\fP options
+(and, if necessary, the \fB\-P\fP and \fB\-S\fP options)
+should be quoted to protect them from expansion before the
+.B complete
+builtin is invoked.
+.RS
+.PD 0
+.TP 8
+\fB\-o\fP \fIcomp-option\fP
+The \fIcomp-option\fP controls several aspects of the compspec's behavior
+beyond the simple generation of completions.
+\fIcomp-option\fP may be one of:
+.RS
+.TP 8
+.B bashdefault
+Perform the rest of the default \fBbash\fP completions if the compspec
+generates no matches.
+.TP 8
+.B default
+Use readline's default filename completion if the compspec generates
+no matches.
+.TP 8
+.B dirnames
+Perform directory name completion if the compspec generates no matches.
+.TP 8
+.B filenames
+Tell readline that the compspec generates filenames, so it can perform any
+filename\-specific processing (like adding a slash to directory names,
+quoting special characters, or suppressing trailing spaces).
+Intended to be used with shell functions.
+.TP 8
+.B noquote
+Tell readline not to quote the completed words if they are filenames
+(quoting filenames is the default).
+.TP 8
+.B nosort
+Tell readline not to sort the list of possible completions alphabetically.
+.TP 8
+.B nospace
+Tell readline not to append a space (the default) to words completed at
+the end of the line.
+.TP 8
+.B plusdirs
+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.
+.RE
+.TP 8
+\fB\-A\fP \fIaction\fP
+The \fIaction\fP may be one of the following to generate a list of possible
+completions:
+.RS
+.TP 8
+.B alias
+Alias names. May also be specified as \fB\-a\fP.
+.TP 8
+.B arrayvar
+Array variable names.
+.TP 8
+.B binding
+\fBReadline\fP key binding names.
+.TP 8
+.B builtin
+Names of shell builtin commands. May also be specified as \fB\-b\fP.
+.TP 8
+.B command
+Command names. May also be specified as \fB\-c\fP.
+.TP 8
+.B directory
+Directory names. May also be specified as \fB\-d\fP.
+.TP 8
+.B disabled
+Names of disabled shell builtins.
+.TP 8
+.B enabled
+Names of enabled shell builtins.
+.TP 8
+.B export
+Names of exported shell variables. May also be specified as \fB\-e\fP.
+.TP 8
+.B file
+File names. May also be specified as \fB\-f\fP.
+.TP 8
+.B function
+Names of shell functions.
+.TP 8
+.B group
+Group names. May also be specified as \fB\-g\fP.
+.TP 8
+.B helptopic
+Help topics as accepted by the \fBhelp\fP builtin.
+.TP 8
+.B hostname
+Hostnames, as taken from the file specified by the
+.SM
+.B HOSTFILE
+shell variable.
+.TP 8
+.B job
+Job names, if job control is active. May also be specified as \fB\-j\fP.
+.TP 8
+.B keyword
+Shell reserved words. May also be specified as \fB\-k\fP.
+.TP 8
+.B running
+Names of running jobs, if job control is active.
+.TP 8
+.B service
+Service names. May also be specified as \fB\-s\fP.
+.TP 8
+.B setopt
+Valid arguments for the \fB\-o\fP option to the \fBset\fP builtin.
+.TP 8
+.B shopt
+Shell option names as accepted by the \fBshopt\fP builtin.
+.TP 8
+.B signal
+Signal names.
+.TP 8
+.B stopped
+Names of stopped jobs, if job control is active.
+.TP 8
+.B user
+User names. May also be specified as \fB\-u\fP.
+.TP 8
+.B variable
+Names of all shell variables. May also be specified as \fB\-v\fP.
+.RE
+.TP 8
+\fB\-C\fP \fIcommand\fP
+\fIcommand\fP is executed in a subshell environment, and its output is
+used as the possible completions.
+.TP 8
+\fB\-F\fP \fIfunction\fP
+The shell function \fIfunction\fP is executed in the current shell
+environment.
+When the function is executed,
+the first argument (\fB$1\fP) is the name of the command whose arguments are
+being completed,
+the second argument (\fB$2\fP) is the word being completed,
+and the third argument (\fB$3\fP) is the word preceding the word being
+completed on the current command line.
+When it finishes, the possible completions are retrieved from the value
+of the
+.SM
+.B COMPREPLY
+array variable.
+.TP 8
+\fB\-G\fP \fIglobpat\fP
+The pathname expansion pattern \fIglobpat\fP is expanded to generate
+the possible completions.
+.TP 8
+\fB\-P\fP \fIprefix\fP
+\fIprefix\fP is added at the beginning of each possible completion
+after all other options have been applied.
+.TP 8
+\fB\-S\fP \fIsuffix\fP
+\fIsuffix\fP is appended to each possible completion
+after all other options have been applied.
+.TP 8
+\fB\-W\fP \fIwordlist\fP
+The \fIwordlist\fP is split using the characters in the
+.SM
+.B IFS
+special variable as delimiters, and each resultant word is expanded.
+Shell quoting is honored within \fIwordlist\fP,
+in order to provide a
+mechanism for the words to contain shell metacharacters or characters
+in the value of
+.SM
+.BR IFS .
+The possible completions are the members of the resultant list which
+match the word being completed.
+.TP 8
+\fB\-X\fP \fIfilterpat\fP
+\fIfilterpat\fP is a pattern as used for pathname expansion.
+It is applied to the list of possible completions generated by the
+preceding options and arguments, and each completion matching
+\fIfilterpat\fP is removed from the list.
+A leading \fB!\fP in \fIfilterpat\fP negates the pattern; in this
+case, any completion not matching \fIfilterpat\fP is removed.
+.PD
+.PP
+The return value is true unless an invalid option is supplied, an option
+other than \fB\-p\fP or \fB\-r\fP is supplied without a \fIname\fP
+argument, an attempt is made to remove a completion specification for
+a \fIname\fP for which no specification exists, or
+an error occurs adding a completion specification.
+.RE
+.TP
+\fBcompopt\fP [\fB\-o\fP \fIoption\fP] [\fB\-DEI\fP] [\fB+o\fP \fIoption\fP] [\fIname\fP]
+Modify completion options for each \fIname\fP according to the
+\fIoption\fPs, or for the
+currently-executing completion if no \fIname\fPs are supplied.
+If no \fIoption\fPs are given, display the completion options for each
+\fIname\fP or the current completion.
+The possible values of \fIoption\fP are those valid for the \fBcomplete\fP
+builtin described above.
+The \fB\-D\fP option indicates that other supplied options should
+apply to the ``default'' command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The \fB\-E\fP option indicates that other supplied options should
+apply to ``empty'' command completion; that is, completion attempted on a
+blank line.
+The \fB\-I\fP option indicates that other supplied options should
+apply to completion on the inital non-assignment word on the line,
+or after a command delimiter such as \fB;\fP or \fB|\fP, which is usually
+command name completion.
+.sp 1
+The return value is true unless an invalid option is supplied, an attempt
+is made to modify the options for a \fIname\fP for which no completion
+specification exists, or an output error occurs.
+.TP
+\fBcontinue\fP [\fIn\fP]
+Resume the next iteration of the enclosing
+.BR for ,
+.BR while ,
+.BR until ,
+or
+.B select
+loop.
+If
+.I n
+is specified, resume at the \fIn\fPth enclosing loop.
+.I n
+must be \(>= 1. If
+.I n
+is greater than the number of enclosing loops, the last enclosing loop
+(the ``top-level'' loop) is resumed.
+The return value is 0 unless \fIn\fP is not greater than or equal to 1.
+.TP
+\fBdeclare\fP [\fB\-aAfFgilnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
+.PD 0
+.TP
+\fBtypeset\fP [\fB\-aAfFgilnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
+.PD
+Declare variables and/or give them attributes.
+If no \fIname\fPs are given then display the values of variables.
+The
+.B \-p
+option will display the attributes and values of each
+.IR name .
+When
+.B \-p
+is used with \fIname\fP arguments, additional options,
+other than \fB\-f\fP and \fB\-F\fP, are ignored.
+When
+.B \-p
+is supplied without \fIname\fP arguments, it will display the attributes
+and values of all variables having the attributes specified by the
+additional options.
+If no other options are supplied with \fB\-p\fP, \fBdeclare\fP will display
+the attributes and values of all shell variables. The \fB\-f\fP option
+will restrict the display to shell functions.
+The
+.B \-F
+option inhibits the display of function definitions; only the
+function name and attributes are printed.
+If the \fBextdebug\fP shell option is enabled using \fBshopt\fP,
+the source file name and line number where each \fIname\fP
+is defined are displayed as well. The
+.B \-F
+option implies
+.BR \-f .
+The
+.B \-g
+option forces variables to be created or modified at the global scope,
+even when \fBdeclare\fP is executed in a shell function.
+It is ignored in all other cases.
+The following options can
+be used to restrict output to variables with the specified attribute or
+to give variables attributes:
+.RS
+.PD 0
+.TP
+.B \-a
+Each \fIname\fP is an indexed array variable (see
+.B Arrays
+above).
+.TP
+.B \-A
+Each \fIname\fP is an associative array variable (see
+.B Arrays
+above).
+.TP
+.B \-f
+Use function names only.
+.TP
+.B \-i
+The variable is treated as an integer; arithmetic evaluation (see
+.SM
+.B "ARITHMETIC EVALUATION"
+above) is performed when the variable is assigned a value.
+.TP
+.B \-l
+When the variable is assigned a value, all upper-case characters are
+converted to lower-case.
+The upper-case attribute is disabled.
+.TP
+.B \-n
+Give each \fIname\fP the \fInameref\fP attribute, making
+it a name reference to another variable.
+That other variable is defined by the value of \fIname\fP.
+All references, assignments, and attribute modifications
+to \fIname\fP, except those using or changing the
+\fB\-n\fP attribute itself, are performed on the variable referenced by
+\fIname\fP's value.
+The nameref attribute cannot be applied to array variables.
+.TP
+.B \-r
+Make \fIname\fPs readonly. These names cannot then be assigned values
+by subsequent assignment statements or unset.
+.TP
+.B \-t
+Give each \fIname\fP the \fItrace\fP attribute.
+Traced functions inherit the \fBDEBUG\fP and \fBRETURN\fP traps from
+the calling shell.
+The trace attribute has no special meaning for variables.
+.TP
+.B \-u
+When the variable is assigned a value, all lower-case characters are
+converted to upper-case.
+The lower-case attribute is disabled.
+.TP
+.B \-x
+Mark \fIname\fPs for export to subsequent commands via the environment.
+.PD
+.PP
+Using `+' instead of `\-'
+turns off the attribute instead,
+with the exceptions that \fB+a\fP and \fB+A\fP
+may not be used to destroy array variables and \fB+r\fP will not
+remove the readonly attribute.
+When used in a function,
+.B declare
+and
+.B typeset
+make each
+\fIname\fP local, as with the
+.B local
+command,
+unless the \fB\-g\fP option is supplied.
+If a variable name is followed by =\fIvalue\fP, the value of
+the variable is set to \fIvalue\fP.
+When using \fB\-a\fP or \fB\-A\fP and the compound assignment syntax to
+create array variables, additional attributes do not take effect until
+subsequent assignments.
+The return value is 0 unless an invalid option is encountered,
+an attempt is made to define a function using
+.if n ``\-f foo=bar'',
+.if t \f(CW\-f foo=bar\fP,
+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
+.B Arrays
+above), one of the \fInames\fP 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 \fB\-f\fP.
+.RE
+.TP
+.B dirs [\fB\-clpv\fP] [+\fIn\fP] [\-\fIn\fP]
+Without options, displays the list of currently remembered directories.
+The default display is on a single line with directory names separated
+by spaces.
+Directories are added to the list with the
+.B pushd
+command; the
+.B popd
+command removes entries from the list.
+The current directory is always the first directory in the stack.
+.RS
+.PD 0
+.TP
+.B \-c
+Clears the directory stack by deleting all of the entries.
+.TP
+.B \-l
+Produces a listing using full pathnames;
+the default listing format uses a tilde to denote the home directory.
+.TP
+.B \-p
+Print the directory stack with one entry per line.
+.TP
+.B \-v
+Print the directory stack with one entry per line,
+prefixing each entry with its index in the stack.
+.TP
+\fB+\fP\fIn\fP
+Displays the \fIn\fPth entry counting from the left of the list
+shown by
+.B dirs
+when invoked without options, starting with zero.
+.TP
+\fB\-\fP\fIn\fP
+Displays the \fIn\fPth entry counting from the right of the list
+shown by
+.B dirs
+when invoked without options, starting with zero.
+.PD
+.PP
+The return value is 0 unless an
+invalid option is supplied or \fIn\fP indexes beyond the end
+of the directory stack.
+.RE
+.TP
+\fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] [\fIjobspec\fP ... | \fIpid\fP ... ]
+Without options, remove each
+.I jobspec
+from the table of active jobs.
+If
+.I jobspec
+is not present, and neither the \fB\-a\fP nor the \fB\-r\fP option
+is supplied, the \fIcurrent job\fP is used.
+If the \fB\-h\fP option is given, each
+.I jobspec
+is not removed from the table, but is marked so that
+.SM
+.B SIGHUP
+is not sent to the job if the shell receives a
+.SM
+.BR SIGHUP .
+If no
+.I jobspec
+is supplied, the
+.B \-a
+option means to remove or mark all jobs; the
+.B \-r
+option without a
+.I jobspec
+argument restricts operation to running jobs.
+The return value is 0 unless a
+.I jobspec
+does not specify a valid job.
+.TP
+\fBecho\fP [\fB\-neE\fP] [\fIarg\fP ...]
+Output the \fIarg\fPs, separated by spaces, followed by a newline.
+The return status is 0 unless a write error occurs.
+If \fB\-n\fP is specified, the trailing newline is
+suppressed. If the \fB\-e\fP option is given, interpretation of
+the following backslash-escaped characters is enabled. The
+.B \-E
+option disables the interpretation of these escape characters,
+even on systems where they are interpreted by default.
+The \fBxpg_echo\fP shell option may be used to
+dynamically determine whether or not \fBecho\fP expands these
+escape characters by default.
+.B echo
+does not interpret \fB\-\-\fP to mean the end of options.
+.B echo
+interprets the following escape sequences:
+.RS
+.PD 0
+.TP
+.B \ea
+alert (bell)
+.TP
+.B \eb
+backspace
+.TP
+.B \ec
+suppress further output
+.TP
+.B \ee
+.TP
+.B \eE
+an escape character
+.TP
+.B \ef
+form feed
+.TP
+.B \en
+new line
+.TP
+.B \er
+carriage return
+.TP
+.B \et
+horizontal tab
+.TP
+.B \ev
+vertical tab
+.TP
+.B \e\e
+backslash
+.TP
+.B \e0\fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
+(zero to three octal digits)
+.TP
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
+.TP
+.B \eu\fIHHHH\fP
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+\fIHHHH\fP (one to four hex digits)
+.TP
+.B \eU\fIHHHHHHHH\fP
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+\fIHHHHHHHH\fP (one to eight hex digits)
+.PD
+.RE
+.TP
+\fBenable\fP [\fB\-a\fP] [\fB\-dnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...]
+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 \fB\-n\fP is used, each \fIname\fP
+is disabled; otherwise,
+\fInames\fP are enabled. For example, to use the
+.B test
+binary found via the
+.SM
+.B PATH
+instead of the shell builtin version, run
+.if t \f(CWenable -n test\fP.
+.if n ``enable -n test''.
+The
+.B \-f
+option means to load the new builtin command
+.I name
+from shared object
+.IR filename ,
+on systems that support dynamic loading. The
+.B \-d
+option will delete a builtin previously loaded with
+.BR \-f .
+If no \fIname\fP arguments are given, or if the
+.B \-p
+option is supplied, a list of shell builtins is printed.
+With no other option arguments, the list consists of all enabled
+shell builtins.
+If \fB\-n\fP is supplied, only disabled builtins are printed.
+If \fB\-a\fP is supplied, the list printed includes all builtins, with an
+indication of whether or not each is enabled.
+If \fB\-s\fP is supplied, the output is restricted to the POSIX
+\fIspecial\fP builtins.
+The return value is 0 unless a
+.I name
+is not a shell builtin or there is an error loading a new builtin
+from a shared object.
+.TP
+\fBeval\fP [\fIarg\fP ...]
+The \fIarg\fPs are read and concatenated together into a single
+command. This command is then read and executed by the shell, and
+its exit status is returned as the value of
+.BR eval .
+If there are no
+.IR args ,
+or only null arguments,
+.B eval
+returns 0.
+.TP
+\fBexec\fP [\fB\-cl\fP] [\fB\-a\fP \fIname\fP] [\fIcommand\fP [\fIarguments\fP]]
+If
+.I command
+is specified, it replaces the shell.
+No new process is created. The
+.I arguments
+become the arguments to \fIcommand\fP.
+If the
+.B \-l
+option is supplied,
+the shell places a dash at the beginning of the zeroth argument passed to
+.IR command .
+This is what
+.IR login (1)
+does. The
+.B \-c
+option causes
+.I command
+to be executed with an empty environment. If
+.B \-a
+is supplied, the shell passes
+.I name
+as the zeroth argument to the executed command.
+If
+.I command
+cannot be executed for some reason, a non-interactive shell exits,
+unless the
+.B execfail
+shell option
+is enabled. In that case, it returns failure.
+An interactive shell returns failure if the file cannot be executed.
+A subshell exits unconditionally if \fBexec\fP fails.
+If
+.I command
+is not specified, any redirections take effect in the current shell,
+and the return status is 0. If there is a redirection error, the
+return status is 1.
+.TP
+\fBexit\fP [\fIn\fP]
+Cause the shell to exit
+with a status of \fIn\fP. If
+.I n
+is omitted, the exit status
+is that of the last command executed.
+A trap on
+.SM
+.B EXIT
+is executed before the shell terminates.
+.TP
+\fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIword\fP]] ...
+.PD 0
+.TP
+.B export \-p
+.PD
+The supplied
+.I names
+are marked for automatic export to the environment of
+subsequently executed commands. If the
+.B \-f
+option is given, the
+.I names
+refer to functions.
+If no
+.I names
+are given, or if the
+.B \-p
+option is supplied, a list
+of names of all exported variables is printed.
+The
+.B \-n
+option causes the export property to be removed from each
+\fIname\fP.
+If a variable name is followed by =\fIword\fP, the value of
+the variable is set to \fIword\fP.
+.B export
+returns an exit status of 0 unless an invalid option is
+encountered,
+one of the \fInames\fP is not a valid shell variable name, or
+.B \-f
+is supplied with a
+.I name
+that is not a function.
+.TP
+\fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-lnr\fP] [\fIfirst\fP] [\fIlast\fP]
+.PD 0
+.TP
+\fBfc\fP \fB\-s\fP [\fIpat\fP=\fIrep\fP] [\fIcmd\fP]
+.PD
+The first form selects a range of commands from
+.I first
+to
+.I last
+from the history list and displays or edits and re-executes them.
+.I First
+and
+.I last
+may be specified as a string (to locate the last 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
+.I last
+is not specified, it is set to
+the current command for listing (so that
+.if n ``fc \-l \-10''
+.if t \f(CWfc \-l \-10\fP
+prints the last 10 commands) and to
+.I first
+otherwise.
+If
+.I first
+is not specified, it is set to the previous
+command for editing and \-16 for listing.
+.sp 1
+The
+.B \-n
+option suppresses
+the command numbers when listing. The
+.B \-r
+option reverses the order of
+the commands. If the
+.B \-l
+option is given,
+the commands are listed on
+standard output. Otherwise, the editor given by
+.I ename
+is invoked
+on a file containing those commands. If
+.I ename
+is not given, the
+value of the
+.SM
+.B FCEDIT
+variable is used, and
+the value of
+.SM
+.B EDITOR
+if
+.SM
+.B FCEDIT
+is not set. If neither variable is set,
+.FN vi
+is used. When editing is complete, the edited commands are
+echoed and executed.
+.sp 1
+In the second form, \fIcommand\fP is re-executed after each instance
+of \fIpat\fP is replaced by \fIrep\fP.
+\fICommand\fP is interpreted the same as \fIfirst\fP above.
+A useful alias to use with this is
+.if n ``r="fc -s"'',
+.if t \f(CWr='fc \-s'\fP,
+so that typing
+.if n ``r cc''
+.if t \f(CWr cc\fP
+runs the last command beginning with
+.if n ``cc''
+.if t \f(CWcc\fP
+and typing
+.if n ``r''
+.if t \f(CWr\fP
+re-executes the last command.
+.sp 1
+If the first form is used, the return value is 0 unless an invalid
+option is encountered or
+.I first
+or
+.I last
+specify history lines out of range.
+If the
+.B \-e
+option is supplied, the return value is the value of the last
+command executed or failure if an error occurs with the temporary
+file of commands. If the second form is used, the return status
+is that of the command re-executed, unless
+.I cmd
+does not specify a valid history line, in which case
+.B fc
+returns failure.
+.TP
+\fBfg\fP [\fIjobspec\fP]
+Resume
+.I jobspec
+in the foreground, and make it the current job.
+If
+.I jobspec
+is not present, the shell's notion of the \fIcurrent job\fP is used.
+The return value is that of the command placed into the foreground,
+or failure if run when job control is disabled or, when run with
+job control enabled, if
+.I jobspec
+does not specify a valid job or
+.I jobspec
+specifies a job that was started without job control.
+.TP
+\fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIargs\fP]
+.B getopts
+is used by shell procedures to parse positional parameters.
+.I optstring
+contains the option characters to be recognized; if a character
+is followed by a colon, the option is expected to have an
+argument, which should be separated from it by white space.
+The colon and question mark characters may not be used as
+option characters.
+Each time it is invoked,
+.B getopts
+places the next option in the shell variable
+.IR name ,
+initializing
+.I name
+if it does not exist,
+and the index of the next argument to be processed into the
+variable
+.SM
+.BR OPTIND .
+.SM
+.B OPTIND
+is initialized to 1 each time the shell or a shell script
+is invoked. When an option requires an argument,
+.B getopts
+places that argument into the variable
+.SM
+.BR OPTARG .
+The shell does not reset
+.SM
+.B OPTIND
+automatically; it must be manually reset between multiple
+calls to
+.B getopts
+within the same shell invocation if a new set of parameters
+is to be used.
+.sp 1
+When the end of options is encountered, \fBgetopts\fP exits with a
+return value greater than zero.
+.SM
+.B OPTIND
+is set to the index of the first non-option argument,
+and \fIname\fP is set to ?.
+.sp 1
+.B getopts
+normally parses the positional parameters, but if more arguments are
+given in
+.IR args ,
+.B getopts
+parses those instead.
+.sp 1
+.B getopts
+can report errors in two ways. If the first character of
+.I optstring
+is a colon,
+.I silent
+error reporting is used. In normal operation, diagnostic messages
+are printed when invalid options or missing option arguments are
+encountered.
+If the variable
+.SM
+.B OPTERR
+is set to 0, no error messages will be displayed, even if the first
+character of
+.I optstring
+is not a colon.
+.sp 1
+If an invalid option is seen,
+.B getopts
+places ? into
+.I name
+and, if not silent,
+prints an error message and unsets
+.SM
+.BR OPTARG .
+If
+.B getopts
+is silent,
+the option character found is placed in
+.SM
+.B OPTARG
+and no diagnostic message is printed.
+.sp 1
+If a required argument is not found, and
+.B getopts
+is not silent,
+a question mark (\^\fB?\fP\^) is placed in
+.IR name ,
+.SM
+.B OPTARG
+is unset, and a diagnostic message is printed.
+If
+.B getopts
+is silent, then a colon (\^\fB:\fP\^) is placed in
+.I name
+and
+.SM
+.B OPTARG
+is set to the option character found.
+.sp 1
+.B getopts
+returns true if an option, specified or unspecified, is found.
+It returns false if the end of options is encountered or an
+error occurs.
+.TP
+\fBhash\fP [\fB\-lr\fP] [\fB\-p\fP \fIfilename\fP] [\fB\-dt\fP] [\fIname\fP]
+Each time \fBhash\fP is invoked,
+the full pathname of the command
+.I name
+is determined by searching
+the directories in
+.B $PATH
+and remembered. Any previously-remembered pathname is discarded.
+If the
+.B \-p
+option is supplied, no path search is performed, and
+.I filename
+is used as the full filename of the command.
+The
+.B \-r
+option causes the shell to forget all
+remembered locations.
+The
+.B \-d
+option causes the shell to forget the remembered location of each \fIname\fP.
+If the
+.B \-t
+option is supplied, the full pathname to which each \fIname\fP corresponds
+is printed. If multiple \fIname\fP arguments are supplied with \fB\-t\fP,
+the \fIname\fP is printed before the hashed full pathname.
+The
+.B \-l
+option causes output to be displayed in a format that may be reused as input.
+If no arguments are given, or if only \fB\-l\fP is supplied,
+information about remembered commands is printed.
+The return status is true unless a
+.I name
+is not found or an invalid option is supplied.
+.TP
+\fBhelp\fP [\fB\-dms\fP] [\fIpattern\fP]
+Display helpful information about builtin commands. If
+.I pattern
+is specified,
+.B help
+gives detailed help on all commands matching
+.IR pattern ;
+otherwise help for all the builtins and shell control structures
+is printed.
+.RS
+.PD 0
+.TP
+.B \-d
+Display a short description of each \fIpattern\fP
+.TP
+.B \-m
+Display the description of each \fIpattern\fP in a manpage-like format
+.TP
+.B \-s
+Display only a short usage synopsis for each \fIpattern\fP
+.PD
+.PP
+The return status is 0 unless no command matches
+.IR pattern .
+.RE
+.TP
+\fBhistory [\fIn\fP]
+.PD 0
+.TP
+\fBhistory\fP \fB\-c\fP
+.TP
+\fBhistory \-d\fP \fIoffset\fP
+.TP
+\fBhistory \-d\fP \fIstart\fP\-\fIend\fP
+.TP
+\fBhistory\fP \fB\-anrw\fP [\fIfilename\fP]
+.TP
+\fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg ...\fP]
+.TP
+\fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg ...\fP]
+.PD
+With no options, display the command
+history list with line numbers. Lines listed
+with a
+.B *
+have been modified. An argument of
+.I n
+lists only the last
+.I n
+lines.
+If the shell variable
+.SM
+.B HISTTIMEFORMAT
+is set and not null,
+it is used as a format string for \fIstrftime\fP(3) 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.
+If \fIfilename\fP is supplied, it is used as the
+name of the history file; if not, the value of
+.SM
+.B HISTFILE
+is used. Options, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-c
+Clear the history list by deleting all the entries.
+.TP
+\fB\-d\fP \fIoffset\fP
+Delete the history entry at position \fIoffset\fP.
+If \fIoffset\fP is negative, it is interpreted as relative to one greater
+than the last history position, so negative indices count back from the
+end of the history, and an index of \-1 refers to the current
+\fBhistory -d\fP command.
+.TP
+\fB\-d\fP \fIstart\fP\-\fIend\fP
+Delete the history entries between positions \fIstart\fP and \fIend\fP,
+inclusive. Positive and negative values for \fIstart\fP and \fIend\fP
+are interpreted as described above.
+.TP
+.B \-a
+Append the ``new'' history lines to the history file.
+These are history lines entered since the beginning of the current
+\fBbash\fP session, but not already appended to the history file.
+.TP
+.B \-n
+Read the history lines not already read from the history
+file into the current history list. These are lines
+appended to the history file since the beginning of the
+current \fBbash\fP session.
+.TP
+.B \-r
+Read the contents of the history file
+and append them to the current history list.
+.TP
+.B \-w
+Write the current history list to the history file, overwriting the
+history file's contents.
+.TP
+.B \-p
+Perform history substitution on the following \fIargs\fP and display
+the result on the standard output.
+Does not store the results in the history list.
+Each \fIarg\fP must be quoted to disable normal history expansion.
+.TP
+.B \-s
+Store the
+.I args
+in the history list as a single entry. The last command in the
+history list is removed before the
+.I args
+are added.
+.PD
+.PP
+If the
+.SM
+.B HISTTIMEFORMAT
+variable is set, the time stamp information
+associated with each history entry is written to the history file,
+marked with the history comment character.
+When the history file is read, lines beginning with the history
+comment character followed immediately by a digit are interpreted
+as timestamps for the following history entry.
+The return value is 0 unless an invalid option is encountered, an
+error occurs while reading or writing the history file, an invalid
+\fIoffset\fP is supplied as an argument to \fB\-d\fP, or the
+history expansion supplied as an argument to \fB\-p\fP fails.
+.RE
+.TP
+\fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP ... ]
+.PD 0
+.TP
+\fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP ... ]
+.PD
+The first form lists the active jobs. The options have the following
+meanings:
+.RS
+.PD 0
+.TP
+.B \-l
+List process IDs
+in addition to the normal information.
+.TP
+.B \-n
+Display information only about jobs that have changed status since
+the user was last notified of their status.
+.TP
+.B \-p
+List only the process ID of the job's process group
+leader.
+.TP
+.B \-r
+Display only running jobs.
+.TP
+.B \-s
+Display only stopped jobs.
+.PD
+.PP
+If
+.I jobspec
+is given, output is restricted to information about that job.
+The return status is 0 unless an invalid option is encountered
+or an invalid
+.I jobspec
+is supplied.
+.PP
+If the
+.B \-x
+option is supplied,
+.B jobs
+replaces any
+.I jobspec
+found in
+.I command
+or
+.I args
+with the corresponding process group ID, and executes
+.I command
+passing it
+.IR args ,
+returning its exit status.
+.RE
+.TP
+\fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] [\fIpid\fP | \fIjobspec\fP] ...
+.PD 0
+.TP
+\fBkill\fP \fB\-l\fP|\fB\-L\fP [\fIsigspec\fP | \fIexit_status\fP]
+.PD
+Send the signal named by
+.I sigspec
+or
+.I signum
+to the processes named by
+.I pid
+or
+.IR jobspec .
+.I sigspec
+is either a case-insensitive signal name such as
+.SM
+.B SIGKILL
+(with or without the
+.SM
+.B SIG
+prefix) or a signal number;
+.I signum
+is a signal number.
+If
+.I sigspec
+is not present, then
+.SM
+.B SIGTERM
+is assumed.
+An argument of
+.B \-l
+lists the signal names.
+If any arguments are supplied when
+.B \-l
+is given, the names of the signals corresponding to the arguments are
+listed, and the return status is 0.
+The \fIexit_status\fP argument to
+.B \-l
+is a number specifying either a signal number or the exit status of
+a process terminated by a signal.
+The
+.B \-L
+option is equivalent to \fB\-l\fP.
+.B kill
+returns true if at least one signal was successfully sent, or false
+if an error occurs or an invalid option is encountered.
+.TP
+\fBlet\fP \fIarg\fP [\fIarg\fP ...]
+Each
+.I arg
+is an arithmetic expression to be evaluated (see
+.SM
+.B "ARITHMETIC EVALUATION"
+above).
+If the last
+.I arg
+evaluates to 0,
+.B let
+returns 1; 0 is returned otherwise.
+.TP
+\fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] ... | \- ]
+For each argument, a local variable named
+.I name
+is created, and assigned
+.IR value .
+The \fIoption\fP can be any of the options accepted by \fBdeclare\fP.
+When
+.B local
+is used within a function, it causes the variable
+.I name
+to have a visible scope restricted to that function and its children.
+If \fIname\fP is \-, the set of shell options is made local to the function
+in which \fBlocal\fP is invoked: shell options changed using the
+\fBset\fP builtin inside the function are restored to their original values
+when the function returns.
+With no operands,
+.B local
+writes a list of local variables to the standard output. It is
+an error to use
+.B local
+when not within a function. The return status is 0 unless
+.B local
+is used outside a function, an invalid
+.I name
+is supplied, or
+\fIname\fP is a readonly variable.
+.TP
+.B logout
+Exit a login shell.
+.TP
+\fBmapfile\fP [\fB\-d\fP \fIdelim\fP] [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP]
+.PD 0
+.TP
+\fBreadarray\fP [\fB\-d\fP \fIdelim\fP] [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP]
+.PD
+Read lines from the standard input into the indexed array variable
+.IR array ,
+or from file descriptor
+.I fd
+if the
+.B \-u
+option is supplied.
+The variable
+.SM
+.B MAPFILE
+is the default \fIarray\fP.
+Options, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-d
+The first character of \fIdelim\fP is used to terminate each input line,
+rather than newline.
+If \fIdelim\fP is the empty string, \fBmapfile\fP will terminate a line
+when it reads a NUL character.
+.TP
+.B \-n
+Copy at most
+.I count
+lines. If \fIcount\fP is 0, all lines are copied.
+.TP
+.B \-O
+Begin assigning to
+.I array
+at index
+.IR origin .
+The default index is 0.
+.TP
+.B \-s
+Discard the first \fIcount\fP lines read.
+.TP
+.B \-t
+Remove a trailing \fIdelim\fP (default newline) from each line read.
+.TP
+.B \-u
+Read lines from file descriptor \fIfd\fP instead of the standard input.
+.TP
+.B \-C
+Evaluate
+.I callback
+each time \fIquantum\fP lines are read. The \fB\-c\fP option specifies
+.IR quantum .
+.TP
+.B \-c
+Specify the number of lines read between each call to
+.IR callback .
+.PD
+.PP
+If
+.B \-C
+is specified without
+.BR \-c ,
+the default quantum is 5000.
+When \fIcallback\fP is evaluated, it is supplied the index of the next
+array element to be assigned and the line to be assigned to that element
+as additional arguments.
+\fIcallback\fP is evaluated after the line is read but before the
+array element is assigned.
+.PP
+If not supplied with an explicit origin, \fBmapfile\fP will clear \fIarray\fP
+before assigning to it.
+.PP
+\fBmapfile\fP returns successfully unless an invalid option or option
+argument is supplied, \fIarray\fP is invalid or unassignable, or if
+\fIarray\fP is not an indexed array.
+.RE
+.TP
+\fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP]
+Removes entries from the directory stack. With no arguments,
+removes the top directory from the stack, and performs a
+.B cd
+to the new top directory.
+Arguments, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-n
+Suppresses the normal change of directory when removing directories
+from the stack, so that only the stack is manipulated.
+.TP
+\fB+\fP\fIn\fP
+Removes the \fIn\fPth entry counting from the left of the list
+shown by
+.BR dirs ,
+starting with zero. For example:
+.if n ``popd +0''
+.if t \f(CWpopd +0\fP
+removes the first directory,
+.if n ``popd +1''
+.if t \f(CWpopd +1\fP
+the second.
+.TP
+\fB\-\fP\fIn\fP
+Removes the \fIn\fPth entry counting from the right of the list
+shown by
+.BR dirs ,
+starting with zero. For example:
+.if n ``popd -0''
+.if t \f(CWpopd -0\fP
+removes the last directory,
+.if n ``popd -1''
+.if t \f(CWpopd -1\fP
+the next to last.
+.PD
+.PP
+If the
+.B popd
+command is successful, a
+.B dirs
+is performed as well, and the return status is 0.
+.B popd
+returns false if an invalid option is encountered, the directory stack
+is empty, a non-existent directory stack entry is specified, or the
+directory change fails.
+.RE
+.TP
+\fBprintf\fP [\fB\-v\fP \fIvar\fP] \fIformat\fP [\fIarguments\fP]
+Write the formatted \fIarguments\fP to the standard output under the
+control of the \fIformat\fP.
+The \fB\-v\fP option causes the output to be assigned to the variable
+\fIvar\fP rather than being printed to the standard output.
+.sp 1
+The \fIformat\fP 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
+\fIargument\fP.
+In addition to the standard \fIprintf\fP(1) format specifications,
+\fBprintf\fP interprets the following extensions:
+.RS
+.PD 0
+.TP
+.B %b
+causes
+\fBprintf\fP to expand backslash escape sequences in the corresponding
+\fIargument\fP
+in the same way as \fBecho \-e\fP.
+.TP
+.B %q
+causes \fBprintf\fP to output the corresponding
+\fIargument\fP in a format that can be reused as shell input.
+.TP
+.B %(\fIdatefmt\fP)T
+causes \fBprintf\fP to output the date-time string resulting from using
+\fIdatefmt\fP as a format string for \fIstrftime\fP(3).
+The corresponding \fIargument\fP is an integer representing the number of
+seconds since the epoch.
+Two special argument values may be used: \-1 represents the current
+time, and \-2 represents the time the shell was invoked.
+If no argument is specified, conversion behaves as if \-1 had been given.
+This is an exception to the usual \fBprintf\fP behavior.
+.PD
+.PP
+Arguments to non-string format specifiers are treated as C constants,
+except that a leading plus or minus sign is allowed, and if the leading
+character is a single or double quote, the value is the ASCII value of
+the following character.
+.PP
+The \fIformat\fP is reused as necessary to consume all of the \fIarguments\fP.
+If the \fIformat\fP requires more \fIarguments\fP 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.
+.RE
+.TP
+\fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP]
+.PD 0
+.TP
+\fBpushd\fP [\fB\-n\fP] [\fIdir\fP]
+.PD
+Adds a directory to the top of the directory stack, or rotates
+the stack, making the new top of the stack the current working
+directory. With no arguments, \fBpushd\fP exchanges the top two directories
+and returns 0, unless the directory stack is empty.
+Arguments, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-n
+Suppresses the normal change of directory when rotating or
+adding directories to the stack, so that only the stack is manipulated.
+.TP
+\fB+\fP\fIn\fP
+Rotates the stack so that the \fIn\fPth directory
+(counting from the left of the list shown by
+.BR dirs ,
+starting with zero)
+is at the top.
+.TP
+\fB\-\fP\fIn\fP
+Rotates the stack so that the \fIn\fPth directory
+(counting from the right of the list shown by
+.BR dirs ,
+starting with zero) is at the top.
+.TP
+.I dir
+Adds
+.I dir
+to the directory stack at the top, making it the
+new current working directory as if it had been supplied as the argument
+to the \fBcd\fP builtin.
+.PD
+.PP
+If the
+.B pushd
+command is successful, a
+.B dirs
+is performed as well.
+If the first form is used,
+.B pushd
+returns 0 unless the cd to
+.I dir
+fails. With the second form,
+.B pushd
+returns 0 unless the directory stack is empty,
+a non-existent directory stack element is specified,
+or the directory change to the specified new current directory
+fails.
+.RE
+.TP
+\fBpwd\fP [\fB\-LP\fP]
+Print the absolute pathname of the current working directory.
+The pathname printed contains no symbolic links if the
+.B \-P
+option is supplied or the
+.B \-o physical
+option to the
+.B set
+builtin command is enabled.
+If the
+.B \-L
+option is used, the pathname printed may contain symbolic links.
+The return status is 0 unless an error occurs while
+reading the name of the current directory or an
+invalid option is supplied.
+.TP
+\fBread\fP [\fB\-ers\fP] [\fB\-a\fP \fIaname\fP] [\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] [\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-u\fP \fIfd\fP] [\fIname\fP ...]
+One line is read from the standard input, or from the file descriptor
+\fIfd\fP supplied as an argument to the \fB\-u\fP option,
+split into words as described above under \fBWord Splitting\fP,
+and the first word
+is assigned to the first
+.IR name ,
+the second word to the second
+.IR name ,
+and so on.
+If there are more words than names, the remaining words and their
+intervening delimiters are assigned to the last
+.IR name .
+If there are fewer words read from the input stream than names,
+the remaining names are assigned empty values.
+The characters in
+.SM
+.B IFS
+are used to split the line into words using the same rules the shell
+uses for expansion (described above under \fBWord Splitting\fP).
+The backslash character (\fB\e\fP) may be used to remove any special
+meaning for the next character read and for line continuation.
+Options, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-a \fIaname\fP
+The words are assigned to sequential indices
+of the array variable
+.IR aname ,
+starting at 0.
+.I aname
+is unset before any new values are assigned.
+Other \fIname\fP arguments are ignored.
+.TP
+.B \-d \fIdelim\fP
+The first character of \fIdelim\fP is used to terminate the input line,
+rather than newline.
+If \fIdelim\fP is the empty string, \fBread\fP will terminate a line
+when it reads a NUL character.
+.TP
+.B \-e
+If the standard input
+is coming from a terminal,
+.B readline
+(see
+.SM
+.B READLINE
+above) is used to obtain the line.
+Readline uses the current (or default, if line editing was not previously
+active) editing settings, but uses Readline's default filename completion.
+.TP
+.B \-i \fItext\fP
+If
+.B readline
+is being used to read the line, \fItext\fP is placed into the editing
+buffer before editing begins.
+.TP
+.B \-n \fInchars\fP
+\fBread\fP returns after reading \fInchars\fP characters rather than
+waiting for a complete line of input, but honors a delimiter if fewer
+than \fInchars\fP characters are read before the delimiter.
+.TP
+.B \-N \fInchars\fP
+\fBread\fP returns after reading exactly \fInchars\fP characters rather
+than waiting for a complete line of input, unless EOF is encountered or
+\fBread\fP times out.
+Delimiter characters encountered in the input are
+not treated specially and do not cause \fBread\fP to return until
+\fInchars\fP characters are read.
+The result is not split on the characters in \fBIFS\fP; the intent is
+that the variable is assigned exactly the characters read
+(with the exception of backslash; see the \fB\-r\fP option below).
+.TP
+.B \-p \fIprompt\fP
+Display \fIprompt\fP on standard error, without a
+trailing newline, before attempting to read any input. The prompt
+is displayed only if input is coming from a terminal.
+.TP
+.B \-r
+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 then be used as a line
+continuation.
+.TP
+.B \-s
+Silent mode. If input is coming from a terminal, characters are
+not echoed.
+.TP
+.B \-t \fItimeout\fP
+Cause \fBread\fP to time out and return failure if a complete line of
+input (or a specified number of characters)
+is not read within \fItimeout\fP seconds.
+\fItimeout\fP may be a decimal number with a fractional portion following
+the decimal point.
+This option is only effective if \fBread\fP is reading input from a
+terminal, pipe, or other special file; it has no effect when reading
+from regular files.
+If \fBread\fP times out, \fBread\fP saves any partial input read into
+the specified variable \fIname\fP.
+If \fItimeout\fP is 0, \fBread\fP returns immediately, without trying to
+read any data. The exit status is 0 if input is available on
+the specified file descriptor, non-zero otherwise.
+The exit status is greater than 128 if the timeout is exceeded.
+.TP
+.B \-u \fIfd\fP
+Read input from file descriptor \fIfd\fP.
+.PD
+.PP
+If no
+.I names
+are supplied, the line read is assigned to the variable
+.SM
+.BR REPLY .
+The exit status is zero, unless end-of-file is encountered, \fBread\fP
+times out (in which case the status is greater than 128),
+a variable assignment error (such as assigning to a readonly variable) occurs,
+or an invalid file descriptor is supplied as the argument to \fB\-u\fP.
+.RE
+.TP
+\fBreadonly\fP [\fB\-aAf\fP] [\fB\-p\fP] [\fIname\fP[=\fIword\fP] ...]
+.PD
+The given
+\fInames\fP are marked readonly; the values of these
+.I names
+may not be changed by subsequent assignment.
+If the
+.B \-f
+option is supplied, the functions corresponding to the
+\fInames\fP are so
+marked.
+The
+.B \-a
+option restricts the variables to indexed arrays; the
+.B \-A
+option restricts the variables to associative arrays.
+If both options are supplied,
+.B \-A
+takes precedence.
+If no
+.I name
+arguments are given, or if the
+.B \-p
+option is supplied, a list of all readonly names is printed.
+The other options may be used to restrict the output to a subset of
+the set of readonly names.
+The
+.B \-p
+option causes output to be displayed in a format that
+may be reused as input.
+If a variable name is followed by =\fIword\fP, the value of
+the variable is set to \fIword\fP.
+The return status is 0 unless an invalid option is encountered,
+one of the
+.I names
+is not a valid shell variable name, or
+.B \-f
+is supplied with a
+.I name
+that is not a function.
+.TP
+\fBreturn\fP [\fIn\fP]
+Causes a function to stop executing and return the value specified by
+.I n
+to its caller.
+If
+.I n
+is omitted, the return status is that of the last command
+executed in the function body.
+If \fBreturn\fP is executed by a trap handler, the last command used to
+determine the status is the last command executed before the trap handler.
+If \fBreturn\fP is executed during a \fBDEBUG\fP trap, the last command
+used to determine the status is the last command executed by the trap
+handler before \fBreturn\fP was invoked.
+If
+.B return
+is used outside a function,
+but during execution of a script by the
+.B .
+(\fBsource\fP) command, it causes the shell to stop executing
+that script and return either
+.I n
+or the exit status of the last command executed within the
+script as the exit status of the script.
+If \fIn\fP is supplied, the return value is its least significant
+8 bits.
+The return status is non-zero if
+.B return
+is supplied a non-numeric argument, or
+is used outside a
+function and not during execution of a script by \fB.\fP\^ or \fBsource\fP.
+Any command associated with the \fBRETURN\fP trap is executed
+before execution resumes after the function or script.
+.TP
+\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fIarg\fP ...]
+.PD 0
+.TP
+\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fIarg\fP ...]
+.PD
+Without options, the name and value of each shell variable are displayed
+in a format that can be reused as input
+for setting or resetting the currently-set variables.
+Read-only variables cannot be reset.
+In \fIposix mode\fP, only shell variables are listed.
+The output is sorted according to the current locale.
+When options are specified, they set or unset shell attributes.
+Any arguments remaining after option processing are treated
+as values for the positional parameters and are assigned, in order, to
+.BR $1 ,
+.BR $2 ,
+.B ...
+.BR $\fIn\fP .
+Options, if specified, have the following meanings:
+.RS
+.PD 0
+.TP 8
+.B \-a
+Each variable or function that is created or modified is given the
+export attribute and marked for export to the environment of
+subsequent commands.
+.TP 8
+.B \-b
+Report the status of terminated background jobs
+immediately, rather than before the next primary prompt. This is
+effective only when job control is enabled.
+.TP 8
+.B \-e
+Exit immediately if a
+\fIpipeline\fP (which may consist of a single \fIsimple command\fP),
+a \fIlist\fP,
+or a \fIcompound command\fP
+(see
+.SM
+.B SHELL GRAMMAR
+above), exits with a non-zero status.
+The shell does not exit if the
+command that fails is part of the command list immediately following a
+.B while
+or
+.B until
+keyword,
+part of the test following the
+.B if
+or
+.B elif
+reserved words, part of any command executed in a
+.B &&
+or
+.B ||
+list except the command following the final \fB&&\fP or \fB||\fP,
+any command in a pipeline but the last,
+or if the command's return value is
+being inverted with
+.BR ! .
+If a compound command other than a subshell
+returns a non-zero status because a command failed
+while \fB\-e\fP was being ignored, the shell does not exit.
+A trap on \fBERR\fP, if set, is executed before the shell exits.
+This option applies to the shell environment and each subshell environment
+separately (see
+.SM
+.B "COMMAND EXECUTION ENVIRONMENT"
+above), and may cause
+subshells to exit before executing all the commands in the subshell.
+.if t .sp 0.5
+.if n .sp 1
+If a compound command or shell function executes in a context
+where \fB\-e\fP is being ignored,
+none of the commands executed within the compound command or function body
+will be affected by the \fB\-e\fP setting, even if \fB\-e\fP is set
+and a command returns a failure status.
+If a compound command or shell function sets \fB\-e\fP while executing in
+a context where \fB\-e\fP is ignored, that setting will not have any
+effect until the compound command or the command containing the function
+call completes.
+.TP 8
+.B \-f
+Disable pathname expansion.
+.TP 8
+.B \-h
+Remember the location of commands as they are looked up for execution.
+This is enabled by default.
+.TP 8
+.B \-k
+All arguments in the form of assignment statements
+are placed in the environment for a command, not just
+those that precede the command name.
+.TP 8
+.B \-m
+Monitor mode. Job control is enabled. This option is on
+by default for interactive shells on systems that support
+it (see
+.SM
+.B JOB CONTROL
+above).
+All processes run in a separate process group.
+When a background job completes, the shell prints a line
+containing its exit status.
+.TP 8
+.B \-n
+Read commands but do not execute them.
+This may be used to check a shell script for syntax errors.
+This is ignored by interactive shells.
+.TP 8
+.B \-o \fIoption\-name\fP
+The \fIoption\-name\fP can be one of the following:
+.RS
+.TP 8
+.B allexport
+Same as
+.BR \-a .
+.TP 8
+.B braceexpand
+Same as
+.BR \-B .
+.TP 8
+.B emacs
+Use an emacs-style command line editing interface. This is enabled
+by default when the shell is interactive, unless the shell is started
+with the
+.B \-\-noediting
+option.
+This also affects the editing interface used for \fBread \-e\fP.
+.TP 8
+.B errexit
+Same as
+.BR \-e .
+.TP 8
+.B errtrace
+Same as
+.BR \-E .
+.TP 8
+.B functrace
+Same as
+.BR \-T .
+.TP 8
+.B hashall
+Same as
+.BR \-h .
+.TP 8
+.B histexpand
+Same as
+.BR \-H .
+.TP 8
+.B history
+Enable command history, as described above under
+.SM
+.BR HISTORY .
+This option is on by default in interactive shells.
+.TP 8
+.B ignoreeof
+The effect is as if the shell command
+.if t \f(CWIGNOREEOF=10\fP
+.if n ``IGNOREEOF=10''
+had been executed
+(see
+.B Shell Variables
+above).
+.TP 8
+.B keyword
+Same as
+.BR \-k .
+.TP 8
+.B monitor
+Same as
+.BR \-m .
+.TP 8
+.B noclobber
+Same as
+.BR \-C .
+.TP 8
+.B noexec
+Same as
+.BR \-n .
+.TP 8
+.B noglob
+Same as
+.BR \-f .
+.TP 8
+.B nolog
+Currently ignored.
+.TP 8
+.B notify
+Same as
+.BR \-b .
+.TP 8
+.B nounset
+Same as
+.BR \-u .
+.TP 8
+.B onecmd
+Same as
+.BR \-t .
+.TP 8
+.B physical
+Same as
+.BR \-P .
+.TP 8
+.B pipefail
+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.
+.TP 8
+.B posix
+Change the behavior of
+.B bash
+where the default operation differs
+from the POSIX standard to match the standard (\fIposix mode\fP).
+See
+.SM
+.B "SEE ALSO"
+below for a reference to a document that details how posix mode affects
+bash's behavior.
+.TP 8
+.B privileged
+Same as
+.BR \-p .
+.TP 8
+.B verbose
+Same as
+.BR \-v .
+.TP 8
+.B vi
+Use a vi-style command line editing interface.
+This also affects the editing interface used for \fBread \-e\fP.
+.TP 8
+.B xtrace
+Same as
+.BR \-x .
+.sp .5
+.PP
+If
+.B \-o
+is supplied with no \fIoption\-name\fP, the values of the current options are
+printed.
+If
+.B +o
+is supplied with no \fIoption\-name\fP, a series of
+.B set
+commands to recreate the current option settings is displayed on
+the standard output.
+.RE
+.TP 8
+.B \-p
+Turn on
+.I privileged
+mode. In this mode, the
+.SM
+.B $ENV
+and
+.SM
+.B $BASH_ENV
+files are not processed, shell functions are not inherited from the
+environment, and the
+.SM
+.BR SHELLOPTS ,
+.SM
+.BR BASHOPTS ,
+.SM
+.BR CDPATH ,
+and
+.SM
+.B GLOBIGNORE
+variables, if they appear in the environment, are ignored.
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the \fB\-p\fP option is not supplied, these actions
+are taken and the effective user id is set to the real user id.
+If the \fB\-p\fP 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.
+.TP 8
+.B \-t
+Exit after reading and executing one command.
+.TP 8
+.B \-u
+Treat unset variables and parameters other than the special
+parameters "@" and "*" as an error when performing
+parameter expansion. If expansion is attempted on an
+unset variable or parameter, the shell prints an error message, and,
+if not interactive, exits with a non-zero status.
+.TP 8
+.B \-v
+Print shell input lines as they are read.
+.TP 8
+.B \-x
+After expanding each \fIsimple command\fP,
+\fBfor\fP command, \fBcase\fP command, \fBselect\fP command, or
+arithmetic \fBfor\fP command, display the expanded value of
+.SM
+.BR PS4 ,
+followed by the command and its expanded arguments
+or associated word list.
+.TP 8
+.B \-B
+The shell performs brace expansion (see
+.B Brace Expansion
+above). This is on by default.
+.TP 8
+.B \-C
+If set,
+.B bash
+does not overwrite an existing file with the
+.BR > ,
+.BR >& ,
+and
+.B <>
+redirection operators. This may be overridden when
+creating output files by using the redirection operator
+.B >|
+instead of
+.BR > .
+.TP 8
+.B \-E
+If set, any trap on \fBERR\fP is inherited by shell functions, command
+substitutions, and commands executed in a subshell environment.
+The \fBERR\fP trap is normally not inherited in such cases.
+.TP 8
+.B \-H
+Enable
+.B !
+style history substitution. This option is on by
+default when the shell is interactive.
+.TP 8
+.B \-P
+If set, the shell does not resolve symbolic links when executing
+commands such as
+.B cd
+that change the current working directory. It uses the
+physical directory structure instead. By default,
+.B bash
+follows the logical chain of directories when performing commands
+which change the current directory.
+.TP 8
+.B \-T
+If set, any traps on \fBDEBUG\fP and \fBRETURN\fP are inherited by shell
+functions, command substitutions, and commands executed in a
+subshell environment.
+The \fBDEBUG\fP and \fBRETURN\fP traps are normally not inherited
+in such cases.
+.TP 8
+.B \-\-
+If no arguments follow this option, then the positional parameters are
+unset. Otherwise, the positional parameters are set to the
+\fIarg\fPs, even if some of them begin with a
+.BR \- .
+.TP 8
+.B \-
+Signal the end of options, cause all remaining \fIarg\fPs to be
+assigned to the positional parameters. The
+.B \-x
+and
+.B \-v
+options are turned off.
+If there are no \fIarg\fPs,
+the positional parameters remain unchanged.
+.PD
+.PP
+The options are off by default unless otherwise noted.
+Using + rather than \- causes these options to be turned off.
+The options can also be specified as arguments to an invocation of
+the shell.
+The current set of options may be found in
+.BR $\- .
+The return status is always true unless an invalid option is encountered.
+.RE
+.TP
+\fBshift\fP [\fIn\fP]
+The positional parameters from \fIn\fP+1 ... are renamed to
+.B $1
+.B ....
+Parameters represented by the numbers \fB$#\fP
+down to \fB$#\fP\-\fIn\fP+1 are unset.
+.I n
+must be a non-negative number less than or equal to \fB$#\fP.
+If
+.I n
+is 0, no parameters are changed.
+If
+.I n
+is not given, it is assumed to be 1.
+If
+.I n
+is greater than \fB$#\fP, the positional parameters are not changed.
+The return status is greater than zero if
+.I n
+is greater than
+.B $#
+or less than zero; otherwise 0.
+.TP
+\fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP ...]
+Toggle the values of settings controlling optional shell behavior.
+The settings can be either those listed below, or, if the
+.B \-o
+option is used, those available with the
+.B \-o
+option to the \fBset\fP builtin command.
+With no options, or with the
+.B \-p
+option, a list of all settable options is displayed, with
+an indication of whether or not each is set;
+if \fIoptnames\fP are supplied, the output is restricted to those options.
+The \fB\-p\fP option causes output to be displayed in a form that
+may be reused as input.
+Other options have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-s
+Enable (set) each \fIoptname\fP.
+.TP
+.B \-u
+Disable (unset) each \fIoptname\fP.
+.TP
+.B \-q
+Suppresses normal output (quiet mode); the return status indicates
+whether the \fIoptname\fP is set or unset.
+If multiple \fIoptname\fP arguments are given with
+.BR \-q ,
+the return status is zero if all \fIoptnames\fP are enabled; non-zero
+otherwise.
+.TP
+.B \-o
+Restricts the values of \fIoptname\fP to be those defined for the
+.B \-o
+option to the
+.B set
+builtin.
+.PD
+.PP
+If either
+.B \-s
+or
+.B \-u
+is used with no \fIoptname\fP arguments,
+.B shopt
+shows only those options which are set or unset, respectively.
+Unless otherwise noted, the \fBshopt\fP options are disabled (unset)
+by default.
+.PP
+The return status when listing options is zero if all \fIoptnames\fP
+are enabled, non-zero otherwise. When setting or unsetting options,
+the return status is zero unless an \fIoptname\fP is not a valid shell
+option.
+.PP
+The list of \fBshopt\fP options is:
+.if t .sp .5v
+.if n .sp 1v
+.PD 0
+.TP 8
+.B assoc_expand_once
+If set, the shell suppresses multiple evaluation of associative array
+subscripts during arithmetic expression evaluation, while executing
+builtins that can perform variable assignments,
+and while executing builtins that perform array dereferencing.
+.TP 8
+.B autocd
+If set, a command name that is the name of a directory is executed as if
+it were the argument to the \fBcd\fP command.
+This option is only used by interactive shells.
+.TP 8
+.B cdable_vars
+If set, an argument to the
+.B cd
+builtin command that
+is not a directory is assumed to be the name of a variable whose
+value is the directory to change to.
+.TP 8
+.B cdspell
+If set, minor errors in the spelling of a directory component in a
+.B cd
+command will be corrected.
+The errors checked for are transposed characters,
+a missing character, and one character too many.
+If a correction is found, the corrected filename is printed,
+and the command proceeds.
+This option is only used by interactive shells.
+.TP 8
+.B checkhash
+If set, \fBbash\fP 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.
+.TP 8
+.B checkjobs
+If set, \fBbash\fP 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
+.SM
+.B "JOB CONTROL"
+above). The shell always
+postpones exiting if any jobs are stopped.
+.TP 8
+.B checkwinsize
+If set, \fBbash\fP checks the window size after each external (non-builtin)
+command and, if necessary, updates the values of
+.SM
+.B LINES
+and
+.SM
+.BR COLUMNS .
+This option is enabled by default.
+.TP 8
+.B cmdhist
+If set,
+.B 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.
+This option is enabled by default, but only has an effect if command
+history is enabled, as described above under
+.SM
+.BR HISTORY .
+.TP 8
+.B compat31
+If set,
+.B bash
+changes its behavior to that of version 3.1 with respect to quoted
+arguments to the \fB[[\fP conditional command's \fB=~\fP operator
+and locale-specific string comparison when using the \fB[[\fP
+conditional command's \fB<\fP and \fB>\fP operators.
+Bash versions prior to bash-4.1 use ASCII collation and
+.IR strcmp (3);
+bash-4.1 and later use the current locale's collation sequence and
+.IR strcoll (3).
+.TP 8
+.B compat32
+If set,
+.B bash
+changes its behavior to that of version 3.2 with respect to
+locale-specific string comparison when using the \fB[[\fP
+conditional command's \fB<\fP and \fB>\fP operators (see previous item)
+and the effect of interrupting a command list.
+Bash versions 3.2 and earlier continue with the next command in the list
+after one terminates due to an interrupt.
+.TP 8
+.B compat40
+If set,
+.B bash
+changes its behavior to that of version 4.0 with respect to locale-specific
+string comparison when using the \fB[[\fP
+conditional command's \fB<\fP and \fB>\fP operators (see description of
+\fBcompat31\fP)
+and the effect of interrupting a command list.
+Bash versions 4.0 and later interrupt the list as if the shell received the
+interrupt; previous versions continue with the next command in the list.
+.TP 8
+.B compat41
+If set,
+.BR bash ,
+when in \fIposix mode\fP, treats a single quote in a double-quoted
+parameter expansion as a special character. The single quotes must match
+(an even number) and the characters between the single quotes are considered
+quoted. This is the behavior of posix mode through version 4.1.
+The default bash behavior remains as in previous versions.
+.TP 8
+.B compat42
+If set,
+.B bash
+does not process the replacement string in the pattern substitution word
+expansion using quote removal.
+.TP 8
+.B compat43
+If set,
+.B bash
+does not print a warning message if an attempt is made to use a quoted compound
+array assignment as an argument to \fBdeclare\fP,
+makes word expansion errors
+non-fatal errors that cause the current command to fail (the default behavior is
+to make them fatal errors that cause the shell to exit),
+and does not reset the
+loop state when a shell function is executed (this allows \fBbreak\fP or
+\fBcontinue\fP in a shell function to affect loops in the caller's context).
+.TP 8
+.B compat44
+If set,
+.B bash
+saves the positional parameters to BASH_ARGV and BASH_ARGC before they are
+used, regardless of whether or not extended debugging mode is enabled.
+.TP 8
+.B complete_fullquote
+If set,
+.B bash
+quotes all shell metacharacters in filenames and directory names when
+performing completion.
+If not set,
+.B bash
+removes metacharacters such as the dollar sign from the set of
+characters that will be quoted in completed filenames
+when these metacharacters appear in shell variable references in words to be
+completed.
+This means that dollar signs in variable names that expand to directories
+will not be quoted;
+however, any dollar signs appearing in filenames will not be quoted, either.
+This is active only when bash is using backslashes to quote completed
+filenames.
+This variable is set by default, which is the default bash behavior in
+versions through 4.2.
+.TP 8
+.B direxpand
+If set,
+.B bash
+replaces directory names with the results of word expansion when performing
+filename completion. This changes the contents of the readline editing
+buffer.
+If not set,
+.B bash
+attempts to preserve what the user typed.
+.TP 8
+.B dirspell
+If set,
+.B bash
+attempts spelling correction on directory names during word completion
+if the directory name initially supplied does not exist.
+.TP 8
+.B dotglob
+If set,
+.B bash
+includes filenames beginning with a `.' in the results of pathname
+expansion.
+The filenames
+.B ``.''
+and
+.B ``..''
+must always be matched explicitly, even if
+.B dotglob
+is set.
+.TP 8
+.B execfail
+If set, a non-interactive shell will not exit if
+it cannot execute the file specified as an argument to the
+.B exec
+builtin command. An interactive shell does not exit if
+.B exec
+fails.
+.TP 8
+.B expand_aliases
+If set, aliases are expanded as described above under
+.SM
+.BR ALIASES .
+This option is enabled by default for interactive shells.
+.TP 8
+.B extdebug
+If set at shell invocation, arrange to execute the debugger profile
+before the shell starts, identical to the \fB\-\-debugger\fP option.
+If set after invocation, behavior intended for use by debuggers is enabled:
+.RS
+.TP
+.B 1.
+The \fB\-F\fP option to the \fBdeclare\fP builtin displays the source
+file name and line number corresponding to each function name supplied
+as an argument.
+.TP
+.B 2.
+If the command run by the \fBDEBUG\fP trap returns a non-zero value, the
+next command is skipped and not executed.
+.TP
+.B 3.
+If the command run by the \fBDEBUG\fP trap returns a value of 2, and the
+shell is executing in a subroutine (a shell function or a shell script
+executed by the \fB.\fP or \fBsource\fP builtins), the shell simulates
+a call to \fBreturn\fP.
+.TP
+.B 4.
+.SM
+.B BASH_ARGC
+and
+.SM
+.B BASH_ARGV
+are updated as described in their descriptions above.
+.TP
+.B 5.
+Function tracing is enabled: command substitution, shell functions, and
+subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the
+\fBDEBUG\fP and \fBRETURN\fP traps.
+.TP
+.B 6.
+Error tracing is enabled: command substitution, shell functions, and
+subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the
+\fBERR\fP trap.
+.RE
+.TP 8
+.B extglob
+If set, the extended pattern matching features described above under
+\fBPathname Expansion\fP are enabled.
+.TP 8
+.B extquote
+If set, \fB$\fP\(aq\fIstring\fP\(aq and \fB$\fP"\fIstring\fP" quoting is
+performed within \fB${\fP\fIparameter\fP\fB}\fP expansions
+enclosed in double quotes. This option is enabled by default.
+.TP 8
+.B failglob
+If set, patterns which fail to match filenames during pathname expansion
+result in an expansion error.
+.TP 8
+.B force_fignore
+If set, the suffixes specified by the
+.SM
+.B FIGNORE
+shell variable
+cause words to be ignored when performing word completion even if
+the ignored words are the only possible completions.
+See
+.SM
+\fBSHELL VARIABLES\fP
+above for a description of
+.SM
+.BR FIGNORE .
+This option is enabled by default.
+.TP 8
+.B globasciiranges
+If set, range expressions used in pattern matching bracket expressions (see
+.SM
+.B Pattern Matching
+above) behave as if in the traditional C locale when performing
+comparisons. That is, the current locale's collating sequence
+is not taken into account, so
+.B b
+will not collate between
+.B A
+and
+.BR B ,
+and upper-case and lower-case ASCII characters will collate together.
+.TP 8
+.B globstar
+If set, the pattern \fB**\fP used in a pathname expansion context will
+match all files and zero or more directories and subdirectories.
+If the pattern is followed by a \fB/\fP, only directories and
+subdirectories match.
+.TP 8
+.B gnu_errfmt
+If set, shell error messages are written in the standard GNU error
+message format.
+.TP 8
+.B histappend
+If set, the history list is appended to the file named by the value
+of the
+.SM
+.B HISTFILE
+variable when the shell exits, rather than overwriting the file.
+.TP 8
+.B histreedit
+If set, and
+.B readline
+is being used, a user is given the opportunity to re-edit a
+failed history substitution.
+.TP 8
+.B histverify
+If set, and
+.B 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 \fBreadline\fP editing buffer, allowing further modification.
+.TP 8
+.B hostcomplete
+If set, and
+.B readline
+is being used, \fBbash\fP will attempt to perform hostname completion when a
+word containing a \fB@\fP is being completed (see
+.B Completing
+under
+.SM
+.B READLINE
+above).
+This is enabled by default.
+.TP 8
+.B huponexit
+If set, \fBbash\fP will send
+.SM
+.B SIGHUP
+to all jobs when an interactive login shell exits.
+.TP 8
+.B inherit_errexit
+If set, command substitution inherits the value of the \fBerrexit\fP option,
+instead of unsetting it in the subshell environment.
+This option is enabled when \fIposix mode\fP is enabled.
+.TP 8
+.B interactive_comments
+If set, allow a word beginning with
+.B #
+to cause that word and all remaining characters on that
+line to be ignored in an interactive shell (see
+.SM
+.B COMMENTS
+above). This option is enabled by default.
+.TP 8
+.B lastpipe
+If set, and job control is not active, the shell runs the last command of
+a pipeline not executed in the background in the current shell environment.
+.TP 8
+.B lithist
+If set, and the
+.B cmdhist
+option is enabled, multi-line commands are saved to the history with
+embedded newlines rather than using semicolon separators where possible.
+.TP 8
+.B localvar_inherit
+If set, local variables inherit the value and attributes of a variable of
+the same name that exists at a previous scope before any new value is
+assigned. The nameref attribute is not inherited.
+.TP 8
+.B localvar_unset
+If set, calling \fBunset\fP on local variables in previous function scopes
+marks them so subsequent lookups find them unset until that function
+returns. This is identical to the behavior of unsetting local variables
+at the current function scope.
+.TP 8
+.B login_shell
+The shell sets this option if it is started as a login shell (see
+.SM
+.B "INVOCATION"
+above).
+The value may not be changed.
+.TP 8
+.B mailwarn
+If set, and a file that \fBbash\fP is checking for mail has been
+accessed since the last time it was checked, the message ``The mail in
+\fImailfile\fP has been read'' is displayed.
+.TP 8
+.B no_empty_cmd_completion
+If set, and
+.B readline
+is being used,
+.B bash
+will not attempt to search the
+.SM
+.B PATH
+for possible completions when
+completion is attempted on an empty line.
+.TP 8
+.B nocaseglob
+If set,
+.B bash
+matches filenames in a case\-insensitive fashion when performing pathname
+expansion (see
+.B Pathname Expansion
+above).
+.TP 8
+.B nocasematch
+If set,
+.B bash
+matches patterns in a case\-insensitive fashion when performing matching
+while executing \fBcase\fP or \fB[[\fP conditional commands,
+when performing pattern substitution word expansions,
+or when filtering possible completions as part of programmable completion.
+.TP 8
+.B nullglob
+If set,
+.B bash
+allows patterns which match no
+files (see
+.B Pathname Expansion
+above)
+to expand to a null string, rather than themselves.
+.TP 8
+.B progcomp
+If set, the programmable completion facilities (see
+\fBProgrammable Completion\fP above) are enabled.
+This option is enabled by default.
+.TP 8
+.B progcomp_alias
+If set, and programmable completion is enabled, \fBbash\fP treats a command
+name that doesn't have any completions as a possible alias and attempts
+alias expansion. If it has an alias, \fBbash\fP attempts programmable
+completion using the command word resulting from the expanded alias.
+.TP 8
+.B promptvars
+If set, prompt strings undergo
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal after being expanded as described in
+.SM
+.B PROMPTING
+above. This option is enabled by default.
+.TP 8
+.B restricted_shell
+The shell sets this option if it is started in restricted mode (see
+.SM
+.B "RESTRICTED SHELL"
+below).
+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.
+.TP 8
+.B shift_verbose
+If set, the
+.B shift
+builtin prints an error message when the shift count exceeds the
+number of positional parameters.
+.TP 8
+.B sourcepath
+If set, the
+\fBsource\fP (\fB.\fP) builtin uses the value of
+.SM
+.B PATH
+to find the directory containing the file supplied as an argument.
+This option is enabled by default.
+.TP 8
+.B xpg_echo
+If set, the \fBecho\fP builtin expands backslash-escape sequences
+by default.
+.RE
+.PD
+.TP
+\fBsuspend\fP [\fB\-f\fP]
+Suspend the execution of this shell until it receives a
+.SM
+.B SIGCONT
+signal. A login shell cannot be suspended; the
+.B \-f
+option can be used to override this and force the suspension.
+The return status is 0 unless the shell is a login shell and
+.B \-f
+is not supplied, or if job control is not enabled.
+.TP
+\fBtest\fP \fIexpr\fP
+.PD 0
+.TP
+\fB[\fP \fIexpr\fP \fB]\fP
+Return a status of 0 (true) or 1 (false) depending on
+the evaluation of the conditional expression
+.IR expr .
+Each operator and operand must be a separate argument.
+Expressions are composed of the primaries described above under
+.SM
+.BR "CONDITIONAL EXPRESSIONS" .
+\fBtest\fP does not accept any options, nor does it accept and ignore
+an argument of \fB\-\-\fP as signifying the end of options.
+.if t .sp 0.5
+.if n .sp 1
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence.
+The evaluation depends on the number of arguments; see below.
+Operator precedence is used when there are five or more arguments.
+.RS
+.PD 0
+.TP
+.B ! \fIexpr\fP
+True if
+.I expr
+is false.
+.TP
+.B ( \fIexpr\fP )
+Returns the value of \fIexpr\fP.
+This may be used to override the normal precedence of operators.
+.TP
+\fIexpr1\fP \-\fBa\fP \fIexpr2\fP
+True if both
+.I expr1
+and
+.I expr2
+are true.
+.TP
+\fIexpr1\fP \-\fBo\fP \fIexpr2\fP
+True if either
+.I expr1
+or
+.I expr2
+is true.
+.PD
+.PP
+\fBtest\fP and \fB[\fP evaluate conditional
+expressions using a set of rules based on the number of arguments.
+.if t .sp 0.5
+.if n .sp 1
+.PD 0
+.TP
+0 arguments
+The expression is false.
+.TP
+1 argument
+The expression is true if and only if the argument is not null.
+.TP
+2 arguments
+If the first argument is \fB!\fP, the expression is true if and
+only if the second argument is null.
+If the first argument is one of the unary conditional operators listed above
+under
+.SM
+.BR "CONDITIONAL EXPRESSIONS" ,
+the expression is true if the unary test is true.
+If the first argument is not a valid unary conditional operator, the expression
+is false.
+.TP
+3 arguments
+The following conditions are applied in the order listed.
+If the second argument is one of the binary conditional operators listed above
+under
+.SM
+.BR "CONDITIONAL EXPRESSIONS" ,
+the result of the expression is the result of the binary test using
+the first and third arguments as operands.
+The \fB\-a\fP and \fB\-o\fP operators are considered binary operators
+when there are three arguments.
+If the first argument is \fB!\fP, the value is the negation of
+the two-argument test using the second and third arguments.
+If the first argument is exactly \fB(\fP and the third argument is
+exactly \fB)\fP, the result is the one-argument test of the second
+argument.
+Otherwise, the expression is false.
+.TP
+4 arguments
+If the first argument is \fB!\fP, 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.
+.TP
+5 or more arguments
+The expression is parsed and evaluated according to precedence
+using the rules listed above.
+.if t .sp 0.5
+.if n .sp 1
+.LP
+When used with \fBtest\fP or \fB[\fP, the \fB<\fP and \fB>\fP operators
+sort lexicographically using ASCII ordering.
+.RE
+.PD
+.TP
+.B times
+Print the accumulated user and system times for the shell and
+for processes run from the shell. The return status is 0.
+.TP
+\fBtrap\fP [\fB\-lp\fP] [[\fIarg\fP] \fIsigspec\fP ...]
+The command
+.I arg
+is to be read and executed when the shell receives
+signal(s)
+.IR sigspec .
+If
+.I arg
+is absent (and there is a single \fIsigspec\fP) or
+.BR \- ,
+each specified signal is
+reset to its original disposition (the value it had
+upon entrance to the shell).
+If
+.I arg
+is the null string the signal specified by each
+.I sigspec
+is ignored by the shell and by the commands it invokes.
+If
+.I arg
+is not present and
+.B \-p
+has been supplied, then the trap commands associated with each
+.I sigspec
+are displayed.
+If no arguments are supplied or if only
+.B \-p
+is given,
+.B trap
+prints the list of commands associated with each signal.
+The
+.B \-l
+option causes the shell to print a list of signal names and
+their corresponding numbers.
+Each
+.I sigspec
+is either
+a signal name defined in <\fIsignal.h\fP>, or a signal number.
+Signal names are case insensitive and the
+.SM
+.B SIG
+prefix is optional.
+.if t .sp 0.5
+.if n .sp 1
+If a
+.I sigspec
+is
+.SM
+.B EXIT
+(0) the command
+.I arg
+is executed on exit from the shell.
+If a
+.I sigspec
+is
+.SM
+.BR DEBUG ,
+the command
+.I arg
+is executed before every \fIsimple command\fP, \fIfor\fP command,
+\fIcase\fP command, \fIselect\fP command, every arithmetic \fIfor\fP
+command, and before the first command executes in a shell function (see
+.SM
+.B SHELL GRAMMAR
+above).
+Refer to the description of the \fBextdebug\fP option to the
+\fBshopt\fP builtin for details of its effect on the \fBDEBUG\fP trap.
+If a
+.I sigspec
+is
+.SM
+.BR RETURN ,
+the command
+.I arg
+is executed each time a shell function or a script executed with
+the \fB.\fP or \fBsource\fP builtins finishes executing.
+.if t .sp 0.5
+.if n .sp 1
+If a
+.I sigspec
+is
+.SM
+.BR ERR ,
+the command
+.I arg
+is executed whenever
+a pipeline (which may consist of a single simple
+command), a list, or a compound command returns a
+non\-zero exit status,
+subject to the following conditions.
+The
+.SM
+.B ERR
+trap is not executed if the failed
+command is part of the command list immediately following a
+.B while
+or
+.B until
+keyword,
+part of the test in an
+.I if
+statement, part of a command executed in a
+.B &&
+or
+.B ||
+list except the command following the final \fB&&\fP or \fB||\fP,
+any command in a pipeline but the last,
+or if the command's return value is
+being inverted using
+.BR ! .
+These are the same conditions obeyed by the \fBerrexit\fP (\fB\-e\fP) option.
+.if t .sp 0.5
+.if n .sp 1
+Signals ignored upon entry to the shell cannot be trapped or reset.
+Trapped signals that are not being ignored are reset to their original
+values in a subshell or subshell environment when one is created.
+The return status is false if any
+.I sigspec
+is invalid; otherwise
+.B trap
+returns true.
+.TP
+\fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP ...]
+With no options,
+indicate how each
+.I name
+would be interpreted if used as a command name.
+If the
+.B \-t
+option is used,
+.B type
+prints a string which is one of
+.IR alias ,
+.IR keyword ,
+.IR function ,
+.IR builtin ,
+or
+.I file
+if
+.I name
+is an alias, shell reserved word, function, builtin, or disk file,
+respectively.
+If the
+.I name
+is not found, then nothing is printed, and an exit status of false
+is returned.
+If the
+.B \-p
+option is used,
+.B type
+either returns the name of the disk file
+that would be executed if
+.I name
+were specified as a command name,
+or nothing if
+.if t \f(CWtype -t name\fP
+.if n ``type -t name''
+would not return
+.IR file .
+The
+.B \-P
+option forces a
+.SM
+.B PATH
+search for each \fIname\fP, even if
+.if t \f(CWtype -t name\fP
+.if n ``type -t name''
+would not return
+.IR file .
+If a command is hashed,
+.B \-p
+and
+.B \-P
+print the hashed value, which is not necessarily the file that appears
+first in
+.SM
+.BR PATH .
+If the
+.B \-a
+option is used,
+.B type
+prints all of the places that contain
+an executable named
+.IR name .
+This includes aliases and functions,
+if and only if the
+.B \-p
+option is not also used.
+The table of hashed commands is not consulted
+when using
+.BR \-a .
+The
+.B \-f
+option suppresses shell function lookup, as with the \fBcommand\fP builtin.
+.B type
+returns true if all of the arguments are found, false if
+any are not found.
+.TP
+\fBulimit\fP [\fB\-HSabcdefiklmnpqrstuvxPT\fP [\fIlimit\fP]]
+Provides control over the resources available to the shell and to
+processes started by it, on systems that allow such control.
+The \fB\-H\fP and \fB\-S\fP options specify that the hard or soft limit is
+set for the given resource.
+A hard limit cannot be increased by a non-root user once it is set;
+a soft limit may be increased up to the value of the hard limit.
+If neither \fB\-H\fP nor \fB\-S\fP is specified, both the soft and hard
+limits are set.
+The value of
+.I limit
+can be a number in the unit specified for the resource
+or one of the special values
+.BR hard ,
+.BR soft ,
+or
+.BR unlimited ,
+which stand for the current hard limit, the current soft limit, and
+no limit, respectively.
+If
+.I limit
+is omitted, the current value of the soft limit of the resource is
+printed, unless the \fB\-H\fP option is given. When more than one
+resource is specified, the limit name and unit are printed before the value.
+Other options are interpreted as follows:
+.RS
+.PD 0
+.TP
+.B \-a
+All current limits are reported
+.TP
+.B \-b
+The maximum socket buffer size
+.TP
+.B \-c
+The maximum size of core files created
+.TP
+.B \-d
+The maximum size of a process's data segment
+.TP
+.B \-e
+The maximum scheduling priority ("nice")
+.TP
+.B \-f
+The maximum size of files written by the shell and its children
+.TP
+.B \-i
+The maximum number of pending signals
+.TP
+.B \-k
+The maximum number of kqueues that may be allocated
+.TP
+.B \-l
+The maximum size that may be locked into memory
+.TP
+.B \-m
+The maximum resident set size (many systems do not honor this limit)
+.TP
+.B \-n
+The maximum number of open file descriptors (most systems do not
+allow this value to be set)
+.TP
+.B \-p
+The pipe size in 512-byte blocks (this may not be set)
+.TP
+.B \-q
+The maximum number of bytes in POSIX message queues
+.TP
+.B \-r
+The maximum real-time scheduling priority
+.TP
+.B \-s
+The maximum stack size
+.TP
+.B \-t
+The maximum amount of cpu time in seconds
+.TP
+.B \-u
+The maximum number of processes available to a single user
+.TP
+.B \-v
+The maximum amount of virtual memory available to the shell and, on
+some systems, to its children
+.TP
+.B \-x
+The maximum number of file locks
+.TP
+.B \-P
+The maximum number of pseudoterminals
+.TP
+.B \-T
+The maximum number of threads
+.PD
+.PP
+If
+.I limit
+is given, and the
+.B \-a
+option is not used,
+\fIlimit\fP is the new value of the specified resource.
+If no option is given, then
+.B \-f
+is assumed. Values are in 1024-byte increments, except for
+.BR \-t ,
+which is in seconds;
+.BR \-p ,
+which is in units of 512-byte blocks;
+.BR \-P ,
+.BR \-T ,
+.BR \-b ,
+.BR \-k ,
+.BR \-n ,
+and
+.BR \-u ,
+which are unscaled values;
+and, when in posix mode,
+.B \-c
+and
+.BR \-f ,
+which are in 512-byte increments.
+The return status is 0 unless an invalid option or argument is supplied,
+or an error occurs while setting a new limit.
+.RE
+.TP
+\fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP]
+The user file-creation mask is set to
+.IR mode .
+If
+.I mode
+begins with a digit, it
+is interpreted as an octal number; otherwise
+it is interpreted as a symbolic mode mask similar
+to that accepted by
+.IR chmod (1).
+If
+.I mode
+is omitted, the current value of the mask is printed.
+The
+.B \-S
+option causes the mask to be printed in symbolic form; the
+default output is an octal number.
+If the
+.B \-p
+option is supplied, and
+.I mode
+is omitted, the output is in a form that may be reused as input.
+The return status is 0 if the mode was successfully changed or if
+no \fImode\fP argument was supplied, and false otherwise.
+.TP
+\fBunalias\fP [\-\fBa\fP] [\fIname\fP ...]
+Remove each \fIname\fP from the list of defined aliases. If
+.B \-a
+is supplied, all alias definitions are removed. The return
+value is true unless a supplied
+.I name
+is not a defined alias.
+.TP
+\fBunset\fP [\-\fBfv\fP] [\-\fBn\fP] [\fIname\fP ...]
+For each
+.IR name ,
+remove the corresponding variable or function.
+If the
+.B \-v
+option is given, each
+.I name
+refers to a shell variable, and that variable is removed.
+Read-only variables may not be unset.
+If
+.B \-f
+is specified, each
+.I name
+refers to a shell function, and the function definition
+is removed.
+If the
+.B \-n
+option is supplied, and \fIname\fP is a variable with the \fInameref\fP
+attribute, \fIname\fP will be unset rather than the variable it
+references.
+\fB\-n\fP has no effect if the \fB\-f\fP option is supplied.
+If no options are supplied, each \fIname\fP refers to a variable; if
+there is no variable by that name, any function with that name is
+unset.
+Each unset variable or function is removed from the environment
+passed to subsequent commands.
+If any of
+.SM
+.BR COMP_WORDBREAKS ,
+.SM
+.BR RANDOM ,
+.SM
+.BR SECONDS ,
+.SM
+.BR LINENO ,
+.SM
+.BR HISTCMD ,
+.SM
+.BR FUNCNAME ,
+.SM
+.BR GROUPS ,
+or
+.SM
+.B DIRSTACK
+are unset, they lose their special properties, even if they are
+subsequently reset. The exit status is true unless a
+.I name
+is readonly.
+.TP
+\fBwait\fP [\fB\-fn\fP] [\fIid ...\fP]
+Wait for each specified child process and return its termination status.
+Each
+.I id
+may be a process
+ID or a job specification; if a job spec is given, all processes
+in that job's pipeline are waited for. If
+.I id
+is not given, all currently active child processes
+are waited for, and the return status is zero.
+If the \fB\-n\fP option is supplied, \fBwait\fP waits for any job to
+terminate and returns its exit status.
+If the \fB\-f\fP option is supplied, and job control is enabled,
+\fBwait\fP forces \fIid\fP to terminate before returning its status,
+instead of returning when it changes status.
+If
+.I id
+specifies a non-existent process or job, the return status is
+127. Otherwise, the return status is the exit status of the last
+process or job waited for.
+.\" bash_builtins
+.if \n(zZ=1 .ig zZ
+.SH "RESTRICTED SHELL"
+.\" rbash.1
+.zY
+.PP
+If
+.B bash
+is started with the name
+.BR rbash ,
+or the
+.B \-r
+option is supplied at invocation,
+the shell becomes restricted.
+A restricted shell is used to
+set up an environment more controlled than the standard shell.
+It behaves identically to
+.B bash
+with the exception that the following are disallowed or not performed:
+.IP \(bu
+changing directories with \fBcd\fP
+.IP \(bu
+setting or unsetting the values of
+.SM
+.BR SHELL ,
+.SM
+.BR PATH ,
+.SM
+.BR ENV ,
+or
+.SM
+.B BASH_ENV
+.IP \(bu
+specifying command names containing
+.B /
+.IP \(bu
+specifying a filename containing a
+.B /
+as an argument to the
+.B .
+builtin command
+.IP \(bu
+specifying a filename containing a slash as an argument to the
+.B \-p
+option to the
+.B hash
+builtin command
+.IP \(bu
+importing function definitions from the shell environment at startup
+.IP \(bu
+parsing the value of
+.SM
+.B SHELLOPTS
+from the shell environment at startup
+.IP \(bu
+redirecting output using the >, >|, <>, >&, &>, and >> redirection operators
+.IP \(bu
+using the
+.B exec
+builtin command to replace the shell with another command
+.IP \(bu
+adding or deleting builtin commands with the
+.B \-f
+and
+.B \-d
+options to the
+.B enable
+builtin command
+.IP \(bu
+using the \fBenable\fP builtin command to enable disabled shell builtins
+.IP \(bu
+specifying the
+.B \-p
+option to the
+.B command
+builtin command
+.IP \(bu
+turning off restricted mode with
+\fBset +r\fP or \fBset +o restricted\fP.
+.PP
+These restrictions are enforced after any startup files are read.
+.PP
+.ie \n(zY=1 When a command that is found to be a shell script is executed,
+.el \{ When a command that is found to be a shell script is executed
+(see
+.SM
+.B "COMMAND EXECUTION"
+above),
+\}
+.B rbash
+turns off any restrictions in the shell spawned to execute the
+script.
+.\" end of rbash.1
+.if \n(zY=1 .ig zY
+.SH "SEE ALSO"
+.PD 0
+.TP
+\fIBash Reference Manual\fP, Brian Fox and Chet Ramey
+.TP
+\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey
+.TP
+\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
+.TP
+\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE --
+http://pubs.opengroup.org/onlinepubs/9699919799/
+.TP
+http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
+.TP
+\fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1)
+.TP
+\fIemacs\fP(1), \fIvi\fP(1)
+.TP
+\fIreadline\fP(3)
+.PD
+.SH FILES
+.PD 0
+.TP
+.FN /bin/bash
+The \fBbash\fP executable
+.TP
+.FN /etc/profile
+The systemwide initialization file, executed for login shells
+.TP
+.FN ~/.bash_profile
+The personal initialization file, executed for login shells
+.TP
+.FN ~/.bashrc
+The individual per-interactive-shell startup file
+.TP
+.FN ~/.bash_logout
+The individual login shell cleanup file, executed when a login shell exits
+.TP
+.FN ~/.inputrc
+Individual \fIreadline\fP initialization file
+.PD
+.SH AUTHORS
+Brian Fox, Free Software Foundation
+.br
+bfox@gnu.org
+.PP
+Chet Ramey, Case Western Reserve University
+.br
+chet.ramey@case.edu
+.SH BUG REPORTS
+If you find a bug in
+.B bash,
+you should report it. But first, you should
+make sure that it really is a bug, and that it appears in the latest
+version of
+.BR bash .
+The latest version is always available from
+\fIftp://ftp.gnu.org/pub/gnu/bash/\fP.
+.PP
+Once you have determined that a bug actually exists, use the
+.I bashbug
+command to submit a bug report.
+If you have a fix, you are encouraged to mail that as well!
+Suggestions and `philosophical' bug reports may be mailed
+to \fIbug-bash@gnu.org\fP or posted to the Usenet
+newsgroup
+.BR gnu.bash.bug .
+.PP
+ALL bug reports should include:
+.PP
+.PD 0
+.TP 20
+The version number of \fBbash\fR
+.TP
+The hardware and operating system
+.TP
+The compiler used to compile
+.TP
+A description of the bug behaviour
+.TP
+A short script or `recipe' which exercises the bug
+.PD
+.PP
+.I bashbug
+inserts the first three items automatically into the template
+it provides for filing a bug report.
+.PP
+Comments and bug reports concerning
+this manual page should be directed to
+.IR chet.ramey@case.edu .
+.SH BUGS
+.PP
+It's too big and too slow.
+.PP
+There are some subtle differences between
+.B bash
+and traditional versions of
+.BR sh ,
+mostly because of the
+.SM
+.B POSIX
+specification.
+.PP
+Aliases are confusing in some uses.
+.PP
+Shell builtin commands and functions are not stoppable/restartable.
+.PP
+Compound commands and command sequences of the form `a ; b ; c'
+are not handled gracefully when process suspension is attempted.
+When a process is stopped, the shell immediately executes the next
+command in the sequence.
+It suffices to place the sequence of commands between
+parentheses to force it into a subshell, which may be stopped as
+a unit.
+.PP
+Array variables may not (yet) be exported.
+.PP
+There may be only one active coprocess at a time.
+.zZ
+.zY
diff --git a/doc/bash.html b/doc/bash.html
new file mode 100644
index 0000000..3da23fb
--- /dev/null
+++ b/doc/bash.html
@@ -0,0 +1,14043 @@
+<HTML><HEAD>
+<TITLE>BASH(1) Manual Page</TITLE>
+</HEAD>
+<BODY><TABLE WIDTH=100%>
+<TR>
+<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2018 December 7<TH ALIGN=RIGHT width=33%>BASH(1)
+</TR>
+</TABLE>
+<BR><A HREF="#index">Index</A>
+<HR>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<A NAME="lbAB">&nbsp;</A>
+<H3>NAME</H3>
+
+bash - GNU Bourne-Again SHell
+<A NAME="lbAC">&nbsp;</A>
+<H3>SYNOPSIS</H3>
+
+<B>bash</B>
+
+[options]
+[command_string | file]
+<A NAME="lbAD">&nbsp;</A>
+<H3>COPYRIGHT</H3>
+
+
+Bash is Copyright &#169; 1989-2018 by the Free Software Foundation, Inc.
+<A NAME="lbAE">&nbsp;</A>
+<H3>DESCRIPTION</H3>
+
+<B>Bash</B>
+
+is an <B>sh</B>-compatible command language interpreter that
+executes commands read from the standard input or from a file.
+<B>Bash</B>
+
+also incorporates useful features from the <I>Korn</I> and <I>C</I>
+shells (<B>ksh</B> and <B>csh</B>).
+<P>
+
+<B>Bash</B>
+
+is intended to be a conformant implementation of the
+Shell and Utilities portion of the IEEE POSIX specification
+(IEEE Standard 1003.1).
+<B>Bash</B>
+
+can be configured to be POSIX-conformant by default.
+<A NAME="lbAF">&nbsp;</A>
+<H3>OPTIONS</H3>
+
+All of the single-character shell options documented in the
+description of the <B>set</B> builtin command, including <B>-o</B>,
+can be used as options when the shell is invoked.
+In addition, <B>bash</B>
+interprets the following options when it is invoked:
+<P>
+
+
+<DL COMPACT>
+<DT><B>-c</B>
+
+<DD>
+If the
+<B>-c</B>
+
+option is present, then commands are read from the first non-option argument
+<I>command_string</I>.
+
+If there are arguments after the
+<I>command_string</I>,
+
+the first argument is assigned to
+<B>$0</B>
+
+and any remaining arguments are assigned to the positional parameters.
+The assignment to
+<B>$0</B>
+
+sets the name of the shell, which is used in warning and error messages.
+<DT><B>-i</B>
+
+<DD>
+If the
+<B>-i</B>
+
+option is present, the shell is
+<I>interactive</I>.
+
+<DT><B>-l</B>
+
+<DD>
+Make
+<B>bash</B>
+
+act as if it had been invoked as a login shell (see
+<FONT SIZE=-1><B>INVOCATION</B>
+
+</FONT>
+below).
+<DT><B>-r</B>
+
+<DD>
+If the
+<B>-r</B>
+
+option is present, the shell becomes
+<I>restricted</I>
+
+(see
+<FONT SIZE=-1><B>RESTRICTED SHELL</B>
+
+</FONT>
+below).
+<DT><B>-s</B>
+
+<DD>
+If the
+<B>-s</B>
+
+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 or when reading input
+through a pipe.
+<DT><B>-D</B>
+
+<DD>
+A list of all double-quoted strings preceded by <B>$</B>
+is printed on the standard output.
+These are the strings that
+are subject to language translation when the current locale
+is not <B>C</B> or <B>POSIX</B>.
+This implies the <B>-n</B> option; no commands will be executed.
+<DT><B>[-+]O [</B><I>shopt_option</I>]
+
+<DD>
+<I>shopt_option</I> is one of the shell options accepted by the
+<B>shopt</B> builtin (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+If <I>shopt_option</I> is present, <B>-O</B> sets the value of that option;
+<B>+O</B> unsets it.
+If <I>shopt_option</I> is not supplied, the names and values of the shell
+options accepted by <B>shopt</B> are printed on the standard output.
+If the invocation option is <B>+O</B>, the output is displayed in a format
+that may be reused as input.
+<DT><B>--</B>
+
+<DD>
+A
+<B>--</B>
+
+signals the end of options and disables further option processing.
+Any arguments after the
+<B>--</B>
+
+are treated as filenames and arguments. An argument of
+<B>-</B>
+
+is equivalent to <B>--</B>.
+
+</DL>
+<P>
+
+<B>Bash</B>
+
+also interprets a number of multi-character options.
+These options must appear on the command line before the
+single-character options to be recognized.
+<P>
+
+
+<DL COMPACT>
+<DT><B>--debugger</B>
+
+<DD>
+Arrange for the debugger profile to be executed before the shell
+starts.
+Turns on extended debugging mode (see the description of the
+<B>extdebug</B>
+
+option to the
+<B>shopt</B>
+
+builtin below).
+<DT><B>--dump-po-strings</B>
+
+<DD>
+Equivalent to <B>-D</B>, but the output is in the GNU <I>gettext</I>
+<B>po</B> (portable object) file format.
+<DT><B>--dump-strings</B>
+
+<DD>
+Equivalent to <B>-D</B>.
+<DT><B>--help</B>
+
+<DD>
+Display a usage message on standard output and exit successfully.
+<DT><B>--init-file</B> <I>file</I><DD>
+
+<DT><B>--rcfile</B> <I>file</I><DD>
+
+Execute commands from
+<I>file</I>
+
+instead of the standard personal initialization file
+<A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>
+
+if the shell is interactive (see
+<FONT SIZE=-1><B>INVOCATION</B>
+
+</FONT>
+below).
+<DT><B>--login</B>
+
+<DD>
+Equivalent to <B>-l</B>.
+<DT><B>--noediting</B>
+
+<DD>
+Do not use the GNU
+<B>readline</B>
+
+library to read command lines when the shell is interactive.
+<DT><B>--noprofile</B>
+
+<DD>
+Do not read either the system-wide startup file
+
+<A HREF="file:/etc/profile"><I>/etc/profile</I></A>
+
+or any of the personal initialization files
+<A HREF="file:~/.bash_profile"><I>~/.bash_profile</I></A>,
+
+<A HREF="file:~/.bash_login"><I>~/.bash_login</I></A>,
+
+or
+<A HREF="file:~/.profile"><I>~/.profile</I></A>.
+
+By default,
+<B>bash</B>
+
+reads these files when it is invoked as a login shell (see
+<FONT SIZE=-1><B>INVOCATION</B>
+
+</FONT>
+below).
+<DT><B>--norc</B>
+
+<DD>
+Do not read and execute the personal initialization file
+<A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>
+
+if the shell is interactive.
+This option is on by default if the shell is invoked as
+<B>sh</B>.
+
+<DT><B>--posix</B>
+
+<DD>
+Change the behavior of <B>bash</B> where the default operation differs
+from the POSIX standard to match the standard (<I>posix mode</I>).
+See
+<FONT SIZE=-1><B>SEE ALSO</B>
+
+</FONT>
+below for a reference to a document that details how posix mode affects
+bash's behavior.
+<DT><B>--restricted</B>
+
+<DD>
+The shell becomes restricted (see
+<FONT SIZE=-1><B>RESTRICTED SHELL</B>
+
+</FONT>
+below).
+<DT><B>--verbose</B>
+
+<DD>
+Equivalent to <B>-v</B>.
+<DT><B>--version</B>
+
+<DD>
+Show version information for this instance of
+<B>bash</B>
+
+on the standard output and exit successfully.
+
+</DL>
+<A NAME="lbAG">&nbsp;</A>
+<H3>ARGUMENTS</H3>
+
+If arguments remain after option processing, and neither the
+<B>-c</B>
+
+nor the
+<B>-s</B>
+
+option has been supplied, the first argument is assumed to
+be the name of a file containing shell commands.
+If
+<B>bash</B>
+
+is invoked in this fashion,
+<B>$0</B>
+
+is set to the name of the file, and the positional parameters
+are set to the remaining arguments.
+<B>Bash</B>
+
+reads and executes commands from this file, then exits.
+<B>Bash</B>'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.
+An attempt is first made to open the file in the current directory, and,
+if no file is found, then the shell searches the directories in
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+for the script.
+<A NAME="lbAH">&nbsp;</A>
+<H3>INVOCATION</H3>
+
+A <I>login shell</I> is one whose first character of argument zero is a
+<B>-</B>,
+
+or one started with the
+<B>--login</B>
+
+option.
+<P>
+
+An <I>interactive</I> shell is one started without non-option arguments
+(unless <B>-s</B> is specified)
+and without the
+<B>-c</B>
+
+option
+whose standard input and error are
+both connected to terminals (as determined by
+<I>isatty</I>(3)),
+
+or one started with the
+<B>-i</B>
+
+option.
+<FONT SIZE=-1><B>PS1</B>
+
+</FONT>
+is set and
+<B>$-</B>
+
+includes
+<B>i</B>
+
+if
+<B>bash</B>
+
+is interactive,
+allowing a shell script or a startup file to test this state.
+<P>
+
+The following paragraphs describe how
+<B>bash</B>
+
+executes its startup files.
+If any of the files exist but cannot be read,
+<B>bash</B>
+
+reports an error.
+Tildes are expanded in filenames as described below under
+<B>Tilde Expansion</B>
+
+in the
+<FONT SIZE=-1><B>EXPANSION</B>
+
+</FONT>
+section.
+<P>
+
+When
+<B>bash</B>
+
+is invoked as an interactive login shell, or as a non-interactive shell
+with the <B>--login</B> option, it first reads and
+executes commands from the file <A HREF="file:/etc/profile"><I>/etc/profile</I></A>, if that
+file exists.
+After reading that file, it looks for <A HREF="file:~/.bash_profile"><I>~/.bash_profile</I></A>,
+<A HREF="file:~/.bash_login"><I>~/.bash_login</I></A>, and <A HREF="file:~/.profile"><I>~/.profile</I></A>, in that order, and reads
+and executes commands from the first one that exists and is readable.
+The
+<B>--noprofile</B>
+
+option may be used when the shell is started to inhibit this behavior.
+<P>
+
+When an interactive login shell exits,
+or a non-interactive login shell executes the <B>exit</B> builtin command,
+<B>bash</B>
+
+reads and executes commands from the file <A HREF="file:~/.bash_logout"><I>~/.bash_logout</I></A>, if it
+exists.
+<P>
+
+When an interactive shell that is not a login shell is started,
+<B>bash</B>
+
+reads and executes commands from <A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>, if that file exists.
+This may be inhibited by using the
+<B>--norc</B>
+
+option.
+The <B>--rcfile</B> <I>file</I> option will force
+<B>bash</B>
+
+to read and execute commands from <I>file</I> instead of <A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>.
+<P>
+
+When
+<B>bash</B>
+
+is started non-interactively, to run a shell script, for example, it
+looks for the variable
+<FONT SIZE=-1><B>BASH_ENV</B>
+
+</FONT>
+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.
+<B>Bash</B>
+
+behaves as if the following command were executed:
+<P>
+<DL COMPACT><DT><DD>
+<TT>if [ -n &quot;$BASH_ENV&quot; ]; then . &quot;$BASH_ENV&quot;; fi</TT>
+
+</DL>
+
+<P>
+but the value of the
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+variable is not used to search for the filename.
+<P>
+
+If
+<B>bash</B>
+
+is invoked with the name
+<B>sh</B>,
+
+it tries to mimic the startup behavior of historical versions of
+<B>sh</B>
+
+as closely as possible,
+while conforming to the POSIX standard as well.
+When invoked as an interactive login shell, or a non-interactive
+shell with the <B>--login</B> option, it first attempts to
+read and execute commands from
+<A HREF="file:/etc/profile"><I>/etc/profile</I></A>
+
+and
+<A HREF="file:~/.profile"><I>~/.profile</I></A>,
+
+in that order.
+The
+<B>--noprofile</B>
+
+option may be used to inhibit this behavior.
+When invoked as an interactive shell with the name
+<B>sh</B>,
+
+<B>bash</B>
+
+looks for the variable
+<FONT SIZE=-1><B>ENV</B>,
+
+</FONT>
+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
+<B>sh</B>
+
+does not attempt to read and execute commands from any other startup
+files, the
+<B>--rcfile</B>
+
+option has no effect.
+A non-interactive shell invoked with the name
+<B>sh</B>
+
+does not attempt to read any other startup files.
+When invoked as
+<B>sh</B>,
+
+<B>bash</B>
+
+enters
+<I>posix</I>
+
+mode after the startup files are read.
+<P>
+
+When
+<B>bash</B>
+
+is started in
+<I>posix</I>
+
+mode, as with the
+<B>--posix</B>
+
+command line option, it follows the POSIX standard for startup files.
+In this mode, interactive shells expand the
+<FONT SIZE=-1><B>ENV</B>
+
+</FONT>
+variable and commands are read and executed from the file
+whose name is the expanded value.
+No other startup files are read.
+<P>
+
+<B>Bash</B>
+
+attempts to determine when it is being run with its standard input
+connected to a network connection, as when executed by the remote shell
+daemon, usually <I>rshd</I>, or the secure shell daemon <I>sshd</I>.
+If
+<B>bash</B>
+
+determines it is being run in this fashion, it reads and executes
+commands from <A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>, if that file exists and is readable.
+It will not do this if invoked as <B>sh</B>.
+The
+<B>--norc</B>
+
+option may be used to inhibit this behavior, and the
+<B>--rcfile</B>
+
+option may be used to force another file to be read, but neither
+<I>rshd</I> nor <I>sshd</I> generally invoke the shell with those options
+or allow them to be specified.
+<P>
+
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the <B>-p</B> option is not supplied, no startup
+files are read, shell functions are not inherited from the environment, the
+<FONT SIZE=-1><B>SHELLOPTS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>BASHOPTS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>CDPATH</B>,
+
+</FONT>
+and
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+variables, if they appear in the environment, are ignored,
+and the effective user id is set to the real user id.
+If the <B>-p</B> option is supplied at invocation, the startup behavior is
+the same, but the effective user id is not reset.
+<A NAME="lbAI">&nbsp;</A>
+<H3>DEFINITIONS</H3>
+
+<P>
+
+The following definitions are used throughout the rest of this
+document.
+
+<DL COMPACT>
+<DT><B>blank</B>
+
+<DD>
+A space or tab.
+<DT><B>word</B>
+
+<DD>
+A sequence of characters considered as a single unit by the shell.
+Also known as a
+<B>token</B>.
+
+<DT><B>name</B>
+
+<DD>
+A
+<I>word</I>
+
+consisting only of alphanumeric characters and underscores, and
+beginning with an alphabetic character or an underscore. Also
+referred to as an
+<B>identifier</B>.
+
+<DT><B>metacharacter</B>
+
+<DD>
+A character that, when unquoted, separates words. One of the following:
+<BR>
+
+<DL COMPACT><DT><DD>
+<P>
+
+<B>| &amp; ; ( ) &lt; &gt; space tab newline</B>
+
+</DL>
+
+</DL>
+<P>
+
+<DL COMPACT>
+<DT><B>control operator</B>
+
+<DD>
+A <I>token</I> that performs a control function. It is one of the following
+symbols:
+<DL COMPACT><DT><DD>
+<P>
+
+<B>|| &amp; &amp;&amp; ; ;; ;&amp; ;;&amp; ( ) | |&amp; &lt;newline&gt;</B>
+
+</DL>
+
+
+</DL>
+<A NAME="lbAJ">&nbsp;</A>
+<H3>RESERVED WORDS</H3>
+
+<I>Reserved words</I> are words that have a special meaning to the shell.
+The following words are recognized as reserved when unquoted and either
+the first word of a simple command (see
+<FONT SIZE=-1><B>SHELL GRAMMAR</B>
+
+</FONT>
+below) or the third word of a
+<B>case</B>
+
+or
+<B>for</B>
+
+command:
+<DL COMPACT><DT><DD>
+
+<P>
+
+<B>
+</B>
+
+! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
+</DL>
+
+
+<A NAME="lbAK">&nbsp;</A>
+<H3>SHELL GRAMMAR</H3>
+
+<A NAME="lbAL">&nbsp;</A>
+<H4>Simple Commands</H4>
+
+<P>
+
+A <I>simple command</I> is a sequence of optional variable assignments
+followed by <B>blank</B>-separated words and redirections, and
+terminated by a <I>control operator</I>. The first word
+specifies the command to be executed, and is passed as argument zero.
+The remaining words are passed as arguments to the invoked command.
+<P>
+
+The return value of a <I>simple command</I> is its exit status, or
+128+<I>n</I> if the command is terminated by signal
+<I>n</I>.
+
+<A NAME="lbAM">&nbsp;</A>
+<H4>Pipelines</H4>
+
+<P>
+
+A <I>pipeline</I> is a sequence of one or more commands separated by
+one of the control operators
+<B>|</B>
+
+or <B>|&amp;</B>.
+The format for a pipeline is:
+<DL COMPACT><DT><DD>
+<P>
+
+[<B>time</B> [<B>-p</B>]] [ ! ] <I>command</I> [ [<B>|</B>|<B>|&amp;</B>] <I>command2</I> ... ]
+</DL>
+
+<P>
+
+The standard output of
+<I>command</I>
+
+is connected via a pipe to the standard input of
+<I>command2</I>.
+
+This connection is performed before any redirections specified by the
+command (see
+<FONT SIZE=-1><B>REDIRECTION</B>
+
+</FONT>
+below).
+If <B>|&amp;</B> is used, <I>command</I>'s standard error, in addition to its
+standard output, is connected to
+<I>command2</I>'s standard input through the pipe;
+it is shorthand for <B>2&gt;&amp;1 |</B>.
+This implicit redirection of the standard error to the standard output is
+performed after any redirections specified by the command.
+<P>
+
+The return status of a pipeline is the exit status of the last
+command, unless the <B>pipefail</B> option is enabled.
+If <B>pipefail</B> 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
+<B>!</B>
+
+precedes a pipeline, the exit status of that pipeline 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>
+
+If the
+<B>time</B>
+
+reserved word precedes a pipeline, the elapsed as well as user and
+system time consumed by its execution are reported when the pipeline
+terminates.
+The <B>-p</B> option changes the output format to that specified by POSIX.
+When the shell is in <I>posix mode</I>, it does not recognize
+<B>time</B> as a reserved word if the next token begins with a `-'.
+The
+<FONT SIZE=-1><B>TIMEFORMAT</B>
+
+</FONT>
+variable may be set to a format string that specifies how the timing
+information should be displayed; see the description of
+<FONT SIZE=-1><B>TIMEFORMAT</B>
+
+</FONT>
+under
+<B>Shell Variables</B>
+
+below.
+<P>
+
+When the shell is in <I>posix mode</I>, <B>time</B>
+may be followed by a newline. In this case, the shell displays the
+total user and system time consumed by the shell and its children.
+The
+<FONT SIZE=-1><B>TIMEFORMAT</B>
+
+</FONT>
+variable may be used to specify the format of
+the time information.
+<P>
+
+Each command in a pipeline is executed as a separate process (i.e., in a
+subshell).
+See
+<FONT SIZE=-1><B>COMMAND EXECUTION ENVIRONMENT</B></FONT>
+for a description of a subshell environment.
+If the <B>lastpipe</B> option is enabled using the <B>shopt</B> builtin
+(see the description of <B>shopt</B> below),
+the last element of a pipeline may be run by the shell process.
+<A NAME="lbAN">&nbsp;</A>
+<H4>Lists</H4>
+
+<P>
+
+A <I>list</I> is a sequence of one or more pipelines separated by one
+of the operators
+<B>;</B>,
+
+<B>&amp;</B>,
+
+<B>&amp;&amp;</B>,
+
+or
+<B>||</B>,
+
+and optionally terminated by one of
+<B>;</B>,
+
+<B>&amp;</B>,
+
+or
+<B>&lt;newline&gt;</B>.
+
+<P>
+
+Of these list operators,
+<B>&amp;&amp;</B>
+
+and
+<B>||</B>
+
+have equal precedence, followed by
+<B>;</B>
+
+and
+<B>&amp;</B>,
+
+which have equal precedence.
+<P>
+
+A sequence of one or more newlines may appear in a <I>list</I> instead
+of a semicolon to delimit commands.
+<P>
+
+If a command is terminated by the control operator
+<B>&amp;</B>,
+
+the shell executes the command in the <I>background</I>
+in a subshell.
+The shell does not wait for the command to
+finish, and the return status is 0.
+These are referred to as <I>asynchronous</I> commands.
+Commands separated by a
+<B>;</B>
+
+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>
+
+AND and OR lists are sequences of one or more pipelines separated by the
+<B>&amp;&amp;</B> and <B>||</B> control operators, respectively.
+AND and OR lists are executed with left associativity.
+An AND list has the form
+<DL COMPACT><DT><DD>
+<P>
+
+<I>command1</I> <B>&amp;&amp;</B> <I>command2</I>
+</DL>
+
+<P>
+
+<I>command2</I>
+
+is executed if, and only if,
+<I>command1</I>
+
+returns an exit status of zero (success).
+<P>
+
+An OR list has the form
+<DL COMPACT><DT><DD>
+<P>
+
+<I>command1</I> <B>||</B> <I>command2</I>
+<P>
+
+</DL>
+
+<P>
+
+<I>command2</I>
+
+is executed if, and only if,
+<I>command1</I>
+
+returns a non-zero exit status.
+The return status of
+AND and OR lists is the exit status of the last command
+executed in the list.
+<A NAME="lbAO">&nbsp;</A>
+<H4>Compound Commands</H4>
+
+<P>
+
+A <I>compound command</I> is one of the following.
+In most cases a <I>list</I> in a command's description may be separated from
+the rest of the command by one or more newlines, and may be followed by a
+newline in place of a semicolon.
+<DL COMPACT>
+<DT>(<I>list</I>)<DD>
+<I>list</I> is executed in a subshell environment (see
+<FONT SIZE=-1><B>COMMAND EXECUTION ENVIRONMENT</B></FONT>
+below).
+Variable assignments and builtin
+commands that affect the shell's environment do not remain in effect
+after the command completes. The return status is the exit status of
+<I>list</I>.
+<DT>{ <I>list</I>; }<DD>
+<I>list</I> is simply executed in the current shell environment.
+<I>list</I> must be terminated with a newline or semicolon.
+This is known as a <I>group command</I>.
+The return status is the exit status of
+<I>list</I>.
+Note that unlike the metacharacters <B>(</B> and <B>)</B>, <B>{</B> and
+<B>}</B> are <I>reserved words</I> and must occur where a reserved
+word is permitted to be recognized. Since they do not cause a word
+break, they must be separated from <I>list</I> by whitespace or another
+shell metacharacter.
+<DT>((<I>expression</I>))<DD>
+The <I>expression</I> is evaluated according to the rules described
+below under
+<FONT SIZE=-1><B>ARITHMETIC EVALUATION</B>.
+
+</FONT>
+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
+<B>let &quot;</B><I>expression</I>&quot;.
+<DT><B>[[</B> <I>expression</I> <B>]]</B><DD>
+Return a status of 0 or 1 depending on the evaluation of
+the conditional expression <I>expression</I>.
+Expressions are composed of the primaries described below under
+<FONT SIZE=-1><B>CONDITIONAL EXPRESSIONS</B>.
+
+</FONT>
+Word splitting and pathname expansion are not performed on the words
+between the <B>[[</B> and <B>]]</B>; tilde expansion,
+parameter and variable expansion,
+arithmetic expansion, command substitution, process
+substitution, and quote removal are performed.
+Conditional operators such as <B>-f</B> must be unquoted to be recognized
+as primaries.
+<P>
+
+
+When used with <B>[[</B>, the <B>&lt;</B> and <B>&gt;</B> operators sort
+lexicographically using the current locale.
+<P>
+
+
+When the <B>==</B> and <B>!=</B> operators are used, the string to the
+right of the operator is considered a pattern and matched according
+to the rules described below under <B>Pattern Matching</B>,
+as if the <B>extglob</B> shell option were enabled.
+The <B>=</B> operator is equivalent to <B>==</B>.
+If the
+<B>nocasematch</B>
+
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+The return value is 0 if the string matches (<B>==</B>) or does not match
+(<B>!=</B>) the pattern, and 1 otherwise.
+Any part of the pattern may be quoted to force the quoted portion
+to be matched as a string.
+<P>
+
+
+An additional binary operator, <B>=~</B>, is available, with the same
+precedence as <B>==</B> and <B>!=</B>.
+When it is used, the string to the right of the operator is considered
+a POSIX 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
+<B>nocasematch</B>
+
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+Any part of the pattern may be quoted to force the quoted portion
+to be matched as a string.
+Bracket expressions in regular expressions must be treated carefully,
+since normal quoting characters lose their meanings between brackets.
+If the pattern is stored in a shell variable, quoting the variable
+expansion forces the entire pattern to be matched as a string.
+Substrings matched by parenthesized subexpressions within the regular
+expression are saved in the array variable
+<FONT SIZE=-1><B>BASH_REMATCH</B>.
+
+</FONT>
+The element of
+<FONT SIZE=-1><B>BASH_REMATCH</B>
+
+</FONT>
+with index 0 is the portion of the string
+matching the entire regular expression.
+The element of
+<FONT SIZE=-1><B>BASH_REMATCH</B>
+
+</FONT>
+with index <I>n</I> is the portion of the
+string matching the <I>n</I>th parenthesized subexpression.
+<P>
+
+
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence:
+<P>
+
+
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>( </B><I>expression</I> )
+
+<DD>
+Returns the value of <I>expression</I>.
+This may be used to override the normal precedence of operators.
+<DT><B>! </B><I>expression</I>
+
+<DD>
+True if
+<I>expression</I>
+
+is false.
+<DT><I>expression1</I> <B>&amp;&amp;</B> <I>expression2</I><DD>
+True if both
+<I>expression1</I>
+
+and
+<I>expression2</I>
+
+are true.
+<DT><I>expression1</I> <B>||</B> <I>expression2</I><DD>
+True if either
+<I>expression1</I>
+
+or
+<I>expression2</I>
+
+is true.
+
+</DL>
+<P>
+
+The <B>&amp;&amp;</B> and <B>||</B>
+operators do not evaluate <I>expression2</I> if the value of
+<I>expression1</I> is sufficient to determine the return value of
+the entire conditional expression.
+</DL>
+
+<DT><B>for</B> <I>name</I> [ [ <B>in</B> [ <I>word ...</I> ] ] ; ] <B>do</B> <I>list</I> ; <B>done</B><DD>
+The list of words following <B>in</B> is expanded, generating a list
+of items.
+The variable <I>name</I> is set to each element of this list
+in turn, and <I>list</I> is executed each time.
+If the <B>in</B> <I>word</I> is omitted, the <B>for</B> command executes
+<I>list</I> once for each positional parameter that is set (see
+<FONT SIZE=-1><B>PARAMETERS</B>
+
+</FONT>
+below).
+The return status is the exit status of the last command that executes.
+If the expansion of the items following <B>in</B> results in an empty
+list, no commands are executed, and the return status is 0.
+<DT><B>for</B> (( <I>expr1</I> ; <I>expr2</I> ; <I>expr3</I> )) ; <B>do</B> <I>list</I> ; <B>done</B><DD>
+First, the arithmetic expression <I>expr1</I> is evaluated according
+to the rules described below under
+<FONT SIZE=-1><B>ARITHMETIC EVALUATION</B>.
+
+</FONT>
+The arithmetic expression <I>expr2</I> is then evaluated repeatedly
+until it evaluates to zero.
+Each time <I>expr2</I> evaluates to a non-zero value, <I>list</I> is
+executed and the arithmetic expression <I>expr3</I> 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 <I>list</I>
+that is executed, or false if any of the expressions is invalid.
+<DT><B>select</B> <I>name</I> [ <B>in</B> <I>word</I> ] ; <B>do</B> <I>list</I> ; <B>done</B><DD>
+The list of words following <B>in</B> is expanded, generating a list
+of items. The set of expanded words is printed on the standard
+error, each preceded by a number. If the <B>in</B>
+<I>word</I> is omitted, the positional parameters are printed (see
+<FONT SIZE=-1><B>PARAMETERS</B>
+
+</FONT>
+below). The
+<FONT SIZE=-1><B>PS3</B>
+
+</FONT>
+prompt is then displayed and a line read from the standard input.
+If the line consists of a number corresponding to one of
+the displayed words, then the value of
+<I>name</I>
+
+is set to that word. If the line is empty, the words and prompt
+are displayed again. If EOF is read, the command completes. Any
+other value read causes
+<I>name</I>
+
+to be set to null. The line read is saved in the variable
+<FONT SIZE=-1><B>REPLY</B>.
+
+</FONT>
+The
+<I>list</I>
+
+is executed after each selection until a
+<B>break</B>
+
+command is executed.
+The exit status of
+<B>select</B>
+
+is the exit status of the last command executed in
+<I>list</I>,
+
+or zero if no commands were executed.
+<DT><B>case</B> <I>word</I> <B>in</B> [ [(] <I>pattern</I> [ <B>|</B> <I>pattern</I> ]
+<DD>
+A <B>case</B> command first expands <I>word</I>, and tries to match
+it against each <I>pattern</I> in turn, using the matching rules
+described under
+<B>Pattern Matching</B>
+
+below.
+The <I>word</I> is expanded using tilde
+expansion, parameter and variable expansion, arithmetic expansion,
+command substitution, process substitution and quote removal.
+Each <I>pattern</I> examined is expanded using tilde
+expansion, parameter and variable expansion, arithmetic expansion,
+command substitution, and process substitution.
+If the
+<B>nocasematch</B>
+
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+When a match is found, the corresponding <I>list</I> is executed.
+If the <B>;;</B> operator is used, no subsequent matches are attempted after
+the first pattern match.
+Using <B>;&amp;</B> in place of <B>;;</B> causes execution to continue with
+the <I>list</I> associated with the next set of patterns.
+Using <B>;;&amp;</B> in place of <B>;;</B> causes the shell to test the next
+pattern list in the statement, if any, and execute any associated <I>list</I>
+on a successful match.
+The exit status is zero if no
+pattern matches. Otherwise, it is the exit status of the
+last command executed in <I>list</I>.
+<DT><B>if</B> <I>list</I>; <B>then</B> <I>list</I>; [ <B>elif</B> <I>list</I>; <B>then</B> <I>list</I>; ] ... [ <B>else</B> <I>list</I>; ] <B>fi</B><DD>
+The
+<B>if</B>
+
+<I>list</I>
+
+is executed. If its exit status is zero, the
+<B>then</B> <I>list</I> is executed. Otherwise, each <B>elif</B>
+<I>list</I> is executed in turn, and if its exit status is zero,
+the corresponding <B>then</B> <I>list</I> is executed and the
+command completes. Otherwise, the <B>else</B> <I>list</I> is
+executed, if present. The exit status is the exit status of the
+last command executed, or zero if no condition tested true.
+<DT><B>while</B> <I>list-1</I>; <B>do</B> <I>list-2</I>; <B>done</B><DD>
+
+<DT><B>until</B> <I>list-1</I>; <B>do</B> <I>list-2</I>; <B>done</B><DD>
+
+The <B>while</B> command continuously executes the list
+<I>list-2</I> as long as the last command in the list <I>list-1</I> returns
+an exit status of zero. The <B>until</B> command is identical
+to the <B>while</B> command, except that the test is negated:
+<I>list-2</I>
+
+is executed as long as the last command in
+<I>list-1</I>
+
+returns a non-zero exit status.
+The exit status of the <B>while</B> and <B>until</B> commands
+is the exit status
+of the last command executed in <I>list-2</I>, or zero if
+none was executed.
+</DL>
+<A NAME="lbAP">&nbsp;</A>
+<H4>Coprocesses</H4>
+
+<P>
+
+A <I>coprocess</I> is a shell command preceded by the <B>coproc</B> reserved
+word.
+A coprocess is executed asynchronously in a subshell, as if the command
+had been terminated with the <B>&amp;</B> control operator, with a two-way pipe
+established between the executing shell and the coprocess.
+<P>
+
+The format for a coprocess is:
+<DL COMPACT><DT><DD>
+<P>
+
+<B>coproc</B> [<I>NAME</I>] <I>command</I> [<I>redirections</I>]
+</DL>
+
+<P>
+
+This creates a coprocess named <I>NAME</I>.
+If <I>NAME</I> is not supplied, the default name is <B>COPROC</B>.
+<I>NAME</I> must not be supplied if <I>command</I> is a <I>simple
+command</I> (see above); otherwise, it is interpreted as the first word
+of the simple command.
+When the coprocess is executed, the shell creates an array variable (see
+<B>Arrays</B>
+
+below) named <I>NAME</I> in the context of the executing shell.
+The standard output of
+<I>command</I>
+
+is connected via a pipe to a file descriptor in the executing shell,
+and that file descriptor is assigned to <I>NAME</I>[0].
+The standard input of
+<I>command</I>
+
+is connected via a pipe to a file descriptor in the executing shell,
+and that file descriptor is assigned to <I>NAME</I>[1].
+This pipe is established before any redirections specified by the
+command (see
+<FONT SIZE=-1><B>REDIRECTION</B>
+
+</FONT>
+below).
+The file descriptors can be utilized as arguments to shell commands
+and redirections using standard word expansions.
+Other than those created to execute command and process substitutions,
+the file descriptors are not available in subshells.
+The process ID of the shell spawned to execute the coprocess is
+available as the value of the variable <I>NAME</I>_PID.
+The <B>wait</B>
+builtin command may be used to wait for the coprocess to terminate.
+<P>
+
+Since the coprocess is created as an asynchronous command,
+the <B>coproc</B> command always returns success.
+The return status of a coprocess is the exit status of <I>command</I>.
+<A NAME="lbAQ">&nbsp;</A>
+<H4>Shell Function Definitions</H4>
+
+<P>
+
+A shell function is an object that is called like a simple command and
+executes a compound command with a new set of positional parameters.
+Shell functions are declared as follows:
+<DL COMPACT>
+<DT><I>name</I> () <I>compound-command</I> [<I>redirection</I>]<DD>
+
+<DT><B>function</B> <I>name</I> [()] <I>compound-command</I> [<I>redirection</I>]<DD>
+
+This defines a function named <I>name</I>.
+The reserved word <B>function</B> is optional.
+If the <B>function</B> reserved word is supplied, the parentheses are optional.
+The <I>body</I> of the function is the compound command
+<I>compound-command</I>
+
+(see <B>Compound Commands</B> above).
+That command is usually a <I>list</I> of commands between { and }, but
+may be any command listed under <B>Compound Commands</B> above,
+with one exception: If the <B>function</B> reserved word is used, but the
+parentheses are not supplied, the braces are required.
+<I>compound-command</I> is executed whenever <I>name</I> is specified as the
+name of a simple command.
+When in <I>posix mode</I>, <I>name</I> may not be the name of one of the
+POSIX <I>special builtins</I>.
+Any redirections (see
+<FONT SIZE=-1><B>REDIRECTION</B>
+
+</FONT>
+below) specified when a function is defined are performed
+when the function is executed.
+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. (See
+<FONT SIZE=-1><B>FUNCTIONS</B>
+
+</FONT>
+below.)
+</DL>
+<A NAME="lbAR">&nbsp;</A>
+<H3>COMMENTS</H3>
+
+In a non-interactive shell, or an interactive shell in which the
+<B>interactive_comments</B>
+
+option to the
+<B>shopt</B>
+
+builtin is enabled (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below), a word beginning with
+<B>#</B>
+
+causes that word and all remaining characters on that line to
+be ignored. An interactive shell without the
+<B>interactive_comments</B>
+
+option enabled does not allow comments. The
+<B>interactive_comments</B>
+
+option is on by default in interactive shells.
+<A NAME="lbAS">&nbsp;</A>
+<H3>QUOTING</H3>
+
+<I>Quoting</I> 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>
+
+Each of the <I>metacharacters</I> listed above under
+<FONT SIZE=-1><B>DEFINITIONS</B>
+
+</FONT>
+has special meaning to the shell and must be quoted if it is to
+represent itself.
+<P>
+
+When the command history expansion facilities are being used
+(see
+<FONT SIZE=-1><B>HISTORY EXPANSION</B>
+
+</FONT>
+below), the
+<I>history expansion</I> character, usually <B>!</B>, must be quoted
+to prevent history expansion.
+<P>
+
+There are three quoting mechanisms: the
+<I>escape character</I>,
+
+single quotes, and double quotes.
+<P>
+
+A non-quoted backslash (<B>\</B>) is the
+<I>escape character</I>.
+
+It preserves the literal value of the next character that follows,
+with the exception of &lt;newline&gt;. If a <B>\</B>&lt;newline&gt; pair
+appears, and the backslash is not itself quoted, the <B>\</B>&lt;newline&gt;
+is treated as a line continuation (that is, it is removed from the
+input stream and effectively ignored).
+<P>
+
+Enclosing characters in single quotes preserves the literal value
+of each character within the quotes. A single quote may not occur
+between single quotes, even when preceded by a backslash.
+<P>
+
+Enclosing characters in double quotes preserves the literal value
+of all characters within the quotes, with the exception of
+<B>$</B>,
+
+<B>`</B>,
+
+<B>\</B>,
+
+and, when history expansion is enabled,
+<B>!</B>.
+
+When the shell is in <I>posix mode</I>, the <B>!</B> has no special meaning
+within double quotes, even when history expansion is enabled.
+The characters
+<B>$</B>
+
+and
+<B>`</B>
+
+retain their special meaning within double quotes. The backslash
+retains its special meaning only when followed by one of the following
+characters:
+<B>$</B>,
+
+<B>`</B>,
+
+<B>&quot;</B>,
+<B>\</B>,
+
+or
+<B>&lt;newline&gt;</B>.
+
+A double quote may be quoted within double quotes by preceding it with
+a backslash.
+If enabled, history expansion will be performed unless an
+<B>!</B>
+
+appearing in double quotes is escaped using a backslash.
+The backslash preceding the
+<B>!</B>
+
+is not removed.
+<P>
+
+The special parameters
+<B>*</B>
+
+and
+<B>@</B>
+
+have special meaning when in double
+quotes (see
+<FONT SIZE=-1><B>PARAMETERS</B>
+
+</FONT>
+below).
+<P>
+
+Words of the form <B>$</B>aq<I>string</I>aq are treated specially. The
+word expands to <I>string</I>, with backslash-escaped characters replaced
+as specified by the ANSI C standard. Backslash escape sequences, if
+present, are decoded as follows:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>\a</B>
+
+<DD>
+alert (bell)
+<DT><B>\b</B>
+
+<DD>
+backspace
+<DT><B>\e</B>
+
+<DD>
+<DT><B>\E</B>
+
+<DD>
+an escape character
+<DT><B>\f</B>
+
+<DD>
+form feed
+<DT><B>\n</B>
+
+<DD>
+new line
+<DT><B>\r</B>
+
+<DD>
+carriage return
+<DT><B>\t</B>
+
+<DD>
+horizontal tab
+<DT><B>\v</B>
+
+<DD>
+vertical tab
+<DT><B>\\</B>
+
+<DD>
+backslash
+<DT><B>\aq</B>
+
+<DD>
+single quote
+<DT><B>\dq</B>
+
+<DD>
+double quote
+<DT><B>\?</B>
+
+<DD>
+question mark
+<DT><B>\</B><I>nnn</I>
+
+<DD>
+the eight-bit character whose value is the octal value <I>nnn</I>
+(one to three octal digits)
+<DT><B>\x</B><I>HH</I>
+
+<DD>
+the eight-bit character whose value is the hexadecimal value <I>HH</I>
+(one or two hex digits)
+<DT><B>\u</B><I>HHHH</I>
+
+<DD>
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+<I>HHHH</I> (one to four hex digits)
+<DT><B>\U</B><I>HHHHHHHH</I>
+
+<DD>
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+<I>HHHHHHHH</I> (one to eight hex digits)
+<DT><B>\c</B><I>x</I>
+
+<DD>
+a control-<I>x</I> character
+
+</DL></DL>
+
+<P>
+
+The expanded result is single-quoted, as if the dollar sign had
+not been present.
+<P>
+
+A double-quoted string preceded by a dollar sign (<B>$</B>dq<I>string</I>dq)
+will cause the string to be translated according to the current locale.
+If the current locale is <B>C</B> or <B>POSIX</B>, the dollar sign
+is ignored.
+If the string is translated and replaced, the replacement is
+double-quoted.
+<A NAME="lbAT">&nbsp;</A>
+<H3>PARAMETERS</H3>
+
+A
+<I>parameter</I>
+
+is an entity that stores values.
+It can be a
+<I>name</I>,
+
+a number, or one of the special characters listed below under
+<B>Special Parameters</B>.
+
+A
+<I>variable</I>
+
+is a parameter denoted by a
+<I>name</I>.
+
+A variable has a <I>value</I> and zero or more <I>attributes</I>.
+Attributes are assigned using the
+<B>declare</B>
+
+builtin command (see
+<B>declare</B>
+
+below in
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>).
+
+</FONT>
+<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
+<B>unset</B>
+
+builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<P>
+
+A
+<I>variable</I>
+
+may be assigned to by a statement of the form
+<DL COMPACT><DT><DD>
+<P>
+
+<I>name</I>=[<I>value</I>]
+</DL>
+
+<P>
+
+If
+<I>value</I>
+
+is not given, the variable is assigned the null string. All
+<I>values</I>
+
+undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote
+removal (see
+<FONT SIZE=-1><B>EXPANSION</B>
+
+</FONT>
+below). If the variable has its
+<B>integer</B>
+
+attribute set, then
+<I>value</I>
+
+is evaluated as an arithmetic expression even if the $((...)) expansion is
+not used (see
+<B>Arithmetic Expansion</B>
+
+below).
+Word splitting is not performed, with the exception
+of <B>&quot;$@&quot;</B> as explained below under
+<B>Special Parameters</B>.
+
+Pathname expansion is not performed.
+Assignment statements may also appear as arguments to the
+<B>alias</B>,
+
+<B>declare</B>,
+
+<B>typeset</B>,
+
+<B>export</B>,
+
+<B>readonly</B>,
+
+and
+<B>local</B>
+
+builtin commands (<I>declaration</I> commands).
+When in <I>posix mode</I>, these builtins may appear in a command after
+one or more instances of the <B>command</B> builtin and retain these
+assignment statement properties.
+<P>
+
+In the context where an assignment statement is assigning a value
+to a shell variable or array index, the += operator can be used to
+append to or add to the variable's previous value.
+This includes arguments to builtin commands such as <B>declare</B> that
+accept assignment statements (<I>declaration</I> commands).
+When += is applied to a variable for which the <I>integer</I> attribute has been
+set, <I>value</I> is evaluated as an arithmetic expression and added to the
+variable's current value, which is also evaluated.
+When += is applied to an array variable using compound assignment (see
+<B>Arrays</B>
+
+below), the
+variable's value is not unset (as it is when using =), and new values are
+appended to the array beginning at one greater than the array's maximum index
+(for indexed arrays) or added as additional key-value pairs in an
+associative array.
+When applied to a string-valued variable, <I>value</I> is expanded and
+appended to the variable's value.
+<P>
+
+A variable can be assigned the <I>nameref</I> attribute using the
+<B>-n</B> option to the <B>declare</B> or <B>local</B> builtin commands
+(see the descriptions of <B>declare</B> and <B>local</B> below)
+to create a <I>nameref</I>, or a reference to another variable.
+This allows variables to be manipulated indirectly.
+Whenever the nameref variable is referenced, assigned to, unset, or has
+its attributes modified (other than using or changing the <I>nameref</I>
+attribute itself), the
+operation is actually performed on the variable specified by the nameref
+variable's value.
+A nameref is commonly used within shell functions to refer to a variable
+whose name is passed as an argument to the function.
+For instance, if a variable name is passed to a shell function as its first
+argument, running
+<P>
+<DL COMPACT><DT><DD>
+<TT>declare -n ref=$1</TT>
+
+</DL>
+
+<P>
+inside the function creates a nameref variable <B>ref</B> whose value is
+the variable name passed as the first argument.
+References and assignments to <B>ref</B>, and changes to its attributes,
+are treated as references, assignments, and attribute modifications
+to the variable whose name was passed as <B>$1</B>.
+If the control variable in a <B>for</B> loop has the nameref attribute,
+the list of words can be a list of shell variables, and a name reference
+will be established for each word in the list, in turn, when the loop is
+executed.
+Array variables cannot be given the <B>nameref</B> attribute.
+However, nameref variables can reference array variables and subscripted
+array variables.
+Namerefs can be unset using the <B>-n</B> option to the <B>unset</B> builtin.
+Otherwise, if <B>unset</B> is executed with the name of a nameref variable
+as an argument, the variable referenced by the nameref variable will be unset.
+<A NAME="lbAU">&nbsp;</A>
+<H4>Positional Parameters</H4>
+
+<P>
+
+A
+<I>positional parameter</I>
+
+is a parameter denoted by one or more
+digits, other than the single digit 0. Positional parameters are
+assigned from the shell's arguments when it is invoked,
+and may be reassigned using the
+<B>set</B>
+
+builtin command. Positional parameters may not be assigned to
+with assignment statements. The positional parameters are
+temporarily replaced when a shell function is executed (see
+<FONT SIZE=-1><B>FUNCTIONS</B>
+
+</FONT>
+below).
+<P>
+
+When a positional parameter consisting of more than a single
+digit is expanded, it must be enclosed in braces (see
+<FONT SIZE=-1><B>EXPANSION</B>
+
+</FONT>
+below).
+<A NAME="lbAV">&nbsp;</A>
+<H4>Special Parameters</H4>
+
+<P>
+
+The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+
+<DL COMPACT>
+<DT><B>*</B>
+
+<DD>
+Expands to the positional parameters, starting from one.
+When the expansion is not within double quotes, each positional parameter
+expands to a separate word.
+In contexts where it is performed, those words
+are subject to further word splitting and pathname expansion.
+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
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+special variable. That is, &quot;<B>$*</B>&quot; is equivalent
+to &quot;<B>$1</B><I>c</I><B>$2</B><I>c</I><B>...</B>&quot;, where
+<I>c</I>
+
+is the first character of the value of the
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+variable. If
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+is unset, the parameters are separated by spaces.
+If
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+is null, the parameters are joined without intervening separators.
+<DT><B>@</B>
+
+<DD>
+Expands to the positional parameters, starting from one.
+In contexts where word splitting is performed, this expands each
+positional parameter to a separate word; if not within double
+quotes, these words are subject to word splitting.
+In contexts where word splitting is not performed,
+this expands to a single word
+with each positional parameter separated by a space.
+When the
+expansion occurs within double quotes, each parameter expands to a
+separate word. That is, &quot;<B>$@</B>&quot; is equivalent to
+&quot;<B>$1</B>&quot; &quot;<B>$2</B>&quot; ...
+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, &quot;<B>$@</B>&quot; and
+<B>$@</B>
+
+expand to nothing (i.e., they are removed).
+<DT><B>#</B>
+
+<DD>
+Expands to the number of positional parameters in decimal.
+<DT><B>?</B>
+
+<DD>
+Expands to the exit status of the most recently executed foreground
+pipeline.
+<DT><B>-</B>
+
+<DD>
+Expands to the current option flags as specified upon invocation,
+by the
+<B>set</B>
+
+builtin command, or those set by the shell itself
+(such as the
+<B>-i</B>
+
+option).
+<DT><B>$</B>
+
+<DD>
+Expands to the process ID of the shell. In a () subshell, it
+expands to the process ID of the current shell, not the
+subshell.
+<DT><B>!</B>
+
+<DD>
+Expands to the process ID of the job most recently placed into the
+background, whether executed as an asynchronous command or using
+the <B>bg</B> builtin (see
+<FONT SIZE=-1><B>JOB CONTROL</B>
+
+</FONT>
+below).
+<DT><B>0</B>
+
+<DD>
+Expands to the name of the shell or shell script. This is set at
+shell initialization. If
+<B>bash</B>
+
+is invoked with a file of commands,
+<B>$0</B>
+
+is set to the name of that file. If
+<B>bash</B>
+
+is started with the
+<B>-c</B>
+
+option, then
+<B>$0</B>
+
+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
+<B>bash</B>,
+
+as given by argument zero.
+<DT><B>_</B>
+
+<DD>
+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 simple
+command executed in the foreground, 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
+currently being checked.
+
+</DL>
+<A NAME="lbAW">&nbsp;</A>
+<H4>Shell Variables</H4>
+
+<P>
+
+The following variables are set by the shell:
+<P>
+
+
+<DL COMPACT>
+<DT><B>BASH</B>
+
+<DD>
+Expands to the full filename used to invoke this instance of
+<B>bash</B>.
+
+<DT><B>BASHOPTS</B>
+
+<DD>
+A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the
+<B>-s</B>
+
+option to the
+<B>shopt</B>
+
+builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below). The options appearing in
+<FONT SIZE=-1><B>BASHOPTS</B>
+
+</FONT>
+are those reported as
+<I>on</I>
+
+by <B>shopt</B>.
+If this variable is in the environment when
+<B>bash</B>
+
+starts up, each shell option in the list will be enabled before
+reading any startup files.
+This variable is read-only.
+<DT><B>BASHPID</B>
+
+<DD>
+Expands to the process ID of the current <B>bash</B> process.
+This differs from <B>$$</B> under certain circumstances, such as subshells
+that do not require <B>bash</B> to be re-initialized.
+Assignments to
+<FONT SIZE=-1><B>BASHPID</B>
+
+</FONT>
+have no effect.
+If
+<B>BASHPID</B>
+
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>BASH_ALIASES</B>
+
+<DD>
+An associative array variable whose members correspond to the internal
+list of aliases as maintained by the <B>alias</B> builtin.
+Elements added to this array appear in the alias list; however,
+unsetting array elements currently does not cause aliases to be removed
+from the alias list.
+If
+<B>BASH_ALIASES</B>
+
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>BASH_ARGC</B>
+
+<DD>
+An array variable whose values are the number of parameters in each
+frame of the current <B>bash</B> execution call stack.
+The number of
+parameters to the current subroutine (shell function or script executed
+with <B>.</B> or <B>source</B>) is at the top of the stack.
+When a subroutine is executed, the number of parameters passed is pushed onto
+<FONT SIZE=-1><B>BASH_ARGC</B>.
+
+</FONT>
+The shell sets
+<FONT SIZE=-1><B>BASH_ARGC</B>
+
+</FONT>
+only when in extended debugging mode (see the description of the
+<B>extdebug</B>
+
+option to the
+<B>shopt</B>
+
+builtin below).
+Setting <B>extdebug</B> after the shell has started to execute a script,
+or referencing this variable when <B>extdebug</B> is not set,
+may result in inconsistent values.
+<DT><B>BASH_ARGV</B>
+
+<DD>
+An array variable containing all of the parameters in the current <B>bash</B>
+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
+<FONT SIZE=-1><B>BASH_ARGV</B>.
+
+</FONT>
+The shell sets
+<FONT SIZE=-1><B>BASH_ARGV</B>
+
+</FONT>
+only when in extended debugging mode
+(see the description of the
+<B>extdebug</B>
+
+option to the
+<B>shopt</B>
+
+builtin below).
+Setting <B>extdebug</B> after the shell has started to execute a script,
+or referencing this variable when <B>extdebug</B> is not set,
+may result in inconsistent values.
+<DT><B>BASH_ARGV0</B>
+
+<DD>
+When referenced, this variable expands to the name of the shell or shell
+script (identical to
+<B>$0</B>;
+
+see the description of special parameter 0 above).
+Assignment to
+<B>BASH_ARGV0</B>
+
+causes the value assigned to also be assigned to <B>$0</B>.
+If
+<B>BASH_ARGV0</B>
+
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>BASH_CMDS</B>
+
+<DD>
+An associative array variable whose members correspond to the internal
+hash table of commands as maintained by the <B>hash</B> builtin.
+Elements added to this array appear in the hash table; however,
+unsetting array elements currently does not cause command names to be removed
+from the hash table.
+If
+<B>BASH_CMDS</B>
+
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>BASH_COMMAND</B>
+
+<DD>
+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.
+<DT><B>BASH_EXECUTION_STRING</B>
+
+<DD>
+The command argument to the <B>-c</B> invocation option.
+<DT><B>BASH_LINENO</B>
+
+<DD>
+An array variable whose members are the line numbers in source files
+where each corresponding member of
+<FONT SIZE=-1><B>FUNCNAME</B>
+
+</FONT>
+was invoked.
+<B>${BASH_LINENO[</B><I>$i</I><B>]}</B> is the line number in the source
+file (<B>${BASH_SOURCE[</B><I>$i+1</I><B>]}</B>) where
+<B>${FUNCNAME[</B><I>$i</I><B>]}</B> was called
+(or <B>${BASH_LINENO[</B><I>$i-1</I><B>]}</B> if referenced within another
+shell function).
+Use
+<FONT SIZE=-1><B>LINENO</B>
+
+</FONT>
+to obtain the current line number.
+<DT><B>BASH_LOADABLES_PATH</B>
+
+<DD>
+A colon-separated list of directories in which the shell looks for
+dynamically loadable builtins specified by the
+<B>enable</B>
+
+command.
+<DT><B>BASH_REMATCH</B>
+
+<DD>
+An array variable whose members are assigned by the <B>=~</B> binary
+operator to the <B>[[</B> conditional command.
+The element with index 0 is the portion of the string
+matching the entire regular expression.
+The element with index <I>n</I> is the portion of the
+string matching the <I>n</I>th parenthesized subexpression.
+This variable is read-only.
+<DT><B>BASH_SOURCE</B>
+
+<DD>
+An array variable whose members are the source filenames
+where the corresponding shell function names in the
+<FONT SIZE=-1><B>FUNCNAME</B>
+
+</FONT>
+array variable are defined.
+The shell function
+<B>${FUNCNAME[</B><I>$i</I><B>]}</B> is defined in the file
+<B>${BASH_SOURCE[</B><I>$i</I><B>]}</B> and called from
+<B>${BASH_SOURCE[</B><I>$i+1</I><B>]}</B>.
+<DT><B>BASH_SUBSHELL</B>
+
+<DD>
+Incremented by one within each subshell or subshell environment when
+the shell begins executing in that environment.
+The initial value is 0.
+<DT><B>BASH_VERSINFO</B>
+
+<DD>
+A readonly array variable whose members hold version information for
+this instance of
+<B>bash</B>.
+
+The values assigned to the array members are as follows:
+<P>
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT><B>BASH_VERSINFO[</B>0]
+
+<DD>
+The major version number (the <I>release</I>).
+<DT><B>BASH_VERSINFO[</B>1]
+
+<DD>
+The minor version number (the <I>version</I>).
+<DT><B>BASH_VERSINFO[</B>2]
+
+<DD>
+The patch level.
+<DT><B>BASH_VERSINFO[</B>3]
+
+<DD>
+The build version.
+<DT><B>BASH_VERSINFO[</B>4]
+
+<DD>
+The release status (e.g., <I>beta1</I>).
+<DT><B>BASH_VERSINFO[</B>5]
+
+<DD>
+The value of
+<FONT SIZE=-1><B>MACHTYPE</B>.
+
+</FONT>
+</DL></DL>
+
+<DT><B>BASH_VERSION</B>
+
+<DD>
+Expands to a string describing the version of this instance of
+<B>bash</B>.
+
+<DT><B>COMP_CWORD</B>
+
+<DD>
+An index into <B>${COMP_WORDS}</B> of the word containing the current
+cursor position.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see <B>Programmable Completion</B>
+below).
+<DT><B>COMP_KEY</B>
+
+<DD>
+The key (or final key of a key sequence) used to invoke the current
+completion function.
+<DT><B>COMP_LINE</B>
+
+<DD>
+The current command line.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see <B>Programmable Completion</B>
+below).
+<DT><B>COMP_POINT</B>
+
+<DD>
+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 <B>${#COMP_LINE}</B>.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see <B>Programmable Completion</B>
+below).
+<DT><B>COMP_TYPE</B>
+
+<DD>
+Set to an integer value corresponding to the type of completion attempted
+that caused a completion function to be called:
+<I>TAB</I>, for normal completion,
+<I>?</I>, for listing completions after successive tabs,
+<I>!</I>, for listing alternatives on partial word completion,
+<I>@</I>, to list completions if the word is not unmodified,
+or
+<I>%</I>, for menu completion.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see <B>Programmable Completion</B>
+below).
+<DT><B>COMP_WORDBREAKS</B>
+
+<DD>
+The set of characters that the <B>readline</B> library treats as word
+separators when performing word completion.
+If
+<FONT SIZE=-1><B>COMP_WORDBREAKS</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>COMP_WORDS</B>
+
+<DD>
+An array variable (see <B>Arrays</B> below) consisting of the individual
+words in the current command line.
+The line is split into words as <B>readline</B> would split it, using
+<FONT SIZE=-1><B>COMP_WORDBREAKS</B>
+
+</FONT>
+as described above.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see <B>Programmable Completion</B>
+below).
+<DT><B>COPROC</B>
+
+<DD>
+An array variable (see <B>Arrays</B> below) created to hold the file descriptors
+for output from and input to an unnamed coprocess (see <B>Coprocesses</B>
+above).
+<DT><B>DIRSTACK</B>
+
+<DD>
+An array variable (see
+<B>Arrays</B>
+
+below) containing the current contents of the directory stack.
+Directories appear in the stack in the order they are displayed by the
+<B>dirs</B>
+
+builtin.
+Assigning to members of this array variable may be used to modify
+directories already in the stack, but the
+<B>pushd</B>
+
+and
+<B>popd</B>
+
+builtins must be used to add and remove directories.
+Assignment to this variable will not change the current directory.
+If
+<FONT SIZE=-1><B>DIRSTACK</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>EPOCHREALTIME</B>
+
+<DD>
+Each time this parameter is referenced, it expands to the number of seconds
+since the Unix Epoch (see <I>time</I>(3)) as a floating point value
+with micro-second granularity.
+Assignments to
+<FONT SIZE=-1><B>EPOCHREALTIME</B>
+
+</FONT>
+are ignored.
+If
+<FONT SIZE=-1><B>EPOCHREALTIME</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>EPOCHSECONDS</B>
+
+<DD>
+Each time this parameter is referenced, it expands to the number of seconds
+since the Unix Epoch (see <I>time</I>(3)).
+Assignments to
+<FONT SIZE=-1><B>EPOCHSECONDS</B>
+
+</FONT>
+are ignored.
+If
+<FONT SIZE=-1><B>EPOCHSECONDS</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>EUID</B>
+
+<DD>
+Expands to the effective user ID of the current user, initialized at
+shell startup. This variable is readonly.
+<DT><B>FUNCNAME</B>
+
+<DD>
+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 (the one with the highest index) is
+<TT>&quot;main&quot;</TT>.
+
+This variable exists only when a shell function is executing.
+Assignments to
+<FONT SIZE=-1><B>FUNCNAME</B>
+
+</FONT>
+have no effect.
+If
+<FONT SIZE=-1><B>FUNCNAME</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<P>
+
+
+This variable can be used with <B>BASH_LINENO</B> and <B>BASH_SOURCE</B>.
+Each element of <B>FUNCNAME</B> has corresponding elements in
+<B>BASH_LINENO</B> and <B>BASH_SOURCE</B> to describe the call stack.
+For instance, <B>${FUNCNAME[</B><I>$i</I><B>]}</B> was called from the file
+<B>${BASH_SOURCE[</B><I>$i+1</I><B>]}</B> at line number
+<B>${BASH_LINENO[</B><I>$i</I><B>]}</B>.
+The <B>caller</B> builtin displays the current call stack using this
+information.
+<DT><B>GROUPS</B>
+
+<DD>
+An array variable containing the list of groups of which the current
+user is a member.
+Assignments to
+<FONT SIZE=-1><B>GROUPS</B>
+
+</FONT>
+have no effect.
+If
+<FONT SIZE=-1><B>GROUPS</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>HISTCMD</B>
+
+<DD>
+The history number, or index in the history list, of the current
+command.
+If
+<FONT SIZE=-1><B>HISTCMD</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>HOSTNAME</B>
+
+<DD>
+Automatically set to the name of the current host.
+<DT><B>HOSTTYPE</B>
+
+<DD>
+Automatically set to a string that uniquely
+describes the type of machine on which
+<B>bash</B>
+
+is executing.
+The default is system-dependent.
+<DT><B>LINENO</B>
+
+<DD>
+Each time this parameter is referenced, the shell substitutes
+a decimal number representing the current sequential line number
+(starting with 1) within a script or function. When not in a
+script or function, the value substituted is not guaranteed to
+be meaningful.
+If
+<FONT SIZE=-1><B>LINENO</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>MACHTYPE</B>
+
+<DD>
+Automatically set to a string that fully describes the system
+type on which
+<B>bash</B>
+
+is executing, in the standard GNU <I>cpu-company-system</I> format.
+The default is system-dependent.
+<DT><B>MAPFILE</B>
+
+<DD>
+An array variable (see <B>Arrays</B> below) created to hold the text
+read by the <B>mapfile</B> builtin when no variable name is supplied.
+<DT><B>OLDPWD</B>
+
+<DD>
+The previous working directory as set by the
+<B>cd</B>
+
+command.
+<DT><B>OPTARG</B>
+
+<DD>
+The value of the last option argument processed by the
+<B>getopts</B>
+
+builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<DT><B>OPTIND</B>
+
+<DD>
+The index of the next argument to be processed by the
+<B>getopts</B>
+
+builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<DT><B>OSTYPE</B>
+
+<DD>
+Automatically set to a string that
+describes the operating system on which
+<B>bash</B>
+
+is executing.
+The default is system-dependent.
+<DT><B>PIPESTATUS</B>
+
+<DD>
+An array variable (see
+<B>Arrays</B>
+
+below) containing a list of exit status values from the processes
+in the most-recently-executed foreground pipeline (which may
+contain only a single command).
+<DT><B>PPID</B>
+
+<DD>
+The process ID of the shell's parent. This variable is readonly.
+<DT><B>PWD</B>
+
+<DD>
+The current working directory as set by the
+<B>cd</B>
+
+command.
+<DT><B>RANDOM</B>
+
+<DD>
+Each time this parameter is referenced, a random integer between
+0 and 32767 is
+generated. The sequence of random numbers may be initialized by assigning
+a value to
+<FONT SIZE=-1><B>RANDOM</B>.
+
+</FONT>
+If
+<FONT SIZE=-1><B>RANDOM</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>READLINE_LINE</B>
+
+<DD>
+The contents of the
+<B>readline</B>
+
+line buffer, for use with
+<TT>bind -x</TT>
+
+(see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<DT><B>READLINE_POINT</B>
+
+<DD>
+The position of the insertion point in the
+<B>readline</B>
+
+line buffer, for use with
+<TT>bind -x</TT>
+
+(see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<DT><B>REPLY</B>
+
+<DD>
+Set to the line of input read by the
+<B>read</B>
+
+builtin command when no arguments are supplied.
+<DT><B>SECONDS</B>
+
+<DD>
+Each time this parameter is
+referenced, the number of seconds since shell invocation is returned. If a
+value is assigned to
+<FONT SIZE=-1><B>SECONDS</B>,
+
+</FONT>
+the value returned upon subsequent
+references is
+the number of seconds since the assignment plus the value assigned.
+If
+<FONT SIZE=-1><B>SECONDS</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>SHELLOPTS</B>
+
+<DD>
+A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the
+<B>-o</B>
+
+option to the
+<B>set</B>
+
+builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below). The options appearing in
+<FONT SIZE=-1><B>SHELLOPTS</B>
+
+</FONT>
+are those reported as
+<I>on</I>
+
+by <B>set -o</B>.
+If this variable is in the environment when
+<B>bash</B>
+
+starts up, each shell option in the list will be enabled before
+reading any startup files.
+This variable is read-only.
+<DT><B>SHLVL</B>
+
+<DD>
+Incremented by one each time an instance of
+<B>bash</B>
+
+is started.
+<DT><B>UID</B>
+
+<DD>
+Expands to the user ID of the current user, initialized at shell startup.
+This variable is readonly.
+
+</DL>
+<P>
+
+The following variables are used by the shell. In some cases,
+<B>bash</B>
+
+assigns a default value to a variable; these cases are noted
+below.
+<P>
+
+
+<DL COMPACT>
+<DT><B>BASH_COMPAT</B>
+
+<DD>
+The value is used to set the shell's compatibility level.
+See the description of the <B>shopt</B> builtin below under
+<B>SHELL BUILTIN COMMANDS</B>
+for a description of the various compatibility
+levels and their effects.
+The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
+corresponding to the desired compatibility level.
+If <B>BASH_COMPAT</B> is unset or set to the empty string, the compatibility
+level is set to the default for the current version.
+If <B>BASH_COMPAT</B> is set to a value that is not one of the valid
+compatibility levels, the shell prints an error message and sets the
+compatibility level to the default for the current version.
+The valid compatibility levels correspond to the compatibility options
+accepted by the <B>shopt</B> builtin described below (for example,
+<B>compat42</B> means that 4.2 and 42 are valid values).
+The current version is also a valid value.
+<DT><B>BASH_ENV</B>
+
+<DD>
+If this parameter is set when <B>bash</B> is executing a shell script,
+its value is interpreted as a filename containing commands to
+initialize the shell, as in
+<A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>.
+
+The value of
+<FONT SIZE=-1><B>BASH_ENV</B>
+
+</FONT>
+is subjected to parameter expansion, command substitution, and arithmetic
+expansion before being interpreted as a filename.
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+is not used to search for the resultant filename.
+<DT><B>BASH_XTRACEFD</B>
+
+<DD>
+If set to an integer corresponding to a valid file descriptor, <B>bash</B>
+will write the trace output generated when
+<TT>set -x</TT>
+
+is enabled to that file descriptor.
+The file descriptor is closed when
+<FONT SIZE=-1><B>BASH_XTRACEFD</B>
+
+</FONT>
+is unset or assigned a new value.
+Unsetting
+<FONT SIZE=-1><B>BASH_XTRACEFD</B>
+
+</FONT>
+or assigning it the empty string causes the
+trace output to be sent to the standard error.
+Note that setting
+<FONT SIZE=-1><B>BASH_XTRACEFD</B>
+
+</FONT>
+to 2 (the standard error file
+descriptor) and then unsetting it will result in the standard error
+being closed.
+<DT><B>CDPATH</B>
+
+<DD>
+The search path for the
+<B>cd</B>
+
+command.
+This is a colon-separated list of directories in which the shell looks
+for destination directories specified by the
+<B>cd</B>
+
+command.
+A sample value is
+<TT>&quot;.:~:/usr&quot;</TT>.
+
+<DT><B>CHILD_MAX</B>
+
+<DD>
+Set the number of exited child status values for the shell to remember.
+Bash will not allow this value to be decreased below a POSIX-mandated
+minimum, and there is a maximum value (currently 8192) that this may
+not exceed.
+The minimum value is system-dependent.
+<DT><B>COLUMNS</B>
+
+<DD>
+Used by the <B>select</B> compound command to determine the terminal width
+when printing selection lists.
+Automatically set if the
+<B>checkwinsize</B>
+
+option is enabled or in an interactive shell upon receipt of a
+<FONT SIZE=-1><B>SIGWINCH</B>.
+
+</FONT>
+<DT><B>COMPREPLY</B>
+
+<DD>
+An array variable from which <B>bash</B> reads the possible completions
+generated by a shell function invoked by the programmable completion
+facility (see <B>Programmable Completion</B> below).
+Each array element contains one possible completion.
+<DT><B>EMACS</B>
+
+<DD>
+If <B>bash</B> finds this variable in the environment when the shell starts
+with value
+<TT>t</TT>,
+
+it assumes that the shell is running in an Emacs shell buffer and disables
+line editing.
+<DT><B>ENV</B>
+
+<DD>
+Similar to
+<FONT SIZE=-1><B>BASH_ENV</B>;
+
+</FONT>
+used when the shell is invoked in <I>posix mode</I>.
+<DT><B>EXECIGNORE</B>
+
+<DD>
+A colon-separated list of shell patterns (see <B>Pattern Matching</B>)
+defining the list of filenames to be ignored by command search using
+<B>PATH</B>.
+Files whose full pathnames match one of these patterns are not considered
+executable files for the purposes of completion and command execution
+via <B>PATH</B> lookup.
+This does not affect the behavior of the <B>[</B>, <B>test</B>, and <B>[[</B>
+commands.
+Full pathnames in the command hash table are not subject to <B>EXECIGNORE</B>.
+Use this variable to ignore shared library files that have the executable
+bit set, but are not executable files.
+The pattern matching honors the setting of the <B>extglob</B> shell
+option.
+<DT><B>FCEDIT</B>
+
+<DD>
+The default editor for the
+<B>fc</B>
+
+builtin command.
+<DT><B>FIGNORE</B>
+
+<DD>
+A colon-separated list of suffixes to ignore when performing
+filename completion (see
+<FONT SIZE=-1><B>READLINE</B>
+
+</FONT>
+below).
+A filename whose suffix matches one of the entries in
+<FONT SIZE=-1><B>FIGNORE</B>
+
+</FONT>
+is excluded from the list of matched filenames.
+A sample value is
+<TT>&quot;.o:~&quot;</TT>.
+
+<DT><B>FUNCNEST</B>
+
+<DD>
+If set to a numeric value greater than 0, defines a maximum function
+nesting level. Function invocations that exceed this nesting level
+will cause the current command to abort.
+<DT><B>GLOBIGNORE</B>
+
+<DD>
+A colon-separated list of patterns defining the set of file names to
+be ignored by pathname expansion.
+If a file name matched by a pathname expansion pattern also matches one
+of the patterns in
+<FONT SIZE=-1><B>GLOBIGNORE</B>,
+
+</FONT>
+it is removed from the list of matches.
+<DT><B>HISTCONTROL</B>
+
+<DD>
+A colon-separated list of values controlling how commands are saved on
+the history list.
+If the list of values includes
+<I>ignorespace</I>,
+
+lines which begin with a
+<B>space</B>
+
+character are not saved in the history list.
+A value of
+<I>ignoredups</I>
+
+causes lines matching the previous history entry to not be saved.
+A value of
+<I>ignoreboth</I>
+
+is shorthand for <I>ignorespace</I> and <I>ignoredups</I>.
+A value of
+<I>erasedups</I>
+
+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
+<FONT SIZE=-1><B>HISTCONTROL</B>
+
+</FONT>
+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
+<FONT SIZE=-1><B>HISTIGNORE</B>.
+
+</FONT>
+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
+<FONT SIZE=-1><B>HISTCONTROL</B>.
+
+</FONT>
+<DT><B>HISTFILE</B>
+
+<DD>
+The name of the file in which command history is saved (see
+<FONT SIZE=-1><B>HISTORY</B>
+
+</FONT>
+below). The default value is <A HREF="file:~/.bash_history"><I>~/.bash_history</I></A>. If unset, the
+command history is not saved when a shell exits.
+<DT><B>HISTFILESIZE</B>
+
+<DD>
+The maximum number of lines contained in the history file. When this
+variable is assigned a value, the history file is truncated, if
+necessary,
+to contain no more than that number of lines by removing the oldest entries.
+The history file is also truncated to this size after
+writing it when a shell exits.
+If the value is 0, the history file is truncated to zero size.
+Non-numeric values and numeric values less than zero inhibit truncation.
+The shell sets the default value to the value of <B>HISTSIZE</B>
+after reading any startup files.
+<DT><B>HISTIGNORE</B>
+
+<DD>
+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
+`<B>*</B>' is appended). Each pattern is tested against the line
+after the checks specified by
+<FONT SIZE=-1><B>HISTCONTROL</B>
+
+</FONT>
+are applied.
+In addition to the normal shell pattern matching characters, `<B>&amp;</B>'
+matches the previous history line. `<B>&amp;</B>' 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
+<FONT SIZE=-1><B>HISTIGNORE</B>.
+
+</FONT>
+The pattern matching honors the setting of the <B>extglob</B> shell
+option.
+<DT><B>HISTSIZE</B>
+
+<DD>
+The number of commands to remember in the command history (see
+<FONT SIZE=-1><B>HISTORY</B>
+
+</FONT>
+below).
+If the value is 0, commands are not saved in the history list.
+Numeric values less than zero result in every command being saved
+on the history list (there is no limit).
+The shell sets the default value to 500 after reading any startup files.
+<DT><B>HISTTIMEFORMAT</B>
+
+<DD>
+If this variable is set and not null, its value is used as a format string
+for <I>strftime</I>(3) to print the time stamp associated with each history
+entry displayed by the <B>history</B> builtin.
+If this variable is set, time stamps are written to the history file so
+they may be preserved across shell sessions.
+This uses the history comment character to distinguish timestamps from
+other history lines.
+<DT><B>HOME</B>
+
+<DD>
+The home directory of the current user; the default argument for the
+<B>cd</B> builtin command.
+The value of this variable is also used when performing tilde expansion.
+<DT><B>HOSTFILE</B>
+
+<DD>
+Contains the name of a file in the same format as
+
+<I>/etc/hosts</I>
+
+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,
+<B>bash</B>
+
+adds the contents of the new file to the existing list.
+If
+<FONT SIZE=-1><B>HOSTFILE</B>
+
+</FONT>
+is set, but has no value, or does not name a readable file,
+<B>bash</B> attempts to read
+
+<I>/etc/hosts</I>
+
+to obtain the list of possible hostname completions.
+When
+<FONT SIZE=-1><B>HOSTFILE</B>
+
+</FONT>
+is unset, the hostname list is cleared.
+<DT><B>IFS</B>
+
+<DD>
+The
+<I>Internal Field Separator</I>
+
+that is used
+for word splitting after expansion and to
+split lines into words with the
+<B>read</B>
+
+builtin command. The default value is
+``&lt;space&gt;&lt;tab&gt;&lt;newline&gt;''.
+<DT><B>IGNOREEOF</B>
+
+<DD>
+Controls the
+action of an interactive shell on receipt of an
+<FONT SIZE=-1><B>EOF</B>
+
+</FONT>
+character as the sole input. If set, the value is the number of
+consecutive
+<FONT SIZE=-1><B>EOF</B>
+
+</FONT>
+characters which must be
+typed as the first characters on an input line before
+<B>bash</B>
+
+exits. If the variable exists but does not have a numeric value, or
+has no value, the default value is 10. If it does not exist,
+<FONT SIZE=-1><B>EOF</B>
+
+</FONT>
+signifies the end of input to the shell.
+<DT><B>INPUTRC</B>
+
+<DD>
+The filename for the
+<B>readline</B>
+
+startup file, overriding the default of
+
+<A HREF="file:~/.inputrc"><I>~/.inputrc</I></A>
+
+(see
+<FONT SIZE=-1><B>READLINE</B>
+
+</FONT>
+below).
+<DT><B>INSIDE_EMACS</B>
+
+<DD>
+If this variable appears in the environment when the shell starts,
+<B>bash</B> assumes that it is running inside an Emacs shell buffer
+and may disable line editing, depending on the value of <B>TERM</B>.
+<DT><B>LANG</B>
+
+<DD>
+Used to determine the locale category for any category not specifically
+selected with a variable starting with <B>LC_</B>.
+<DT><B>LC_ALL</B>
+
+<DD>
+This variable overrides the value of
+<FONT SIZE=-1><B>LANG</B>
+
+</FONT>
+and any other
+<B>LC_</B> variable specifying a locale category.
+<DT><B>LC_COLLATE</B>
+
+<DD>
+This variable determines the collation order used when sorting the
+results of pathname expansion, and determines the behavior of range
+expressions, equivalence classes, and collating sequences within
+pathname expansion and pattern matching.
+<DT><B>LC_CTYPE</B>
+
+<DD>
+This variable determines the interpretation of characters and the
+behavior of character classes within pathname expansion and pattern
+matching.
+<DT><B>LC_MESSAGES</B>
+
+<DD>
+This variable determines the locale used to translate double-quoted
+strings preceded by a <B>$</B>.
+<DT><B>LC_NUMERIC</B>
+
+<DD>
+This variable determines the locale category used for number formatting.
+<DT><B>LC_TIME</B>
+
+<DD>
+This variable determines the locale category used for data and time
+formatting.
+<DT><B>LINES</B>
+
+<DD>
+Used by the <B>select</B> compound command to determine the column length
+for printing selection lists.
+Automatically set if the
+<B>checkwinsize</B>
+
+option is enabled or in an interactive shell upon receipt of a
+<FONT SIZE=-1><B>SIGWINCH</B>.
+
+</FONT>
+<DT><B>MAIL</B>
+
+<DD>
+If this parameter is set to a file or directory name and the
+<FONT SIZE=-1><B>MAILPATH</B>
+
+</FONT>
+variable is not set,
+<B>bash</B>
+
+informs the user of the arrival of mail in the specified file or
+Maildir-format directory.
+<DT><B>MAILCHECK</B>
+
+<DD>
+Specifies how
+often (in seconds)
+<B>bash</B>
+
+checks for mail. 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.
+<DT><B>MAILPATH</B>
+
+<DD>
+A colon-separated list of filenames to be checked for mail.
+The message to be printed when mail arrives in a particular file
+may be specified by separating the filename from the message with a `?'.
+When used in the text of the message, <B>$_</B> expands to the name of
+the current mailfile.
+Example:
+<DL COMPACT><DT><DD>
+<P>
+
+<B>MAILPATH</B>=aq/var/mail/bfox?&quot;You have mail&quot;:~/shell-mail?&quot;$_ has mail!&quot;aq
+<P>
+
+<B>Bash</B>
+
+can be configured to supply
+a default value for this variable (there is no value by default),
+but the location of the user
+mail files that it uses is system dependent (e.g., /var/mail/<B>$USER</B>).
+</DL>
+
+<DT><B>OPTERR</B>
+
+<DD>
+If set to the value 1,
+<B>bash</B>
+
+displays error messages generated by the
+<B>getopts</B>
+
+builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<FONT SIZE=-1><B>OPTERR</B>
+
+</FONT>
+is initialized to 1 each time the shell is invoked or a shell
+script is executed.
+<DT><B>PATH</B>
+
+<DD>
+The search path for commands. It
+is a colon-separated list of directories in which
+the shell looks for commands (see
+<FONT SIZE=-1><B>COMMAND EXECUTION</B>
+
+</FONT>
+below).
+A zero-length (null) directory name in the value of
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+indicates the current directory.
+A null directory name may appear as two adjacent colons, or as an initial
+or trailing colon.
+The default path is system-dependent,
+and is set by the administrator who installs
+<B>bash</B>.
+
+A common value is
+
+<TT>/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin</TT>.
+
+
+<DT><B>POSIXLY_CORRECT</B>
+
+<DD>
+If this variable is in the environment when <B>bash</B> starts, the shell
+enters <I>posix mode</I> before reading the startup files, as if the
+<B>--posix</B>
+
+invocation option had been supplied. If it is set while the shell is
+running, <B>bash</B> enables <I>posix mode</I>, as if the command
+<TT>set -o posix</TT>
+
+had been executed.
+When the shell enters <I>posix mode</I>, it sets this variable if it was
+not already set.
+<DT><B>PROMPT_COMMAND</B>
+
+<DD>
+If set, the value is executed as a command prior to issuing each primary
+prompt.
+<DT><B>PROMPT_DIRTRIM</B>
+
+<DD>
+If set to a number greater than zero, the value is used as the number of
+trailing directory components to retain when expanding the <B>\w</B> and
+<B>\W</B> prompt string escapes (see
+<FONT SIZE=-1><B>PROMPTING</B>
+
+</FONT>
+below). Characters removed are replaced with an ellipsis.
+<DT><B>PS0</B>
+
+<DD>
+The value of this parameter is expanded (see
+<FONT SIZE=-1><B>PROMPTING</B>
+
+</FONT>
+below) and displayed by interactive shells after reading a command
+and before the command is executed.
+<DT><B>PS1</B>
+
+<DD>
+The value of this parameter is expanded (see
+<FONT SIZE=-1><B>PROMPTING</B>
+
+</FONT>
+below) and used as the primary prompt string. The default value is
+``<B>\s-\v\$ </B>''.
+<DT><B>PS2</B>
+
+<DD>
+The value of this parameter is expanded as with
+<FONT SIZE=-1><B>PS1</B>
+
+</FONT>
+and used as the secondary prompt string. The default is
+``<B>&gt; </B>''.
+<DT><B>PS3</B>
+
+<DD>
+The value of this parameter is used as the prompt for the
+<B>select</B>
+
+command (see
+<FONT SIZE=-1><B>SHELL GRAMMAR</B>
+
+</FONT>
+above).
+<DT><B>PS4</B>
+
+<DD>
+The value of this parameter is expanded as with
+<FONT SIZE=-1><B>PS1</B>
+
+</FONT>
+and the value is printed before each command
+<B>bash</B>
+
+displays during an execution trace. The first character of
+the expanded value of
+<FONT SIZE=-1><B>PS4</B>
+
+</FONT>
+is replicated multiple times, as necessary, to indicate multiple
+levels of indirection. The default is ``<B>+ </B>''.
+<DT><B>SHELL</B>
+
+<DD>
+The full pathname to the shell is kept in this environment variable.
+If it is not set when the shell starts,
+<B>bash</B>
+
+assigns to it the full pathname of the current user's login shell.
+<DT><B>TIMEFORMAT</B>
+
+<DD>
+The value of this parameter is used as a format string specifying
+how the timing information for pipelines prefixed with the
+<B>time</B>
+
+reserved word should be displayed.
+The <B>%</B> 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><DD>
+
+<DL COMPACT>
+<DT><B>%%</B>
+
+<DD>
+A literal <B>%</B>.
+<DT><B>%[</B><I>p</I>][l]R
+
+<DD>
+The elapsed time in seconds.
+<DT><B>%[</B><I>p</I>][l]U
+
+<DD>
+The number of CPU seconds spent in user mode.
+<DT><B>%[</B><I>p</I>][l]S
+
+<DD>
+The number of CPU seconds spent in system mode.
+<DT><B>%P</B>
+
+<DD>
+The CPU percentage, computed as (%U + %S) / %R.
+
+</DL></DL>
+
+<DT><DD>
+The optional <I>p</I> is a digit specifying the <I>precision</I>,
+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 <I>p</I> greater than 3 are changed to 3.
+If <I>p</I> is not specified, the value 3 is used.
+<DT><DD>
+The optional <B>l</B> specifies a longer format, including
+minutes, of the form <I>MM</I>m<I>SS</I>.<I>FF</I>s.
+The value of <I>p</I> determines whether or not the fraction is
+included.
+<DT><DD>
+If this variable is not set, <B>bash</B> acts as if it had the
+value <B>$aq\nreal\t%3lR\nuser\t%3lU\nsys\t%3lSaq</B>.
+If the value is null, no timing information is displayed.
+A trailing newline is added when the format string is displayed.
+
+<DT><B>TMOUT</B>
+
+<DD>
+If set to a value greater than zero,
+<FONT SIZE=-1><B>TMOUT</B>
+
+</FONT>
+is treated as the
+default timeout for the <B>read</B> builtin.
+The <B>select</B> command terminates if input does not arrive
+after
+<FONT SIZE=-1><B>TMOUT</B>
+
+</FONT>
+seconds when input is coming from a terminal.
+In an interactive shell, the value is interpreted as the
+number of seconds to wait for a line of input after issuing the
+primary prompt.
+<B>Bash</B>
+
+terminates after waiting for that number of seconds if a complete
+line of input does not arrive.
+<DT><B>TMPDIR</B>
+
+<DD>
+If set, <B>bash</B> uses its value as the name of a directory in which
+<B>bash</B> creates temporary files for the shell's use.
+<DT><B>auto_resume</B>
+
+<DD>
+This variable controls how the shell interacts with the user and
+job control. If this variable is set, single word simple
+commands without redirections are treated as candidates for resumption
+of an existing stopped job. There is no ambiguity allowed; if there is
+more than one job beginning with the string typed, the job most recently
+accessed is selected. The
+<I>name</I>
+
+of a stopped job, in this context, is the command line used to
+start it.
+If set to the value
+<I>exact</I>,
+
+the string supplied must match the name of a stopped job exactly;
+if set to
+<I>substring</I>,
+
+the string supplied needs to match a substring of the name of a
+stopped job. The
+<I>substring</I>
+
+value provides functionality analogous to the
+<B>%?</B>
+
+job identifier (see
+<FONT SIZE=-1><B>JOB CONTROL</B>
+
+</FONT>
+below). 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 <B>%</B><I>string</I> job identifier.
+<DT><B>histchars</B>
+
+<DD>
+The two or three characters which control history expansion
+and tokenization (see
+<FONT SIZE=-1><B>HISTORY EXPANSION</B>
+
+</FONT>
+below). The first character is the <I>history expansion</I> character,
+the character which signals the start of a history
+expansion, normally `<B>!</B>'.
+The second character is the <I>quick substitution</I>
+character, which is used as shorthand for re-running the previous
+command entered, substituting one string for another in the command.
+The default is `<B>^</B>'.
+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, normally `<B>#</B>'. 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.
+
+</DL>
+<A NAME="lbAX">&nbsp;</A>
+<H4>Arrays</H4>
+
+<B>Bash</B>
+
+provides one-dimensional indexed and associative array variables.
+Any variable may be used as an indexed array; the
+<B>declare</B>
+
+builtin will explicitly declare an array.
+There is no maximum
+limit on the size of an array, nor any requirement that members
+be indexed or assigned contiguously.
+Indexed arrays are referenced using integers (including arithmetic
+expressions) and are zero-based; associative arrays are referenced
+using arbitrary strings.
+Unless otherwise noted, indexed array indices must be non-negative integers.
+<P>
+
+An indexed array is created automatically if any variable is assigned to
+using the syntax <I>name</I>[<I>subscript</I>]=<I>value</I>. The
+<I>subscript</I>
+
+is treated as an arithmetic expression that must evaluate to a number.
+To explicitly declare an indexed array, use
+<B>declare -a </B><I>name</I>
+
+(see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<B>declare -a </B><I>name</I>[<I>subscript</I>]
+
+is also accepted; the <I>subscript</I> is ignored.
+<P>
+
+Associative arrays are created using
+<B>declare -A </B><I>name</I>.
+
+<P>
+
+Attributes may be
+specified for an array variable using the
+<B>declare</B>
+
+and
+<B>readonly</B>
+
+builtins. Each attribute applies to all members of an array.
+<P>
+
+Arrays are assigned to using compound assignments of the form
+<I>name</I>=<B>(</B>value<I>1</I> ... value<I>n</I><B>)</B>, where each
+<I>value</I> is of the form [<I>subscript</I>]=<I>string</I>.
+Indexed array assignments do not require anything but <I>string</I>.
+When assigning to indexed arrays, if the optional brackets and subscript
+are 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.
+<P>
+
+When assigning to an associative array, the subscript is required.
+<P>
+
+This syntax is also accepted by the
+<B>declare</B>
+
+builtin. Individual array elements may be assigned to using the
+<I>name</I>[<I>subscript</I>]=<I>value</I> syntax introduced above.
+When assigning to an indexed array, if
+<I>name</I>
+
+is subscripted by a negative number, that number is
+interpreted as relative to one greater than the maximum index of
+<I>name</I>, so negative indices count back from the end of the
+array, and an index of -1 references the last element.
+<P>
+
+Any element of an array may be referenced using
+${<I>name</I>[<I>subscript</I>]}. The braces are required to avoid
+conflicts with pathname expansion. If
+<I>subscript</I> is <B>@</B> or <B>*</B>, the word expands to
+all members of <I>name</I>. These subscripts differ only when the
+word appears within double quotes. If the word is double-quoted,
+${<I>name</I>[*]} expands to a single
+word with the value of each array member separated by the first
+character of the
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+special variable, and ${<I>name</I>[@]} expands each element of
+<I>name</I> to a separate word. When there are no array members,
+${<I>name</I>[@]} 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 <B>*</B> and <B>@</B> (see
+<B>Special Parameters</B>
+
+above). ${#<I>name</I>[<I>subscript</I>]} expands to the length of
+${<I>name</I>[<I>subscript</I>]}. If <I>subscript</I> is <B>*</B> or
+<B>@</B>, the expansion is the number of elements in the array.
+If the
+<I>subscript</I>
+
+used to reference an element of an indexed array
+evaluates to a number less than zero, it is
+interpreted as relative to one greater than the maximum index of the array,
+so negative indices count back from the end of the
+array, and an index of -1 references the last element.
+<P>
+
+Referencing an array variable without a subscript is equivalent to
+referencing the array with a subscript of 0.
+Any reference to a variable using a valid subscript is legal, and
+<B>bash</B>
+
+will create an array if necessary.
+<P>
+
+An array variable is considered set if a subscript has been assigned a
+value. The null string is a valid value.
+<P>
+
+It is possible to obtain the keys (indices) of an array as well as the values.
+${<B>!</B><I>name</I>[<I>@</I>]} and ${<B>!</B><I>name</I>[<I>*</I>]}
+expand to the indices assigned in array variable <I>name</I>.
+The treatment when in double quotes is similar to the expansion of the
+special parameters <I>@</I> and <I>*</I> within double quotes.
+<P>
+
+The
+<B>unset</B>
+
+builtin is used to destroy arrays. <B>unset</B> <I>name</I>[<I>subscript</I>]
+destroys the array element at index <I>subscript</I>,
+for both indexed and associative arrays.
+Negative subscripts to indexed arrays are interpreted as described above.
+Unsetting the last element of an array variable does not unset the variable.
+<B>unset</B> <I>name</I>, where <I>name</I> is an array, or
+<B>unset</B> <I>name</I>[<I>subscript</I>], where
+<I>subscript</I> is <B>*</B> or <B>@</B>, removes the entire array.
+<P>
+
+When using a variable name with a subscript as an argument to a command,
+such as with <B>unset</B>, without using the word expansion syntax
+described above, the argument is subject to pathname expansion.
+If pathname expansion is not desired, the argument should be quoted.
+<P>
+
+The
+<B>declare</B>,
+
+<B>local</B>,
+
+and
+<B>readonly</B>
+
+builtins each accept a
+<B>-a</B>
+
+option to specify an indexed array and a
+<B>-A</B>
+
+option to specify an associative array.
+If both options are supplied,
+<B>-A</B>
+
+takes precedence.
+The
+<B>read</B>
+
+builtin accepts a
+<B>-a</B>
+
+option to assign a list of words read from the standard input
+to an array. The
+<B>set</B>
+
+and
+<B>declare</B>
+
+builtins display array values in a way that allows them to be
+reused as assignments.
+<A NAME="lbAY">&nbsp;</A>
+<H3>EXPANSION</H3>
+
+Expansion is performed on the command line after it has been split into
+words. There are seven kinds of expansion performed:
+<I>brace expansion</I>,
+
+<I>tilde expansion</I>,
+
+<I>parameter and variable expansion</I>,
+
+<I>command substitution</I>,
+
+<I>arithmetic expansion</I>,
+
+<I>word splitting</I>,
+
+and
+<I>pathname expansion</I>.
+
+<P>
+
+The order of expansions is:
+brace expansion;
+tilde expansion, parameter and variable expansion, arithmetic expansion,
+and command substitution (done in a left-to-right fashion);
+word splitting;
+and pathname expansion.
+<P>
+
+On systems that can support it, there is an additional expansion
+available: <I>process substitution</I>.
+This is performed at the
+same time as tilde, parameter, variable, and arithmetic expansion and
+command substitution.
+<P>
+
+After these expansions are performed, quote characters present in the
+original word are removed unless they have been quoted themselves
+(<I>quote removal</I>).
+<P>
+
+Only brace expansion, word splitting, and pathname expansion
+can increase 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
+&quot;<B>$@</B>&quot; and &quot;<B>${</B><I>name</I><B>[@]}</B>&quot;,
+and, in most cases, <B>$*</B> and <B>${</B><I>name</I><B>[*]}</B>
+as explained above (see
+<FONT SIZE=-1><B>PARAMETERS</B>).
+
+</FONT>
+<A NAME="lbAZ">&nbsp;</A>
+<H4>Brace Expansion</H4>
+
+<P>
+
+<I>Brace expansion</I>
+
+is a mechanism by which arbitrary strings
+may be generated. This mechanism is similar to
+<I>pathname expansion</I>, but the filenames generated
+need not exist. Patterns to be brace expanded take
+the form of an optional
+<I>preamble</I>,
+
+followed by either a series of comma-separated strings or
+a sequence expression between a pair of braces, followed by
+an optional
+<I>postscript</I>.
+
+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>
+
+Brace expansions may be nested. The results of each expanded
+string are not sorted; left to right order is preserved.
+For example, a<B>{</B>d,c,b<B>}</B>e expands into `ade ace abe'.
+<P>
+
+A sequence expression takes the form
+<B>{</B><I>x</I><B>..</B><I>y</I><B>[..</B><I>incr</I><B>]}</B>,
+where <I>x</I> and <I>y</I> are either integers or single characters,
+and <I>incr</I>, an optional increment, is an integer.
+When integers are supplied, the expression expands to each number between
+<I>x</I> and <I>y</I>, inclusive.
+Supplied integers may be prefixed with <I>0</I> to force each term to have the
+same width.
+When either <I>x</I> or y begins with a zero, the shell
+attempts to force all generated terms to contain the same number of digits,
+zero-padding where necessary.
+When characters are supplied, the expression expands to each character
+lexicographically between <I>x</I> and <I>y</I>, inclusive,
+using the default C locale.
+Note that both <I>x</I> and <I>y</I> must be of the same type.
+When the increment is supplied, it is used as the difference between
+each term. The default increment is 1 or -1 as appropriate.
+<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.
+<B>Bash</B>
+
+does not apply any syntactic interpretation to the context of the
+expansion or the text between the braces.
+<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.
+A <B>{</B> or <B>,</B> may be quoted with a backslash to prevent its
+being considered part of a brace expression.
+To avoid conflicts with parameter expansion, the string <B>${</B>
+is not considered eligible for brace expansion, and inhibits brace
+expansion until the closing <B>}</B>.
+<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:
+<DL COMPACT><DT><DD>
+<P>
+
+mkdir /usr/local/src/bash/{old,new,dist,bugs}
+</DL>
+
+or
+<DL COMPACT><DT><DD>
+chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+</DL>
+
+<P>
+
+Brace expansion introduces a slight incompatibility with
+historical versions of
+<B>sh</B>.
+
+<B>sh</B>
+
+does not treat opening or closing braces specially when they
+appear as part of a word, and preserves them in the output.
+<B>Bash</B>
+
+removes braces from words as a consequence of brace
+expansion. For example, a word entered to
+<B>sh</B>
+
+as <I>file{1,2}</I>
+appears identically in the output. The same word is
+output as
+<I>file1 file2</I>
+
+after expansion by
+<B>bash</B>.
+
+If strict compatibility with
+<B>sh</B>
+
+is desired, start
+<B>bash</B>
+
+with the
+<B>+B</B>
+
+option or disable brace expansion with the
+<B>+B</B>
+
+option to the
+<B>set</B>
+
+command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<A NAME="lbBA">&nbsp;</A>
+<H4>Tilde Expansion</H4>
+
+<P>
+
+If a word begins with an unquoted tilde character (`<B>~</B>'), all of
+the characters preceding the first unquoted slash (or all characters,
+if there is no unquoted slash) are considered a <I>tilde-prefix</I>.
+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 <I>login name</I>.
+If this login name is the null string, the tilde is replaced with the
+value of the shell parameter
+<FONT SIZE=-1><B>HOME</B>.
+
+</FONT>
+If
+<FONT SIZE=-1><B>HOME</B>
+
+</FONT>
+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>
+
+If the tilde-prefix is a `~+', the value of the shell variable
+<FONT SIZE=-1><B>PWD</B>
+
+</FONT>
+replaces the tilde-prefix.
+If the tilde-prefix is a `~-', the value of the shell variable
+<FONT SIZE=-1><B>OLDPWD</B>,
+
+</FONT>
+if it is set, is substituted.
+If the characters following the tilde in the tilde-prefix consist
+of a number <I>N</I>, optionally prefixed
+by a `+' or a `-', the tilde-prefix is replaced with the corresponding
+element from the directory stack, as it would be displayed by the
+<B>dirs</B>
+
+builtin invoked with the tilde-prefix as an argument.
+If the characters following the tilde in the tilde-prefix consist of a
+number without a leading `+' or `-', `+' is assumed.
+<P>
+
+If the login name is invalid, or the tilde expansion fails, the word
+is unchanged.
+<P>
+
+Each variable assignment is checked for unquoted tilde-prefixes immediately
+following a
+<B>:</B>
+
+or the first
+<B>=</B>.
+
+In these cases, tilde expansion is also performed.
+Consequently, one may use filenames with tildes in assignments to
+<FONT SIZE=-1><B>PATH</B>,
+
+</FONT>
+<FONT SIZE=-1><B>MAILPATH</B>,
+
+</FONT>
+and
+<FONT SIZE=-1><B>CDPATH</B>,
+
+</FONT>
+and the shell assigns the expanded value.
+<P>
+
+Bash also performs tilde expansion on words satisfying the conditions of
+variable assignments (as described above under
+<FONT SIZE=-1><B>PARAMETERS</B>)
+
+</FONT>
+when they appear as arguments to simple commands.
+Bash does not do this, except for the <I>declaration</I> commands listed
+above, when in <I>posix mode</I>.
+<A NAME="lbBB">&nbsp;</A>
+<H4>Parameter Expansion</H4>
+
+<P>
+
+The `<B>$</B>' 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>
+
+When braces are used, the matching ending brace is the first `<B>}</B>'
+not escaped by a backslash or within a quoted string, and not within an
+embedded arithmetic expansion, command substitution, or parameter
+expansion.
+<P>
+
+
+<DL COMPACT>
+<DT>${<I>parameter</I>}<DD>
+The value of <I>parameter</I> is substituted. The braces are required
+when
+<I>parameter</I>
+
+is a positional parameter with more than one digit,
+or when
+<I>parameter</I>
+
+is followed by a character which is not to be
+interpreted as part of its name.
+The <I>parameter</I> is a shell parameter as described above
+<B>PARAMETERS</B>) or an array reference (<B>Arrays</B>).
+
+</DL>
+<P>
+
+If the first character of <I>parameter</I> is an exclamation point (<B>!</B>),
+and <I>parameter</I> is not a <I>nameref</I>,
+it introduces a level of indirection.
+<B>Bash</B> uses the value formed by expanding the rest of
+<I>parameter</I> as the new <I>parameter</I>; this is then
+expanded and that value is used in the rest of the expansion, rather
+than the expansion of the original <I>parameter</I>.
+This is known as <I>indirect expansion</I>.
+The value is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+If <I>parameter</I> is a nameref, this expands to the name of the
+parameter referenced by <I>parameter</I> instead of performing the
+complete indirect expansion.
+The exceptions to this are the expansions of ${<B>!</B><I>prefix</I><B>*</B>} and
+${<B>!</B><I>name</I>[<I>@</I>]} described below.
+The exclamation point must immediately follow the left brace in order to
+introduce indirection.
+<P>
+
+In each of the cases below, <I>word</I> is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+<P>
+
+When not performing substring expansion, using the forms documented below
+(e.g., <B>:-</B>),
+<B>bash</B> tests for a parameter that is unset or null. Omitting the colon
+results in a test only for a parameter that is unset.
+<P>
+
+
+<DL COMPACT>
+<DT>${<I>parameter</I><B>:-</B><I>word</I>}<DD>
+<B>Use Default Values</B>. If
+<I>parameter</I>
+
+is unset or null, the expansion of
+<I>word</I>
+
+is substituted. Otherwise, the value of
+<I>parameter</I>
+
+is substituted.
+<DT>${<I>parameter</I><B>:=</B><I>word</I>}<DD>
+<B>Assign Default Values</B>.
+If
+<I>parameter</I>
+
+is unset or null, the expansion of
+<I>word</I>
+
+is assigned to
+<I>parameter</I>.
+
+The value of
+<I>parameter</I>
+
+is then substituted. Positional parameters and special parameters may
+not be assigned to in this way.
+<DT>${<I>parameter</I><B>:?</B><I>word</I>}<DD>
+<B>Display Error if Null or Unset</B>.
+If
+<I>parameter</I>
+
+is null or unset, the expansion of <I>word</I> (or a message to that effect
+if
+<I>word</I>
+
+is not present) is written to the standard error and the shell, if it
+is not interactive, exits. Otherwise, the value of <I>parameter</I> is
+substituted.
+<DT>${<I>parameter</I><B>:+</B><I>word</I>}<DD>
+<B>Use Alternate Value</B>.
+If
+<I>parameter</I>
+
+is null or unset, nothing is substituted, otherwise the expansion of
+<I>word</I>
+
+is substituted.
+<DT>${<I>parameter</I><B>:</B><I>offset</I>}<DD>
+
+<DT>${<I>parameter</I><B>:</B><I>offset</I><B>:</B><I>length</I>}<DD>
+
+<B>Substring Expansion</B>.
+Expands to up to <I>length</I> characters of the value of <I>parameter</I>
+starting at the character specified by <I>offset</I>.
+If <I>parameter</I> is <B>@</B>, an indexed array subscripted by
+<B>@</B> or <B>*</B>, or an associative array name, the results differ as
+described below.
+If <I>length</I> is omitted, expands to the substring of the value of
+<I>parameter</I> starting at the character specified by <I>offset</I>
+and extending to the end of the value.
+<I>length</I> and <I>offset</I> are arithmetic expressions (see
+<FONT SIZE=-1><B>ARITHMETIC EVALUATION</B>
+
+</FONT>
+below).
+<P>
+If <I>offset</I> evaluates to a number less than zero, the value
+is used as an offset in characters
+from the end of the value of <I>parameter</I>.
+If <I>length</I> evaluates to a number less than zero,
+it is interpreted as an offset in characters
+from the end of the value of <I>parameter</I> rather than
+a number of characters, and the expansion is the characters between
+<I>offset</I> and that result.
+Note that a negative offset must be separated from the colon by at least
+one space to avoid being confused with the <B>:-</B> expansion.
+<P>
+If <I>parameter</I> is <B>@</B>, the result is <I>length</I> positional
+parameters beginning at <I>offset</I>.
+A negative <I>offset</I> is taken relative to one greater than the greatest
+positional parameter, so an offset of -1 evaluates to the last positional
+parameter.
+It is an expansion error if <I>length</I> evaluates to a number less than
+zero.
+<P>
+If <I>parameter</I> is an indexed array name subscripted by @ or *,
+the result is the <I>length</I>
+members of the array beginning with ${<I>parameter</I>[<I>offset</I>]}.
+A negative <I>offset</I> is taken relative to one greater than the maximum
+index of the specified array.
+It is an expansion error if <I>length</I> evaluates to a number less than
+zero.
+<P>
+Substring expansion applied to an associative array produces undefined
+results.
+<P>
+Substring indexing is zero-based unless the positional parameters
+are used, in which case the indexing starts at 1 by default.
+If <I>offset</I> is 0, and the positional parameters are used, <B>$0</B> is
+prefixed to the list.
+<DT>${<B>!</B><I>prefix</I><B>*</B>}<DD>
+
+<DT>${<B>!</B><I>prefix</I><B>@</B>}<DD>
+
+<B>Names matching prefix</B>.
+Expands to the names of variables whose names begin with <I>prefix</I>,
+separated by the first character of the
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+special variable.
+When <I>@</I> is used and the expansion appears within double quotes, each
+variable name expands to a separate word.
+<DT>${<B>!</B><I>name</I>[<I>@</I>]}<DD>
+
+<DT>${<B>!</B><I>name</I>[<I>*</I>]}<DD>
+
+<B>List of array keys</B>.
+If <I>name</I> is an array variable, expands to the list of array indices
+(keys) assigned in <I>name</I>.
+If <I>name</I> is not an array, expands to 0 if <I>name</I> is set and null
+otherwise.
+When <I>@</I> is used and the expansion appears within double quotes, each
+key expands to a separate word.
+<DT>${<B>#</B><I>parameter</I>}<DD>
+<B>Parameter length</B>.
+The length in characters of the value of <I>parameter</I> is substituted.
+If
+<I>parameter</I>
+
+is
+<B>*</B>
+
+or
+<B>@</B>,
+
+the value substituted is the number of positional parameters.
+If
+<I>parameter</I>
+
+is an array name subscripted by
+<B>*</B>
+
+or
+<B>@</B>,
+
+the value substituted is the number of elements in the array.
+If
+<I>parameter</I>
+
+is an indexed array name subscripted by a negative number, that number is
+interpreted as relative to one greater than the maximum index of
+<I>parameter</I>, so negative indices count back from the end of the
+array, and an index of -1 references the last element.
+<DT>${<I>parameter</I><B>#</B><I>word</I>}<DD>
+
+<DT>${<I>parameter</I><B>##</B><I>word</I>}<DD>
+
+<B>Remove matching prefix pattern</B>.
+The
+<I>word</I>
+
+is expanded to produce a pattern just as in pathname
+expansion, and matched against the expanded value of
+<I>parameter</I>
+
+using the rules described under
+<B>Pattern Matching</B>
+
+below.
+If the pattern matches the beginning of
+the value of
+<I>parameter</I>,
+
+then the result of the expansion is the expanded value of
+<I>parameter</I>
+
+with the shortest matching pattern (the ``<B>#</B>'' case) or the
+longest matching pattern (the ``<B>##</B>'' case) deleted.
+If
+<I>parameter</I>
+
+is
+<B>@</B>
+
+or
+<B>*</B>,
+
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+<I>parameter</I>
+
+is an array variable subscripted with
+<B>@</B>
+
+or
+<B>*</B>,
+
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+<DT>${<I>parameter</I><B>%</B><I>word</I>}<DD>
+
+<DT>${<I>parameter</I><B>%%</B><I>word</I>}<DD>
+
+<B>Remove matching suffix pattern</B>.
+The <I>word</I> is expanded to produce a pattern just as in
+pathname expansion, and matched against the expanded value of
+<I>parameter</I>
+
+using the rules described under
+<B>Pattern Matching</B>
+
+below.
+If the pattern matches a trailing portion of the expanded value of
+<I>parameter</I>,
+
+then the result of the expansion is the expanded value of
+<I>parameter</I>
+
+with the shortest matching pattern (the ``<B>%</B>'' case) or the
+longest matching pattern (the ``<B>%%</B>'' case) deleted.
+If
+<I>parameter</I>
+
+is
+<B>@</B>
+
+or
+<B>*</B>,
+
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+<I>parameter</I>
+
+is an array variable subscripted with
+<B>@</B>
+
+or
+<B>*</B>,
+
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+<DT>${<I>parameter</I><B>/</B><I>pattern</I><B>/</B><I>string</I>}<DD>
+<B>Pattern substitution</B>.
+The <I>pattern</I> is expanded to produce a pattern just as in
+pathname expansion,
+<I>Parameter</I> is expanded and the longest match of <I>pattern</I>
+against its value is replaced with <I>string</I>.
+The match is performed using the rules described under
+<B>Pattern Matching</B>
+
+below.
+If <I>pattern</I> begins with <B>/</B>, all matches of <I>pattern</I> are
+replaced with <I>string</I>. Normally only the first match is replaced.
+If <I>pattern</I> begins with <B>#</B>, it must match at the beginning
+of the expanded value of <I>parameter</I>.
+If <I>pattern</I> begins with <B>%</B>, it must match at the end
+of the expanded value of <I>parameter</I>.
+If <I>string</I> is null, matches of <I>pattern</I> are deleted
+and the <B>/</B> following <I>pattern</I> may be omitted.
+If the
+<B>nocasematch</B>
+
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+If
+<I>parameter</I>
+
+is
+<B>@</B>
+
+or
+<B>*</B>,
+
+the substitution operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+<I>parameter</I>
+
+is an array variable subscripted with
+<B>@</B>
+
+or
+<B>*</B>,
+
+the substitution operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+<DT>${<I>parameter</I><B>^</B><I>pattern</I>}<DD>
+
+<DT>${<I>parameter</I><B>^^</B><I>pattern</I>}<DD>
+<DT>${<I>parameter</I><B>,</B><I>pattern</I>}<DD>
+<DT>${<I>parameter</I><B>,,</B><I>pattern</I>}<DD>
+
+<B>Case modification</B>.
+This expansion modifies the case of alphabetic characters in <I>parameter</I>.
+The <I>pattern</I> is expanded to produce a pattern just as in
+pathname expansion.
+Each character in the expanded value of <I>parameter</I> is tested against
+<I>pattern</I>, and, if it matches the pattern, its case is converted.
+The pattern should not attempt to match more than one character.
+The <B>^</B> operator converts lowercase letters matching <I>pattern</I>
+to uppercase; the <B>,</B> operator converts matching uppercase letters
+to lowercase.
+The <B>^^</B> and <B>,,</B> expansions convert each matched character in the
+expanded value; the <B>^</B> and <B>,</B> expansions match and convert only
+the first character in the expanded value.
+If <I>pattern</I> is omitted, it is treated like a <B>?</B>, which matches
+every character.
+If
+<I>parameter</I>
+
+is
+<B>@</B>
+
+or
+<B>*</B>,
+
+the case modification operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+<I>parameter</I>
+
+is an array variable subscripted with
+<B>@</B>
+
+or
+<B>*</B>,
+
+the case modification operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+<DT>${<I>parameter</I><B>@</B><I>operator</I>}<DD>
+<B>Parameter transformation</B>.
+The expansion is either a transformation of the value of <I>parameter</I>
+or information about <I>parameter</I> itself, depending on the value of
+<I>operator</I>. Each <I>operator</I> is a single letter:
+<P>
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>Q</B>
+
+<DD>
+The expansion is a string that is the value of <I>parameter</I> quoted in a
+format that can be reused as input.
+<DT><B>E</B>
+
+<DD>
+The expansion is a string that is the value of <I>parameter</I> with backslash
+escape sequences expanded as with the <B>$'...'</B> quoting mechanism.
+<DT><B>P</B>
+
+<DD>
+The expansion is a string that is the result of expanding the value of
+<I>parameter</I> as if it were a prompt string (see <B>PROMPTING</B> below).
+<DT><B>A</B>
+
+<DD>
+The expansion is a string in the form of
+an assignment statement or <B>declare</B> command that, if
+evaluated, will recreate <I>parameter</I> with its attributes and value.
+<DT><B>a</B>
+
+<DD>
+The expansion is a string consisting of flag values representing
+<I>parameter</I>'s attributes.
+
+</DL>
+<P>
+
+If
+<I>parameter</I>
+
+is
+<B>@</B>
+
+or
+<B>*</B>,
+
+the operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+<I>parameter</I>
+
+is an array variable subscripted with
+<B>@</B>
+
+or
+<B>*</B>,
+
+the operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+<P>
+The result of the expansion is subject to word splitting and pathname
+expansion as described below.
+</DL>
+
+</DL>
+<A NAME="lbBC">&nbsp;</A>
+<H4>Command Substitution</H4>
+
+<P>
+
+<I>Command substitution</I> allows the output of a command to replace
+the command name. There are two forms:
+<DL COMPACT><DT><DD>
+<P>
+
+<B>$(</B><I>command</I><B>)</B>
+</DL>
+
+or
+<DL COMPACT><DT><DD>
+<B>`</B><I>command</I><B>`</B>
+</DL>
+
+<P>
+
+<B>Bash</B>
+
+performs the expansion by executing <I>command</I> in a subshell environment
+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 <B>$(cat </B><I>file</I>) can be replaced by
+the equivalent but faster <B>$(&lt; </B><I>file</I>).
+<P>
+
+When the old-style backquote form of substitution is used,
+backslash retains its literal meaning except when followed by
+<B>$</B>,
+
+<B>`</B>,
+
+or
+<B>\</B>.
+
+The first backquote not preceded by a backslash terminates the
+command substitution.
+When using the $(<I>command</I>) form, all characters between the
+parentheses make up the command; none are treated specially.
+<P>
+
+Command substitutions may be nested. To nest when using the backquoted form,
+escape the inner backquotes with backslashes.
+<P>
+
+If the substitution appears within double quotes, word splitting and
+pathname expansion are not performed on the results.
+<A NAME="lbBD">&nbsp;</A>
+<H4>Arithmetic Expansion</H4>
+
+<P>
+
+Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result. The format for arithmetic expansion is:
+<DL COMPACT><DT><DD>
+<P>
+
+<B>$((</B><I>expression</I><B>))</B>
+</DL>
+
+<P>
+
+The
+<I>expression</I>
+
+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 and variable expansion,
+command substitution, and quote removal.
+The result is treated as the arithmetic expression to be evaluated.
+Arithmetic expansions may be nested.
+<P>
+
+The evaluation is performed according to the rules listed below under
+<FONT SIZE=-1><B>ARITHMETIC EVALUATION</B>.
+
+</FONT>
+If
+<I>expression</I>
+
+is invalid,
+<B>bash</B>
+
+prints a message indicating failure and no substitution occurs.
+<A NAME="lbBE">&nbsp;</A>
+<H4>Process Substitution</H4>
+
+<P>
+
+<I>Process substitution</I> allows a process's input or output to be
+referred to using a filename.
+It takes the form of
+<B>&lt;(</B><I>list</I><B>)</B>
+or
+<B>&gt;(</B><I>list</I><B>)</B>.
+The process <I>list</I> is run asynchronously, and its input or output
+appears as a filename.
+This filename is
+passed as an argument to the current command as the result of the
+expansion.
+If the <B>&gt;(</B><I>list</I><B>)</B> form is used, writing to
+the file will provide input for <I>list</I>. If the
+<B>&lt;(</B><I>list</I><B>)</B> form is used, the file passed as an
+argument should be read to obtain the output of <I>list</I>.
+Process substitution is supported on systems that support named
+pipes (<I>FIFOs</I>) or the <B>/dev/fd</B> method of naming open files.
+<P>
+
+When available, process substitution is performed
+simultaneously with parameter and variable expansion,
+command substitution,
+and arithmetic expansion.
+<A NAME="lbBF">&nbsp;</A>
+<H4>Word Splitting</H4>
+
+<P>
+
+The shell scans the results of
+parameter expansion,
+command substitution,
+and
+arithmetic expansion
+that did not occur within double quotes for
+<I>word splitting</I>.
+
+<P>
+
+The shell treats each character of
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+as a delimiter, and splits the results of the other
+expansions into words using these characters as field terminators.
+If
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+is unset, or its
+value is exactly
+<B>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</B>,
+
+the default, then
+sequences of
+<B>&lt;space&gt;</B>,
+
+<B>&lt;tab&gt;</B>,
+
+and
+<B>&lt;newline&gt;</B>
+
+at the beginning and end of the results of the previous
+expansions are ignored, and
+any sequence of
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+characters not at the beginning or end serves to delimit words.
+If
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+has a value other than the default, then sequences of
+the whitespace characters
+<B>space</B>,
+
+<B>tab</B>,
+
+and
+<B>newline</B>
+
+are ignored at the beginning and end of the
+word, as long as the whitespace character is in the
+value of
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+(an
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+whitespace character).
+Any character in
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+that is not
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+whitespace, along with any adjacent
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+whitespace characters, delimits a field.
+A sequence of
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+whitespace characters is also treated as a delimiter.
+If the value of
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+is null, no word splitting occurs.
+<P>
+
+Explicit null arguments (<B>&quot;&quot;</B> or <B>aqaq</B>) are retained
+and passed to commands as empty strings.
+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
+and passed to a command as an empty string.
+When a quoted null argument appears as part of a word whose expansion is
+non-null, the null argument is removed.
+That is, the word
+<TT>-daqaq</TT> becomes <TT>-d</TT> after word splitting and
+null argument removal.
+<P>
+
+Note that if no expansion occurs, no splitting
+is performed.
+<A NAME="lbBG">&nbsp;</A>
+<H4>Pathname Expansion</H4>
+
+<P>
+
+After word splitting,
+unless the
+<B>-f</B>
+
+option has been set,
+<B>bash</B>
+
+scans each word for the characters
+<B>*</B>,
+
+<B>?</B>,
+
+and
+<B>[</B>.
+
+If one of these characters appears, then the word is
+regarded as a
+<I>pattern</I>,
+
+and replaced with an alphabetically sorted list of
+filenames matching the pattern
+(see
+<FONT SIZE=-1><B>Pattern Matching</B>
+
+</FONT>
+below).
+If no matching filenames are found,
+and the shell option
+<B>nullglob</B>
+
+is not enabled, the word is left unchanged.
+If the
+<B>nullglob</B>
+
+option is set, and no matches are found,
+the word is removed.
+If the
+<B>failglob</B>
+
+shell option is set, and no matches are found, an error message
+is printed and the command is not executed.
+If the shell option
+<B>nocaseglob</B>
+
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+When a pattern is used for pathname expansion,
+the character
+<B>``.''</B>
+
+at the start of a name or immediately following a slash
+must be matched explicitly, unless the shell option
+<B>dotglob</B>
+
+is set.
+The filenames
+<B>``.''</B>
+
+and
+<B>``..''</B>
+
+must always be matched explicitly, even if
+<B>dotglob</B>
+
+is set.
+In other cases, the
+<B>``.''</B>
+
+character is not treated specially.
+When matching a pathname, the slash character must always be
+matched explicitly by a slash in the pattern, but in other matching
+contexts it can be matched by a special pattern character as described
+below under
+<FONT SIZE=-1><B>Pattern Matching</B>.
+
+</FONT>
+See the description of
+<B>shopt</B>
+
+below under
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+for a description of the
+<B>nocaseglob</B>,
+
+<B>nullglob</B>,
+
+<B>failglob</B>,
+
+and
+<B>dotglob</B>
+
+shell options.
+<P>
+
+The
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+shell variable may be used to restrict the set of file names matching a
+<I>pattern</I>.
+
+If
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+is set, each matching file name that also matches one of the patterns in
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+is removed from the list of matches.
+If the <B>nocaseglob</B> option is set, the matching against the patterns in
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+is performed without regard to case.
+The filenames
+<B>``.''</B>
+
+and
+<B>``..''</B>
+
+are always ignored when
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+is set and not null. However, setting
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+to a non-null value has the effect of enabling the
+<B>dotglob</B>
+
+shell option, so all other filenames beginning with a
+<B>``.''</B>
+
+will match.
+To get the old behavior of ignoring filenames beginning with a
+<B>``.''</B>,
+
+make
+<B>``.*''</B>
+
+one of the patterns in
+<FONT SIZE=-1><B>GLOBIGNORE</B>.
+
+</FONT>
+The
+<B>dotglob</B>
+
+option is disabled when
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+is unset.
+The pattern matching honors the setting of the <B>extglob</B> shell
+option.
+<P>
+
+<B>Pattern Matching</B>
+<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>
+
+The special pattern characters have the following meanings:
+<P>
+
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT><B>*</B>
+
+<DD>
+Matches any string, including the null string.
+When the <B>globstar</B> shell option is enabled, and <B>*</B> is used in
+a pathname expansion context, two adjacent <B>*</B>s used as a single
+pattern will match all files and zero or more directories and
+subdirectories.
+If followed by a <B>/</B>, two adjacent <B>*</B>s will match only directories
+and subdirectories.
+<DT><B>?</B>
+
+<DD>
+Matches any single character.
+<DT><B>[...]</B>
+
+<DD>
+Matches any one of the enclosed characters. A pair of characters
+separated by a hyphen denotes a
+<I>range expression</I>;
+any character that falls between those two characters, inclusive,
+using the current locale's collating sequence and character set,
+is matched. If the first character following the
+<B>[</B>
+
+is a
+<B>!</B>
+
+or a
+<B>^</B>
+
+then any character not enclosed is matched.
+The sorting order of characters in range expressions is determined by
+the current locale and the values of the
+<FONT SIZE=-1><B>LC_COLLATE</B>
+
+</FONT>
+or
+<FONT SIZE=-1><B>LC_ALL</B>
+
+</FONT>
+shell variables, if set.
+To obtain the traditional interpretation of range expressions, where
+<B>[a-d]</B>
+
+is equivalent to
+<B>[abcd]</B>,
+
+set value of the
+<B>LC_ALL</B>
+
+shell variable to
+<B>C</B>,
+
+or enable the
+<B>globasciiranges</B>
+
+shell option.
+A
+<B>-</B>
+
+may be matched by including it as the first or last character
+in the set.
+A
+<B>]</B>
+
+may be matched by including it as the first character
+in the set.
+<BR>
+
+<P>
+
+
+Within
+<B>[</B>
+
+and
+<B>]</B>,
+
+<I>character classes</I> can be specified using the syntax
+<B>[:</B><I>class</I><B>:]</B>, where <I>class</I> is one of the
+following classes defined in the POSIX standard:
+</DL>
+<P>
+
+<DL COMPACT><DT><DD>
+<B>
+</B>
+
+alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
+<BR>
+
+A character class matches any character belonging to that class.
+The <B>word</B> character class matches letters, digits, and the character _.
+<BR>
+
+<P>
+
+
+Within
+<B>[</B>
+
+and
+<B>]</B>,
+
+an <I>equivalence class</I> can be specified using the syntax
+<B>[=</B><I>c</I><B>=]</B>, which matches all characters with the
+same collation weight (as defined by the current locale) as
+the character <I>c</I>.
+<BR>
+
+<P>
+
+
+Within
+<B>[</B>
+
+and
+<B>]</B>,
+
+the syntax <B>[.</B><I>symbol</I><B>.]</B> matches the collating symbol
+<I>symbol</I>.
+</DL>
+
+</DL>
+
+
+<P>
+
+If the <B>extglob</B> shell option is enabled using the <B>shopt</B>
+builtin, several extended pattern matching operators are recognized.
+In the following description, a <I>pattern-list</I> is a list of one
+or more patterns separated by a <B>|</B>.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+<P>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT><B>?(</B><I>pattern-list</I><B>)</B><DD>
+Matches zero or one occurrence of the given patterns
+<DT><B>*(</B><I>pattern-list</I><B>)</B><DD>
+Matches zero or more occurrences of the given patterns
+<DT><B>+(</B><I>pattern-list</I><B>)</B><DD>
+Matches one or more occurrences of the given patterns
+<DT><B>@(</B><I>pattern-list</I><B>)</B><DD>
+Matches one of the given patterns
+<DT><B>!(</B><I>pattern-list</I><B>)</B><DD>
+Matches anything except one of the given patterns
+</DL></DL>
+
+
+<P>
+
+Complicated extended pattern matching against long strings is slow,
+especially when the patterns contain alternations and the strings
+contain multiple matches.
+Using separate matches against shorter strings, or using arrays of
+strings instead of a single long string, may be faster.
+<A NAME="lbBH">&nbsp;</A>
+<H4>Quote Removal</H4>
+
+<P>
+
+After the preceding expansions, all unquoted occurrences of the
+characters
+<B>\</B>,
+
+<B>aq</B>,
+
+and <B>&quot;</B> that did not result from one of the above
+expansions are removed.
+<A NAME="lbBI">&nbsp;</A>
+<H3>REDIRECTION</H3>
+
+Before a command is executed, its input and output
+may be
+<I>redirected</I>
+
+using a special notation interpreted by the shell.
+Redirection allows commands' file handles to be
+duplicated, opened, closed,
+made to refer to different files,
+and can change the files the command reads from and writes to.
+Redirection may also be used to modify file handles in the
+current shell execution environment.
+The following redirection
+operators may precede or appear anywhere within a
+<I>simple command</I>
+
+or may follow a
+<I>command</I>.
+
+Redirections are processed in the order they appear, from
+left to right.
+<P>
+
+Each redirection that may be preceded by a file descriptor number
+may instead be preceded by a word of the form {<I>varname</I>}.
+In this case, for each redirection operator except
+&gt;&amp;- and &lt;&amp;-, the shell will allocate a file descriptor greater
+than or equal to 10 and assign it to <I>varname</I>.
+If &gt;&amp;- or &lt;&amp;- is preceded
+by {<I>varname</I>}, the value of <I>varname</I> defines the file
+descriptor to close.
+If {<I>varname</I>} is supplied, the redirection persists beyond
+the scope of the command, allowing the shell programmer to manage
+the file descriptor himself.
+<P>
+
+In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is
+<B>&lt;</B>,
+
+the redirection refers to the standard input (file descriptor
+0). If the first character of the redirection operator is
+<B>&gt;</B>,
+
+the redirection refers to the standard output (file descriptor
+1).
+<P>
+
+The word following the redirection operator in the following
+descriptions, unless otherwise noted, is subjected to
+brace expansion, tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, quote removal,
+pathname expansion, and word splitting.
+If it expands to more than one word,
+<B>bash</B>
+
+reports an error.
+<P>
+
+Note that the order of redirections is significant. For example,
+the command
+<DL COMPACT><DT><DD>
+<P>
+
+ls <B>&gt;</B> dirlist 2<B>&gt;&amp;</B>1
+</DL>
+
+<P>
+
+directs both standard output and standard error to the file
+<I>dirlist</I>,
+
+while the command
+<DL COMPACT><DT><DD>
+<P>
+
+ls 2<B>&gt;&amp;</B>1 <B>&gt;</B> dirlist
+</DL>
+
+<P>
+
+directs only the standard output to file
+<I>dirlist</I>,
+
+because the standard error was duplicated from the standard output
+before the standard output was redirected to
+<I>dirlist</I>.
+
+<P>
+
+<B>Bash</B> handles several filenames specially when they are used in
+redirections, as described in the following table.
+If the operating system on which <B>bash</B> is running provides these
+special files, bash will use them; otherwise it will emulate them
+internally with the behavior described below.
+<DL COMPACT><DT><DD>
+<P>
+
+
+<DL COMPACT>
+<DT><B>/dev/fd/</B><I>fd</I>
+
+<DD>
+If <I>fd</I> is a valid integer, file descriptor <I>fd</I> is duplicated.
+<DT><B>/dev/stdin</B>
+
+<DD>
+File descriptor 0 is duplicated.
+<DT><B>/dev/stdout</B>
+
+<DD>
+File descriptor 1 is duplicated.
+<DT><B>/dev/stderr</B>
+
+<DD>
+File descriptor 2 is duplicated.
+<DT><B>/dev/tcp/</B><I>host</I>/<I>port</I>
+
+<DD>
+If <I>host</I> is a valid hostname or Internet address, and <I>port</I>
+is an integer port number or service name, <B>bash</B> attempts to open
+the corresponding TCP socket.
+<DT><B>/dev/udp/</B><I>host</I>/<I>port</I>
+
+<DD>
+If <I>host</I> is a valid hostname or Internet address, and <I>port</I>
+is an integer port number or service name, <B>bash</B> attempts to open
+the corresponding UDP socket.
+
+</DL></DL>
+
+<P>
+
+A failure to open or create a file causes the redirection to fail.
+<P>
+
+Redirections using file descriptors greater than 9 should be used with
+care, as they may conflict with file descriptors the shell uses
+internally.
+<A NAME="lbBJ">&nbsp;</A>
+<H4>Redirecting Input</H4>
+
+<P>
+
+Redirection of input causes the file whose name results from
+the expansion of
+<I>word</I>
+
+to be opened for reading on file descriptor
+<I>n</I>,
+
+or the standard input (file descriptor 0) if
+<I>n</I>
+
+is not specified.
+<P>
+
+The general format for redirecting input is:
+<DL COMPACT><DT><DD>
+<P>
+
+[<I>n</I>]<B>&lt;</B><I>word</I>
+</DL>
+
+<A NAME="lbBK">&nbsp;</A>
+<H4>Redirecting Output</H4>
+
+<P>
+
+Redirection of output causes the file whose name results from
+the expansion of
+<I>word</I>
+
+to be opened for writing on file descriptor
+<I>n</I>,
+
+or the standard output (file descriptor 1) if
+<I>n</I>
+
+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:
+<DL COMPACT><DT><DD>
+<P>
+
+[<I>n</I>]<B>&gt;</B><I>word</I>
+</DL>
+
+<P>
+
+If the redirection operator is
+<B>&gt;</B>,
+
+and the
+<B>noclobber</B>
+
+option to the
+<B>set</B>
+
+builtin has been enabled, the redirection will fail if the file
+whose name results from the expansion of <I>word</I> exists and is
+a regular file.
+If the redirection operator is
+<B>&gt;|</B>,
+
+or the redirection operator is
+<B>&gt;</B>
+
+and the
+<B>noclobber</B>
+
+option to the
+<B>set</B>
+
+builtin command is not enabled, the redirection is attempted even
+if the file named by <I>word</I> exists.
+<A NAME="lbBL">&nbsp;</A>
+<H4>Appending Redirected Output</H4>
+
+<P>
+
+Redirection of output in this fashion
+causes the file whose name results from
+the expansion of
+<I>word</I>
+
+to be opened for appending on file descriptor
+<I>n</I>,
+
+or the standard output (file descriptor 1) if
+<I>n</I>
+
+is not specified. If the file does not exist it is created.
+<P>
+
+The general format for appending output is:
+<DL COMPACT><DT><DD>
+<P>
+
+[<I>n</I>]<B>&gt;&gt;</B><I>word</I>
+</DL>
+
+<P>
+
+<A NAME="lbBM">&nbsp;</A>
+<H4>Redirecting Standard Output and Standard Error</H4>
+
+<P>
+
+This construct 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
+<I>word</I>.
+
+<P>
+
+There are two formats for redirecting standard output and
+standard error:
+<DL COMPACT><DT><DD>
+<P>
+
+<B>&amp;&gt;</B><I>word</I>
+</DL>
+
+and
+<DL COMPACT><DT><DD>
+<B>&gt;&amp;</B><I>word</I>
+</DL>
+
+<P>
+
+Of the two forms, the first is preferred.
+This is semantically equivalent to
+<DL COMPACT><DT><DD>
+<P>
+
+<B>&gt;</B><I>word</I> 2<B>&gt;&amp;</B>1
+</DL>
+
+<P>
+
+When using the second form, <I>word</I> may not expand to a number or
+<B>-</B>. If it does, other redirection operators apply
+(see <B>Duplicating File Descriptors</B> below) for compatibility
+reasons.
+<A NAME="lbBN">&nbsp;</A>
+<H4>Appending Standard Output and Standard Error</H4>
+
+<P>
+
+This construct allows both the
+standard output (file descriptor 1) and
+the standard error output (file descriptor 2)
+to be appended to the file whose name is the
+expansion of
+<I>word</I>.
+
+<P>
+
+The format for appending standard output and standard error is:
+<DL COMPACT><DT><DD>
+<P>
+
+<B>&amp;&gt;&gt;</B><I>word</I>
+</DL>
+
+<P>
+
+This is semantically equivalent to
+<DL COMPACT><DT><DD>
+<P>
+
+<B>&gt;&gt;</B><I>word</I> 2<B>&gt;&amp;</B>1
+</DL>
+
+<P>
+
+(see <B>Duplicating File Descriptors</B> below).
+<A NAME="lbBO">&nbsp;</A>
+<H4>Here Documents</H4>
+
+<P>
+
+This type of redirection instructs the shell to read input from the
+current source until a line containing only
+<I>delimiter</I>
+
+(with no trailing blanks)
+is seen. All of
+the lines read up to that point are then used as the standard
+input (or file descriptor <I>n</I> if <I>n</I> is specified) for a command.
+<P>
+
+The format of here-documents is:
+<DL COMPACT><DT><DD>
+<P>
+
+<PRE>
+[<I>n</I>]<B>&lt;&lt;</B>[<B>-</B>]<I>word</I>
+ <I>here-document</I>
+<I>delimiter</I>
+</PRE>
+
+</DL>
+
+<P>
+
+No parameter and variable expansion, command substitution,
+arithmetic expansion, or pathname expansion is performed on
+<I>word</I>.
+
+If any part of
+<I>word</I>
+
+is quoted, the
+<I>delimiter</I>
+
+is the result of quote removal on
+<I>word</I>,
+
+and the lines in the here-document are not expanded.
+If <I>word</I> is unquoted,
+all lines of the here-document are subjected to
+parameter expansion, command substitution, and arithmetic expansion,
+the character sequence
+<B>\&lt;newline&gt;</B>
+
+is ignored, and
+<B>\</B>
+
+must be used to quote the characters
+<B>\</B>,
+
+<B>$</B>,
+
+and
+<B>`</B>.
+
+<P>
+
+If the redirection operator is
+<B>&lt;&lt;-</B>,
+
+then all leading tab characters are stripped from input lines and the
+line containing
+<I>delimiter</I>.
+
+This allows
+here-documents within shell scripts to be indented in a
+natural fashion.
+<A NAME="lbBP">&nbsp;</A>
+<H4>Here Strings</H4>
+
+A variant of here documents, the format is:
+<DL COMPACT><DT><DD>
+<P>
+
+<PRE>
+[<I>n</I>]<B>&lt;&lt;&lt;</B><I>word</I>
+</PRE>
+
+</DL>
+
+<P>
+
+The <I>word</I> undergoes
+tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal.
+Pathname expansion and word splitting are not performed.
+The result is supplied as a single string, with a newline appended,
+to the command on its
+standard input (or file descriptor <I>n</I> if <I>n</I> is specified).
+<A NAME="lbBQ">&nbsp;</A>
+<H4>Duplicating File Descriptors</H4>
+
+<P>
+
+The redirection operator
+<DL COMPACT><DT><DD>
+<P>
+
+[<I>n</I>]<B>&lt;&amp;</B><I>word</I>
+</DL>
+
+<P>
+
+is used to duplicate input file descriptors.
+If
+<I>word</I>
+
+expands to one or more digits, the file descriptor denoted by
+<I>n</I>
+
+is made to be a copy of that file descriptor.
+If the digits in
+<I>word</I>
+
+do not specify a file descriptor open for input, a redirection error occurs.
+If
+<I>word</I>
+
+evaluates to
+<B>-</B>,
+
+file descriptor
+<I>n</I>
+
+is closed. If
+<I>n</I>
+
+is not specified, the standard input (file descriptor 0) is used.
+<P>
+
+The operator
+<DL COMPACT><DT><DD>
+<P>
+
+[<I>n</I>]<B>&gt;&amp;</B><I>word</I>
+</DL>
+
+<P>
+
+is used similarly to duplicate output file descriptors. If
+<I>n</I>
+
+is not specified, the standard output (file descriptor 1) is used.
+If the digits in
+<I>word</I>
+
+do not specify a file descriptor open for output, a redirection error occurs.
+If
+<I>word</I>
+
+evaluates to
+<B>-</B>,
+
+file descriptor
+<I>n</I>
+
+is closed.
+As a special case, if <I>n</I> is omitted, and <I>word</I> does not
+expand to one or more digits or <B>-</B>, the standard output and standard
+error are redirected as described previously.
+<A NAME="lbBR">&nbsp;</A>
+<H4>Moving File Descriptors</H4>
+
+<P>
+
+The redirection operator
+<DL COMPACT><DT><DD>
+<P>
+
+[<I>n</I>]<B>&lt;&amp;</B><I>digit</I><B>-</B>
+</DL>
+
+<P>
+
+moves the file descriptor <I>digit</I> to file descriptor
+<I>n</I>,
+
+or the standard input (file descriptor 0) if <I>n</I> is not specified.
+<I>digit</I> is closed after being duplicated to <I>n</I>.
+<P>
+
+Similarly, the redirection operator
+<DL COMPACT><DT><DD>
+<P>
+
+[<I>n</I>]<B>&gt;&amp;</B><I>digit</I><B>-</B>
+</DL>
+
+<P>
+
+moves the file descriptor <I>digit</I> to file descriptor
+<I>n</I>,
+
+or the standard output (file descriptor 1) if <I>n</I> is not specified.
+<A NAME="lbBS">&nbsp;</A>
+<H4>Opening File Descriptors for Reading and Writing</H4>
+
+<P>
+
+The redirection operator
+<DL COMPACT><DT><DD>
+<P>
+
+[<I>n</I>]<B>&lt;&gt;</B><I>word</I>
+</DL>
+
+<P>
+
+causes the file whose name is the expansion of
+<I>word</I>
+
+to be opened for both reading and writing on file descriptor
+<I>n</I>,
+
+or on file descriptor 0 if
+<I>n</I>
+
+is not specified. If the file does not exist, it is created.
+<A NAME="lbBT">&nbsp;</A>
+<H3>ALIASES</H3>
+
+<I>Aliases</I> 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
+<B>alias</B>
+
+and
+<B>unalias</B>
+
+builtin commands (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+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 <B>/</B>, <B>$</B>, <B>`</B>, and <B>=</B> and
+any of the shell <I>metacharacters</I> 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
+<B>ls</B>
+
+to
+<B>ls -F</B>,
+
+for instance, and
+<B>bash</B>
+
+does not try to recursively expand the replacement text.
+If the last character of the alias value is a
+<I>blank</I>,
+
+then the next command
+word following the alias is also checked for alias expansion.
+<P>
+
+Aliases are created and listed with the
+<B>alias</B>
+
+command, and removed with the
+<B>unalias</B>
+
+command.
+<P>
+
+There is no mechanism for using arguments in the replacement text.
+If arguments are needed, a shell function should be used (see
+<FONT SIZE=-1><B>FUNCTIONS</B>
+
+</FONT>
+below).
+<P>
+
+Aliases are not expanded when the shell is not interactive, unless
+the
+<B>expand_aliases</B>
+
+shell option is set using
+<B>shopt</B>
+
+(see the description of
+<B>shopt</B>
+
+under
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B></FONT>
+below).
+<P>
+
+The rules concerning the definition and use of aliases are
+somewhat confusing.
+<B>Bash</B>
+
+always reads at least one complete line of input,
+and all lines that make up a compound command,
+before executing any of the commands on that line or the compound command.
+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 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
+<B>alias</B>
+
+in compound commands.
+<P>
+
+For almost every purpose, aliases are superseded by
+shell functions.
+<A NAME="lbBU">&nbsp;</A>
+<H3>FUNCTIONS</H3>
+
+A shell function, defined as described above under
+<FONT SIZE=-1><B>SHELL GRAMMAR</B>,
+
+</FONT>
+stores a series of commands for later execution.
+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.
+Functions are executed in the context of the
+current shell; no new process is created to interpret
+them (contrast this with the execution of a shell script).
+When a function is executed, the arguments to the
+function become the positional parameters
+during its execution.
+The special parameter
+<B>#</B>
+
+is updated to reflect the change. Special parameter <B>0</B>
+is unchanged.
+The first element of the
+<FONT SIZE=-1><B>FUNCNAME</B>
+
+</FONT>
+variable is set to the name of the function while the function
+is executing.
+<P>
+
+All other aspects of the shell execution
+environment are identical between a function and its caller
+with these exceptions: the
+<FONT SIZE=-1><B>DEBUG</B>
+
+</FONT>
+and
+<B>RETURN</B>
+
+traps (see the description of the
+<B>trap</B>
+
+builtin under
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below) are not inherited unless the function has been given the
+<B>trace</B> attribute (see the description of the
+<FONT SIZE=-1><B>declare</B>
+
+</FONT>
+builtin below) or the
+<B>-o functrace</B> shell option has been enabled with
+the <B>set</B> builtin
+(in which case all functions inherit the <B>DEBUG</B> and <B>RETURN</B> traps),
+and the
+<FONT SIZE=-1><B>ERR</B>
+
+</FONT>
+trap is not inherited unless the <B>-o errtrace</B> shell option has
+been enabled.
+<P>
+
+Variables local to the function may be declared with the
+<B>local</B>
+
+builtin command. Ordinarily, variables and their values
+are shared between the function and its caller.
+If a variable is declared <B>local</B>, the variable's visible scope
+is restricted to that function and its children (including the functions
+it calls).
+Local variables &quot;shadow&quot; variables with the same name declared at
+previous scopes.
+For instance, a local variable declared in a function
+hides a global variable of the same name: references and assignments
+refer to the local variable, leaving the global variable unmodified.
+When the function returns, the global variable is once again visible.
+<P>
+
+The shell uses <I>dynamic scoping</I> to control a variable's visibility
+within functions.
+With dynamic scoping, visible variables and their values
+are a result of the sequence of function calls that caused execution
+to reach the current function.
+The value of a variable that a function sees depends
+on its value within its caller, if any, whether that caller is
+the &quot;global&quot; scope or another shell function.
+This is also the value that a local variable
+declaration &quot;shadows&quot;, and the value that is restored when the function
+returns.
+<P>
+
+For example, if a variable <I>var</I> is declared as local in function
+<I>func1</I>, and <I>func1</I> calls another function <I>func2</I>,
+references to <I>var</I> made from within <I>func2</I> will resolve to the
+local variable <I>var</I> from <I>func1</I>, shadowing any global variable
+named <I>var</I>.
+<P>
+
+The <B>unset</B> builtin also acts using the same dynamic scope: if a
+variable is local to the current scope, <B>unset</B> will unset it;
+otherwise the unset will refer to the variable found in any calling scope
+as described above.
+If a variable at the current local scope is unset, it will remain so
+until it is reset in that scope or until the function returns.
+Once the function returns, any instance of the variable at a previous
+scope will become visible.
+If the unset acts on a variable at a previous scope, any instance of a
+variable with that name that had been shadowed will become visible.
+<P>
+
+The <B>FUNCNEST</B> variable, if set to a numeric value greater
+than 0, defines a maximum function nesting level. Function
+invocations that exceed the limit cause the entire command to
+abort.
+<P>
+
+If the builtin command
+<B>return</B>
+
+is executed in a function, the function completes and
+execution resumes with the next command after the function
+call.
+Any command associated with the <B>RETURN</B> trap is executed
+before execution resumes.
+When a function completes, the values of the
+positional parameters and the special parameter
+<B>#</B>
+
+are restored to the values they had prior to the function's
+execution.
+<P>
+
+Function names and definitions may be listed with the
+<B>-f</B>
+
+option to the
+<B>declare</B>
+
+or
+<B>typeset</B>
+
+builtin commands. The
+<B>-F</B>
+
+option to
+<B>declare</B>
+
+or
+<B>typeset</B>
+
+will list the function names only
+(and optionally the source file and line number, if the <B>extdebug</B>
+shell option is enabled).
+Functions may be exported so that subshells
+automatically have them defined with the
+<B>-f</B>
+
+option to the
+<B>export</B>
+
+builtin.
+A function definition may be deleted using the <B>-f</B> option to
+the
+<B>unset</B>
+
+builtin.
+<P>
+
+Functions may be recursive.
+The <B>FUNCNEST</B> variable may be used to limit the depth of the
+function call stack and restrict the number of function invocations.
+By default, no limit is imposed on the number of recursive calls.
+<A NAME="lbBV">&nbsp;</A>
+<H3>ARITHMETIC EVALUATION</H3>
+
+The shell allows arithmetic expressions to be evaluated, under
+certain circumstances (see the <B>let</B> and <B>declare</B> builtin
+commands, the <B>((</B> compound command, and <B>Arithmetic Expansion</B>).
+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>
+
+
+<DL COMPACT>
+<DT><B></B><I>id</I>++ <I>id</I>--
+
+<DD>
+variable post-increment and post-decrement
+<DT><B>- +</B>
+
+<DD>
+unary minus and plus
+<DT><B>++</B><I>id</I> --<I>id</I>
+
+<DD>
+variable pre-increment and pre-decrement
+<DT><B>! ~</B>
+
+<DD>
+logical and bitwise negation
+<DT><B>**</B>
+
+<DD>
+exponentiation
+<DT><B>* / %</B>
+
+<DD>
+multiplication, division, remainder
+<DT><B>+ -</B>
+
+<DD>
+addition, subtraction
+<DT><B>&lt;&lt; &gt;&gt;</B>
+
+<DD>
+left and right bitwise shifts
+<DT><B>&lt;= &gt;= &lt; &gt;</B>
+
+<DD>
+comparison
+<DT><B>== !=</B>
+
+<DD>
+equality and inequality
+<DT><B>&amp;</B>
+
+<DD>
+bitwise AND
+<DT><B>^</B>
+
+<DD>
+bitwise exclusive OR
+<DT><B>|</B>
+
+<DD>
+bitwise OR
+<DT><B>&amp;&amp;</B>
+
+<DD>
+logical AND
+<DT><B>||</B>
+
+<DD>
+logical OR
+<DT><B></B><I>expr</I>?<I>expr</I>:<I>expr</I>
+
+<DD>
+conditional operator
+<DT><B>= *= /= %= += -= &lt;&lt;= &gt;&gt;= &amp;= ^= |=</B>
+
+<DD>
+assignment
+<DT><B></B><I>expr1</I> , <I>expr2</I>
+
+<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
+<I>integer</I> attribute using <B>declare -i</B> is assigned a value.
+A null value evaluates to 0.
+A shell variable need not have its <I>integer</I> attribute
+turned on to be used in an expression.
+<P>
+
+Constants with a leading 0 are interpreted as octal numbers.
+A leading 0x or 0X denotes hexadecimal.
+Otherwise, numbers take the form [<I>base#</I>]n, where the optional <I>base</I>
+is a decimal number between 2 and 64 representing the arithmetic
+base, and <I>n</I> is a number in that base.
+If <I>base#</I> is omitted, then base 10 is used.
+When specifying <I>n</I>,
+the digits greater than 9 are represented by the lowercase letters,
+the uppercase letters, @, and _, in that order.
+If <I>base</I> is less than or equal to 36, lowercase and uppercase
+letters may be used interchangeably to represent numbers between 10
+and 35.
+<P>
+
+Operators are evaluated in order of precedence. Sub-expressions in
+parentheses are evaluated first and may override the precedence
+rules above.
+<A NAME="lbBW">&nbsp;</A>
+<H3>CONDITIONAL EXPRESSIONS</H3>
+
+Conditional expressions are used by the <B>[[</B> compound command and
+the <B>test</B> and <B>[</B> builtin commands to test file attributes
+and perform string and arithmetic comparisons.
+The <B>test</B> abd <B>[</B> commands determine their behavior based on
+the number of arguments; see the descriptions of those commands for any
+other command-specific actions.
+<P>
+
+Expressions are formed from the following unary or binary primaries.
+<B>Bash</B> handles several filenames specially when they are used in
+expressions.
+If the operating system on which <B>bash</B> is running provides these
+special files, bash will use them; otherwise it will emulate them
+internally with this behavior:
+If any <I>file</I> argument to one of the primaries is of the form
+<I>/dev/fd/n</I>, then file descriptor <I>n</I> is checked.
+If the <I>file</I> argument to one of the primaries is one of
+<I>/dev/stdin</I>, <I>/dev/stdout</I>, or <I>/dev/stderr</I>, file
+descriptor 0, 1, or 2, respectively, is checked.
+<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>
+
+
+When used with <B>[[</B>, the <B>&lt;</B> and <B>&gt;</B> operators sort
+lexicographically using the current locale.
+The <B>test</B> command sorts using ASCII ordering.
+<P>
+
+<DL COMPACT>
+<DT><B>-a </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists.
+<DT><B>-b </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is a block special file.
+<DT><B>-c </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is a character special file.
+<DT><B>-d </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is a directory.
+<DT><B>-e </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists.
+<DT><B>-f </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is a regular file.
+<DT><B>-g </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is set-group-id.
+<DT><B>-h </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is a symbolic link.
+<DT><B>-k </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and its ``sticky'' bit is set.
+<DT><B>-p </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is a named pipe (FIFO).
+<DT><B>-r </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is readable.
+<DT><B>-s </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and has a size greater than zero.
+<DT><B>-t </B><I>fd</I>
+
+<DD>
+True if file descriptor
+<I>fd</I>
+
+is open and refers to a terminal.
+<DT><B>-u </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and its set-user-id bit is set.
+<DT><B>-w </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is writable.
+<DT><B>-x </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is executable.
+<DT><B>-G </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is owned by the effective group id.
+<DT><B>-L </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is a symbolic link.
+<DT><B>-N </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and has been modified since it was last read.
+<DT><B>-O </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is owned by the effective user id.
+<DT><B>-S </B><I>file</I>
+
+<DD>
+True if <I>file</I> exists and is a socket.
+<DT><I>file1</I> <B>-ef</B> <I>file2</I><DD>
+True if <I>file1</I> and <I>file2</I> refer to the same device and
+inode numbers.
+<DT><I>file1</I> -<B>nt</B> <I>file2</I><DD>
+True if <I>file1</I> is newer (according to modification date) than <I>file2</I>,
+or if <I>file1</I> exists and file2 does not.
+<DT><I>file1</I> -<B>ot</B> <I>file2</I><DD>
+True if <I>file1</I> is older than <I>file2</I>, or if <I>file2</I> exists
+and <I>file1</I> does not.
+<DT><B>-o </B><I>optname</I>
+
+<DD>
+True if the shell option
+<I>optname</I>
+
+is enabled.
+See the list of options under the description of the
+<B>-o</B>
+
+option to the
+<B>set</B>
+
+builtin below.
+<DT><B>-v </B><I>varname</I>
+
+<DD>
+True if the shell variable
+<I>varname</I>
+
+is set (has been assigned a value).
+<DT><B>-R </B><I>varname</I>
+
+<DD>
+True if the shell variable
+<I>varname</I>
+
+is set and is a name reference.
+<DT><B>-z </B><I>string</I>
+
+<DD>
+True if the length of <I>string</I> is zero.
+<DT><I>string</I><DD>
+
+<DT><B>-n </B><I>string</I>
+
+<DD>
+
+True if the length of
+<I>string</I>
+
+is non-zero.
+<DT><I>string1</I> <B>==</B> <I>string2</I><DD>
+
+<DT><I>string1</I> <B>=</B> <I>string2</I><DD>
+
+True if the strings are equal. <B>=</B> should be used
+with the <B>test</B> command for POSIX conformance.
+When used with the <B>[[</B> command, this performs pattern matching as
+described above (<B>Compound Commands</B>).
+<DT><I>string1</I> <B>!=</B> <I>string2</I><DD>
+True if the strings are not equal.
+<DT><I>string1</I> <B>&lt;</B> <I>string2</I><DD>
+True if <I>string1</I> sorts before <I>string2</I> lexicographically.
+<DT><I>string1</I> <B>&gt;</B> <I>string2</I><DD>
+True if <I>string1</I> sorts after <I>string2</I> lexicographically.
+<DT><I>arg1</I> <B>OP</B> <I>arg2</I>
+
+<DD>
+<FONT SIZE=-1><B>OP</B>
+
+</FONT>
+is one of
+<B>-eq</B>,
+
+<B>-ne</B>,
+
+<B>-lt</B>,
+
+<B>-le</B>,
+
+<B>-gt</B>,
+
+or
+<B>-ge</B>.
+
+These arithmetic binary operators return true if <I>arg1</I>
+is equal to, not equal to, less than, less than or equal to,
+greater than, or greater than or equal to <I>arg2</I>, respectively.
+<I>Arg1</I>
+
+and
+<I>arg2</I>
+
+may be positive or negative integers.
+When used with the <B>[[</B> command,
+<I>Arg1</I>
+
+and
+<I>Arg2</I>
+
+are evaluated as arithmetic expressions (see
+<FONT SIZE=-1><B>ARITHMETIC EVALUATION</B>
+
+</FONT>
+above).
+
+</DL>
+<A NAME="lbBX">&nbsp;</A>
+<H3>SIMPLE COMMAND EXPANSION</H3>
+
+When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+<DL COMPACT>
+<DT>1.<DD>
+The words that the parser has marked as variable assignments (those
+preceding the command name) and redirections are saved for later
+processing.
+<DT>2.<DD>
+The words that are not variable assignments or redirections are
+expanded. 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.
+<DT>3.<DD>
+Redirections are performed as described above under
+<FONT SIZE=-1><B>REDIRECTION</B>.
+
+</FONT>
+<DT>4.<DD>
+The text after the <B>=</B> in each variable assignment undergoes tilde
+expansion, parameter expansion, command substitution, arithmetic expansion,
+and quote removal before being assigned to the variable.
+</DL>
+<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>
+
+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>
+
+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.
+<A NAME="lbBY">&nbsp;</A>
+<H3>COMMAND EXECUTION</H3>
+
+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>
+
+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 above in
+<FONT SIZE=-1><B>FUNCTIONS</B>.
+
+</FONT>
+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>
+
+If the name is neither a shell function nor a builtin,
+and contains no slashes,
+<B>bash</B>
+
+searches each element of the
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+for a directory containing an executable file by that name.
+<B>Bash</B>
+
+uses a hash table to remember the full pathnames of executable
+files (see
+<B>hash</B>
+
+under
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+A full search of the directories in
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+is performed only if the command is not found in the hash table.
+If the search is unsuccessful, the shell searches for a defined shell
+function named <B>command_not_found_handle</B>.
+If that function exists, it is invoked in a separate execution environment
+with the original command and
+the original command's arguments as its arguments, and the function's
+exit status becomes the exit status of that subshell.
+If that function is not defined, the shell prints an error
+message and returns an exit status of 127.
+<P>
+
+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 given, if any.
+<P>
+
+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 <I>shell script</I>, a file
+containing shell commands. A subshell is spawned to execute
+it. This subshell reinitializes itself, so
+that the effect is as if a new shell had been invoked
+to handle the script, with the exception that the locations of
+commands remembered by the parent (see
+<B>hash</B>
+
+below under
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>)</FONT>
+are retained by the child.
+<P>
+
+If the program is a file beginning with
+<B>#!</B>,
+
+the remainder of the first line specifies an interpreter
+for the program. The shell executes the
+specified interpreter on operating systems that do not
+handle this executable format themselves. The arguments to the
+interpreter consist of a single optional argument following the
+interpreter name on the first line of the program, followed
+by the name of the program, followed by the command
+arguments, if any.
+<A NAME="lbBZ">&nbsp;</A>
+<H3>COMMAND EXECUTION ENVIRONMENT</H3>
+
+The shell has an <I>execution environment</I>, which consists of the
+following:
+<DL COMPACT>
+<DT>*<DD>
+open files inherited by the shell at invocation, as modified by
+redirections supplied to the <B>exec</B> builtin
+<DT>*<DD>
+the current working directory as set by <B>cd</B>, <B>pushd</B>, or
+<B>popd</B>, or inherited by the shell at invocation
+<DT>*<DD>
+the file creation mode mask as set by <B>umask</B> or inherited from
+the shell's parent
+<DT>*<DD>
+current traps set by <B>trap</B>
+<DT>*<DD>
+shell parameters that are set by variable assignment or with <B>set</B>
+or inherited from the shell's parent in the environment
+<DT>*<DD>
+shell functions defined during execution or inherited from the shell's
+parent in the environment
+<DT>*<DD>
+options enabled at invocation (either by default or with command-line
+arguments) or by <B>set</B>
+<DT>*<DD>
+options enabled by <B>shopt</B>
+<DT>*<DD>
+shell aliases defined with <B>alias</B>
+<DT>*<DD>
+various process IDs, including those of background jobs, the value
+of <B>$$</B>, and the value of
+<FONT SIZE=-1><B>PPID</B>
+
+</FONT>
+</DL>
+<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.
+
+<DL COMPACT>
+<DT>*<DD>
+the shell's open files, plus any modifications and additions specified
+by redirections to the command
+<DT>*<DD>
+the current working directory
+<DT>*<DD>
+the file creation mode mask
+<DT>*<DD>
+shell variables and functions marked for export, along with variables
+exported for the command, passed in the environment
+<DT>*<DD>
+traps caught by the shell are reset to the values inherited from the
+shell's parent, and traps ignored by the shell are ignored
+</DL>
+<P>
+
+A command invoked in this separate environment cannot affect the
+shell's execution environment.
+<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>
+
+Subshells spawned to execute command substitutions inherit the value of
+the <B>-e</B> option from the parent shell. When not in <I>posix mode</I>,
+<B>bash</B> clears the <B>-e</B> option in such subshells.
+<P>
+
+If a command is followed by a <B>&amp;</B> and job control is not active, the
+default standard input for the command is the empty file <I>/dev/null</I>.
+Otherwise, the invoked command inherits the file descriptors of the calling
+shell as modified by redirections.
+<A NAME="lbCA">&nbsp;</A>
+<H3>ENVIRONMENT</H3>
+
+When a program is invoked it is given an array of strings
+called the
+<I>environment</I>.
+
+This is a list of
+<I>name</I>-<I>value</I> pairs, of the form
+<I>name</I>=value.
+
+<P>
+
+The shell 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
+<I>export</I>
+
+to child processes. Executed commands inherit the environment.
+The
+<B>export</B>
+
+and
+<B>declare -x</B>
+
+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
+<B>unset</B>
+
+command, plus any additions via the
+<B>export</B>
+
+and
+<B>declare -x</B>
+
+commands.
+<P>
+
+The environment for any
+<I>simple command</I>
+
+or function may be augmented temporarily by prefixing it with
+parameter assignments, as described above in
+<FONT SIZE=-1><B>PARAMETERS</B>.
+
+</FONT>
+These assignment statements affect only the environment seen
+by that command.
+<P>
+
+If the
+<B>-k</B>
+
+option is set (see the
+<B>set</B>
+
+builtin command below), then
+<I>all</I>
+
+parameter assignments are placed in the environment for a command,
+not just those that precede the command name.
+<P>
+
+When
+<B>bash</B>
+
+invokes an external command, the variable
+<B>_</B>
+
+is set to the full filename of the command and passed to that
+command in its environment.
+<A NAME="lbCB">&nbsp;</A>
+<H3>EXIT STATUS</H3>
+
+<P>
+
+The exit status of an executed command is the value returned by the
+<I>waitpid</I> system call or equivalent function. Exit statuses
+fall between 0 and 255, though, as explained below, the shell may
+use values above 125 specially. Exit statuses from shell builtins and
+compound commands are also limited to this range. Under certain
+circumstances, the shell will use special values to indicate specific
+failure modes.
+<P>
+
+For the shell's purposes, a command which exits with a
+zero exit status has succeeded. An exit status of zero
+indicates success. A non-zero exit status indicates failure.
+When a command terminates on a fatal signal <I>N</I>, <B>bash</B> uses
+the value of 128+<I>N</I> as the exit status.
+<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>
+
+If a command fails because of an error during expansion or redirection,
+the exit status is greater than zero.
+<P>
+
+Shell builtin commands return a status of 0 (<I>true</I>) if
+successful, and non-zero (<I>false</I>) if an error occurs
+while they execute.
+All builtins return an exit status of 2 to indicate incorrect usage,
+generally invalid options or missing arguments.
+<P>
+
+<B>Bash</B> itself returns the exit status of the last command
+executed, unless a syntax error occurs, in which case it exits
+with a non-zero value. See also the <B>exit</B> builtin
+command below.
+<A NAME="lbCC">&nbsp;</A>
+<H3>SIGNALS</H3>
+
+When <B>bash</B> is interactive, in the absence of any traps, it ignores
+<FONT SIZE=-1><B>SIGTERM</B>
+
+</FONT>
+(so that <B>kill 0</B> does not kill an interactive shell),
+and
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+is caught and handled (so that the <B>wait</B> builtin is interruptible).
+In all cases, <B>bash</B> ignores
+<FONT SIZE=-1><B>SIGQUIT</B>.
+
+</FONT>
+If job control is in effect,
+<B>bash</B>
+
+ignores
+<FONT SIZE=-1><B>SIGTTIN</B>,
+
+</FONT>
+<FONT SIZE=-1><B>SIGTTOU</B>,
+
+</FONT>
+and
+<FONT SIZE=-1><B>SIGTSTP</B>.
+
+</FONT>
+<P>
+
+Non-builtin commands run by <B>bash</B> have signal handlers
+set to the values inherited by the shell from its parent.
+When job control is not in effect, asynchronous commands
+ignore
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+and
+<FONT SIZE=-1><B>SIGQUIT</B>
+
+</FONT>
+in addition to these inherited handlers.
+Commands run as a result of command substitution ignore the
+keyboard-generated job control signals
+<FONT SIZE=-1><B>SIGTTIN</B>,
+
+</FONT>
+<FONT SIZE=-1><B>SIGTTOU</B>,
+
+</FONT>
+and
+<FONT SIZE=-1><B>SIGTSTP</B>.
+
+</FONT>
+<P>
+
+The shell exits by default upon receipt of a
+<FONT SIZE=-1><B>SIGHUP</B>.
+
+</FONT>
+Before exiting, an interactive shell resends the
+<FONT SIZE=-1><B>SIGHUP</B>
+
+</FONT>
+to all jobs, running or stopped.
+Stopped jobs are sent
+<FONT SIZE=-1><B>SIGCONT</B>
+
+</FONT>
+to ensure that they receive the
+<FONT SIZE=-1><B>SIGHUP</B>.
+
+</FONT>
+To prevent the shell from
+sending the signal to a particular job, it should be removed from the
+jobs table with the
+<B>disown</B>
+
+builtin (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below) or marked
+to not receive
+<FONT SIZE=-1><B>SIGHUP</B>
+
+</FONT>
+using
+<B>disown -h</B>.
+
+<P>
+
+If the
+<B>huponexit</B>
+
+shell option has been set with
+<B>shopt</B>,
+
+<B>bash</B>
+
+sends a
+<FONT SIZE=-1><B>SIGHUP</B>
+
+</FONT>
+to all jobs when an interactive login shell exits.
+<P>
+
+If <B>bash</B> 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 <B>bash</B> is waiting for an asynchronous command via the <B>wait</B>
+builtin, the reception of a signal for which a trap has been set will
+cause the <B>wait</B> builtin to return immediately with an exit status
+greater than 128, immediately after which the trap is executed.
+<A NAME="lbCD">&nbsp;</A>
+<H3>JOB CONTROL</H3>
+
+<I>Job control</I>
+
+refers to the ability to selectively stop (<I>suspend</I>)
+the execution of processes and continue (<I>resume</I>)
+their execution at a later point. A user typically employs
+this facility via an interactive interface supplied jointly
+by the operating system kernel's terminal driver and
+<B>bash</B>.
+
+<P>
+
+The shell associates a
+<I>job</I>
+
+with each pipeline. It keeps a table of currently executing
+jobs, which may be listed with the
+<B>jobs</B>
+
+command. When
+<B>bash</B>
+
+starts a job asynchronously (in the
+<I>background</I>),
+
+it prints a line that looks like:
+<DL COMPACT><DT><DD>
+<P>
+
+[1] 25647
+</DL>
+
+<P>
+
+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.
+<B>Bash</B>
+
+uses the
+<I>job</I>
+
+abstraction as the basis for job control.
+<P>
+
+To facilitate the implementation of the user interface to job
+control, the operating system maintains the notion of a <I>current terminal
+process group ID</I>. 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
+<FONT SIZE=-1><B>SIGINT</B>.
+
+</FONT>
+These processes are said to be in the
+<I>foreground</I>.
+
+<I>Background</I>
+
+processes are those whose process group ID differs from the terminal's;
+such processes are immune to keyboard-generated signals.
+Only foreground processes are allowed to read from or, if the
+user so specifies with <TT>stty tostop</TT>, write to the
+terminal.
+Background processes which attempt to read from (write to when
+<TT>stty tostop</TT> is in effect) the
+terminal are sent a
+<FONT SIZE=-1><B>SIGTTIN (SIGTTOU)</B>
+
+</FONT>
+signal by the kernel's terminal driver,
+which, unless caught, suspends the process.
+<P>
+
+If the operating system on which
+<B>bash</B>
+
+is running supports
+job control,
+<B>bash</B>
+
+contains facilities to use it.
+Typing the
+<I>suspend</I>
+
+character (typically
+<B>^Z</B>,
+
+Control-Z) while a process is running
+causes that process to be stopped and returns control to
+<B>bash</B>.
+
+Typing the
+<I>delayed suspend</I>
+
+character (typically
+<B>^Y</B>,
+
+Control-Y) causes the process to be stopped when it
+attempts to read input from the terminal, and control to
+be returned to
+<B>bash</B>.
+
+The user may then manipulate the state of this job, using the
+<B>bg</B>
+
+command to continue it in the background, the
+<B>fg</B>
+
+command to continue it in the foreground, or
+the
+<B>kill</B>
+
+command to kill it. A <B>^Z</B> takes effect immediately,
+and has the additional side effect of causing pending output
+and typeahead to be discarded.
+<P>
+
+There are a number of ways to refer to a job in the shell.
+The character
+<B>%</B>
+
+introduces a job specification (<I>jobspec</I>). Job number
+<I>n</I>
+
+may be referred to as
+<B>%n</B>.
+
+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,
+<B>%ce</B>
+
+refers to a stopped
+<B>ce</B>
+
+job. If a prefix matches more than one job,
+<B>bash</B>
+
+reports an error. Using
+<B>%?ce</B>,
+
+on the other hand, refers to any job containing the string
+<B>ce</B>
+
+in its command line. If the substring matches more than one job,
+<B>bash</B>
+
+reports an error. The symbols
+<B>%%</B>
+
+and
+<B>%+</B>
+
+refer to the shell's notion of the
+<I>current job</I>,
+
+which is the last job stopped while it was in
+the foreground or started in the background.
+The
+<I>previous job</I>
+
+may be referenced using
+<B>%-</B>.
+
+If there is only a single job, <B>%+</B> and <B>%-</B> can both be used
+to refer to that job.
+In output pertaining to jobs (e.g., the output of the
+<B>jobs</B>
+
+command), the current job is always flagged with a
+<B>+</B>,
+
+and the previous job with a
+<B>-</B>.
+
+A single % (with no accompanying job specification) also refers to the
+current job.
+<P>
+
+Simply naming a job can be used to bring it into the
+foreground:
+<B>%1</B>
+
+is a synonym for
+<B>``fg %1''</B>,
+bringing job 1 from the background into the foreground.
+Similarly,
+<B>``%1 &amp;''</B>
+
+resumes job 1 in the background, equivalent to
+<B>``bg %1''</B>.
+<P>
+
+The shell learns immediately whenever a job changes state.
+Normally,
+<B>bash</B>
+
+waits until it is about to print a prompt before reporting
+changes in a job's status so as to not interrupt
+any other output. If the
+<B>-b</B>
+
+option to the
+<B>set</B>
+
+builtin command
+is enabled,
+<B>bash</B>
+
+reports such changes immediately.
+Any trap on
+<FONT SIZE=-1><B>SIGCHLD</B>
+
+</FONT>
+is executed for each child that exits.
+<P>
+
+If an attempt to exit
+<B>bash</B>
+
+is made while jobs are stopped (or, if the <B>checkjobs</B> shell option has
+been enabled using the <B>shopt</B> builtin, running), the shell prints a
+warning message, and, if the <B>checkjobs</B> option is enabled, lists the
+jobs and their statuses.
+The
+<B>jobs</B>
+
+command may then be used to inspect their status.
+If a second attempt to exit is made without an intervening command,
+the shell does not print another warning, and any stopped
+jobs are terminated.
+<P>
+
+When the shell is waiting for a job or process using the <B>wait</B>
+builtin, and job control is enabled, <B>wait</B> will return when the
+job changes state. The <B>-f</B> option will force <B>wait</B> to wait
+until the job or process terminates before returning.
+<A NAME="lbCE">&nbsp;</A>
+<H3>PROMPTING</H3>
+
+When executing interactively,
+<B>bash</B>
+
+displays the primary prompt
+<FONT SIZE=-1><B>PS1</B>
+
+</FONT>
+when it is ready to read a command, and the secondary prompt
+<FONT SIZE=-1><B>PS2</B>
+
+</FONT>
+when it needs more input to complete a command.
+<B>Bash</B>
+
+displays
+<FONT SIZE=-1><B>PS0</B>
+
+</FONT>
+after it reads a command but before executing it.
+<B>Bash</B>
+
+displays
+<FONT SIZE=-1><B>PS4</B>
+
+</FONT>
+as described above
+before tracing each command when the <B>-x</B> option is enabled.
+<B>Bash</B>
+
+allows these prompt strings to be customized by inserting a number of
+backslash-escaped special characters that are decoded as follows:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>\a</B>
+
+<DD>
+an ASCII bell character (07)
+<DT><B>\d</B>
+
+<DD>
+the date in &quot;Weekday Month Date&quot; format (e.g., &quot;Tue May 26&quot;)
+<DT><B>\D{</B><I>format</I>}
+
+<DD>
+the <I>format</I> is passed to <I>strftime</I>(3) and the result is inserted
+into the prompt string; an empty <I>format</I> results in a locale-specific
+time representation. The braces are required
+<DT><B>\e</B>
+
+<DD>
+an ASCII escape character (033)
+<DT><B>\h</B>
+
+<DD>
+the hostname up to the first `.'
+<DT><B>\H</B>
+
+<DD>
+the hostname
+<DT><B>\j</B>
+
+<DD>
+the number of jobs currently managed by the shell
+<DT><B>\l</B>
+
+<DD>
+the basename of the shell's terminal device name
+<DT><B>\n</B>
+
+<DD>
+newline
+<DT><B>\r</B>
+
+<DD>
+carriage return
+<DT><B>\s</B>
+
+<DD>
+the name of the shell, the basename of
+<B>$0</B>
+
+(the portion following the final slash)
+<DT><B>\t</B>
+
+<DD>
+the current time in 24-hour HH:MM:SS format
+<DT><B>\T</B>
+
+<DD>
+the current time in 12-hour HH:MM:SS format
+<DT><B>\@</B>
+
+<DD>
+the current time in 12-hour am/pm format
+<DT><B>\A</B>
+
+<DD>
+the current time in 24-hour HH:MM format
+<DT><B>\u</B>
+
+<DD>
+the username of the current user
+<DT><B>\v</B>
+
+<DD>
+the version of <B>bash</B> (e.g., 2.00)
+<DT><B>\V</B>
+
+<DD>
+the release of <B>bash</B>, version + patch level (e.g., 2.00.0)
+<DT><B>\w</B>
+
+<DD>
+the current working directory, with
+<FONT SIZE=-1><B>$HOME</B>
+
+</FONT>
+abbreviated with a tilde
+(uses the value of the
+<FONT SIZE=-1><B>PROMPT_DIRTRIM</B>
+
+</FONT>
+variable)
+<DT><B>\W</B>
+
+<DD>
+the basename of the current working directory, with
+<FONT SIZE=-1><B>$HOME</B>
+
+</FONT>
+abbreviated with a tilde
+<DT><B>\!</B>
+
+<DD>
+the history number of this command
+<DT><B>\#</B>
+
+<DD>
+the command number of this command
+<DT><B>\$</B>
+
+<DD>
+if the effective UID is 0, a
+<B>#</B>,
+
+otherwise a
+<B>$</B>
+
+<DT><B>\</B><I>nnn</I>
+
+<DD>
+the character corresponding to the octal number <I>nnn</I>
+<DT><B>\\</B>
+
+<DD>
+a backslash
+<DT><B>\[</B>
+
+<DD>
+begin a sequence of non-printing characters, which could be used to
+embed a terminal control sequence into the prompt
+<DT><B>\]</B>
+
+<DD>
+end a sequence of non-printing characters
+
+</DL></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
+<FONT SIZE=-1><B>HISTORY</B>
+
+</FONT>
+below), while the command number is the position in the sequence
+of commands executed during the current shell session.
+After the string is decoded, it is expanded via
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal, subject to the value of the
+<B>promptvars</B>
+
+shell option (see the description of the
+<B>shopt</B>
+
+command under
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<A NAME="lbCF">&nbsp;</A>
+<H3>READLINE</H3>
+
+This is the library that handles reading input when using an interactive
+shell, unless the
+<B>--noediting</B>
+
+option is given at shell invocation.
+Line editing is also used when using the <B>-e</B> option to the
+<B>read</B> builtin.
+By default, the line editing commands are similar to those of Emacs.
+A vi-style line editing interface is also available.
+Line editing can be enabled at any time using the
+<B>-o emacs</B>
+
+or
+<B>-o vi</B>
+
+options to the
+<B>set</B>
+
+builtin (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+To turn off line editing after the shell is running, use the
+<B>+o emacs</B>
+
+or
+<B>+o vi</B>
+
+options to the
+<B>set</B>
+
+builtin.
+<A NAME="lbCG">&nbsp;</A>
+<H4>Readline Notation</H4>
+
+<P>
+
+In this section, the Emacs-style notation is used to denote
+keystrokes. Control keys are denoted by C-<I>key</I>, e.g., C-n
+means Control-N. Similarly,
+<I>meta</I>
+
+keys are denoted by M-<I>key</I>, so M-x means Meta-X. (On keyboards
+without a
+<I>meta</I>
+
+key, M-<I>x</I> means ESC <I>x</I>, i.e., press the Escape key
+then the
+<I>x</I>
+
+key. This makes ESC the <I>meta prefix</I>.
+The combination M-C-<I>x</I> means ESC-Control-<I>x</I>,
+or press the Escape key
+then hold the Control key while pressing the
+<I>x</I>
+
+key.)
+<P>
+
+Readline commands may be given numeric
+<I>arguments</I>,
+
+which normally act as a repeat count.
+Sometimes, however, it is the sign of the argument that is significant.
+Passing a negative argument to a command that acts in the forward
+direction (e.g., <B>kill-line</B>) causes that command to act in a
+backward direction.
+Commands whose behavior with arguments deviates from this are noted
+below.
+<P>
+
+When a command is described as <I>killing</I> text, the text
+deleted is saved for possible future retrieval
+(<I>yanking</I>). The killed text is saved in a
+<I>kill ring</I>. Consecutive kills cause the text to be
+accumulated into one unit, which can be yanked all at once.
+Commands which do not kill text separate the chunks of text
+on the kill ring.
+<A NAME="lbCH">&nbsp;</A>
+<H4>Readline Initialization</H4>
+
+<P>
+
+Readline is customized by putting commands in an initialization
+file (the <I>inputrc</I> file).
+The name of this file is taken from the value of the
+<FONT SIZE=-1><B>INPUTRC</B>
+
+</FONT>
+variable. If that variable is unset, the default is
+<A HREF="file:~/.inputrc"><I>~/.inputrc</I></A>.
+
+When a program which uses the readline library starts up, the
+initialization file is read, and the key bindings and variables
+are set.
+There are only a few basic constructs allowed in the
+readline initialization file.
+Blank lines are ignored.
+Lines beginning with a <B>#</B> are comments.
+Lines beginning with a <B>$</B> indicate conditional constructs.
+Other lines denote key bindings and variable settings.
+<P>
+
+The default key-bindings may be changed with an
+<I>inputrc</I>
+
+file.
+Other programs that use this library may add their own commands
+and bindings.
+<P>
+
+For example, placing
+<DL COMPACT><DT><DD>
+<P>
+
+M-Control-u: universal-argument
+</DL>
+
+or
+<DL COMPACT><DT><DD>
+C-Meta-u: universal-argument
+</DL>
+
+into the
+<I>inputrc</I>
+
+would make M-C-u execute the readline command
+<I>universal-argument</I>.
+
+<P>
+
+The following symbolic character names are recognized:
+<I>RUBOUT</I>,
+
+<I>DEL</I>,
+
+<I>ESC</I>,
+
+<I>LFD</I>,
+
+<I>NEWLINE</I>,
+
+<I>RET</I>,
+
+<I>RETURN</I>,
+
+<I>SPC</I>,
+
+<I>SPACE</I>,
+
+and
+<I>TAB</I>.
+
+<P>
+
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a <I>macro</I>).
+<A NAME="lbCI">&nbsp;</A>
+<H4>Readline Key Bindings</H4>
+
+<P>
+
+The syntax for controlling key bindings in the
+<I>inputrc</I>
+
+file is simple. All that is required is the name of the
+command or the text of a macro and a key sequence to which
+it should be bound. The name may be specified in one of two ways:
+as a symbolic key name, possibly with <I>Meta-</I> or <I>Control-</I>
+prefixes, or as a key sequence.
+<P>
+
+When using the form <B>keyname</B>:<I>function-name</I> or <I>macro</I>,
+<I>keyname</I>
+
+is the name of a key spelled out in English. For example:
+<P>
+<DL COMPACT><DT><DD>
+Control-u: universal-argument
+<BR>
+
+Meta-Rubout: backward-kill-word
+<BR>
+
+Control-o: &quot;&gt; output&quot;
+</DL>
+
+<P>
+
+In the above example,
+<I>C-u</I>
+
+is bound to the function
+<B>universal-argument</B>,
+
+<I>M-DEL</I>
+
+is bound to the function
+<B>backward-kill-word</B>,
+
+and
+<I>C-o</I>
+
+is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+<TT>&gt; output</TT>
+
+into the line).
+<P>
+
+In the second form, <B>&quot;keyseq&quot;</B>:<I>function-name</I> or <I>macro</I>,
+<B>keyseq</B>
+
+differs from
+<B>keyname</B>
+
+above in that strings denoting
+an entire key sequence may be specified by placing the sequence
+within double quotes. Some GNU Emacs style key escapes can be
+used, as in the following example, but the symbolic character names
+are not recognized.
+<P>
+<DL COMPACT><DT><DD>
+&quot;\C-u&quot;: universal-argument
+<BR>
+
+&quot;\C-x\C-r&quot;: re-read-init-file
+<BR>
+
+&quot;\e[11~&quot;: &quot;Function Key 1&quot;
+</DL>
+
+<P>
+
+In this example,
+<I>C-u</I>
+
+is again bound to the function
+<B>universal-argument</B>.
+
+<I>C-x C-r</I>
+
+is bound to the function
+<B>re-read-init-file</B>,
+
+and
+<I>ESC [ 1 1 ~</I>
+
+is bound to insert the text
+<TT>Function Key 1</TT>.
+
+<P>
+
+The full set of GNU Emacs style escape sequences is
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>\C-</B>
+
+<DD>
+control prefix
+<DT><B>\M-</B>
+
+<DD>
+meta prefix
+<DT><B>\e</B>
+
+<DD>
+an escape character
+<DT><B>\\</B>
+
+<DD>
+backslash
+<DT><B>\</B>
+
+<DD>
+literal &quot;
+<DT><B>\aq</B>
+
+<DD>
+literal aq
+</DL></DL>
+
+
+<P>
+
+In addition to the GNU Emacs style escape sequences, a second
+set of backslash escapes is available:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>\a</B>
+
+<DD>
+alert (bell)
+<DT><B>\b</B>
+
+<DD>
+backspace
+<DT><B>\d</B>
+
+<DD>
+delete
+<DT><B>\f</B>
+
+<DD>
+form feed
+<DT><B>\n</B>
+
+<DD>
+newline
+<DT><B>\r</B>
+
+<DD>
+carriage return
+<DT><B>\t</B>
+
+<DD>
+horizontal tab
+<DT><B>\v</B>
+
+<DD>
+vertical tab
+<DT><B>\</B><I>nnn</I>
+
+<DD>
+the eight-bit character whose value is the octal value <I>nnn</I>
+(one to three digits)
+<DT><B>\x</B><I>HH</I>
+
+<DD>
+the eight-bit character whose value is the hexadecimal value <I>HH</I>
+(one or two hex digits)
+</DL></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 &quot; and aq.
+<P>
+
+<B>Bash</B>
+
+allows the current readline key bindings to be displayed or modified
+with the
+<B>bind</B>
+
+builtin command. The editing mode may be switched during interactive
+use by using the
+<B>-o</B>
+
+option to the
+<B>set</B>
+
+builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<A NAME="lbCJ">&nbsp;</A>
+<H4>Readline Variables</H4>
+
+<P>
+
+Readline has variables that can be used to further customize its
+behavior. A variable may be set in the
+<I>inputrc</I>
+
+file with a statement of the form
+<DL COMPACT><DT><DD>
+<P>
+
+<B>set</B> <I>variable-name</I> <I>value</I>
+</DL>
+
+<P>
+
+Except where noted, readline variables can take the values
+<B>On</B>
+
+or
+<B>Off</B>
+
+(without regard to case).
+Unrecognized variable names are ignored.
+When a variable value is read, empty or null values, &quot;on&quot; (case-insensitive),
+and &quot;1&quot; are equivalent to <B>On</B>. All other values are equivalent to
+<B>Off</B>.
+The variables and their default values are:
+<P>
+
+
+<DL COMPACT>
+<DT><B>bell-style (audible)</B>
+
+<DD>
+Controls what happens when readline wants to ring the terminal bell.
+If set to <B>none</B>, readline never rings the bell. If set to
+<B>visible</B>, readline uses a visible bell if one is available.
+If set to <B>audible</B>, readline attempts to ring the terminal's bell.
+<DT><B>bind-tty-special-chars (On)</B>
+
+<DD>
+If set to <B>On</B>, readline attempts to bind the control characters
+treated specially by the kernel's terminal driver to their readline
+equivalents.
+<DT><B>blink-matching-paren (Off)</B>
+
+<DD>
+If set to <B>On</B>, readline attempts to briefly move the cursor to an
+opening parenthesis when a closing parenthesis is inserted.
+<DT><B>colored-completion-prefix (Off)</B>
+
+<DD>
+If set to <B>On</B>, when listing completions, readline displays the
+common prefix of the set of possible completions using a different color.
+The color definitions are taken from the value of the <B>LS_COLORS</B>
+environment variable.
+<DT><B>colored-stats (Off)</B>
+
+<DD>
+If set to <B>On</B>, readline displays possible completions using different
+colors to indicate their file type.
+The color definitions are taken from the value of the <B>LS_COLORS</B>
+environment variable.
+<DT><B>comment-begin (``#'')</B>
+
+<DD>
+The string that is inserted when the readline
+<B>insert-comment</B>
+
+command is executed.
+This command is bound to
+<B>M-#</B>
+
+in emacs mode and to
+<B>#</B>
+
+in vi command mode.
+<DT><B>completion-display-width (-1)</B>
+
+<DD>
+The number of screen columns used to display possible matches
+when performing completion.
+The value is ignored if it is less than 0 or greater than the terminal
+screen width.
+A value of 0 will cause matches to be displayed one per line.
+The default value is -1.
+<DT><B>completion-ignore-case (Off)</B>
+
+<DD>
+If set to <B>On</B>, readline performs filename matching and completion
+in a case-insensitive fashion.
+<DT><B>completion-map-case (Off)</B>
+
+<DD>
+If set to <B>On</B>, and <B>completion-ignore-case</B> is enabled, readline
+treats hyphens (<I>-</I>) and underscores (<I>_</I>) as equivalent when
+performing case-insensitive filename matching and completion.
+<DT><B>completion-prefix-display-length (0)</B>
+
+<DD>
+The length in characters of the common prefix of a list of possible
+completions that is displayed without modification. When set to a
+value greater than zero, common prefixes longer than this value are
+replaced with an ellipsis when displaying possible completions.
+<DT><B>completion-query-items (100)</B>
+
+<DD>
+This determines when the user is queried about viewing
+the number of possible completions
+generated by the <B>possible-completions</B> command.
+It may be set to any integer value greater than or equal to
+zero. If the number of possible completions is greater than
+or equal to the value of this variable, the user is asked whether
+or not he wishes to view them; otherwise they are simply listed
+on the terminal.
+<DT><B>convert-meta (On)</B>
+
+<DD>
+If set to <B>On</B>, readline will convert characters with the
+eighth bit set to an ASCII key sequence
+by stripping the eighth bit and prefixing an
+escape character (in effect, using escape as the <I>meta prefix</I>).
+The default is <I>On</I>, but readline will set it to <I>Off</I> if the
+locale contains eight-bit characters.
+<DT><B>disable-completion (Off)</B>
+
+<DD>
+If set to <B>On</B>, readline will inhibit word completion. Completion
+characters will be inserted into the line as if they had been
+mapped to <B>self-insert</B>.
+<DT><B>echo-control-characters (On)</B>
+
+<DD>
+When set to <B>On</B>, on operating systems that indicate they support it,
+readline echoes a character corresponding to a signal generated from the
+keyboard.
+<DT><B>editing-mode (emacs)</B>
+
+<DD>
+Controls whether readline begins with a set of key bindings similar
+to <I>Emacs</I> or <I>vi</I>.
+<B>editing-mode</B>
+
+can be set to either
+<B>emacs</B>
+
+or
+<B>vi</B>.
+
+<DT><B>emacs-mode-string (@)</B>
+
+<DD>
+If the <I>show-mode-in-prompt</I> variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when emacs editing mode is active. The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the \1 and \2 escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+<DT><B>enable-bracketed-paste (Off)</B>
+
+<DD>
+When set to <B>On</B>, readline will configure the terminal in a way
+that will enable it to insert each paste into the editing buffer as a
+single string of characters, instead of treating each character as if
+it had been read from the keyboard. This can prevent pasted characters
+from being interpreted as editing commands.
+<DT><B>enable-keypad (Off)</B>
+
+<DD>
+When set to <B>On</B>, readline will try to enable the application
+keypad when it is called. Some systems need this to enable the
+arrow keys.
+<DT><B>enable-meta-key (On)</B>
+
+<DD>
+When set to <B>On</B>, readline will try to enable any meta modifier
+key the terminal claims to support when it is called. On many terminals,
+the meta key is used to send eight-bit characters.
+<DT><B>expand-tilde (Off)</B>
+
+<DD>
+If set to <B>On</B>, tilde expansion is performed when readline
+attempts word completion.
+<DT><B>history-preserve-point (Off)</B>
+
+<DD>
+If set to <B>On</B>, the history code attempts to place point at the
+same location on each history line retrieved with <B>previous-history</B>
+or <B>next-history</B>.
+<DT><B>history-size (unset)</B>
+
+<DD>
+Set the maximum number of history entries saved in the history list.
+If set to zero, any existing history entries are deleted and no new entries
+are saved.
+If set to a value less than zero, the number of history entries is not
+limited.
+By default, the number of history entries is set to the value of the
+<B>HISTSIZE</B> shell variable.
+If an attempt is made to set <I>history-size</I> to a non-numeric value,
+the maximum number of history entries will be set to 500.
+<DT><B>horizontal-scroll-mode (Off)</B>
+
+<DD>
+When set to <B>On</B>, makes readline use a single line for display,
+scrolling the input horizontally on a single screen line when it
+becomes longer than the screen width rather than wrapping to a new line.
+<DT><B>input-meta (Off)</B>
+
+<DD>
+If set to <B>On</B>, readline will enable eight-bit input (that is,
+it will not strip the eighth bit from the characters it reads),
+regardless of what the terminal claims it can support. The name
+<B>meta-flag</B>
+
+is a synonym for this variable.
+The default is <I>Off</I>, but readline will set it to <I>On</I> if the
+locale contains eight-bit characters.
+<DT><B>isearch-terminators (``C-[C-J'')</B>
+
+<DD>
+The string of characters that should terminate an incremental
+search without subsequently executing the character as a command.
+If this variable has not been given a value, the characters
+<I>ESC</I> and <I>C-J</I> will terminate an incremental search.
+<DT><B>keymap (emacs)</B>
+
+<DD>
+Set the current readline keymap. The set of valid keymap names is
+<I>emacs, emacs-standard, emacs-meta, emacs-ctlx, vi,
+vi-command</I>, and
+<I>vi-insert</I>.
+
+<I>vi</I> is equivalent to <I>vi-command</I>; <I>emacs</I> is
+equivalent to <I>emacs-standard</I>. The default value is
+<I>emacs</I>;
+
+the value of
+<B>editing-mode</B>
+
+also affects the default keymap.
+<DT><B>keyseq-timeout (500)</B>
+
+<DD>
+Specifies the duration <I>readline</I> will wait for a character when reading an
+ambiguous key sequence (one that can form a complete key sequence using
+the input read so far, or can take additional input to complete a longer
+key sequence).
+If no input is received within the timeout, <I>readline</I> will use the shorter
+but complete key sequence.
+The value is specified in milliseconds, so a value of 1000 means that
+<I>readline</I> will wait one second for additional input.
+If this variable is set to a value less than or equal to zero, or to a
+non-numeric value, <I>readline</I> will wait until another key is pressed to
+decide which key sequence to complete.
+<DT><B>mark-directories (On)</B>
+
+<DD>
+If set to <B>On</B>, completed directory names have a slash
+appended.
+<DT><B>mark-modified-lines (Off)</B>
+
+<DD>
+If set to <B>On</B>, history lines that have been modified are displayed
+with a preceding asterisk (<B>*</B>).
+<DT><B>mark-symlinked-directories (Off)</B>
+
+<DD>
+If set to <B>On</B>, completed names which are symbolic links to directories
+have a slash appended (subject to the value of
+<B>mark-directories</B>).
+<DT><B>match-hidden-files (On)</B>
+
+<DD>
+This variable, when set to <B>On</B>, causes readline to match files whose
+names begin with a `.' (hidden files) when performing filename
+completion.
+If set to <B>Off</B>, the leading `.' must be
+supplied by the user in the filename to be completed.
+<DT><B>menu-complete-display-prefix (Off)</B>
+
+<DD>
+If set to <B>On</B>, menu completion displays the common prefix of the
+list of possible completions (which may be empty) before cycling through
+the list.
+<DT><B>output-meta (Off)</B>
+
+<DD>
+If set to <B>On</B>, readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence.
+The default is <I>Off</I>, but readline will set it to <I>On</I> if the
+locale contains eight-bit characters.
+<DT><B>page-completions (On)</B>
+
+<DD>
+If set to <B>On</B>, readline uses an internal <I>more</I>-like pager
+to display a screenful of possible completions at a time.
+<DT><B>print-completions-horizontally (Off)</B>
+
+<DD>
+If set to <B>On</B>, readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+<DT><B>revert-all-at-newline (Off)</B>
+
+<DD>
+If set to <B>On</B>, readline will undo all changes to history lines
+before returning when <B>accept-line</B> is executed. By default,
+history lines may be modified and retain individual undo lists across
+calls to <B>readline</B>.
+<DT><B>show-all-if-ambiguous (Off)</B>
+
+<DD>
+This alters the default behavior of the completion functions. If
+set to
+<B>On</B>,
+
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+<DT><B>show-all-if-unmodified (Off)</B>
+
+<DD>
+This alters the default behavior of the completion functions in
+a fashion similar to <B>show-all-if-ambiguous</B>.
+If set to
+<B>On</B>,
+
+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.
+<DT><B>show-mode-in-prompt (Off)</B>
+
+<DD>
+If set to <B>On</B>, add a string to the beginning of the prompt
+indicating the editing mode: emacs, vi command, or vi insertion.
+The mode strings are user-settable (e.g., <I>emacs-mode-string</I>).
+<DT><B>skip-completed-text (Off)</B>
+
+<DD>
+If set to <B>On</B>, this alters the default completion behavior when
+inserting a single match into the line. It's only active when
+performing completion in the middle of a word. If enabled, readline
+does not insert characters from the completion that match characters
+after point in the word being completed, so portions of the word
+following the cursor are not duplicated.
+<DT><B>vi-cmd-mode-string ((cmd))</B>
+
+<DD>
+If the <I>show-mode-in-prompt</I> variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when vi editing mode is active and in command mode.
+The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the \1 and \2 escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+<DT><B>vi-ins-mode-string ((ins))</B>
+
+<DD>
+If the <I>show-mode-in-prompt</I> variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when vi editing mode is active and in insertion mode.
+The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the \1 and \2 escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+<DT><B>visible-stats (Off)</B>
+
+<DD>
+If set to <B>On</B>, a character denoting a file's type as reported
+by <I>stat</I>(2) is appended to the filename when listing possible
+completions.
+
+</DL>
+<A NAME="lbCK">&nbsp;</A>
+<H4>Readline Conditional Constructs</H4>
+
+<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.
+<DL COMPACT>
+<DT><B>$if</B><DD>
+The
+<B>$if</B>
+
+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, after any comparison operator,
+<BR>&nbsp;extends&nbsp;to&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;line;
+unless otherwise noted, no characters are required to isolate it.
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT><B>mode</B><DD>
+The <B>mode=</B> form of the <B>$if</B> directive is used to test
+whether readline is in emacs or vi mode.
+This may be used in conjunction
+with the <B>set keymap</B> command, for instance, to set bindings in
+the <I>emacs-standard</I> and <I>emacs-ctlx</I> keymaps only if
+readline is starting out in emacs mode.
+<DT><B>term</B><DD>
+The <B>term=</B> 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
+<B>=</B>
+
+is tested against both the full name of the terminal and the portion
+of the terminal name before the first <B>-</B>. This allows
+<I>sun</I>
+
+to match both
+<I>sun</I>
+
+and
+<I>sun-cmd</I>,
+
+for instance.
+<DT><B>version</B><DD>
+The <B>version</B> test may be used to perform comparisons against
+specific readline versions.
+The <B>version</B> expands to the current readline version.
+The set of comparison operators includes
+<B>=</B>,
+
+(and
+<B>==</B>),
+
+<B>!=</B>,
+
+<B>&lt;=</B>,
+
+<B>&gt;=</B>,
+
+<B>&lt;</B>,
+
+and
+<B>&gt;</B>.
+
+The version number supplied on the right side of the operator consists
+of a major version number, an optional decimal point, and an optional
+minor version (e.g., <B>7.1</B>). If the minor version is omitted, it
+is assumed to be <B>0</B>.
+The operator may be separated from the string <B>version</B>
+and from the version number argument by whitespace.
+<DT><B>application</B><DD>
+The <B>application</B> construct is used to include
+application-specific settings. Each program using the readline
+library sets the <I>application name</I>, and an initialization
+file 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 <B>bash</B>:
+<P>
+<DL COMPACT><DT><DD>
+<PRE>
+<B>$if</B> Bash
+# Quote the current or previous word
+&quot;\C-xq&quot;: &quot;\eb\&quot;\ef\&quot;&quot;
+<B>$endif</B>
+</PRE>
+
+</DL>
+
+<DT><I>variable</I><DD>
+The <I>variable</I> construct provides simple equality tests for readline
+variables and values.
+The permitted comparison operators are <I>=</I>, <I>==</I>, and <I>!=</I>.
+The variable name must be separated from the comparison operator by
+whitespace; the operator may be separated from the value on the right hand
+side by whitespace.
+Both string and boolean variables may be tested. Boolean variables must be
+tested against the values <I>on</I> and <I>off</I>.
+</DL></DL>
+
+<DT><B>$endif</B><DD>
+This command, as seen in the previous example, terminates an
+<B>$if</B> command.
+<DT><B>$else</B><DD>
+Commands in this branch of the <B>$if</B> directive are executed if
+the test fails.
+<DT><B>$include</B><DD>
+This directive takes a single filename as an argument and reads commands
+and bindings from that file. For example, the following directive
+would read <A HREF="file:/etc/inputrc"><I>/etc/inputrc</I></A>:
+<P>
+<DL COMPACT><DT><DD>
+<PRE>
+<B>$include</B> <A HREF="file:/etc/inputrc"><I>/etc/inputrc</I></A>
+</PRE>
+
+</DL>
+
+</DL>
+<A NAME="lbCL">&nbsp;</A>
+<H4>Searching</H4>
+
+<P>
+
+Readline provides commands for searching through the command history
+(see
+<FONT SIZE=-1><B>HISTORY</B>
+
+</FONT>
+below) for lines containing a specified string.
+There are two search modes:
+<I>incremental</I>
+
+and
+<I>non-incremental</I>.
+
+<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.
+The characters present in the value of the <B>isearch-terminators</B>
+variable are used to terminate an incremental search.
+If that variable has not been assigned a value the Escape and
+Control-J characters will terminate an incremental search.
+Control-G will abort an incremental search and restore the original
+line.
+When the search is terminated, the history entry containing the
+search string becomes the current line.
+<P>
+
+To find other matching entries in the history list, type Control-S or
+Control-R 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 <I>newline</I> will terminate the search and accept
+the line, thereby executing the command from the history list.
+<P>
+
+Readline remembers the last incremental search string. If two
+Control-Rs are typed without any intervening characters defining a
+new search string, any remembered search string is used.
+<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.
+<A NAME="lbCM">&nbsp;</A>
+<H4>Readline Command Names</H4>
+
+<P>
+
+The following is a list of the names of the commands and the default
+key sequences to which they are bound.
+Command names without an accompanying key sequence are unbound by default.
+In the following descriptions, <I>point</I> refers to the current cursor
+position, and <I>mark</I> refers to a cursor position saved by the
+<B>set-mark</B> command.
+The text between the point and mark is referred to as the <I>region</I>.
+<A NAME="lbCN">&nbsp;</A>
+<H4>Commands for Moving</H4>
+
+<P>
+
+
+<DL COMPACT>
+<DT><B>beginning-of-line (C-a)</B>
+
+<DD>
+Move to the start of the current line.
+<DT><B>end-of-line (C-e)</B>
+
+<DD>
+Move to the end of the line.
+<DT><B>forward-char (C-f)</B>
+
+<DD>
+Move forward a character.
+<DT><B>backward-char (C-b)</B>
+
+<DD>
+Move back a character.
+<DT><B>forward-word (M-f)</B>
+
+<DD>
+Move forward to the end of the next word. Words are composed of
+alphanumeric characters (letters and digits).
+<DT><B>backward-word (M-b)</B>
+
+<DD>
+Move back to the start of the current or previous word.
+Words are composed of alphanumeric characters (letters and digits).
+<DT><B>shell-forward-word</B>
+
+<DD>
+Move forward to the end of the next word.
+Words are delimited by non-quoted shell metacharacters.
+<DT><B>shell-backward-word</B>
+
+<DD>
+Move back to the start of the current or previous word.
+Words are delimited by non-quoted shell metacharacters.
+<DT><B>previous-screen-line</B>
+
+<DD>
+Attempt to move point to the same physical screen column on the previous
+physical screen line. This will not have the desired effect if the current
+Readline line does not take up more than one physical line or if point is not
+greater than the length of the prompt plus the screen width.
+<DT><B>next-screen-line</B>
+
+<DD>
+Attempt to move point to the same physical screen column on the next
+physical screen line. This will not have the desired effect if the current
+Readline line does not take up more than one physical line or if the length
+of the current Readline line is not greater than the length of the prompt
+plus the screen width.
+<DT><B>clear-screen (C-l)</B>
+
+<DD>
+Clear the screen leaving the current line at the top of the screen.
+With an argument, refresh the current line without clearing the
+screen.
+<DT><B>redraw-current-line</B>
+
+<DD>
+Refresh the current line.
+
+</DL>
+<A NAME="lbCO">&nbsp;</A>
+<H4>Commands for Manipulating the History</H4>
+
+<P>
+
+
+<DL COMPACT>
+<DT><B>accept-line (Newline, Return)</B>
+
+<DD>
+Accept the line regardless of where the cursor is. If this line is
+non-empty, add it to the history list according to the state of the
+<FONT SIZE=-1><B>HISTCONTROL</B>
+
+</FONT>
+variable. If the line is a modified history
+line, then restore the history line to its original state.
+<DT><B>previous-history (C-p)</B>
+
+<DD>
+Fetch the previous command from the history list, moving back in
+the list.
+<DT><B>next-history (C-n)</B>
+
+<DD>
+Fetch the next command from the history list, moving forward in the
+list.
+<DT><B>beginning-of-history (M-&lt;)</B>
+
+<DD>
+Move to the first line in the history.
+<DT><B>end-of-history (M-&gt;)</B>
+
+<DD>
+Move to the end of the input history, i.e., the line currently being
+entered.
+<DT><B>reverse-search-history (C-r)</B>
+
+<DD>
+Search backward starting at the current line and moving `up' through
+the history as necessary. This is an incremental search.
+<DT><B>forward-search-history (C-s)</B>
+
+<DD>
+Search forward starting at the current line and moving `down' through
+the history as necessary. This is an incremental search.
+<DT><B>non-incremental-reverse-search-history (M-p)</B>
+
+<DD>
+Search backward through the history starting at the current line
+using a non-incremental search for a string supplied by the user.
+<DT><B>non-incremental-forward-search-history (M-n)</B>
+
+<DD>
+Search forward through the history using a non-incremental search for
+a string supplied by the user.
+<DT><B>history-search-forward</B>
+
+<DD>
+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.
+<DT><B>history-search-backward</B>
+
+<DD>
+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.
+<DT><B>history-substring-search-backward</B>
+
+<DD>
+Search backward through the history for the string of characters
+between the start of the current line and the current cursor
+position (the <I>point</I>).
+The search string may match anywhere in a history line.
+This is a non-incremental search.
+<DT><B>history-substring-search-forward</B>
+
+<DD>
+Search forward through the history for the string of characters
+between the start of the current line and the point.
+The search string may match anywhere in a history line.
+This is a non-incremental search.
+<DT><B>yank-nth-arg (M-C-y)</B>
+
+<DD>
+Insert the first argument to the previous command (usually
+the second word on the previous line) at point.
+With an argument
+<I>n</I>,
+
+insert the <I>n</I>th word from the previous command (the words
+in the previous command begin with word 0). A negative argument
+inserts the <I>n</I>th word from the end of the previous command.
+Once the argument <I>n</I> is computed, the argument is extracted
+as if the &quot;!<I>n</I>&quot; history expansion had been specified.
+<DT><B>yank-last-arg (M-., M-_)</B>
+
+<DD>
+Insert the last argument to the previous command (the last word of
+the previous history entry).
+With a numeric argument, behave exactly like <B>yank-nth-arg</B>.
+Successive calls to <B>yank-last-arg</B> move back through the history
+list, inserting the last word (or the word specified by the argument to
+the first call) of each line in turn.
+Any numeric argument supplied to these successive calls determines
+the direction to move through the history. A negative argument switches
+the direction through the history (back or forward).
+The history expansion facilities are used to extract the last word,
+as if the &quot;!$&quot; history expansion had been specified.
+<DT><B>shell-expand-line (M-C-e)</B>
+
+<DD>
+Expand the line as the shell does. This
+performs alias and history expansion as well as all of the shell
+word expansions. See
+<FONT SIZE=-1><B>HISTORY EXPANSION</B>
+
+</FONT>
+below for a description of history expansion.
+<DT><B>history-expand-line (M-^)</B>
+
+<DD>
+Perform history expansion on the current line.
+See
+<FONT SIZE=-1><B>HISTORY EXPANSION</B>
+
+</FONT>
+below for a description of history expansion.
+<DT><B>magic-space</B>
+
+<DD>
+Perform history expansion on the current line and insert a space.
+See
+<FONT SIZE=-1><B>HISTORY EXPANSION</B>
+
+</FONT>
+below for a description of history expansion.
+<DT><B>alias-expand-line</B>
+
+<DD>
+Perform alias expansion on the current line.
+See
+<FONT SIZE=-1><B>ALIASES</B>
+
+</FONT>
+above for a description of alias expansion.
+<DT><B>history-and-alias-expand-line</B>
+
+<DD>
+Perform history and alias expansion on the current line.
+<DT><B>insert-last-argument (M-., M-_)</B>
+
+<DD>
+A synonym for <B>yank-last-arg</B>.
+<DT><B>operate-and-get-next (C-o)</B>
+
+<DD>
+Accept the current line for execution and fetch the next line
+relative to the current line from the history for editing.
+A numeric argument, if supplied, specifies the history entry to use instead
+of the current line.
+<DT><B>edit-and-execute-command (C-x C-e)</B>
+
+<DD>
+Invoke an editor on the current command line, and execute the result as shell
+commands.
+<B>Bash</B> attempts to invoke
+<FONT SIZE=-1><B>$VISUAL</B>,
+
+</FONT>
+<FONT SIZE=-1><B>$EDITOR</B>,
+
+</FONT>
+and <I>emacs</I> as the editor, in that order.
+
+</DL>
+<A NAME="lbCP">&nbsp;</A>
+<H4>Commands for Changing Text</H4>
+
+<P>
+
+
+<DL COMPACT>
+<DT><B></B><I>end-of-file</I> (usually C-d)
+
+<DD>
+The character indicating end-of-file as set, for example, by
+<TT>stty</TT>.
+
+If this character is read when there are no characters
+on the line, and point is at the beginning of the line, Readline
+interprets it as the end of input and returns
+<FONT SIZE=-1><B>EOF</B>.
+
+</FONT>
+<DT><B>delete-char (C-d)</B>
+
+<DD>
+Delete the character at point.
+If this function is bound to the
+same character as the tty <B>EOF</B> character, as <B>C-d</B>
+commonly is, see above for the effects.
+<DT><B>backward-delete-char (Rubout)</B>
+
+<DD>
+Delete the character behind the cursor. When given a numeric argument,
+save the deleted text on the kill ring.
+<DT><B>forward-backward-delete-char</B>
+
+<DD>
+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.
+<DT><B>quoted-insert (C-q, C-v)</B>
+
+<DD>
+Add the next character typed to the line verbatim. This is
+how to insert characters like <B>C-q</B>, for example.
+<DT><B>tab-insert (C-v TAB)</B>
+
+<DD>
+Insert a tab character.
+<DT><B>self-insert (a,&nbsp;b,&nbsp;A,&nbsp;1,&nbsp;!,&nbsp;...)</B>
+
+<DD>
+Insert the character typed.
+<DT><B>transpose-chars (C-t)</B>
+
+<DD>
+Drag the character before point forward over the character at point,
+moving point forward as well.
+If point is at the end of the line, then this transposes
+the two characters before point.
+Negative arguments have no effect.
+<DT><B>transpose-words (M-t)</B>
+
+<DD>
+Drag the word before point past the word after point,
+moving point over that word as well.
+If point is at the end of the line, this transposes
+the last two words on the line.
+<DT><B>upcase-word (M-u)</B>
+
+<DD>
+Uppercase the current (or following) word. With a negative argument,
+uppercase the previous word, but do not move point.
+<DT><B>downcase-word (M-l)</B>
+
+<DD>
+Lowercase the current (or following) word. With a negative argument,
+lowercase the previous word, but do not move point.
+<DT><B>capitalize-word (M-c)</B>
+
+<DD>
+Capitalize the current (or following) word. With a negative argument,
+capitalize the previous word, but do not move point.
+<DT><B>overwrite-mode</B>
+
+<DD>
+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
+<B>emacs</B> mode; <B>vi</B> mode does overwrite differently.
+Each call to <I>readline()</I> starts in insert mode.
+In overwrite mode, characters bound to <B>self-insert</B> replace
+the text at point rather than pushing the text to the right.
+Characters bound to <B>backward-delete-char</B> replace the character
+before point with a space. By default, this command is unbound.
+
+</DL>
+<A NAME="lbCQ">&nbsp;</A>
+<H4>Killing and Yanking</H4>
+
+<P>
+
+
+<DL COMPACT>
+<DT><B>kill-line (C-k)</B>
+
+<DD>
+Kill the text from point to the end of the line.
+<DT><B>backward-kill-line (C-x Rubout)</B>
+
+<DD>
+Kill backward to the beginning of the line.
+<DT><B>unix-line-discard (C-u)</B>
+
+<DD>
+Kill backward from point to the beginning of the line.
+The killed text is saved on the kill-ring.
+
+<DT><B>kill-whole-line</B>
+
+<DD>
+Kill all characters on the current line, no matter where point is.
+<DT><B>kill-word (M-d)</B>
+
+<DD>
+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 those used by <B>forward-word</B>.
+<DT><B>backward-kill-word (M-Rubout)</B>
+
+<DD>
+Kill the word behind point.
+Word boundaries are the same as those used by <B>backward-word</B>.
+<DT><B>shell-kill-word</B>
+
+<DD>
+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 those used by <B>shell-forward-word</B>.
+<DT><B>shell-backward-kill-word</B>
+
+<DD>
+Kill the word behind point.
+Word boundaries are the same as those used by <B>shell-backward-word</B>.
+<DT><B>unix-word-rubout (C-w)</B>
+
+<DD>
+Kill the word behind point, using white space as a word boundary.
+The killed text is saved on the kill-ring.
+<DT><B>unix-filename-rubout</B>
+
+<DD>
+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.
+<DT><B>delete-horizontal-space (M-\)</B>
+
+<DD>
+Delete all spaces and tabs around point.
+<DT><B>kill-region</B>
+
+<DD>
+Kill the text in the current region.
+<DT><B>copy-region-as-kill</B>
+
+<DD>
+Copy the text in the region to the kill buffer.
+<DT><B>copy-backward-word</B>
+
+<DD>
+Copy the word before point to the kill buffer.
+The word boundaries are the same as <B>backward-word</B>.
+<DT><B>copy-forward-word</B>
+
+<DD>
+Copy the word following point to the kill buffer.
+The word boundaries are the same as <B>forward-word</B>.
+<DT><B>yank (C-y)</B>
+
+<DD>
+Yank the top of the kill ring into the buffer at point.
+<DT><B>yank-pop (M-y)</B>
+
+<DD>
+Rotate the kill ring, and yank the new top. Only works following
+<B>yank</B>
+
+or
+<B>yank-pop</B>.
+
+
+</DL>
+<A NAME="lbCR">&nbsp;</A>
+<H4>Numeric Arguments</H4>
+
+<P>
+
+
+<DL COMPACT>
+<DT><B>digit-argument (M-0, M-1, ..., M--)</B>
+
+<DD>
+Add this digit to the argument already accumulating, or start a new
+argument. M-- starts a negative argument.
+<DT><B>universal-argument</B>
+
+<DD>
+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
+<B>universal-argument</B>
+
+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 nor 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.
+
+</DL>
+<A NAME="lbCS">&nbsp;</A>
+<H4>Completing</H4>
+
+<P>
+
+
+<DL COMPACT>
+<DT><B>complete (TAB)</B>
+
+<DD>
+Attempt to perform completion on the text before point.
+<B>Bash</B>
+
+attempts completion treating the text as a variable (if the
+text begins with <B>$</B>), username (if the text begins with
+<B>~</B>), hostname (if the text begins with <B>@</B>), or
+command (including aliases and functions) in turn. If none
+of these produces a match, filename completion is attempted.
+<DT><B>possible-completions (M-?)</B>
+
+<DD>
+List the possible completions of the text before point.
+<DT><B>insert-completions (M-*)</B>
+
+<DD>
+Insert all completions of the text before point
+that would have been generated by
+<B>possible-completions</B>.
+<DT><B>menu-complete</B>
+
+<DD>
+Similar to <B>complete</B>, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of <B>menu-complete</B> 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 <B>bell-style</B>)
+and the original text is restored.
+An argument of <I>n</I> moves <I>n</I> 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 <B>TAB</B>, but is unbound
+by default.
+<DT><B>menu-complete-backward</B>
+
+<DD>
+Identical to <B>menu-complete</B>, but moves backward through the list
+of possible completions, as if <B>menu-complete</B> had been given a
+negative argument. This command is unbound by default.
+<DT><B>delete-char-or-list</B>
+
+<DD>
+Deletes the character under the cursor if not at the beginning or
+end of the line (like <B>delete-char</B>).
+If at the end of the line, behaves identically to
+<B>possible-completions</B>.
+This command is unbound by default.
+<DT><B>complete-filename (M-/)</B>
+
+<DD>
+Attempt filename completion on the text before point.
+<DT><B>possible-filename-completions (C-x /)</B>
+
+<DD>
+List the possible completions of the text before point,
+treating it as a filename.
+<DT><B>complete-username (M-~)</B>
+
+<DD>
+Attempt completion on the text before point, treating
+it as a username.
+<DT><B>possible-username-completions (C-x ~)</B>
+
+<DD>
+List the possible completions of the text before point,
+treating it as a username.
+<DT><B>complete-variable (M-$)</B>
+
+<DD>
+Attempt completion on the text before point, treating
+it as a shell variable.
+<DT><B>possible-variable-completions (C-x $)</B>
+
+<DD>
+List the possible completions of the text before point,
+treating it as a shell variable.
+<DT><B>complete-hostname (M-@)</B>
+
+<DD>
+Attempt completion on the text before point, treating
+it as a hostname.
+<DT><B>possible-hostname-completions (C-x @)</B>
+
+<DD>
+List the possible completions of the text before point,
+treating it as a hostname.
+<DT><B>complete-command (M-!)</B>
+
+<DD>
+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.
+<DT><B>possible-command-completions (C-x !)</B>
+
+<DD>
+List the possible completions of the text before point,
+treating it as a command name.
+<DT><B>dynamic-complete-history (M-TAB)</B>
+
+<DD>
+Attempt completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+<DT><B>dabbrev-expand</B>
+
+<DD>
+Attempt menu completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+<DT><B>complete-into-braces (M-{)</B>
+
+<DD>
+Perform filename completion and insert the list of possible completions
+enclosed within braces so the list is available to the shell (see
+<B>Brace Expansion</B>
+
+above).
+
+</DL>
+<A NAME="lbCT">&nbsp;</A>
+<H4>Keyboard Macros</H4>
+
+<P>
+
+
+<DL COMPACT>
+<DT><B>start-kbd-macro (C-x ()</B>
+
+<DD>
+Begin saving the characters typed into the current keyboard macro.
+<DT><B>end-kbd-macro (C-x ))</B>
+
+<DD>
+Stop saving the characters typed into the current keyboard macro
+and store the definition.
+<DT><B>call-last-kbd-macro (C-x e)</B>
+
+<DD>
+Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+<DT><B>print-last-kbd-macro ()</B>
+
+<DD>
+Print the last keyboard macro defined in a format suitable for the
+<I>inputrc</I> file.
+
+</DL>
+<A NAME="lbCU">&nbsp;</A>
+<H4>Miscellaneous</H4>
+
+<P>
+
+
+<DL COMPACT>
+<DT><B>re-read-init-file (C-x C-r)</B>
+
+<DD>
+Read in the contents of the <I>inputrc</I> file, and incorporate
+any bindings or variable assignments found there.
+<DT><B>abort (C-g)</B>
+
+<DD>
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+<B>bell-style</B>).
+
+<DT><B>do-lowercase-version (M-A, M-B, M-</B><I>x</I>, ...)
+
+<DD>
+If the metafied character <I>x</I> is uppercase, run the command
+that is bound to the corresponding metafied lowercase character.
+The behavior is undefined if <I>x</I> is already lowercase.
+<DT><B>prefix-meta (ESC)</B>
+
+<DD>
+Metafy the next character typed.
+<FONT SIZE=-1><B>ESC</B>
+
+</FONT>
+<B>f</B>
+
+is equivalent to
+<B>Meta-f</B>.
+
+<DT><B>undo (C-_, C-x C-u)</B>
+
+<DD>
+Incremental undo, separately remembered for each line.
+<DT><B>revert-line (M-r)</B>
+
+<DD>
+Undo all changes made to this line. This is like executing the
+<B>undo</B>
+
+command enough times to return the line to its initial state.
+<DT><B>tilde-expand (M-&amp;)</B>
+
+<DD>
+Perform tilde expansion on the current word.
+<DT><B>set-mark (C-@, M-&lt;space&gt;)</B>
+
+<DD>
+Set the mark to the point. If a
+numeric argument is supplied, the mark is set to that position.
+<DT><B>exchange-point-and-mark (C-x C-x)</B>
+
+<DD>
+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.
+<DT><B>character-search (C-])</B>
+
+<DD>
+A character is read and point is moved to the next occurrence of that
+character. A negative count searches for previous occurrences.
+<DT><B>character-search-backward (M-C-])</B>
+
+<DD>
+A character is read and point is moved to the previous occurrence of that
+character. A negative count searches for subsequent occurrences.
+<DT><B>skip-csi-sequence</B>
+
+<DD>
+Read enough characters to consume a multi-key sequence such as those
+defined for keys like Home and End. Such sequences begin with a
+Control Sequence Indicator (CSI), usually ESC-[. If this sequence is
+bound to &quot;\[&quot;, keys producing such sequences will have no effect
+unless explicitly bound to a readline command, instead of inserting
+stray characters into the editing buffer. This is unbound by default,
+but usually bound to ESC-[.
+<DT><B>insert-comment (M-#)</B>
+
+<DD>
+Without a numeric argument, the value of the readline
+<B>comment-begin</B>
+
+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 <B>comment-begin</B>, the value is inserted, otherwise
+the characters in <B>comment-begin</B> 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
+<B>comment-begin</B> 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.
+<DT><B>glob-complete-word (M-g)</B>
+
+<DD>
+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 filenames for possible completions.
+<DT><B>glob-expand-word (C-x *)</B>
+
+<DD>
+The word before point is treated as a pattern for pathname expansion,
+and the list of matching filenames is inserted, replacing the word.
+If a numeric argument is supplied, an asterisk is appended before
+pathname expansion.
+<DT><B>glob-list-expansions (C-x g)</B>
+
+<DD>
+The list of expansions that would have been generated by
+<B>glob-expand-word</B>
+
+is displayed, and the line is redrawn.
+If a numeric argument is supplied, an asterisk is appended before
+pathname expansion.
+<DT><B>dump-functions</B>
+
+<DD>
+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 <I>inputrc</I> file.
+<DT><B>dump-variables</B>
+
+<DD>
+Print all of the settable readline 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 <I>inputrc</I> file.
+<DT><B>dump-macros</B>
+
+<DD>
+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 <I>inputrc</I> file.
+<DT><B>display-shell-version (C-x C-v)</B>
+
+<DD>
+Display version information about the current instance of
+<B>bash</B>.
+
+
+</DL>
+<A NAME="lbCV">&nbsp;</A>
+<H4>Programmable Completion</H4>
+
+<P>
+
+When word completion is attempted for an argument to a command for
+which a completion specification (a <I>compspec</I>) has been defined
+using the <B>complete</B> builtin (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below), the programmable completion facilities are invoked.
+<P>
+
+First, the command name is identified.
+If the command word is the empty string (completion attempted at the
+beginning of an empty line), any compspec defined with
+the <B>-E</B> option to <B>complete</B> is used.
+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.
+If those searches do not result in a compspec, any compspec defined with
+the <B>-D</B> option to <B>complete</B> is used as the default.
+If there is no default compspec, <B>bash</B> attempts alias expansion
+on the command word as a final resort, and attempts to find a compspec
+for the command word from any successful expansion.
+<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 <B>bash</B> completion as
+described above under <B>Completing</B> is performed.
+<P>
+
+First, the actions specified by the compspec are used.
+Only matches which are prefixed by the word being completed are
+returned.
+When the
+<B>-f</B>
+
+or
+<B>-d</B>
+
+option is used for filename or directory name completion, the shell
+variable
+<FONT SIZE=-1><B>FIGNORE</B>
+
+</FONT>
+is used to filter the matches.
+<P>
+
+Any completions specified by a pathname expansion pattern to the
+<B>-G</B> option are generated next.
+The words generated by the pattern need not match the word
+being completed.
+The
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+shell variable is not used to filter the matches, but the
+<FONT SIZE=-1><B>FIGNORE</B>
+
+</FONT>
+variable is used.
+<P>
+
+Next, the string specified as the argument to the <B>-W</B> option
+is considered.
+The string is first split using the characters in the
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+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 under
+<FONT SIZE=-1><B>EXPANSION</B>.
+
+</FONT>
+The results are split using the rules described above under
+<B>Word Splitting</B>.
+The results of the expansion are prefix-matched against the word being
+completed, and the matching words become the possible completions.
+<P>
+
+After these matches have been generated, any shell function or command
+specified with the <B>-F</B> and <B>-C</B> options is invoked.
+When the command or function is invoked, the
+<FONT SIZE=-1><B>COMP_LINE</B>,
+
+</FONT>
+<FONT SIZE=-1><B>COMP_POINT</B>,
+
+</FONT>
+<FONT SIZE=-1><B>COMP_KEY</B>,
+
+</FONT>
+and
+<FONT SIZE=-1><B>COMP_TYPE</B>
+
+</FONT>
+variables are assigned values as described above under
+<B>Shell Variables</B>.
+If a shell function is being invoked, the
+<FONT SIZE=-1><B>COMP_WORDS</B>
+
+</FONT>
+and
+<FONT SIZE=-1><B>COMP_CWORD</B>
+
+</FONT>
+variables are also set.
+When the function or command is invoked,
+the first argument (<B>$1</B>) is the name of the command whose arguments are
+being completed,
+the second argument (<B>$2</B>) is the word being completed,
+and the third argument (<B>$3</B>) 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>
+
+Any function specified with <B>-F</B> is invoked first.
+The function may use any of the shell facilities, including the
+<B>compgen</B> builtin described below, to generate the matches.
+It must put the possible completions in the
+<FONT SIZE=-1><B>COMPREPLY</B>
+
+</FONT>
+array variable, one per array element.
+<P>
+
+Next, any command specified with the <B>-C</B> 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>
+
+After all of the possible completions are generated, any filter
+specified with the <B>-X</B> option is applied to the list.
+The filter is a pattern as used for pathname expansion; a <B>&amp;</B>
+in the pattern is replaced with the text of the word being completed.
+A literal <B>&amp;</B> 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 <B>!</B> negates the pattern; in this case any completion
+not matching the pattern will be removed.
+If the
+<B>nocasematch</B>
+
+shell option is enabled, the match is performed without regard to the case
+of alphabetic characters.
+<P>
+
+Finally, any prefix and suffix specified with the <B>-P</B> and <B>-S</B>
+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>
+
+If the previously-applied actions do not generate any matches, and the
+<B>-o dirnames</B> option was supplied to <B>complete</B> when the
+compspec was defined, directory name completion is attempted.
+<P>
+
+If the <B>-o plusdirs</B> option was supplied to <B>complete</B> when the
+compspec was defined, directory name completion is attempted and any
+matches are added to the results of the other actions.
+<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 <B>bash</B> completions are not attempted, and the readline
+default of filename completion is disabled.
+If the <B>-o bashdefault</B> option was supplied to <B>complete</B> when
+the compspec was defined, the <B>bash</B> default completions are attempted
+if the compspec generates no matches.
+If the <B>-o default</B> option was supplied to <B>complete</B> when the
+compspec was defined, readline's default completion will be performed
+if the compspec (and, if attempted, the default <B>bash</B> completions)
+generate no matches.
+<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 <B>mark-directories</B> readline variable, regardless
+of the setting of the <B>mark-symlinked-directories</B> readline variable.
+<P>
+
+There is some support for dynamically modifying completions. This is
+most useful when used in combination with a default completion specified
+with <B>complete -D</B>.
+It's possible for shell functions executed as completion
+handlers to indicate that completion should be retried by returning an
+exit status of 124. If a shell function returns 124, and changes
+the compspec associated with the command on which completion is being
+attempted (supplied as the first argument when the function is executed),
+programmable completion restarts from the beginning, with an
+attempt to find a new compspec for that command. This allows a set of
+completions to be built dynamically as completion is attempted, rather than
+being loaded all at once.
+<P>
+
+For instance, assuming that there is a library of compspecs, each kept in a
+file corresponding to the name of the command, the following default
+completion function would load completions dynamically:
+<P>
+
+<TT>_completion_loader()
+<BR>
+
+{
+<BR>
+
+<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TT>. &quot;/etc/bash_completion.d/$1.sh&quot; &gt;/dev/null 2&gt;&amp;1 &amp;&amp; return 124<BR>
+<BR>
+
+}
+<BR>
+
+complete -D -F _completion_loader -o bashdefault -o default
+<BR>
+
+</TT>
+<A NAME="lbCW">&nbsp;</A>
+<H3>HISTORY</H3>
+
+When the
+<B>-o history</B>
+
+option to the
+<B>set</B>
+
+builtin is enabled, the shell provides access to the
+<I>command history</I>,
+the list of commands previously typed.
+The value of the
+<FONT SIZE=-1><B>HISTSIZE</B>
+
+</FONT>
+variable is used as the
+number of commands to save in a history list.
+The text of the last
+<FONT SIZE=-1><B>HISTSIZE</B>
+
+</FONT>
+commands (default 500) is saved. The shell
+stores each command in the history list prior to parameter and
+variable expansion (see
+<FONT SIZE=-1><B>EXPANSION</B>
+
+</FONT>
+above) but after history expansion is performed, subject to the
+values of the shell variables
+<FONT SIZE=-1><B>HISTIGNORE</B>
+
+</FONT>
+and
+<FONT SIZE=-1><B>HISTCONTROL</B>.
+
+</FONT>
+<P>
+
+On startup, the history is initialized from the file named by
+the variable
+<FONT SIZE=-1><B>HISTFILE</B>
+
+</FONT>
+(default <A HREF="file:~/.bash_history"><I>~/.bash_history</I></A>).
+The file named by the value of
+<FONT SIZE=-1><B>HISTFILE</B>
+
+</FONT>
+is truncated, if necessary, to contain no more than
+the number of lines specified by the value of
+<FONT SIZE=-1><B>HISTFILESIZE</B>.
+
+</FONT>
+If <B>HISTFILESIZE</B> is unset, or set to null, a non-numeric value,
+or a numeric value less than zero, the history file is not truncated.
+When the history file is read,
+lines beginning with the history comment character followed immediately
+by a digit are interpreted as timestamps for the following history line.
+These timestamps are optionally displayed depending on the value of the
+<FONT SIZE=-1><B>HISTTIMEFORMAT</B>
+
+</FONT>
+variable.
+When a shell with history enabled exits, the last
+<FONT SIZE=-1><B>$HISTSIZE</B>
+
+</FONT>
+lines are copied from the history list to
+<FONT SIZE=-1><B>$HISTFILE</B>.
+
+</FONT>
+If the
+<B>histappend</B>
+
+shell option is enabled
+(see the description of
+<B>shopt</B>
+
+under
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below), the lines are appended to the history file,
+otherwise the history file is overwritten.
+If
+<FONT SIZE=-1><B>HISTFILE</B>
+
+</FONT>
+is unset, or if the history file is unwritable, the history is
+not saved.
+If the
+<FONT SIZE=-1><B>HISTTIMEFORMAT</B>
+
+</FONT>
+variable is set, time stamps are written to the history file, marked
+with the history comment character, so
+they may be preserved across shell sessions.
+This uses the history comment character to distinguish timestamps from
+other history lines.
+After saving the history, the history file is truncated
+to contain no more than
+<FONT SIZE=-1><B>HISTFILESIZE</B>
+
+</FONT>
+lines. If
+<FONT SIZE=-1><B>HISTFILESIZE</B>
+
+</FONT>
+is unset, or set to null, a non-numeric value,
+or a numeric value less than zero, the history file is not truncated.
+<P>
+
+The builtin command
+<B>fc</B>
+
+(see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below) may be used to list or edit and re-execute a portion of
+the history list.
+The
+<B>history</B>
+
+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.
+<P>
+
+The shell allows control over which commands are saved on the history
+list. The
+<FONT SIZE=-1><B>HISTCONTROL</B>
+
+</FONT>
+and
+<FONT SIZE=-1><B>HISTIGNORE</B>
+
+</FONT>
+variables may be set to cause the shell to save only a subset of the
+commands entered.
+The
+<B>cmdhist</B>
+
+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
+<B>lithist</B>
+
+shell option causes the shell to save the command with embedded newlines
+instead of semicolons. See the description of the
+<B>shopt</B>
+
+builtin below under
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+for information on setting and unsetting shell options.
+<A NAME="lbCX">&nbsp;</A>
+<H3>HISTORY EXPANSION</H3>
+
+<P>
+
+The shell supports a history expansion feature that
+is similar to the history expansion in
+<B>csh</B>.
+
+This section describes what syntax features are available. This
+feature is enabled by default for interactive shells, and can be
+disabled using the
+<B>+H</B>
+
+option to the
+<B>set</B>
+
+builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below). Non-interactive shells do not perform history expansion
+by default.
+<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>
+
+History expansion is performed immediately after a complete line
+is read, before the shell breaks it into words, and is performed
+on each line individually without taking quoting on previous lines into
+account.
+It takes place in two parts.
+The first is to determine which line from the history list
+to use during substitution.
+The second is to select portions of that line for inclusion into
+the current one.
+The line selected from the history is the <I>event</I>,
+and the portions of that line that are acted upon are <I>words</I>.
+Various <I>modifiers</I> are available to manipulate the selected words.
+The line is broken into words in the same fashion as when reading input,
+so that several <I>metacharacter</I>-separated words surrounded by
+quotes are considered one word.
+History expansions are introduced by the appearance of the
+history expansion character, which is <B>!</B> by default.
+Only backslash (<B>\</B>) and single quotes can quote
+the history expansion character, but the history expansion character is
+also treated as quoted if it immediately precedes the closing double quote
+in a double-quoted string.
+<P>
+
+Several characters inhibit history expansion if found immediately
+following the history expansion character, even if it is unquoted:
+space, tab, newline, carriage return, and <B>=</B>.
+If the <B>extglob</B> shell option is enabled, <B>(</B> will also
+inhibit expansion.
+<P>
+
+Several shell options settable with the
+<B>shopt</B>
+
+builtin may be used to tailor the behavior of history expansion.
+If the
+<B>histverify</B>
+
+shell option is enabled (see the description of the
+<B>shopt</B>
+
+builtin below), and
+<B>readline</B>
+
+is being used, history substitutions are not immediately passed to
+the shell parser.
+Instead, the expanded line is reloaded into the
+<B>readline</B>
+
+editing buffer for further modification.
+If
+<B>readline</B>
+
+is being used, and the
+<B>histreedit</B>
+
+shell option is enabled, a failed history substitution will be reloaded
+into the
+<B>readline</B>
+
+editing buffer for correction.
+The
+<B>-p</B>
+
+option to the
+<B>history</B>
+
+builtin command may be used to see what a history expansion will
+do before using it.
+The
+<B>-s</B>
+
+option to the
+<B>history</B>
+
+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.
+<P>
+
+The shell allows control of the various characters used by the
+history expansion mechanism (see the description of
+<B>histchars</B>
+
+above under
+<B>Shell Variables</B>).
+
+The shell uses
+the history comment character to mark history timestamps when
+writing the history file.
+<A NAME="lbCY">&nbsp;</A>
+<H4>Event Designators</H4>
+
+<P>
+
+An event designator is a reference to a command line entry in the
+history list.
+Unless the reference is absolute, events are relative to the current
+position in the history list.
+<P>
+
+
+<DL COMPACT>
+<DT><B>!</B>
+
+<DD>
+Start a history substitution, except when followed by a
+<B>blank</B>,
+
+newline, carriage return, =
+or ( (when the <B>extglob</B> shell option is enabled using
+the <B>shopt</B> builtin).
+<DT><B>!</B><I>n</I>
+
+<DD>
+Refer to command line
+<I>n</I>.
+
+<DT><B>!-</B><I>n</I>
+
+<DD>
+Refer to the current command minus
+<I>n</I>.
+
+<DT><B>!!</B>
+
+<DD>
+Refer to the previous command. This is a synonym for `!-1'.
+<DT><B>!</B><I>string</I>
+
+<DD>
+Refer to the most recent command preceding the current position in the
+history list starting with
+<I>string</I>.
+
+<DT><B>!?</B><I>string</I><B>[?]</B>
+
+<DD>
+Refer to the most recent command preceding the current position in the
+history list containing
+<I>string</I>.
+
+The trailing <B>?</B> may be omitted if
+<I>string</I>
+
+is followed immediately by a newline.
+<DT><B></B><FONT SIZE=+2><B>^</B></FONT><B></B><I>string1</I><FONT SIZE=+2>^</FONT><I>string2</I><FONT SIZE=+2>^</FONT>
+
+<DD>
+Quick substitution. Repeat the previous command, replacing
+<I>string1</I>
+
+with
+<I>string2</I>.
+
+Equivalent to
+``!!:s/<I>string1</I>/<I>string2</I>/''
+(see <B>Modifiers</B> below).
+<DT><B>!#</B>
+
+<DD>
+The entire command line typed so far.
+
+</DL>
+<A NAME="lbCZ">&nbsp;</A>
+<H4>Word Designators</H4>
+
+<P>
+
+Word designators are used to select desired words from the event.
+A
+<B>:</B>
+
+separates the event specification from the word designator.
+It may be omitted if the word designator begins with a
+<B>^</B>,
+
+<B>$</B>,
+
+<B>*</B>,
+
+<B>-</B>,
+
+or
+<B>%</B>.
+
+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>
+
+
+<DL COMPACT>
+<DT><B>0 (zero)</B>
+
+<DD>
+The zeroth word. For the shell, this is the command
+word.
+<DT><I>n</I>
+
+<DD>
+The <I>n</I>th word.
+<DT><B>^</B>
+
+<DD>
+The first argument. That is, word 1.
+<DT><B>$</B>
+
+<DD>
+The last word. This is usually the last argument, but will expand to the
+zeroth word if there is only one word in the line.
+<DT><B>%</B>
+
+<DD>
+The word matched by the most recent `?<I>string</I>?' search.
+<DT><I>x</I><B>-</B>y
+
+<DD>
+A range of words; `-<I>y</I>' abbreviates `0-<I>y</I>'.
+<DT><B>*</B>
+
+<DD>
+All of the words but the zeroth. This is a synonym
+for `<I>1-$</I>'. It is not an error to use
+<B>*</B>
+
+if there is just one
+word in the event; the empty string is returned in that case.
+<DT><B>x*</B>
+
+<DD>
+Abbreviates <I>x-$</I>.
+<DT><B>x-</B>
+
+<DD>
+Abbreviates <I>x-$</I> like <B>x*</B>, but omits the last word.
+
+</DL>
+<P>
+
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+<A NAME="lbDA">&nbsp;</A>
+<H4>Modifiers</H4>
+
+<P>
+
+After the optional word designator, there may appear a sequence of
+one or more of the following modifiers, each preceded by a `:'.
+<P>
+
+
+<P>
+
+<DL COMPACT>
+<DT><B>h</B>
+
+<DD>
+Remove a trailing filename component, leaving only the head.
+<DT><B>t</B>
+
+<DD>
+Remove all leading filename components, leaving the tail.
+<DT><B>r</B>
+
+<DD>
+Remove a trailing suffix of the form <I>.xxx</I>, leaving the
+basename.
+<DT><B>e</B>
+
+<DD>
+Remove all but the trailing suffix.
+<DT><B>p</B>
+
+<DD>
+Print the new command but do not execute it.
+<DT><B>q</B>
+
+<DD>
+Quote the substituted words, escaping further substitutions.
+<DT><B>x</B>
+
+<DD>
+Quote the substituted words as with
+<B>q</B>,
+
+but break into words at
+<B>blanks</B>
+
+and newlines.
+<DT><B>s/</B><I>old</I>/<I>new</I>/
+
+<DD>
+Substitute
+<I>new</I>
+
+for the first occurrence of
+<I>old</I>
+
+in the event line. Any delimiter can be used in place of /. The
+final delimiter is optional if it is the last character of the
+event line. The delimiter may be quoted in
+<I>old</I>
+
+and
+<I>new</I>
+
+with a single backslash. If &amp; appears in
+<I>new</I>,
+
+it is replaced by
+<I>old</I>.
+
+A single backslash will quote the &amp;. If
+<I>old</I>
+
+is null, it is set to the last
+<I>old</I>
+
+substituted, or, if no previous history substitutions took place,
+the last
+<I>string</I>
+
+in a
+<B>!?</B><I>string</I><B>[?]</B>
+
+search.
+<DT><B>&amp;</B>
+
+<DD>
+Repeat the previous substitution.
+<DT><B>g</B>
+
+<DD>
+Cause changes to be applied over the entire event line. This is
+used in conjunction with `<B>:s</B>' (e.g., `<B>:gs/</B><I>old</I>/<I>new</I>/')
+or `<B>:&amp;</B>'. If used with
+`<B>:s</B>', any delimiter can be used
+in place of /, and the final delimiter is optional
+if it is the last character of the event line.
+An <B>a</B> may be used as a synonym for <B>g</B>.
+<DT><B>G</B>
+
+<DD>
+Apply the following `<B>s</B>' modifier once to each word in the event line.
+
+</DL>
+<A NAME="lbDB">&nbsp;</A>
+<H3>SHELL BUILTIN COMMANDS</H3>
+
+
+
+<P>
+
+Unless otherwise noted, each builtin command documented in this
+section as accepting options preceded by
+<B>-</B>
+
+accepts
+<B>--</B>
+
+to signify the end of the options.
+The <B>:</B>, <B>true</B>, <B>false</B>, and <B>test</B>/<B>[</B> builtins
+do not accept options and do not treat <B>--</B> specially.
+The <B>exit</B>, <B>logout</B>, <B>return</B>,
+<B>break</B>, <B>continue</B>, <B>let</B>,
+and <B>shift</B> builtins accept and process arguments beginning with
+<B>-</B> without requiring <B>--</B>.
+Other builtins that accept arguments but are not specified as accepting
+options interpret arguments beginning with <B>-</B> as invalid options and
+require <B>--</B> to prevent this interpretation.
+<P>
+
+<DL COMPACT>
+<DT><B>:</B> [<I>arguments</I>]<DD>
+
+No effect; the command does nothing beyond expanding
+<I>arguments</I>
+
+and performing any specified
+redirections.
+The return status is zero.
+<DT><B> . </B> <I>filename</I> [<I>arguments</I>]<DD>
+
+<DT><B>source</B> <I>filename</I> [<I>arguments</I>]<DD>
+
+Read and execute commands from
+<I>filename</I>
+
+in the current
+shell environment and return the exit status of the last command
+executed from
+<I>filename</I>.
+
+If
+<I>filename</I>
+
+does not contain a slash, filenames in
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+are used to find the directory containing
+<I>filename</I>.
+
+The file searched for in
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+need not be executable.
+When <B>bash</B> is not in <I>posix mode</I>, the current directory is
+searched if no file is found in
+<FONT SIZE=-1><B>PATH</B>.
+
+</FONT>
+If the
+<B>sourcepath</B>
+
+option to the
+<B>shopt</B>
+
+builtin command is turned off, the
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+is not searched.
+If any <I>arguments</I> are supplied, they become the positional
+parameters when <I>filename</I> is executed. Otherwise the positional
+parameters are unchanged.
+If the <B>-T</B> option is enabled, <B>source</B> inherits any trap on
+<B>DEBUG</B>; if it is not, any <B>DEBUG</B> trap string is saved and
+restored around the call to <B>source</B>, and <B>source</B> unsets the
+<B>DEBUG</B> trap while it executes.
+If <B>-T</B> is not set, and the sourced file changes
+the <B>DEBUG</B> trap, the new value is retained when <B>source</B> completes.
+The return status is the status of the last command exited within
+the script (0 if no commands are executed), and false if
+<I>filename</I>
+
+is not found or cannot be read.
+<DT><B>alias</B> [<B>-p</B>] [<I>name</I>[=<I>value</I>] ...]<DD>
+<B>Alias</B> with no arguments or with the
+<B>-p</B>
+
+option prints the list of aliases in the form
+<B>alias</B> <I>name</I>=<I>value</I> on standard output.
+When arguments are supplied, an alias is defined for
+each <I>name</I> whose <I>value</I> is given.
+A trailing space in <I>value</I> causes the next word to be
+checked for alias substitution when the alias is expanded.
+For each <I>name</I> in the argument list for which no <I>value</I>
+is supplied, the name and value of the alias is printed.
+<B>Alias</B> returns true unless a <I>name</I> is given for which
+no alias has been defined.
+<DT><B>bg</B> [<I>jobspec</I> ...]<DD>
+Resume each suspended job <I>jobspec</I> in the background, as if it
+had been started with
+<B>&amp;</B>.
+
+If
+<I>jobspec</I>
+
+is not present, the shell's notion of the <I>current job</I> is used.
+<B>bg</B>
+
+<I>jobspec</I>
+
+returns 0 unless run when job control is disabled or, when run with
+job control enabled, any specified <I>jobspec</I> was not found
+or was started without job control.
+<DT><B>bind</B> [<B>-m</B> <I>keymap</I>] [<B>-lpsvPSVX</B>]<DD>
+
+<DT><B>bind</B> [<B>-m</B> <I>keymap</I>] [<B>-q</B> <I>function</I>] [<B>-u</B> <I>function</I>] [<B>-r</B> <I>keyseq</I>]<DD>
+<DT><B>bind</B> [<B>-m</B> <I>keymap</I>] <B>-f</B> <I>filename</I><DD>
+<DT><B>bind</B> [<B>-m</B> <I>keymap</I>] <B>-x</B> <I>keyseq</I>:<I>shell-command</I><DD>
+<DT><B>bind</B> [<B>-m</B> <I>keymap</I>] <I>keyseq</I>:<I>function-name</I><DD>
+<DT><B>bind</B> [<B>-m</B> <I>keymap</I>] <I>keyseq</I>:<I>readline-command</I><DD>
+
+Display current
+<B>readline</B>
+
+key and function bindings, bind a key sequence to a
+<B>readline</B>
+
+function or macro, or set a
+<B>readline</B>
+
+variable.
+Each non-option argument is a command as it would appear in
+<I>.inputrc</I>,
+
+but each binding or command must be passed as a separate argument;
+e.g., '&quot;\C-x\C-r&quot;: re-read-init-file'.
+Options, if supplied, have the following meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-m </B><I>keymap</I>
+
+<DD>
+Use
+<I>keymap</I>
+
+as the keymap to be affected by the subsequent bindings.
+Acceptable
+<I>keymap</I>
+
+names are
+<I>emacs, emacs-standard, emacs-meta, emacs-ctlx, vi,
+vi-move, vi-command</I>, and
+<I>vi-insert</I>.
+
+<I>vi</I> is equivalent to <I>vi-command</I> (<I>vi-move</I> is also
+a synonym); <I>emacs</I> is
+equivalent to <I>emacs-standard</I>.
+<DT><B>-l</B>
+
+<DD>
+List the names of all <B>readline</B> functions.
+<DT><B>-p</B>
+
+<DD>
+Display <B>readline</B> function names and bindings in such a way
+that they can be re-read.
+<DT><B>-P</B>
+
+<DD>
+List current <B>readline</B> function names and bindings.
+<DT><B>-s</B>
+
+<DD>
+Display <B>readline</B> key sequences bound to macros and the strings
+they output in such a way that they can be re-read.
+<DT><B>-S</B>
+
+<DD>
+Display <B>readline</B> key sequences bound to macros and the strings
+they output.
+<DT><B>-v</B>
+
+<DD>
+Display <B>readline</B> variable names and values in such a way that they
+can be re-read.
+<DT><B>-V</B>
+
+<DD>
+List current <B>readline</B> variable names and values.
+<DT><B>-f </B><I>filename</I>
+
+<DD>
+Read key bindings from <I>filename</I>.
+<DT><B>-q </B><I>function</I>
+
+<DD>
+Query about which keys invoke the named <I>function</I>.
+<DT><B>-u </B><I>function</I>
+
+<DD>
+Unbind all keys bound to the named <I>function</I>.
+<DT><B>-r </B><I>keyseq</I>
+
+<DD>
+Remove any current binding for <I>keyseq</I>.
+<DT><B>-x </B><I>keyseq</I>:<I>shell-command</I>
+
+<DD>
+Cause <I>shell-command</I> to be executed whenever <I>keyseq</I> is
+entered.
+When <I>shell-command</I> is executed, the shell sets the
+<FONT SIZE=-1><B>READLINE_LINE</B>
+
+</FONT>
+variable to the contents of the <B>readline</B> line buffer and the
+<FONT SIZE=-1><B>READLINE_POINT</B>
+
+</FONT>
+variable to the current location of the insertion point.
+If the executed command changes the value of
+<FONT SIZE=-1><B>READLINE_LINE</B>
+
+</FONT>
+or
+<FONT SIZE=-1><B>READLINE_POINT</B>,
+
+</FONT>
+those new values will be reflected in the editing state.
+<DT><B>-X</B>
+
+<DD>
+List all key sequences bound to shell commands and the associated commands
+in a format that can be reused as input.
+
+</DL>
+<P>
+
+The return value is 0 unless an unrecognized option is given or an
+error occurred.
+</DL>
+
+<DT><B>break</B> [<I>n</I>]<DD>
+Exit from within a
+<B>for</B>,
+
+<B>while</B>,
+
+<B>until</B>,
+
+or
+<B>select</B>
+
+loop. If <I>n</I> is specified, break <I>n</I> levels.
+<I>n</I>
+
+must be >= 1. If
+<I>n</I>
+
+is greater than the number of enclosing loops, all enclosing loops
+are exited.
+The return value is 0 unless <I>n</I> is not greater than or equal to 1.
+<DT><B>builtin</B> <I>shell-builtin</I> [<I>arguments</I>]<DD>
+Execute the specified shell builtin, passing it
+<I>arguments</I>,
+
+and return its exit status.
+This is useful when defining a
+function whose name is the same as a shell builtin,
+retaining the functionality of the builtin within the function.
+The <B>cd</B> builtin is commonly redefined this way.
+The return status is false if
+<I>shell-builtin</I>
+
+is not a shell builtin command.
+<DT><B>caller</B> [<I>expr</I>]<DD>
+Returns the context of any active subroutine call (a shell function or
+a script executed with the <B>.</B> or <B>source</B> builtins).
+Without <I>expr</I>, <B>caller</B> displays the line number and source
+filename of the current subroutine call.
+If a non-negative integer is supplied as <I>expr</I>, <B>caller</B>
+displays the line number, subroutine name, and source file corresponding
+to that position in the current execution call stack. This extra
+information may be used, for example, to print a stack trace. The
+current frame is frame 0.
+The return value is 0 unless the shell is not executing a subroutine
+call or <I>expr</I> does not correspond to a valid position in the
+call stack.
+<DT><B>cd</B> [<B>-L</B>|[<B>-P</B> [<B>-e</B>]] [-@]] [<I>dir</I>]<DD>
+Change the current directory to <I>dir</I>.
+if <I>dir</I> is not supplied, the value of the
+<FONT SIZE=-1><B>HOME</B>
+
+</FONT>
+shell variable is the default.
+Any additional arguments following <I>dir</I> are ignored.
+The variable
+<FONT SIZE=-1><B>CDPATH</B>
+
+</FONT>
+defines the search path for the directory containing
+<I>dir</I>:
+
+each directory name in
+<FONT SIZE=-1><B>CDPATH</B>
+
+</FONT>
+is searched for <I>dir</I>.
+Alternative directory names in
+<FONT SIZE=-1><B>CDPATH</B>
+
+</FONT>
+are separated by a colon (:). A null directory name in
+<FONT SIZE=-1><B>CDPATH</B>
+
+</FONT>
+is the same as the current directory, i.e., ``<B>.</B>''. If
+<I>dir</I>
+
+begins with a slash (/),
+then
+<FONT SIZE=-1><B>CDPATH</B>
+
+</FONT>
+is not used. The
+<B>-P</B>
+
+option causes <B>cd</B> to use the physical directory structure
+by resolving symbolic links while traversing <I>dir</I> and
+before processing instances of <I>..</I> in <I>dir</I> (see also the
+<B>-P</B>
+
+option to the
+<B>set</B>
+
+builtin command); the
+<B>-L</B>
+
+option forces symbolic links to be followed by resolving the link
+after processing instances of <I>..</I> in <I>dir</I>.
+If <I>..</I> appears in <I>dir</I>, it is processed by removing the
+immediately previous pathname component from <I>dir</I>, back to a slash
+or the beginning of <I>dir</I>.
+If the
+<B>-e</B>
+
+option is supplied with
+<B>-P</B>,
+
+and the current working directory cannot be successfully determined
+after a successful directory change, <B>cd</B> will return an unsuccessful
+status.
+On systems that support it, the <B>-@</B> option presents the extended
+attributes associated with a file as a directory.
+An argument of
+<B>-</B>
+
+is converted to
+<FONT SIZE=-1><B>$OLDPWD</B>
+
+</FONT>
+before the directory change is attempted.
+If a non-empty directory name from
+<FONT SIZE=-1><B>CDPATH</B>
+
+</FONT>
+is used, or if
+<B>-</B> is the first argument, and the directory change is
+successful, the absolute pathname of the new working directory is
+written to the standard output.
+The return value is true if the directory was successfully changed;
+false otherwise.
+<DT><B>command</B> [<B>-pVv</B>] <I>command</I> [<I>arg</I> ...]<DD>
+Run
+<I>command</I>
+
+with
+<I>args</I>
+
+suppressing the normal shell function lookup.
+Only builtin commands or commands found in the
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+are executed. If the
+<B>-p</B>
+
+option is given, the search for
+<I>command</I>
+
+is performed using a default value for
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+that is guaranteed to find all of the standard utilities.
+If either the
+<B>-V</B>
+
+or
+<B>-v</B>
+
+option is supplied, a description of
+<I>command</I>
+
+is printed. The
+<B>-v</B>
+
+option causes a single word indicating the command or filename
+used to invoke
+<I>command</I>
+
+to be displayed; the
+<B>-V</B>
+
+option produces a more verbose description.
+If the
+<B>-V</B>
+
+or
+<B>-v</B>
+
+option is supplied, the exit status is 0 if
+<I>command</I>
+
+was found, and 1 if not. If neither option is supplied and
+an error occurred or
+<I>command</I>
+
+cannot be found, the exit status is 127. Otherwise, the exit status of the
+<B>command</B>
+
+builtin is the exit status of
+<I>command</I>.
+
+<DT><B>compgen</B> [<I>option</I>] [<I>word</I>]<DD>
+Generate possible completion matches for <I>word</I> according to
+the <I>option</I>s, which may be any option accepted by the
+<B>complete</B>
+
+builtin with the exception of <B>-p</B> and <B>-r</B>, and write
+the matches to the standard output.
+When using the <B>-F</B> or <B>-C</B> options, the various shell variables
+set by the programmable completion facilities, while available, will not
+have useful values.
+<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 <I>word</I> is specified, only those completions matching <I>word</I>
+will be displayed.
+<P>
+The return value is true unless an invalid option is supplied, or no
+matches were generated.
+<DT><B>complete</B> [<B>-abcdefgjksuv</B>] [<B>-o</B> <I>comp-option</I>] [<B>-DEI</B>] [<B>-A</B> <I>action</I>] [<B>-G</B> <I>globpat</I>] [<B>-W</B> <I>wordlist</I>] [<B>-F</B> <I>function</I>] [<B>-C</B> <I>command</I>]<DD>
+<BR>
+
+[<B>-X</B> <I>filterpat</I>] [<B>-P</B> <I>prefix</I>] [<B>-S</B> <I>suffix</I>] <I>name</I> [<I>name ...</I>]
+
+<DT><B>complete</B> <B>-pr</B> [<B>-DEI</B>] [<I>name</I> ...]<DD>
+
+Specify how arguments to each <I>name</I> should be completed.
+If the <B>-p</B> 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 <B>-r</B> option removes a completion specification for
+each <I>name</I>, or, if no <I>name</I>s are supplied, all
+completion specifications.
+The <B>-D</B> option indicates that other supplied options and actions should
+apply to the ``default'' command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The <B>-E</B> option indicates that other supplied options and actions should
+apply to ``empty'' command completion; that is, completion attempted on a
+blank line.
+The <B>-I</B> option indicates that other supplied options and actions should
+apply to completion on the inital non-assignment word on the line, or after
+a command delimiter such as <B>;</B> or <B>|</B>, which is usually command
+name completion.
+If multiple options are supplied, the <B>-D</B> option takes precedence
+over <B>-E</B>, and both take precedence over <B>-I</B>.
+If any of <B>-D</B>, <B>-E</B>, or <B>-I</B> are supplied, any other
+<I>name</I> arguments are ignored; these completions only apply to the case
+specified by the option.
+<P>
+The process of applying these completion specifications when word completion
+is attempted is described above under <B>Programmable Completion</B>.
+<P>
+Other options, if specified, have the following meanings.
+The arguments to the <B>-G</B>, <B>-W</B>, and <B>-X</B> options
+(and, if necessary, the <B>-P</B> and <B>-S</B> options)
+should be quoted to protect them from expansion before the
+<B>complete</B>
+
+builtin is invoked.
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-o</B> <I>comp-option</I><DD>
+The <I>comp-option</I> controls several aspects of the compspec's behavior
+beyond the simple generation of completions.
+<I>comp-option</I> may be one of:
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT><B>bashdefault</B>
+
+<DD>
+Perform the rest of the default <B>bash</B> completions if the compspec
+generates no matches.
+<DT><B>default</B>
+
+<DD>
+Use readline's default filename completion if the compspec generates
+no matches.
+<DT><B>dirnames</B>
+
+<DD>
+Perform directory name completion if the compspec generates no matches.
+<DT><B>filenames</B>
+
+<DD>
+Tell readline that the compspec generates filenames, so it can perform any
+filename-specific processing (like adding a slash to directory names,
+quoting special characters, or suppressing trailing spaces).
+Intended to be used with shell functions.
+<DT><B>noquote</B>
+
+<DD>
+Tell readline not to quote the completed words if they are filenames
+(quoting filenames is the default).
+<DT><B>nosort</B>
+
+<DD>
+Tell readline not to sort the list of possible completions alphabetically.
+<DT><B>nospace</B>
+
+<DD>
+Tell readline not to append a space (the default) to words completed at
+the end of the line.
+<DT><B>plusdirs</B>
+
+<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.
+</DL></DL>
+
+<DT><B>-A</B> <I>action</I><DD>
+The <I>action</I> may be one of the following to generate a list of possible
+completions:
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT><B>alias</B>
+
+<DD>
+Alias names. May also be specified as <B>-a</B>.
+<DT><B>arrayvar</B>
+
+<DD>
+Array variable names.
+<DT><B>binding</B>
+
+<DD>
+<B>Readline</B> key binding names.
+<DT><B>builtin</B>
+
+<DD>
+Names of shell builtin commands. May also be specified as <B>-b</B>.
+<DT><B>command</B>
+
+<DD>
+Command names. May also be specified as <B>-c</B>.
+<DT><B>directory</B>
+
+<DD>
+Directory names. May also be specified as <B>-d</B>.
+<DT><B>disabled</B>
+
+<DD>
+Names of disabled shell builtins.
+<DT><B>enabled</B>
+
+<DD>
+Names of enabled shell builtins.
+<DT><B>export</B>
+
+<DD>
+Names of exported shell variables. May also be specified as <B>-e</B>.
+<DT><B>file</B>
+
+<DD>
+File names. May also be specified as <B>-f</B>.
+<DT><B>function</B>
+
+<DD>
+Names of shell functions.
+<DT><B>group</B>
+
+<DD>
+Group names. May also be specified as <B>-g</B>.
+<DT><B>helptopic</B>
+
+<DD>
+Help topics as accepted by the <B>help</B> builtin.
+<DT><B>hostname</B>
+
+<DD>
+Hostnames, as taken from the file specified by the
+<FONT SIZE=-1><B>HOSTFILE</B>
+
+</FONT>
+shell variable.
+<DT><B>job</B>
+
+<DD>
+Job names, if job control is active. May also be specified as <B>-j</B>.
+<DT><B>keyword</B>
+
+<DD>
+Shell reserved words. May also be specified as <B>-k</B>.
+<DT><B>running</B>
+
+<DD>
+Names of running jobs, if job control is active.
+<DT><B>service</B>
+
+<DD>
+Service names. May also be specified as <B>-s</B>.
+<DT><B>setopt</B>
+
+<DD>
+Valid arguments for the <B>-o</B> option to the <B>set</B> builtin.
+<DT><B>shopt</B>
+
+<DD>
+Shell option names as accepted by the <B>shopt</B> builtin.
+<DT><B>signal</B>
+
+<DD>
+Signal names.
+<DT><B>stopped</B>
+
+<DD>
+Names of stopped jobs, if job control is active.
+<DT><B>user</B>
+
+<DD>
+User names. May also be specified as <B>-u</B>.
+<DT><B>variable</B>
+
+<DD>
+Names of all shell variables. May also be specified as <B>-v</B>.
+</DL></DL>
+
+<DT><B>-C</B> <I>command</I><DD>
+<I>command</I> is executed in a subshell environment, and its output is
+used as the possible completions.
+<DT><B>-F</B> <I>function</I><DD>
+The shell function <I>function</I> is executed in the current shell
+environment.
+When the function is executed,
+the first argument (<B>$1</B>) is the name of the command whose arguments are
+being completed,
+the second argument (<B>$2</B>) is the word being completed,
+and the third argument (<B>$3</B>) is the word preceding the word being
+completed on the current command line.
+When it finishes, the possible completions are retrieved from the value
+of the
+<FONT SIZE=-1><B>COMPREPLY</B>
+
+</FONT>
+array variable.
+<DT><B>-G</B> <I>globpat</I><DD>
+The pathname expansion pattern <I>globpat</I> is expanded to generate
+the possible completions.
+<DT><B>-P</B> <I>prefix</I><DD>
+<I>prefix</I> is added at the beginning of each possible completion
+after all other options have been applied.
+<DT><B>-S</B> <I>suffix</I><DD>
+<I>suffix</I> is appended to each possible completion
+after all other options have been applied.
+<DT><B>-W</B> <I>wordlist</I><DD>
+The <I>wordlist</I> is split using the characters in the
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+special variable as delimiters, and each resultant word is expanded.
+Shell quoting is honored within <I>wordlist</I>,
+in order to provide a
+mechanism for the words to contain shell metacharacters or characters
+in the value of
+<FONT SIZE=-1><B>IFS</B>.
+
+</FONT>
+The possible completions are the members of the resultant list which
+match the word being completed.
+<DT><B>-X</B> <I>filterpat</I><DD>
+<I>filterpat</I> is a pattern as used for pathname expansion.
+It is applied to the list of possible completions generated by the
+preceding options and arguments, and each completion matching
+<I>filterpat</I> is removed from the list.
+A leading <B>!</B> in <I>filterpat</I> negates the pattern; in this
+case, any completion not matching <I>filterpat</I> is removed.
+
+</DL>
+<P>
+
+The return value is true unless an invalid option is supplied, an option
+other than <B>-p</B> or <B>-r</B> is supplied without a <I>name</I>
+argument, an attempt is made to remove a completion specification for
+a <I>name</I> for which no specification exists, or
+an error occurs adding a completion specification.
+</DL>
+
+<DT><B>compopt</B> [<B>-o</B> <I>option</I>] [<B>-DEI</B>] [<B>+o</B> <I>option</I>] [<I>name</I>]<DD>
+Modify completion options for each <I>name</I> according to the
+<I>option</I>s, or for the
+currently-executing completion if no <I>name</I>s are supplied.
+If no <I>option</I>s are given, display the completion options for each
+<I>name</I> or the current completion.
+The possible values of <I>option</I> are those valid for the <B>complete</B>
+builtin described above.
+The <B>-D</B> option indicates that other supplied options should
+apply to the ``default'' command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The <B>-E</B> option indicates that other supplied options should
+apply to ``empty'' command completion; that is, completion attempted on a
+blank line.
+The <B>-I</B> option indicates that other supplied options should
+apply to completion on the inital non-assignment word on the line,
+or after a command delimiter such as <B>;</B> or <B>|</B>, which is usually
+command name completion.
+<P>
+The return value is true unless an invalid option is supplied, an attempt
+is made to modify the options for a <I>name</I> for which no completion
+specification exists, or an output error occurs.
+<DT><B>continue</B> [<I>n</I>]<DD>
+Resume the next iteration of the enclosing
+<B>for</B>,
+
+<B>while</B>,
+
+<B>until</B>,
+
+or
+<B>select</B>
+
+loop.
+If
+<I>n</I>
+
+is specified, resume at the <I>n</I>th enclosing loop.
+<I>n</I>
+
+must be >= 1. If
+<I>n</I>
+
+is greater than the number of enclosing loops, the last enclosing loop
+(the ``top-level'' loop) is resumed.
+The return value is 0 unless <I>n</I> is not greater than or equal to 1.
+<DT><B>declare</B> [<B>-aAfFgilnrtux</B>] [<B>-p</B>] [<I>name</I>[=<I>value</I>] ...]<DD>
+
+<DT><B>typeset</B> [<B>-aAfFgilnrtux</B>] [<B>-p</B>] [<I>name</I>[=<I>value</I>] ...]<DD>
+
+Declare variables and/or give them attributes.
+If no <I>name</I>s are given then display the values of variables.
+The
+<B>-p</B>
+
+option will display the attributes and values of each
+<I>name</I>.
+
+When
+<B>-p</B>
+
+is used with <I>name</I> arguments, additional options,
+other than <B>-f</B> and <B>-F</B>, are ignored.
+When
+<B>-p</B>
+
+is supplied without <I>name</I> arguments, it will display the attributes
+and values of all variables having the attributes specified by the
+additional options.
+If no other options are supplied with <B>-p</B>, <B>declare</B> will display
+the attributes and values of all shell variables. The <B>-f</B> option
+will restrict the display to shell functions.
+The
+<B>-F</B>
+
+option inhibits the display of function definitions; only the
+function name and attributes are printed.
+If the <B>extdebug</B> shell option is enabled using <B>shopt</B>,
+the source file name and line number where each <I>name</I>
+is defined are displayed as well. The
+<B>-F</B>
+
+option implies
+<B>-f</B>.
+
+The
+<B>-g</B>
+
+option forces variables to be created or modified at the global scope,
+even when <B>declare</B> is executed in a shell function.
+It is ignored in all other cases.
+The following options can
+be used to restrict output to variables with the specified attribute or
+to give variables attributes:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-a</B>
+
+<DD>
+Each <I>name</I> is an indexed array variable (see
+<B>Arrays</B>
+
+above).
+<DT><B>-A</B>
+
+<DD>
+Each <I>name</I> is an associative array variable (see
+<B>Arrays</B>
+
+above).
+<DT><B>-f</B>
+
+<DD>
+Use function names only.
+<DT><B>-i</B>
+
+<DD>
+The variable is treated as an integer; arithmetic evaluation (see
+<FONT SIZE=-1><B>ARITHMETIC EVALUATION</B>
+
+</FONT>
+above) is performed when the variable is assigned a value.
+<DT><B>-l</B>
+
+<DD>
+When the variable is assigned a value, all upper-case characters are
+converted to lower-case.
+The upper-case attribute is disabled.
+<DT><B>-n</B>
+
+<DD>
+Give each <I>name</I> the <I>nameref</I> attribute, making
+it a name reference to another variable.
+That other variable is defined by the value of <I>name</I>.
+All references, assignments, and attribute modifications
+to <I>name</I>, except those using or changing the
+<B>-n</B> attribute itself, are performed on the variable referenced by
+<I>name</I>'s value.
+The nameref attribute cannot be applied to array variables.
+<DT><B>-r</B>
+
+<DD>
+Make <I>name</I>s readonly. These names cannot then be assigned values
+by subsequent assignment statements or unset.
+<DT><B>-t</B>
+
+<DD>
+Give each <I>name</I> the <I>trace</I> attribute.
+Traced functions inherit the <B>DEBUG</B> and <B>RETURN</B> traps from
+the calling shell.
+The trace attribute has no special meaning for variables.
+<DT><B>-u</B>
+
+<DD>
+When the variable is assigned a value, all lower-case characters are
+converted to upper-case.
+The lower-case attribute is disabled.
+<DT><B>-x</B>
+
+<DD>
+Mark <I>name</I>s for export to subsequent commands via the environment.
+
+</DL>
+<P>
+
+Using `+' instead of `-'
+turns off the attribute instead,
+with the exceptions that <B>+a</B> and <B>+A</B>
+may not be used to destroy array variables and <B>+r</B> will not
+remove the readonly attribute.
+When used in a function,
+<B>declare</B>
+
+and
+<B>typeset</B>
+
+make each
+<I>name</I> local, as with the
+<B>local</B>
+
+command,
+unless the <B>-g</B> option is supplied.
+If a variable name is followed by =<I>value</I>, the value of
+the variable is set to <I>value</I>.
+When using <B>-a</B> or <B>-A</B> and the compound assignment syntax to
+create array variables, additional attributes do not take effect until
+subsequent assignments.
+The return value is 0 unless an invalid option is encountered,
+an attempt is made to define a function using
+
+<TT>-f foo=bar</TT>,
+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
+<B>Arrays</B>
+
+above), one of the <I>names</I> 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 <B>-f</B>.
+</DL>
+
+<DT><B>dirs [-clpv</B>] [+<I>n</I>] [-<I>n</I>]
+
+<DD>
+Without options, displays the list of currently remembered directories.
+The default display is on a single line with directory names separated
+by spaces.
+Directories are added to the list with the
+<B>pushd</B>
+
+command; the
+<B>popd</B>
+
+command removes entries from the list.
+The current directory is always the first directory in the stack.
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-c</B>
+
+<DD>
+Clears the directory stack by deleting all of the entries.
+<DT><B>-l</B>
+
+<DD>
+Produces a listing using full pathnames;
+the default listing format uses a tilde to denote the home directory.
+<DT><B>-p</B>
+
+<DD>
+Print the directory stack with one entry per line.
+<DT><B>-v</B>
+
+<DD>
+Print the directory stack with one entry per line,
+prefixing each entry with its index in the stack.
+<DT><B>+</B><I>n</I><DD>
+Displays the <I>n</I>th entry counting from the left of the list
+shown by
+<B>dirs</B>
+
+when invoked without options, starting with zero.
+<DT><B>-</B><I>n</I><DD>
+Displays the <I>n</I>th entry counting from the right of the list
+shown by
+<B>dirs</B>
+
+when invoked without options, starting with zero.
+
+</DL>
+<P>
+
+The return value is 0 unless an
+invalid option is supplied or <I>n</I> indexes beyond the end
+of the directory stack.
+</DL>
+
+<DT><B>disown</B> [<B>-ar</B>] [<B>-h</B>] [<I>jobspec</I> ... | <I>pid</I> ... ]<DD>
+Without options, remove each
+<I>jobspec</I>
+
+from the table of active jobs.
+If
+<I>jobspec</I>
+
+is not present, and neither the <B>-a</B> nor the <B>-r</B> option
+is supplied, the <I>current job</I> is used.
+If the <B>-h</B> option is given, each
+<I>jobspec</I>
+
+is not removed from the table, but is marked so that
+<FONT SIZE=-1><B>SIGHUP</B>
+
+</FONT>
+is not sent to the job if the shell receives a
+<FONT SIZE=-1><B>SIGHUP</B>.
+
+</FONT>
+If no
+<I>jobspec</I>
+
+is supplied, the
+<B>-a</B>
+
+option means to remove or mark all jobs; the
+<B>-r</B>
+
+option without a
+<I>jobspec</I>
+
+argument restricts operation to running jobs.
+The return value is 0 unless a
+<I>jobspec</I>
+
+does not specify a valid job.
+<DT><B>echo</B> [<B>-neE</B>] [<I>arg</I> ...]<DD>
+Output the <I>arg</I>s, separated by spaces, followed by a newline.
+The return status is 0 unless a write error occurs.
+If <B>-n</B> is specified, the trailing newline is
+suppressed. If the <B>-e</B> option is given, interpretation of
+the following backslash-escaped characters is enabled. The
+<B>-E</B>
+
+option disables the interpretation of these escape characters,
+even on systems where they are interpreted by default.
+The <B>xpg_echo</B> shell option may be used to
+dynamically determine whether or not <B>echo</B> expands these
+escape characters by default.
+<B>echo</B>
+
+does not interpret <B>--</B> to mean the end of options.
+<B>echo</B>
+
+interprets the following escape sequences:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>\a</B>
+
+<DD>
+alert (bell)
+<DT><B>\b</B>
+
+<DD>
+backspace
+<DT><B>\c</B>
+
+<DD>
+suppress further output
+<DT><B>\e</B>
+
+<DD>
+<DT><B>\E</B>
+
+<DD>
+an escape character
+<DT><B>\f</B>
+
+<DD>
+form feed
+<DT><B>\n</B>
+
+<DD>
+new line
+<DT><B>\r</B>
+
+<DD>
+carriage return
+<DT><B>\t</B>
+
+<DD>
+horizontal tab
+<DT><B>\v</B>
+
+<DD>
+vertical tab
+<DT><B>\\</B>
+
+<DD>
+backslash
+<DT><B>\0</B><I>nnn</I>
+
+<DD>
+the eight-bit character whose value is the octal value <I>nnn</I>
+(zero to three octal digits)
+<DT><B>\x</B><I>HH</I>
+
+<DD>
+the eight-bit character whose value is the hexadecimal value <I>HH</I>
+(one or two hex digits)
+<DT><B>\u</B><I>HHHH</I>
+
+<DD>
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+<I>HHHH</I> (one to four hex digits)
+<DT><B>\U</B><I>HHHHHHHH</I>
+
+<DD>
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+<I>HHHHHHHH</I> (one to eight hex digits)
+
+</DL></DL>
+
+<DT><B>enable</B> [<B>-a</B>] [<B>-dnps</B>] [<B>-f</B> <I>filename</I>] [<I>name</I> ...]<DD>
+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 <B>-n</B> is used, each <I>name</I>
+is disabled; otherwise,
+<I>names</I> are enabled. For example, to use the
+<B>test</B>
+
+binary found via the
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+instead of the shell builtin version, run
+<TT>enable -n test</TT>.
+
+The
+<B>-f</B>
+
+option means to load the new builtin command
+<I>name</I>
+
+from shared object
+<I>filename</I>,
+
+on systems that support dynamic loading. The
+<B>-d</B>
+
+option will delete a builtin previously loaded with
+<B>-f</B>.
+
+If no <I>name</I> arguments are given, or if the
+<B>-p</B>
+
+option is supplied, a list of shell builtins is printed.
+With no other option arguments, the list consists of all enabled
+shell builtins.
+If <B>-n</B> is supplied, only disabled builtins are printed.
+If <B>-a</B> is supplied, the list printed includes all builtins, with an
+indication of whether or not each is enabled.
+If <B>-s</B> is supplied, the output is restricted to the POSIX
+<I>special</I> builtins.
+The return value is 0 unless a
+<I>name</I>
+
+is not a shell builtin or there is an error loading a new builtin
+from a shared object.
+<DT><B>eval</B> [<I>arg</I> ...]<DD>
+The <I>arg</I>s are read and concatenated together into a single
+command. This command is then read and executed by the shell, and
+its exit status is returned as the value of
+<B>eval</B>.
+
+If there are no
+<I>args</I>,
+
+or only null arguments,
+<B>eval</B>
+
+returns 0.
+<DT><B>exec</B> [<B>-cl</B>] [<B>-a</B> <I>name</I>] [<I>command</I> [<I>arguments</I>]]<DD>
+If
+<I>command</I>
+
+is specified, it replaces the shell.
+No new process is created. The
+<I>arguments</I>
+
+become the arguments to <I>command</I>.
+If the
+<B>-l</B>
+
+option is supplied,
+the shell places a dash at the beginning of the zeroth argument passed to
+<I>command</I>.
+
+This is what
+<I>login</I>(1)
+
+does. The
+<B>-c</B>
+
+option causes
+<I>command</I>
+
+to be executed with an empty environment. If
+<B>-a</B>
+
+is supplied, the shell passes
+<I>name</I>
+
+as the zeroth argument to the executed command.
+If
+<I>command</I>
+
+cannot be executed for some reason, a non-interactive shell exits,
+unless the
+<B>execfail</B>
+
+shell option
+is enabled. In that case, it returns failure.
+An interactive shell returns failure if the file cannot be executed.
+A subshell exits unconditionally if <B>exec</B> fails.
+If
+<I>command</I>
+
+is not specified, any redirections take effect in the current shell,
+and the return status is 0. If there is a redirection error, the
+return status is 1.
+<DT><B>exit</B> [<I>n</I>]<DD>
+Cause the shell to exit
+with a status of <I>n</I>. If
+<I>n</I>
+
+is omitted, the exit status
+is that of the last command executed.
+A trap on
+<FONT SIZE=-1><B>EXIT</B>
+
+</FONT>
+is executed before the shell terminates.
+<DT><B>export</B> [<B>-fn</B>] [<I>name</I>[=<I>word</I>]] ...<DD>
+
+<DT><B>export -p</B>
+
+<DD>
+
+The supplied
+<I>names</I>
+
+are marked for automatic export to the environment of
+subsequently executed commands. If the
+<B>-f</B>
+
+option is given, the
+<I>names</I>
+
+refer to functions.
+If no
+<I>names</I>
+
+are given, or if the
+<B>-p</B>
+
+option is supplied, a list
+of names of all exported variables is printed.
+The
+<B>-n</B>
+
+option causes the export property to be removed from each
+<I>name</I>.
+If a variable name is followed by =<I>word</I>, the value of
+the variable is set to <I>word</I>.
+<B>export</B>
+
+returns an exit status of 0 unless an invalid option is
+encountered,
+one of the <I>names</I> is not a valid shell variable name, or
+<B>-f</B>
+
+is supplied with a
+<I>name</I>
+
+that is not a function.
+<DT><B>fc</B> [<B>-e</B> <I>ename</I>] [<B>-lnr</B>] [<I>first</I>] [<I>last</I>]<DD>
+
+<DT><B>fc</B> <B>-s</B> [<I>pat</I>=<I>rep</I>] [<I>cmd</I>]<DD>
+
+The first form selects a range of commands from
+<I>first</I>
+
+to
+<I>last</I>
+
+from the history list and displays or edits and re-executes them.
+<I>First</I>
+
+and
+<I>last</I>
+
+may be specified as a string (to locate the last 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
+<I>last</I>
+
+is not specified, it is set to
+the current command for listing (so that
+
+<TT>fc -l -10</TT>
+prints the last 10 commands) and to
+<I>first</I>
+
+otherwise.
+If
+<I>first</I>
+
+is not specified, it is set to the previous
+command for editing and -16 for listing.
+<P>
+The
+<B>-n</B>
+
+option suppresses
+the command numbers when listing. The
+<B>-r</B>
+
+option reverses the order of
+the commands. If the
+<B>-l</B>
+
+option is given,
+the commands are listed on
+standard output. Otherwise, the editor given by
+<I>ename</I>
+
+is invoked
+on a file containing those commands. If
+<I>ename</I>
+
+is not given, the
+value of the
+<FONT SIZE=-1><B>FCEDIT</B>
+
+</FONT>
+variable is used, and
+the value of
+<FONT SIZE=-1><B>EDITOR</B>
+
+</FONT>
+if
+<FONT SIZE=-1><B>FCEDIT</B>
+
+</FONT>
+is not set. If neither variable is set,
+
+<I>vi</I>
+
+is used. When editing is complete, the edited commands are
+echoed and executed.
+<P>
+In the second form, <I>command</I> is re-executed after each instance
+of <I>pat</I> is replaced by <I>rep</I>.
+<I>Command</I> is interpreted the same as <I>first</I> above.
+A useful alias to use with this is
+
+<TT>r='fc -s'</TT>,
+so that typing
+
+<TT>r cc</TT>
+runs the last command beginning with
+
+<TT>cc</TT>
+and typing
+
+<TT>r</TT>
+re-executes the last command.
+<P>
+If the first form is used, the return value is 0 unless an invalid
+option is encountered or
+<I>first</I>
+
+or
+<I>last</I>
+
+specify history lines out of range.
+If the
+<B>-e</B>
+
+option is supplied, the return value is the value of the last
+command executed or failure if an error occurs with the temporary
+file of commands. If the second form is used, the return status
+is that of the command re-executed, unless
+<I>cmd</I>
+
+does not specify a valid history line, in which case
+<B>fc</B>
+
+returns failure.
+<DT><B>fg</B> [<I>jobspec</I>]<DD>
+Resume
+<I>jobspec</I>
+
+in the foreground, and make it the current job.
+If
+<I>jobspec</I>
+
+is not present, the shell's notion of the <I>current job</I> is used.
+The return value is that of the command placed into the foreground,
+or failure if run when job control is disabled or, when run with
+job control enabled, if
+<I>jobspec</I>
+
+does not specify a valid job or
+<I>jobspec</I>
+
+specifies a job that was started without job control.
+<DT><B>getopts</B> <I>optstring</I> <I>name</I> [<I>args</I>]<DD>
+<B>getopts</B>
+
+is used by shell procedures to parse positional parameters.
+<I>optstring</I>
+
+contains the option characters to be recognized; if a character
+is followed by a colon, the option is expected to have an
+argument, which should be separated from it by white space.
+The colon and question mark characters may not be used as
+option characters.
+Each time it is invoked,
+<B>getopts</B>
+
+places the next option in the shell variable
+<I>name</I>,
+
+initializing
+<I>name</I>
+
+if it does not exist,
+and the index of the next argument to be processed into the
+variable
+<FONT SIZE=-1><B>OPTIND</B>.
+
+</FONT>
+<FONT SIZE=-1><B>OPTIND</B>
+
+</FONT>
+is initialized to 1 each time the shell or a shell script
+is invoked. When an option requires an argument,
+<B>getopts</B>
+
+places that argument into the variable
+<FONT SIZE=-1><B>OPTARG</B>.
+
+</FONT>
+The shell does not reset
+<FONT SIZE=-1><B>OPTIND</B>
+
+</FONT>
+automatically; it must be manually reset between multiple
+calls to
+<B>getopts</B>
+
+within the same shell invocation if a new set of parameters
+is to be used.
+<P>
+When the end of options is encountered, <B>getopts</B> exits with a
+return value greater than zero.
+<FONT SIZE=-1><B>OPTIND</B>
+
+</FONT>
+is set to the index of the first non-option argument,
+and <I>name</I> is set to ?.
+<P>
+<B>getopts</B>
+
+normally parses the positional parameters, but if more arguments are
+given in
+<I>args</I>,
+
+<B>getopts</B>
+
+parses those instead.
+<P>
+<B>getopts</B>
+
+can report errors in two ways. If the first character of
+<I>optstring</I>
+
+is a colon,
+<I>silent</I>
+
+error reporting is used. In normal operation, diagnostic messages
+are printed when invalid options or missing option arguments are
+encountered.
+If the variable
+<FONT SIZE=-1><B>OPTERR</B>
+
+</FONT>
+is set to 0, no error messages will be displayed, even if the first
+character of
+<I>optstring</I>
+
+is not a colon.
+<P>
+If an invalid option is seen,
+<B>getopts</B>
+
+places ? into
+<I>name</I>
+
+and, if not silent,
+prints an error message and unsets
+<FONT SIZE=-1><B>OPTARG</B>.
+
+</FONT>
+If
+<B>getopts</B>
+
+is silent,
+the option character found is placed in
+<FONT SIZE=-1><B>OPTARG</B>
+
+</FONT>
+and no diagnostic message is printed.
+<P>
+If a required argument is not found, and
+<B>getopts</B>
+
+is not silent,
+a question mark (<B>?</B>) is placed in
+<I>name</I>,
+
+<FONT SIZE=-1><B>OPTARG</B>
+
+</FONT>
+is unset, and a diagnostic message is printed.
+If
+<B>getopts</B>
+
+is silent, then a colon (<B>:</B>) is placed in
+<I>name</I>
+
+and
+<FONT SIZE=-1><B>OPTARG</B>
+
+</FONT>
+is set to the option character found.
+<P>
+<B>getopts</B>
+
+returns true if an option, specified or unspecified, is found.
+It returns false if the end of options is encountered or an
+error occurs.
+<DT><B>hash</B> [<B>-lr</B>] [<B>-p</B> <I>filename</I>] [<B>-dt</B>] [<I>name</I>]<DD>
+Each time <B>hash</B> is invoked,
+the full pathname of the command
+<I>name</I>
+
+is determined by searching
+the directories in
+<B>$PATH</B>
+
+and remembered. Any previously-remembered pathname is discarded.
+If the
+<B>-p</B>
+
+option is supplied, no path search is performed, and
+<I>filename</I>
+
+is used as the full filename of the command.
+The
+<B>-r</B>
+
+option causes the shell to forget all
+remembered locations.
+The
+<B>-d</B>
+
+option causes the shell to forget the remembered location of each <I>name</I>.
+If the
+<B>-t</B>
+
+option is supplied, the full pathname to which each <I>name</I> corresponds
+is printed. If multiple <I>name</I> arguments are supplied with <B>-t</B>,
+the <I>name</I> is printed before the hashed full pathname.
+The
+<B>-l</B>
+
+option causes output to be displayed in a format that may be reused as input.
+If no arguments are given, or if only <B>-l</B> is supplied,
+information about remembered commands is printed.
+The return status is true unless a
+<I>name</I>
+
+is not found or an invalid option is supplied.
+<DT><B>help</B> [<B>-dms</B>] [<I>pattern</I>]<DD>
+Display helpful information about builtin commands. If
+<I>pattern</I>
+
+is specified,
+<B>help</B>
+
+gives detailed help on all commands matching
+<I>pattern</I>;
+
+otherwise help for all the builtins and shell control structures
+is printed.
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-d</B>
+
+<DD>
+Display a short description of each <I>pattern</I>
+<DT><B>-m</B>
+
+<DD>
+Display the description of each <I>pattern</I> in a manpage-like format
+<DT><B>-s</B>
+
+<DD>
+Display only a short usage synopsis for each <I>pattern</I>
+
+</DL>
+<P>
+
+The return status is 0 unless no command matches
+<I>pattern</I>.
+
+</DL>
+
+<DT><B>history [</B><I>n</I>]<DD>
+
+<DT><B>history</B> <B>-c</B><DD>
+<DT><B>history -d</B> <I>offset</I><DD>
+<DT><B>history -d</B> <I>start</I>-<I>end</I><DD>
+<DT><B>history</B> <B>-anrw</B> [<I>filename</I>]<DD>
+<DT><B>history</B> <B>-p</B> <I>arg</I> [<I>arg ...</I>]<DD>
+<DT><B>history</B> <B>-s</B> <I>arg</I> [<I>arg ...</I>]<DD>
+
+With no options, display the command
+history list with line numbers. Lines listed
+with a
+<B>*</B>
+
+have been modified. An argument of
+<I>n</I>
+
+lists only the last
+<I>n</I>
+
+lines.
+If the shell variable
+<FONT SIZE=-1><B>HISTTIMEFORMAT</B>
+
+</FONT>
+is set and not null,
+it is used as a format string for <I>strftime</I>(3) 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.
+If <I>filename</I> is supplied, it is used as the
+name of the history file; if not, the value of
+<FONT SIZE=-1><B>HISTFILE</B>
+
+</FONT>
+is used. Options, if supplied, have the following meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-c</B>
+
+<DD>
+Clear the history list by deleting all the entries.
+<DT><B>-d</B> <I>offset</I><DD>
+Delete the history entry at position <I>offset</I>.
+If <I>offset</I> is negative, it is interpreted as relative to one greater
+than the last history position, so negative indices count back from the
+end of the history, and an index of -1 refers to the current
+<B>history -d</B> command.
+<DT><B>-d</B> <I>start</I>-<I>end</I><DD>
+Delete the history entries between positions <I>start</I> and <I>end</I>,
+inclusive. Positive and negative values for <I>start</I> and <I>end</I>
+are interpreted as described above.
+<DT><B>-a</B>
+
+<DD>
+Append the ``new'' history lines to the history file.
+These are history lines entered since the beginning of the current
+<B>bash</B> session, but not already appended to the history file.
+<DT><B>-n</B>
+
+<DD>
+Read the history lines not already read from the history
+file into the current history list. These are lines
+appended to the history file since the beginning of the
+current <B>bash</B> session.
+<DT><B>-r</B>
+
+<DD>
+Read the contents of the history file
+and append them to the current history list.
+<DT><B>-w</B>
+
+<DD>
+Write the current history list to the history file, overwriting the
+history file's contents.
+<DT><B>-p</B>
+
+<DD>
+Perform history substitution on the following <I>args</I> and display
+the result on the standard output.
+Does not store the results in the history list.
+Each <I>arg</I> must be quoted to disable normal history expansion.
+<DT><B>-s</B>
+
+<DD>
+Store the
+<I>args</I>
+
+in the history list as a single entry. The last command in the
+history list is removed before the
+<I>args</I>
+
+are added.
+
+</DL>
+<P>
+
+If the
+<FONT SIZE=-1><B>HISTTIMEFORMAT</B>
+
+</FONT>
+variable is set, the time stamp information
+associated with each history entry is written to the history file,
+marked with the history comment character.
+When the history file is read, lines beginning with the history
+comment character followed immediately by a digit are interpreted
+as timestamps for the following history entry.
+The return value is 0 unless an invalid option is encountered, an
+error occurs while reading or writing the history file, an invalid
+<I>offset</I> is supplied as an argument to <B>-d</B>, or the
+history expansion supplied as an argument to <B>-p</B> fails.
+</DL>
+
+<DT><B>jobs</B> [<B>-lnprs</B>] [ <I>jobspec</I> ... ]<DD>
+
+<DT><B>jobs</B> <B>-x</B> <I>command</I> [ <I>args</I> ... ]<DD>
+
+The first form lists the active jobs. The options have the following
+meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-l</B>
+
+<DD>
+List process IDs
+in addition to the normal information.
+<DT><B>-n</B>
+
+<DD>
+Display information only about jobs that have changed status since
+the user was last notified of their status.
+<DT><B>-p</B>
+
+<DD>
+List only the process ID of the job's process group
+leader.
+<DT><B>-r</B>
+
+<DD>
+Display only running jobs.
+<DT><B>-s</B>
+
+<DD>
+Display only stopped jobs.
+
+</DL>
+<P>
+
+If
+<I>jobspec</I>
+
+is given, output is restricted to information about that job.
+The return status is 0 unless an invalid option is encountered
+or an invalid
+<I>jobspec</I>
+
+is supplied.
+<P>
+
+If the
+<B>-x</B>
+
+option is supplied,
+<B>jobs</B>
+
+replaces any
+<I>jobspec</I>
+
+found in
+<I>command</I>
+
+or
+<I>args</I>
+
+with the corresponding process group ID, and executes
+<I>command</I>
+
+passing it
+<I>args</I>,
+
+returning its exit status.
+</DL>
+
+<DT><B>kill</B> [<B>-s</B> <I>sigspec</I> | <B>-n</B> <I>signum</I> | <B>-</B><I>sigspec</I>] [<I>pid</I> | <I>jobspec</I>] ...<DD>
+
+<DT><B>kill</B> <B>-l</B>|<B>-L</B> [<I>sigspec</I> | <I>exit_status</I>]<DD>
+
+Send the signal named by
+<I>sigspec</I>
+
+or
+<I>signum</I>
+
+to the processes named by
+<I>pid</I>
+
+or
+<I>jobspec</I>.
+
+<I>sigspec</I>
+
+is either a case-insensitive signal name such as
+<FONT SIZE=-1><B>SIGKILL</B>
+
+</FONT>
+(with or without the
+<FONT SIZE=-1><B>SIG</B>
+
+</FONT>
+prefix) or a signal number;
+<I>signum</I>
+
+is a signal number.
+If
+<I>sigspec</I>
+
+is not present, then
+<FONT SIZE=-1><B>SIGTERM</B>
+
+</FONT>
+is assumed.
+An argument of
+<B>-l</B>
+
+lists the signal names.
+If any arguments are supplied when
+<B>-l</B>
+
+is given, the names of the signals corresponding to the arguments are
+listed, and the return status is 0.
+The <I>exit_status</I> argument to
+<B>-l</B>
+
+is a number specifying either a signal number or the exit status of
+a process terminated by a signal.
+The
+<B>-L</B>
+
+option is equivalent to <B>-l</B>.
+<B>kill</B>
+
+returns true if at least one signal was successfully sent, or false
+if an error occurs or an invalid option is encountered.
+<DT><B>let</B> <I>arg</I> [<I>arg</I> ...]<DD>
+Each
+<I>arg</I>
+
+is an arithmetic expression to be evaluated (see
+<FONT SIZE=-1><B>ARITHMETIC EVALUATION</B>
+
+</FONT>
+above).
+If the last
+<I>arg</I>
+
+evaluates to 0,
+<B>let</B>
+
+returns 1; 0 is returned otherwise.
+<DT><B>local</B> [<I>option</I>] [<I>name</I>[=<I>value</I>] ... | - ]<DD>
+For each argument, a local variable named
+<I>name</I>
+
+is created, and assigned
+<I>value</I>.
+
+The <I>option</I> can be any of the options accepted by <B>declare</B>.
+When
+<B>local</B>
+
+is used within a function, it causes the variable
+<I>name</I>
+
+to have a visible scope restricted to that function and its children.
+If <I>name</I> is -, the set of shell options is made local to the function
+in which <B>local</B> is invoked: shell options changed using the
+<B>set</B> builtin inside the function are restored to their original values
+when the function returns.
+With no operands,
+<B>local</B>
+
+writes a list of local variables to the standard output. It is
+an error to use
+<B>local</B>
+
+when not within a function. The return status is 0 unless
+<B>local</B>
+
+is used outside a function, an invalid
+<I>name</I>
+
+is supplied, or
+<I>name</I> is a readonly variable.
+<DT><B>logout</B>
+
+<DD>
+Exit a login shell.
+<DT><B>mapfile</B> [<B>-d</B> <I>delim</I>] [<B>-n</B> <I>count</I>] [<B>-O</B> <I>origin</I>] [<B>-s</B> <I>count</I>] [<B>-t</B>] [<B>-u</B> <I>fd</I>] [<B>-C</B> <I>callback</I>] [<B>-c</B> <I>quantum</I>] [<I>array</I>]<DD>
+
+<DT><B>readarray</B> [<B>-d</B> <I>delim</I>] [<B>-n</B> <I>count</I>] [<B>-O</B> <I>origin</I>] [<B>-s</B> <I>count</I>] [<B>-t</B>] [<B>-u</B> <I>fd</I>] [<B>-C</B> <I>callback</I>] [<B>-c</B> <I>quantum</I>] [<I>array</I>]<DD>
+
+Read lines from the standard input into the indexed array variable
+<I>array</I>,
+
+or from file descriptor
+<I>fd</I>
+
+if the
+<B>-u</B>
+
+option is supplied.
+The variable
+<FONT SIZE=-1><B>MAPFILE</B>
+
+</FONT>
+is the default <I>array</I>.
+Options, if supplied, have the following meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-d</B>
+
+<DD>
+The first character of <I>delim</I> is used to terminate each input line,
+rather than newline.
+If <I>delim</I> is the empty string, <B>mapfile</B> will terminate a line
+when it reads a NUL character.
+<DT><B>-n</B>
+
+<DD>
+Copy at most
+<I>count</I>
+
+lines. If <I>count</I> is 0, all lines are copied.
+<DT><B>-O</B>
+
+<DD>
+Begin assigning to
+<I>array</I>
+
+at index
+<I>origin</I>.
+
+The default index is 0.
+<DT><B>-s</B>
+
+<DD>
+Discard the first <I>count</I> lines read.
+<DT><B>-t</B>
+
+<DD>
+Remove a trailing <I>delim</I> (default newline) from each line read.
+<DT><B>-u</B>
+
+<DD>
+Read lines from file descriptor <I>fd</I> instead of the standard input.
+<DT><B>-C</B>
+
+<DD>
+Evaluate
+<I>callback</I>
+
+each time <I>quantum</I> lines are read. The <B>-c</B> option specifies
+<I>quantum</I>.
+
+<DT><B>-c</B>
+
+<DD>
+Specify the number of lines read between each call to
+<I>callback</I>.
+
+
+</DL>
+<P>
+
+If
+<B>-C</B>
+
+is specified without
+<B>-c</B>,
+
+the default quantum is 5000.
+When <I>callback</I> is evaluated, it is supplied the index of the next
+array element to be assigned and the line to be assigned to that element
+as additional arguments.
+<I>callback</I> is evaluated after the line is read but before the
+array element is assigned.
+<P>
+
+If not supplied with an explicit origin, <B>mapfile</B> will clear <I>array</I>
+before assigning to it.
+<P>
+
+<B>mapfile</B> returns successfully unless an invalid option or option
+argument is supplied, <I>array</I> is invalid or unassignable, or if
+<I>array</I> is not an indexed array.
+</DL>
+
+<DT><B>popd</B> [-<B>n</B>] [+<I>n</I>] [-<I>n</I>]<DD>
+Removes entries from the directory stack. With no arguments,
+removes the top directory from the stack, and performs a
+<B>cd</B>
+
+to the new top directory.
+Arguments, if supplied, have the following meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-n</B>
+
+<DD>
+Suppresses the normal change of directory when removing directories
+from the stack, so that only the stack is manipulated.
+<DT><B>+</B><I>n</I><DD>
+Removes the <I>n</I>th entry counting from the left of the list
+shown by
+<B>dirs</B>,
+
+starting with zero. For example:
+
+<TT>popd +0</TT>
+removes the first directory,
+
+<TT>popd +1</TT>
+the second.
+<DT><B>-</B><I>n</I><DD>
+Removes the <I>n</I>th entry counting from the right of the list
+shown by
+<B>dirs</B>,
+
+starting with zero. For example:
+
+<TT>popd -0</TT>
+removes the last directory,
+
+<TT>popd -1</TT>
+the next to last.
+
+</DL>
+<P>
+
+If the
+<B>popd</B>
+
+command is successful, a
+<B>dirs</B>
+
+is performed as well, and the return status is 0.
+<B>popd</B>
+
+returns false if an invalid option is encountered, the directory stack
+is empty, a non-existent directory stack entry is specified, or the
+directory change fails.
+</DL>
+
+<DT><B>printf</B> [<B>-v</B> <I>var</I>] <I>format</I> [<I>arguments</I>]<DD>
+Write the formatted <I>arguments</I> to the standard output under the
+control of the <I>format</I>.
+The <B>-v</B> option causes the output to be assigned to the variable
+<I>var</I> rather than being printed to the standard output.
+<P>
+The <I>format</I> 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
+<I>argument</I>.
+In addition to the standard <I>printf</I>(1) format specifications,
+<B>printf</B> interprets the following extensions:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>%b</B>
+
+<DD>
+causes
+<B>printf</B> to expand backslash escape sequences in the corresponding
+<I>argument</I>
+in the same way as <B>echo -e</B>.
+<DT><B>%q</B>
+
+<DD>
+causes <B>printf</B> to output the corresponding
+<I>argument</I> in a format that can be reused as shell input.
+<DT><B>%(</B><I>datefmt</I>)T
+
+<DD>
+causes <B>printf</B> to output the date-time string resulting from using
+<I>datefmt</I> as a format string for <I>strftime</I>(3).
+The corresponding <I>argument</I> is an integer representing the number of
+seconds since the epoch.
+Two special argument values may be used: -1 represents the current
+time, and -2 represents the time the shell was invoked.
+If no argument is specified, conversion behaves as if -1 had been given.
+This is an exception to the usual <B>printf</B> behavior.
+
+</DL>
+<P>
+
+Arguments to non-string format specifiers are treated as C constants,
+except that a leading plus or minus sign is allowed, and if the leading
+character is a single or double quote, the value is the ASCII value of
+the following character.
+<P>
+
+The <I>format</I> is reused as necessary to consume all of the <I>arguments</I>.
+If the <I>format</I> requires more <I>arguments</I> 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.
+</DL>
+
+<DT><B>pushd</B> [<B>-n</B>] [+<I>n</I>] [-<I>n</I>]<DD>
+
+<DT><B>pushd</B> [<B>-n</B>] [<I>dir</I>]<DD>
+
+Adds a directory to the top of the directory stack, or rotates
+the stack, making the new top of the stack the current working
+directory. With no arguments, <B>pushd</B> exchanges the top two directories
+and returns 0, unless the directory stack is empty.
+Arguments, if supplied, have the following meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-n</B>
+
+<DD>
+Suppresses the normal change of directory when rotating or
+adding directories to the stack, so that only the stack is manipulated.
+<DT><B>+</B><I>n</I><DD>
+Rotates the stack so that the <I>n</I>th directory
+(counting from the left of the list shown by
+<B>dirs</B>,
+
+starting with zero)
+is at the top.
+<DT><B>-</B><I>n</I><DD>
+Rotates the stack so that the <I>n</I>th directory
+(counting from the right of the list shown by
+<B>dirs</B>,
+
+starting with zero) is at the top.
+<DT><I>dir</I>
+
+<DD>
+Adds
+<I>dir</I>
+
+to the directory stack at the top, making it the
+new current working directory as if it had been supplied as the argument
+to the <B>cd</B> builtin.
+
+</DL>
+<P>
+
+If the
+<B>pushd</B>
+
+command is successful, a
+<B>dirs</B>
+
+is performed as well.
+If the first form is used,
+<B>pushd</B>
+
+returns 0 unless the cd to
+<I>dir</I>
+
+fails. With the second form,
+<B>pushd</B>
+
+returns 0 unless the directory stack is empty,
+a non-existent directory stack element is specified,
+or the directory change to the specified new current directory
+fails.
+</DL>
+
+<DT><B>pwd</B> [<B>-LP</B>]<DD>
+Print the absolute pathname of the current working directory.
+The pathname printed contains no symbolic links if the
+<B>-P</B>
+
+option is supplied or the
+<B>-o physical</B>
+
+option to the
+<B>set</B>
+
+builtin command is enabled.
+If the
+<B>-L</B>
+
+option is used, the pathname printed may contain symbolic links.
+The return status is 0 unless an error occurs while
+reading the name of the current directory or an
+invalid option is supplied.
+<DT><B>read</B> [<B>-ers</B>] [<B>-a</B> <I>aname</I>] [<B>-d</B> <I>delim</I>] [<B>-i</B> <I>text</I>] [<B>-n</B> <I>nchars</I>] [<B>-N</B> <I>nchars</I>] [<B>-p</B> <I>prompt</I>] [<B>-t</B> <I>timeout</I>] [<B>-u</B> <I>fd</I>] [<I>name</I> ...]<DD>
+One line is read from the standard input, or from the file descriptor
+<I>fd</I> supplied as an argument to the <B>-u</B> option,
+split into words as described above under <B>Word Splitting</B>,
+and the first word
+is assigned to the first
+<I>name</I>,
+
+the second word to the second
+<I>name</I>,
+
+and so on.
+If there are more words than names, the remaining words and their
+intervening delimiters are assigned to the last
+<I>name</I>.
+
+If there are fewer words read from the input stream than names,
+the remaining names are assigned empty values.
+The characters in
+<FONT SIZE=-1><B>IFS</B>
+
+</FONT>
+are used to split the line into words using the same rules the shell
+uses for expansion (described above under <B>Word Splitting</B>).
+The backslash character (<B>\</B>) may be used to remove any special
+meaning for the next character read and for line continuation.
+Options, if supplied, have the following meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-a </B><I>aname</I>
+
+<DD>
+The words are assigned to sequential indices
+of the array variable
+<I>aname</I>,
+
+starting at 0.
+<I>aname</I>
+
+is unset before any new values are assigned.
+Other <I>name</I> arguments are ignored.
+<DT><B>-d </B><I>delim</I>
+
+<DD>
+The first character of <I>delim</I> is used to terminate the input line,
+rather than newline.
+If <I>delim</I> is the empty string, <B>read</B> will terminate a line
+when it reads a NUL character.
+<DT><B>-e</B>
+
+<DD>
+If the standard input
+is coming from a terminal,
+<B>readline</B>
+
+(see
+<FONT SIZE=-1><B>READLINE</B>
+
+</FONT>
+above) is used to obtain the line.
+Readline uses the current (or default, if line editing was not previously
+active) editing settings, but uses Readline's default filename completion.
+<DT><B>-i </B><I>text</I>
+
+<DD>
+If
+<B>readline</B>
+
+is being used to read the line, <I>text</I> is placed into the editing
+buffer before editing begins.
+<DT><B>-n </B><I>nchars</I>
+
+<DD>
+<B>read</B> returns after reading <I>nchars</I> characters rather than
+waiting for a complete line of input, but honors a delimiter if fewer
+than <I>nchars</I> characters are read before the delimiter.
+<DT><B>-N </B><I>nchars</I>
+
+<DD>
+<B>read</B> returns after reading exactly <I>nchars</I> characters rather
+than waiting for a complete line of input, unless EOF is encountered or
+<B>read</B> times out.
+Delimiter characters encountered in the input are
+not treated specially and do not cause <B>read</B> to return until
+<I>nchars</I> characters are read.
+The result is not split on the characters in <B>IFS</B>; the intent is
+that the variable is assigned exactly the characters read
+(with the exception of backslash; see the <B>-r</B> option below).
+<DT><B>-p </B><I>prompt</I>
+
+<DD>
+Display <I>prompt</I> on standard error, without a
+trailing newline, before attempting to read any input. The prompt
+is displayed only if input is coming from a terminal.
+<DT><B>-r</B>
+
+<DD>
+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 then be used as a line
+continuation.
+<DT><B>-s</B>
+
+<DD>
+Silent mode. If input is coming from a terminal, characters are
+not echoed.
+<DT><B>-t </B><I>timeout</I>
+
+<DD>
+Cause <B>read</B> to time out and return failure if a complete line of
+input (or a specified number of characters)
+is not read within <I>timeout</I> seconds.
+<I>timeout</I> may be a decimal number with a fractional portion following
+the decimal point.
+This option is only effective if <B>read</B> is reading input from a
+terminal, pipe, or other special file; it has no effect when reading
+from regular files.
+If <B>read</B> times out, <B>read</B> saves any partial input read into
+the specified variable <I>name</I>.
+If <I>timeout</I> is 0, <B>read</B> returns immediately, without trying to
+read any data. The exit status is 0 if input is available on
+the specified file descriptor, non-zero otherwise.
+The exit status is greater than 128 if the timeout is exceeded.
+<DT><B>-u </B><I>fd</I>
+
+<DD>
+Read input from file descriptor <I>fd</I>.
+
+</DL>
+<P>
+
+If no
+<I>names</I>
+
+are supplied, the line read is assigned to the variable
+<FONT SIZE=-1><B>REPLY</B>.
+
+</FONT>
+The exit status is zero, unless end-of-file is encountered, <B>read</B>
+times out (in which case the status is greater than 128),
+a variable assignment error (such as assigning to a readonly variable) occurs,
+or an invalid file descriptor is supplied as the argument to <B>-u</B>.
+</DL>
+
+<DT><B>readonly</B> [<B>-aAf</B>] [<B>-p</B>] [<I>name</I>[=<I>word</I>] ...]<DD>
+
+The given
+<I>names</I> are marked readonly; the values of these
+<I>names</I>
+
+may not be changed by subsequent assignment.
+If the
+<B>-f</B>
+
+option is supplied, the functions corresponding to the
+<I>names</I> are so
+marked.
+The
+<B>-a</B>
+
+option restricts the variables to indexed arrays; the
+<B>-A</B>
+
+option restricts the variables to associative arrays.
+If both options are supplied,
+<B>-A</B>
+
+takes precedence.
+If no
+<I>name</I>
+
+arguments are given, or if the
+<B>-p</B>
+
+option is supplied, a list of all readonly names is printed.
+The other options may be used to restrict the output to a subset of
+the set of readonly names.
+The
+<B>-p</B>
+
+option causes output to be displayed in a format that
+may be reused as input.
+If a variable name is followed by =<I>word</I>, the value of
+the variable is set to <I>word</I>.
+The return status is 0 unless an invalid option is encountered,
+one of the
+<I>names</I>
+
+is not a valid shell variable name, or
+<B>-f</B>
+
+is supplied with a
+<I>name</I>
+
+that is not a function.
+<DT><B>return</B> [<I>n</I>]<DD>
+Causes a function to stop executing and return the value specified by
+<I>n</I>
+
+to its caller.
+If
+<I>n</I>
+
+is omitted, the return status is that of the last command
+executed in the function body.
+If <B>return</B> is executed by a trap handler, the last command used to
+determine the status is the last command executed before the trap handler.
+If <B>return</B> is executed during a <B>DEBUG</B> trap, the last command
+used to determine the status is the last command executed by the trap
+handler before <B>return</B> was invoked.
+If
+<B>return</B>
+
+is used outside a function,
+but during execution of a script by the
+<B>.</B>
+
+(<B>source</B>) command, it causes the shell to stop executing
+that script and return either
+<I>n</I>
+
+or the exit status of the last command executed within the
+script as the exit status of the script.
+If <I>n</I> is supplied, the return value is its least significant
+8 bits.
+The return status is non-zero if
+<B>return</B>
+
+is supplied a non-numeric argument, or
+is used outside a
+function and not during execution of a script by <B>.</B> or <B>source</B>.
+Any command associated with the <B>RETURN</B> trap is executed
+before execution resumes after the function or script.
+<DT><B>set</B> [<B>--abefhkmnptuvxBCEHPT</B>] [<B>-o</B> <I>option-name</I>] [<I>arg</I> ...]<DD>
+
+<DT><B>set</B> [<B>+abefhkmnptuvxBCEHPT</B>] [<B>+o</B> <I>option-name</I>] [<I>arg</I> ...]<DD>
+
+Without options, the name and value of each shell variable are displayed
+in a format that can be reused as input
+for setting or resetting the currently-set variables.
+Read-only variables cannot be reset.
+In <I>posix mode</I>, only shell variables are listed.
+The output is sorted according to the current locale.
+When options are specified, they set or unset shell attributes.
+Any arguments remaining after option processing are treated
+as values for the positional parameters and are assigned, in order, to
+<B>$1</B>,
+
+<B>$2</B>,
+
+<B>...</B>
+
+<B>$</B><I>n</I>.
+
+Options, if specified, have the following meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-a</B>
+
+<DD>
+Each variable or function that is created or modified is given the
+export attribute and marked for export to the environment of
+subsequent commands.
+<DT><B>-b</B>
+
+<DD>
+Report the status of terminated background jobs
+immediately, rather than before the next primary prompt. This is
+effective only when job control is enabled.
+<DT><B>-e</B>
+
+<DD>
+Exit immediately if a
+<I>pipeline</I> (which may consist of a single <I>simple command</I>),
+a <I>list</I>,
+or a <I>compound command</I>
+(see
+<FONT SIZE=-1><B>SHELL GRAMMAR</B>
+
+</FONT>
+above), exits with a non-zero status.
+The shell does not exit if the
+command that fails is part of the command list immediately following a
+<B>while</B>
+
+or
+<B>until</B>
+
+keyword,
+part of the test following the
+<B>if</B>
+
+or
+<B>elif</B>
+
+reserved words, part of any command executed in a
+<B>&amp;&amp;</B>
+
+or
+<B>||</B>
+
+list except the command following the final <B>&amp;&amp;</B> or <B>||</B>,
+any command in a pipeline but the last,
+or if the command's return value is
+being inverted with
+<B>!</B>.
+
+If a compound command other than a subshell
+returns a non-zero status because a command failed
+while <B>-e</B> was being ignored, the shell does not exit.
+A trap on <B>ERR</B>, if set, is executed before the shell exits.
+This option applies to the shell environment and each subshell environment
+separately (see
+<FONT SIZE=-1><B>COMMAND EXECUTION ENVIRONMENT</B>
+
+</FONT>
+above), and may cause
+subshells to exit before executing all the commands in the subshell.
+<P>
+
+
+If a compound command or shell function executes in a context
+where <B>-e</B> is being ignored,
+none of the commands executed within the compound command or function body
+will be affected by the <B>-e</B> setting, even if <B>-e</B> is set
+and a command returns a failure status.
+If a compound command or shell function sets <B>-e</B> while executing in
+a context where <B>-e</B> is ignored, that setting will not have any
+effect until the compound command or the command containing the function
+call completes.
+<DT><B>-f</B>
+
+<DD>
+Disable pathname expansion.
+<DT><B>-h</B>
+
+<DD>
+Remember the location of commands as they are looked up for execution.
+This is enabled by default.
+<DT><B>-k</B>
+
+<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.
+<DT><B>-m</B>
+
+<DD>
+Monitor mode. Job control is enabled. This option is on
+by default for interactive shells on systems that support
+it (see
+<FONT SIZE=-1><B>JOB CONTROL</B>
+
+</FONT>
+above).
+All processes run in a separate process group.
+When a background job completes, the shell prints a line
+containing its exit status.
+<DT><B>-n</B>
+
+<DD>
+Read commands but do not execute them.
+This may be used to check a shell script for syntax errors.
+This is ignored by interactive shells.
+<DT><B>-o </B><I>option-name</I>
+
+<DD>
+The <I>option-name</I> can be one of the following:
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT><B>allexport</B>
+
+<DD>
+Same as
+<B>-a</B>.
+
+<DT><B>braceexpand</B>
+
+<DD>
+Same as
+<B>-B</B>.
+
+<DT><B>emacs</B>
+
+<DD>
+Use an emacs-style command line editing interface. This is enabled
+by default when the shell is interactive, unless the shell is started
+with the
+<B>--noediting</B>
+
+option.
+This also affects the editing interface used for <B>read -e</B>.
+<DT><B>errexit</B>
+
+<DD>
+Same as
+<B>-e</B>.
+
+<DT><B>errtrace</B>
+
+<DD>
+Same as
+<B>-E</B>.
+
+<DT><B>functrace</B>
+
+<DD>
+Same as
+<B>-T</B>.
+
+<DT><B>hashall</B>
+
+<DD>
+Same as
+<B>-h</B>.
+
+<DT><B>histexpand</B>
+
+<DD>
+Same as
+<B>-H</B>.
+
+<DT><B>history</B>
+
+<DD>
+Enable command history, as described above under
+<FONT SIZE=-1><B>HISTORY</B>.
+
+</FONT>
+This option is on by default in interactive shells.
+<DT><B>ignoreeof</B>
+
+<DD>
+The effect is as if the shell command
+<TT>IGNOREEOF=10</TT>
+
+had been executed
+(see
+<B>Shell Variables</B>
+
+above).
+<DT><B>keyword</B>
+
+<DD>
+Same as
+<B>-k</B>.
+
+<DT><B>monitor</B>
+
+<DD>
+Same as
+<B>-m</B>.
+
+<DT><B>noclobber</B>
+
+<DD>
+Same as
+<B>-C</B>.
+
+<DT><B>noexec</B>
+
+<DD>
+Same as
+<B>-n</B>.
+
+<DT><B>noglob</B>
+
+<DD>
+Same as
+<B>-f</B>.
+
+<DT><B>nolog</B>
+
+<DD>
+Currently ignored.
+<DT><B>notify</B>
+
+<DD>
+Same as
+<B>-b</B>.
+
+<DT><B>nounset</B>
+
+<DD>
+Same as
+<B>-u</B>.
+
+<DT><B>onecmd</B>
+
+<DD>
+Same as
+<B>-t</B>.
+
+<DT><B>physical</B>
+
+<DD>
+Same as
+<B>-P</B>.
+
+<DT><B>pipefail</B>
+
+<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.
+<DT><B>posix</B>
+
+<DD>
+Change the behavior of
+<B>bash</B>
+
+where the default operation differs
+from the POSIX standard to match the standard (<I>posix mode</I>).
+See
+<FONT SIZE=-1><B>SEE ALSO</B>
+
+</FONT>
+below for a reference to a document that details how posix mode affects
+bash's behavior.
+<DT><B>privileged</B>
+
+<DD>
+Same as
+<B>-p</B>.
+
+<DT><B>verbose</B>
+
+<DD>
+Same as
+<B>-v</B>.
+
+<DT><B>vi</B>
+
+<DD>
+Use a vi-style command line editing interface.
+This also affects the editing interface used for <B>read -e</B>.
+<DT><B>xtrace</B>
+
+<DD>
+Same as
+<B>-x</B>.
+
+<P>
+</DL>
+<P>
+
+If
+<B>-o</B>
+
+is supplied with no <I>option-name</I>, the values of the current options are
+printed.
+If
+<B>+o</B>
+
+is supplied with no <I>option-name</I>, a series of
+<B>set</B>
+
+commands to recreate the current option settings is displayed on
+the standard output.
+</DL>
+
+<DT><B>-p</B>
+
+<DD>
+Turn on
+<I>privileged</I>
+
+mode. In this mode, the
+<FONT SIZE=-1><B>$ENV</B>
+
+</FONT>
+and
+<FONT SIZE=-1><B>$BASH_ENV</B>
+
+</FONT>
+files are not processed, shell functions are not inherited from the
+environment, and the
+<FONT SIZE=-1><B>SHELLOPTS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>BASHOPTS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>CDPATH</B>,
+
+</FONT>
+and
+<FONT SIZE=-1><B>GLOBIGNORE</B>
+
+</FONT>
+variables, if they appear in the environment, are ignored.
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the <B>-p</B> option is not supplied, these actions
+are taken and the effective user id is set to the real user id.
+If the <B>-p</B> 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.
+<DT><B>-t</B>
+
+<DD>
+Exit after reading and executing one command.
+<DT><B>-u</B>
+
+<DD>
+Treat unset variables and parameters other than the special
+parameters &quot;@&quot; and &quot;*&quot; as an error when performing
+parameter expansion. If expansion is attempted on an
+unset variable or parameter, the shell prints an error message, and,
+if not interactive, exits with a non-zero status.
+<DT><B>-v</B>
+
+<DD>
+Print shell input lines as they are read.
+<DT><B>-x</B>
+
+<DD>
+After expanding each <I>simple command</I>,
+<B>for</B> command, <B>case</B> command, <B>select</B> command, or
+arithmetic <B>for</B> command, display the expanded value of
+<FONT SIZE=-1><B>PS4</B>,
+
+</FONT>
+followed by the command and its expanded arguments
+or associated word list.
+<DT><B>-B</B>
+
+<DD>
+The shell performs brace expansion (see
+<B>Brace Expansion</B>
+
+above). This is on by default.
+<DT><B>-C</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+does not overwrite an existing file with the
+<B>&gt;</B>,
+
+<B>&gt;&amp;</B>,
+
+and
+<B>&lt;&gt;</B>
+
+redirection operators. This may be overridden when
+creating output files by using the redirection operator
+<B>&gt;|</B>
+
+instead of
+<B>&gt;</B>.
+
+<DT><B>-E</B>
+
+<DD>
+If set, any trap on <B>ERR</B> is inherited by shell functions, command
+substitutions, and commands executed in a subshell environment.
+The <B>ERR</B> trap is normally not inherited in such cases.
+<DT><B>-H</B>
+
+<DD>
+Enable
+<B>!</B>
+
+style history substitution. This option is on by
+default when the shell is interactive.
+<DT><B>-P</B>
+
+<DD>
+If set, the shell does not resolve symbolic links when executing
+commands such as
+<B>cd</B>
+
+that change the current working directory. It uses the
+physical directory structure instead. By default,
+<B>bash</B>
+
+follows the logical chain of directories when performing commands
+which change the current directory.
+<DT><B>-T</B>
+
+<DD>
+If set, any traps on <B>DEBUG</B> and <B>RETURN</B> are inherited by shell
+functions, command substitutions, and commands executed in a
+subshell environment.
+The <B>DEBUG</B> and <B>RETURN</B> traps are normally not inherited
+in such cases.
+<DT><B>--</B>
+
+<DD>
+If no arguments follow this option, then the positional parameters are
+unset. Otherwise, the positional parameters are set to the
+<I>arg</I>s, even if some of them begin with a
+<B>-</B>.
+
+<DT><B>-</B>
+
+<DD>
+Signal the end of options, cause all remaining <I>arg</I>s to be
+assigned to the positional parameters. The
+<B>-x</B>
+
+and
+<B>-v</B>
+
+options are turned off.
+If there are no <I>arg</I>s,
+the positional parameters remain unchanged.
+
+</DL>
+<P>
+
+The options are off by default unless otherwise noted.
+Using + rather than - causes these options to be turned off.
+The options can also be specified as arguments to an invocation of
+the shell.
+The current set of options may be found in
+<B>$-</B>.
+
+The return status is always true unless an invalid option is encountered.
+</DL>
+
+<DT><B>shift</B> [<I>n</I>]<DD>
+The positional parameters from <I>n</I>+1 ... are renamed to
+<B>$1</B>
+
+<B>....</B>
+
+Parameters represented by the numbers <B>$#</B>
+down to <B>$#</B>-<I>n</I>+1 are unset.
+<I>n</I>
+
+must be a non-negative number less than or equal to <B>$#</B>.
+If
+<I>n</I>
+
+is 0, no parameters are changed.
+If
+<I>n</I>
+
+is not given, it is assumed to be 1.
+If
+<I>n</I>
+
+is greater than <B>$#</B>, the positional parameters are not changed.
+The return status is greater than zero if
+<I>n</I>
+
+is greater than
+<B>$#</B>
+
+or less than zero; otherwise 0.
+<DT><B>shopt</B> [<B>-pqsu</B>] [<B>-o</B>] [<I>optname</I> ...]<DD>
+Toggle the values of settings controlling optional shell behavior.
+The settings can be either those listed below, or, if the
+<B>-o</B>
+
+option is used, those available with the
+<B>-o</B>
+
+option to the <B>set</B> builtin command.
+With no options, or with the
+<B>-p</B>
+
+option, a list of all settable options is displayed, with
+an indication of whether or not each is set;
+if <I>optnames</I> are supplied, the output is restricted to those options.
+The <B>-p</B> option causes output to be displayed in a form that
+may be reused as input.
+Other options have the following meanings:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-s</B>
+
+<DD>
+Enable (set) each <I>optname</I>.
+<DT><B>-u</B>
+
+<DD>
+Disable (unset) each <I>optname</I>.
+<DT><B>-q</B>
+
+<DD>
+Suppresses normal output (quiet mode); the return status indicates
+whether the <I>optname</I> is set or unset.
+If multiple <I>optname</I> arguments are given with
+<B>-q</B>,
+
+the return status is zero if all <I>optnames</I> are enabled; non-zero
+otherwise.
+<DT><B>-o</B>
+
+<DD>
+Restricts the values of <I>optname</I> to be those defined for the
+<B>-o</B>
+
+option to the
+<B>set</B>
+
+builtin.
+
+</DL>
+<P>
+
+If either
+<B>-s</B>
+
+or
+<B>-u</B>
+
+is used with no <I>optname</I> arguments,
+<B>shopt</B>
+
+shows only those options which are set or unset, respectively.
+Unless otherwise noted, the <B>shopt</B> options are disabled (unset)
+by default.
+<P>
+
+The return status when listing options is zero if all <I>optnames</I>
+are enabled, non-zero otherwise. When setting or unsetting options,
+the return status is zero unless an <I>optname</I> is not a valid shell
+option.
+<P>
+
+The list of <B>shopt</B> options is:
+<P>
+
+
+
+<DL COMPACT>
+<DT><B>assoc_expand_once</B>
+
+<DD>
+If set, the shell suppresses multiple evaluation of associative array
+subscripts during arithmetic expression evaluation, while executing
+builtins that can perform variable assignments,
+and while executing builtins that perform array dereferencing.
+<DT><B>autocd</B>
+
+<DD>
+If set, a command name that is the name of a directory is executed as if
+it were the argument to the <B>cd</B> command.
+This option is only used by interactive shells.
+<DT><B>cdable_vars</B>
+
+<DD>
+If set, an argument to the
+<B>cd</B>
+
+builtin command that
+is not a directory is assumed to be the name of a variable whose
+value is the directory to change to.
+<DT><B>cdspell</B>
+
+<DD>
+If set, minor errors in the spelling of a directory component in a
+<B>cd</B>
+
+command will be corrected.
+The errors checked for are transposed characters,
+a missing character, and one character too many.
+If a correction is found, the corrected filename is printed,
+and the command proceeds.
+This option is only used by interactive shells.
+<DT><B>checkhash</B>
+
+<DD>
+If set, <B>bash</B> 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.
+<DT><B>checkjobs</B>
+
+<DD>
+If set, <B>bash</B> 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
+<FONT SIZE=-1><B>JOB CONTROL</B>
+
+</FONT>
+above). The shell always
+postpones exiting if any jobs are stopped.
+<DT><B>checkwinsize</B>
+
+<DD>
+If set, <B>bash</B> checks the window size after each external (non-builtin)
+command and, if necessary, updates the values of
+<FONT SIZE=-1><B>LINES</B>
+
+</FONT>
+and
+<FONT SIZE=-1><B>COLUMNS</B>.
+
+</FONT>
+This option is enabled by default.
+<DT><B>cmdhist</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+attempts to save all lines of a multiple-line
+command in the same history entry. This allows
+easy re-editing of multi-line commands.
+This option is enabled by default, but only has an effect if command
+history is enabled, as described above under
+<FONT SIZE=-1><B>HISTORY</B>.
+
+</FONT>
+<DT><B>compat31</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+changes its behavior to that of version 3.1 with respect to quoted
+arguments to the <B>[[</B> conditional command's <B>=~</B> operator
+and locale-specific string comparison when using the <B>[[</B>
+conditional command's <B>&lt;</B> and <B>&gt;</B> operators.
+Bash versions prior to bash-4.1 use ASCII collation and
+<I>strcmp</I>(3);
+
+bash-4.1 and later use the current locale's collation sequence and
+<I>strcoll</I>(3).
+
+<DT><B>compat32</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+changes its behavior to that of version 3.2 with respect to
+locale-specific string comparison when using the <B>[[</B>
+conditional command's <B>&lt;</B> and <B>&gt;</B> operators (see previous item)
+and the effect of interrupting a command list.
+Bash versions 3.2 and earlier continue with the next command in the list
+after one terminates due to an interrupt.
+<DT><B>compat40</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+changes its behavior to that of version 4.0 with respect to locale-specific
+string comparison when using the <B>[[</B>
+conditional command's <B>&lt;</B> and <B>&gt;</B> operators (see description of
+<B>compat31</B>)
+and the effect of interrupting a command list.
+Bash versions 4.0 and later interrupt the list as if the shell received the
+interrupt; previous versions continue with the next command in the list.
+<DT><B>compat41</B>
+
+<DD>
+If set,
+<B>bash</B>,
+
+when in <I>posix mode</I>, treats a single quote in a double-quoted
+parameter expansion as a special character. The single quotes must match
+(an even number) and the characters between the single quotes are considered
+quoted. This is the behavior of posix mode through version 4.1.
+The default bash behavior remains as in previous versions.
+<DT><B>compat42</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+does not process the replacement string in the pattern substitution word
+expansion using quote removal.
+<DT><B>compat43</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+does not print a warning message if an attempt is made to use a quoted compound
+array assignment as an argument to <B>declare</B>,
+makes word expansion errors
+non-fatal errors that cause the current command to fail (the default behavior is
+to make them fatal errors that cause the shell to exit),
+and does not reset the
+loop state when a shell function is executed (this allows <B>break</B> or
+<B>continue</B> in a shell function to affect loops in the caller's context).
+<DT><B>compat44</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+saves the positional parameters to BASH_ARGV and BASH_ARGC before they are
+used, regardless of whether or not extended debugging mode is enabled.
+<DT><B>complete_fullquote</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+quotes all shell metacharacters in filenames and directory names when
+performing completion.
+If not set,
+<B>bash</B>
+
+removes metacharacters such as the dollar sign from the set of
+characters that will be quoted in completed filenames
+when these metacharacters appear in shell variable references in words to be
+completed.
+This means that dollar signs in variable names that expand to directories
+will not be quoted;
+however, any dollar signs appearing in filenames will not be quoted, either.
+This is active only when bash is using backslashes to quote completed
+filenames.
+This variable is set by default, which is the default bash behavior in
+versions through 4.2.
+<DT><B>direxpand</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+replaces directory names with the results of word expansion when performing
+filename completion. This changes the contents of the readline editing
+buffer.
+If not set,
+<B>bash</B>
+
+attempts to preserve what the user typed.
+<DT><B>dirspell</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+attempts spelling correction on directory names during word completion
+if the directory name initially supplied does not exist.
+<DT><B>dotglob</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+includes filenames beginning with a `.' in the results of pathname
+expansion.
+The filenames
+<B>``.''</B>
+
+and
+<B>``..''</B>
+
+must always be matched explicitly, even if
+<B>dotglob</B>
+
+is set.
+<DT><B>execfail</B>
+
+<DD>
+If set, a non-interactive shell will not exit if
+it cannot execute the file specified as an argument to the
+<B>exec</B>
+
+builtin command. An interactive shell does not exit if
+<B>exec</B>
+
+fails.
+<DT><B>expand_aliases</B>
+
+<DD>
+If set, aliases are expanded as described above under
+<FONT SIZE=-1><B>ALIASES</B>.
+
+</FONT>
+This option is enabled by default for interactive shells.
+<DT><B>extdebug</B>
+
+<DD>
+If set at shell invocation, arrange to execute the debugger profile
+before the shell starts, identical to the <B>--debugger</B> option.
+If set after invocation, behavior intended for use by debuggers is enabled:
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT><B>1.</B>
+
+<DD>
+The <B>-F</B> option to the <B>declare</B> builtin displays the source
+file name and line number corresponding to each function name supplied
+as an argument.
+<DT><B>2.</B>
+
+<DD>
+If the command run by the <B>DEBUG</B> trap returns a non-zero value, the
+next command is skipped and not executed.
+<DT><B>3.</B>
+
+<DD>
+If the command run by the <B>DEBUG</B> trap returns a value of 2, and the
+shell is executing in a subroutine (a shell function or a shell script
+executed by the <B>.</B> or <B>source</B> builtins), the shell simulates
+a call to <B>return</B>.
+<DT><B>4.</B>
+
+<DD>
+<FONT SIZE=-1><B>BASH_ARGC</B>
+
+</FONT>
+and
+<FONT SIZE=-1><B>BASH_ARGV</B>
+
+</FONT>
+are updated as described in their descriptions above.
+<DT><B>5.</B>
+
+<DD>
+Function tracing is enabled: command substitution, shell functions, and
+subshells invoked with <B>(</B> <I>command</I> <B>)</B> inherit the
+<B>DEBUG</B> and <B>RETURN</B> traps.
+<DT><B>6.</B>
+
+<DD>
+Error tracing is enabled: command substitution, shell functions, and
+subshells invoked with <B>(</B> <I>command</I> <B>)</B> inherit the
+<B>ERR</B> trap.
+</DL></DL>
+
+<DT><B>extglob</B>
+
+<DD>
+If set, the extended pattern matching features described above under
+<B>Pathname Expansion</B> are enabled.
+<DT><B>extquote</B>
+
+<DD>
+If set, <B>$</B>aq<I>string</I>aq and <B>$</B>&quot;<I>string</I>&quot; quoting is
+performed within <B>${</B><I>parameter</I><B>}</B> expansions
+enclosed in double quotes. This option is enabled by default.
+<DT><B>failglob</B>
+
+<DD>
+If set, patterns which fail to match filenames during pathname expansion
+result in an expansion error.
+<DT><B>force_fignore</B>
+
+<DD>
+If set, the suffixes specified by the
+<FONT SIZE=-1><B>FIGNORE</B>
+
+</FONT>
+shell variable
+cause words to be ignored when performing word completion even if
+the ignored words are the only possible completions.
+See
+<FONT SIZE=-1><B>SHELL VARIABLES</B></FONT>
+above for a description of
+<FONT SIZE=-1><B>FIGNORE</B>.
+
+</FONT>
+This option is enabled by default.
+<DT><B>globasciiranges</B>
+
+<DD>
+If set, range expressions used in pattern matching bracket expressions (see
+<FONT SIZE=-1><B>Pattern Matching</B>
+
+</FONT>
+above) behave as if in the traditional C locale when performing
+comparisons. That is, the current locale's collating sequence
+is not taken into account, so
+<B>b</B>
+
+will not collate between
+<B>A</B>
+
+and
+<B>B</B>,
+
+and upper-case and lower-case ASCII characters will collate together.
+<DT><B>globstar</B>
+
+<DD>
+If set, the pattern <B>**</B> used in a pathname expansion context will
+match all files and zero or more directories and subdirectories.
+If the pattern is followed by a <B>/</B>, only directories and
+subdirectories match.
+<DT><B>gnu_errfmt</B>
+
+<DD>
+If set, shell error messages are written in the standard GNU error
+message format.
+<DT><B>histappend</B>
+
+<DD>
+If set, the history list is appended to the file named by the value
+of the
+<FONT SIZE=-1><B>HISTFILE</B>
+
+</FONT>
+variable when the shell exits, rather than overwriting the file.
+<DT><B>histreedit</B>
+
+<DD>
+If set, and
+<B>readline</B>
+
+is being used, a user is given the opportunity to re-edit a
+failed history substitution.
+<DT><B>histverify</B>
+
+<DD>
+If set, and
+<B>readline</B>
+
+is being used, the results of history substitution are not immediately
+passed to the shell parser. Instead, the resulting line is loaded into
+the <B>readline</B> editing buffer, allowing further modification.
+<DT><B>hostcomplete</B>
+
+<DD>
+If set, and
+<B>readline</B>
+
+is being used, <B>bash</B> will attempt to perform hostname completion when a
+word containing a <B>@</B> is being completed (see
+<B>Completing</B>
+
+under
+<FONT SIZE=-1><B>READLINE</B>
+
+</FONT>
+above).
+This is enabled by default.
+<DT><B>huponexit</B>
+
+<DD>
+If set, <B>bash</B> will send
+<FONT SIZE=-1><B>SIGHUP</B>
+
+</FONT>
+to all jobs when an interactive login shell exits.
+<DT><B>inherit_errexit</B>
+
+<DD>
+If set, command substitution inherits the value of the <B>errexit</B> option,
+instead of unsetting it in the subshell environment.
+This option is enabled when <I>posix mode</I> is enabled.
+<DT><B>interactive_comments</B>
+
+<DD>
+If set, allow a word beginning with
+<B>#</B>
+
+to cause that word and all remaining characters on that
+line to be ignored in an interactive shell (see
+<FONT SIZE=-1><B>COMMENTS</B>
+
+</FONT>
+above). This option is enabled by default.
+<DT><B>lastpipe</B>
+
+<DD>
+If set, and job control is not active, the shell runs the last command of
+a pipeline not executed in the background in the current shell environment.
+<DT><B>lithist</B>
+
+<DD>
+If set, and the
+<B>cmdhist</B>
+
+option is enabled, multi-line commands are saved to the history with
+embedded newlines rather than using semicolon separators where possible.
+<DT><B>localvar_inherit</B>
+
+<DD>
+If set, local variables inherit the value and attributes of a variable of
+the same name that exists at a previous scope before any new value is
+assigned. The nameref attribute is not inherited.
+<DT><B>localvar_unset</B>
+
+<DD>
+If set, calling <B>unset</B> on local variables in previous function scopes
+marks them so subsequent lookups find them unset until that function
+returns. This is identical to the behavior of unsetting local variables
+at the current function scope.
+<DT><B>login_shell</B>
+
+<DD>
+The shell sets this option if it is started as a login shell (see
+<FONT SIZE=-1><B>INVOCATION</B>
+
+</FONT>
+above).
+The value may not be changed.
+<DT><B>mailwarn</B>
+
+<DD>
+If set, and a file that <B>bash</B> is checking for mail has been
+accessed since the last time it was checked, the message ``The mail in
+<I>mailfile</I> has been read'' is displayed.
+<DT><B>no_empty_cmd_completion</B>
+
+<DD>
+If set, and
+<B>readline</B>
+
+is being used,
+<B>bash</B>
+
+will not attempt to search the
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+for possible completions when
+completion is attempted on an empty line.
+<DT><B>nocaseglob</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+matches filenames in a case-insensitive fashion when performing pathname
+expansion (see
+<B>Pathname Expansion</B>
+
+above).
+<DT><B>nocasematch</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+matches patterns in a case-insensitive fashion when performing matching
+while executing <B>case</B> or <B>[[</B> conditional commands,
+when performing pattern substitution word expansions,
+or when filtering possible completions as part of programmable completion.
+<DT><B>nullglob</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+allows patterns which match no
+files (see
+<B>Pathname Expansion</B>
+
+above)
+to expand to a null string, rather than themselves.
+<DT><B>progcomp</B>
+
+<DD>
+If set, the programmable completion facilities (see
+<B>Programmable Completion</B> above) are enabled.
+This option is enabled by default.
+<DT><B>progcomp_alias</B>
+
+<DD>
+If set, and programmable completion is enabled, <B>bash</B> treats a command
+name that doesn't have any completions as a possible alias and attempts
+alias expansion. If it has an alias, <B>bash</B> attempts programmable
+completion using the command word resulting from the expanded alias.
+<DT><B>promptvars</B>
+
+<DD>
+If set, prompt strings undergo
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal after being expanded as described in
+<FONT SIZE=-1><B>PROMPTING</B>
+
+</FONT>
+above. This option is enabled by default.
+<DT><B>restricted_shell</B>
+
+<DD>
+The shell sets this option if it is started in restricted mode (see
+<FONT SIZE=-1><B>RESTRICTED SHELL</B>
+
+</FONT>
+below).
+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.
+<DT><B>shift_verbose</B>
+
+<DD>
+If set, the
+<B>shift</B>
+
+builtin prints an error message when the shift count exceeds the
+number of positional parameters.
+<DT><B>sourcepath</B>
+
+<DD>
+If set, the
+<B>source</B> (<B>.</B>) builtin uses the value of
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+to find the directory containing the file supplied as an argument.
+This option is enabled by default.
+<DT><B>xpg_echo</B>
+
+<DD>
+If set, the <B>echo</B> builtin expands backslash-escape sequences
+by default.
+</DL></DL>
+
+
+<DT><B>suspend</B> [<B>-f</B>]<DD>
+Suspend the execution of this shell until it receives a
+<FONT SIZE=-1><B>SIGCONT</B>
+
+</FONT>
+signal. A login shell cannot be suspended; the
+<B>-f</B>
+
+option can be used to override this and force the suspension.
+The return status is 0 unless the shell is a login shell and
+<B>-f</B>
+
+is not supplied, or if job control is not enabled.
+<DT><B>test</B> <I>expr</I><DD>
+
+<DT><B>[</B> <I>expr</I> <B>]</B><DD>
+Return a status of 0 (true) or 1 (false) depending on
+the evaluation of the conditional expression
+<I>expr</I>.
+
+Each operator and operand must be a separate argument.
+Expressions are composed of the primaries described above under
+<FONT SIZE=-1><B>CONDITIONAL EXPRESSIONS</B>.
+
+</FONT>
+<B>test</B> does not accept any options, nor does it accept and ignore
+an argument of <B>--</B> as signifying the end of options.
+<P>
+
+
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence.
+The evaluation depends on the number of arguments; see below.
+Operator precedence is used when there are five or more arguments.
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>! </B><I>expr</I>
+
+<DD>
+True if
+<I>expr</I>
+
+is false.
+<DT><B>( </B><I>expr</I> )
+
+<DD>
+Returns the value of <I>expr</I>.
+This may be used to override the normal precedence of operators.
+<DT><I>expr1</I> -<B>a</B> <I>expr2</I><DD>
+True if both
+<I>expr1</I>
+
+and
+<I>expr2</I>
+
+are true.
+<DT><I>expr1</I> -<B>o</B> <I>expr2</I><DD>
+True if either
+<I>expr1</I>
+
+or
+<I>expr2</I>
+
+is true.
+
+</DL>
+<P>
+
+<B>test</B> and <B>[</B> evaluate conditional
+expressions using a set of rules based on the number of arguments.
+<P>
+
+
+
+<DL COMPACT>
+<DT>0 arguments<DD>
+The expression is false.
+<DT>1 argument<DD>
+The expression is true if and only if the argument is not null.
+<DT>2 arguments<DD>
+If the first argument is <B>!</B>, the expression is true if and
+only if the second argument is null.
+If the first argument is one of the unary conditional operators listed above
+under
+<FONT SIZE=-1><B>CONDITIONAL EXPRESSIONS</B>,
+
+</FONT>
+the expression is true if the unary test is true.
+If the first argument is not a valid unary conditional operator, the expression
+is false.
+<DT>3 arguments<DD>
+The following conditions are applied in the order listed.
+If the second argument is one of the binary conditional operators listed above
+under
+<FONT SIZE=-1><B>CONDITIONAL EXPRESSIONS</B>,
+
+</FONT>
+the result of the expression is the result of the binary test using
+the first and third arguments as operands.
+The <B>-a</B> and <B>-o</B> operators are considered binary operators
+when there are three arguments.
+If the first argument is <B>!</B>, the value is the negation of
+the two-argument test using the second and third arguments.
+If the first argument is exactly <B>(</B> and the third argument is
+exactly <B>)</B>, the result is the one-argument test of the second
+argument.
+Otherwise, the expression is false.
+<DT>4 arguments<DD>
+If the first argument is <B>!</B>, 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.
+<DT>5 or more arguments<DD>
+The expression is parsed and evaluated according to precedence
+using the rules listed above.
+<P>
+
+
+</DL>
+<P>
+
+When used with <B>test</B> or <B>[</B>, the <B>&lt;</B> and <B>&gt;</B> operators
+sort lexicographically using ASCII ordering.
+</DL>
+
+
+<DT><B>times</B>
+
+<DD>
+Print the accumulated user and system times for the shell and
+for processes run from the shell. The return status is 0.
+<DT><B>trap</B> [<B>-lp</B>] [[<I>arg</I>] <I>sigspec</I> ...]<DD>
+The command
+<I>arg</I>
+
+is to be read and executed when the shell receives
+signal(s)
+<I>sigspec</I>.
+
+If
+<I>arg</I>
+
+is absent (and there is a single <I>sigspec</I>) or
+<B>-</B>,
+
+each specified signal is
+reset to its original disposition (the value it had
+upon entrance to the shell).
+If
+<I>arg</I>
+
+is the null string the signal specified by each
+<I>sigspec</I>
+
+is ignored by the shell and by the commands it invokes.
+If
+<I>arg</I>
+
+is not present and
+<B>-p</B>
+
+has been supplied, then the trap commands associated with each
+<I>sigspec</I>
+
+are displayed.
+If no arguments are supplied or if only
+<B>-p</B>
+
+is given,
+<B>trap</B>
+
+prints the list of commands associated with each signal.
+The
+<B>-l</B>
+
+option causes the shell to print a list of signal names and
+their corresponding numbers.
+Each
+<I>sigspec</I>
+
+is either
+a signal name defined in &lt;<I>signal.h</I>&gt;, or a signal number.
+Signal names are case insensitive and the
+<FONT SIZE=-1><B>SIG</B>
+
+</FONT>
+prefix is optional.
+<P>
+
+
+If a
+<I>sigspec</I>
+
+is
+<FONT SIZE=-1><B>EXIT</B>
+
+</FONT>
+(0) the command
+<I>arg</I>
+
+is executed on exit from the shell.
+If a
+<I>sigspec</I>
+
+is
+<FONT SIZE=-1><B>DEBUG</B>,
+
+</FONT>
+the command
+<I>arg</I>
+
+is executed before every <I>simple command</I>, <I>for</I> command,
+<I>case</I> command, <I>select</I> command, every arithmetic <I>for</I>
+command, and before the first command executes in a shell function (see
+<FONT SIZE=-1><B>SHELL GRAMMAR</B>
+
+</FONT>
+above).
+Refer to the description of the <B>extdebug</B> option to the
+<B>shopt</B> builtin for details of its effect on the <B>DEBUG</B> trap.
+If a
+<I>sigspec</I>
+
+is
+<FONT SIZE=-1><B>RETURN</B>,
+
+</FONT>
+the command
+<I>arg</I>
+
+is executed each time a shell function or a script executed with
+the <B>.</B> or <B>source</B> builtins finishes executing.
+<P>
+
+
+If a
+<I>sigspec</I>
+
+is
+<FONT SIZE=-1><B>ERR</B>,
+
+</FONT>
+the command
+<I>arg</I>
+
+is executed whenever
+a pipeline (which may consist of a single simple
+command), a list, or a compound command returns a
+non-zero exit status,
+subject to the following conditions.
+The
+<FONT SIZE=-1><B>ERR</B>
+
+</FONT>
+trap is not executed if the failed
+command is part of the command list immediately following a
+<B>while</B>
+
+or
+<B>until</B>
+
+keyword,
+part of the test in an
+<I>if</I>
+
+statement, part of a command executed in a
+<B>&amp;&amp;</B>
+
+or
+<B>||</B>
+
+list except the command following the final <B>&amp;&amp;</B> or <B>||</B>,
+any command in a pipeline but the last,
+or if the command's return value is
+being inverted using
+<B>!</B>.
+
+These are the same conditions obeyed by the <B>errexit</B> (<B>-e</B>) option.
+<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 subshell or subshell environment when one is created.
+The return status is false if any
+<I>sigspec</I>
+
+is invalid; otherwise
+<B>trap</B>
+
+returns true.
+<DT><B>type</B> [<B>-aftpP</B>] <I>name</I> [<I>name</I> ...]<DD>
+With no options,
+indicate how each
+<I>name</I>
+
+would be interpreted if used as a command name.
+If the
+<B>-t</B>
+
+option is used,
+<B>type</B>
+
+prints a string which is one of
+<I>alias</I>,
+
+<I>keyword</I>,
+
+<I>function</I>,
+
+<I>builtin</I>,
+
+or
+<I>file</I>
+
+if
+<I>name</I>
+
+is an alias, shell reserved word, function, builtin, or disk file,
+respectively.
+If the
+<I>name</I>
+
+is not found, then nothing is printed, and an exit status of false
+is returned.
+If the
+<B>-p</B>
+
+option is used,
+<B>type</B>
+
+either returns the name of the disk file
+that would be executed if
+<I>name</I>
+
+were specified as a command name,
+or nothing if
+<TT>type -t name</TT>
+
+would not return
+<I>file</I>.
+
+The
+<B>-P</B>
+
+option forces a
+<FONT SIZE=-1><B>PATH</B>
+
+</FONT>
+search for each <I>name</I>, even if
+<TT>type -t name</TT>
+
+would not return
+<I>file</I>.
+
+If a command is hashed,
+<B>-p</B>
+
+and
+<B>-P</B>
+
+print the hashed value, which is not necessarily the file that appears
+first in
+<FONT SIZE=-1><B>PATH</B>.
+
+</FONT>
+If the
+<B>-a</B>
+
+option is used,
+<B>type</B>
+
+prints all of the places that contain
+an executable named
+<I>name</I>.
+
+This includes aliases and functions,
+if and only if the
+<B>-p</B>
+
+option is not also used.
+The table of hashed commands is not consulted
+when using
+<B>-a</B>.
+
+The
+<B>-f</B>
+
+option suppresses shell function lookup, as with the <B>command</B> builtin.
+<B>type</B>
+
+returns true if all of the arguments are found, false if
+any are not found.
+<DT><B>ulimit</B> [<B>-HSabcdefiklmnpqrstuvxPT</B> [<I>limit</I>]]<DD>
+Provides control over the resources available to the shell and to
+processes started by it, on systems that allow such control.
+The <B>-H</B> and <B>-S</B> options specify that the hard or soft limit is
+set for the given resource.
+A hard limit cannot be increased by a non-root user once it is set;
+a soft limit may be increased up to the value of the hard limit.
+If neither <B>-H</B> nor <B>-S</B> is specified, both the soft and hard
+limits are set.
+The value of
+<I>limit</I>
+
+can be a number in the unit specified for the resource
+or one of the special values
+<B>hard</B>,
+
+<B>soft</B>,
+
+or
+<B>unlimited</B>,
+
+which stand for the current hard limit, the current soft limit, and
+no limit, respectively.
+If
+<I>limit</I>
+
+is omitted, the current value of the soft limit of the resource is
+printed, unless the <B>-H</B> option is given. When more than one
+resource is specified, the limit name and unit are printed before the value.
+Other options are interpreted as follows:
+<DL COMPACT><DT><DD>
+
+<DL COMPACT>
+<DT><B>-a</B>
+
+<DD>
+All current limits are reported
+<DT><B>-b</B>
+
+<DD>
+The maximum socket buffer size
+<DT><B>-c</B>
+
+<DD>
+The maximum size of core files created
+<DT><B>-d</B>
+
+<DD>
+The maximum size of a process's data segment
+<DT><B>-e</B>
+
+<DD>
+The maximum scheduling priority (&quot;nice&quot;)
+<DT><B>-f</B>
+
+<DD>
+The maximum size of files written by the shell and its children
+<DT><B>-i</B>
+
+<DD>
+The maximum number of pending signals
+<DT><B>-k</B>
+
+<DD>
+The maximum number of kqueues that may be allocated
+<DT><B>-l</B>
+
+<DD>
+The maximum size that may be locked into memory
+<DT><B>-m</B>
+
+<DD>
+The maximum resident set size (many systems do not honor this limit)
+<DT><B>-n</B>
+
+<DD>
+The maximum number of open file descriptors (most systems do not
+allow this value to be set)
+<DT><B>-p</B>
+
+<DD>
+The pipe size in 512-byte blocks (this may not be set)
+<DT><B>-q</B>
+
+<DD>
+The maximum number of bytes in POSIX message queues
+<DT><B>-r</B>
+
+<DD>
+The maximum real-time scheduling priority
+<DT><B>-s</B>
+
+<DD>
+The maximum stack size
+<DT><B>-t</B>
+
+<DD>
+The maximum amount of cpu time in seconds
+<DT><B>-u</B>
+
+<DD>
+The maximum number of processes available to a single user
+<DT><B>-v</B>
+
+<DD>
+The maximum amount of virtual memory available to the shell and, on
+some systems, to its children
+<DT><B>-x</B>
+
+<DD>
+The maximum number of file locks
+<DT><B>-P</B>
+
+<DD>
+The maximum number of pseudoterminals
+<DT><B>-T</B>
+
+<DD>
+The maximum number of threads
+
+</DL>
+<P>
+
+If
+<I>limit</I>
+
+is given, and the
+<B>-a</B>
+
+option is not used,
+<I>limit</I> is the new value of the specified resource.
+If no option is given, then
+<B>-f</B>
+
+is assumed. Values are in 1024-byte increments, except for
+<B>-t</B>,
+
+which is in seconds;
+<B>-p</B>,
+
+which is in units of 512-byte blocks;
+<B>-P</B>,
+
+<B>-T</B>,
+
+<B>-b</B>,
+
+<B>-k</B>,
+
+<B>-n</B>,
+
+and
+<B>-u</B>,
+
+which are unscaled values;
+and, when in posix mode,
+<B>-c</B>
+
+and
+<B>-f</B>,
+
+which are in 512-byte increments.
+The return status is 0 unless an invalid option or argument is supplied,
+or an error occurs while setting a new limit.
+</DL>
+
+<DT><B>umask</B> [<B>-p</B>] [<B>-S</B>] [<I>mode</I>]<DD>
+The user file-creation mask is set to
+<I>mode</I>.
+
+If
+<I>mode</I>
+
+begins with a digit, it
+is interpreted as an octal number; otherwise
+it is interpreted as a symbolic mode mask similar
+to that accepted by
+<I>chmod</I>(1).
+
+If
+<I>mode</I>
+
+is omitted, the current value of the mask is printed.
+The
+<B>-S</B>
+
+option causes the mask to be printed in symbolic form; the
+default output is an octal number.
+If the
+<B>-p</B>
+
+option is supplied, and
+<I>mode</I>
+
+is omitted, the output is in a form that may be reused as input.
+The return status is 0 if the mode was successfully changed or if
+no <I>mode</I> argument was supplied, and false otherwise.
+<DT><B>unalias</B> [-<B>a</B>] [<I>name</I> ...]<DD>
+Remove each <I>name</I> from the list of defined aliases. If
+<B>-a</B>
+
+is supplied, all alias definitions are removed. The return
+value is true unless a supplied
+<I>name</I>
+
+is not a defined alias.
+<DT><B>unset</B> [-<B>fv</B>] [-<B>n</B>] [<I>name</I> ...]<DD>
+For each
+<I>name</I>,
+
+remove the corresponding variable or function.
+If the
+<B>-v</B>
+
+option is given, each
+<I>name</I>
+
+refers to a shell variable, and that variable is removed.
+Read-only variables may not be unset.
+If
+<B>-f</B>
+
+is specified, each
+<I>name</I>
+
+refers to a shell function, and the function definition
+is removed.
+If the
+<B>-n</B>
+
+option is supplied, and <I>name</I> is a variable with the <I>nameref</I>
+attribute, <I>name</I> will be unset rather than the variable it
+references.
+<B>-n</B> has no effect if the <B>-f</B> option is supplied.
+If no options are supplied, each <I>name</I> refers to a variable; if
+there is no variable by that name, any function with that name is
+unset.
+Each unset variable or function is removed from the environment
+passed to subsequent commands.
+If any of
+<FONT SIZE=-1><B>COMP_WORDBREAKS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>RANDOM</B>,
+
+</FONT>
+<FONT SIZE=-1><B>SECONDS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>LINENO</B>,
+
+</FONT>
+<FONT SIZE=-1><B>HISTCMD</B>,
+
+</FONT>
+<FONT SIZE=-1><B>FUNCNAME</B>,
+
+</FONT>
+<FONT SIZE=-1><B>GROUPS</B>,
+
+</FONT>
+or
+<FONT SIZE=-1><B>DIRSTACK</B>
+
+</FONT>
+are unset, they lose their special properties, even if they are
+subsequently reset. The exit status is true unless a
+<I>name</I>
+
+is readonly.
+<DT><B>wait</B> [<B>-fn</B>] [<I>id ...</I>]<DD>
+Wait for each specified child process and return its termination status.
+Each
+<I>id</I>
+
+may be a process
+ID or a job specification; if a job spec is given, all processes
+in that job's pipeline are waited for. If
+<I>id</I>
+
+is not given, all currently active child processes
+are waited for, and the return status is zero.
+If the <B>-n</B> option is supplied, <B>wait</B> waits for any job to
+terminate and returns its exit status.
+If the <B>-f</B> option is supplied, and job control is enabled,
+<B>wait</B> forces <I>id</I> to terminate before returning its status,
+instead of returning when it changes status.
+If
+<I>id</I>
+
+specifies a non-existent process or job, the return status is
+127. Otherwise, the return status is the exit status of the last
+process or job waited for.
+
+
+</DL>
+<A NAME="lbDC">&nbsp;</A>
+<H3>RESTRICTED SHELL</H3>
+
+
+
+<P>
+
+If
+<B>bash</B>
+
+is started with the name
+<B>rbash</B>,
+
+or the
+<B>-r</B>
+
+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.
+It behaves identically to
+<B>bash</B>
+
+with the exception that the following are disallowed or not performed:
+<DL COMPACT>
+<DT>*<DD>
+changing directories with <B>cd</B>
+<DT>*<DD>
+setting or unsetting the values of
+<FONT SIZE=-1><B>SHELL</B>,
+
+</FONT>
+<FONT SIZE=-1><B>PATH</B>,
+
+</FONT>
+<FONT SIZE=-1><B>ENV</B>,
+
+</FONT>
+or
+<FONT SIZE=-1><B>BASH_ENV</B>
+
+</FONT>
+<DT>*<DD>
+specifying command names containing
+<B>/</B>
+
+<DT>*<DD>
+specifying a filename containing a
+<B>/</B>
+
+as an argument to the
+<B>.</B>
+
+builtin command
+<DT>*<DD>
+specifying a filename containing a slash as an argument to the
+<B>-p</B>
+
+option to the
+<B>hash</B>
+
+builtin command
+<DT>*<DD>
+importing function definitions from the shell environment at startup
+<DT>*<DD>
+parsing the value of
+<FONT SIZE=-1><B>SHELLOPTS</B>
+
+</FONT>
+from the shell environment at startup
+<DT>*<DD>
+redirecting output using the &gt;, &gt;|, &lt;&gt;, &gt;&amp;, &amp;&gt;, and &gt;&gt; redirection operators
+<DT>*<DD>
+using the
+<B>exec</B>
+
+builtin command to replace the shell with another command
+<DT>*<DD>
+adding or deleting builtin commands with the
+<B>-f</B>
+
+and
+<B>-d</B>
+
+options to the
+<B>enable</B>
+
+builtin command
+<DT>*<DD>
+using the <B>enable</B> builtin command to enable disabled shell builtins
+<DT>*<DD>
+specifying the
+<B>-p</B>
+
+option to the
+<B>command</B>
+
+builtin command
+<DT>*<DD>
+turning off restricted mode with
+<B>set +r</B> or <B>set +o restricted</B>.
+</DL>
+<P>
+
+These restrictions are enforced after any startup files are read.
+<P>
+
+
+ When a command that is found to be a shell script is executed
+(see
+<FONT SIZE=-1><B>COMMAND EXECUTION</B>
+
+</FONT>
+
+above),
+
+<B>rbash</B>
+
+turns off any restrictions in the shell spawned to execute the
+script.
+
+
+<A NAME="lbDD">&nbsp;</A>
+<H3>SEE ALSO</H3>
+
+
+<DL COMPACT>
+<DT><I>Bash Reference Manual</I>, Brian Fox and Chet Ramey<DD>
+<DT><I>The Gnu Readline Library</I>, Brian Fox and Chet Ramey<DD>
+<DT><I>The Gnu History Library</I>, Brian Fox and Chet Ramey<DD>
+<DT><I>Portable Operating System Interface (POSIX) Part 2: Shell and Utilities</I>, IEEE --<DD>
+<A HREF="http://pubs.opengroup.org/onlinepubs/9699919799/">http://pubs.opengroup.org/onlinepubs/9699919799/</A>
+<DT><A HREF="http://tiswww.case.edu/~chet/bash/POSIX">http://tiswww.case.edu/~chet/bash/POSIX</A> -- a description of posix mode<DD>
+<DT><I>sh</I>(1), <I>ksh</I>(1), <I>csh</I>(1)<DD>
+<DT><I>emacs</I>(1), <I>vi</I>(1)<DD>
+<DT><I>readline</I>(3)<DD>
+
+</DL>
+<A NAME="lbDE">&nbsp;</A>
+<H3>FILES</H3>
+
+
+<DL COMPACT>
+<DT>
+<A HREF="file:/bin/bash"><I>/bin/bash</I></A>
+
+<DD>
+The <B>bash</B> executable
+<DT>
+<A HREF="file:/etc/profile"><I>/etc/profile</I></A>
+
+<DD>
+The systemwide initialization file, executed for login shells
+<DT>
+<A HREF="file:~/.bash_profile"><I>~/.bash_profile</I></A>
+
+<DD>
+The personal initialization file, executed for login shells
+<DT>
+<A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>
+
+<DD>
+The individual per-interactive-shell startup file
+<DT>
+<A HREF="file:~/.bash_logout"><I>~/.bash_logout</I></A>
+
+<DD>
+The individual login shell cleanup file, executed when a login shell exits
+<DT>
+<A HREF="file:~/.inputrc"><I>~/.inputrc</I></A>
+
+<DD>
+Individual <I>readline</I> initialization file
+
+</DL>
+<A NAME="lbDF">&nbsp;</A>
+<H3>AUTHORS</H3>
+
+Brian Fox, Free Software Foundation
+<BR>
+
+<A HREF="mailto:bfox@gnu.org">bfox@gnu.org</A>
+<P>
+
+Chet Ramey, Case Western Reserve University
+<BR>
+
+<A HREF="mailto:chet.ramey@case.edu">chet.ramey@case.edu</A>
+<A NAME="lbDG">&nbsp;</A>
+<H3>BUG REPORTS</H3>
+
+If you find a bug in
+<B>bash,</B>
+
+you should report it. But first, you should
+make sure that it really is a bug, and that it appears in the latest
+version of
+<B>bash</B>.
+
+The latest version is always available from
+<I><A HREF="ftp://ftp.gnu.org/pub/gnu/bash/">ftp://ftp.gnu.org/pub/gnu/bash/</A></I>.
+<P>
+
+Once you have determined that a bug actually exists, use the
+<I>bashbug</I>
+
+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 <I><A HREF="mailto:bug-bash@gnu.org">bug-bash@gnu.org</A></I> or posted to the Usenet
+newsgroup
+<A HREF="news:gnu.bash.bug">gnu.bash.bug</A>.
+
+<P>
+
+ALL bug reports should include:
+<P>
+
+
+<DL COMPACT>
+<DT>The version number of <B>bash</B><DD>
+<DT>The hardware and operating system<DD>
+<DT>The compiler used to compile<DD>
+<DT>A description of the bug behaviour<DD>
+<DT>A short script or `recipe' which exercises the bug<DD>
+
+</DL>
+<P>
+
+<I>bashbug</I>
+
+inserts the first three items automatically into the template
+it provides for filing a bug report.
+<P>
+
+Comments and bug reports concerning
+this manual page should be directed to
+<I><A HREF="mailto:chet.ramey@case.edu">chet.ramey@case.edu</A></I>.
+
+<A NAME="lbDH">&nbsp;</A>
+<H3>BUGS</H3>
+
+<P>
+
+It's too big and too slow.
+<P>
+
+There are some subtle differences between
+<B>bash</B>
+
+and traditional versions of
+<B>sh</B>,
+
+mostly because of the
+<FONT SIZE=-1><B>POSIX</B>
+
+</FONT>
+specification.
+<P>
+
+Aliases are confusing in some uses.
+<P>
+
+Shell builtin commands and functions are not stoppable/restartable.
+<P>
+
+Compound commands and command sequences of the form `a ; b ; c'
+are not handled gracefully when process suspension is attempted.
+When a process is stopped, the shell immediately executes the next
+command in the sequence.
+It suffices to place the sequence of commands between
+parentheses to force it into a subshell, which may be stopped as
+a unit.
+<P>
+
+Array variables may not (yet) be exported.
+<P>
+
+There may be only one active coprocess at a time.
+
+
+
+<HR>
+<TABLE WIDTH=100%>
+<TR>
+<TH ALIGN=LEFT width=33%>GNU Bash 5.0<TH ALIGN=CENTER width=33%>2018 December 7<TH ALIGN=RIGHT width=33%>BASH(1)
+</TR>
+</TABLE>
+<HR>
+<A NAME="index">&nbsp;</A><H2>Index</H2>
+<DL>
+<DT><A HREF="#lbAB">NAME</A><DD>
+<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
+<DT><A HREF="#lbAD">COPYRIGHT</A><DD>
+<DT><A HREF="#lbAE">DESCRIPTION</A><DD>
+<DT><A HREF="#lbAF">OPTIONS</A><DD>
+<DT><A HREF="#lbAG">ARGUMENTS</A><DD>
+<DT><A HREF="#lbAH">INVOCATION</A><DD>
+<DT><A HREF="#lbAI">DEFINITIONS</A><DD>
+<DT><A HREF="#lbAJ">RESERVED WORDS</A><DD>
+<DT><A HREF="#lbAK">SHELL GRAMMAR</A><DD>
+<DL>
+<DT><A HREF="#lbAL">Simple Commands</A><DD>
+<DT><A HREF="#lbAM">Pipelines</A><DD>
+<DT><A HREF="#lbAN">Lists</A><DD>
+<DT><A HREF="#lbAO">Compound Commands</A><DD>
+<DT><A HREF="#lbAP">Coprocesses</A><DD>
+<DT><A HREF="#lbAQ">Shell Function Definitions</A><DD>
+</DL>
+<DT><A HREF="#lbAR">COMMENTS</A><DD>
+<DT><A HREF="#lbAS">QUOTING</A><DD>
+<DT><A HREF="#lbAT">PARAMETERS</A><DD>
+<DL>
+<DT><A HREF="#lbAU">Positional Parameters</A><DD>
+<DT><A HREF="#lbAV">Special Parameters</A><DD>
+<DT><A HREF="#lbAW">Shell Variables</A><DD>
+<DT><A HREF="#lbAX">Arrays</A><DD>
+</DL>
+<DT><A HREF="#lbAY">EXPANSION</A><DD>
+<DL>
+<DT><A HREF="#lbAZ">Brace Expansion</A><DD>
+<DT><A HREF="#lbBA">Tilde Expansion</A><DD>
+<DT><A HREF="#lbBB">Parameter Expansion</A><DD>
+<DT><A HREF="#lbBC">Command Substitution</A><DD>
+<DT><A HREF="#lbBD">Arithmetic Expansion</A><DD>
+<DT><A HREF="#lbBE">Process Substitution</A><DD>
+<DT><A HREF="#lbBF">Word Splitting</A><DD>
+<DT><A HREF="#lbBG">Pathname Expansion</A><DD>
+<DT><A HREF="#lbBH">Quote Removal</A><DD>
+</DL>
+<DT><A HREF="#lbBI">REDIRECTION</A><DD>
+<DL>
+<DT><A HREF="#lbBJ">Redirecting Input</A><DD>
+<DT><A HREF="#lbBK">Redirecting Output</A><DD>
+<DT><A HREF="#lbBL">Appending Redirected Output</A><DD>
+<DT><A HREF="#lbBM">Redirecting Standard Output and Standard Error</A><DD>
+<DT><A HREF="#lbBN">Appending Standard Output and Standard Error</A><DD>
+<DT><A HREF="#lbBO">Here Documents</A><DD>
+<DT><A HREF="#lbBP">Here Strings</A><DD>
+<DT><A HREF="#lbBQ">Duplicating File Descriptors</A><DD>
+<DT><A HREF="#lbBR">Moving File Descriptors</A><DD>
+<DT><A HREF="#lbBS">Opening File Descriptors for Reading and Writing</A><DD>
+</DL>
+<DT><A HREF="#lbBT">ALIASES</A><DD>
+<DT><A HREF="#lbBU">FUNCTIONS</A><DD>
+<DT><A HREF="#lbBV">ARITHMETIC EVALUATION</A><DD>
+<DT><A HREF="#lbBW">CONDITIONAL EXPRESSIONS</A><DD>
+<DT><A HREF="#lbBX">SIMPLE COMMAND EXPANSION</A><DD>
+<DT><A HREF="#lbBY">COMMAND EXECUTION</A><DD>
+<DT><A HREF="#lbBZ">COMMAND EXECUTION ENVIRONMENT</A><DD>
+<DT><A HREF="#lbCA">ENVIRONMENT</A><DD>
+<DT><A HREF="#lbCB">EXIT STATUS</A><DD>
+<DT><A HREF="#lbCC">SIGNALS</A><DD>
+<DT><A HREF="#lbCD">JOB CONTROL</A><DD>
+<DT><A HREF="#lbCE">PROMPTING</A><DD>
+<DT><A HREF="#lbCF">READLINE</A><DD>
+<DL>
+<DT><A HREF="#lbCG">Readline Notation</A><DD>
+<DT><A HREF="#lbCH">Readline Initialization</A><DD>
+<DT><A HREF="#lbCI">Readline Key Bindings</A><DD>
+<DT><A HREF="#lbCJ">Readline Variables</A><DD>
+<DT><A HREF="#lbCK">Readline Conditional Constructs</A><DD>
+<DT><A HREF="#lbCL">Searching</A><DD>
+<DT><A HREF="#lbCM">Readline Command Names</A><DD>
+<DT><A HREF="#lbCN">Commands for Moving</A><DD>
+<DT><A HREF="#lbCO">Commands for Manipulating the History</A><DD>
+<DT><A HREF="#lbCP">Commands for Changing Text</A><DD>
+<DT><A HREF="#lbCQ">Killing and Yanking</A><DD>
+<DT><A HREF="#lbCR">Numeric Arguments</A><DD>
+<DT><A HREF="#lbCS">Completing</A><DD>
+<DT><A HREF="#lbCT">Keyboard Macros</A><DD>
+<DT><A HREF="#lbCU">Miscellaneous</A><DD>
+<DT><A HREF="#lbCV">Programmable Completion</A><DD>
+</DL>
+<DT><A HREF="#lbCW">HISTORY</A><DD>
+<DT><A HREF="#lbCX">HISTORY EXPANSION</A><DD>
+<DL>
+<DT><A HREF="#lbCY">Event Designators</A><DD>
+<DT><A HREF="#lbCZ">Word Designators</A><DD>
+<DT><A HREF="#lbDA">Modifiers</A><DD>
+</DL>
+<DT><A HREF="#lbDB">SHELL BUILTIN COMMANDS</A><DD>
+<DT><A HREF="#lbDC">RESTRICTED SHELL</A><DD>
+<DT><A HREF="#lbDD">SEE ALSO</A><DD>
+<DT><A HREF="#lbDE">FILES</A><DD>
+<DT><A HREF="#lbDF">AUTHORS</A><DD>
+<DT><A HREF="#lbDG">BUG REPORTS</A><DD>
+<DT><A HREF="#lbDH">BUGS</A><DD>
+</DL>
+<HR>
+This document was created by man2html from bash.1.<BR>
+Time: 02 January 2019 09:14:47 EST
+</BODY>
+</HTML>
diff --git a/doc/bash.info b/doc/bash.info
new file mode 100644
index 0000000..39f3212
--- /dev/null
+++ b/doc/bash.info
@@ -0,0 +1,11816 @@
+This is bash.info, produced by makeinfo version 6.5 from
+bashref.texi.
+
+This text is a brief description of the features that are present in the
+Bash shell (version 5.0, 7 December 2018).
+
+ This is Edition 5.0, last updated 7 December 2018, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.0.
+
+ Copyright (C) 1988-2018 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts, and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License".
+INFO-DIR-SECTION Basics
+START-INFO-DIR-ENTRY
+* Bash: (bash). The GNU Bourne-Again SHell.
+END-INFO-DIR-ENTRY
+
+
+File: bash.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
+
+Bash Features
+*************
+
+This text is a brief description of the features that are present in the
+Bash shell (version 5.0, 7 December 2018). The Bash home page is
+<http://www.gnu.org/software/bash/>.
+
+ This is Edition 5.0, last updated 7 December 2018, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.0.
+
+ Bash contains features that appear in other popular shells, and some
+features that only appear in Bash. Some of the shells that Bash has
+borrowed concepts from are the Bourne Shell ('sh'), the Korn Shell
+('ksh'), and the C-shell ('csh' and its successor, 'tcsh'). The
+following menu breaks the features up into categories, noting which
+features were inspired by other shells and which are specific to Bash.
+
+ 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.
+
+* Menu:
+
+* Introduction:: An introduction to the shell.
+* Definitions:: Some definitions used in the rest of this
+ manual.
+* Basic Shell Features:: The shell "building blocks".
+* Shell Builtin Commands:: Commands that are a part of the shell.
+* Shell Variables:: Variables used or set by Bash.
+* Bash Features:: Features found only in Bash.
+* Job Control:: What job control is and how Bash allows you
+ to use it.
+* Command Line Editing:: Chapter describing the command line
+ editing features.
+* Using History Interactively:: Command History Expansion
+* Installing Bash:: How to build and install Bash on your system.
+* Reporting Bugs:: How to report bugs in Bash.
+* Major Differences From The Bourne Shell:: A terse list of the differences
+ between Bash and historical
+ versions of /bin/sh.
+* GNU Free Documentation License:: Copying and sharing this documentation.
+* Indexes:: Various indexes for this manual.
+
+
+File: bash.info, Node: Introduction, Next: Definitions, Up: Top
+
+1 Introduction
+**************
+
+* Menu:
+
+* What is Bash?:: A short description of Bash.
+* What is a shell?:: A brief introduction to shells.
+
+
+File: bash.info, Node: What is Bash?, Next: What is a shell?, Up: Introduction
+
+1.1 What is Bash?
+=================
+
+Bash is the shell, or command language interpreter, for the GNU
+operating system. The name is an acronym for the 'Bourne-Again SHell',
+a pun on Stephen Bourne, the author of the direct ancestor of the
+current Unix shell 'sh', which appeared in the Seventh Edition Bell Labs
+Research version of Unix.
+
+ Bash is largely compatible with 'sh' and incorporates useful features
+from the Korn shell 'ksh' and the C shell 'csh'. It is intended to be a
+conformant implementation of the IEEE POSIX Shell and Tools portion of
+the IEEE POSIX specification (IEEE Standard 1003.1). It offers
+functional improvements over 'sh' for both interactive and programming
+use.
+
+ While the GNU operating system provides other shells, including a
+version of 'csh', Bash is the default shell. Like other GNU software,
+Bash is quite portable. It currently runs on nearly every version of
+Unix and a few other operating systems - independently-supported ports
+exist for MS-DOS, OS/2, and Windows platforms.
+
+
+File: bash.info, Node: What is a shell?, Prev: What is Bash?, Up: Introduction
+
+1.2 What is a shell?
+====================
+
+At its base, a shell is simply a macro processor that executes commands.
+The term macro processor means functionality where text and symbols are
+expanded to create larger expressions.
+
+ A Unix shell is both a command interpreter and a programming
+language. As a command interpreter, the shell provides the user
+interface to the rich set of GNU utilities. The programming language
+features allow these utilities to be combined. Files containing
+commands can be created, and become commands themselves. These new
+commands have the same status as system commands in directories such as
+'/bin', allowing users or groups to establish custom environments to
+automate their common tasks.
+
+ Shells may be used interactively or non-interactively. In
+interactive mode, they accept input typed from the keyboard. When
+executing non-interactively, shells execute commands read from a file.
+
+ A shell allows execution of GNU commands, both synchronously and
+asynchronously. The shell waits for synchronous commands to complete
+before accepting more input; asynchronous commands continue to execute
+in parallel with the shell while it reads and executes additional
+commands. The "redirection" constructs permit fine-grained control of
+the input and output of those commands. Moreover, the shell allows
+control over the contents of commands' environments.
+
+ Shells also provide a small set of built-in commands ("builtins")
+implementing functionality impossible or inconvenient to obtain via
+separate utilities. For example, 'cd', 'break', 'continue', and 'exec'
+cannot be implemented outside of the shell because they directly
+manipulate the shell itself. The 'history', 'getopts', 'kill', or 'pwd'
+builtins, among others, could be implemented in separate utilities, but
+they are more convenient to use as builtin commands. All of the shell
+builtins are described in subsequent sections.
+
+ While executing commands is essential, most of the power (and
+complexity) of shells is due to their embedded programming languages.
+Like any high-level language, the shell provides variables, flow control
+constructs, quoting, and functions.
+
+ Shells offer features geared specifically for interactive use rather
+than to augment the programming language. These interactive features
+include job control, command line editing, command history and aliases.
+Each of these features is described in this manual.
+
+
+File: bash.info, Node: Definitions, Next: Basic Shell Features, Prev: Introduction, Up: Top
+
+2 Definitions
+*************
+
+These definitions are used throughout the remainder of this manual.
+
+'POSIX'
+ 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.
+
+'blank'
+ A space or tab character.
+
+'builtin'
+ A command that is implemented internally by the shell itself,
+ rather than by an executable program somewhere in the file system.
+
+'control operator'
+ A 'token' that performs a control function. It is a 'newline' or
+ one of the following: '||', '&&', '&', ';', ';;', ';&', ';;&', '|',
+ '|&', '(', or ')'.
+
+'exit status'
+ The value returned by a command to its caller. The value is
+ restricted to eight bits, so the maximum value is 255.
+
+'field'
+ 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.
+
+'filename'
+ A string of characters used to identify a file.
+
+'job'
+ A set of processes comprising a pipeline, and any processes
+ descended from it, that are all in the same process group.
+
+'job control'
+ A mechanism by which users can selectively stop (suspend) and
+ restart (resume) execution of processes.
+
+'metacharacter'
+ A character that, when unquoted, separates words. A metacharacter
+ is a 'space', 'tab', 'newline', or one of the following characters:
+ '|', '&', ';', '(', ')', '<', or '>'.
+
+'name'
+ A 'word' consisting solely of letters, numbers, and underscores,
+ and beginning with a letter or underscore. 'Name's are used as
+ shell variable and function names. Also referred to as an
+ 'identifier'.
+
+'operator'
+ A 'control operator' or a 'redirection operator'. *Note
+ Redirections::, for a list of redirection operators. Operators
+ contain at least one unquoted 'metacharacter'.
+
+'process group'
+ A collection of related processes each having the same process
+ group ID.
+
+'process group ID'
+ A unique identifier that represents a 'process group' during its
+ lifetime.
+
+'reserved word'
+ A 'word' that has a special meaning to the shell. Most reserved
+ words introduce shell flow control constructs, such as 'for' and
+ 'while'.
+
+'return status'
+ A synonym for 'exit status'.
+
+'signal'
+ A mechanism by which a process may be notified by the kernel of an
+ event occurring in the system.
+
+'special builtin'
+ A shell builtin command that has been classified as special by the
+ POSIX standard.
+
+'token'
+ A sequence of characters considered a single unit by the shell. It
+ is either a 'word' or an 'operator'.
+
+'word'
+ A sequence of characters treated as a unit by the shell. Words may
+ not include unquoted 'metacharacters'.
+
+
+File: bash.info, Node: Basic Shell Features, Next: Shell Builtin Commands, Prev: Definitions, Up: Top
+
+3 Basic Shell Features
+**********************
+
+Bash is an acronym for 'Bourne-Again SHell'. The Bourne shell is the
+traditional Unix shell originally written by Stephen Bourne. All of the
+Bourne shell builtin commands are available in Bash, The rules for
+evaluation and quoting are taken from the POSIX specification for the
+'standard' Unix shell.
+
+ This chapter briefly summarizes the shell's 'building blocks':
+commands, control structures, shell functions, shell parameters, shell
+expansions, redirections, which are a way to direct input and output
+from and to named files, and how the shell executes commands.
+
+* Menu:
+
+* Shell Syntax:: What your input means to the shell.
+* Shell Commands:: The types of commands you can use.
+* Shell Functions:: Grouping commands by name.
+* Shell Parameters:: How the shell stores values.
+* Shell Expansions:: How Bash expands parameters and the various
+ expansions available.
+* Redirections:: A way to control where input and output go.
+* Executing Commands:: What happens when you run a command.
+* Shell Scripts:: Executing files of shell commands.
+
+
+File: bash.info, Node: Shell Syntax, Next: Shell Commands, Up: Basic Shell Features
+
+3.1 Shell Syntax
+================
+
+* Menu:
+
+* Shell Operation:: The basic operation of the shell.
+* Quoting:: How to remove the special meaning from characters.
+* Comments:: How to specify comments.
+
+When the shell reads input, it proceeds through a sequence of
+operations. If the input indicates the beginning of a comment, the
+shell ignores the comment symbol ('#'), and the rest of that line.
+
+ Otherwise, roughly speaking, the shell reads its input and divides
+the input into words and operators, employing the quoting rules to
+select which meanings to assign various words and characters.
+
+ The shell then parses these tokens into commands and other
+constructs, removes the special meaning of certain words or characters,
+expands others, redirects input and output as needed, executes the
+specified command, waits for the command's exit status, and makes that
+exit status available for further inspection or processing.
+
+
+File: bash.info, Node: Shell Operation, Next: Quoting, Up: Shell Syntax
+
+3.1.1 Shell Operation
+---------------------
+
+The following is a brief description of the shell's operation when it
+reads and executes a command. Basically, the shell does the following:
+
+ 1. Reads its input from a file (*note Shell Scripts::), from a string
+ supplied as an argument to the '-c' invocation option (*note
+ Invoking Bash::), or from the user's terminal.
+
+ 2. Breaks the input into words and operators, obeying the quoting
+ rules described in *note Quoting::. These tokens are separated by
+ 'metacharacters'. Alias expansion is performed by this step (*note
+ Aliases::).
+
+ 3. Parses the tokens into simple and compound commands (*note Shell
+ Commands::).
+
+ 4. Performs the various shell expansions (*note Shell Expansions::),
+ breaking the expanded tokens into lists of filenames (*note
+ Filename Expansion::) and commands and arguments.
+
+ 5. Performs any necessary redirections (*note Redirections::) and
+ removes the redirection operators and their operands from the
+ argument list.
+
+ 6. Executes the command (*note Executing Commands::).
+
+ 7. Optionally waits for the command to complete and collects its exit
+ status (*note Exit Status::).
+
+
+File: bash.info, Node: Quoting, Next: Comments, Prev: Shell Operation, Up: Shell Syntax
+
+3.1.2 Quoting
+-------------
+
+* Menu:
+
+* Escape Character:: How to remove the special meaning from a single
+ character.
+* Single Quotes:: How to inhibit all interpretation of a sequence
+ of characters.
+* Double Quotes:: How to suppress most of the interpretation of a
+ sequence of characters.
+* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
+* Locale Translation:: How to translate strings into different languages.
+
+Quoting is used to remove the special meaning of certain characters or
+words to the shell. Quoting can be used to disable special treatment
+for special characters, to prevent reserved words from being recognized
+as such, and to prevent parameter expansion.
+
+ Each of the shell metacharacters (*note Definitions::) has special
+meaning to the shell and must be quoted if it is to represent itself.
+When the command history expansion facilities are being used (*note
+History Interaction::), the HISTORY EXPANSION character, usually '!',
+must be quoted to prevent history expansion. *Note Bash History
+Facilities::, for more details concerning history expansion.
+
+ There are three quoting mechanisms: the ESCAPE CHARACTER, single
+quotes, and double quotes.
+
+
+File: bash.info, Node: Escape Character, Next: Single Quotes, Up: Quoting
+
+3.1.2.1 Escape Character
+........................
+
+A non-quoted backslash '\' is the Bash escape character. It preserves
+the literal value of the next character that follows, with the exception
+of 'newline'. If a '\newline' pair appears, and the backslash itself is
+not quoted, the '\newline' is treated as a line continuation (that is,
+it is removed from the input stream and effectively ignored).
+
+
+File: bash.info, Node: Single Quotes, Next: Double Quotes, Prev: Escape Character, Up: Quoting
+
+3.1.2.2 Single Quotes
+.....................
+
+Enclosing characters in single quotes (''') preserves the literal value
+of each character within the quotes. A single quote may not occur
+between single quotes, even when preceded by a backslash.
+
+
+File: bash.info, Node: Double Quotes, Next: ANSI-C Quoting, Prev: Single Quotes, Up: Quoting
+
+3.1.2.3 Double Quotes
+.....................
+
+Enclosing characters in double quotes ('"') preserves the literal value
+of all characters within the quotes, with the exception of '$', '`',
+'\', and, when history expansion is enabled, '!'. When the shell is in
+POSIX mode (*note Bash POSIX Mode::), the '!' has no special meaning
+within double quotes, even when history expansion is enabled. The
+characters '$' and '`' retain their special meaning within double quotes
+(*note Shell Expansions::). The backslash retains its special meaning
+only when followed by one of the following characters: '$', '`', '"',
+'\', or 'newline'. Within double quotes, backslashes that are followed
+by one of these characters are removed. Backslashes preceding
+characters without a special meaning are left unmodified. A double
+quote may be quoted within double quotes by preceding it with a
+backslash. If enabled, history expansion will be performed unless an
+'!' appearing in double quotes is escaped using a backslash. The
+backslash preceding the '!' is not removed.
+
+ The special parameters '*' and '@' have special meaning when in
+double quotes (*note Shell Parameter Expansion::).
+
+
+File: bash.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double Quotes, Up: Quoting
+
+3.1.2.4 ANSI-C Quoting
+......................
+
+Words of the form '$'STRING'' are treated specially. The word expands
+to STRING, with backslash-escaped characters replaced as specified by
+the ANSI C standard. Backslash escape sequences, if present, are
+decoded as follows:
+
+'\a'
+ alert (bell)
+'\b'
+ backspace
+'\e'
+'\E'
+ an escape character (not ANSI C)
+'\f'
+ form feed
+'\n'
+ newline
+'\r'
+ carriage return
+'\t'
+ horizontal tab
+'\v'
+ vertical tab
+'\\'
+ backslash
+'\''
+ single quote
+'\"'
+ double quote
+'\?'
+ question mark
+'\NNN'
+ the eight-bit character whose value is the octal value NNN (one to
+ three octal digits)
+'\xHH'
+ the eight-bit character whose value is the hexadecimal value HH
+ (one or two hex digits)
+'\uHHHH'
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value HHHH (one to four hex digits)
+'\UHHHHHHHH'
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value HHHHHHHH (one to eight hex digits)
+'\cX'
+ a control-X character
+
+The expanded result is single-quoted, as if the dollar sign had not been
+present.
+
+
+File: bash.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoting
+
+3.1.2.5 Locale-Specific Translation
+...................................
+
+A double-quoted string preceded by a dollar sign ('$') will cause the
+string to be translated according to the current locale. If the current
+locale is 'C' or 'POSIX', the dollar sign is ignored. If the string is
+translated and replaced, the replacement is double-quoted.
+
+ Some systems use the message catalog selected by the 'LC_MESSAGES'
+shell variable. Others create the name of the message catalog from the
+value of the 'TEXTDOMAIN' shell variable, possibly adding a suffix of
+'.mo'. If you use the 'TEXTDOMAIN' variable, you may need to set the
+'TEXTDOMAINDIR' variable to the location of the message catalog files.
+Still others use both variables in this fashion:
+'TEXTDOMAINDIR'/'LC_MESSAGES'/LC_MESSAGES/'TEXTDOMAIN'.mo.
+
+
+File: bash.info, Node: Comments, Prev: Quoting, Up: Shell Syntax
+
+3.1.3 Comments
+--------------
+
+In a non-interactive shell, or an interactive shell in which the
+'interactive_comments' option to the 'shopt' builtin is enabled (*note
+The Shopt Builtin::), a word beginning with '#' causes that word and all
+remaining characters on that line to be ignored. An interactive shell
+without the 'interactive_comments' option enabled does not allow
+comments. The 'interactive_comments' option is on by default in
+interactive shells. *Note Interactive Shells::, for a description of
+what makes a shell interactive.
+
+
+File: bash.info, Node: Shell Commands, Next: Shell Functions, Prev: Shell Syntax, Up: Basic Shell Features
+
+3.2 Shell Commands
+==================
+
+A simple shell command such as 'echo a b c' consists of the command
+itself followed by arguments, separated by spaces.
+
+ More complex shell commands are composed of simple commands arranged
+together in a variety of ways: in a pipeline in which the output of one
+command becomes the input of a second, in a loop or conditional
+construct, or in some other grouping.
+
+* Menu:
+
+* Simple Commands:: The most common type of command.
+* Pipelines:: Connecting the input and output of several
+ commands.
+* Lists:: How to execute commands sequentially.
+* Compound Commands:: Shell commands for control flow.
+* Coprocesses:: Two-way communication between commands.
+* GNU Parallel:: Running commands in parallel.
+
+
+File: bash.info, Node: Simple Commands, Next: Pipelines, Up: Shell Commands
+
+3.2.1 Simple Commands
+---------------------
+
+A simple command is the kind of command encountered most often. It's
+just a sequence of words separated by 'blank's, terminated by one of the
+shell's control operators (*note Definitions::). The first word
+generally specifies a command to be executed, with the rest of the words
+being that command's arguments.
+
+ The return status (*note Exit Status::) of a simple command is its
+exit status as provided by the POSIX 1003.1 'waitpid' function, or 128+N
+if the command was terminated by signal N.
+
+
+File: bash.info, Node: Pipelines, Next: Lists, Prev: Simple Commands, Up: Shell Commands
+
+3.2.2 Pipelines
+---------------
+
+A 'pipeline' is a sequence of one or more commands separated by one of
+the control operators '|' or '|&'.
+
+ The format for a pipeline is
+ [time [-p]] [!] COMMAND1 [ | or |& COMMAND2 ] ...
+
+The output of each command in the pipeline is connected via a pipe to
+the input of the next command. That is, each command reads the previous
+command's output. This connection is performed before any redirections
+specified by the command.
+
+ If '|&' is used, COMMAND1's standard error, in addition to its
+standard output, is connected to COMMAND2's standard input through the
+pipe; it is shorthand for '2>&1 |'. This implicit redirection of the
+standard error to the standard output is performed after any
+redirections specified by the command.
+
+ The reserved word 'time' causes timing statistics to be printed for
+the pipeline once it finishes. The statistics currently consist of
+elapsed (wall-clock) time and user and system time consumed by the
+command's execution. The '-p' option changes the output format to that
+specified by POSIX. When the shell is in POSIX mode (*note Bash POSIX
+Mode::), it does not recognize 'time' as a reserved word if the next
+token begins with a '-'. The 'TIMEFORMAT' variable may be set to a
+format string that specifies how the timing information should be
+displayed. *Note Bash Variables::, for a description of the available
+formats. The use of 'time' as a reserved word permits the timing of
+shell builtins, shell functions, and pipelines. An external 'time'
+command cannot time these easily.
+
+ When the shell is in POSIX mode (*note Bash POSIX Mode::), 'time' may
+be followed by a newline. In this case, the shell displays the total
+user and system time consumed by the shell and its children. The
+'TIMEFORMAT' variable may be used to specify the format of the time
+information.
+
+ If the pipeline is not executed asynchronously (*note Lists::), the
+shell waits for all commands in the pipeline to complete.
+
+ Each command in a pipeline is executed in its own subshell, which is
+a separate process (*note Command Execution Environment::). If the
+'lastpipe' option is enabled using the 'shopt' builtin (*note The Shopt
+Builtin::), the last element of a pipeline may be run by the shell
+process.
+
+ The exit status of a pipeline is the exit status of the last command
+in the pipeline, unless the 'pipefail' option is enabled (*note The Set
+Builtin::). If 'pipefail' is enabled, the pipeline's return status is
+the value of the last (rightmost) command to exit with a non-zero
+status, or zero if all commands exit successfully. If the reserved word
+'!' precedes the pipeline, the exit status is the logical negation of
+the exit status as described above. The shell waits for all commands in
+the pipeline to terminate before returning a value.
+
+
+File: bash.info, Node: Lists, Next: Compound Commands, Prev: Pipelines, Up: Shell Commands
+
+3.2.3 Lists of Commands
+-----------------------
+
+A 'list' is a sequence of one or more pipelines separated by one of the
+operators ';', '&', '&&', or '||', and optionally terminated by one of
+';', '&', or a 'newline'.
+
+ Of these list operators, '&&' and '||' have equal precedence,
+followed by ';' and '&', which have equal precedence.
+
+ A sequence of one or more newlines may appear in a 'list' to delimit
+commands, equivalent to a semicolon.
+
+ If a command is terminated by the control operator '&', the shell
+executes the command asynchronously in a subshell. This is known as
+executing the command in the BACKGROUND, and these are referred to as
+ASYNCHRONOUS commands. The shell does not wait for the command to
+finish, and the return status is 0 (true). When job control is not
+active (*note Job Control::), the standard input for asynchronous
+commands, in the absence of any explicit redirections, is redirected
+from '/dev/null'.
+
+ Commands separated by a ';' are executed sequentially; the shell
+waits for each command to terminate in turn. The return status is the
+exit status of the last command executed.
+
+ AND and OR lists are sequences of one or more pipelines separated by
+the control operators '&&' and '||', respectively. AND and OR lists are
+executed with left associativity.
+
+ An AND list has the form
+ COMMAND1 && COMMAND2
+
+COMMAND2 is executed if, and only if, COMMAND1 returns an exit status of
+zero (success).
+
+ An OR list has the form
+ COMMAND1 || COMMAND2
+
+COMMAND2 is executed if, and only if, COMMAND1 returns a non-zero exit
+status.
+
+ The return status of AND and OR lists is the exit status of the last
+command executed in the list.
+
+
+File: bash.info, Node: Compound Commands, Next: Coprocesses, Prev: Lists, Up: Shell Commands
+
+3.2.4 Compound Commands
+-----------------------
+
+* Menu:
+
+* Looping Constructs:: Shell commands for iterative action.
+* Conditional Constructs:: Shell commands for conditional execution.
+* Command Grouping:: Ways to group commands.
+
+Compound commands are the shell programming language constructs. Each
+construct begins with a reserved word or control operator and is
+terminated by a corresponding reserved word or operator. Any
+redirections (*note Redirections::) associated with a compound command
+apply to all commands within that compound command unless explicitly
+overridden.
+
+ In most cases a list of commands in a compound command's description
+may be separated from the rest of the command by one or more newlines,
+and may be followed by a newline in place of a semicolon.
+
+ Bash provides looping constructs, conditional commands, and
+mechanisms to group commands and execute them as a unit.
+
+
+File: bash.info, Node: Looping Constructs, Next: Conditional Constructs, Up: Compound Commands
+
+3.2.4.1 Looping Constructs
+..........................
+
+Bash supports the following looping constructs.
+
+ Note that wherever a ';' appears in the description of a command's
+syntax, it may be replaced with one or more newlines.
+
+'until'
+ The syntax of the 'until' command is:
+
+ until TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
+
+ Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit
+ status which is not zero. The return status is the exit status of
+ the last command executed in CONSEQUENT-COMMANDS, or zero if none
+ was executed.
+
+'while'
+ The syntax of the 'while' command is:
+
+ while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
+
+ Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit
+ status of zero. The return status is the exit status of the last
+ command executed in CONSEQUENT-COMMANDS, or zero if none was
+ executed.
+
+'for'
+ The syntax of the 'for' command is:
+
+ for NAME [ [in [WORDS ...] ] ; ] do COMMANDS; done
+
+ Expand WORDS (*note Shell Expansions::), and execute COMMANDS once
+ for each member in the resultant list, with NAME bound to the
+ current member. If 'in WORDS' is not present, the 'for' command
+ executes the COMMANDS once for each positional parameter that is
+ set, as if 'in "$@"' had been specified (*note Special
+ Parameters::).
+
+ The return status is the exit status of the last command that
+ executes. If there are no items in the expansion of WORDS, no
+ commands are executed, and the return status is zero.
+
+ An alternate form of the 'for' command is also supported:
+
+ for (( EXPR1 ; EXPR2 ; EXPR3 )) ; do COMMANDS ; done
+
+ First, the arithmetic expression EXPR1 is evaluated according to
+ the rules described below (*note Shell Arithmetic::). The
+ arithmetic expression EXPR2 is then evaluated repeatedly until it
+ evaluates to zero. Each time EXPR2 evaluates to a non-zero value,
+ COMMANDS are executed and the arithmetic expression EXPR3 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 COMMANDS that is executed, or false if any of the
+ expressions is invalid.
+
+ The 'break' and 'continue' builtins (*note Bourne Shell Builtins::)
+may be used to control loop execution.
+
+
+File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev: Looping Constructs, Up: Compound Commands
+
+3.2.4.2 Conditional Constructs
+..............................
+
+'if'
+ The syntax of the 'if' command is:
+
+ if TEST-COMMANDS; then
+ CONSEQUENT-COMMANDS;
+ [elif MORE-TEST-COMMANDS; then
+ MORE-CONSEQUENTS;]
+ [else ALTERNATE-CONSEQUENTS;]
+ fi
+
+ The TEST-COMMANDS list is executed, and if its return status is
+ zero, the CONSEQUENT-COMMANDS list is executed. If TEST-COMMANDS
+ returns a non-zero status, each 'elif' list is executed in turn,
+ and if its exit status is zero, the corresponding MORE-CONSEQUENTS
+ is executed and the command completes. If 'else
+ ALTERNATE-CONSEQUENTS' is present, and the final command in the
+ final 'if' or 'elif' clause has a non-zero exit status, then
+ ALTERNATE-CONSEQUENTS is executed. The return status is the exit
+ status of the last command executed, or zero if no condition tested
+ true.
+
+'case'
+ The syntax of the 'case' command is:
+
+ case WORD in
+ [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]...
+ esac
+
+ 'case' will selectively execute the COMMAND-LIST corresponding to
+ the first PATTERN that matches WORD. The match is performed
+ according to the rules described below in *note Pattern Matching::.
+ If the 'nocasematch' shell option (see the description of 'shopt'
+ in *note The Shopt Builtin::) is enabled, the match is performed
+ without regard to the case of alphabetic characters. The '|' is
+ used to separate multiple patterns, and the ')' operator terminates
+ a pattern list. A list of patterns and an associated command-list
+ is known as a CLAUSE.
+
+ Each clause must be terminated with ';;', ';&', or ';;&'. The WORD
+ undergoes tilde expansion, parameter expansion, command
+ substitution, arithmetic expansion, and quote removal (*note Shell
+ Parameter Expansion::) before matching is attempted. Each PATTERN
+ undergoes tilde expansion, parameter expansion, command
+ substitution, and arithmetic expansion.
+
+ There may be an arbitrary number of 'case' clauses, each terminated
+ by a ';;', ';&', or ';;&'. The first pattern that matches
+ determines the command-list that is executed. It's a common idiom
+ to use '*' as the final pattern to define the default case, since
+ that pattern will always match.
+
+ Here is an example using 'case' in a script that could be used to
+ describe one interesting feature of an animal:
+
+ echo -n "Enter the name of an animal: "
+ read ANIMAL
+ echo -n "The $ANIMAL has "
+ case $ANIMAL in
+ horse | dog | cat) echo -n "four";;
+ man | kangaroo ) echo -n "two";;
+ *) echo -n "an unknown number of";;
+ esac
+ echo " legs."
+
+
+ If the ';;' operator is used, no subsequent matches are attempted
+ after the first pattern match. Using ';&' in place of ';;' causes
+ execution to continue with the COMMAND-LIST associated with the
+ next clause, if any. Using ';;&' in place of ';;' causes the shell
+ to test the patterns in the next clause, if any, and execute any
+ associated COMMAND-LIST on a successful match.
+
+ The return status is zero if no PATTERN is matched. Otherwise, the
+ return status is the exit status of the COMMAND-LIST executed.
+
+'select'
+
+ The 'select' construct allows the easy generation of menus. It has
+ almost the same syntax as the 'for' command:
+
+ select NAME [in WORDS ...]; do COMMANDS; done
+
+ The list of words following 'in' is expanded, generating a list of
+ items. The set of expanded words is printed on the standard error
+ output stream, each preceded by a number. If the 'in WORDS' is
+ omitted, the positional parameters are printed, as if 'in "$@"' had
+ been specified. The 'PS3' prompt is then displayed and a line is
+ read from the standard input. If the line consists of a number
+ corresponding to one of the displayed words, then the value of NAME
+ is set to that word. If the line is empty, the words and prompt
+ are displayed again. If 'EOF' is read, the 'select' command
+ completes. Any other value read causes NAME to be set to null.
+ The line read is saved in the variable 'REPLY'.
+
+ The COMMANDS are executed after each selection until a 'break'
+ command is executed, at which point the 'select' command completes.
+
+ Here is an example that allows the user to pick a filename from the
+ current directory, and displays the name and index of the file
+ selected.
+
+ select fname in *;
+ do
+ echo you picked $fname \($REPLY\)
+ break;
+ done
+
+'((...))'
+ (( EXPRESSION ))
+
+ The arithmetic EXPRESSION is evaluated according to the rules
+ described below (*note Shell Arithmetic::). If the value of the
+ expression is non-zero, the return status is 0; otherwise the
+ return status is 1. This is exactly equivalent to
+ let "EXPRESSION"
+ *Note Bash Builtins::, for a full description of the 'let' builtin.
+
+'[[...]]'
+ [[ EXPRESSION ]]
+
+ Return a status of 0 or 1 depending on the evaluation of the
+ conditional expression EXPRESSION. Expressions are composed of the
+ primaries described below in *note Bash Conditional Expressions::.
+ Word splitting and filename expansion are not performed on the
+ words between the '[[' and ']]'; tilde expansion, parameter and
+ variable expansion, arithmetic expansion, command substitution,
+ process substitution, and quote removal are performed. Conditional
+ operators such as '-f' must be unquoted to be recognized as
+ primaries.
+
+ When used with '[[', the '<' and '>' operators sort
+ lexicographically using the current locale.
+
+ When the '==' and '!=' operators are used, the string to the right
+ of the operator is considered a pattern and matched according to
+ the rules described below in *note Pattern Matching::, as if the
+ 'extglob' shell option were enabled. The '=' operator is identical
+ to '=='. If the 'nocasematch' shell option (see the description of
+ 'shopt' in *note The Shopt Builtin::) is enabled, the match is
+ performed without regard to the case of alphabetic characters. The
+ return value is 0 if the string matches ('==') or does not match
+ ('!=') the pattern, and 1 otherwise. Any part of the pattern may
+ be quoted to force the quoted portion to be matched as a string.
+
+ An additional binary operator, '=~', is available, with the same
+ precedence as '==' and '!='. When it is used, the string to the
+ right of the operator is considered a POSIX extended regular
+ expression and matched accordingly (as in regex3)). The return
+ value is 0 if the string matches the pattern, and 1 otherwise. If
+ the regular expression is syntactically incorrect, the conditional
+ expression's return value is 2. If the 'nocasematch' shell option
+ (see the description of 'shopt' in *note The Shopt Builtin::) is
+ enabled, the match is performed without regard to the case of
+ alphabetic characters. Any part of the pattern may be quoted to
+ force the quoted portion to be matched as a string. Bracket
+ expressions in regular expressions must be treated carefully, since
+ normal quoting characters lose their meanings between brackets. If
+ the pattern is stored in a shell variable, quoting the variable
+ expansion forces the entire pattern to be matched as a string.
+ Substrings matched by parenthesized subexpressions within the
+ regular expression are saved in the array variable 'BASH_REMATCH'.
+ The element of 'BASH_REMATCH' with index 0 is the portion of the
+ string matching the entire regular expression. The element of
+ 'BASH_REMATCH' with index N is the portion of the string matching
+ the Nth parenthesized subexpression.
+
+ For example, the following will match a line (stored in the shell
+ variable LINE) if there is a sequence of characters in the value
+ consisting of any number, including zero, of space characters, zero
+ or one instances of 'a', then a 'b':
+ [[ $line =~ [[:space:]]*?(a)b ]]
+
+ That means values like 'aab' and ' aaaaaab' will match, as will a
+ line containing a 'b' anywhere in its value.
+
+ Storing the regular expression in a shell variable is often a
+ useful way to avoid problems with quoting characters that are
+ special to the shell. It is sometimes difficult to specify a
+ regular expression literally without using quotes, or to keep track
+ of the quoting used by regular expressions while paying attention
+ to the shell's quote removal. Using a shell variable to store the
+ pattern decreases these problems. For example, the following is
+ equivalent to the above:
+ pattern='[[:space:]]*?(a)b'
+ [[ $line =~ $pattern ]]
+
+ If you want to match a character that's special to the regular
+ expression grammar, it has to be quoted to remove its special
+ meaning. This means that in the pattern 'xxx.txt', the '.' matches
+ any character in the string (its usual regular expression meaning),
+ but in the pattern '"xxx.txt"' it can only match a literal '.'.
+ Shell programmers should take special care with backslashes, since
+ backslashes are used both by the shell and regular expressions to
+ remove the special meaning from the following character. The
+ following two sets of commands are _not_ equivalent:
+ pattern='\.'
+
+ [[ . =~ $pattern ]]
+ [[ . =~ \. ]]
+
+ [[ . =~ "$pattern" ]]
+ [[ . =~ '\.' ]]
+
+ The first two matches will succeed, but the second two will not,
+ because in the second two the backslash will be part of the pattern
+ to be matched. In the first two examples, the backslash removes
+ the special meaning from '.', so the literal '.' matches. If the
+ string in the first examples were anything other than '.', say 'a',
+ the pattern would not match, because the quoted '.' in the pattern
+ loses its special meaning of matching any single character.
+
+ Expressions may be combined using the following operators, listed
+ in decreasing order of precedence:
+
+ '( EXPRESSION )'
+ Returns the value of EXPRESSION. This may be used to override
+ the normal precedence of operators.
+
+ '! EXPRESSION'
+ True if EXPRESSION is false.
+
+ 'EXPRESSION1 && EXPRESSION2'
+ True if both EXPRESSION1 and EXPRESSION2 are true.
+
+ 'EXPRESSION1 || EXPRESSION2'
+ True if either EXPRESSION1 or EXPRESSION2 is true.
+
+ The '&&' and '||' operators do not evaluate EXPRESSION2 if the
+ value of EXPRESSION1 is sufficient to determine the return value of
+ the entire conditional expression.
+
+
+File: bash.info, Node: Command Grouping, Prev: Conditional Constructs, Up: Compound Commands
+
+3.2.4.3 Grouping Commands
+.........................
+
+Bash provides two ways to group a list of commands to be executed as a
+unit. When commands are grouped, redirections may be applied to the
+entire command list. For example, the output of all the commands in the
+list may be redirected to a single stream.
+
+'()'
+ ( LIST )
+
+ Placing a list of commands between parentheses causes a subshell
+ environment to be created (*note Command Execution Environment::),
+ and each of the commands in LIST to be executed in that subshell.
+ Since the LIST is executed in a subshell, variable assignments do
+ not remain in effect after the subshell completes.
+
+'{}'
+ { LIST; }
+
+ Placing a list of commands between curly braces causes the list to
+ be executed in the current shell context. No subshell is created.
+ The semicolon (or newline) following LIST is required.
+
+ In addition to the creation of a subshell, there is a subtle
+difference between these two constructs due to historical reasons. The
+braces are 'reserved words', so they must be separated from the LIST by
+'blank's or other shell metacharacters. The parentheses are
+'operators', and are recognized as separate tokens by the shell even if
+they are not separated from the LIST by whitespace.
+
+ The exit status of both of these constructs is the exit status of
+LIST.
+
+
+File: bash.info, Node: Coprocesses, Next: GNU Parallel, Prev: Compound Commands, Up: Shell Commands
+
+3.2.5 Coprocesses
+-----------------
+
+A 'coprocess' is a shell command preceded by the 'coproc' reserved word.
+A coprocess is executed asynchronously in a subshell, as if the command
+had been terminated with the '&' control operator, with a two-way pipe
+established between the executing shell and the coprocess.
+
+ The format for a coprocess is:
+ coproc [NAME] COMMAND [REDIRECTIONS]
+
+This creates a coprocess named NAME. If NAME is not supplied, the
+default name is COPROC. NAME must not be supplied if COMMAND is a
+simple command (*note Simple Commands::); otherwise, it is interpreted
+as the first word of the simple command.
+
+ When the coprocess is executed, the shell creates an array variable
+(*note Arrays::) named 'NAME' in the context of the executing shell.
+The standard output of COMMAND is connected via a pipe to a file
+descriptor in the executing shell, and that file descriptor is assigned
+to 'NAME'[0]. The standard input of COMMAND is connected via a pipe to
+a file descriptor in the executing shell, and that file descriptor is
+assigned to 'NAME'[1]. This pipe is established before any redirections
+specified by the command (*note Redirections::). The file descriptors
+can be utilized as arguments to shell commands and redirections using
+standard word expansions. Other than those created to execute command
+and process substitutions, the file descriptors are not available in
+subshells.
+
+ The process ID of the shell spawned to execute the coprocess is
+available as the value of the variable 'NAME'_PID. The 'wait' builtin
+command may be used to wait for the coprocess to terminate.
+
+ Since the coprocess is created as an asynchronous command, the
+'coproc' command always returns success. The return status of a
+coprocess is the exit status of COMMAND.
+
+
+File: bash.info, Node: GNU Parallel, Prev: Coprocesses, Up: Shell Commands
+
+3.2.6 GNU Parallel
+------------------
+
+There are ways to run commands in parallel that are not built into Bash.
+GNU Parallel is a tool to do just that.
+
+ GNU Parallel, as its name suggests, can be used to build and run
+commands in parallel. You may run the same command with different
+arguments, whether they are filenames, usernames, hostnames, or lines
+read from files. GNU Parallel provides shorthand references to many of
+the most common operations (input lines, various portions of the input
+line, different ways to specify the input source, and so on). Parallel
+can replace 'xargs' or feed commands from its input sources to several
+different instances of Bash.
+
+ For a complete description, refer to the GNU Parallel documentation.
+A few examples should provide a brief introduction to its use.
+
+ For example, it is easy to replace 'xargs' to gzip all html files in
+the current directory and its subdirectories:
+ find . -type f -name '*.html' -print | parallel gzip
+If you need to protect special characters such as newlines in file
+names, use find's '-print0' option and parallel's '-0' option.
+
+ You can use Parallel to move files from the current directory when
+the number of files is too large to process with one 'mv' invocation:
+ ls | parallel mv {} destdir
+
+ As you can see, the {} is replaced with each line read from standard
+input. While using 'ls' will work in most instances, it is not
+sufficient to deal with all filenames. If you need to accommodate
+special characters in filenames, you can use
+
+ find . -depth 1 \! -name '.*' -print0 | parallel -0 mv {} destdir
+
+as alluded to above.
+
+ This will run as many 'mv' commands as there are files in the current
+directory. You can emulate a parallel 'xargs' by adding the '-X'
+option:
+ find . -depth 1 \! -name '.*' -print0 | parallel -0 -X mv {} destdir
+
+ GNU Parallel can replace certain common idioms that operate on lines
+read from a file (in this case, filenames listed one per line):
+ while IFS= read -r x; do
+ do-something1 "$x" "config-$x"
+ do-something2 < "$x"
+ done < file | process-output
+
+with a more compact syntax reminiscent of lambdas:
+ cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" |
+ process-output
+
+ Parallel provides a built-in mechanism to remove filename extensions,
+which lends itself to batch file transformations or renaming:
+ ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}"
+This will recompress all files in the current directory with names
+ending in .gz using bzip2, running one job per CPU (-j+0) in parallel.
+(We use 'ls' for brevity here; using 'find' as above is more robust in
+the face of filenames containing unexpected characters.) Parallel can
+take arguments from the command line; the above can also be written as
+
+ parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz
+
+ If a command generates output, you may want to preserve the input
+order in the output. For instance, the following command
+ {
+ echo foss.org.my ;
+ echo debian.org ;
+ echo freenetproject.org ;
+ } | parallel traceroute
+will display as output the traceroute invocation that finishes first.
+Adding the '-k' option
+ {
+ echo foss.org.my ;
+ echo debian.org ;
+ echo freenetproject.org ;
+ } | parallel -k traceroute
+will ensure that the output of 'traceroute foss.org.my' is displayed
+first.
+
+ Finally, Parallel can be used to run a sequence of shell commands in
+parallel, similar to 'cat file | bash'. It is not uncommon to take a
+list of filenames, create a series of shell commands to operate on them,
+and feed that list of commands to a shell. Parallel can speed this up.
+Assuming that 'file' contains a list of shell commands, one per line,
+
+ parallel -j 10 < file
+
+will evaluate the commands using the shell (since no explicit command is
+supplied as an argument), in blocks of ten shell jobs at a time.
+
+
+File: bash.info, Node: Shell Functions, Next: Shell Parameters, Prev: Shell Commands, Up: Basic Shell Features
+
+3.3 Shell Functions
+===================
+
+Shell functions are a way to group commands for later execution using a
+single name for the group. They are executed just like a "regular"
+command. When the name of a shell function is used as a simple command
+name, the list of commands associated with that function name is
+executed. Shell functions are executed in the current shell context; no
+new process is created to interpret them.
+
+ Functions are declared using this syntax:
+ NAME () COMPOUND-COMMAND [ REDIRECTIONS ]
+
+ or
+
+ function NAME [()] COMPOUND-COMMAND [ REDIRECTIONS ]
+
+ This defines a shell function named NAME. The reserved word
+'function' is optional. If the 'function' reserved word is supplied,
+the parentheses are optional. The BODY of the function is the compound
+command COMPOUND-COMMAND (*note Compound Commands::). That command is
+usually a LIST enclosed between { and }, but may be any compound command
+listed above, with one exception: If the 'function' reserved word is
+used, but the parentheses are not supplied, the braces are required.
+COMPOUND-COMMAND is executed whenever NAME is specified as the name of a
+command. When the shell is in POSIX mode (*note Bash POSIX Mode::),
+NAME may not be the same as one of the special builtins (*note Special
+Builtins::). Any redirections (*note Redirections::) associated with
+the shell function are performed when the function is executed.
+
+ A function definition may be deleted using the '-f' option to the
+'unset' builtin (*note Bourne Shell Builtins::).
+
+ The exit status of a function definition is zero unless a syntax
+error occurs or a readonly function with the same name already exists.
+When executed, the exit status of a function is the exit status of the
+last command executed in the body.
+
+ Note that for historical reasons, in the most common usage the curly
+braces that surround the body of the function must be separated from the
+body by 'blank's or newlines. This is because the braces are reserved
+words and are only recognized as such when they are separated from the
+command list by whitespace or another shell metacharacter. Also, when
+using the braces, the LIST must be terminated by a semicolon, a '&', or
+a newline.
+
+ When a function is executed, the arguments to the function become the
+positional parameters during its execution (*note Positional
+Parameters::). The special parameter '#' that expands to the number of
+positional parameters is updated to reflect the change. Special
+parameter '0' is unchanged. The first element of the 'FUNCNAME'
+variable is set to the name of the function while the function is
+executing.
+
+ All other aspects of the shell execution environment are identical
+between a function and its caller with these exceptions: the 'DEBUG' and
+'RETURN' traps are not inherited unless the function has been given the
+'trace' attribute using the 'declare' builtin or the '-o functrace'
+option has been enabled with the 'set' builtin, (in which case all
+functions inherit the 'DEBUG' and 'RETURN' traps), and the 'ERR' trap is
+not inherited unless the '-o errtrace' shell option has been enabled.
+*Note Bourne Shell Builtins::, for the description of the 'trap'
+builtin.
+
+ The 'FUNCNEST' variable, if set to a numeric value greater than 0,
+defines a maximum function nesting level. Function invocations that
+exceed the limit cause the entire command to abort.
+
+ If the builtin command 'return' is executed in a function, the
+function completes and execution resumes with the next command after the
+function call. Any command associated with the 'RETURN' trap is
+executed before execution resumes. When a function completes, the
+values of the positional parameters and the special parameter '#' are
+restored to the values they had prior to the function's execution. If a
+numeric argument is given to 'return', that is the function's return
+status; otherwise the function's return status is the exit status of the
+last command executed before the 'return'.
+
+ Variables local to the function may be declared with the 'local'
+builtin. These variables are visible only to the function and the
+commands it invokes. This is particularly important when a shell
+function calls other functions.
+
+ Local variables "shadow" variables with the same name declared at
+previous scopes. For instance, a local variable declared in a function
+hides a global variable of the same name: references and assignments
+refer to the local variable, leaving the global variable unmodified.
+When the function returns, the global variable is once again visible.
+
+ The shell uses DYNAMIC SCOPING to control a variable's visibility
+within functions. With dynamic scoping, visible variables and their
+values are a result of the sequence of function calls that caused
+execution to reach the current function. The value of a variable that a
+function sees depends on its value within its caller, if any, whether
+that caller is the "global" scope or another shell function. This is
+also the value that a local variable declaration "shadows", and the
+value that is restored when the function returns.
+
+ For example, if a variable VAR is declared as local in function
+FUNC1, and FUNC1 calls another function FUNC2, references to VAR made
+from within FUNC2 will resolve to the local variable VAR from FUNC1,
+shadowing any global variable named VAR.
+
+ The following script demonstrates this behavior. When executed, the
+script displays
+
+ In func2, var = func1 local
+
+ func1()
+ {
+ local var='func1 local'
+ func2
+ }
+
+ func2()
+ {
+ echo "In func2, var = $var"
+ }
+
+ var=global
+ func1
+
+ The 'unset' builtin also acts using the same dynamic scope: if a
+variable is local to the current scope, 'unset' will unset it; otherwise
+the unset will refer to the variable found in any calling scope as
+described above. If a variable at the current local scope is unset, it
+will remain so until it is reset in that scope or until the function
+returns. Once the function returns, any instance of the variable at a
+previous scope will become visible. If the unset acts on a variable at
+a previous scope, any instance of a variable with that name that had
+been shadowed will become visible.
+
+ Function names and definitions may be listed with the '-f' option to
+the 'declare' ('typeset') builtin command (*note Bash Builtins::). The
+'-F' option to 'declare' or 'typeset' will list the function names only
+(and optionally the source file and line number, if the 'extdebug' shell
+option is enabled). Functions may be exported so that subshells
+automatically have them defined with the '-f' option to the 'export'
+builtin (*note Bourne Shell Builtins::).
+
+ Functions may be recursive. The 'FUNCNEST' variable may be used to
+limit the depth of the function call stack and restrict the number of
+function invocations. By default, no limit is placed on the number of
+recursive calls.
+
+
+File: bash.info, Node: Shell Parameters, Next: Shell Expansions, Prev: Shell Functions, Up: Basic Shell Features
+
+3.4 Shell Parameters
+====================
+
+* Menu:
+
+* Positional Parameters:: The shell's command-line arguments.
+* Special Parameters:: Parameters denoted by special characters.
+
+A PARAMETER is an entity that stores values. It can be a 'name', a
+number, or one of the special characters listed below. A VARIABLE is a
+parameter denoted by a 'name'. A variable has a VALUE and zero or more
+ATTRIBUTES. Attributes are assigned using the 'declare' builtin command
+(see the description of the 'declare' builtin in *note Bash Builtins::).
+
+ A parameter is set if it has been assigned a value. The null string
+is a valid value. Once a variable is set, it may be unset only by using
+the 'unset' builtin command.
+
+ A variable may be assigned to by a statement of the form
+ NAME=[VALUE]
+If VALUE is not given, the variable is assigned the null string. All
+VALUEs undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal (detailed
+below). If the variable has its 'integer' attribute set, then VALUE is
+evaluated as an arithmetic expression even if the '$((...))' expansion
+is not used (*note Arithmetic Expansion::). Word splitting is not
+performed, with the exception of '"$@"' as explained below. Filename
+expansion is not performed. Assignment statements may also appear as
+arguments to the 'alias', 'declare', 'typeset', 'export', 'readonly',
+and 'local' builtin commands (DECLARATION commands). When in POSIX mode
+(*note Bash POSIX Mode::), these builtins may appear in a command after
+one or more instances of the 'command' builtin and retain these
+assignment statement properties.
+
+ In the context where an assignment statement is assigning a value to
+a shell variable or array index (*note Arrays::), the '+=' operator can
+be used to append to or add to the variable's previous value. This
+includes arguments to builtin commands such as 'declare' that accept
+assignment statements (DECLARATION commands). When '+=' is applied to a
+variable for which the INTEGER attribute has been set, VALUE is
+evaluated as an arithmetic expression and added to the variable's
+current value, which is also evaluated. When '+=' is applied to an
+array variable using compound assignment (*note Arrays::), the
+variable's value is not unset (as it is when using '='), and new values
+are appended to the array beginning at one greater than the array's
+maximum index (for indexed arrays), or added as additional key-value
+pairs in an associative array. When applied to a string-valued
+variable, VALUE is expanded and appended to the variable's value.
+
+ A variable can be assigned the NAMEREF attribute using the '-n'
+option to the 'declare' or 'local' builtin commands (*note Bash
+Builtins::) to create a NAMEREF, or a reference to another variable.
+This allows variables to be manipulated indirectly. Whenever the
+nameref variable is referenced, assigned to, unset, or has its
+attributes modified (other than using or changing the nameref attribute
+itself), the operation is actually performed on the variable specified
+by the nameref variable's value. A nameref is commonly used within
+shell functions to refer to a variable whose name is passed as an
+argument to the function. For instance, if a variable name is passed to
+a shell function as its first argument, running
+ declare -n ref=$1
+inside the function creates a nameref variable REF whose value is the
+variable name passed as the first argument. References and assignments
+to REF, and changes to its attributes, are treated as references,
+assignments, and attribute modifications to the variable whose name was
+passed as '$1'.
+
+ If the control variable in a 'for' loop has the nameref attribute,
+the list of words can be a list of shell variables, and a name reference
+will be established for each word in the list, in turn, when the loop is
+executed. Array variables cannot be given the nameref attribute.
+However, nameref variables can reference array variables and subscripted
+array variables. Namerefs can be unset using the '-n' option to the
+'unset' builtin (*note Bourne Shell Builtins::). Otherwise, if 'unset'
+is executed with the name of a nameref variable as an argument, the
+variable referenced by the nameref variable will be unset.
+
+
+File: bash.info, Node: Positional Parameters, Next: Special Parameters, Up: Shell Parameters
+
+3.4.1 Positional Parameters
+---------------------------
+
+A POSITIONAL PARAMETER is a parameter denoted by one or more digits,
+other than the single digit '0'. Positional parameters are assigned
+from the shell's arguments when it is invoked, and may be reassigned
+using the 'set' builtin command. Positional parameter 'N' may be
+referenced as '${N}', or as '$N' when 'N' consists of a single digit.
+Positional parameters may not be assigned to with assignment statements.
+The 'set' and 'shift' builtins are used to set and unset them (*note
+Shell Builtin Commands::). The positional parameters are temporarily
+replaced when a shell function is executed (*note Shell Functions::).
+
+ When a positional parameter consisting of more than a single digit is
+expanded, it must be enclosed in braces.
+
+
+File: bash.info, Node: Special Parameters, Prev: Positional Parameters, Up: Shell Parameters
+
+3.4.2 Special Parameters
+------------------------
+
+The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+
+'*'
+ ($*) Expands to the positional parameters, starting from one. When
+ the expansion is not within double quotes, each positional
+ parameter expands to a separate word. In contexts where it is
+ performed, those words are subject to further word splitting and
+ pathname expansion. 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 'IFS' special
+ variable. That is, '"$*"' is equivalent to '"$1C$2C..."', where C
+ is the first character of the value of the 'IFS' variable. If
+ 'IFS' is unset, the parameters are separated by spaces. If 'IFS'
+ is null, the parameters are joined without intervening separators.
+
+'@'
+ ($@) Expands to the positional parameters, starting from one. In
+ contexts where word splitting is performed, this expands each
+ positional parameter to a separate word; if not within double
+ quotes, these words are subject to word splitting. In contexts
+ where word splitting is not performed, this expands to a single
+ word with each positional parameter separated by a space. When the
+ expansion occurs within double quotes, and word splitting is
+ performed, each parameter expands to a separate word. That is,
+ '"$@"' is equivalent to '"$1" "$2" ...'. If the double-quoted
+ expansion occurs within a word, the expansion of the first
+ parameter is joined with the beginning part of the original word,
+ and the expansion of the last parameter is joined with the last
+ part of the original word. When there are no positional
+ parameters, '"$@"' and '$@' expand to nothing (i.e., they are
+ removed).
+
+'#'
+ ($#) Expands to the number of positional parameters in decimal.
+
+'?'
+ ($?) Expands to the exit status of the most recently executed
+ foreground pipeline.
+
+'-'
+ ($-, a hyphen.) Expands to the current option flags as specified
+ upon invocation, by the 'set' builtin command, or those set by the
+ shell itself (such as the '-i' option).
+
+'$'
+ ($$) Expands to the process ID of the shell. In a '()' subshell,
+ it expands to the process ID of the invoking shell, not the
+ subshell.
+
+'!'
+ ($!) Expands to the process ID of the job most recently placed
+ into the background, whether executed as an asynchronous command or
+ using the 'bg' builtin (*note Job Control Builtins::).
+
+'0'
+ ($0) 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 (*note Shell Scripts::), '$0' is set to the name of that
+ file. If Bash is started with the '-c' option (*note Invoking
+ Bash::), then '$0' is set to the first argument after the string to
+ be executed, if one is present. Otherwise, it is set to the
+ filename used to invoke Bash, as given by argument zero.
+
+'_'
+ ($_, 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 simple command executed in the
+ foreground, 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.
+
+
+File: bash.info, Node: Shell Expansions, Next: Redirections, Prev: Shell Parameters, Up: Basic Shell Features
+
+3.5 Shell Expansions
+====================
+
+Expansion is performed on the command line after it has been split into
+'token's. There are seven kinds of expansion performed:
+
+ * brace expansion
+ * tilde expansion
+ * parameter and variable expansion
+ * command substitution
+ * arithmetic expansion
+ * word splitting
+ * filename expansion
+
+* Menu:
+
+* Brace Expansion:: Expansion of expressions within braces.
+* Tilde Expansion:: Expansion of the ~ character.
+* Shell Parameter Expansion:: How Bash expands variables to their values.
+* Command Substitution:: Using the output of a command as an argument.
+* Arithmetic Expansion:: How to use arithmetic in shell expansions.
+* Process Substitution:: A way to write and read to and from a
+ command.
+* Word Splitting:: How the results of expansion are split into separate
+ arguments.
+* Filename Expansion:: A shorthand for specifying filenames matching patterns.
+* Quote Removal:: How and when quote characters are removed from
+ words.
+
+ The order of expansions is: brace expansion; tilde expansion,
+parameter and variable expansion, arithmetic expansion, and command
+substitution (done in a left-to-right fashion); word splitting; and
+filename expansion.
+
+ On systems that can support it, there is an additional expansion
+available: PROCESS SUBSTITUTION. This is performed at the same time as
+tilde, parameter, variable, and arithmetic expansion and command
+substitution.
+
+ After these expansions are performed, quote characters present in the
+original word are removed unless they have been quoted themselves (QUOTE
+REMOVAL).
+
+ Only brace expansion, word splitting, and filename expansion can
+increase 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 '"$@"' and '$*' (*note Special Parameters::), and
+'"${NAME[@]}"' and '${NAME[*]}' (*note Arrays::).
+
+ After all expansions, 'quote removal' (*note Quote Removal::) is
+performed.
+
+
+File: bash.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell Expansions
+
+3.5.1 Brace Expansion
+---------------------
+
+Brace expansion is a mechanism by which arbitrary strings may be
+generated. This mechanism is similar to FILENAME EXPANSION (*note
+Filename Expansion::), but the filenames generated need not exist.
+Patterns to be brace expanded take the form of an optional PREAMBLE,
+followed by either a series of comma-separated strings or a sequence
+expression between a pair of braces, followed by an optional POSTSCRIPT.
+The preamble is prefixed to each string contained within the braces, and
+the postscript is then appended to each resulting string, expanding left
+to right.
+
+ Brace expansions may be nested. The results of each expanded string
+are not sorted; left to right order is preserved. For example,
+ bash$ echo a{d,c,b}e
+ ade ace abe
+
+ A sequence expression takes the form '{X..Y[..INCR]}', where X and Y
+are either integers or single characters, and INCR, an optional
+increment, is an integer. When integers are supplied, the expression
+expands to each number between X and Y, inclusive. Supplied integers
+may be prefixed with '0' to force each term to have the same width.
+When either X or Y begins with a zero, the shell attempts to force all
+generated terms to contain the same number of digits, zero-padding where
+necessary. When characters are supplied, the expression expands to each
+character lexicographically between X and Y, inclusive, using the
+default C locale. Note that both X and Y must be of the same type.
+When the increment is supplied, it is used as the difference between
+each term. The default increment is 1 or -1 as appropriate.
+
+ Brace expansion is performed before any other expansions, and any
+characters special to other expansions are preserved in the result. It
+is strictly textual. Bash does not apply any syntactic interpretation
+to the context of the expansion or the text between the braces.
+
+ A correctly-formed brace expansion must contain unquoted opening and
+closing braces, and at least one unquoted comma or a valid sequence
+expression. Any incorrectly formed brace expansion is left unchanged.
+
+ A { or ',' may be quoted with a backslash to prevent its being
+considered part of a brace expression. To avoid conflicts with
+parameter expansion, the string '${' is not considered eligible for
+brace expansion, and inhibits brace expansion until the closing '}'..
+
+ This construct is typically used as shorthand when the common prefix
+of the strings to be generated is longer than in the above example:
+ mkdir /usr/local/src/bash/{old,new,dist,bugs}
+ or
+ chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+
+
+File: bash.info, Node: Tilde Expansion, Next: Shell Parameter Expansion, Prev: Brace Expansion, Up: Shell Expansions
+
+3.5.2 Tilde Expansion
+---------------------
+
+If a word begins with an unquoted tilde character ('~'), all of the
+characters up to the first unquoted slash (or all characters, if there
+is no unquoted slash) are considered a TILDE-PREFIX. If none of the
+characters in the tilde-prefix are quoted, the characters in the
+tilde-prefix following the tilde are treated as a possible LOGIN NAME.
+If this login name is the null string, the tilde is replaced with the
+value of the 'HOME' shell variable. If 'HOME' is unset, the home
+directory of the user executing the shell is substituted instead.
+Otherwise, the tilde-prefix is replaced with the home directory
+associated with the specified login name.
+
+ If the tilde-prefix is '~+', the value of the shell variable 'PWD'
+replaces the tilde-prefix. If the tilde-prefix is '~-', the value of
+the shell variable 'OLDPWD', if it is set, is substituted.
+
+ If the characters following the tilde in the tilde-prefix consist of
+a number N, optionally prefixed by a '+' or a '-', the tilde-prefix is
+replaced with the corresponding element from the directory stack, as it
+would be displayed by the 'dirs' builtin invoked with the characters
+following tilde in the tilde-prefix as an argument (*note The Directory
+Stack::). If the tilde-prefix, sans the tilde, consists of a number
+without a leading '+' or '-', '+' is assumed.
+
+ If the login name is invalid, or the tilde expansion fails, the word
+is left unchanged.
+
+ Each variable assignment is checked for unquoted tilde-prefixes
+immediately following a ':' or the first '='. In these cases, tilde
+expansion is also performed. Consequently, one may use filenames with
+tildes in assignments to 'PATH', 'MAILPATH', and 'CDPATH', and the shell
+assigns the expanded value.
+
+ The following table shows how Bash treats unquoted tilde-prefixes:
+
+'~'
+ The value of '$HOME'
+'~/foo'
+ '$HOME/foo'
+
+'~fred/foo'
+ The subdirectory 'foo' of the home directory of the user 'fred'
+
+'~+/foo'
+ '$PWD/foo'
+
+'~-/foo'
+ '${OLDPWD-'~-'}/foo'
+
+'~N'
+ The string that would be displayed by 'dirs +N'
+
+'~+N'
+ The string that would be displayed by 'dirs +N'
+
+'~-N'
+ The string that would be displayed by 'dirs -N'
+
+ Bash also performs tilde expansion on words satisfying the conditions
+of variable assignments (*note Shell Parameters::) when they appear as
+arguments to simple commands. Bash does not do this, except for the
+DECLARATION commands listed above, when in POSIX mode.
+
+
+File: bash.info, Node: Shell Parameter Expansion, Next: Command Substitution, Prev: Tilde Expansion, Up: Shell Expansions
+
+3.5.3 Shell Parameter Expansion
+-------------------------------
+
+The '$' character introduces parameter expansion, command substitution,
+or arithmetic expansion. The parameter name or symbol to be expanded
+may be enclosed in braces, which are optional but serve to protect the
+variable to be expanded from characters immediately following it which
+could be interpreted as part of the name.
+
+ When braces are used, the matching ending brace is the first '}' not
+escaped by a backslash or within a quoted string, and not within an
+embedded arithmetic expansion, command substitution, or parameter
+expansion.
+
+ The basic form of parameter expansion is ${PARAMETER}. The value of
+PARAMETER is substituted. The PARAMETER is a shell parameter as
+described above (*note Shell Parameters::) or an array reference (*note
+Arrays::). The braces are required when PARAMETER is a positional
+parameter with more than one digit, or when PARAMETER is followed by a
+character that is not to be interpreted as part of its name.
+
+ If the first character of PARAMETER is an exclamation point (!), and
+PARAMETER is not a NAMEREF, it introduces a level of indirection. Bash
+uses the value formed by expanding the rest of PARAMETER as the new
+PARAMETER; this is then expanded and that value is used in the rest of
+the expansion, rather than the expansion of the original PARAMETER.
+This is known as 'indirect expansion'. The value is subject to tilde
+expansion, parameter expansion, command substitution, and arithmetic
+expansion. If PARAMETER is a nameref, this expands to the name of the
+variable referenced by PARAMETER instead of performing the complete
+indirect expansion. The exceptions to this are the expansions of
+${!PREFIX*} and ${!NAME[@]} described below. The exclamation point must
+immediately follow the left brace in order to introduce indirection.
+
+ In each of the cases below, WORD is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+
+ When not performing substring expansion, using the form described
+below (e.g., ':-'), Bash tests for a parameter that is unset or null.
+Omitting the colon results in a test only for a parameter that is unset.
+Put another way, if the colon is included, the operator tests for both
+PARAMETER's existence and that its value is not null; if the colon is
+omitted, the operator tests only for existence.
+
+'${PARAMETER:-WORD}'
+ If PARAMETER is unset or null, the expansion of WORD is
+ substituted. Otherwise, the value of PARAMETER is substituted.
+
+'${PARAMETER:=WORD}'
+ If PARAMETER is unset or null, the expansion of WORD is assigned to
+ PARAMETER. The value of PARAMETER is then substituted. Positional
+ parameters and special parameters may not be assigned to in this
+ way.
+
+'${PARAMETER:?WORD}'
+ If PARAMETER is null or unset, the expansion of WORD (or a message
+ to that effect if WORD is not present) is written to the standard
+ error and the shell, if it is not interactive, exits. Otherwise,
+ the value of PARAMETER is substituted.
+
+'${PARAMETER:+WORD}'
+ If PARAMETER is null or unset, nothing is substituted, otherwise
+ the expansion of WORD is substituted.
+
+'${PARAMETER:OFFSET}'
+'${PARAMETER:OFFSET:LENGTH}'
+ This is referred to as Substring Expansion. It expands to up to
+ LENGTH characters of the value of PARAMETER starting at the
+ character specified by OFFSET. If PARAMETER is '@', an indexed
+ array subscripted by '@' or '*', or an associative array name, the
+ results differ as described below. If LENGTH is omitted, it
+ expands to the substring of the value of PARAMETER starting at the
+ character specified by OFFSET and extending to the end of the
+ value. LENGTH and OFFSET are arithmetic expressions (*note Shell
+ Arithmetic::).
+
+ If OFFSET evaluates to a number less than zero, the value is used
+ as an offset in characters from the end of the value of PARAMETER.
+ If LENGTH evaluates to a number less than zero, it is interpreted
+ as an offset in characters from the end of the value of PARAMETER
+ rather than a number of characters, and the expansion is the
+ characters between OFFSET and that result. Note that a negative
+ offset must be separated from the colon by at least one space to
+ avoid being confused with the ':-' expansion.
+
+ Here are some examples illustrating substring expansion on
+ parameters and subscripted arrays:
+
+ $ string=01234567890abcdefgh
+ $ echo ${string:7}
+ 7890abcdefgh
+ $ echo ${string:7:0}
+
+ $ echo ${string:7:2}
+ 78
+ $ echo ${string:7:-2}
+ 7890abcdef
+ $ echo ${string: -7}
+ bcdefgh
+ $ echo ${string: -7:0}
+
+ $ echo ${string: -7:2}
+ bc
+ $ echo ${string: -7:-2}
+ bcdef
+ $ set -- 01234567890abcdefgh
+ $ echo ${1:7}
+ 7890abcdefgh
+ $ echo ${1:7:0}
+
+ $ echo ${1:7:2}
+ 78
+ $ echo ${1:7:-2}
+ 7890abcdef
+ $ echo ${1: -7}
+ bcdefgh
+ $ echo ${1: -7:0}
+
+ $ echo ${1: -7:2}
+ bc
+ $ echo ${1: -7:-2}
+ bcdef
+ $ array[0]=01234567890abcdefgh
+ $ echo ${array[0]:7}
+ 7890abcdefgh
+ $ echo ${array[0]:7:0}
+
+ $ echo ${array[0]:7:2}
+ 78
+ $ echo ${array[0]:7:-2}
+ 7890abcdef
+ $ echo ${array[0]: -7}
+ bcdefgh
+ $ echo ${array[0]: -7:0}
+
+ $ echo ${array[0]: -7:2}
+ bc
+ $ echo ${array[0]: -7:-2}
+ bcdef
+
+ If PARAMETER is '@', the result is LENGTH positional parameters
+ beginning at OFFSET. A negative OFFSET is taken relative to one
+ greater than the greatest positional parameter, so an offset of -1
+ evaluates to the last positional parameter. It is an expansion
+ error if LENGTH evaluates to a number less than zero.
+
+ The following examples illustrate substring expansion using
+ positional parameters:
+
+ $ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+ $ echo ${@:7}
+ 7 8 9 0 a b c d e f g h
+ $ echo ${@:7:0}
+
+ $ echo ${@:7:2}
+ 7 8
+ $ echo ${@:7:-2}
+ bash: -2: substring expression < 0
+ $ echo ${@: -7:2}
+ b c
+ $ echo ${@:0}
+ ./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+ $ echo ${@:0:2}
+ ./bash 1
+ $ echo ${@: -7:0}
+
+
+ If PARAMETER is an indexed array name subscripted by '@' or '*',
+ the result is the LENGTH members of the array beginning with
+ '${PARAMETER[OFFSET]}'. A negative OFFSET is taken relative to one
+ greater than the maximum index of the specified array. It is an
+ expansion error if LENGTH evaluates to a number less than zero.
+
+ These examples show how you can use substring expansion with
+ indexed arrays:
+
+ $ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h)
+ $ echo ${array[@]:7}
+ 7 8 9 0 a b c d e f g h
+ $ echo ${array[@]:7:2}
+ 7 8
+ $ echo ${array[@]: -7:2}
+ b c
+ $ echo ${array[@]: -7:-2}
+ bash: -2: substring expression < 0
+ $ echo ${array[@]:0}
+ 0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+ $ echo ${array[@]:0:2}
+ 0 1
+ $ echo ${array[@]: -7:0}
+
+
+ Substring expansion applied to an associative array produces
+ undefined results.
+
+ Substring indexing is zero-based unless the positional parameters
+ are used, in which case the indexing starts at 1 by default. If
+ OFFSET is 0, and the positional parameters are used, '$@' is
+ prefixed to the list.
+
+'${!PREFIX*}'
+'${!PREFIX@}'
+ Expands to the names of variables whose names begin with PREFIX,
+ separated by the first character of the 'IFS' special variable.
+ When '@' is used and the expansion appears within double quotes,
+ each variable name expands to a separate word.
+
+'${!NAME[@]}'
+'${!NAME[*]}'
+ If NAME is an array variable, expands to the list of array indices
+ (keys) assigned in NAME. If NAME is not an array, expands to 0 if
+ NAME is set and null otherwise. When '@' is used and the expansion
+ appears within double quotes, each key expands to a separate word.
+
+'${#PARAMETER}'
+ The length in characters of the expanded value of PARAMETER is
+ substituted. If PARAMETER is '*' or '@', the value substituted is
+ the number of positional parameters. If PARAMETER is an array name
+ subscripted by '*' or '@', the value substituted is the number of
+ elements in the array. If PARAMETER is an indexed array name
+ subscripted by a negative number, that number is interpreted as
+ relative to one greater than the maximum index of PARAMETER, so
+ negative indices count back from the end of the array, and an index
+ of -1 references the last element.
+
+'${PARAMETER#WORD}'
+'${PARAMETER##WORD}'
+ The WORD is expanded to produce a pattern and matched according to
+ the rules described below (*note Pattern Matching::). If the
+ pattern matches the beginning of the expanded value of PARAMETER,
+ then the result of the expansion is the expanded value of PARAMETER
+ with the shortest matching pattern (the '#' case) or the longest
+ matching pattern (the '##' case) deleted. If PARAMETER is '@' or
+ '*', the pattern removal operation is applied to each positional
+ parameter in turn, and the expansion is the resultant list. If
+ PARAMETER is an array variable subscripted with '@' or '*', the
+ pattern removal operation is applied to each member of the array in
+ turn, and the expansion is the resultant list.
+
+'${PARAMETER%WORD}'
+'${PARAMETER%%WORD}'
+ The WORD is expanded to produce a pattern and matched according to
+ the rules described below (*note Pattern Matching::). If the
+ pattern matches If the pattern matches a trailing portion of the
+ expanded value of PARAMETER, then the result of the expansion is
+ the value of PARAMETER with the shortest matching pattern (the '%'
+ case) or the longest matching pattern (the '%%' case) deleted. If
+ PARAMETER is '@' or '*', the pattern removal operation is applied
+ to each positional parameter in turn, and the expansion is the
+ resultant list. If PARAMETER is an array variable subscripted with
+ '@' or '*', the pattern removal operation is applied to each member
+ of the array in turn, and the expansion is the resultant list.
+
+'${PARAMETER/PATTERN/STRING}'
+
+ The PATTERN is expanded to produce a pattern just as in filename
+ expansion. PARAMETER is expanded and the longest match of PATTERN
+ against its value is replaced with STRING. The match is performed
+ according to the rules described below (*note Pattern Matching::).
+ If PATTERN begins with '/', all matches of PATTERN are replaced
+ with STRING. Normally only the first match is replaced. If
+ PATTERN begins with '#', it must match at the beginning of the
+ expanded value of PARAMETER. If PATTERN begins with '%', it must
+ match at the end of the expanded value of PARAMETER. If STRING is
+ null, matches of PATTERN are deleted and the '/' following PATTERN
+ may be omitted. If the 'nocasematch' shell option (see the
+ description of 'shopt' in *note The Shopt Builtin::) is enabled,
+ the match is performed without regard to the case of alphabetic
+ characters. If PARAMETER is '@' or '*', the substitution operation
+ is applied to each positional parameter in turn, and the expansion
+ is the resultant list. If PARAMETER is an array variable
+ subscripted with '@' or '*', the substitution operation is applied
+ to each member of the array in turn, and the expansion is the
+ resultant list.
+
+'${PARAMETER^PATTERN}'
+'${PARAMETER^^PATTERN}'
+'${PARAMETER,PATTERN}'
+'${PARAMETER,,PATTERN}'
+ This expansion modifies the case of alphabetic characters in
+ PARAMETER. The PATTERN is expanded to produce a pattern just as in
+ filename expansion. Each character in the expanded value of
+ PARAMETER is tested against PATTERN, and, if it matches the
+ pattern, its case is converted. The pattern should not attempt to
+ match more than one character. The '^' operator converts lowercase
+ letters matching PATTERN to uppercase; the ',' operator converts
+ matching uppercase letters to lowercase. The '^^' and ',,'
+ expansions convert each matched character in the expanded value;
+ the '^' and ',' expansions match and convert only the first
+ character in the expanded value. If PATTERN is omitted, it is
+ treated like a '?', which matches every character. If PARAMETER is
+ '@' or '*', the case modification operation is applied to each
+ positional parameter in turn, and the expansion is the resultant
+ list. If PARAMETER is an array variable subscripted with '@' or
+ '*', the case modification operation is applied to each member of
+ the array in turn, and the expansion is the resultant list.
+
+'${PARAMETER@OPERATOR}'
+ The expansion is either a transformation of the value of PARAMETER
+ or information about PARAMETER itself, depending on the value of
+ OPERATOR. Each OPERATOR is a single letter:
+
+ 'Q'
+ The expansion is a string that is the value of PARAMETER
+ quoted in a format that can be reused as input.
+ 'E'
+ The expansion is a string that is the value of PARAMETER with
+ backslash escape sequences expanded as with the '$'...''
+ quoting mechanism.
+ 'P'
+ The expansion is a string that is the result of expanding the
+ value of PARAMETER as if it were a prompt string (*note
+ Controlling the Prompt::).
+ 'A'
+ The expansion is a string in the form of an assignment
+ statement or 'declare' command that, if evaluated, will
+ recreate PARAMETER with its attributes and value.
+ 'a'
+ The expansion is a string consisting of flag values
+ representing PARAMETER's attributes.
+
+ If PARAMETER is '@' or '*', the operation is applied to each
+ positional parameter in turn, and the expansion is the resultant
+ list. If PARAMETER is an array variable subscripted with '@' or
+ '*', the operation is applied to each member of the array in turn,
+ and the expansion is the resultant list.
+
+ The result of the expansion is subject to word splitting and
+ pathname expansion as described below.
+
+
+File: bash.info, Node: Command Substitution, Next: Arithmetic Expansion, Prev: Shell Parameter Expansion, Up: Shell Expansions
+
+3.5.4 Command Substitution
+--------------------------
+
+Command substitution allows the output of a command to replace the
+command itself. Command substitution occurs when a command is enclosed
+as follows:
+ $(COMMAND)
+or
+ `COMMAND`
+
+Bash performs the expansion by executing COMMAND in a subshell
+environment and replacing the command substitution with the standard
+output of the command, with any trailing newlines deleted. Embedded
+newlines are not deleted, but they may be removed during word splitting.
+The command substitution '$(cat FILE)' can be replaced by the equivalent
+but faster '$(< FILE)'.
+
+ When the old-style backquote form of substitution is used, backslash
+retains its literal meaning except when followed by '$', '`', or '\'.
+The first backquote not preceded by a backslash terminates the command
+substitution. When using the '$(COMMAND)' form, all characters between
+the parentheses make up the command; none are treated specially.
+
+ Command substitutions may be nested. To nest when using the
+backquoted form, escape the inner backquotes with backslashes.
+
+ If the substitution appears within double quotes, word splitting and
+filename expansion are not performed on the results.
+
+
+File: bash.info, Node: Arithmetic Expansion, Next: Process Substitution, Prev: Command Substitution, Up: Shell Expansions
+
+3.5.5 Arithmetic Expansion
+--------------------------
+
+Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result. The format for arithmetic expansion
+is:
+
+ $(( EXPRESSION ))
+
+ The expression is treated as if it were within double quotes, but a
+double quote inside the parentheses is not treated specially. All
+tokens in the expression undergo parameter and variable expansion,
+command substitution, and quote removal. The result is treated as the
+arithmetic expression to be evaluated. Arithmetic expansions may be
+nested.
+
+ The evaluation is performed according to the rules listed below
+(*note Shell Arithmetic::). If the expression is invalid, Bash prints a
+message indicating failure to the standard error and no substitution
+occurs.
+
+
+File: bash.info, Node: Process Substitution, Next: Word Splitting, Prev: Arithmetic Expansion, Up: Shell Expansions
+
+3.5.6 Process Substitution
+--------------------------
+
+Process substitution allows a process's input or output to be referred
+to using a filename. It takes the form of
+ <(LIST)
+or
+ >(LIST)
+The process LIST is run asynchronously, and its input or output appears
+as a filename. This filename is passed as an argument to the current
+command as the result of the expansion. If the '>(LIST)' form is used,
+writing to the file will provide input for LIST. If the '<(LIST)' form
+is used, the file passed as an argument should be read to obtain the
+output of LIST. Note that no space may appear between the '<' or '>'
+and the left parenthesis, otherwise the construct would be interpreted
+as a redirection. Process substitution is supported on systems that
+support named pipes (FIFOs) or the '/dev/fd' method of naming open
+files.
+
+ When available, process substitution is performed simultaneously with
+parameter and variable expansion, command substitution, and arithmetic
+expansion.
+
+
+File: bash.info, Node: Word Splitting, Next: Filename Expansion, Prev: Process Substitution, Up: Shell Expansions
+
+3.5.7 Word Splitting
+--------------------
+
+The shell scans the results of parameter expansion, command
+substitution, and arithmetic expansion that did not occur within double
+quotes for word splitting.
+
+ The shell treats each character of '$IFS' as a delimiter, and splits
+the results of the other expansions into words using these characters as
+field terminators. If 'IFS' is unset, or its value is exactly
+'<space><tab><newline>', the default, then sequences of ' <space>',
+'<tab>', and '<newline>' at the beginning and end of the results of the
+previous expansions are ignored, and any sequence of 'IFS' characters
+not at the beginning or end serves to delimit words. If 'IFS' has a
+value other than the default, then sequences of the whitespace
+characters 'space', 'tab', and 'newline' are ignored at the beginning
+and end of the word, as long as the whitespace character is in the value
+of 'IFS' (an 'IFS' whitespace character). Any character in 'IFS' that
+is not 'IFS' whitespace, along with any adjacent 'IFS' whitespace
+characters, delimits a field. A sequence of 'IFS' whitespace characters
+is also treated as a delimiter. If the value of 'IFS' is null, no word
+splitting occurs.
+
+ Explicit null arguments ('""' or '''') are retained and passed to
+commands as empty strings. 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 and passed to a command as an empty
+string. When a quoted null argument appears as part of a word whose
+expansion is non-null, the null argument is removed. That is, the word
+'-d''' becomes '-d' after word splitting and null argument removal.
+
+ Note that if no expansion occurs, no splitting is performed.
+
+
+File: bash.info, Node: Filename Expansion, Next: Quote Removal, Prev: Word Splitting, Up: Shell Expansions
+
+3.5.8 Filename Expansion
+------------------------
+
+* Menu:
+
+* Pattern Matching:: How the shell matches patterns.
+
+After word splitting, unless the '-f' option has been set (*note The Set
+Builtin::), Bash scans each word for the characters '*', '?', and '['.
+If one of these characters appears, then the word is regarded as a
+PATTERN, and replaced with an alphabetically sorted list of filenames
+matching the pattern (*note Pattern Matching::). If no matching
+filenames are found, and the shell option 'nullglob' is disabled, the
+word is left unchanged. If the 'nullglob' option is set, and no matches
+are found, the word is removed. If the 'failglob' shell option is set,
+and no matches are found, an error message is printed and the command is
+not executed. If the shell option 'nocaseglob' is enabled, the match is
+performed without regard to the case of alphabetic characters.
+
+ When a pattern is used for filename expansion, the character '.' at
+the start of a filename or immediately following a slash must be matched
+explicitly, unless the shell option 'dotglob' is set. The filenames '.'
+and '..' must always be matched explicitly, even if 'dotglob' is set.
+In other cases, the '.' character is not treated specially.
+
+ When matching a filename, the slash character must always be matched
+explicitly by a slash in the pattern, but in other matching contexts it
+can be matched by a special pattern character as described below (*note
+Pattern Matching::).
+
+ See the description of 'shopt' in *note The Shopt Builtin::, for a
+description of the 'nocaseglob', 'nullglob', 'failglob', and 'dotglob'
+options.
+
+ The 'GLOBIGNORE' shell variable may be used to restrict the set of
+file names matching a pattern. If 'GLOBIGNORE' is set, each matching
+file name that also matches one of the patterns in 'GLOBIGNORE' is
+removed from the list of matches. If the 'nocaseglob' option is set,
+the matching against the patterns in 'GLOBIGNORE' is performed without
+regard to case. The filenames '.' and '..' are always ignored when
+'GLOBIGNORE' is set and not null. However, setting 'GLOBIGNORE' to a
+non-null value has the effect of enabling the 'dotglob' shell option, so
+all other filenames beginning with a '.' will match. To get the old
+behavior of ignoring filenames beginning with a '.', make '.*' one of
+the patterns in 'GLOBIGNORE'. The 'dotglob' option is disabled when
+'GLOBIGNORE' is unset.
+
+
+File: bash.info, Node: Pattern Matching, Up: Filename Expansion
+
+3.5.8.1 Pattern Matching
+........................
+
+Any character that appears in a pattern, other than the special pattern
+characters described below, matches itself. The NUL character may not
+occur in a pattern. A backslash escapes the following character; the
+escaping backslash is discarded when matching. The special pattern
+characters must be quoted if they are to be matched literally.
+
+ The special pattern characters have the following meanings:
+'*'
+ Matches any string, including the null string. When the 'globstar'
+ shell option is enabled, and '*' is used in a filename expansion
+ context, two adjacent '*'s used as a single pattern will match all
+ files and zero or more directories and subdirectories. If followed
+ by a '/', two adjacent '*'s will match only directories and
+ subdirectories.
+'?'
+ Matches any single character.
+'[...]'
+ Matches any one of the enclosed characters. A pair of characters
+ separated by a hyphen denotes a RANGE EXPRESSION; any character
+ that falls between those two characters, inclusive, using the
+ current locale's collating sequence and character set, is matched.
+ If the first character following the '[' is a '!' or a '^' then any
+ character not enclosed is matched. A '-' may be matched by
+ including it as the first or last character in the set. A ']' 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 values of the 'LC_COLLATE' and 'LC_ALL'
+ shell variables, if set.
+
+ For example, in the default C locale, '[a-dx-z]' is equivalent to
+ '[abcdxyz]'. Many locales sort characters in dictionary order, and
+ in these locales '[a-dx-z]' is typically not equivalent to
+ '[abcdxyz]'; it might be equivalent to '[aBbCcDdxXyYz]', for
+ example. To obtain the traditional interpretation of ranges in
+ bracket expressions, you can force the use of the C locale by
+ setting the 'LC_COLLATE' or 'LC_ALL' environment variable to the
+ value 'C', or enable the 'globasciiranges' shell option.
+
+ Within '[' and ']', CHARACTER CLASSES can be specified using the
+ syntax '[:'CLASS':]', where CLASS is one of the following classes
+ defined in the POSIX standard:
+ alnum alpha ascii blank cntrl digit graph lower
+ print punct space upper word xdigit
+ A character class matches any character belonging to that class.
+ The 'word' character class matches letters, digits, and the
+ character '_'.
+
+ Within '[' and ']', an EQUIVALENCE CLASS can be specified using the
+ syntax '[='C'=]', which matches all characters with the same
+ collation weight (as defined by the current locale) as the
+ character C.
+
+ Within '[' and ']', the syntax '[.'SYMBOL'.]' matches the collating
+ symbol SYMBOL.
+
+ If the 'extglob' shell option is enabled using the 'shopt' builtin,
+several extended pattern matching operators are recognized. In the
+following description, a PATTERN-LIST is a list of one or more patterns
+separated by a '|'. Composite patterns may be formed using one or more
+of the following sub-patterns:
+
+'?(PATTERN-LIST)'
+ Matches zero or one occurrence of the given patterns.
+
+'*(PATTERN-LIST)'
+ Matches zero or more occurrences of the given patterns.
+
+'+(PATTERN-LIST)'
+ Matches one or more occurrences of the given patterns.
+
+'@(PATTERN-LIST)'
+ Matches one of the given patterns.
+
+'!(PATTERN-LIST)'
+ Matches anything except one of the given patterns.
+
+ Complicated extended pattern matching against long strings is slow,
+especially when the patterns contain alternations and the strings
+contain multiple matches. Using separate matches against shorter
+strings, or using arrays of strings instead of a single long string, may
+be faster.
+
+
+File: bash.info, Node: Quote Removal, Prev: Filename Expansion, Up: Shell Expansions
+
+3.5.9 Quote Removal
+-------------------
+
+After the preceding expansions, all unquoted occurrences of the
+characters '\', ''', and '"' that did not result from one of the above
+expansions are removed.
+
+
+File: bash.info, Node: Redirections, Next: Executing Commands, Prev: Shell Expansions, Up: Basic Shell Features
+
+3.6 Redirections
+================
+
+Before a command is executed, its input and output may be REDIRECTED
+using a special notation interpreted by the shell. Redirection allows
+commands' file handles to be duplicated, opened, closed, made to refer
+to different files, and can change the files the command reads from and
+writes to. Redirection may also be used to modify file handles in the
+current shell execution environment. The following redirection
+operators may precede or appear anywhere within a simple command or may
+follow a command. Redirections are processed in the order they appear,
+from left to right.
+
+ Each redirection that may be preceded by a file descriptor number may
+instead be preceded by a word of the form {VARNAME}. In this case, for
+each redirection operator except >&- and <&-, the shell will allocate a
+file descriptor greater than 10 and assign it to {VARNAME}. If >&- or
+<&- is preceded by {VARNAME}, the value of VARNAME defines the file
+descriptor to close. If {VARNAME} is supplied, the redirection persists
+beyond the scope of the command, allowing the shell programmer to manage
+the file descriptor himself.
+
+ In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is '<', the
+redirection refers to the standard input (file descriptor 0). If the
+first character of the redirection operator is '>', the redirection
+refers to the standard output (file descriptor 1).
+
+ The word following the redirection operator in the following
+descriptions, unless otherwise noted, is subjected to brace expansion,
+tilde expansion, parameter expansion, command substitution, arithmetic
+expansion, quote removal, filename expansion, and word splitting. If it
+expands to more than one word, Bash reports an error.
+
+ Note that the order of redirections is significant. For example, the
+command
+ ls > DIRLIST 2>&1
+directs both standard output (file descriptor 1) and standard error
+(file descriptor 2) to the file DIRLIST, while the command
+ ls 2>&1 > DIRLIST
+directs only the standard output to file DIRLIST, because the standard
+error was made a copy of the standard output before the standard output
+was redirected to DIRLIST.
+
+ Bash handles several filenames specially when they are used in
+redirections, as described in the following table. If the operating
+system on which Bash is running provides these special files, bash will
+use them; otherwise it will emulate them internally with the behavior
+described below.
+
+'/dev/fd/FD'
+ If FD is a valid integer, file descriptor FD is duplicated.
+
+'/dev/stdin'
+ File descriptor 0 is duplicated.
+
+'/dev/stdout'
+ File descriptor 1 is duplicated.
+
+'/dev/stderr'
+ File descriptor 2 is duplicated.
+
+'/dev/tcp/HOST/PORT'
+ If HOST is a valid hostname or Internet address, and PORT is an
+ integer port number or service name, Bash attempts to open the
+ corresponding TCP socket.
+
+'/dev/udp/HOST/PORT'
+ If HOST is a valid hostname or Internet address, and PORT is an
+ integer port number or service name, Bash attempts to open the
+ corresponding UDP socket.
+
+ A failure to open or create a file causes the redirection to fail.
+
+ Redirections using file descriptors greater than 9 should be used
+with care, as they may conflict with file descriptors the shell uses
+internally.
+
+3.6.1 Redirecting Input
+-----------------------
+
+Redirection of input causes the file whose name results from the
+expansion of WORD to be opened for reading on file descriptor 'n', or
+the standard input (file descriptor 0) if 'n' is not specified.
+
+ The general format for redirecting input is:
+ [N]<WORD
+
+3.6.2 Redirecting Output
+------------------------
+
+Redirection of output causes the file whose name results from the
+expansion of WORD to be opened for writing on file descriptor N, or the
+standard output (file descriptor 1) if N is not specified. If the file
+does not exist it is created; if it does exist it is truncated to zero
+size.
+
+ The general format for redirecting output is:
+ [N]>[|]WORD
+
+ If the redirection operator is '>', and the 'noclobber' option to the
+'set' builtin has been enabled, the redirection will fail if the file
+whose name results from the expansion of WORD exists and is a regular
+file. If the redirection operator is '>|', or the redirection operator
+is '>' and the 'noclobber' option is not enabled, the redirection is
+attempted even if the file named by WORD exists.
+
+3.6.3 Appending Redirected Output
+---------------------------------
+
+Redirection of output in this fashion causes the file whose name results
+from the expansion of WORD to be opened for appending on file descriptor
+N, or the standard output (file descriptor 1) if N is not specified. If
+the file does not exist it is created.
+
+ The general format for appending output is:
+ [N]>>WORD
+
+3.6.4 Redirecting Standard Output and Standard Error
+----------------------------------------------------
+
+This construct 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 WORD.
+
+ There are two formats for redirecting standard output and standard
+error:
+ &>WORD
+and
+ >&WORD
+Of the two forms, the first is preferred. This is semantically
+equivalent to
+ >WORD 2>&1
+ When using the second form, WORD may not expand to a number or '-'.
+If it does, other redirection operators apply (see Duplicating File
+Descriptors below) for compatibility reasons.
+
+3.6.5 Appending Standard Output and Standard Error
+--------------------------------------------------
+
+This construct allows both the standard output (file descriptor 1) and
+the standard error output (file descriptor 2) to be appended to the file
+whose name is the expansion of WORD.
+
+ The format for appending standard output and standard error is:
+ &>>WORD
+This is semantically equivalent to
+ >>WORD 2>&1
+ (see Duplicating File Descriptors below).
+
+3.6.6 Here Documents
+--------------------
+
+This type of redirection instructs the shell to read input from the
+current source until a line containing only WORD (with no trailing
+blanks) is seen. All of the lines read up to that point are then used
+as the standard input (or file descriptor N if N is specified) for a
+command.
+
+ The format of here-documents is:
+ [N]<<[-]WORD
+ HERE-DOCUMENT
+ DELIMITER
+
+ No parameter and variable expansion, command substitution, arithmetic
+expansion, or filename expansion is performed on WORD. If any part of
+WORD is quoted, the DELIMITER is the result of quote removal on WORD,
+and the lines in the here-document are not expanded. If WORD is
+unquoted, all lines of the here-document are subjected to parameter
+expansion, command substitution, and arithmetic expansion, the character
+sequence '\newline' is ignored, and '\' must be used to quote the
+characters '\', '$', and '`'.
+
+ If the redirection operator is '<<-', then all leading tab characters
+are stripped from input lines and the line containing DELIMITER. This
+allows here-documents within shell scripts to be indented in a natural
+fashion.
+
+3.6.7 Here Strings
+------------------
+
+A variant of here documents, the format is:
+ [N]<<< WORD
+
+ The WORD undergoes tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal. Pathname
+expansion and word splitting are not performed. The result is supplied
+as a single string, with a newline appended, to the command on its
+standard input (or file descriptor N if N is specified).
+
+3.6.8 Duplicating File Descriptors
+----------------------------------
+
+The redirection operator
+ [N]<&WORD
+is used to duplicate input file descriptors. If WORD expands to one or
+more digits, the file descriptor denoted by N is made to be a copy of
+that file descriptor. If the digits in WORD do not specify a file
+descriptor open for input, a redirection error occurs. If WORD
+evaluates to '-', file descriptor N is closed. If N is not specified,
+the standard input (file descriptor 0) is used.
+
+ The operator
+ [N]>&WORD
+is used similarly to duplicate output file descriptors. If N is not
+specified, the standard output (file descriptor 1) is used. If the
+digits in WORD do not specify a file descriptor open for output, a
+redirection error occurs. If WORD evaluates to '-', file descriptor N
+is closed. As a special case, if N is omitted, and WORD does not expand
+to one or more digits or '-', the standard output and standard error are
+redirected as described previously.
+
+3.6.9 Moving File Descriptors
+-----------------------------
+
+The redirection operator
+ [N]<&DIGIT-
+moves the file descriptor DIGIT to file descriptor N, or the standard
+input (file descriptor 0) if N is not specified. DIGIT is closed after
+being duplicated to N.
+
+ Similarly, the redirection operator
+ [N]>&DIGIT-
+moves the file descriptor DIGIT to file descriptor N, or the standard
+output (file descriptor 1) if N is not specified.
+
+3.6.10 Opening File Descriptors for Reading and Writing
+-------------------------------------------------------
+
+The redirection operator
+ [N]<>WORD
+causes the file whose name is the expansion of WORD to be opened for
+both reading and writing on file descriptor N, or on file descriptor 0
+if N is not specified. If the file does not exist, it is created.
+
+
+File: bash.info, Node: Executing Commands, Next: Shell Scripts, Prev: Redirections, Up: Basic Shell Features
+
+3.7 Executing Commands
+======================
+
+* Menu:
+
+* Simple Command Expansion:: How Bash expands simple commands before
+ executing them.
+* Command Search and Execution:: How Bash finds commands and runs them.
+* Command Execution Environment:: The environment in which Bash
+ executes commands that are not
+ shell builtins.
+* Environment:: The environment given to a command.
+* Exit Status:: The status returned by commands and how Bash
+ interprets it.
+* Signals:: What happens when Bash or a command it runs
+ receives a signal.
+
+
+File: bash.info, Node: Simple Command Expansion, Next: Command Search and Execution, Up: Executing Commands
+
+3.7.1 Simple Command Expansion
+------------------------------
+
+When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+
+ 1. The words that the parser has marked as variable assignments (those
+ preceding the command name) and redirections are saved for later
+ processing.
+
+ 2. The words that are not variable assignments or redirections are
+ expanded (*note Shell Expansions::). 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.
+
+ 3. Redirections are performed as described above (*note
+ Redirections::).
+
+ 4. The text after the '=' in each variable assignment undergoes tilde
+ expansion, parameter expansion, command substitution, arithmetic
+ expansion, and quote removal before being assigned to the variable.
+
+ If no command name results, the variable assignments affect the
+current shell environment. Otherwise, the variables are added to the
+environment of the executed command and do not affect the current shell
+environment. If any of the assignments attempts to assign a value to a
+readonly variable, an error occurs, and the command exits with a
+non-zero status.
+
+ If no command name results, redirections are performed, but do not
+affect the current shell environment. A redirection error causes the
+command to exit with a non-zero status.
+
+ If there is a command name left after expansion, execution proceeds
+as described below. Otherwise, the command exits. If one of the
+expansions contained a command substitution, the exit status of the
+command is the exit status of the last command substitution performed.
+If there were no command substitutions, the command exits with a status
+of zero.
+
+
+File: bash.info, Node: Command Search and Execution, Next: Command Execution Environment, Prev: Simple Command Expansion, Up: Executing Commands
+
+3.7.2 Command Search and Execution
+----------------------------------
+
+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.
+
+ 1. 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 *note Shell Functions::.
+
+ 2. 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.
+
+ 3. If the name is neither a shell function nor a builtin, and contains
+ no slashes, Bash searches each element of '$PATH' for a directory
+ containing an executable file by that name. Bash uses a hash table
+ to remember the full pathnames of executable files to avoid
+ multiple 'PATH' searches (see the description of 'hash' in *note
+ Bourne Shell Builtins::). A full search of the directories in
+ '$PATH' is performed only if the command is not found in the hash
+ table. If the search is unsuccessful, the shell searches for a
+ defined shell function named 'command_not_found_handle'. If that
+ function exists, it is invoked in a separate execution environment
+ with the original command and the original command's arguments as
+ its arguments, and the function's exit status becomes the exit
+ status of that subshell. If that function is not defined, the
+ shell prints an error message and returns an exit status of 127.
+
+ 4. 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.
+
+ 5. 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
+ SHELL SCRIPT and the shell executes it as described in *note Shell
+ Scripts::.
+
+ 6. If the command was not begun asynchronously, the shell waits for
+ the command to complete and collects its exit status.
+
+
+File: bash.info, Node: Command Execution Environment, Next: Environment, Prev: Command Search and Execution, Up: Executing Commands
+
+3.7.3 Command Execution Environment
+-----------------------------------
+
+The shell has an EXECUTION ENVIRONMENT, which consists of the following:
+
+ * open files inherited by the shell at invocation, as modified by
+ redirections supplied to the 'exec' builtin
+
+ * the current working directory as set by 'cd', 'pushd', or 'popd',
+ or inherited by the shell at invocation
+
+ * the file creation mode mask as set by 'umask' or inherited from the
+ shell's parent
+
+ * current traps set by 'trap'
+
+ * shell parameters that are set by variable assignment or with 'set'
+ or inherited from the shell's parent in the environment
+
+ * shell functions defined during execution or inherited from the
+ shell's parent in the environment
+
+ * options enabled at invocation (either by default or with
+ command-line arguments) or by 'set'
+
+ * options enabled by 'shopt' (*note The Shopt Builtin::)
+
+ * shell aliases defined with 'alias' (*note Aliases::)
+
+ * various process IDs, including those of background jobs (*note
+ Lists::), the value of '$$', and the value of '$PPID'
+
+ When a simple command other than a builtin or shell function is to be
+executed, it is invoked in a separate execution environment that
+consists of the following. Unless otherwise noted, the values are
+inherited from the shell.
+
+ * the shell's open files, plus any modifications and additions
+ specified by redirections to the command
+
+ * the current working directory
+
+ * the file creation mode mask
+
+ * shell variables and functions marked for export, along with
+ variables exported for the command, passed in the environment
+ (*note Environment::)
+
+ * traps caught by the shell are reset to the values inherited from
+ the shell's parent, and traps ignored by the shell are ignored
+
+ A command invoked in this separate environment cannot affect the
+shell's execution environment.
+
+ Command substitution, commands grouped with parentheses, and
+asynchronous commands are invoked in a subshell environment that is a
+duplicate of the shell environment, except that traps caught by the
+shell are reset to the values that the shell inherited from its parent
+at invocation. Builtin commands that are invoked as part of a pipeline
+are also executed in a subshell environment. Changes made to the
+subshell environment cannot affect the shell's execution environment.
+
+ Subshells spawned to execute command substitutions inherit the value
+of the '-e' option from the parent shell. When not in POSIX mode, Bash
+clears the '-e' option in such subshells.
+
+ If a command is followed by a '&' and job control is not active, the
+default standard input for the command is the empty file '/dev/null'.
+Otherwise, the invoked command inherits the file descriptors of the
+calling shell as modified by redirections.
+
+
+File: bash.info, Node: Environment, Next: Exit Status, Prev: Command Execution Environment, Up: Executing Commands
+
+3.7.4 Environment
+-----------------
+
+When a program is invoked it is given an array of strings called the
+ENVIRONMENT. This is a list of name-value pairs, of the form
+'name=value'.
+
+ Bash provides several ways to manipulate the environment. On
+invocation, the shell scans its own environment and creates a parameter
+for each name found, automatically marking it for EXPORT to child
+processes. Executed commands inherit the environment. The 'export' and
+'declare -x' commands allow parameters and functions to be added to and
+deleted from the environment. If the value of a parameter in the
+environment is modified, the new value becomes part of the environment,
+replacing the old. The environment inherited by any executed command
+consists of the shell's initial environment, whose values may be
+modified in the shell, less any pairs removed by the 'unset' and 'export
+-n' commands, plus any additions via the 'export' and 'declare -x'
+commands.
+
+ The environment for any simple command or function may be augmented
+temporarily by prefixing it with parameter assignments, as described in
+*note Shell Parameters::. These assignment statements affect only the
+environment seen by that command.
+
+ If the '-k' option is set (*note The Set Builtin::), then all
+parameter assignments are placed in the environment for a command, not
+just those that precede the command name.
+
+ When Bash invokes an external command, the variable '$_' is set to
+the full pathname of the command and passed to that command in its
+environment.
+
+
+File: bash.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: Executing Commands
+
+3.7.5 Exit Status
+-----------------
+
+The exit status of an executed command is the value returned by the
+WAITPID system call or equivalent function. Exit statuses fall between
+0 and 255, though, as explained below, the shell may use values above
+125 specially. Exit statuses from shell builtins and compound commands
+are also limited to this range. Under certain circumstances, the shell
+will use special values to indicate specific failure modes.
+
+ For the shell's purposes, a command which exits with a zero exit
+status has succeeded. A non-zero exit status indicates failure. This
+seemingly counter-intuitive scheme is used so there is one well-defined
+way to indicate success and a variety of ways to indicate various
+failure modes. When a command terminates on a fatal signal whose number
+is N, Bash uses the value 128+N as the exit status.
+
+ If a command is not found, the child process created to execute it
+returns a status of 127. If a command is found but is not executable,
+the return status is 126.
+
+ If a command fails because of an error during expansion or
+redirection, the exit status is greater than zero.
+
+ The exit status is used by the Bash conditional commands (*note
+Conditional Constructs::) and some of the list constructs (*note
+Lists::).
+
+ 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, generally invalid options or missing
+arguments.
+
+
+File: bash.info, Node: Signals, Prev: Exit Status, Up: Executing Commands
+
+3.7.6 Signals
+-------------
+
+When Bash is interactive, in the absence of any traps, it ignores
+'SIGTERM' (so that 'kill 0' does not kill an interactive shell), and
+'SIGINT' is caught and handled (so that the 'wait' builtin is
+interruptible). When Bash receives a 'SIGINT', it breaks out of any
+executing loops. In all cases, Bash ignores 'SIGQUIT'. If job control
+is in effect (*note Job Control::), Bash ignores 'SIGTTIN', 'SIGTTOU',
+and 'SIGTSTP'.
+
+ Non-builtin commands started by Bash have signal handlers set to the
+values inherited by the shell from its parent. When job control is not
+in effect, asynchronous commands ignore 'SIGINT' and 'SIGQUIT' in
+addition to these inherited handlers. Commands run as a result of
+command substitution ignore the keyboard-generated job control signals
+'SIGTTIN', 'SIGTTOU', and 'SIGTSTP'.
+
+ The shell exits by default upon receipt of a 'SIGHUP'. Before
+exiting, an interactive shell resends the 'SIGHUP' to all jobs, running
+or stopped. Stopped jobs are sent 'SIGCONT' to ensure that they receive
+the 'SIGHUP'. To prevent the shell from sending the 'SIGHUP' signal to
+a particular job, it should be removed from the jobs table with the
+'disown' builtin (*note Job Control Builtins::) or marked to not receive
+'SIGHUP' using 'disown -h'.
+
+ If the 'huponexit' shell option has been set with 'shopt' (*note The
+Shopt Builtin::), Bash sends a 'SIGHUP' to all jobs when an interactive
+login shell exits.
+
+ If Bash is waiting for a command to complete and receives a signal
+for which a trap has been set, the trap will not be executed until the
+command completes. When Bash is waiting for an asynchronous command via
+the 'wait' builtin, the reception of a signal for which a trap has been
+set will cause the 'wait' builtin to return immediately with an exit
+status greater than 128, immediately after which the trap is executed.
+
+
+File: bash.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features
+
+3.8 Shell Scripts
+=================
+
+A shell script is a text file containing shell commands. When such a
+file is used as the first non-option argument when invoking Bash, and
+neither the '-c' nor '-s' option is supplied (*note Invoking Bash::),
+Bash reads and executes commands from the file, then exits. This mode
+of operation creates a non-interactive shell. The shell first searches
+for the file in the current directory, and looks in the directories in
+'$PATH' if not found there.
+
+ When Bash runs a shell script, it sets the special parameter '0' to
+the name of the file, rather than the name of the shell, and the
+positional parameters are set to the remaining arguments, if any are
+given. If no additional arguments are supplied, the positional
+parameters are unset.
+
+ A shell script may be made executable by using the 'chmod' command to
+turn on the execute bit. When Bash finds such a file while searching
+the '$PATH' for a command, it spawns a subshell to execute it. In other
+words, executing
+ filename ARGUMENTS
+is equivalent to executing
+ bash filename ARGUMENTS
+
+if 'filename' is an executable shell script. This subshell
+reinitializes itself, so that the effect is as if a new shell had been
+invoked to interpret the script, with the exception that the locations
+of commands remembered by the parent (see the description of 'hash' in
+*note Bourne Shell Builtins::) are retained by the child.
+
+ Most versions of Unix make this a part of the operating system's
+command execution mechanism. If the first line of a script begins with
+the two characters '#!', the remainder of the line specifies an
+interpreter for the program. Thus, you can specify Bash, 'awk', Perl,
+or some other interpreter and write the rest of the script file in that
+language.
+
+ The arguments to the interpreter consist of a single optional
+argument following the interpreter name on the first line of the script
+file, followed by the name of the script file, followed by the rest of
+the arguments. Bash will perform this action on operating systems that
+do not handle it themselves. Note that some older versions of Unix
+limit the interpreter name and argument to a maximum of 32 characters.
+
+ Bash scripts often begin with '#! /bin/bash' (assuming that Bash has
+been installed in '/bin'), since this ensures that Bash will be used to
+interpret the script, even if it is executed under another shell.
+
+
+File: bash.info, Node: Shell Builtin Commands, Next: Shell Variables, Prev: Basic Shell Features, Up: Top
+
+4 Shell Builtin Commands
+************************
+
+* Menu:
+
+* Bourne Shell Builtins:: Builtin commands inherited from the Bourne
+ Shell.
+* Bash Builtins:: Table of builtins specific to Bash.
+* Modifying Shell Behavior:: Builtins to modify shell attributes and
+ optional behavior.
+* Special Builtins:: Builtin commands classified specially by
+ POSIX.
+
+Builtin commands are contained within the shell itself. When the name
+of a builtin command is used as the first word of a simple command
+(*note Simple Commands::), the shell executes the command directly,
+without invoking another program. Builtin commands are necessary to
+implement functionality impossible or inconvenient to obtain with
+separate utilities.
+
+ This section briefly describes the builtins which Bash inherits from
+the Bourne Shell, as well as the builtin commands which are unique to or
+have been extended in Bash.
+
+ Several builtin commands are described in other chapters: builtin
+commands which provide the Bash interface to the job control facilities
+(*note Job Control Builtins::), the directory stack (*note Directory
+Stack Builtins::), the command history (*note Bash History Builtins::),
+and the programmable completion facilities (*note Programmable
+Completion Builtins::).
+
+ Many of the builtins have been extended by POSIX or Bash.
+
+ Unless otherwise noted, each builtin command documented as accepting
+options preceded by '-' accepts '--' to signify the end of the options.
+The ':', 'true', 'false', and 'test'/'[' builtins do not accept options
+and do not treat '--' specially. The 'exit', 'logout', 'return',
+'break', 'continue', 'let', and 'shift' builtins accept and process
+arguments beginning with '-' without requiring '--'. Other builtins
+that accept arguments but are not specified as accepting options
+interpret arguments beginning with '-' as invalid options and require
+'--' to prevent this interpretation.
+
+
+File: bash.info, Node: Bourne Shell Builtins, Next: Bash Builtins, Up: Shell Builtin Commands
+
+4.1 Bourne Shell Builtins
+=========================
+
+The following shell builtin commands are inherited from the Bourne
+Shell. These commands are implemented as specified by the POSIX
+standard.
+
+': (a colon)'
+ : [ARGUMENTS]
+
+ Do nothing beyond expanding ARGUMENTS and performing redirections.
+ The return status is zero.
+
+'. (a period)'
+ . FILENAME [ARGUMENTS]
+
+ Read and execute commands from the FILENAME argument in the current
+ shell context. If FILENAME does not contain a slash, the 'PATH'
+ variable is used to find FILENAME. When Bash is not in POSIX mode,
+ the current directory is searched if FILENAME is not found in
+ '$PATH'. If any ARGUMENTS are supplied, they become the positional
+ parameters when FILENAME is executed. Otherwise the positional
+ parameters are unchanged. If the '-T' option is enabled, 'source'
+ inherits any trap on 'DEBUG'; if it is not, any 'DEBUG' trap string
+ is saved and restored around the call to 'source', and 'source'
+ unsets the 'DEBUG' trap while it executes. If '-T' is not set, and
+ the sourced file changes the 'DEBUG' trap, the new value is
+ retained when 'source' completes. The return status is the exit
+ status of the last command executed, or zero if no commands are
+ executed. If FILENAME is not found, or cannot be read, the return
+ status is non-zero. This builtin is equivalent to 'source'.
+
+'break'
+ break [N]
+
+ Exit from a 'for', 'while', 'until', or 'select' loop. If N is
+ supplied, the Nth enclosing loop is exited. N must be greater than
+ or equal to 1. The return status is zero unless N is not greater
+ than or equal to 1.
+
+'cd'
+ cd [-L|[-P [-e]] [-@] [DIRECTORY]
+
+ Change the current working directory to DIRECTORY. If DIRECTORY is
+ not supplied, the value of the 'HOME' shell variable is used. Any
+ additional arguments following DIRECTORY are ignored. If the shell
+ variable 'CDPATH' exists, it is used as a search path: each
+ directory name in 'CDPATH' is searched for DIRECTORY, with
+ alternative directory names in 'CDPATH' separated by a colon (':').
+ If DIRECTORY begins with a slash, 'CDPATH' is not used.
+
+ The '-P' option means to not follow symbolic links: symbolic links
+ are resolved while 'cd' is traversing DIRECTORY and before
+ processing an instance of '..' in DIRECTORY.
+
+ By default, or when the '-L' option is supplied, symbolic links in
+ DIRECTORY are resolved after 'cd' processes an instance of '..' in
+ DIRECTORY.
+
+ If '..' appears in DIRECTORY, it is processed by removing the
+ immediately preceding pathname component, back to a slash or the
+ beginning of DIRECTORY.
+
+ If the '-e' option is supplied with '-P' and the current working
+ directory cannot be successfully determined after a successful
+ directory change, 'cd' will return an unsuccessful status.
+
+ On systems that support it, the '-@' option presents the extended
+ attributes associated with a file as a directory.
+
+ If DIRECTORY is '-', it is converted to '$OLDPWD' before the
+ directory change is attempted.
+
+ If a non-empty directory name from 'CDPATH' is used, or if '-' is
+ the first argument, and the directory change is successful, the
+ absolute pathname of the new working directory is written to the
+ standard output.
+
+ The return status is zero if the directory is successfully changed,
+ non-zero otherwise.
+
+'continue'
+ continue [N]
+
+ Resume the next iteration of an enclosing 'for', 'while', 'until',
+ or 'select' loop. If N is supplied, the execution of the Nth
+ enclosing loop is resumed. N must be greater than or equal to 1.
+ The return status is zero unless N is not greater than or equal to
+ 1.
+
+'eval'
+ eval [ARGUMENTS]
+
+ 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 'eval'. If there are no arguments or only empty
+ arguments, the return status is zero.
+
+'exec'
+ exec [-cl] [-a NAME] [COMMAND [ARGUMENTS]]
+
+ If COMMAND is supplied, it replaces the shell without creating a
+ new process. If the '-l' option is supplied, the shell places a
+ dash at the beginning of the zeroth argument passed to COMMAND.
+ This is what the 'login' program does. The '-c' option causes
+ COMMAND to be executed with an empty environment. If '-a' is
+ supplied, the shell passes NAME as the zeroth argument to COMMAND.
+ If COMMAND cannot be executed for some reason, a non-interactive
+ shell exits, unless the 'execfail' shell option is enabled. In
+ that case, it returns failure. An interactive shell returns
+ failure if the file cannot be executed. A subshell exits
+ unconditionally if 'exec' fails. If no COMMAND is specified,
+ redirections may be used to affect the current shell environment.
+ If there are no redirection errors, the return status is zero;
+ otherwise the return status is non-zero.
+
+'exit'
+ exit [N]
+
+ Exit the shell, returning a status of N to the shell's parent. If
+ N is omitted, the exit status is that of the last command executed.
+ Any trap on 'EXIT' is executed before the shell terminates.
+
+'export'
+ export [-fn] [-p] [NAME[=VALUE]]
+
+ Mark each NAME to be passed to child processes in the environment.
+ If the '-f' option is supplied, the NAMEs refer to shell functions;
+ otherwise the names refer to shell variables. The '-n' option
+ means to no longer mark each NAME for export. If no NAMES are
+ supplied, or if the '-p' option is given, a list of names of all
+ exported variables is displayed. The '-p' option displays output
+ in a form that may be reused as input. If a variable name is
+ followed by =VALUE, the value of the variable is set to VALUE.
+
+ The return status is zero unless an invalid option is supplied, one
+ of the names is not a valid shell variable name, or '-f' is
+ supplied with a name that is not a shell function.
+
+'getopts'
+ getopts OPTSTRING NAME [ARGS]
+
+ 'getopts' is used by shell scripts to parse positional parameters.
+ OPTSTRING contains the option characters to be recognized; if a
+ character is followed by a colon, the option is expected to have an
+ argument, which should be separated from it by whitespace. The
+ colon (':') and question mark ('?') may not be used as option
+ characters. Each time it is invoked, 'getopts' places the next
+ option in the shell variable NAME, initializing NAME if it does not
+ exist, and the index of the next argument to be processed into the
+ variable 'OPTIND'. 'OPTIND' is initialized to 1 each time the
+ shell or a shell script is invoked. When an option requires an
+ argument, 'getopts' places that argument into the variable
+ 'OPTARG'. The shell does not reset 'OPTIND' automatically; it must
+ be manually reset between multiple calls to 'getopts' within the
+ same shell invocation if a new set of parameters is to be used.
+
+ When the end of options is encountered, 'getopts' exits with a
+ return value greater than zero. 'OPTIND' is set to the index of
+ the first non-option argument, and NAME is set to '?'.
+
+ 'getopts' normally parses the positional parameters, but if more
+ arguments are given in ARGS, 'getopts' parses those instead.
+
+ 'getopts' can report errors in two ways. If the first character of
+ OPTSTRING is a colon, SILENT error reporting is used. In normal
+ operation, diagnostic messages are printed when invalid options or
+ missing option arguments are encountered. If the variable 'OPTERR'
+ is set to 0, no error messages will be displayed, even if the first
+ character of 'optstring' is not a colon.
+
+ If an invalid option is seen, 'getopts' places '?' into NAME and,
+ if not silent, prints an error message and unsets 'OPTARG'. If
+ 'getopts' is silent, the option character found is placed in
+ 'OPTARG' and no diagnostic message is printed.
+
+ If a required argument is not found, and 'getopts' is not silent, a
+ question mark ('?') is placed in NAME, 'OPTARG' is unset, and a
+ diagnostic message is printed. If 'getopts' is silent, then a
+ colon (':') is placed in NAME and 'OPTARG' is set to the option
+ character found.
+
+'hash'
+ hash [-r] [-p FILENAME] [-dt] [NAME]
+
+ Each time 'hash' is invoked, it remembers the full pathnames of the
+ commands specified as NAME arguments, so they need not be searched
+ for on subsequent invocations. The commands are found by searching
+ through the directories listed in '$PATH'. Any
+ previously-remembered pathname is discarded. The '-p' option
+ inhibits the path search, and FILENAME is used as the location of
+ NAME. The '-r' option causes the shell to forget all remembered
+ locations. The '-d' option causes the shell to forget the
+ remembered location of each NAME. If the '-t' option is supplied,
+ the full pathname to which each NAME corresponds is printed. If
+ multiple NAME arguments are supplied with '-t', the NAME is printed
+ before the hashed full pathname. The '-l' option causes output to
+ be displayed in a format that may be reused as input. If no
+ arguments are given, or if only '-l' is supplied, information about
+ remembered commands is printed. The return status is zero unless a
+ NAME is not found or an invalid option is supplied.
+
+'pwd'
+ pwd [-LP]
+
+ Print the absolute pathname of the current working directory. If
+ the '-P' option is supplied, the pathname printed will not contain
+ symbolic links. If the '-L' 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.
+
+'readonly'
+ readonly [-aAf] [-p] [NAME[=VALUE]] ...
+
+ Mark each NAME as readonly. The values of these names may not be
+ changed by subsequent assignment. If the '-f' option is supplied,
+ each NAME refers to a shell function. The '-a' option means each
+ NAME refers to an indexed array variable; the '-A' option means
+ each NAME refers to an associative array variable. If both options
+ are supplied, '-A' takes precedence. If no NAME arguments are
+ given, or if the '-p' option is supplied, a list of all readonly
+ names is printed. The other options may be used to restrict the
+ output to a subset of the set of readonly names. The '-p' option
+ causes output to be displayed in a format that may be reused as
+ input. If a variable name is followed by =VALUE, the value of the
+ variable is set to VALUE. The return status is zero unless an
+ invalid option is supplied, one of the NAME arguments is not a
+ valid shell variable or function name, or the '-f' option is
+ supplied with a name that is not a shell function.
+
+'return'
+ return [N]
+
+ Cause a shell function to stop executing and return the value N to
+ its caller. If N is not supplied, the return value is the exit
+ status of the last command executed in the function. If 'return'
+ is executed by a trap handler, the last command used to determine
+ the status is the last command executed before the trap handler.
+ If 'return' is executed during a 'DEBUG' trap, the last command
+ used to determine the status is the last command executed by the
+ trap handler before 'return' was invoked. 'return' may also be
+ used to terminate execution of a script being executed with the '.'
+ ('source') builtin, returning either N or the exit status of the
+ last command executed within the script as the exit status of the
+ script. If N is supplied, the return value is its least
+ significant 8 bits. Any command associated with the 'RETURN' trap
+ is executed before execution resumes after the function or script.
+ The return status is non-zero if 'return' is supplied a non-numeric
+ argument or is used outside a function and not during the execution
+ of a script by '.' or 'source'.
+
+'shift'
+ shift [N]
+
+ Shift the positional parameters to the left by N. The positional
+ parameters from N+1 ... '$#' are renamed to '$1' ... '$#'-N.
+ Parameters represented by the numbers '$#' to '$#'-N+1 are unset.
+ N must be a non-negative number less than or equal to '$#'. If N
+ is zero or greater than '$#', the positional parameters are not
+ changed. If N is not supplied, it is assumed to be 1. The return
+ status is zero unless N is greater than '$#' or less than zero,
+ non-zero otherwise.
+
+'test'
+'['
+ test EXPR
+
+ Evaluate a conditional expression EXPR and return a status of 0
+ (true) or 1 (false). Each operator and operand must be a separate
+ argument. Expressions are composed of the primaries described
+ below in *note Bash Conditional Expressions::. 'test' does not
+ accept any options, nor does it accept and ignore an argument of
+ '--' as signifying the end of options.
+
+ When the '[' form is used, the last argument to the command must be
+ a ']'.
+
+ Expressions may be combined using the following operators, listed
+ in decreasing order of precedence. The evaluation depends on the
+ number of arguments; see below. Operator precedence is used when
+ there are five or more arguments.
+
+ '! EXPR'
+ True if EXPR is false.
+
+ '( EXPR )'
+ Returns the value of EXPR. This may be used to override the
+ normal precedence of operators.
+
+ 'EXPR1 -a EXPR2'
+ True if both EXPR1 and EXPR2 are true.
+
+ 'EXPR1 -o EXPR2'
+ True if either EXPR1 or EXPR2 is true.
+
+ The 'test' and '[' builtins evaluate conditional expressions using
+ a set of rules based on the number of arguments.
+
+ 0 arguments
+ The expression is false.
+
+ 1 argument
+ The expression is true if, and only if, the argument is not
+ null.
+
+ 2 arguments
+ If the first argument is '!', the expression is true if and
+ only if the second argument is null. If the first argument is
+ one of the unary conditional operators (*note Bash Conditional
+ Expressions::), the expression is true if the unary test is
+ true. If the first argument is not a valid unary operator,
+ the expression is false.
+
+ 3 arguments
+ The following conditions are applied in the order listed.
+
+ 1. If the second argument is one of the binary conditional
+ operators (*note Bash Conditional Expressions::), the
+ result of the expression is the result of the binary test
+ using the first and third arguments as operands. The
+ '-a' and '-o' operators are considered binary operators
+ when there are three arguments.
+ 2. If the first argument is '!', the value is the negation
+ of the two-argument test using the second and third
+ arguments.
+ 3. If the first argument is exactly '(' and the third
+ argument is exactly ')', the result is the one-argument
+ test of the second argument.
+ 4. Otherwise, the expression is false.
+
+ 4 arguments
+ If the first argument is '!', 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.
+
+ 5 or more arguments
+ The expression is parsed and evaluated according to precedence
+ using the rules listed above.
+
+ When used with 'test' or '[', the '<' and '>' operators sort
+ lexicographically using ASCII ordering.
+
+'times'
+ times
+
+ Print out the user and system times used by the shell and its
+ children. The return status is zero.
+
+'trap'
+ trap [-lp] [ARG] [SIGSPEC ...]
+
+ The commands in ARG are to be read and executed when the shell
+ receives signal SIGSPEC. If ARG is absent (and there is a single
+ SIGSPEC) or equal to '-', each specified signal's disposition is
+ reset to the value it had when the shell was started. If ARG is
+ the null string, then the signal specified by each SIGSPEC is
+ ignored by the shell and commands it invokes. If ARG is not
+ present and '-p' has been supplied, the shell displays the trap
+ commands associated with each SIGSPEC. If no arguments are
+ supplied, or only '-p' is given, 'trap' prints the list of commands
+ associated with each signal number in a form that may be reused as
+ shell input. The '-l' option causes the shell to print a list of
+ signal names and their corresponding numbers. Each SIGSPEC is
+ either a signal name or a signal number. Signal names are case
+ insensitive and the 'SIG' prefix is optional.
+
+ If a SIGSPEC is '0' or 'EXIT', ARG is executed when the shell
+ exits. If a SIGSPEC is 'DEBUG', the command ARG is executed before
+ every simple command, 'for' command, 'case' command, 'select'
+ command, every arithmetic 'for' command, and before the first
+ command executes in a shell function. Refer to the description of
+ the 'extdebug' option to the 'shopt' builtin (*note The Shopt
+ Builtin::) for details of its effect on the 'DEBUG' trap. If a
+ SIGSPEC is 'RETURN', the command ARG is executed each time a shell
+ function or a script executed with the '.' or 'source' builtins
+ finishes executing.
+
+ If a SIGSPEC is 'ERR', the command ARG is executed whenever a
+ pipeline (which may consist of a single simple command), a list, or
+ a compound command returns a non-zero exit status, subject to the
+ following conditions. The 'ERR' trap is not executed if the failed
+ command is part of the command list immediately following an
+ 'until' or 'while' keyword, part of the test following the 'if' or
+ 'elif' reserved words, part of a command executed in a '&&' or '||'
+ list except the command following the final '&&' or '||', any
+ command in a pipeline but the last, or if the command's return
+ status is being inverted using '!'. These are the same conditions
+ obeyed by the 'errexit' ('-e') option.
+
+ Signals ignored upon entry to the shell cannot be trapped or reset.
+ Trapped signals that are not being ignored are reset to their
+ original values in a subshell or subshell environment when one is
+ created.
+
+ The return status is zero unless a SIGSPEC does not specify a valid
+ signal.
+
+'umask'
+ umask [-p] [-S] [MODE]
+
+ Set the shell process's file creation mask to MODE. If MODE 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
+ 'chmod' command. If MODE is omitted, the current value of the mask
+ is printed. If the '-S' option is supplied without a MODE
+ argument, the mask is printed in a symbolic format. If the '-p'
+ option is supplied, and MODE is omitted, the output is in a form
+ that may be reused as input. The return status is zero if the mode
+ is successfully changed or if no MODE argument is supplied, and
+ non-zero otherwise.
+
+ Note that when the mode is interpreted as an octal number, each
+ number of the umask is subtracted from '7'. Thus, a umask of '022'
+ results in permissions of '755'.
+
+'unset'
+ unset [-fnv] [NAME]
+
+ Remove each variable or function NAME. If the '-v' option is
+ given, each NAME refers to a shell variable and that variable is
+ removed. If the '-f' option is given, the NAMEs refer to shell
+ functions, and the function definition is removed. If the '-n'
+ option is supplied, and NAME is a variable with the NAMEREF
+ attribute, NAME will be unset rather than the variable it
+ references. '-n' has no effect if the '-f' option is supplied. If
+ no options are supplied, each NAME refers to a variable; if there
+ is no variable by that name, any function with that name is unset.
+ Readonly variables and functions may not be unset. The return
+ status is zero unless a NAME is readonly.
+
+
+File: bash.info, Node: Bash Builtins, Next: Modifying Shell Behavior, Prev: Bourne Shell Builtins, Up: Shell Builtin Commands
+
+4.2 Bash Builtin Commands
+=========================
+
+This section describes builtin commands which are unique to or have been
+extended in Bash. Some of these commands are specified in the POSIX
+standard.
+
+'alias'
+ alias [-p] [NAME[=VALUE] ...]
+
+ Without arguments or with the '-p' option, 'alias' prints the list
+ of aliases on the standard output in a form that allows them to be
+ reused as input. If arguments are supplied, an alias is defined
+ for each NAME whose VALUE is given. If no VALUE is given, the name
+ and value of the alias is printed. Aliases are described in *note
+ Aliases::.
+
+'bind'
+ bind [-m KEYMAP] [-lpsvPSVX]
+ bind [-m KEYMAP] [-q FUNCTION] [-u FUNCTION] [-r KEYSEQ]
+ bind [-m KEYMAP] -f FILENAME
+ bind [-m KEYMAP] -x KEYSEQ:SHELL-COMMAND
+ bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME
+ bind [-m KEYMAP] KEYSEQ:READLINE-COMMAND
+
+ Display current Readline (*note Command Line Editing::) key and
+ function bindings, bind a key sequence to a Readline function or
+ macro, or set a Readline variable. Each non-option argument is a
+ command as it would appear in a Readline initialization file (*note
+ Readline Init File::), but each binding or command must be passed
+ as a separate argument; e.g., '"\C-x\C-r":re-read-init-file'.
+
+ Options, if supplied, have the following meanings:
+
+ '-m KEYMAP'
+ Use KEYMAP as the keymap to be affected by the subsequent
+ bindings. Acceptable KEYMAP names are 'emacs',
+ 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move',
+ 'vi-command', and 'vi-insert'. 'vi' is equivalent to
+ 'vi-command' ('vi-move' is also a synonym); 'emacs' is
+ equivalent to 'emacs-standard'.
+
+ '-l'
+ List the names of all Readline functions.
+
+ '-p'
+ Display Readline function names and bindings in such a way
+ that they can be used as input or in a Readline initialization
+ file.
+
+ '-P'
+ List current Readline function names and bindings.
+
+ '-v'
+ Display Readline variable names and values in such a way that
+ they can be used as input or in a Readline initialization
+ file.
+
+ '-V'
+ List current Readline variable names and values.
+
+ '-s'
+ 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.
+
+ '-S'
+ Display Readline key sequences bound to macros and the strings
+ they output.
+
+ '-f FILENAME'
+ Read key bindings from FILENAME.
+
+ '-q FUNCTION'
+ Query about which keys invoke the named FUNCTION.
+
+ '-u FUNCTION'
+ Unbind all keys bound to the named FUNCTION.
+
+ '-r KEYSEQ'
+ Remove any current binding for KEYSEQ.
+
+ '-x KEYSEQ:SHELL-COMMAND'
+ Cause SHELL-COMMAND to be executed whenever KEYSEQ is entered.
+ When SHELL-COMMAND is executed, the shell sets the
+ 'READLINE_LINE' variable to the contents of the Readline line
+ buffer and the 'READLINE_POINT' variable to the current
+ location of the insertion point. If the executed command
+ changes the value of 'READLINE_LINE' or 'READLINE_POINT',
+ those new values will be reflected in the editing state.
+
+ '-X'
+ List all key sequences bound to shell commands and the
+ associated commands in a format that can be reused as input.
+
+ The return status is zero unless an invalid option is supplied or
+ an error occurs.
+
+'builtin'
+ builtin [SHELL-BUILTIN [ARGS]]
+
+ Run a shell builtin, passing it ARGS, 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 SHELL-BUILTIN is
+ not a shell builtin command.
+
+'caller'
+ caller [EXPR]
+
+ Returns the context of any active subroutine call (a shell function
+ or a script executed with the '.' or 'source' builtins).
+
+ Without EXPR, 'caller' displays the line number and source filename
+ of the current subroutine call. If a non-negative integer is
+ supplied as EXPR, 'caller' displays the line number, subroutine
+ name, and source file corresponding to that position in the current
+ execution call stack. This extra information may be used, for
+ example, to print a stack trace. The current frame is frame 0.
+
+ The return value is 0 unless the shell is not executing a
+ subroutine call or EXPR does not correspond to a valid position in
+ the call stack.
+
+'command'
+ command [-pVv] COMMAND [ARGUMENTS ...]
+
+ Runs COMMAND with ARGUMENTS ignoring any shell function named
+ COMMAND. Only shell builtin commands or commands found by
+ searching the 'PATH' are executed. If there is a shell function
+ named 'ls', running 'command ls' within the function will execute
+ the external command 'ls' instead of calling the function
+ recursively. The '-p' option means to use a default value for
+ 'PATH' that is guaranteed to find all of the standard utilities.
+ The return status in this case is 127 if COMMAND cannot be found or
+ an error occurred, and the exit status of COMMAND otherwise.
+
+ If either the '-V' or '-v' option is supplied, a description of
+ COMMAND is printed. The '-v' option causes a single word
+ indicating the command or file name used to invoke COMMAND to be
+ displayed; the '-V' option produces a more verbose description. In
+ this case, the return status is zero if COMMAND is found, and
+ non-zero if not.
+
+'declare'
+ declare [-aAfFgilnrtux] [-p] [NAME[=VALUE] ...]
+
+ Declare variables and give them attributes. If no NAMEs are given,
+ then display the values of variables instead.
+
+ The '-p' option will display the attributes and values of each
+ NAME. When '-p' is used with NAME arguments, additional options,
+ other than '-f' and '-F', are ignored.
+
+ When '-p' is supplied without NAME arguments, 'declare' will
+ display the attributes and values of all variables having the
+ attributes specified by the additional options. If no other
+ options are supplied with '-p', 'declare' will display the
+ attributes and values of all shell variables. The '-f' option will
+ restrict the display to shell functions.
+
+ The '-F' option inhibits the display of function definitions; only
+ the function name and attributes are printed. If the 'extdebug'
+ shell option is enabled using 'shopt' (*note The Shopt Builtin::),
+ the source file name and line number where each NAME is defined are
+ displayed as well. '-F' implies '-f'.
+
+ The '-g' option forces variables to be created or modified at the
+ global scope, even when 'declare' is executed in a shell function.
+ It is ignored in all other cases.
+
+ The following options can be used to restrict output to variables
+ with the specified attributes or to give variables attributes:
+
+ '-a'
+ Each NAME is an indexed array variable (*note Arrays::).
+
+ '-A'
+ Each NAME is an associative array variable (*note Arrays::).
+
+ '-f'
+ Use function names only.
+
+ '-i'
+ The variable is to be treated as an integer; arithmetic
+ evaluation (*note Shell Arithmetic::) is performed when the
+ variable is assigned a value.
+
+ '-l'
+ When the variable is assigned a value, all upper-case
+ characters are converted to lower-case. The upper-case
+ attribute is disabled.
+
+ '-n'
+ Give each NAME the NAMEREF attribute, making it a name
+ reference to another variable. That other variable is defined
+ by the value of NAME. All references, assignments, and
+ attribute modifications to NAME, except for those using or
+ changing the '-n' attribute itself, are performed on the
+ variable referenced by NAME's value. The nameref attribute
+ cannot be applied to array variables.
+
+ '-r'
+ Make NAMEs readonly. These names cannot then be assigned
+ values by subsequent assignment statements or unset.
+
+ '-t'
+ Give each NAME the 'trace' attribute. Traced functions
+ inherit the 'DEBUG' and 'RETURN' traps from the calling shell.
+ The trace attribute has no special meaning for variables.
+
+ '-u'
+ When the variable is assigned a value, all lower-case
+ characters are converted to upper-case. The lower-case
+ attribute is disabled.
+
+ '-x'
+ Mark each NAME for export to subsequent commands via the
+ environment.
+
+ Using '+' instead of '-' turns off the attribute instead, with the
+ exceptions that '+a' and '+A' may not be used to destroy array
+ variables and '+r' will not remove the readonly attribute. When
+ used in a function, 'declare' makes each NAME local, as with the
+ 'local' command, unless the '-g' option is used. If a variable
+ name is followed by =VALUE, the value of the variable is set to
+ VALUE.
+
+ When using '-a' or '-A' and the compound assignment syntax to
+ create array variables, additional attributes do not take effect
+ until subsequent assignments.
+
+ The return status is zero unless an invalid option is encountered,
+ an attempt is made to define a function using '-f foo=bar', an
+ attempt is made to assign a value to a readonly variable, an
+ attempt is made to assign a value to an array variable without
+ using the compound assignment syntax (*note Arrays::), one of the
+ NAMES is not a valid shell variable name, an attempt is made to
+ turn off readonly status for a readonly variable, an attempt is
+ made to turn off array status for an array variable, or an attempt
+ is made to display a non-existent function with '-f'.
+
+'echo'
+ echo [-neE] [ARG ...]
+
+ Output the ARGs, separated by spaces, terminated with a newline.
+ The return status is 0 unless a write error occurs. If '-n' is
+ specified, the trailing newline is suppressed. If the '-e' option
+ is given, interpretation of the following backslash-escaped
+ characters is enabled. The '-E' option disables the interpretation
+ of these escape characters, even on systems where they are
+ interpreted by default. The 'xpg_echo' shell option may be used to
+ dynamically determine whether or not 'echo' expands these escape
+ characters by default. 'echo' does not interpret '--' to mean the
+ end of options.
+
+ 'echo' interprets the following escape sequences:
+ '\a'
+ alert (bell)
+ '\b'
+ backspace
+ '\c'
+ suppress further output
+ '\e'
+ '\E'
+ escape
+ '\f'
+ form feed
+ '\n'
+ new line
+ '\r'
+ carriage return
+ '\t'
+ horizontal tab
+ '\v'
+ vertical tab
+ '\\'
+ backslash
+ '\0NNN'
+ the eight-bit character whose value is the octal value NNN
+ (zero to three octal digits)
+ '\xHH'
+ the eight-bit character whose value is the hexadecimal value
+ HH (one or two hex digits)
+ '\uHHHH'
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value HHHH (one to four hex digits)
+ '\UHHHHHHHH'
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value HHHHHHHH (one to eight hex digits)
+
+'enable'
+ enable [-a] [-dnps] [-f FILENAME] [NAME ...]
+
+ 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 '-n'
+ is used, the NAMEs become disabled. Otherwise NAMEs are enabled.
+ For example, to use the 'test' binary found via '$PATH' instead of
+ the shell builtin version, type 'enable -n test'.
+
+ If the '-p' option is supplied, or no NAME arguments appear, a list
+ of shell builtins is printed. With no other arguments, the list
+ consists of all enabled shell builtins. The '-a' option means to
+ list each builtin with an indication of whether or not it is
+ enabled.
+
+ The '-f' option means to load the new builtin command NAME from
+ shared object FILENAME, on systems that support dynamic loading.
+ The '-d' option will delete a builtin loaded with '-f'.
+
+ If there are no options, a list of the shell builtins is displayed.
+ The '-s' option restricts 'enable' to the POSIX special builtins.
+ If '-s' is used with '-f', the new builtin becomes a special
+ builtin (*note Special Builtins::).
+
+ The return status is zero unless a NAME is not a shell builtin or
+ there is an error loading a new builtin from a shared object.
+
+'help'
+ help [-dms] [PATTERN]
+
+ Display helpful information about builtin commands. If PATTERN is
+ specified, 'help' gives detailed help on all commands matching
+ PATTERN, otherwise a list of the builtins is printed.
+
+ Options, if supplied, have the following meanings:
+
+ '-d'
+ Display a short description of each PATTERN
+ '-m'
+ Display the description of each PATTERN in a manpage-like
+ format
+ '-s'
+ Display only a short usage synopsis for each PATTERN
+
+ The return status is zero unless no command matches PATTERN.
+
+'let'
+ let EXPRESSION [EXPRESSION ...]
+
+ The 'let' builtin allows arithmetic to be performed on shell
+ variables. Each EXPRESSION is evaluated according to the rules
+ given below in *note Shell Arithmetic::. If the last EXPRESSION
+ evaluates to 0, 'let' returns 1; otherwise 0 is returned.
+
+'local'
+ local [OPTION] NAME[=VALUE] ...
+
+ For each argument, a local variable named NAME is created, and
+ assigned VALUE. The OPTION can be any of the options accepted by
+ 'declare'. 'local' can only be used within a function; it makes
+ the variable NAME have a visible scope restricted to that function
+ and its children. If NAME is '-', the set of shell options is made
+ local to the function in which 'local' is invoked: shell options
+ changed using the 'set' builtin inside the function are restored to
+ their original values when the function returns. The return status
+ is zero unless 'local' is used outside a function, an invalid NAME
+ is supplied, or NAME is a readonly variable.
+
+'logout'
+ logout [N]
+
+ Exit a login shell, returning a status of N to the shell's parent.
+
+'mapfile'
+ mapfile [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT]
+ [-t] [-u FD] [-C CALLBACK] [-c QUANTUM] [ARRAY]
+
+ Read lines from the standard input into the indexed array variable
+ ARRAY, or from file descriptor FD if the '-u' option is supplied.
+ The variable 'MAPFILE' is the default ARRAY. Options, if supplied,
+ have the following meanings:
+
+ '-d'
+ The first character of DELIM is used to terminate each input
+ line, rather than newline. If DELIM is the empty string,
+ 'mapfile' will terminate a line when it reads a NUL character.
+ '-n'
+ Copy at most COUNT lines. If COUNT is 0, all lines are
+ copied.
+ '-O'
+ Begin assigning to ARRAY at index ORIGIN. The default index
+ is 0.
+ '-s'
+ Discard the first COUNT lines read.
+ '-t'
+ Remove a trailing DELIM (default newline) from each line read.
+ '-u'
+ Read lines from file descriptor FD instead of the standard
+ input.
+ '-C'
+ Evaluate CALLBACK each time QUANTUM lines are read. The '-c'
+ option specifies QUANTUM.
+ '-c'
+ Specify the number of lines read between each call to
+ CALLBACK.
+
+ If '-C' is specified without '-c', the default quantum is 5000.
+ When CALLBACK is evaluated, it is supplied the index of the next
+ array element to be assigned and the line to be assigned to that
+ element as additional arguments. CALLBACK is evaluated after the
+ line is read but before the array element is assigned.
+
+ If not supplied with an explicit origin, 'mapfile' will clear ARRAY
+ before assigning to it.
+
+ 'mapfile' returns successfully unless an invalid option or option
+ argument is supplied, ARRAY is invalid or unassignable, or ARRAY is
+ not an indexed array.
+
+'printf'
+ printf [-v VAR] FORMAT [ARGUMENTS]
+
+ Write the formatted ARGUMENTS to the standard output under the
+ control of the FORMAT. The '-v' option causes the output to be
+ assigned to the variable VAR rather than being printed to the
+ standard output.
+
+ The FORMAT 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 ARGUMENT. In addition to
+ the standard 'printf(1)' formats, 'printf' interprets the following
+ extensions:
+
+ '%b'
+ Causes 'printf' to expand backslash escape sequences in the
+ corresponding ARGUMENT in the same way as 'echo -e' (*note
+ Bash Builtins::).
+ '%q'
+ Causes 'printf' to output the corresponding ARGUMENT in a
+ format that can be reused as shell input.
+ '%(DATEFMT)T'
+ Causes 'printf' to output the date-time string resulting from
+ using DATEFMT as a format string for 'strftime'(3). The
+ corresponding ARGUMENT is an integer representing the number
+ of seconds since the epoch. Two special argument values may
+ be used: -1 represents the current time, and -2 represents the
+ time the shell was invoked. If no argument is specified,
+ conversion behaves as if -1 had been given. This is an
+ exception to the usual 'printf' behavior.
+
+ Arguments to non-string format specifiers are treated as C language
+ constants, except that a leading plus or minus sign is allowed, and
+ if the leading character is a single or double quote, the value is
+ the ASCII value of the following character.
+
+ The FORMAT is reused as necessary to consume all of the ARGUMENTS.
+ If the FORMAT requires more ARGUMENTS than are supplied, the extra
+ format specifications behave as if a zero value or null string, as
+ appropriate, had been supplied. The return value is zero on
+ success, non-zero on failure.
+
+'read'
+ read [-ers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS]
+ [-N NCHARS] [-p PROMPT] [-t TIMEOUT] [-u FD] [NAME ...]
+
+ One line is read from the standard input, or from the file
+ descriptor FD supplied as an argument to the '-u' option, split
+ into words as described above in *note Word Splitting::, and the
+ first word is assigned to the first NAME, the second word to the
+ second NAME, and so on. If there are more words than names, the
+ remaining words and their intervening delimiters are assigned to
+ the last NAME. 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 'IFS' variable are used to split the
+ line into words using the same rules the shell uses for expansion
+ (described above in *note Word Splitting::). The backslash
+ character '\' may be used to remove any special meaning for the
+ next character read and for line continuation. If no names are
+ supplied, the line read is assigned to the variable 'REPLY'. The
+ exit status is zero, unless end-of-file is encountered, 'read'
+ times out (in which case the status is greater than 128), a
+ variable assignment error (such as assigning to a readonly
+ variable) occurs, or an invalid file descriptor is supplied as the
+ argument to '-u'.
+
+ Options, if supplied, have the following meanings:
+
+ '-a ANAME'
+ The words are assigned to sequential indices of the array
+ variable ANAME, starting at 0. All elements are removed from
+ ANAME before the assignment. Other NAME arguments are
+ ignored.
+
+ '-d DELIM'
+ The first character of DELIM is used to terminate the input
+ line, rather than newline. If DELIM is the empty string,
+ 'read' will terminate a line when it reads a NUL character.
+
+ '-e'
+ Readline (*note Command Line Editing::) is used to obtain the
+ line. Readline uses the current (or default, if line editing
+ was not previously active) editing settings, but uses
+ Readline's default filename completion.
+
+ '-i TEXT'
+ If Readline is being used to read the line, TEXT is placed
+ into the editing buffer before editing begins.
+
+ '-n NCHARS'
+ 'read' returns after reading NCHARS characters rather than
+ waiting for a complete line of input, but honors a delimiter
+ if fewer than NCHARS characters are read before the delimiter.
+
+ '-N NCHARS'
+ 'read' returns after reading exactly NCHARS characters rather
+ than waiting for a complete line of input, unless EOF is
+ encountered or 'read' times out. Delimiter characters
+ encountered in the input are not treated specially and do not
+ cause 'read' to return until NCHARS characters are read. The
+ result is not split on the characters in 'IFS'; the intent is
+ that the variable is assigned exactly the characters read
+ (with the exception of backslash; see the '-r' option below).
+
+ '-p PROMPT'
+ Display PROMPT, without a trailing newline, before attempting
+ to read any input. The prompt is displayed only if input is
+ coming from a terminal.
+
+ '-r'
+ 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 then be
+ used as a line continuation.
+
+ '-s'
+ Silent mode. If input is coming from a terminal, characters
+ are not echoed.
+
+ '-t TIMEOUT'
+ Cause 'read' to time out and return failure if a complete line
+ of input (or a specified number of characters) is not read
+ within TIMEOUT seconds. TIMEOUT may be a decimal number with
+ a fractional portion following the decimal point. This option
+ is only effective if 'read' is reading input from a terminal,
+ pipe, or other special file; it has no effect when reading
+ from regular files. If 'read' times out, 'read' saves any
+ partial input read into the specified variable NAME. If
+ TIMEOUT is 0, 'read' returns immediately, without trying to
+ read and data. The exit status is 0 if input is available on
+ the specified file descriptor, non-zero otherwise. The exit
+ status is greater than 128 if the timeout is exceeded.
+
+ '-u FD'
+ Read input from file descriptor FD.
+
+'readarray'
+ readarray [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT]
+ [-t] [-u FD] [-C CALLBACK] [-c QUANTUM] [ARRAY]
+
+ Read lines from the standard input into the indexed array variable
+ ARRAY, or from file descriptor FD if the '-u' option is supplied.
+
+ A synonym for 'mapfile'.
+
+'source'
+ source FILENAME
+
+ A synonym for '.' (*note Bourne Shell Builtins::).
+
+'type'
+ type [-afptP] [NAME ...]
+
+ For each NAME, indicate how it would be interpreted if used as a
+ command name.
+
+ If the '-t' option is used, 'type' prints a single word which is
+ one of 'alias', 'function', 'builtin', 'file' or 'keyword', if NAME
+ is an alias, shell function, shell builtin, disk file, or shell
+ reserved word, respectively. If the NAME is not found, then
+ nothing is printed, and 'type' returns a failure status.
+
+ If the '-p' option is used, 'type' either returns the name of the
+ disk file that would be executed, or nothing if '-t' would not
+ return 'file'.
+
+ The '-P' option forces a path search for each NAME, even if '-t'
+ would not return 'file'.
+
+ If a command is hashed, '-p' and '-P' print the hashed value, which
+ is not necessarily the file that appears first in '$PATH'.
+
+ If the '-a' option is used, 'type' returns all of the places that
+ contain an executable named FILE. This includes aliases and
+ functions, if and only if the '-p' option is not also used.
+
+ If the '-f' option is used, 'type' does not attempt to find shell
+ functions, as with the 'command' builtin.
+
+ The return status is zero if all of the NAMES are found, non-zero
+ if any are not found.
+
+'typeset'
+ typeset [-afFgrxilnrtux] [-p] [NAME[=VALUE] ...]
+
+ The 'typeset' command is supplied for compatibility with the Korn
+ shell. It is a synonym for the 'declare' builtin command.
+
+'ulimit'
+ ulimit [-HSabcdefiklmnpqrstuvxPT] [LIMIT]
+
+ 'ulimit' provides control over the resources available to processes
+ started by the shell, on systems that allow such control. If an
+ option is given, it is interpreted as follows:
+
+ '-S'
+ Change and report the soft limit associated with a resource.
+
+ '-H'
+ Change and report the hard limit associated with a resource.
+
+ '-a'
+ All current limits are reported.
+
+ '-b'
+ The maximum socket buffer size.
+
+ '-c'
+ The maximum size of core files created.
+
+ '-d'
+ The maximum size of a process's data segment.
+
+ '-e'
+ The maximum scheduling priority ("nice").
+
+ '-f'
+ The maximum size of files written by the shell and its
+ children.
+
+ '-i'
+ The maximum number of pending signals.
+
+ '-k'
+ The maximum number of kqueues that may be allocated.
+
+ '-l'
+ The maximum size that may be locked into memory.
+
+ '-m'
+ The maximum resident set size (many systems do not honor this
+ limit).
+
+ '-n'
+ The maximum number of open file descriptors (most systems do
+ not allow this value to be set).
+
+ '-p'
+ The pipe buffer size.
+
+ '-q'
+ The maximum number of bytes in POSIX message queues.
+
+ '-r'
+ The maximum real-time scheduling priority.
+
+ '-s'
+ The maximum stack size.
+
+ '-t'
+ The maximum amount of cpu time in seconds.
+
+ '-u'
+ The maximum number of processes available to a single user.
+
+ '-v'
+ The maximum amount of virtual memory available to the shell,
+ and, on some systems, to its children.
+
+ '-x'
+ The maximum number of file locks.
+
+ '-P'
+ The maximum number of pseudoterminals.
+
+ '-T'
+ The maximum number of threads.
+
+ If LIMIT is given, and the '-a' option is not used, LIMIT is the
+ new value of the specified resource. The special LIMIT values
+ 'hard', 'soft', and 'unlimited' stand for the current hard limit,
+ the current soft limit, and no limit, respectively. A hard limit
+ cannot be increased by a non-root user once it is set; a soft limit
+ may be increased up to the value of the hard limit. Otherwise, the
+ current value of the soft limit for the specified resource is
+ printed, unless the '-H' option is supplied. When setting new
+ limits, if neither '-H' nor '-S' is supplied, both the hard and
+ soft limits are set. If no option is given, then '-f' is assumed.
+ Values are in 1024-byte increments, except for '-t', which is in
+ seconds; '-p', which is in units of 512-byte blocks; '-P', '-T',
+ '-b', '-k', '-n' and '-u', which are unscaled values; and, when in
+ POSIX Mode (*note Bash POSIX Mode::), '-c' and '-f', which are in
+ 512-byte increments.
+
+ The return status is zero unless an invalid option or argument is
+ supplied, or an error occurs while setting a new limit.
+
+'unalias'
+ unalias [-a] [NAME ... ]
+
+ Remove each NAME from the list of aliases. If '-a' is supplied,
+ all aliases are removed. Aliases are described in *note Aliases::.
+
+
+File: bash.info, Node: Modifying Shell Behavior, Next: Special Builtins, Prev: Bash Builtins, Up: Shell Builtin Commands
+
+4.3 Modifying Shell Behavior
+============================
+
+* Menu:
+
+* The Set Builtin:: Change the values of shell attributes and
+ positional parameters.
+* The Shopt Builtin:: Modify shell optional behavior.
+
+
+File: bash.info, Node: The Set Builtin, Next: The Shopt Builtin, Up: Modifying Shell Behavior
+
+4.3.1 The Set Builtin
+---------------------
+
+This builtin is so complicated that it deserves its own section. 'set'
+allows you to change the values of shell options and set the positional
+parameters, or to display the names and values of shell variables.
+
+'set'
+ set [--abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [ARGUMENT ...]
+ set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [ARGUMENT ...]
+
+ If no options or arguments are supplied, 'set' displays the names
+ and values of all shell variables and functions, sorted according
+ to the current locale, in a format that may be reused as input for
+ setting or resetting the currently-set variables. Read-only
+ variables cannot be reset. In POSIX mode, only shell variables are
+ listed.
+
+ When options are supplied, they set or unset shell attributes.
+ Options, if specified, have the following meanings:
+
+ '-a'
+ Each variable or function that is created or modified is given
+ the export attribute and marked for export to the environment
+ of subsequent commands.
+
+ '-b'
+ Cause the status of terminated background jobs to be reported
+ immediately, rather than before printing the next primary
+ prompt.
+
+ '-e'
+ Exit immediately if a pipeline (*note Pipelines::), which may
+ consist of a single simple command (*note Simple Commands::),
+ a list (*note Lists::), or a compound command (*note Compound
+ Commands::) returns a non-zero status. The shell does not
+ exit if the command that fails is part of the command list
+ immediately following a 'while' or 'until' keyword, part of
+ the test in an 'if' statement, part of any command executed in
+ a '&&' or '||' list except the command following the final
+ '&&' or '||', any command in a pipeline but the last, or if
+ the command's return status is being inverted with '!'. If a
+ compound command other than a subshell returns a non-zero
+ status because a command failed while '-e' was being ignored,
+ the shell does not exit. A trap on 'ERR', if set, is executed
+ before the shell exits.
+
+ This option applies to the shell environment and each subshell
+ environment separately (*note Command Execution
+ Environment::), and may cause subshells to exit before
+ executing all the commands in the subshell.
+
+ If a compound command or shell function executes in a context
+ where '-e' is being ignored, none of the commands executed
+ within the compound command or function body will be affected
+ by the '-e' setting, even if '-e' is set and a command returns
+ a failure status. If a compound command or shell function
+ sets '-e' while executing in a context where '-e' is ignored,
+ that setting will not have any effect until the compound
+ command or the command containing the function call completes.
+
+ '-f'
+ Disable filename expansion (globbing).
+
+ '-h'
+ Locate and remember (hash) commands as they are looked up for
+ execution. This option is enabled by default.
+
+ '-k'
+ All arguments in the form of assignment statements are placed
+ in the environment for a command, not just those that precede
+ the command name.
+
+ '-m'
+ Job control is enabled (*note Job Control::). All processes
+ run in a separate process group. When a background job
+ completes, the shell prints a line containing its exit status.
+
+ '-n'
+ 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.
+
+ '-o OPTION-NAME'
+
+ Set the option corresponding to OPTION-NAME:
+
+ 'allexport'
+ Same as '-a'.
+
+ 'braceexpand'
+ Same as '-B'.
+
+ 'emacs'
+ Use an 'emacs'-style line editing interface (*note
+ Command Line Editing::). This also affects the editing
+ interface used for 'read -e'.
+
+ 'errexit'
+ Same as '-e'.
+
+ 'errtrace'
+ Same as '-E'.
+
+ 'functrace'
+ Same as '-T'.
+
+ 'hashall'
+ Same as '-h'.
+
+ 'histexpand'
+ Same as '-H'.
+
+ 'history'
+ Enable command history, as described in *note Bash
+ History Facilities::. This option is on by default in
+ interactive shells.
+
+ 'ignoreeof'
+ An interactive shell will not exit upon reading EOF.
+
+ 'keyword'
+ Same as '-k'.
+
+ 'monitor'
+ Same as '-m'.
+
+ 'noclobber'
+ Same as '-C'.
+
+ 'noexec'
+ Same as '-n'.
+
+ 'noglob'
+ Same as '-f'.
+
+ 'nolog'
+ Currently ignored.
+
+ 'notify'
+ Same as '-b'.
+
+ 'nounset'
+ Same as '-u'.
+
+ 'onecmd'
+ Same as '-t'.
+
+ 'physical'
+ Same as '-P'.
+
+ 'pipefail'
+ 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.
+
+ 'posix'
+ Change the behavior of Bash where the default operation
+ differs from the POSIX standard to match the standard
+ (*note Bash POSIX Mode::). This is intended to make Bash
+ behave as a strict superset of that standard.
+
+ 'privileged'
+ Same as '-p'.
+
+ 'verbose'
+ Same as '-v'.
+
+ 'vi'
+ Use a 'vi'-style line editing interface. This also
+ affects the editing interface used for 'read -e'.
+
+ 'xtrace'
+ Same as '-x'.
+
+ '-p'
+ Turn on privileged mode. In this mode, the '$BASH_ENV' and
+ '$ENV' files are not processed, shell functions are not
+ inherited from the environment, and the 'SHELLOPTS',
+ 'BASHOPTS', 'CDPATH' and 'GLOBIGNORE' variables, if they
+ appear in the environment, are ignored. If the shell is
+ started with the effective user (group) id not equal to the
+ real user (group) id, and the '-p' option is not supplied,
+ these actions are taken and the effective user id is set to
+ the real user id. If the '-p' option is supplied at startup,
+ the effective user id is not reset. Turning this option off
+ causes the effective user and group ids to be set to the real
+ user and group ids.
+
+ '-t'
+ Exit after reading and executing one command.
+
+ '-u'
+ Treat unset variables and parameters other than the special
+ parameters '@' or '*' as an error when performing parameter
+ expansion. An error message will be written to the standard
+ error, and a non-interactive shell will exit.
+
+ '-v'
+ Print shell input lines as they are read.
+
+ '-x'
+ Print a trace of simple commands, 'for' commands, 'case'
+ commands, 'select' commands, and arithmetic 'for' commands and
+ their arguments or associated word lists after they are
+ expanded and before they are executed. The value of the 'PS4'
+ variable is expanded and the resultant value is printed before
+ the command and its expanded arguments.
+
+ '-B'
+ The shell will perform brace expansion (*note Brace
+ Expansion::). This option is on by default.
+
+ '-C'
+ Prevent output redirection using '>', '>&', and '<>' from
+ overwriting existing files.
+
+ '-E'
+ If set, any trap on 'ERR' is inherited by shell functions,
+ command substitutions, and commands executed in a subshell
+ environment. The 'ERR' trap is normally not inherited in such
+ cases.
+
+ '-H'
+ Enable '!' style history substitution (*note History
+ Interaction::). This option is on by default for interactive
+ shells.
+
+ '-P'
+ If set, do not resolve symbolic links when performing commands
+ such as 'cd' which change the current directory. The physical
+ directory is used instead. By default, Bash follows the
+ logical chain of directories when performing commands which
+ change the current directory.
+
+ For example, if '/usr/sys' is a symbolic link to
+ '/usr/local/sys' then:
+ $ cd /usr/sys; echo $PWD
+ /usr/sys
+ $ cd ..; pwd
+ /usr
+
+ If 'set -P' is on, then:
+ $ cd /usr/sys; echo $PWD
+ /usr/local/sys
+ $ cd ..; pwd
+ /usr/local
+
+ '-T'
+ If set, any trap on 'DEBUG' and 'RETURN' are inherited by
+ shell functions, command substitutions, and commands executed
+ in a subshell environment. The 'DEBUG' and 'RETURN' traps are
+ normally not inherited in such cases.
+
+ '--'
+ If no arguments follow this option, then the positional
+ parameters are unset. Otherwise, the positional parameters
+ are set to the ARGUMENTS, even if some of them begin with a
+ '-'.
+
+ '-'
+ Signal the end of options, cause all remaining ARGUMENTS to be
+ assigned to the positional parameters. The '-x' and '-v'
+ options are turned off. If there are no arguments, the
+ positional parameters remain unchanged.
+
+ Using '+' rather than '-' causes these options to be turned off.
+ The options can also be used upon invocation of the shell. The
+ current set of options may be found in '$-'.
+
+ The remaining N ARGUMENTS are positional parameters and are
+ assigned, in order, to '$1', '$2', ... '$N'. The special parameter
+ '#' is set to N.
+
+ The return status is always zero unless an invalid option is
+ supplied.
+
+
+File: bash.info, Node: The Shopt Builtin, Prev: The Set Builtin, Up: Modifying Shell Behavior
+
+4.3.2 The Shopt Builtin
+-----------------------
+
+This builtin allows you to change additional shell optional behavior.
+
+'shopt'
+ shopt [-pqsu] [-o] [OPTNAME ...]
+
+ Toggle the values of settings controlling optional shell behavior.
+ The settings can be either those listed below, or, if the '-o'
+ option is used, those available with the '-o' option to the 'set'
+ builtin command (*note The Set Builtin::). With no options, or
+ with the '-p' option, a list of all settable options is displayed,
+ with an indication of whether or not each is set; if OPTNAMES are
+ supplied, the output is restricted to those options. The '-p'
+ option causes output to be displayed in a form that may be reused
+ as input. Other options have the following meanings:
+
+ '-s'
+ Enable (set) each OPTNAME.
+
+ '-u'
+ Disable (unset) each OPTNAME.
+
+ '-q'
+ Suppresses normal output; the return status indicates whether
+ the OPTNAME is set or unset. If multiple OPTNAME arguments
+ are given with '-q', the return status is zero if all OPTNAMES
+ are enabled; non-zero otherwise.
+
+ '-o'
+ Restricts the values of OPTNAME to be those defined for the
+ '-o' option to the 'set' builtin (*note The Set Builtin::).
+
+ If either '-s' or '-u' is used with no OPTNAME arguments, 'shopt'
+ shows only those options which are set or unset, respectively.
+
+ Unless otherwise noted, the 'shopt' options are disabled (off) by
+ default.
+
+ The return status when listing options is zero if all OPTNAMES are
+ enabled, non-zero otherwise. When setting or unsetting options,
+ the return status is zero unless an OPTNAME is not a valid shell
+ option.
+
+ The list of 'shopt' options is:
+
+ 'assoc_expand_once'
+ If set, the shell suppresses multiple evaluation of
+ associative array subscripts during arithmetic expression
+ evaluation, while executing builtins that can perform variable
+ assignments, and while executing builtins that perform array
+ dereferencing.
+
+ 'autocd'
+ If set, a command name that is the name of a directory is
+ executed as if it were the argument to the 'cd' command. This
+ option is only used by interactive shells.
+
+ 'cdable_vars'
+ If this is set, an argument to the 'cd' builtin command that
+ is not a directory is assumed to be the name of a variable
+ whose value is the directory to change to.
+
+ 'cdspell'
+ If set, minor errors in the spelling of a directory component
+ in a 'cd' command will be corrected. The errors checked for
+ are transposed characters, a missing character, and a
+ character too many. If a correction is found, the corrected
+ path is printed, and the command proceeds. This option is
+ only used by interactive shells.
+
+ 'checkhash'
+ 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.
+
+ 'checkjobs'
+ 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 (*note Job
+ Control::). The shell always postpones exiting if any jobs
+ are stopped.
+
+ 'checkwinsize'
+ If set, Bash checks the window size after each external
+ (non-builtin) command and, if necessary, updates the values of
+ 'LINES' and 'COLUMNS'. This option is enabled by default.
+
+ 'cmdhist'
+ 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. This option is enabled by
+ default, but only has an effect if command history is enabled
+ (*note Bash History Facilities::).
+
+ 'compat31'
+ If set, Bash changes its behavior to that of version 3.1 with
+ respect to quoted arguments to the conditional command's '=~'
+ operator and with respect to locale-specific string comparison
+ when using the '[[' conditional command's '<' and '>'
+ operators. Bash versions prior to bash-4.1 use ASCII
+ collation and strcmp(3); bash-4.1 and later use the current
+ locale's collation sequence and strcoll(3).
+
+ 'compat32'
+ If set, Bash changes its behavior to that of version 3.2 with
+ respect to locale-specific string comparison when using the
+ '[[' conditional command's '<' and '>' operators (see previous
+ item) and the effect of interrupting a command list. Bash
+ versions 3.2 and earlier continue with the next command in the
+ list after one terminates due to an interrupt.
+
+ 'compat40'
+ If set, Bash changes its behavior to that of version 4.0 with
+ respect to locale-specific string comparison when using the
+ '[[' conditional command's '<' and '>' operators (see
+ description of 'compat31') and the effect of interrupting a
+ command list. Bash versions 4.0 and later interrupt the list
+ as if the shell received the interrupt; previous versions
+ continue with the next command in the list.
+
+ 'compat41'
+ If set, Bash, when in POSIX mode, treats a single quote in a
+ double-quoted parameter expansion as a special character. The
+ single quotes must match (an even number) and the characters
+ between the single quotes are considered quoted. This is the
+ behavior of POSIX mode through version 4.1. The default Bash
+ behavior remains as in previous versions.
+
+ 'compat42'
+ If set, Bash does not process the replacement string in the
+ pattern substitution word expansion using quote removal.
+
+ 'compat43'
+ If set, Bash does not print a warning message if an attempt is
+ made to use a quoted compound array assignment as an argument
+ to 'declare', makes word expansion errors non-fatal errors
+ that cause the current command to fail (the default behavior
+ is to make them fatal errors that cause the shell to exit),
+ and does not reset the loop state when a shell function is
+ executed (this allows 'break' or 'continue' in a shell
+ function to affect loops in the caller's context).
+
+ 'compat44'
+ If set, Bash saves the positional parameters to BASH_ARGV and
+ BASH_ARGC before they are used, regardless of whether or not
+ extended debugging mode is enabled.
+
+ 'complete_fullquote'
+ If set, Bash quotes all shell metacharacters in filenames and
+ directory names when performing completion. If not set, Bash
+ removes metacharacters such as the dollar sign from the set of
+ characters that will be quoted in completed filenames when
+ these metacharacters appear in shell variable references in
+ words to be completed. This means that dollar signs in
+ variable names that expand to directories will not be quoted;
+ however, any dollar signs appearing in filenames will not be
+ quoted, either. This is active only when bash is using
+ backslashes to quote completed filenames. This variable is
+ set by default, which is the default Bash behavior in versions
+ through 4.2.
+
+ 'direxpand'
+ If set, Bash replaces directory names with the results of word
+ expansion when performing filename completion. This changes
+ the contents of the readline editing buffer. If not set, Bash
+ attempts to preserve what the user typed.
+
+ 'dirspell'
+ If set, Bash attempts spelling correction on directory names
+ during word completion if the directory name initially
+ supplied does not exist.
+
+ 'dotglob'
+ If set, Bash includes filenames beginning with a '.' in the
+ results of filename expansion. The filenames '.' and '..'
+ must always be matched explicitly, even if 'dotglob' is set.
+
+ 'execfail'
+ If this is set, a non-interactive shell will not exit if it
+ cannot execute the file specified as an argument to the 'exec'
+ builtin command. An interactive shell does not exit if 'exec'
+ fails.
+
+ 'expand_aliases'
+ If set, aliases are expanded as described below under Aliases,
+ *note Aliases::. This option is enabled by default for
+ interactive shells.
+
+ 'extdebug'
+ If set at shell invocation, arrange to execute the debugger
+ profile before the shell starts, identical to the '--debugger'
+ option. If set after invocation, behavior intended for use by
+ debuggers is enabled:
+
+ 1. The '-F' option to the 'declare' builtin (*note Bash
+ Builtins::) displays the source file name and line number
+ corresponding to each function name supplied as an
+ argument.
+
+ 2. If the command run by the 'DEBUG' trap returns a non-zero
+ value, the next command is skipped and not executed.
+
+ 3. If the command run by the 'DEBUG' trap returns a value of
+ 2, and the shell is executing in a subroutine (a shell
+ function or a shell script executed by the '.' or
+ 'source' builtins), the shell simulates a call to
+ 'return'.
+
+ 4. 'BASH_ARGC' and 'BASH_ARGV' are updated as described in
+ their descriptions (*note Bash Variables::).
+
+ 5. Function tracing is enabled: command substitution, shell
+ functions, and subshells invoked with '( COMMAND )'
+ inherit the 'DEBUG' and 'RETURN' traps.
+
+ 6. Error tracing is enabled: command substitution, shell
+ functions, and subshells invoked with '( COMMAND )'
+ inherit the 'ERR' trap.
+
+ 'extglob'
+ If set, the extended pattern matching features described above
+ (*note Pattern Matching::) are enabled.
+
+ 'extquote'
+ If set, '$'STRING'' and '$"STRING"' quoting is performed
+ within '${PARAMETER}' expansions enclosed in double quotes.
+ This option is enabled by default.
+
+ 'failglob'
+ If set, patterns which fail to match filenames during filename
+ expansion result in an expansion error.
+
+ 'force_fignore'
+ If set, the suffixes specified by the 'FIGNORE' shell variable
+ cause words to be ignored when performing word completion even
+ if the ignored words are the only possible completions. *Note
+ Bash Variables::, for a description of 'FIGNORE'. This option
+ is enabled by default.
+
+ 'globasciiranges'
+ If set, range expressions used in pattern matching bracket
+ expressions (*note Pattern Matching::) behave as if in the
+ traditional C locale when performing comparisons. That is,
+ the current locale's collating sequence is not taken into
+ account, so 'b' will not collate between 'A' and 'B', and
+ upper-case and lower-case ASCII characters will collate
+ together.
+
+ 'globstar'
+ If set, the pattern '**' used in a filename expansion context
+ will match all files and zero or more directories and
+ subdirectories. If the pattern is followed by a '/', only
+ directories and subdirectories match.
+
+ 'gnu_errfmt'
+ If set, shell error messages are written in the standard GNU
+ error message format.
+
+ 'histappend'
+ If set, the history list is appended to the file named by the
+ value of the 'HISTFILE' variable when the shell exits, rather
+ than overwriting the file.
+
+ 'histreedit'
+ If set, and Readline is being used, a user is given the
+ opportunity to re-edit a failed history substitution.
+
+ 'histverify'
+ 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.
+
+ 'hostcomplete'
+ If set, and Readline is being used, Bash will attempt to
+ perform hostname completion when a word containing a '@' is
+ being completed (*note Commands For Completion::). This
+ option is enabled by default.
+
+ 'huponexit'
+ If set, Bash will send 'SIGHUP' to all jobs when an
+ interactive login shell exits (*note Signals::).
+
+ 'inherit_errexit'
+ If set, command substitution inherits the value of the
+ 'errexit' option, instead of unsetting it in the subshell
+ environment. This option is enabled when POSIX mode is
+ enabled.
+
+ 'interactive_comments'
+ Allow a word beginning with '#' to cause that word and all
+ remaining characters on that line to be ignored in an
+ interactive shell. This option is enabled by default.
+
+ 'lastpipe'
+ If set, and job control is not active, the shell runs the last
+ command of a pipeline not executed in the background in the
+ current shell environment.
+
+ 'lithist'
+ If enabled, and the 'cmdhist' option is enabled, multi-line
+ commands are saved to the history with embedded newlines
+ rather than using semicolon separators where possible.
+
+ 'localvar_inherit'
+ If set, local variables inherit the value and attributes of a
+ variable of the same name that exists at a previous scope
+ before any new value is assigned. The NAMEREF attribute is
+ not inherited.
+
+ 'localvar_unset'
+ If set, calling 'unset' on local variables in previous
+ function scopes marks them so subsequent lookups find them
+ unset until that function returns. This is identical to the
+ behavior of unsetting local variables at the current function
+ scope.
+
+ 'login_shell'
+ The shell sets this option if it is started as a login shell
+ (*note Invoking Bash::). The value may not be changed.
+
+ 'mailwarn'
+ If set, and a file that Bash is checking for mail has been
+ accessed since the last time it was checked, the message '"The
+ mail in MAILFILE has been read"' is displayed.
+
+ 'no_empty_cmd_completion'
+ If set, and Readline is being used, Bash will not attempt to
+ search the 'PATH' for possible completions when completion is
+ attempted on an empty line.
+
+ 'nocaseglob'
+ If set, Bash matches filenames in a case-insensitive fashion
+ when performing filename expansion.
+
+ 'nocasematch'
+ If set, Bash matches patterns in a case-insensitive fashion
+ when performing matching while executing 'case' or '[['
+ conditional commands, when performing pattern substitution
+ word expansions, or when filtering possible completions as
+ part of programmable completion.
+
+ 'nullglob'
+ If set, Bash allows filename patterns which match no files to
+ expand to a null string, rather than themselves.
+
+ 'progcomp'
+ If set, the programmable completion facilities (*note
+ Programmable Completion::) are enabled. This option is
+ enabled by default.
+
+ 'progcomp_alias'
+ If set, and programmable completion is enabled, Bash treats a
+ command name that doesn't have any completions as a possible
+ alias and attempts alias expansion. If it has an alias, Bash
+ attempts programmable completion using the command word
+ resulting from the expanded alias.
+
+ 'promptvars'
+ If set, prompt strings undergo parameter expansion, command
+ substitution, arithmetic expansion, and quote removal after
+ being expanded as described below (*note Controlling the
+ Prompt::). This option is enabled by default.
+
+ 'restricted_shell'
+ The shell sets this option if it is started in restricted mode
+ (*note The Restricted Shell::). 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.
+
+ 'shift_verbose'
+ If this is set, the 'shift' builtin prints an error message
+ when the shift count exceeds the number of positional
+ parameters.
+
+ 'sourcepath'
+ If set, the 'source' builtin uses the value of 'PATH' to find
+ the directory containing the file supplied as an argument.
+ This option is enabled by default.
+
+ 'xpg_echo'
+ If set, the 'echo' builtin expands backslash-escape sequences
+ by default.
+
+ The return status when listing options is zero if all OPTNAMES are
+ enabled, non-zero otherwise. When setting or unsetting options,
+ the return status is zero unless an OPTNAME is not a valid shell
+ option.
+
+
+File: bash.info, Node: Special Builtins, Prev: Modifying Shell Behavior, Up: Shell Builtin Commands
+
+4.4 Special Builtins
+====================
+
+For historical reasons, the POSIX standard has classified several
+builtin commands as _special_. When Bash is executing in POSIX mode,
+the special builtins differ from other builtin commands in three
+respects:
+
+ 1. Special builtins are found before shell functions during command
+ lookup.
+
+ 2. If a special builtin returns an error status, a non-interactive
+ shell exits.
+
+ 3. Assignment statements preceding the command stay in effect in the
+ shell environment after the command completes.
+
+ 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 *note Bash POSIX Mode::.
+
+ These are the POSIX special builtins:
+ break : . continue eval exec exit export readonly return set
+ shift trap unset
+
+
+File: bash.info, Node: Shell Variables, Next: Bash Features, Prev: Shell Builtin Commands, Up: Top
+
+5 Shell Variables
+*****************
+
+* Menu:
+
+* Bourne Shell Variables:: Variables which Bash uses in the same way
+ as the Bourne Shell.
+* Bash Variables:: List of variables that exist in Bash.
+
+This chapter describes the shell variables that Bash uses. Bash
+automatically assigns default values to a number of variables.
+
+
+File: bash.info, Node: Bourne Shell Variables, Next: Bash Variables, Up: Shell Variables
+
+5.1 Bourne Shell Variables
+==========================
+
+Bash uses certain shell variables in the same way as the Bourne shell.
+In some cases, Bash assigns a default value to the variable.
+
+'CDPATH'
+ A colon-separated list of directories used as a search path for the
+ 'cd' builtin command.
+
+'HOME'
+ The current user's home directory; the default for the 'cd' builtin
+ command. The value of this variable is also used by tilde
+ expansion (*note Tilde Expansion::).
+
+'IFS'
+ A list of characters that separate fields; used when the shell
+ splits words as part of expansion.
+
+'MAIL'
+ If this parameter is set to a filename or directory name and the
+ 'MAILPATH' variable is not set, Bash informs the user of the
+ arrival of mail in the specified file or Maildir-format directory.
+
+'MAILPATH'
+ 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
+ filename from the message with a '?'. When used in the text of the
+ message, '$_' expands to the name of the current mail file.
+
+'OPTARG'
+ The value of the last option argument processed by the 'getopts'
+ builtin.
+
+'OPTIND'
+ The index of the last option argument processed by the 'getopts'
+ builtin.
+
+'PATH'
+ A colon-separated list of directories in which the shell looks for
+ commands. A zero-length (null) directory name in the value of
+ 'PATH' indicates the current directory. A null directory name may
+ appear as two adjacent colons, or as an initial or trailing colon.
+
+'PS1'
+ The primary prompt string. The default value is '\s-\v\$ '. *Note
+ Controlling the Prompt::, for the complete list of escape sequences
+ that are expanded before 'PS1' is displayed.
+
+'PS2'
+ The secondary prompt string. The default value is '> '. 'PS2' is
+ expanded in the same way as 'PS1' before being displayed.
+
+
+File: bash.info, Node: Bash Variables, Prev: Bourne Shell Variables, Up: Shell Variables
+
+5.2 Bash Variables
+==================
+
+These variables are set or used by Bash, but other shells do not
+normally treat them specially.
+
+ A few variables used by Bash are described in different chapters:
+variables for controlling the job control facilities (*note Job Control
+Variables::).
+
+'BASH'
+ The full pathname used to execute the current instance of Bash.
+
+'BASHOPTS'
+ A colon-separated list of enabled shell options. Each word in the
+ list is a valid argument for the '-s' option to the 'shopt' builtin
+ command (*note The Shopt Builtin::). The options appearing in
+ 'BASHOPTS' are those reported as 'on' by 'shopt'. If this variable
+ is in the environment when Bash starts up, each shell option in the
+ list will be enabled before reading any startup files. This
+ variable is readonly.
+
+'BASHPID'
+ Expands to the process ID of the current Bash process. This
+ differs from '$$' under certain circumstances, such as subshells
+ that do not require Bash to be re-initialized. Assignments to
+ 'BASHPID' have no effect. If 'BASHPID' is unset, it loses its
+ special properties, even if it is subsequently reset.
+
+'BASH_ALIASES'
+ An associative array variable whose members correspond to the
+ internal list of aliases as maintained by the 'alias' builtin.
+ (*note Bourne Shell Builtins::). Elements added to this array
+ appear in the alias list; however, unsetting array elements
+ currently does not cause aliases to be removed from the alias list.
+ If 'BASH_ALIASES' is unset, it loses its special properties, even
+ if it is subsequently reset.
+
+'BASH_ARGC'
+ 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 '.' or 'source') is at the top of the stack. When a
+ subroutine is executed, the number of parameters passed is pushed
+ onto 'BASH_ARGC'. The shell sets 'BASH_ARGC' only when in extended
+ debugging mode (see *note The Shopt Builtin:: for a description of
+ the 'extdebug' option to the 'shopt' builtin). Setting 'extdebug'
+ after the shell has started to execute a script, or referencing
+ this variable when 'extdebug' is not set, may result in
+ inconsistent values.
+
+'BASH_ARGV'
+ 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 'BASH_ARGV'. The shell
+ sets 'BASH_ARGV' only when in extended debugging mode (see *note
+ The Shopt Builtin:: for a description of the 'extdebug' option to
+ the 'shopt' builtin). Setting 'extdebug' after the shell has
+ started to execute a script, or referencing this variable when
+ 'extdebug' is not set, may result in inconsistent values.
+
+'BASH_ARGV0'
+ When referenced, this variable expands to the name of the shell or
+ shell script (identical to '$0'; *Note Special Parameters::, for
+ the description of special parameter 0). Assignment to
+ 'BASH_ARGV0' causes the value assigned to also be assigned to '$0'.
+ If 'BASH_ARGV0' is unset, it loses its special properties, even if
+ it is subsequently reset.
+
+'BASH_CMDS'
+ An associative array variable whose members correspond to the
+ internal hash table of commands as maintained by the 'hash' builtin
+ (*note Bourne Shell Builtins::). Elements added to this array
+ appear in the hash table; however, unsetting array elements
+ currently does not cause command names to be removed from the hash
+ table. If 'BASH_CMDS' is unset, it loses its special properties,
+ even if it is subsequently reset.
+
+'BASH_COMMAND'
+ 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.
+
+'BASH_COMPAT'
+ The value is used to set the shell's compatibility level. *Note
+ The Shopt Builtin::, for a description of the various compatibility
+ levels and their effects. The value may be a decimal number (e.g.,
+ 4.2) or an integer (e.g., 42) corresponding to the desired
+ compatibility level. If 'BASH_COMPAT' is unset or set to the empty
+ string, the compatibility level is set to the default for the
+ current version. If 'BASH_COMPAT' is set to a value that is not
+ one of the valid compatibility levels, the shell prints an error
+ message and sets the compatibility level to the default for the
+ current version. The valid compatibility levels correspond to the
+ compatibility options accepted by the 'shopt' builtin described
+ above (for example, COMPAT42 means that 4.2 and 42 are valid
+ values). The current version is also a valid value.
+
+'BASH_ENV'
+ 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. *Note Bash Startup
+ Files::.
+
+'BASH_EXECUTION_STRING'
+ The command argument to the '-c' invocation option.
+
+'BASH_LINENO'
+ An array variable whose members are the line numbers in source
+ files where each corresponding member of FUNCNAME was invoked.
+ '${BASH_LINENO[$i]}' is the line number in the source file
+ ('${BASH_SOURCE[$i+1]}') where '${FUNCNAME[$i]}' was called (or
+ '${BASH_LINENO[$i-1]}' if referenced within another shell
+ function). Use 'LINENO' to obtain the current line number.
+
+'BASH_LOADABLES_PATH'
+ A colon-separated list of directories in which the shell looks for
+ dynamically loadable builtins specified by the 'enable' command.
+
+'BASH_REMATCH'
+ An array variable whose members are assigned by the '=~' binary
+ operator to the '[[' conditional command (*note Conditional
+ Constructs::). The element with index 0 is the portion of the
+ string matching the entire regular expression. The element with
+ index N is the portion of the string matching the Nth parenthesized
+ subexpression. This variable is read-only.
+
+'BASH_SOURCE'
+ An array variable whose members are the source filenames where the
+ corresponding shell function names in the 'FUNCNAME' array variable
+ are defined. The shell function '${FUNCNAME[$i]}' is defined in
+ the file '${BASH_SOURCE[$i]}' and called from
+ '${BASH_SOURCE[$i+1]}'
+
+'BASH_SUBSHELL'
+ Incremented by one within each subshell or subshell environment
+ when the shell begins executing in that environment. The initial
+ value is 0.
+
+'BASH_VERSINFO'
+ A readonly array variable (*note Arrays::) whose members hold
+ version information for this instance of Bash. The values assigned
+ to the array members are as follows:
+
+ 'BASH_VERSINFO[0]'
+ The major version number (the RELEASE).
+
+ 'BASH_VERSINFO[1]'
+ The minor version number (the VERSION).
+
+ 'BASH_VERSINFO[2]'
+ The patch level.
+
+ 'BASH_VERSINFO[3]'
+ The build version.
+
+ 'BASH_VERSINFO[4]'
+ The release status (e.g., BETA1).
+
+ 'BASH_VERSINFO[5]'
+ The value of 'MACHTYPE'.
+
+'BASH_VERSION'
+ The version number of the current instance of Bash.
+
+'BASH_XTRACEFD'
+ If set to an integer corresponding to a valid file descriptor, Bash
+ will write the trace output generated when 'set -x' is enabled to
+ that file descriptor. This allows tracing output to be separated
+ from diagnostic and error messages. The file descriptor is closed
+ when 'BASH_XTRACEFD' is unset or assigned a new value. Unsetting
+ 'BASH_XTRACEFD' or assigning it the empty string causes the trace
+ output to be sent to the standard error. Note that setting
+ 'BASH_XTRACEFD' to 2 (the standard error file descriptor) and then
+ unsetting it will result in the standard error being closed.
+
+'CHILD_MAX'
+ Set the number of exited child status values for the shell to
+ remember. Bash will not allow this value to be decreased below a
+ POSIX-mandated minimum, and there is a maximum value (currently
+ 8192) that this may not exceed. The minimum value is
+ system-dependent.
+
+'COLUMNS'
+ Used by the 'select' command to determine the terminal width when
+ printing selection lists. Automatically set if the 'checkwinsize'
+ option is enabled (*note The Shopt Builtin::), or in an interactive
+ shell upon receipt of a 'SIGWINCH'.
+
+'COMP_CWORD'
+ An index into '${COMP_WORDS}' of the word containing the current
+ cursor position. This variable is available only in shell
+ functions invoked by the programmable completion facilities (*note
+ Programmable Completion::).
+
+'COMP_LINE'
+ The current command line. This variable is available only in shell
+ functions and external commands invoked by the programmable
+ completion facilities (*note Programmable Completion::).
+
+'COMP_POINT'
+ 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
+ '${#COMP_LINE}'. This variable is available only in shell
+ functions and external commands invoked by the programmable
+ completion facilities (*note Programmable Completion::).
+
+'COMP_TYPE'
+ Set to an integer value corresponding to the type of completion
+ attempted that caused a completion function to be called: TAB, for
+ normal completion, '?', for listing completions after successive
+ tabs, '!', for listing alternatives on partial word completion,
+ '@', to list completions if the word is not unmodified, or '%', for
+ menu completion. This variable is available only in shell
+ functions and external commands invoked by the programmable
+ completion facilities (*note Programmable Completion::).
+
+'COMP_KEY'
+ The key (or final key of a key sequence) used to invoke the current
+ completion function.
+
+'COMP_WORDBREAKS'
+ The set of characters that the Readline library treats as word
+ separators when performing word completion. If 'COMP_WORDBREAKS'
+ is unset, it loses its special properties, even if it is
+ subsequently reset.
+
+'COMP_WORDS'
+ An array variable consisting of the individual words in the current
+ command line. The line is split into words as Readline would split
+ it, using 'COMP_WORDBREAKS' as described above. This variable is
+ available only in shell functions invoked by the programmable
+ completion facilities (*note Programmable Completion::).
+
+'COMPREPLY'
+ An array variable from which Bash reads the possible completions
+ generated by a shell function invoked by the programmable
+ completion facility (*note Programmable Completion::). Each array
+ element contains one possible completion.
+
+'COPROC'
+ An array variable created to hold the file descriptors for output
+ from and input to an unnamed coprocess (*note Coprocesses::).
+
+'DIRSTACK'
+ An array variable containing the current contents of the directory
+ stack. Directories appear in the stack in the order they are
+ displayed by the 'dirs' builtin. Assigning to members of this
+ array variable may be used to modify directories already in the
+ stack, but the 'pushd' and 'popd' builtins must be used to add and
+ remove directories. Assignment to this variable will not change
+ the current directory. If 'DIRSTACK' is unset, it loses its
+ special properties, even if it is subsequently reset.
+
+'EMACS'
+ If Bash finds this variable in the environment when the shell
+ starts with value 't', it assumes that the shell is running in an
+ Emacs shell buffer and disables line editing.
+
+'ENV'
+ Similar to 'BASH_ENV'; used when the shell is invoked in POSIX Mode
+ (*note Bash POSIX Mode::).
+
+'EPOCHREALTIME'
+ Each time this parameter is referenced, it expands to the number of
+ seconds since the Unix Epoch as a floating point value with
+ micro-second granularity (see the documentation for the C library
+ function TIME for the definition of Epoch). Assignments to
+ 'EPOCHREALTIME' are ignored. If 'EPOCHREALTIME' is unset, it loses
+ its special properties, even if it is subsequently reset.
+
+'EPOCHSECONDS'
+ Each time this parameter is referenced, it expands to the number of
+ seconds since the Unix Epoch (see the documentation for the C
+ library function TIME for the definition of Epoch). Assignments to
+ 'EPOCHSECONDS' are ignored. If 'EPOCHSECONDS' is unset, it loses
+ its special properties, even if it is subsequently reset.
+
+'EUID'
+ The numeric effective user id of the current user. This variable
+ is readonly.
+
+'EXECIGNORE'
+ A colon-separated list of shell patterns (*note Pattern Matching::)
+ defining the list of filenames to be ignored by command search
+ using 'PATH'. Files whose full pathnames match one of these
+ patterns are not considered executable files for the purposes of
+ completion and command execution via 'PATH' lookup. This does not
+ affect the behavior of the '[', 'test', and '[[' commands. Full
+ pathnames in the command hash table are not subject to
+ 'EXECIGNORE'. Use this variable to ignore shared library files
+ that have the executable bit set, but are not executable files.
+ The pattern matching honors the setting of the 'extglob' shell
+ option.
+
+'FCEDIT'
+ The editor used as a default by the '-e' option to the 'fc' builtin
+ command.
+
+'FIGNORE'
+ A colon-separated list of suffixes to ignore when performing
+ filename completion. A filename whose suffix matches one of the
+ entries in 'FIGNORE' is excluded from the list of matched
+ filenames. A sample value is '.o:~'
+
+'FUNCNAME'
+ 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 (the one with the highest index) is '"main"'.
+ This variable exists only when a shell function is executing.
+ Assignments to 'FUNCNAME' have no effect. If 'FUNCNAME' is unset,
+ it loses its special properties, even if it is subsequently reset.
+
+ This variable can be used with 'BASH_LINENO' and 'BASH_SOURCE'.
+ Each element of 'FUNCNAME' has corresponding elements in
+ 'BASH_LINENO' and 'BASH_SOURCE' to describe the call stack. For
+ instance, '${FUNCNAME[$i]}' was called from the file
+ '${BASH_SOURCE[$i+1]}' at line number '${BASH_LINENO[$i]}'. The
+ 'caller' builtin displays the current call stack using this
+ information.
+
+'FUNCNEST'
+ If set to a numeric value greater than 0, defines a maximum
+ function nesting level. Function invocations that exceed this
+ nesting level will cause the current command to abort.
+
+'GLOBIGNORE'
+ A colon-separated list of patterns defining the set of file names
+ to be ignored by filename expansion. If a file name matched by a
+ filename expansion pattern also matches one of the patterns in
+ 'GLOBIGNORE', it is removed from the list of matches. The pattern
+ matching honors the setting of the 'extglob' shell option.
+
+'GROUPS'
+ An array variable containing the list of groups of which the
+ current user is a member. Assignments to 'GROUPS' have no effect.
+ If 'GROUPS' is unset, it loses its special properties, even if it
+ is subsequently reset.
+
+'histchars'
+ Up to three characters which control history expansion, quick
+ substitution, and tokenization (*note History Interaction::). The
+ first character is the HISTORY EXPANSION character, that is, the
+ character which signifies the start of a history expansion,
+ normally '!'. The second character is the character which
+ signifies 'quick substitution' when seen as the first character on
+ a line, normally '^'. 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 '#'.
+ 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.
+
+'HISTCMD'
+ The history number, or index in the history list, of the current
+ command. If 'HISTCMD' is unset, it loses its special properties,
+ even if it is subsequently reset.
+
+'HISTCONTROL'
+ A colon-separated list of values controlling how commands are saved
+ on the history list. If the list of values includes 'ignorespace',
+ lines which begin with a space character are not saved in the
+ history list. A value of 'ignoredups' causes lines which match the
+ previous history entry to not be saved. A value of 'ignoreboth' is
+ shorthand for 'ignorespace' and 'ignoredups'. A value of
+ 'erasedups' 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 'HISTCONTROL' is unset,
+ or does not include a valid value, all lines read by the shell
+ parser are saved on the history list, subject to the value of
+ 'HISTIGNORE'. The second and subsequent lines of a multi-line
+ compound command are not tested, and are added to the history
+ regardless of the value of 'HISTCONTROL'.
+
+'HISTFILE'
+ The name of the file to which the command history is saved. The
+ default value is '~/.bash_history'.
+
+'HISTFILESIZE'
+ The maximum number of lines contained in the history file. When
+ this variable is assigned a value, the history file is truncated,
+ if necessary, to contain no more than that number of lines by
+ removing the oldest entries. The history file is also truncated to
+ this size after writing it when a shell exits. If the value is 0,
+ the history file is truncated to zero size. Non-numeric values and
+ numeric values less than zero inhibit truncation. The shell sets
+ the default value to the value of 'HISTSIZE' after reading any
+ startup files.
+
+'HISTIGNORE'
+ 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 '*' is appended). Each pattern is tested against
+ the line after the checks specified by 'HISTCONTROL' are applied.
+ In addition to the normal shell pattern matching characters, '&'
+ matches the previous history line. '&' may be escaped using a
+ backslash; the backslash is removed before attempting a match. The
+ second and subsequent lines of a multi-line compound command are
+ not tested, and are added to the history regardless of the value of
+ 'HISTIGNORE'. The pattern matching honors the setting of the
+ 'extglob' shell option.
+
+ 'HISTIGNORE' subsumes the function of 'HISTCONTROL'. A pattern of
+ '&' is identical to 'ignoredups', and a pattern of '[ ]*' is
+ identical to 'ignorespace'. Combining these two patterns,
+ separating them with a colon, provides the functionality of
+ 'ignoreboth'.
+
+'HISTSIZE'
+ The maximum number of commands to remember on the history list. If
+ the value is 0, commands are not saved in the history list.
+ Numeric values less than zero result in every command being saved
+ on the history list (there is no limit). The shell sets the
+ default value to 500 after reading any startup files.
+
+'HISTTIMEFORMAT'
+ If this variable is set and not null, its value is used as a format
+ string for STRFTIME to print the time stamp associated with each
+ history entry displayed by the 'history' builtin. If this variable
+ is set, time stamps are written to the history file so they may be
+ preserved across shell sessions. This uses the history comment
+ character to distinguish timestamps from other history lines.
+
+'HOSTFILE'
+ Contains the name of a file in the same format as '/etc/hosts' 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 'HOSTFILE' is set, but has no value, or
+ does not name a readable file, Bash attempts to read '/etc/hosts'
+ to obtain the list of possible hostname completions. When
+ 'HOSTFILE' is unset, the hostname list is cleared.
+
+'HOSTNAME'
+ The name of the current host.
+
+'HOSTTYPE'
+ A string describing the machine Bash is running on.
+
+'IGNOREEOF'
+ Controls the action of the shell on receipt of an 'EOF' character
+ as the sole input. If set, the value denotes the number of
+ consecutive 'EOF' characters that can be read as the first
+ character on an input line before the shell will exit. If the
+ variable exists but does not have a numeric value, or has no value,
+ then the default is 10. If the variable does not exist, then 'EOF'
+ signifies the end of input to the shell. This is only in effect
+ for interactive shells.
+
+'INPUTRC'
+ The name of the Readline initialization file, overriding the
+ default of '~/.inputrc'.
+
+'INSIDE_EMACS'
+ If Bash finds this variable in the environment when the shell
+ starts, it assumes that the shell is running in an Emacs shell
+ buffer and may disable line editing depending on the value of
+ 'TERM'.
+
+'LANG'
+ Used to determine the locale category for any category not
+ specifically selected with a variable starting with 'LC_'.
+
+'LC_ALL'
+ This variable overrides the value of 'LANG' and any other 'LC_'
+ variable specifying a locale category.
+
+'LC_COLLATE'
+ 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 (*note Filename
+ Expansion::).
+
+'LC_CTYPE'
+ This variable determines the interpretation of characters and the
+ behavior of character classes within filename expansion and pattern
+ matching (*note Filename Expansion::).
+
+'LC_MESSAGES'
+ This variable determines the locale used to translate double-quoted
+ strings preceded by a '$' (*note Locale Translation::).
+
+'LC_NUMERIC'
+ This variable determines the locale category used for number
+ formatting.
+
+'LC_TIME'
+ This variable determines the locale category used for data and time
+ formatting.
+
+'LINENO'
+ The line number in the script or shell function currently
+ executing.
+
+'LINES'
+ Used by the 'select' command to determine the column length for
+ printing selection lists. Automatically set if the 'checkwinsize'
+ option is enabled (*note The Shopt Builtin::), or in an interactive
+ shell upon receipt of a 'SIGWINCH'.
+
+'MACHTYPE'
+ A string that fully describes the system type on which Bash is
+ executing, in the standard GNU CPU-COMPANY-SYSTEM format.
+
+'MAILCHECK'
+ How often (in seconds) that the shell should check for mail in the
+ files specified in the 'MAILPATH' or 'MAIL' variables. The default
+ is 60 seconds. When it is time to check for mail, the shell does
+ so before displaying the primary prompt. If this variable is
+ unset, or set to a value that is not a number greater than or equal
+ to zero, the shell disables mail checking.
+
+'MAPFILE'
+ An array variable created to hold the text read by the 'mapfile'
+ builtin when no variable name is supplied.
+
+'OLDPWD'
+ The previous working directory as set by the 'cd' builtin.
+
+'OPTERR'
+ If set to the value 1, Bash displays error messages generated by
+ the 'getopts' builtin command.
+
+'OSTYPE'
+ A string describing the operating system Bash is running on.
+
+'PIPESTATUS'
+ An array variable (*note Arrays::) containing a list of exit status
+ values from the processes in the most-recently-executed foreground
+ pipeline (which may contain only a single command).
+
+'POSIXLY_CORRECT'
+ If this variable is in the environment when Bash starts, the shell
+ enters POSIX mode (*note Bash POSIX Mode::) before reading the
+ startup files, as if the '--posix' invocation option had been
+ supplied. If it is set while the shell is running, Bash enables
+ POSIX mode, as if the command
+ set -o posix
+ had been executed. When the shell enters POSIX mode, it sets this
+ variable if it was not already set.
+
+'PPID'
+ The process ID of the shell's parent process. This variable is
+ readonly.
+
+'PROMPT_COMMAND'
+ If set, the value is interpreted as a command to execute before the
+ printing of each primary prompt ('$PS1').
+
+'PROMPT_DIRTRIM'
+ If set to a number greater than zero, the value is used as the
+ number of trailing directory components to retain when expanding
+ the '\w' and '\W' prompt string escapes (*note Controlling the
+ Prompt::). Characters removed are replaced with an ellipsis.
+
+'PS0'
+ The value of this parameter is expanded like PS1 and displayed by
+ interactive shells after reading a command and before the command
+ is executed.
+
+'PS3'
+ The value of this variable is used as the prompt for the 'select'
+ command. If this variable is not set, the 'select' command prompts
+ with '#? '
+
+'PS4'
+ The value of this parameter is expanded like PS1 and the expanded
+ value is the prompt printed before the command line is echoed when
+ the '-x' option is set (*note The Set Builtin::). The first
+ character of the expanded value is replicated multiple times, as
+ necessary, to indicate multiple levels of indirection. The default
+ is '+ '.
+
+'PWD'
+ The current working directory as set by the 'cd' builtin.
+
+'RANDOM'
+ 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.
+
+'READLINE_LINE'
+ The contents of the Readline line buffer, for use with 'bind -x'
+ (*note Bash Builtins::).
+
+'READLINE_POINT'
+ The position of the insertion point in the Readline line buffer,
+ for use with 'bind -x' (*note Bash Builtins::).
+
+'REPLY'
+ The default variable for the 'read' builtin.
+
+'SECONDS'
+ 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.
+
+'SHELL'
+ 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.
+
+'SHELLOPTS'
+ A colon-separated list of enabled shell options. Each word in the
+ list is a valid argument for the '-o' option to the 'set' builtin
+ command (*note The Set Builtin::). The options appearing in
+ 'SHELLOPTS' are those reported as 'on' by 'set -o'. If this
+ variable is in the environment when Bash starts up, each shell
+ option in the list will be enabled before reading any startup
+ files. This variable is readonly.
+
+'SHLVL'
+ 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.
+
+'TIMEFORMAT'
+ The value of this parameter is used as a format string specifying
+ how the timing information for pipelines prefixed with the 'time'
+ reserved word should be displayed. The '%' character introduces an
+ escape sequence that is expanded to a time value or other
+ information. The escape sequences and their meanings are as
+ follows; the braces denote optional portions.
+
+ '%%'
+ A literal '%'.
+
+ '%[P][l]R'
+ The elapsed time in seconds.
+
+ '%[P][l]U'
+ The number of CPU seconds spent in user mode.
+
+ '%[P][l]S'
+ The number of CPU seconds spent in system mode.
+
+ '%P'
+ The CPU percentage, computed as (%U + %S) / %R.
+
+ The optional P is a digit specifying the precision, the number of
+ fractional digits after a decimal point. A value of 0 causes no
+ decimal point or fraction to be output. At most three places after
+ the decimal point may be specified; values of P greater than 3 are
+ changed to 3. If P is not specified, the value 3 is used.
+
+ The optional 'l' specifies a longer format, including minutes, of
+ the form MMmSS.FFs. The value of P determines whether or not the
+ fraction is included.
+
+ If this variable is not set, Bash acts as if it had the value
+ $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+ If the value is null, no timing information is displayed. A
+ trailing newline is added when the format string is displayed.
+
+'TMOUT'
+ If set to a value greater than zero, 'TMOUT' is treated as the
+ default timeout for the 'read' builtin (*note Bash Builtins::).
+ The 'select' command (*note Conditional Constructs::) terminates if
+ input does not arrive after 'TMOUT' seconds when input is coming
+ from a terminal.
+
+ In an interactive shell, the value is interpreted as the number of
+ seconds to wait for a line of input after issuing the primary
+ prompt. Bash terminates after waiting for that number of seconds
+ if a complete line of input does not arrive.
+
+'TMPDIR'
+ If set, Bash uses its value as the name of a directory in which
+ Bash creates temporary files for the shell's use.
+
+'UID'
+ The numeric real user id of the current user. This variable is
+ readonly.
+
+
+File: bash.info, Node: Bash Features, Next: Job Control, Prev: Shell Variables, Up: Top
+
+6 Bash Features
+***************
+
+This chapter describes features unique to Bash.
+
+* Menu:
+
+* Invoking Bash:: Command line options that you can give
+ to Bash.
+* Bash Startup Files:: When and how Bash executes scripts.
+* Interactive Shells:: What an interactive shell is.
+* Bash Conditional Expressions:: Primitives used in composing expressions for
+ the 'test' builtin.
+* Shell Arithmetic:: Arithmetic on shell variables.
+* Aliases:: Substituting one command for another.
+* Arrays:: Array Variables.
+* The Directory Stack:: History of visited directories.
+* Controlling the Prompt:: Customizing the various prompt strings.
+* The Restricted Shell:: A more controlled mode of shell execution.
+* Bash POSIX Mode:: Making Bash behave more closely to what
+ the POSIX standard specifies.
+
+
+File: bash.info, Node: Invoking Bash, Next: Bash Startup Files, Up: Bash Features
+
+6.1 Invoking Bash
+=================
+
+ bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o OPTION]
+ [-O SHOPT_OPTION] [ARGUMENT ...]
+ bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o OPTION]
+ [-O SHOPT_OPTION] -c STRING [ARGUMENT ...]
+ bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o OPTION]
+ [-O SHOPT_OPTION] [ARGUMENT ...]
+
+ All of the single-character options used with the 'set' builtin
+(*note The Set Builtin::) can be used as options when the shell is
+invoked. In addition, there are several multi-character options that
+you can use. These options must appear on the command line before the
+single-character options to be recognized.
+
+'--debugger'
+ Arrange for the debugger profile to be executed before the shell
+ starts. Turns on extended debugging mode (see *note The Shopt
+ Builtin:: for a description of the 'extdebug' option to the 'shopt'
+ builtin).
+
+'--dump-po-strings'
+ A list of all double-quoted strings preceded by '$' is printed on
+ the standard output in the GNU 'gettext' PO (portable object) file
+ format. Equivalent to '-D' except for the output format.
+
+'--dump-strings'
+ Equivalent to '-D'.
+
+'--help'
+ Display a usage message on standard output and exit successfully.
+
+'--init-file FILENAME'
+'--rcfile FILENAME'
+ Execute commands from FILENAME (instead of '~/.bashrc') in an
+ interactive shell.
+
+'--login'
+ Equivalent to '-l'.
+
+'--noediting'
+ Do not use the GNU Readline library (*note Command Line Editing::)
+ to read command lines when the shell is interactive.
+
+'--noprofile'
+ Don't load the system-wide startup file '/etc/profile' or any of
+ the personal initialization files '~/.bash_profile',
+ '~/.bash_login', or '~/.profile' when Bash is invoked as a login
+ shell.
+
+'--norc'
+ Don't read the '~/.bashrc' initialization file in an interactive
+ shell. This is on by default if the shell is invoked as 'sh'.
+
+'--posix'
+ 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. *Note Bash
+ POSIX Mode::, for a description of the Bash POSIX mode.
+
+'--restricted'
+ Make the shell a restricted shell (*note The Restricted Shell::).
+
+'--verbose'
+ Equivalent to '-v'. Print shell input lines as they're read.
+
+'--version'
+ Show version information for this instance of Bash on the standard
+ output and exit successfully.
+
+ There are several single-character options that may be supplied at
+invocation which are not available with the 'set' builtin.
+
+'-c'
+ Read and execute commands from the first non-option argument
+ COMMAND_STRING, then exit. If there are arguments after the
+ COMMAND_STRING, the first argument is assigned to '$0' and any
+ remaining arguments are assigned to the positional parameters. The
+ assignment to '$0' sets the name of the shell, which is used in
+ warning and error messages.
+
+'-i'
+ Force the shell to run interactively. Interactive shells are
+ described in *note Interactive Shells::.
+
+'-l'
+ 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 'exec -l bash'. When the shell is not
+ interactive, the login shell startup files will be executed. 'exec
+ bash -l' or 'exec bash --login' will replace the current shell with
+ a Bash login shell. *Note Bash Startup Files::, for a description
+ of the special behavior of a login shell.
+
+'-r'
+ Make the shell a restricted shell (*note The Restricted Shell::).
+
+'-s'
+ 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 or when reading input through a pipe.
+
+'-D'
+ A list of all double-quoted strings preceded by '$' is printed on
+ the standard output. These are the strings that are subject to
+ language translation when the current locale is not 'C' or 'POSIX'
+ (*note Locale Translation::). This implies the '-n' option; no
+ commands will be executed.
+
+'[-+]O [SHOPT_OPTION]'
+ SHOPT_OPTION is one of the shell options accepted by the 'shopt'
+ builtin (*note The Shopt Builtin::). If SHOPT_OPTION is present,
+ '-O' sets the value of that option; '+O' unsets it. If
+ SHOPT_OPTION is not supplied, the names and values of the shell
+ options accepted by 'shopt' are printed on the standard output. If
+ the invocation option is '+O', the output is displayed in a format
+ that may be reused as input.
+
+'--'
+ A '--' signals the end of options and disables further option
+ processing. Any arguments after the '--' are treated as filenames
+ and arguments.
+
+ A _login_ shell is one whose first character of argument zero is '-',
+or one invoked with the '--login' option.
+
+ An _interactive_ shell is one started without non-option arguments,
+unless '-s' is specified, without specifying the '-c' option, and whose
+input and output are both connected to terminals (as determined by
+'isatty(3)'), or one started with the '-i' option. *Note Interactive
+Shells::, for more information.
+
+ If arguments remain after option processing, and neither the '-c' nor
+the '-s' option has been supplied, the first argument is assumed to be
+the name of a file containing shell commands (*note Shell Scripts::).
+When Bash is invoked in this fashion, '$0' is set to the name of the
+file, and the positional parameters are set to the remaining arguments.
+Bash reads and executes commands from this file, then exits. Bash's
+exit status is the exit status of the last command executed in the
+script. If no commands are executed, the exit status is 0.
+
+
+File: bash.info, Node: Bash Startup Files, Next: Interactive Shells, Prev: Invoking Bash, Up: Bash Features
+
+6.2 Bash Startup Files
+======================
+
+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 filenames as described above under Tilde Expansion (*note
+Tilde Expansion::).
+
+ Interactive shells are described in *note Interactive Shells::.
+
+Invoked as an interactive login shell, or with '--login'
+........................................................
+
+When Bash is invoked as an interactive login shell, or as a
+non-interactive shell with the '--login' option, it first reads and
+executes commands from the file '/etc/profile', if that file exists.
+After reading that file, it looks for '~/.bash_profile',
+'~/.bash_login', and '~/.profile', in that order, and reads and executes
+commands from the first one that exists and is readable. The
+'--noprofile' option may be used when the shell is started to inhibit
+this behavior.
+
+ When an interactive login shell exits, or a non-interactive login
+shell executes the 'exit' builtin command, Bash reads and executes
+commands from the file '~/.bash_logout', if it exists.
+
+Invoked as an interactive non-login shell
+.........................................
+
+When an interactive shell that is not a login shell is started, Bash
+reads and executes commands from '~/.bashrc', if that file exists. This
+may be inhibited by using the '--norc' option. The '--rcfile FILE'
+option will force Bash to read and execute commands from FILE instead of
+'~/.bashrc'.
+
+ So, typically, your '~/.bash_profile' contains the line
+ if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
+after (or before) any login-specific initializations.
+
+Invoked non-interactively
+.........................
+
+When Bash is started non-interactively, to run a shell script, for
+example, it looks for the variable 'BASH_ENV' in the environment,
+expands its value if it appears there, and uses the expanded value as
+the name of a file to read and execute. Bash behaves as if the
+following command were executed:
+ if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
+but the value of the 'PATH' variable is not used to search for the
+filename.
+
+ As noted above, if a non-interactive shell is invoked with the
+'--login' option, Bash attempts to read and execute commands from the
+login shell startup files.
+
+Invoked with name 'sh'
+......................
+
+If Bash is invoked with the name 'sh', it tries to mimic the startup
+behavior of historical versions of 'sh' as closely as possible, while
+conforming to the POSIX standard as well.
+
+ When invoked as an interactive login shell, or as a non-interactive
+shell with the '--login' option, it first attempts to read and execute
+commands from '/etc/profile' and '~/.profile', in that order. The
+'--noprofile' option may be used to inhibit this behavior. When invoked
+as an interactive shell with the name 'sh', Bash looks for the variable
+'ENV', expands its value if it is defined, and uses the expanded value
+as the name of a file to read and execute. Since a shell invoked as
+'sh' does not attempt to read and execute commands from any other
+startup files, the '--rcfile' option has no effect. A non-interactive
+shell invoked with the name 'sh' does not attempt to read any other
+startup files.
+
+ When invoked as 'sh', Bash enters POSIX mode after the startup files
+are read.
+
+Invoked in POSIX mode
+.....................
+
+When Bash is started in POSIX mode, as with the '--posix' command line
+option, it follows the POSIX standard for startup files. In this mode,
+interactive shells expand the 'ENV' variable and commands are read and
+executed from the file whose name is the expanded value. No other
+startup files are read.
+
+Invoked by remote shell daemon
+..............................
+
+Bash attempts to determine when it is being run with its standard input
+connected to a network connection, as when executed by the remote shell
+daemon, usually 'rshd', or the secure shell daemon 'sshd'. If Bash
+determines it is being run in this fashion, it reads and executes
+commands from '~/.bashrc', if that file exists and is readable. It will
+not do this if invoked as 'sh'. The '--norc' option may be used to
+inhibit this behavior, and the '--rcfile' option may be used to force
+another file to be read, but neither 'rshd' nor 'sshd' generally invoke
+the shell with those options or allow them to be specified.
+
+Invoked with unequal effective and real UID/GIDs
+................................................
+
+If Bash is started with the effective user (group) id not equal to the
+real user (group) id, and the '-p' option is not supplied, no startup
+files are read, shell functions are not inherited from the environment,
+the 'SHELLOPTS', 'BASHOPTS', 'CDPATH', and 'GLOBIGNORE' variables, if
+they appear in the environment, are ignored, and the effective user id
+is set to the real user id. If the '-p' option is supplied at
+invocation, the startup behavior is the same, but the effective user id
+is not reset.
+
+
+File: bash.info, Node: Interactive Shells, Next: Bash Conditional Expressions, Prev: Bash Startup Files, Up: Bash Features
+
+6.3 Interactive Shells
+======================
+
+* Menu:
+
+* What is an Interactive Shell?:: What determines whether a shell is Interactive.
+* Is this Shell Interactive?:: How to tell if a shell is interactive.
+* Interactive Shell Behavior:: What changes in a interactive shell?
+
+
+File: bash.info, Node: What is an Interactive Shell?, Next: Is this Shell Interactive?, Up: Interactive Shells
+
+6.3.1 What is an Interactive Shell?
+-----------------------------------
+
+An interactive shell is one started without non-option arguments, unless
+'-s' is specified, without specifying the '-c' option, and whose input
+and error output are both connected to terminals (as determined by
+'isatty(3)'), or one started with the '-i' option.
+
+ An interactive shell generally reads from and writes to a user's
+terminal.
+
+ The '-s' invocation option may be used to set the positional
+parameters when an interactive shell is started.
+
+
+File: bash.info, Node: Is this Shell Interactive?, Next: Interactive Shell Behavior, Prev: What is an Interactive Shell?, Up: Interactive Shells
+
+6.3.2 Is this Shell Interactive?
+--------------------------------
+
+To determine within a startup script whether or not Bash is running
+interactively, test the value of the '-' special parameter. It contains
+'i' when the shell is interactive. For example:
+
+ case "$-" in
+ *i*) echo This shell is interactive ;;
+ *) echo This shell is not interactive ;;
+ esac
+
+ Alternatively, startup scripts may examine the variable 'PS1'; it is
+unset in non-interactive shells, and set in interactive shells. Thus:
+
+ if [ -z "$PS1" ]; then
+ echo This shell is not interactive
+ else
+ echo This shell is interactive
+ fi
+
+
+File: bash.info, Node: Interactive Shell Behavior, Prev: Is this Shell Interactive?, Up: Interactive Shells
+
+6.3.3 Interactive Shell Behavior
+--------------------------------
+
+When the shell is running interactively, it changes its behavior in
+several ways.
+
+ 1. Startup files are read and executed as described in *note Bash
+ Startup Files::.
+
+ 2. Job Control (*note Job Control::) is enabled by default. When job
+ control is in effect, Bash ignores the keyboard-generated job
+ control signals 'SIGTTIN', 'SIGTTOU', and 'SIGTSTP'.
+
+ 3. Bash expands and displays 'PS1' before reading the first line of a
+ command, and expands and displays 'PS2' before reading the second
+ and subsequent lines of a multi-line command. Bash expands and
+ displays 'PS0' after it reads a command but before executing it.
+ See *note Controlling the Prompt::, for a complete list of prompt
+ string escape sequences.
+
+ 4. Bash executes the value of the 'PROMPT_COMMAND' variable as a
+ command before printing the primary prompt, '$PS1' (*note Bash
+ Variables::).
+
+ 5. Readline (*note Command Line Editing::) is used to read commands
+ from the user's terminal.
+
+ 6. Bash inspects the value of the 'ignoreeof' option to 'set -o'
+ instead of exiting immediately when it receives an 'EOF' on its
+ standard input when reading a command (*note The Set Builtin::).
+
+ 7. Command history (*note Bash History Facilities::) and history
+ expansion (*note History Interaction::) are enabled by default.
+ Bash will save the command history to the file named by '$HISTFILE'
+ when a shell with history enabled exits.
+
+ 8. Alias expansion (*note Aliases::) is performed by default.
+
+ 9. In the absence of any traps, Bash ignores 'SIGTERM' (*note
+ Signals::).
+
+ 10. In the absence of any traps, 'SIGINT' is caught and handled (*note
+ Signals::). 'SIGINT' will interrupt some shell builtins.
+
+ 11. An interactive login shell sends a 'SIGHUP' to all jobs on exit if
+ the 'huponexit' shell option has been enabled (*note Signals::).
+
+ 12. The '-n' invocation option is ignored, and 'set -n' has no effect
+ (*note The Set Builtin::).
+
+ 13. Bash will check for mail periodically, depending on the values of
+ the 'MAIL', 'MAILPATH', and 'MAILCHECK' shell variables (*note Bash
+ Variables::).
+
+ 14. Expansion errors due to references to unbound shell variables
+ after 'set -u' has been enabled will not cause the shell to exit
+ (*note The Set Builtin::).
+
+ 15. The shell will not exit on expansion errors caused by VAR being
+ unset or null in '${VAR:?WORD}' expansions (*note Shell Parameter
+ Expansion::).
+
+ 16. Redirection errors encountered by shell builtins will not cause
+ the shell to exit.
+
+ 17. When running in POSIX mode, a special builtin returning an error
+ status will not cause the shell to exit (*note Bash POSIX Mode::).
+
+ 18. A failed 'exec' will not cause the shell to exit (*note Bourne
+ Shell Builtins::).
+
+ 19. Parser syntax errors will not cause the shell to exit.
+
+ 20. Simple spelling correction for directory arguments to the 'cd'
+ builtin is enabled by default (see the description of the 'cdspell'
+ option to the 'shopt' builtin in *note The Shopt Builtin::).
+
+ 21. The shell will check the value of the 'TMOUT' variable and exit if
+ a command is not read within the specified number of seconds after
+ printing '$PS1' (*note Bash Variables::).
+
+
+File: bash.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic, Prev: Interactive Shells, Up: Bash Features
+
+6.4 Bash Conditional Expressions
+================================
+
+Conditional expressions are used by the '[[' compound command and the
+'test' and '[' builtin commands. The 'test' and '[' commands determine
+their behavior based on the number of arguments; see the descriptions of
+those commands for any other command-specific actions.
+
+ Expressions may be unary or binary, and are formed from the following
+primaries. Unary expressions are often used to examine the status of a
+file. There are string operators and numeric comparison operators as
+well. Bash handles several filenames specially when they are used in
+expressions. If the operating system on which Bash is running provides
+these special files, Bash will use them; otherwise it will emulate them
+internally with this behavior: If the FILE argument to one of the
+primaries is of the form '/dev/fd/N', then file descriptor N is checked.
+If the FILE argument to one of the primaries is one of '/dev/stdin',
+'/dev/stdout', or '/dev/stderr', file descriptor 0, 1, or 2,
+respectively, is checked.
+
+ When used with '[[', the '<' and '>' operators sort lexicographically
+using the current locale. The 'test' command uses ASCII ordering.
+
+ Unless otherwise specified, primaries that operate on files follow
+symbolic links and operate on the target of the link, rather than the
+link itself.
+
+'-a FILE'
+ True if FILE exists.
+
+'-b FILE'
+ True if FILE exists and is a block special file.
+
+'-c FILE'
+ True if FILE exists and is a character special file.
+
+'-d FILE'
+ True if FILE exists and is a directory.
+
+'-e FILE'
+ True if FILE exists.
+
+'-f FILE'
+ True if FILE exists and is a regular file.
+
+'-g FILE'
+ True if FILE exists and its set-group-id bit is set.
+
+'-h FILE'
+ True if FILE exists and is a symbolic link.
+
+'-k FILE'
+ True if FILE exists and its "sticky" bit is set.
+
+'-p FILE'
+ True if FILE exists and is a named pipe (FIFO).
+
+'-r FILE'
+ True if FILE exists and is readable.
+
+'-s FILE'
+ True if FILE exists and has a size greater than zero.
+
+'-t FD'
+ True if file descriptor FD is open and refers to a terminal.
+
+'-u FILE'
+ True if FILE exists and its set-user-id bit is set.
+
+'-w FILE'
+ True if FILE exists and is writable.
+
+'-x FILE'
+ True if FILE exists and is executable.
+
+'-G FILE'
+ True if FILE exists and is owned by the effective group id.
+
+'-L FILE'
+ True if FILE exists and is a symbolic link.
+
+'-N FILE'
+ True if FILE exists and has been modified since it was last read.
+
+'-O FILE'
+ True if FILE exists and is owned by the effective user id.
+
+'-S FILE'
+ True if FILE exists and is a socket.
+
+'FILE1 -ef FILE2'
+ True if FILE1 and FILE2 refer to the same device and inode numbers.
+
+'FILE1 -nt FILE2'
+ True if FILE1 is newer (according to modification date) than FILE2,
+ or if FILE1 exists and FILE2 does not.
+
+'FILE1 -ot FILE2'
+ True if FILE1 is older than FILE2, or if FILE2 exists and FILE1
+ does not.
+
+'-o OPTNAME'
+ True if the shell option OPTNAME is enabled. The list of options
+ appears in the description of the '-o' option to the 'set' builtin
+ (*note The Set Builtin::).
+
+'-v VARNAME'
+ True if the shell variable VARNAME is set (has been assigned a
+ value).
+
+'-R VARNAME'
+ True if the shell variable VARNAME is set and is a name reference.
+
+'-z STRING'
+ True if the length of STRING is zero.
+
+'-n STRING'
+'STRING'
+ True if the length of STRING is non-zero.
+
+'STRING1 == STRING2'
+'STRING1 = STRING2'
+ True if the strings are equal. When used with the '[[' command,
+ this performs pattern matching as described above (*note
+ Conditional Constructs::).
+
+ '=' should be used with the 'test' command for POSIX conformance.
+
+'STRING1 != STRING2'
+ True if the strings are not equal.
+
+'STRING1 < STRING2'
+ True if STRING1 sorts before STRING2 lexicographically.
+
+'STRING1 > STRING2'
+ True if STRING1 sorts after STRING2 lexicographically.
+
+'ARG1 OP ARG2'
+ 'OP' is one of '-eq', '-ne', '-lt', '-le', '-gt', or '-ge'. These
+ arithmetic binary operators return true if ARG1 is equal to, not
+ equal to, less than, less than or equal to, greater than, or
+ greater than or equal to ARG2, respectively. ARG1 and ARG2 may be
+ positive or negative integers. When used with the '[[' command,
+ ARG1 and ARG2 are evaluated as arithmetic expressions (*note Shell
+ Arithmetic::).
+
+
+File: bash.info, Node: Shell Arithmetic, Next: Aliases, Prev: Bash Conditional Expressions, Up: Bash Features
+
+6.5 Shell Arithmetic
+====================
+
+The shell allows arithmetic expressions to be evaluated, as one of the
+shell expansions or by using the '((' compound command, the 'let'
+builtin, or the '-i' option to the 'declare' builtin.
+
+ Evaluation is done in fixed-width integers with no check for
+overflow, though division by 0 is trapped and flagged as an error. The
+operators and their precedence, associativity, and values are the same
+as in the C language. The following list of operators is grouped into
+levels of equal-precedence operators. The levels are listed in order of
+decreasing precedence.
+
+'ID++ ID--'
+ variable post-increment and post-decrement
+
+'++ID --ID'
+ variable pre-increment and pre-decrement
+
+'- +'
+ unary minus and plus
+
+'! ~'
+ logical and bitwise negation
+
+'**'
+ exponentiation
+
+'* / %'
+ multiplication, division, remainder
+
+'+ -'
+ addition, subtraction
+
+'<< >>'
+ left and right bitwise shifts
+
+'<= >= < >'
+ comparison
+
+'== !='
+ equality and inequality
+
+'&'
+ bitwise AND
+
+'^'
+ bitwise exclusive OR
+
+'|'
+ bitwise OR
+
+'&&'
+ logical AND
+
+'||'
+ logical OR
+
+'expr ? expr : expr'
+ conditional operator
+
+'= *= /= %= += -= <<= >>= &= ^= |='
+ assignment
+
+'expr1 , expr2'
+ comma
+
+ Shell variables are allowed as operands; parameter expansion is
+performed before the expression is evaluated. Within an expression,
+shell variables may also be referenced by name without using the
+parameter expansion syntax. A shell variable that is null or unset
+evaluates to 0 when referenced by name without using the parameter
+expansion syntax. The value of a variable is evaluated as an arithmetic
+expression when it is referenced, or when a variable which has been
+given the INTEGER attribute using 'declare -i' is assigned a value. A
+null value evaluates to 0. A shell variable need not have its INTEGER
+attribute turned on to be used in an expression.
+
+ Constants with a leading 0 are interpreted as octal numbers. A
+leading '0x' or '0X' denotes hexadecimal. Otherwise, numbers take the
+form [BASE'#']N, where the optional BASE is a decimal number between 2
+and 64 representing the arithmetic base, and N is a number in that base.
+If BASE'#' is omitted, then base 10 is used. When specifying N, the
+digits greater than 9 are represented by the lowercase letters, the
+uppercase letters, '@', and '_', in that order. If BASE is less than or
+equal to 36, lowercase and uppercase letters may be used interchangeably
+to represent numbers between 10 and 35.
+
+ Operators are evaluated in order of precedence. Sub-expressions in
+parentheses are evaluated first and may override the precedence rules
+above.
+
+
+File: bash.info, Node: Aliases, Next: Arrays, Prev: Shell Arithmetic, Up: Bash Features
+
+6.6 Aliases
+===========
+
+ALIASES allow a string to be substituted for a word when it is used as
+the first word of a simple command. The shell maintains a list of
+aliases that may be set and unset with the 'alias' and 'unalias' builtin
+commands.
+
+ The first word of each simple command, if unquoted, is checked to see
+if it has an alias. If so, that word is replaced by the text of the
+alias. The characters '/', '$', '`', '=' and any of the shell
+metacharacters or quoting characters listed above may not appear in an
+alias name. The replacement text may contain any valid shell input,
+including shell metacharacters. The first word of the replacement text
+is tested for aliases, but a word that is identical to an alias being
+expanded is not expanded a second time. This means that one may alias
+'ls' to '"ls -F"', for instance, and Bash does not try to recursively
+expand the replacement text. If the last character of the alias value
+is a BLANK, then the next command word following the alias is also
+checked for alias expansion.
+
+ Aliases are created and listed with the 'alias' command, and removed
+with the 'unalias' command.
+
+ There is no mechanism for using arguments in the replacement text, as
+in 'csh'. If arguments are needed, a shell function should be used
+(*note Shell Functions::).
+
+ Aliases are not expanded when the shell is not interactive, unless
+the 'expand_aliases' shell option is set using 'shopt' (*note The Shopt
+Builtin::).
+
+ The rules concerning the definition and use of aliases are somewhat
+confusing. Bash always reads at least one complete line of input, and
+all lines that make up a compound command, before executing any of the
+commands on that line or the compound command. 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 command. As a
+consequence, aliases defined in a function are not available until after
+that function is executed. To be safe, always put alias definitions on
+a separate line, and do not use 'alias' in compound commands.
+
+ For almost every purpose, shell functions are preferred over aliases.
+
+
+File: bash.info, Node: Arrays, Next: The Directory Stack, Prev: Aliases, Up: Bash Features
+
+6.7 Arrays
+==========
+
+Bash provides one-dimensional indexed and associative array variables.
+Any variable may be used as an indexed array; the 'declare' builtin will
+explicitly declare an array. There is no maximum limit on the size of
+an array, nor any requirement that members be indexed or assigned
+contiguously. Indexed arrays are referenced using integers (including
+arithmetic expressions (*note Shell Arithmetic::)) and are zero-based;
+associative arrays use arbitrary strings. Unless otherwise noted,
+indexed array indices must be non-negative integers.
+
+ An indexed array is created automatically if any variable is assigned
+to using the syntax
+ NAME[SUBSCRIPT]=VALUE
+
+The SUBSCRIPT is treated as an arithmetic expression that must evaluate
+to a number. To explicitly declare an array, use
+ declare -a NAME
+The syntax
+ declare -a NAME[SUBSCRIPT]
+is also accepted; the SUBSCRIPT is ignored.
+
+Associative arrays are created using
+ declare -A NAME.
+
+ Attributes may be specified for an array variable using the 'declare'
+and 'readonly' builtins. Each attribute applies to all members of an
+array.
+
+ Arrays are assigned to using compound assignments of the form
+ NAME=(VALUE1 VALUE2 ... )
+where each VALUE is of the form '[SUBSCRIPT]='STRING. Indexed array
+assignments do not require anything but STRING. When assigning to
+indexed arrays, if the optional subscript is supplied, that index is
+assigned to; otherwise the index of the element assigned is the last
+index assigned to by the statement plus one. Indexing starts at zero.
+
+ When assigning to an associative array, the subscript is required.
+
+ This syntax is also accepted by the 'declare' builtin. Individual
+array elements may be assigned to using the 'NAME[SUBSCRIPT]=VALUE'
+syntax introduced above.
+
+ When assigning to an indexed array, if NAME is subscripted by a
+negative number, that number is interpreted as relative to one greater
+than the maximum index of NAME, so negative indices count back from the
+end of the array, and an index of -1 references the last element.
+
+ Any element of an array may be referenced using '${NAME[SUBSCRIPT]}'.
+The braces are required to avoid conflicts with the shell's filename
+expansion operators. If the SUBSCRIPT is '@' or '*', the word expands
+to all members of the array NAME. These subscripts differ only when the
+word appears within double quotes. If the word is double-quoted,
+'${NAME[*]}' expands to a single word with the value of each array
+member separated by the first character of the 'IFS' variable, and
+'${NAME[@]}' expands each element of NAME to a separate word. When
+there are no array members, '${NAME[@]}' expands to nothing. If the
+double-quoted expansion occurs within a word, the expansion of the first
+parameter is joined with the beginning part of the original word, and
+the expansion of the last parameter is joined with the last part of the
+original word. This is analogous to the expansion of the special
+parameters '@' and '*'. '${#NAME[SUBSCRIPT]}' expands to the length of
+'${NAME[SUBSCRIPT]}'. If SUBSCRIPT is '@' or '*', the expansion is the
+number of elements in the array. If the SUBSCRIPT used to reference an
+element of an indexed array evaluates to a number less than zero, it is
+interpreted as relative to one greater than the maximum index of the
+array, so negative indices count back from the end of the array, and an
+index of -1 refers to the last element.
+
+ Referencing an array variable without a subscript is equivalent to
+referencing with a subscript of 0. Any reference to a variable using a
+valid subscript is legal, and 'bash' will create an array if necessary.
+
+ An array variable is considered set if a subscript has been assigned
+a value. The null string is a valid value.
+
+ It is possible to obtain the keys (indices) of an array as well as
+the values. ${!NAME[@]} and ${!NAME[*]} expand to the indices assigned
+in array variable NAME. The treatment when in double quotes is similar
+to the expansion of the special parameters '@' and '*' within double
+quotes.
+
+ The 'unset' builtin is used to destroy arrays. 'unset
+NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT.
+Negative subscripts to indexed arrays are interpreted as described
+above. Unsetting the last element of an array variable does not unset
+the variable. 'unset NAME', where NAME is an array, removes the entire
+array. A subscript of '*' or '@' also removes the entire array.
+
+ When using a variable name with a subscript as an argument to a
+command, such as with 'unset', without using the word expansion syntax
+described above, the argument is subject to the shell's filename
+expansion. If filename expansion is not desired, the argument should be
+quoted.
+
+ The 'declare', 'local', and 'readonly' builtins each accept a '-a'
+option to specify an indexed array and a '-A' option to specify an
+associative array. If both options are supplied, '-A' takes precedence.
+The 'read' builtin accepts a '-a' option to assign a list of words read
+from the standard input to an array, and can read values from the
+standard input into individual array elements. The 'set' and 'declare'
+builtins display array values in a way that allows them to be reused as
+input.
+
+
+File: bash.info, Node: The Directory Stack, Next: Controlling the Prompt, Prev: Arrays, Up: Bash Features
+
+6.8 The Directory Stack
+=======================
+
+* Menu:
+
+* Directory Stack Builtins:: Bash builtin commands to manipulate
+ the directory stack.
+
+The directory stack is a list of recently-visited directories. The
+'pushd' builtin adds directories to the stack as it changes the current
+directory, and the 'popd' builtin removes specified directories from the
+stack and changes the current directory to the directory removed. The
+'dirs' builtin displays the contents of the directory stack. The
+current directory is always the "top" of the directory stack.
+
+ The contents of the directory stack are also visible as the value of
+the 'DIRSTACK' shell variable.
+
+
+File: bash.info, Node: Directory Stack Builtins, Up: The Directory Stack
+
+6.8.1 Directory Stack Builtins
+------------------------------
+
+'dirs'
+ dirs [-clpv] [+N | -N]
+
+ Display the list of currently remembered directories. Directories
+ are added to the list with the 'pushd' command; the 'popd' command
+ removes directories from the list. The current directory is always
+ the first directory in the stack.
+
+ '-c'
+ Clears the directory stack by deleting all of the elements.
+ '-l'
+ Produces a listing using full pathnames; the default listing
+ format uses a tilde to denote the home directory.
+ '-p'
+ Causes 'dirs' to print the directory stack with one entry per
+ line.
+ '-v'
+ Causes 'dirs' to print the directory stack with one entry per
+ line, prefixing each entry with its index in the stack.
+ '+N'
+ Displays the Nth directory (counting from the left of the list
+ printed by 'dirs' when invoked without options), starting with
+ zero.
+ '-N'
+ Displays the Nth directory (counting from the right of the
+ list printed by 'dirs' when invoked without options), starting
+ with zero.
+
+'popd'
+ popd [-n] [+N | -N]
+
+ When no arguments are given, 'popd' removes the top directory from
+ the stack and performs a 'cd' to the new top directory. The
+ elements are numbered from 0 starting at the first directory listed
+ with 'dirs'; that is, 'popd' is equivalent to 'popd +0'.
+
+ '-n'
+ Suppresses the normal change of directory when removing
+ directories from the stack, so that only the stack is
+ manipulated.
+ '+N'
+ Removes the Nth directory (counting from the left of the list
+ printed by 'dirs'), starting with zero.
+ '-N'
+ Removes the Nth directory (counting from the right of the list
+ printed by 'dirs'), starting with zero.
+
+'pushd'
+ pushd [-n] [+N | -N | DIR]
+
+ Save the current directory on the top of the directory stack and
+ then 'cd' to DIR. With no arguments, 'pushd' exchanges the top two
+ directories and makes the new top the current directory.
+
+ '-n'
+ Suppresses the normal change of directory when rotating or
+ adding directories to the stack, so that only the stack is
+ manipulated.
+ '+N'
+ Brings the Nth directory (counting from the left of the list
+ printed by 'dirs', starting with zero) to the top of the list
+ by rotating the stack.
+ '-N'
+ Brings the Nth directory (counting from the right of the list
+ printed by 'dirs', starting with zero) to the top of the list
+ by rotating the stack.
+ 'DIR'
+ Makes DIR be the top of the stack, making it the new current
+ directory as if it had been supplied as an argument to the
+ 'cd' builtin.
+
+
+File: bash.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features
+
+6.9 Controlling the Prompt
+==========================
+
+The value of the variable 'PROMPT_COMMAND' is examined just before Bash
+prints each primary prompt. If 'PROMPT_COMMAND' is set and has a
+non-null value, then the value is executed just as if it had been typed
+on the command line.
+
+ In addition, the following table describes the special characters
+which can appear in the prompt variables 'PS0', 'PS1', 'PS2', and 'PS4':
+
+'\a'
+ A bell character.
+'\d'
+ The date, in "Weekday Month Date" format (e.g., "Tue May 26").
+'\D{FORMAT}'
+ The FORMAT is passed to 'strftime'(3) and the result is inserted
+ into the prompt string; an empty FORMAT results in a
+ locale-specific time representation. The braces are required.
+'\e'
+ An escape character.
+'\h'
+ The hostname, up to the first '.'.
+'\H'
+ The hostname.
+'\j'
+ The number of jobs currently managed by the shell.
+'\l'
+ The basename of the shell's terminal device name.
+'\n'
+ A newline.
+'\r'
+ A carriage return.
+'\s'
+ The name of the shell, the basename of '$0' (the portion following
+ the final slash).
+'\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 am/pm format.
+'\A'
+ The time, in 24-hour HH:MM format.
+'\u'
+ The username of the current user.
+'\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, with '$HOME' abbreviated with a
+ tilde (uses the '$PROMPT_DIRTRIM' variable).
+'\W'
+ The basename of '$PWD', with '$HOME' abbreviated with a tilde.
+'\!'
+ The history number of this command.
+'\#'
+ The command number of this command.
+'\$'
+ If the effective uid is 0, '#', otherwise '$'.
+'\NNN'
+ The character whose ASCII code is the octal value NNN.
+'\\'
+ A backslash.
+'\['
+ Begin a sequence of non-printing characters. This could be used to
+ embed a terminal control sequence into the prompt.
+'\]'
+ End a sequence of non-printing characters.
+
+ 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 (*note Bash History
+Facilities::), while the command number is the position in the sequence
+of commands executed during the current shell session.
+
+ After the string is decoded, it is expanded via parameter expansion,
+command substitution, arithmetic expansion, and quote removal, subject
+to the value of the 'promptvars' shell option (*note The Shopt
+Builtin::).
+
+
+File: bash.info, Node: The Restricted Shell, Next: Bash POSIX Mode, Prev: Controlling the Prompt, Up: Bash Features
+
+6.10 The Restricted Shell
+=========================
+
+If Bash is started with the name 'rbash', or the '--restricted' or '-r'
+option is supplied at invocation, the shell becomes restricted. A
+restricted shell is used to set up an environment more controlled than
+the standard shell. A restricted shell behaves identically to 'bash'
+with the exception that the following are disallowed or not performed:
+
+ * Changing directories with the 'cd' builtin.
+ * Setting or unsetting the values of the 'SHELL', 'PATH', 'ENV', or
+ 'BASH_ENV' variables.
+ * Specifying command names containing slashes.
+ * Specifying a filename containing a slash as an argument to the '.'
+ builtin command.
+ * Specifying a filename containing a slash as an argument to the '-p'
+ option to the 'hash' builtin command.
+ * Importing function definitions from the shell environment at
+ startup.
+ * Parsing the value of 'SHELLOPTS' from the shell environment at
+ startup.
+ * Redirecting output using the '>', '>|', '<>', '>&', '&>', and '>>'
+ redirection operators.
+ * Using the 'exec' builtin to replace the shell with another command.
+ * Adding or deleting builtin commands with the '-f' and '-d' options
+ to the 'enable' builtin.
+ * Using the 'enable' builtin command to enable disabled shell
+ builtins.
+ * Specifying the '-p' option to the 'command' builtin.
+ * Turning off restricted mode with 'set +r' or 'set +o restricted'.
+
+ These restrictions are enforced after any startup files are read.
+
+ When a command that is found to be a shell script is executed (*note
+Shell Scripts::), 'rbash' turns off any restrictions in the shell
+spawned to execute the script.
+
+
+File: bash.info, Node: Bash POSIX Mode, Prev: The Restricted Shell, Up: Bash Features
+
+6.11 Bash POSIX Mode
+====================
+
+Starting Bash with the '--posix' command-line option or executing 'set
+-o posix' while Bash is running will cause Bash to conform more closely
+to the POSIX standard by changing the behavior to match that specified
+by POSIX in areas where the Bash default differs.
+
+ When invoked as 'sh', Bash enters POSIX mode after reading the
+startup files.
+
+ The following list is what's changed when 'POSIX mode' is in effect:
+
+ 1. Bash ensures that the 'POSIXLY_CORRECT' variable is set.
+
+ 2. When a command in the hash table no longer exists, Bash will
+ re-search '$PATH' to find the new location. This is also available
+ with 'shopt -s checkhash'.
+
+ 3. The message printed by the job control code and builtins when a job
+ exits with a non-zero status is 'Done(status)'.
+
+ 4. The message printed by the job control code and builtins when a job
+ is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example,
+ 'SIGTSTP'.
+
+ 5. Alias expansion is always enabled, even in non-interactive shells.
+
+ 6. Reserved words appearing in a context where reserved words are
+ recognized do not undergo alias expansion.
+
+ 7. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number
+ and '!!' to '!' are enabled, and parameter expansion is performed
+ on the values of 'PS1' and 'PS2' regardless of the setting of the
+ 'promptvars' option.
+
+ 8. The POSIX startup files are executed ('$ENV') rather than the
+ normal Bash files.
+
+ 9. Tilde expansion is only performed on assignments preceding a
+ command name, rather than on all assignment statements on the line.
+
+ 10. The default history file is '~/.sh_history' (this is the default
+ value of '$HISTFILE').
+
+ 11. Redirection operators do not perform filename expansion on the
+ word in the redirection unless the shell is interactive.
+
+ 12. Redirection operators do not perform word splitting on the word in
+ the redirection.
+
+ 13. Function names must be valid shell 'name's. That is, they may not
+ contain characters other than letters, digits, and underscores, and
+ may not start with a digit. Declaring a function with an invalid
+ name causes a fatal syntax error in non-interactive shells.
+
+ 14. Function names may not be the same as one of the POSIX special
+ builtins.
+
+ 15. POSIX special builtins are found before shell functions during
+ command lookup.
+
+ 16. When printing shell function definitions (e.g., by 'type'), Bash
+ does not print the 'function' keyword.
+
+ 17. Literal tildes that appear as the first character in elements of
+ the 'PATH' variable are not expanded as described above under *note
+ Tilde Expansion::.
+
+ 18. The 'time' reserved word may be used by itself as a command. When
+ used in this way, it displays timing statistics for the shell and
+ its completed children. The 'TIMEFORMAT' variable controls the
+ format of the timing information.
+
+ 19. When parsing and expanding a ${...} expansion that appears within
+ double quotes, single quotes are no longer special and cannot be
+ used to quote a closing brace or other special character, unless
+ the operator is one of those defined to perform pattern removal.
+ In this case, they do not have to appear as matched pairs.
+
+ 20. The parser does not recognize 'time' as a reserved word if the
+ next token begins with a '-'.
+
+ 21. The '!' character does not introduce history expansion within a
+ double-quoted string, even if the 'histexpand' option is enabled.
+
+ 22. 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.
+
+ 23. 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.
+
+ 24. A non-interactive shell exits with an error status if a variable
+ assignment error occurs in an assignment statement preceding a
+ special builtin, but not with any other simple command.
+
+ 25. A non-interactive shell exits with an error status if the
+ iteration variable in a 'for' statement or the selection variable
+ in a 'select' statement is a readonly variable.
+
+ 26. Non-interactive shells exit if FILENAME in '.' FILENAME is not
+ found.
+
+ 27. Non-interactive shells exit if a syntax error in an arithmetic
+ expansion results in an invalid expression.
+
+ 28. Non-interactive shells exit if a parameter expansion error occurs.
+
+ 29. Non-interactive shells exit if there is a syntax error in a script
+ read with the '.' or 'source' builtins, or in a string processed by
+ the 'eval' builtin.
+
+ 30. Process substitution is not available.
+
+ 31. While variable indirection is available, it may not be applied to
+ the '#' and '?' special parameters.
+
+ 32. When expanding the '*' special parameter in a pattern context
+ where the expansion is double-quoted does not treat the '$*' as if
+ it were double-quoted.
+
+ 33. Assignment statements preceding POSIX special builtins persist in
+ the shell environment after the builtin completes.
+
+ 34. 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.
+
+ 35. The 'command' builtin does not prevent builtins that take
+ assignment statements as arguments from expanding them as
+ assignment statements; when not in POSIX mode, assignment builtins
+ lose their assignment statement expansion properties when preceded
+ by 'command'.
+
+ 36. The 'bg' builtin uses the required format to describe each job
+ placed in the background, which does not include an indication of
+ whether the job is the current or previous job.
+
+ 37. The output of 'kill -l' prints all the signal names on a single
+ line, separated by spaces, without the 'SIG' prefix.
+
+ 38. The 'kill' builtin does not accept signal names with a 'SIG'
+ prefix.
+
+ 39. The 'export' and 'readonly' builtin commands display their output
+ in the format required by POSIX.
+
+ 40. The 'trap' builtin displays signal names without the leading
+ 'SIG'.
+
+ 41. The 'trap' builtin doesn't check the first argument for a possible
+ signal specification and revert the signal handling to the original
+ disposition if it is, unless that argument consists solely of
+ digits and is a valid signal number. If users want to reset the
+ handler for a given signal to the original disposition, they should
+ use '-' as the first argument.
+
+ 42. The '.' and 'source' builtins do not search the current directory
+ for the filename argument if it is not found by searching 'PATH'.
+
+ 43. Enabling POSIX mode has the effect of setting the
+ 'inherit_errexit' option, so subshells spawned to execute command
+ substitutions inherit the value of the '-e' option from the parent
+ shell. When the 'inherit_errexit' option is not enabled, Bash
+ clears the '-e' option in such subshells.
+
+ 44. Enabling POSIX mode has the effect of setting the 'shift_verbose'
+ option, so numeric arguments to 'shift' that exceed the number of
+ positional parameters will result in an error message.
+
+ 45. When the 'alias' builtin displays alias definitions, it does not
+ display them with a leading 'alias ' unless the '-p' option is
+ supplied.
+
+ 46. When the 'set' builtin is invoked without options, it does not
+ display shell function names and definitions.
+
+ 47. When the 'set' builtin is invoked without options, it displays
+ variable values without quotes, unless they contain shell
+ metacharacters, even if the result contains nonprinting characters.
+
+ 48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname
+ constructed from '$PWD' and the directory name supplied as an
+ argument does not refer to an existing directory, 'cd' will fail
+ instead of falling back to PHYSICAL mode.
+
+ 49. When the 'cd' builtin cannot change a directory because the length
+ of the pathname constructed from '$PWD' and the directory name
+ supplied as an argument exceeds PATH_MAX when all symbolic links
+ are expanded, 'cd' will fail instead of attempting to use only the
+ supplied directory name.
+
+ 50. The 'pwd' builtin verifies that the value it prints is the same as
+ the current directory, even if it is not asked to check the file
+ system with the '-P' option.
+
+ 51. When listing the history, the 'fc' builtin does not include an
+ indication of whether or not a history entry has been modified.
+
+ 52. The default editor used by 'fc' is 'ed'.
+
+ 53. The 'type' and 'command' builtins will not report a non-executable
+ file as having been found, though the shell will attempt to execute
+ such a file if it is the only so-named file found in '$PATH'.
+
+ 54. The 'vi' editing mode will invoke the 'vi' editor directly when
+ the 'v' command is run, instead of checking '$VISUAL' and
+ '$EDITOR'.
+
+ 55. When the 'xpg_echo' option is enabled, Bash does not attempt to
+ interpret any arguments to 'echo' as options. Each argument is
+ displayed, after escape characters are converted.
+
+ 56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
+ and '-f' options.
+
+ 57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not
+ interrupt the 'wait' builtin and cause it to return immediately.
+ The trap command is run once for each child that exits.
+
+ 58. The 'read' builtin may be interrupted by a signal for which a trap
+ has been set. If Bash receives a trapped signal while executing
+ 'read', the trap handler executes and 'read' returns an exit status
+ greater than 128.
+
+ 59. Bash removes an exited background process's status from the list
+ of such statuses after the 'wait' builtin is used to obtain it.
+
+ There is other POSIX behavior that Bash does not implement by default
+even when in POSIX mode. Specifically:
+
+ 1. The 'fc' builtin checks '$EDITOR' as a program to edit history
+ entries if 'FCEDIT' is unset, rather than defaulting directly to
+ 'ed'. 'fc' uses 'ed' if 'EDITOR' is unset.
+
+ 2. As noted above, Bash requires the 'xpg_echo' option to be enabled
+ for the 'echo' builtin to be fully conformant.
+
+ Bash can be configured to be POSIX-conformant by default, by
+specifying the '--enable-strict-posix-default' to 'configure' when
+building (*note Optional Features::).
+
+
+File: bash.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top
+
+7 Job Control
+*************
+
+This chapter discusses what job control is, how it works, and how Bash
+allows you to access its facilities.
+
+* Menu:
+
+* Job Control Basics:: How job control works.
+* Job Control Builtins:: Bash builtin commands used to interact
+ with job control.
+* Job Control Variables:: Variables Bash uses to customize job
+ control.
+
+
+File: bash.info, Node: Job Control Basics, Next: Job Control Builtins, Up: Job Control
+
+7.1 Job Control Basics
+======================
+
+Job control refers to the ability to selectively stop (suspend) the
+execution of processes and continue (resume) their execution at a later
+point. A user typically employs this facility via an interactive
+interface supplied jointly by the operating system kernel's terminal
+driver and Bash.
+
+ The shell associates a JOB with each pipeline. It keeps a table of
+currently executing jobs, which may be listed with the 'jobs' command.
+When Bash starts a job asynchronously, it prints a line that looks like:
+ [1] 25647
+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 JOB abstraction as the basis for job control.
+
+ To facilitate the implementation of the user interface to job
+control, the operating system maintains the notion of a current terminal
+process group ID. Members of this process group (processes whose
+process group ID is equal to the current terminal process group ID)
+receive keyboard-generated signals such as 'SIGINT'. These processes
+are said to be in the foreground. Background processes are those whose
+process group ID differs from the terminal's; such processes are immune
+to keyboard-generated signals. Only foreground processes are allowed to
+read from or, if the user so specifies with 'stty tostop', write to the
+terminal. Background processes which attempt to read from (write to
+when 'stty tostop' is in effect) the terminal are sent a 'SIGTTIN'
+('SIGTTOU') signal by the kernel's terminal driver, which, unless
+caught, suspends the process.
+
+ If the operating system on which Bash is running supports job
+control, Bash contains facilities to use it. Typing the SUSPEND
+character (typically '^Z', Control-Z) while a process is running causes
+that process to be stopped and returns control to Bash. Typing the
+DELAYED SUSPEND character (typically '^Y', Control-Y) causes the process
+to be stopped when it attempts to read input from the terminal, and
+control to be returned to Bash. The user then manipulates the state of
+this job, using the 'bg' command to continue it in the background, the
+'fg' command to continue it in the foreground, or the 'kill' command to
+kill it. A '^Z' takes effect immediately, and has the additional side
+effect of causing pending output and typeahead to be discarded.
+
+ There are a number of ways to refer to a job in the shell. The
+character '%' introduces a job specification (JOBSPEC).
+
+ Job number 'n' may be referred to as '%n'. The symbols '%%' and '%+'
+refer to the shell's notion of the current job, which is the last job
+stopped while it was in the foreground or started in the background. A
+single '%' (with no accompanying job specification) also refers to the
+current job. The previous job may be referenced using '%-'. If there
+is only a single job, '%+' and '%-' can both be used to refer to that
+job. In output pertaining to jobs (e.g., the output of the 'jobs'
+command), the current job is always flagged with a '+', and the previous
+job with a '-'.
+
+ A job may also be referred to using a prefix of the name used to
+start it, or using a substring that appears in its command line. For
+example, '%ce' refers to a stopped 'ce' job. Using '%?ce', on the other
+hand, refers to any job containing the string 'ce' in its command line.
+If the prefix or substring matches more than one job, Bash reports an
+error.
+
+ Simply naming a job can be used to bring it into the foreground: '%1'
+is a synonym for 'fg %1', bringing job 1 from the background into the
+foreground. Similarly, '%1 &' resumes job 1 in the background,
+equivalent to 'bg %1'
+
+ The shell learns immediately whenever a job changes state. Normally,
+Bash waits until it is about to print a prompt before reporting changes
+in a job's status so as to not interrupt any other output. If the '-b'
+option to the 'set' builtin is enabled, Bash reports such changes
+immediately (*note The Set Builtin::). Any trap on 'SIGCHLD' is
+executed for each child process that exits.
+
+ If an attempt to exit Bash is made while jobs are stopped, (or
+running, if the 'checkjobs' option is enabled - see *note The Shopt
+Builtin::), the shell prints a warning message, and if the 'checkjobs'
+option is enabled, lists the jobs and their statuses. The 'jobs'
+command may then be used to inspect their status. If a second attempt
+to exit is made without an intervening command, Bash does not print
+another warning, and any stopped jobs are terminated.
+
+ When the shell is waiting for a job or process using the 'wait'
+builtin, and job control is enabled, 'wait' will return when the job
+changes state. The '-f' option will force 'wait' to wait until the job
+or process terminates before returning.
+
+
+File: bash.info, Node: Job Control Builtins, Next: Job Control Variables, Prev: Job Control Basics, Up: Job Control
+
+7.2 Job Control Builtins
+========================
+
+'bg'
+ bg [JOBSPEC ...]
+
+ Resume each suspended job JOBSPEC in the background, as if it had
+ been started with '&'. If JOBSPEC 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
+ JOBSPEC was not found or specifies a job that was started without
+ job control.
+
+'fg'
+ fg [JOBSPEC]
+
+ Resume the job JOBSPEC in the foreground and make it the current
+ job. If JOBSPEC 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, JOBSPEC does not specify a valid job or JOBSPEC
+ specifies a job that was started without job control.
+
+'jobs'
+ jobs [-lnprs] [JOBSPEC]
+ jobs -x COMMAND [ARGUMENTS]
+
+ The first form lists the active jobs. The options have the
+ following meanings:
+
+ '-l'
+ List process IDs in addition to the normal information.
+
+ '-n'
+ Display information only about jobs that have changed status
+ since the user was last notified of their status.
+
+ '-p'
+ List only the process ID of the job's process group leader.
+
+ '-r'
+ Display only running jobs.
+
+ '-s'
+ Display only stopped jobs.
+
+ If JOBSPEC is given, output is restricted to information about that
+ job. If JOBSPEC is not supplied, the status of all jobs is listed.
+
+ If the '-x' option is supplied, 'jobs' replaces any JOBSPEC found
+ in COMMAND or ARGUMENTS with the corresponding process group ID,
+ and executes COMMAND, passing it ARGUMENTs, returning its exit
+ status.
+
+'kill'
+ kill [-s SIGSPEC] [-n SIGNUM] [-SIGSPEC] JOBSPEC or PID
+ kill -l|-L [EXIT_STATUS]
+
+ Send a signal specified by SIGSPEC or SIGNUM to the process named
+ by job specification JOBSPEC or process ID PID. SIGSPEC is either
+ a case-insensitive signal name such as 'SIGINT' (with or without
+ the 'SIG' prefix) or a signal number; SIGNUM is a signal number.
+ If SIGSPEC and SIGNUM are not present, 'SIGTERM' is used. The '-l'
+ option lists the signal names. If any arguments are supplied when
+ '-l' is given, the names of the signals corresponding to the
+ arguments are listed, and the return status is zero. EXIT_STATUS
+ is a number specifying a signal number or the exit status of a
+ process terminated by a signal. The '-L' option is equivalent to
+ '-l'. The return status is zero if at least one signal was
+ successfully sent, or non-zero if an error occurs or an invalid
+ option is encountered.
+
+'wait'
+ wait [-fn] [JOBSPEC or PID ...]
+
+ Wait until the child process specified by each process ID PID or
+ job specification JOBSPEC 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 the '-n' option is supplied, 'wait' waits for any job to
+ terminate and returns its exit status. If the '-f' option is
+ supplied, and job control is enabled, 'wait' forces each PID or
+ JOBSPEC to terminate before returning its status, intead of
+ returning when it changes status. If neither JOBSPEC nor PID
+ specifies an active child process of the shell, the return status
+ is 127.
+
+'disown'
+ disown [-ar] [-h] [JOBSPEC ... | PID ... ]
+
+ Without options, remove each JOBSPEC from the table of active jobs.
+ If the '-h' option is given, the job is not removed from the table,
+ but is marked so that 'SIGHUP' is not sent to the job if the shell
+ receives a 'SIGHUP'. If JOBSPEC is not present, and neither the
+ '-a' nor the '-r' option is supplied, the current job is used. If
+ no JOBSPEC is supplied, the '-a' option means to remove or mark all
+ jobs; the '-r' option without a JOBSPEC argument restricts
+ operation to running jobs.
+
+'suspend'
+ suspend [-f]
+
+ Suspend the execution of this shell until it receives a 'SIGCONT'
+ signal. A login shell cannot be suspended; the '-f' option can be
+ used to override this and force the suspension.
+
+ When job control is not active, the 'kill' and 'wait' builtins do not
+accept JOBSPEC arguments. They must be supplied process IDs.
+
+
+File: bash.info, Node: Job Control Variables, Prev: Job Control Builtins, Up: Job Control
+
+7.3 Job Control Variables
+=========================
+
+'auto_resume'
+ 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 'exact', the string supplied
+ must match the name of a stopped job exactly; if set to
+ 'substring', the string supplied needs to match a substring of the
+ name of a stopped job. The 'substring' value provides
+ functionality analogous to the '%?' job ID (*note Job Control
+ Basics::). 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 '%' job ID.
+
+
+File: bash.info, Node: Command Line Editing, Next: Using History Interactively, Prev: Job Control, Up: Top
+
+8 Command Line Editing
+**********************
+
+This chapter describes the basic features of the GNU command line
+editing interface. Command line editing is provided by the Readline
+library, which is used by several different programs, including Bash.
+Command line editing is enabled by default when using an interactive
+shell, unless the '--noediting' option is supplied at shell invocation.
+Line editing is also used when using the '-e' option to the 'read'
+builtin command (*note Bash Builtins::). By default, the line editing
+commands are similar to those of Emacs. A vi-style line editing
+interface is also available. Line editing can be enabled at any time
+using the '-o emacs' or '-o vi' options to the 'set' builtin command
+(*note The Set Builtin::), or disabled using the '+o emacs' or '+o vi'
+options to 'set'.
+
+* Menu:
+
+* Introduction and Notation:: Notation used in this text.
+* Readline Interaction:: The minimum set of commands for editing a line.
+* Readline Init File:: Customizing Readline from a user's view.
+* Bindable Readline Commands:: A description of most of the Readline commands
+ available for binding
+* Readline vi Mode:: A short description of how to make Readline
+ behave like the vi editor.
+* Programmable Completion:: How to specify the possible completions for
+ a specific command.
+* Programmable Completion Builtins:: Builtin commands to specify how to
+ complete arguments for a particular command.
+* A Programmable Completion Example:: An example shell function for
+ generating possible completions.
+
+
+File: bash.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing
+
+8.1 Introduction to Line Editing
+================================
+
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+ The text 'C-k' is read as 'Control-K' and describes the character
+produced when the <k> key is pressed while the Control key is depressed.
+
+ The text 'M-k' is read as 'Meta-K' and describes the character
+produced when the Meta key (if you have one) is depressed, and the <k>
+key is pressed. The Meta key is labeled <ALT> on many keyboards. On
+keyboards with two keys labeled <ALT> (usually to either side of the
+space bar), the <ALT> on the left side is generally set to work as a
+Meta key. The <ALT> key on the right may also be configured to work as
+a Meta key or may be configured as some other modifier, such as a
+Compose key for typing accented characters.
+
+ If you do not have a Meta or <ALT> key, or another key working as a
+Meta key, the identical keystroke can be generated by typing <ESC>
+_first_, and then typing <k>. Either process is known as "metafying"
+the <k> key.
+
+ The text 'M-C-k' is read as 'Meta-Control-k' and describes the
+character produced by "metafying" 'C-k'.
+
+ In addition, several keys have their own names. Specifically, <DEL>,
+<ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves when seen
+in this text, or in an init file (*note Readline Init File::). If your
+keyboard lacks a <LFD> key, typing <C-j> will produce the desired
+character. The <RET> key may be labeled <Return> or <Enter> on some
+keyboards.
+
+
+File: bash.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
+
+8.2 Readline Interaction
+========================
+
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled. The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line. Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections. Then, when you are satisfied with
+the line, you simply press <RET>. You do not have to be at the end of
+the line to press <RET>; the entire line is accepted regardless of the
+location of the cursor within the line.
+
+* Menu:
+
+* Readline Bare Essentials:: The least you need to know about Readline.
+* Readline Movement Commands:: Moving about the input line.
+* Readline Killing Commands:: How to delete text, and how to get it back!
+* Readline Arguments:: Giving numeric arguments to commands.
+* Searching:: Searching through previous lines.
+
+
+File: bash.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction
+
+8.2.1 Readline Bare Essentials
+------------------------------
+
+In order to enter characters into the line, simply type them. The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right. If you mistype a character, you can use your erase
+character to back up and delete the mistyped character.
+
+ Sometimes you may mistype a character, and not notice the error until
+you have typed several other characters. In that case, you can type
+'C-b' to move the cursor to the left, and then correct your mistake.
+Afterwards, you can move the cursor to the right with 'C-f'.
+
+ When you add text in the middle of a line, you will notice that
+characters to the right of the cursor are 'pushed over' to make room for
+the text that you have inserted. Likewise, when you delete text behind
+the cursor, characters to the right of the cursor are 'pulled back' to
+fill in the blank space created by the removal of the text. A list of
+the bare essentials for editing the text of an input line follows.
+
+'C-b'
+ Move back one character.
+'C-f'
+ Move forward one character.
+<DEL> or <Backspace>
+ Delete the character to the left of the cursor.
+'C-d'
+ Delete the character underneath the cursor.
+Printing characters
+ Insert the character into the line at the cursor.
+'C-_' or 'C-x C-u'
+ Undo the last editing command. You can undo all the way back to an
+ empty line.
+
+(Depending on your configuration, the <Backspace> key be set to delete
+the character to the left of the cursor and the <DEL> key set to delete
+the character underneath the cursor, like 'C-d', rather than the
+character to the left of the cursor.)
+
+
+File: bash.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
+
+8.2.2 Readline Movement Commands
+--------------------------------
+
+The above table describes the most basic keystrokes that you need in
+order to do editing of the input line. For your convenience, many other
+commands have been added in addition to 'C-b', 'C-f', 'C-d', and <DEL>.
+Here are some commands for moving more rapidly about the line.
+
+'C-a'
+ Move to the start of the line.
+'C-e'
+ Move to the end of the line.
+'M-f'
+ Move forward a word, where a word is composed of letters and
+ digits.
+'M-b'
+ Move backward a word.
+'C-l'
+ Clear the screen, reprinting the current line at the top.
+
+ Notice how 'C-f' moves forward a character, while 'M-f' moves forward
+a word. It is a loose convention that control keystrokes operate on
+characters while meta keystrokes operate on words.
+
+
+File: bash.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction
+
+8.2.3 Readline Killing Commands
+-------------------------------
+
+"Killing" text means to delete the text from the line, but to save it
+away for later use, usually by "yanking" (re-inserting) it back into the
+line. ('Cut' and 'paste' are more recent jargon for 'kill' and 'yank'.)
+
+ If the description for a command says that it 'kills' text, then you
+can be sure that you can get the text back in a different (or the same)
+place later.
+
+ When you use a kill command, the text is saved in a "kill-ring". Any
+number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all. The kill ring is not line
+specific; the text that you killed on a previously typed line is
+available to be yanked back later, when you are typing another line.
+
+ Here is the list of commands for killing text.
+
+'C-k'
+ Kill the text from the current cursor position to the end of the
+ line.
+
+'M-d'
+ 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 'M-f'.
+
+'M-<DEL>'
+ 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 'M-b'.
+
+'C-w'
+ Kill from the cursor to the previous whitespace. This is different
+ than 'M-<DEL>' because the word boundaries differ.
+
+ Here is how to "yank" the text back into the line. Yanking means to
+copy the most-recently-killed text from the kill buffer.
+
+'C-y'
+ Yank the most recently killed text back into the buffer at the
+ cursor.
+
+'M-y'
+ Rotate the kill-ring, and yank the new top. You can only do this
+ if the prior command is 'C-y' or 'M-y'.
+
+
+File: bash.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction
+
+8.2.4 Readline Arguments
+------------------------
+
+You can pass numeric arguments to Readline commands. Sometimes the
+argument acts as a repeat count, other times it is the sign of the
+argument that is significant. If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction. For example, to kill text back to the
+start of the line, you might type 'M-- C-k'.
+
+ The general way to pass numeric arguments to a command is to type
+meta digits before the command. If the first 'digit' typed is a minus
+sign ('-'), then the sign of the argument will be negative. Once you
+have typed one meta digit to get the argument started, you can type the
+remainder of the digits, and then the command. For example, to give the
+'C-d' command an argument of 10, you could type 'M-1 0 C-d', which will
+delete the next ten characters on the input line.
+
+
+File: bash.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction
+
+8.2.5 Searching for Commands in the History
+-------------------------------------------
+
+Readline provides commands for searching through the command history
+(*note Bash History Facilities::) for lines containing a specified
+string. There are two search modes: "incremental" and
+"non-incremental".
+
+ Incremental searches begin before the user has finished typing the
+search string. As each character of the search string is typed,
+Readline displays the next entry from the history matching the string
+typed so far. An incremental search requires only as many characters as
+needed to find the desired history entry. To search backward in the
+history for a particular string, type 'C-r'. Typing 'C-s' searches
+forward through the history. The characters present in the value of the
+'isearch-terminators' variable are used to terminate an incremental
+search. If that variable has not been assigned a value, the <ESC> and
+'C-J' characters will terminate an incremental search. 'C-g' will abort
+an incremental search and restore the original line. When the search is
+terminated, the history entry containing the search string becomes the
+current line.
+
+ To find other matching entries in the history list, type 'C-r' or
+'C-s' as appropriate. This will search backward or forward in the
+history for the next entry matching the search string typed so far. Any
+other key sequence bound to a Readline command will terminate the search
+and execute that command. For instance, a <RET> will terminate the
+search and accept the line, thereby executing the command from the
+history list. A movement command will terminate the search, make the
+last line found the current line, and begin editing.
+
+ Readline remembers the last incremental search string. If two 'C-r's
+are typed without any intervening characters defining a new search
+string, any remembered search string is used.
+
+ Non-incremental searches read the entire search string before
+starting to search for matching history lines. The search string may be
+typed by the user or be part of the contents of the current line.
+
+
+File: bash.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing
+
+8.3 Readline Init File
+======================
+
+Although the Readline library comes with a set of Emacs-like keybindings
+installed by default, it is possible to use a different set of
+keybindings. Any user can customize programs that use Readline by
+putting commands in an "inputrc" file, conventionally in his home
+directory. The name of this file is taken from the value of the shell
+variable 'INPUTRC'. If that variable is unset, the default is
+'~/.inputrc'. If that file does not exist or cannot be read, the
+ultimate default is '/etc/inputrc'.
+
+ When a program which uses the Readline library starts up, the init
+file is read, and the key bindings are set.
+
+ In addition, the 'C-x C-r' command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+* Menu:
+
+* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
+
+* Sample Init File:: An example inputrc file.
+
+
+File: bash.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File
+
+8.3.1 Readline Init File Syntax
+-------------------------------
+
+There are only a few basic constructs allowed in the Readline init file.
+Blank lines are ignored. Lines beginning with a '#' are comments.
+Lines beginning with a '$' indicate conditional constructs (*note
+Conditional Init Constructs::). Other lines denote variable settings
+and key bindings.
+
+Variable Settings
+ You can modify the run-time behavior of Readline by altering the
+ values of variables in Readline using the 'set' command within the
+ init file. The syntax is simple:
+
+ set VARIABLE VALUE
+
+ Here, for example, is how to change from the default Emacs-like key
+ binding to use 'vi' line editing commands:
+
+ set editing-mode vi
+
+ Variable names and values, where appropriate, are recognized
+ without regard to case. Unrecognized variable names are ignored.
+
+ Boolean variables (those that can be set to on or off) are set to
+ on if the value is null or empty, ON (case-insensitive), or 1. Any
+ other value results in the variable being set to off.
+
+ The 'bind -V' command lists the current Readline variable names and
+ values. *Note Bash Builtins::.
+
+ A great deal of run-time behavior is changeable with the following
+ variables.
+
+ 'bell-style'
+ Controls what happens when Readline wants to ring the terminal
+ bell. If set to 'none', Readline never rings the bell. If
+ set to 'visible', Readline uses a visible bell if one is
+ available. If set to 'audible' (the default), Readline
+ attempts to ring the terminal's bell.
+
+ 'bind-tty-special-chars'
+ If set to 'on' (the default), Readline attempts to bind the
+ control characters treated specially by the kernel's terminal
+ driver to their Readline equivalents.
+
+ 'blink-matching-paren'
+ If set to 'on', Readline attempts to briefly move the cursor
+ to an opening parenthesis when a closing parenthesis is
+ inserted. The default is 'off'.
+
+ 'colored-completion-prefix'
+ If set to 'on', when listing completions, Readline displays
+ the common prefix of the set of possible completions using a
+ different color. The color definitions are taken from the
+ value of the 'LS_COLORS' environment variable. The default is
+ 'off'.
+
+ 'colored-stats'
+ If set to 'on', Readline displays possible completions using
+ different colors to indicate their file type. The color
+ definitions are taken from the value of the 'LS_COLORS'
+ environment variable. The default is 'off'.
+
+ 'comment-begin'
+ The string to insert at the beginning of the line when the
+ 'insert-comment' command is executed. The default value is
+ '"#"'.
+
+ 'completion-display-width'
+ The number of screen columns used to display possible matches
+ when performing completion. The value is ignored if it is
+ less than 0 or greater than the terminal screen width. A
+ value of 0 will cause matches to be displayed one per line.
+ The default value is -1.
+
+ 'completion-ignore-case'
+ If set to 'on', Readline performs filename matching and
+ completion in a case-insensitive fashion. The default value
+ is 'off'.
+
+ 'completion-map-case'
+ If set to 'on', and COMPLETION-IGNORE-CASE is enabled,
+ Readline treats hyphens ('-') and underscores ('_') as
+ equivalent when performing case-insensitive filename matching
+ and completion. The default value is 'off'.
+
+ 'completion-prefix-display-length'
+ The length in characters of the common prefix of a list of
+ possible completions that is displayed without modification.
+ When set to a value greater than zero, common prefixes longer
+ than this value are replaced with an ellipsis when displaying
+ possible completions.
+
+ 'completion-query-items'
+ 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 '100'.
+
+ 'convert-meta'
+ If set to 'on', Readline will convert characters with the
+ eighth bit set to an ASCII key sequence by stripping the
+ eighth bit and prefixing an <ESC> character, converting them
+ to a meta-prefixed key sequence. The default value is 'on',
+ but will be set to 'off' if the locale is one that contains
+ eight-bit characters.
+
+ 'disable-completion'
+ If set to 'On', Readline will inhibit word completion.
+ Completion characters will be inserted into the line as if
+ they had been mapped to 'self-insert'. The default is 'off'.
+
+ 'echo-control-characters'
+ When set to 'on', on operating systems that indicate they
+ support it, readline echoes a character corresponding to a
+ signal generated from the keyboard. The default is 'on'.
+
+ 'editing-mode'
+ The 'editing-mode' variable controls which default set of key
+ bindings is used. By default, Readline starts up in Emacs
+ editing mode, where the keystrokes are most similar to Emacs.
+ This variable can be set to either 'emacs' or 'vi'.
+
+ 'emacs-mode-string'
+ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is
+ displayed immediately before the last line of the primary
+ prompt when emacs editing mode is active. The value is
+ expanded like a key binding, so the standard set of meta- and
+ control prefixes and backslash escape sequences is available.
+ Use the '\1' and '\2' escapes to begin and end sequences of
+ non-printing characters, which can be used to embed a terminal
+ control sequence into the mode string. The default is '@'.
+
+ 'enable-bracketed-paste'
+ When set to 'On', Readline will configure the terminal in a
+ way that will enable it to insert each paste into the editing
+ buffer as a single string of characters, instead of treating
+ each character as if it had been read from the keyboard. This
+ can prevent pasted characters from being interpreted as
+ editing commands. The default is 'off'.
+
+ 'enable-keypad'
+ When set to 'on', Readline will try to enable the application
+ keypad when it is called. Some systems need this to enable
+ the arrow keys. The default is 'off'.
+
+ 'enable-meta-key'
+ When set to 'on', Readline will try to enable any meta
+ modifier key the terminal claims to support when it is called.
+ On many terminals, the meta key is used to send eight-bit
+ characters. The default is 'on'.
+
+ 'expand-tilde'
+ If set to 'on', tilde expansion is performed when Readline
+ attempts word completion. The default is 'off'.
+
+ 'history-preserve-point'
+ If set to 'on', the history code attempts to place the point
+ (the current cursor position) at the same location on each
+ history line retrieved with 'previous-history' or
+ 'next-history'. The default is 'off'.
+
+ 'history-size'
+ Set the maximum number of history entries saved in the history
+ list. If set to zero, any existing history entries are
+ deleted and no new entries are saved. If set to a value less
+ than zero, the number of history entries is not limited. By
+ default, the number of history entries is not limited. If an
+ attempt is made to set HISTORY-SIZE to a non-numeric value,
+ the maximum number of history entries will be set to 500.
+
+ 'horizontal-scroll-mode'
+ This variable can be set to either 'on' or 'off'. Setting it
+ to 'on' 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 'off'.
+
+ 'input-meta'
+ If set to 'on', 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 'off', but Readline will set it to 'on' if
+ the locale contains eight-bit characters. The name
+ 'meta-flag' is a synonym for this variable.
+
+ 'isearch-terminators'
+ The string of characters that should terminate an incremental
+ search without subsequently executing the character as a
+ command (*note Searching::). If this variable has not been
+ given a value, the characters <ESC> and 'C-J' will terminate
+ an incremental search.
+
+ 'keymap'
+ Sets Readline's idea of the current keymap for key binding
+ commands. Built-in 'keymap' names are 'emacs',
+ 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move',
+ 'vi-command', and 'vi-insert'. 'vi' is equivalent to
+ 'vi-command' ('vi-move' is also a synonym); 'emacs' is
+ equivalent to 'emacs-standard'. Applications may add
+ additional names. The default value is 'emacs'. The value of
+ the 'editing-mode' variable also affects the default keymap.
+
+ 'keyseq-timeout'
+ Specifies the duration Readline will wait for a character when
+ reading an ambiguous key sequence (one that can form a
+ complete key sequence using the input read so far, or can take
+ additional input to complete a longer key sequence). If no
+ input is received within the timeout, Readline will use the
+ shorter but complete key sequence. Readline uses this value
+ to determine whether or not input is available on the current
+ input source ('rl_instream' by default). The value is
+ specified in milliseconds, so a value of 1000 means that
+ Readline will wait one second for additional input. If this
+ variable is set to a value less than or equal to zero, or to a
+ non-numeric value, Readline will wait until another key is
+ pressed to decide which key sequence to complete. The default
+ value is '500'.
+
+ 'mark-directories'
+ If set to 'on', completed directory names have a slash
+ appended. The default is 'on'.
+
+ 'mark-modified-lines'
+ This variable, when set to 'on', causes Readline to display an
+ asterisk ('*') at the start of history lines which have been
+ modified. This variable is 'off' by default.
+
+ 'mark-symlinked-directories'
+ If set to 'on', completed names which are symbolic links to
+ directories have a slash appended (subject to the value of
+ 'mark-directories'). The default is 'off'.
+
+ 'match-hidden-files'
+ This variable, when set to 'on', causes Readline to match
+ files whose names begin with a '.' (hidden files) when
+ performing filename completion. If set to 'off', the leading
+ '.' must be supplied by the user in the filename to be
+ completed. This variable is 'on' by default.
+
+ 'menu-complete-display-prefix'
+ If set to 'on', menu completion displays the common prefix of
+ the list of possible completions (which may be empty) before
+ cycling through the list. The default is 'off'.
+
+ 'output-meta'
+ If set to 'on', Readline will display characters with the
+ eighth bit set directly rather than as a meta-prefixed escape
+ sequence. The default is 'off', but Readline will set it to
+ 'on' if the locale contains eight-bit characters.
+
+ 'page-completions'
+ If set to 'on', Readline uses an internal 'more'-like pager to
+ display a screenful of possible completions at a time. This
+ variable is 'on' by default.
+
+ 'print-completions-horizontally'
+ If set to 'on', Readline will display completions with matches
+ sorted horizontally in alphabetical order, rather than down
+ the screen. The default is 'off'.
+
+ 'revert-all-at-newline'
+ If set to 'on', Readline will undo all changes to history
+ lines before returning when 'accept-line' is executed. By
+ default, history lines may be modified and retain individual
+ undo lists across calls to 'readline'. The default is 'off'.
+
+ 'show-all-if-ambiguous'
+ This alters the default behavior of the completion functions.
+ If set to 'on', words which have more than one possible
+ completion cause the matches to be listed immediately instead
+ of ringing the bell. The default value is 'off'.
+
+ 'show-all-if-unmodified'
+ This alters the default behavior of the completion functions
+ in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to
+ 'on', 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 'off'.
+
+ 'show-mode-in-prompt'
+ If set to 'on', add a string to the beginning of the prompt
+ indicating the editing mode: emacs, vi command, or vi
+ insertion. The mode strings are user-settable (e.g.,
+ EMACS-MODE-STRING). The default value is 'off'.
+
+ 'skip-completed-text'
+ If set to 'on', this alters the default completion behavior
+ when inserting a single match into the line. It's only active
+ when performing completion in the middle of a word. If
+ enabled, readline does not insert characters from the
+ completion that match characters after point in the word being
+ completed, so portions of the word following the cursor are
+ not duplicated. For instance, if this is enabled, attempting
+ completion when the cursor is after the 'e' in 'Makefile' will
+ result in 'Makefile' rather than 'Makefilefile', assuming
+ there is a single possible completion. The default value is
+ 'off'.
+
+ 'vi-cmd-mode-string'
+ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is
+ displayed immediately before the last line of the primary
+ prompt when vi editing mode is active and in command mode.
+ The value is expanded like a key binding, so the standard set
+ of meta- and control prefixes and backslash escape sequences
+ is available. Use the '\1' and '\2' escapes to begin and end
+ sequences of non-printing characters, which can be used to
+ embed a terminal control sequence into the mode string. The
+ default is '(cmd)'.
+
+ 'vi-ins-mode-string'
+ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is
+ displayed immediately before the last line of the primary
+ prompt when vi editing mode is active and in insertion mode.
+ The value is expanded like a key binding, so the standard set
+ of meta- and control prefixes and backslash escape sequences
+ is available. Use the '\1' and '\2' escapes to begin and end
+ sequences of non-printing characters, which can be used to
+ embed a terminal control sequence into the mode string. The
+ default is '(ins)'.
+
+ 'visible-stats'
+ If set to 'on', a character denoting a file's type is appended
+ to the filename when listing possible completions. The
+ default is 'off'.
+
+Key Bindings
+ 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.
+
+ Once you know the name of the command, simply place on a line in
+ the init file the name of the key you wish to bind the command to,
+ a colon, and then the name of the command. There can be no space
+ between the key name and the colon - that will be interpreted as
+ part of the key name. The name of the key can be expressed in
+ different ways, depending on what you find most comfortable.
+
+ In addition to command names, readline allows keys to be bound to a
+ string that is inserted when the key is pressed (a MACRO).
+
+ The 'bind -p' command displays Readline function names and bindings
+ in a format that can put directly into an initialization file.
+ *Note Bash Builtins::.
+
+ KEYNAME: FUNCTION-NAME or MACRO
+ KEYNAME is the name of a key spelled out in English. For
+ example:
+ Control-u: universal-argument
+ Meta-Rubout: backward-kill-word
+ Control-o: "> output"
+
+ In the example above, 'C-u' is bound to the function
+ 'universal-argument', 'M-DEL' is bound to the function
+ 'backward-kill-word', and 'C-o' is bound to run the macro
+ expressed on the right hand side (that is, to insert the text
+ '> output' into the line).
+
+ A number of symbolic character names are recognized while
+ processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
+ NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
+
+ "KEYSEQ": FUNCTION-NAME or MACRO
+ KEYSEQ differs from KEYNAME 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.
+
+ "\C-u": universal-argument
+ "\C-x\C-r": re-read-init-file
+ "\e[11~": "Function Key 1"
+
+ In the above example, 'C-u' is again bound to the function
+ 'universal-argument' (just as it was in the first example),
+ ''C-x' 'C-r'' is bound to the function 're-read-init-file',
+ and '<ESC> <[> <1> <1> <~>' is bound to insert the text
+ 'Function Key 1'.
+
+ The following GNU Emacs style escape sequences are available when
+ specifying key sequences:
+
+ '\C-'
+ control prefix
+ '\M-'
+ meta prefix
+ '\e'
+ an escape character
+ '\\'
+ backslash
+ '\"'
+ <">, a double quotation mark
+ '\''
+ <'>, a single quote or apostrophe
+
+ In addition to the GNU Emacs style escape sequences, a second set
+ of backslash escapes is available:
+
+ '\a'
+ alert (bell)
+ '\b'
+ backspace
+ '\d'
+ delete
+ '\f'
+ form feed
+ '\n'
+ newline
+ '\r'
+ carriage return
+ '\t'
+ horizontal tab
+ '\v'
+ vertical tab
+ '\NNN'
+ the eight-bit character whose value is the octal value NNN
+ (one to three digits)
+ '\xHH'
+ the eight-bit character whose value is the hexadecimal value
+ HH (one or two hex digits)
+
+ When entering the text of a macro, single or double quotes must be
+ used to indicate a macro definition. Unquoted text is assumed to
+ be a function name. In the macro body, the backslash escapes
+ described above are expanded. Backslash will quote any other
+ character in the macro text, including '"' and '''. For example,
+ the following binding will make ''C-x' \' insert a single '\' into
+ the line:
+ "\C-x\\": "\\"
+
+
+File: bash.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File
+
+8.3.2 Conditional Init Constructs
+---------------------------------
+
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key bindings and
+variable settings to be performed as the result of tests. There are
+four parser directives used.
+
+'$if'
+ The '$if' construct allows bindings to be made based on the editing
+ mode, the terminal being used, or the application using Readline.
+ The text of the test, after any comparison operator, extends to the
+ end of the line; unless otherwise noted, no characters are required
+ to isolate it.
+
+ 'mode'
+ The 'mode=' form of the '$if' directive is used to test
+ whether Readline is in 'emacs' or 'vi' mode. This may be used
+ in conjunction with the 'set keymap' command, for instance, to
+ set bindings in the 'emacs-standard' and 'emacs-ctlx' keymaps
+ only if Readline is starting out in 'emacs' mode.
+
+ 'term'
+ The 'term=' form may be used to include terminal-specific key
+ bindings, perhaps to bind the key sequences output by the
+ terminal's function keys. The word on the right side of the
+ '=' is tested against both the full name of the terminal and
+ the portion of the terminal name before the first '-'. This
+ allows 'sun' to match both 'sun' and 'sun-cmd', for instance.
+
+ 'version'
+ The 'version' test may be used to perform comparisons against
+ specific Readline versions. The 'version' expands to the
+ current Readline version. The set of comparison operators
+ includes '=' (and '=='), '!=', '<=', '>=', '<', and '>'. The
+ version number supplied on the right side of the operator
+ consists of a major version number, an optional decimal point,
+ and an optional minor version (e.g., '7.1'). If the minor
+ version is omitted, it is assumed to be '0'. The operator may
+ be separated from the string 'version' and from the version
+ number argument by whitespace. The following example sets a
+ variable if the Readline version being used is 7.0 or newer:
+ $if version >= 7.0
+ set show-mode-in-prompt on
+ $endif
+
+ 'application'
+ The APPLICATION construct is used to include
+ application-specific settings. Each program using the
+ Readline library sets the APPLICATION NAME, 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:
+ $if Bash
+ # Quote the current or previous word
+ "\C-xq": "\eb\"\ef\""
+ $endif
+
+ 'variable'
+ The VARIABLE construct provides simple equality tests for
+ Readline variables and values. The permitted comparison
+ operators are '=', '==', and '!='. The variable name must be
+ separated from the comparison operator by whitespace; the
+ operator may be separated from the value on the right hand
+ side by whitespace. Both string and boolean variables may be
+ tested. Boolean variables must be tested against the values
+ ON and OFF. The following example is equivalent to the
+ 'mode=emacs' test described above:
+ $if editing-mode == emacs
+ set show-mode-in-prompt on
+ $endif
+
+'$endif'
+ This command, as seen in the previous example, terminates an '$if'
+ command.
+
+'$else'
+ Commands in this branch of the '$if' directive are executed if the
+ test fails.
+
+'$include'
+ This directive takes a single filename as an argument and reads
+ commands and bindings from that file. For example, the following
+ directive reads from '/etc/inputrc':
+ $include /etc/inputrc
+
+
+File: bash.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File
+
+8.3.3 Sample Init File
+----------------------
+
+Here is an example of an INPUTRC file. This illustrates key binding,
+variable assignment, and conditional syntax.
+
+ # This file controls the behaviour of line input editing for
+ # programs that use the GNU Readline library. Existing
+ # programs include FTP, Bash, and GDB.
+ #
+ # You can re-read the inputrc file with C-x C-r.
+ # Lines beginning with '#' are comments.
+ #
+ # First, include any system-wide 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
+
+
+File: bash.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing
+
+8.4 Bindable Readline Commands
+==============================
+
+* Menu:
+
+* Commands For Moving:: Moving about the line.
+* Commands For History:: Getting at previous lines.
+* Commands For Text:: Commands for changing text.
+* Commands For Killing:: Commands for killing and yanking.
+* Numeric Arguments:: Specifying numeric arguments, repeat counts.
+* Commands For Completion:: Getting Readline to do the typing for you.
+* Keyboard Macros:: Saving and re-executing typed characters
+* Miscellaneous Commands:: Other miscellaneous commands.
+
+This section describes Readline commands that may be bound to key
+sequences. You can list your key bindings by executing 'bind -P' or,
+for a more terse format, suitable for an INPUTRC file, 'bind -p'.
+(*Note Bash Builtins::.) Command names without an accompanying key
+sequence are unbound by default.
+
+ In the following descriptions, "point" refers to the current cursor
+position, and "mark" refers to a cursor position saved by the 'set-mark'
+command. The text between the point and mark is referred to as the
+"region".
+
+
+File: bash.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
+
+8.4.1 Commands For Moving
+-------------------------
+
+'beginning-of-line (C-a)'
+ Move to the start of the current line.
+
+'end-of-line (C-e)'
+ Move to the end of the line.
+
+'forward-char (C-f)'
+ Move forward a character.
+
+'backward-char (C-b)'
+ Move back a character.
+
+'forward-word (M-f)'
+ Move forward to the end of the next word. Words are composed of
+ letters and digits.
+
+'backward-word (M-b)'
+ Move back to the start of the current or previous word. Words are
+ composed of letters and digits.
+
+'shell-forward-word ()'
+ Move forward to the end of the next word. Words are delimited by
+ non-quoted shell metacharacters.
+
+'shell-backward-word ()'
+ Move back to the start of the current or previous word. Words are
+ delimited by non-quoted shell metacharacters.
+
+'previous-screen-line ()'
+ Attempt to move point to the same physical screen column on the
+ previous physical screen line. This will not have the desired
+ effect if the current Readline line does not take up more than one
+ physical line or if point is not greater than the length of the
+ prompt plus the screen width.
+
+'next-screen-line ()'
+ Attempt to move point to the same physical screen column on the
+ next physical screen line. This will not have the desired effect
+ if the current Readline line does not take up more than one
+ physical line or if the length of the current Readline line is not
+ greater than the length of the prompt plus the screen width.
+
+'clear-screen (C-l)'
+ Clear the screen and redraw the current line, leaving the current
+ line at the top of the screen.
+
+'redraw-current-line ()'
+ Refresh the current line. By default, this is unbound.
+
+
+File: bash.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands
+
+8.4.2 Commands For Manipulating The History
+-------------------------------------------
+
+'accept-line (Newline or Return)'
+ 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 'HISTCONTROL' and 'HISTIGNORE' variables. If this line is a
+ modified history line, then restore the history line to its
+ original state.
+
+'previous-history (C-p)'
+ Move 'back' through the history list, fetching the previous
+ command.
+
+'next-history (C-n)'
+ Move 'forward' through the history list, fetching the next command.
+
+'beginning-of-history (M-<)'
+ Move to the first line in the history.
+
+'end-of-history (M->)'
+ Move to the end of the input history, i.e., the line currently
+ being entered.
+
+'reverse-search-history (C-r)'
+ Search backward starting at the current line and moving 'up'
+ through the history as necessary. This is an incremental search.
+
+'forward-search-history (C-s)'
+ Search forward starting at the current line and moving 'down'
+ through the history as necessary. This is an incremental search.
+
+'non-incremental-reverse-search-history (M-p)'
+ 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. The search string may match
+ anywhere in a history line.
+
+'non-incremental-forward-search-history (M-n)'
+ Search forward starting at the current line and moving 'down'
+ through the history as necessary using a non-incremental search for
+ a string supplied by the user. The search string may match
+ anywhere in a history line.
+
+'history-search-forward ()'
+ Search forward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string must match at the beginning of a history line. This is a
+ non-incremental search. By default, this command is unbound.
+
+'history-search-backward ()'
+ Search backward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string must match at the beginning of a history line. This is a
+ non-incremental search. By default, this command is unbound.
+
+'history-substring-search-forward ()'
+ Search forward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string may match anywhere in a history line. This is a
+ non-incremental search. By default, this command is unbound.
+
+'history-substring-search-backward ()'
+ Search backward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string may match anywhere in a history line. This is a
+ non-incremental search. By default, this command is unbound.
+
+'yank-nth-arg (M-C-y)'
+ Insert the first argument to the previous command (usually the
+ second word on the previous line) at point. With an argument N,
+ insert the Nth word from the previous command (the words in the
+ previous command begin with word 0). A negative argument inserts
+ the Nth word from the end of the previous command. Once the
+ argument N is computed, the argument is extracted as if the '!N'
+ history expansion had been specified.
+
+'yank-last-arg (M-. or M-_)'
+ Insert last argument to the previous command (the last word of the
+ previous history entry). With a numeric argument, behave exactly
+ like 'yank-nth-arg'. Successive calls to 'yank-last-arg' move back
+ through the history list, inserting the last word (or the word
+ specified by the argument to the first call) of each line in turn.
+ Any numeric argument supplied to these successive calls determines
+ the direction to move through the history. A negative argument
+ switches the direction through the history (back or forward). The
+ history expansion facilities are used to extract the last argument,
+ as if the '!$' history expansion had been specified.
+
+
+File: bash.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
+
+8.4.3 Commands For Changing Text
+--------------------------------
+
+'end-of-file (usually C-d)'
+ The character indicating end-of-file as set, for example, by
+ 'stty'. If this character is read when there are no characters on
+ the line, and point is at the beginning of the line, Readline
+ interprets it as the end of input and returns EOF.
+
+'delete-char (C-d)'
+ Delete the character at point. If this function is bound to the
+ same character as the tty EOF character, as 'C-d' commonly is, see
+ above for the effects.
+
+'backward-delete-char (Rubout)'
+ Delete the character behind the cursor. A numeric argument means
+ to kill the characters instead of deleting them.
+
+'forward-backward-delete-char ()'
+ 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.
+
+'quoted-insert (C-q or C-v)'
+ Add the next character typed to the line verbatim. This is how to
+ insert key sequences like 'C-q', for example.
+
+'self-insert (a, b, A, 1, !, ...)'
+ Insert yourself.
+
+'bracketed-paste-begin ()'
+ This function is intended to be bound to the "bracketed paste"
+ escape sequence sent by some terminals, and such a binding is
+ assigned by default. It allows Readline to insert the pasted text
+ as a single unit without treating each character as if it had been
+ read from the keyboard. The characters are inserted as if each one
+ was bound to 'self-insert' instead of executing any editing
+ commands.
+
+'transpose-chars (C-t)'
+ 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.
+
+'transpose-words (M-t)'
+ 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.
+
+'upcase-word (M-u)'
+ Uppercase the current (or following) word. With a negative
+ argument, uppercase the previous word, but do not move the cursor.
+
+'downcase-word (M-l)'
+ Lowercase the current (or following) word. With a negative
+ argument, lowercase the previous word, but do not move the cursor.
+
+'capitalize-word (M-c)'
+ Capitalize the current (or following) word. With a negative
+ argument, capitalize the previous word, but do not move the cursor.
+
+'overwrite-mode ()'
+ 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
+ 'emacs' mode; 'vi' mode does overwrite differently. Each call to
+ 'readline()' starts in insert mode.
+
+ In overwrite mode, characters bound to 'self-insert' replace the
+ text at point rather than pushing the text to the right.
+ Characters bound to 'backward-delete-char' replace the character
+ before point with a space.
+
+ By default, this command is unbound.
+
+
+File: bash.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
+
+8.4.4 Killing And Yanking
+-------------------------
+
+'kill-line (C-k)'
+ Kill the text from point to the end of the line.
+
+'backward-kill-line (C-x Rubout)'
+ Kill backward from the cursor to the beginning of the current line.
+
+'unix-line-discard (C-u)'
+ Kill backward from the cursor to the beginning of the current line.
+
+'kill-whole-line ()'
+ Kill all characters on the current line, no matter where point is.
+ By default, this is unbound.
+
+'kill-word (M-d)'
+ 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 'forward-word'.
+
+'backward-kill-word (M-<DEL>)'
+ Kill the word behind point. Word boundaries are the same as
+ 'backward-word'.
+
+'shell-kill-word ()'
+ 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 'shell-forward-word'.
+
+'shell-backward-kill-word ()'
+ Kill the word behind point. Word boundaries are the same as
+ 'shell-backward-word'.
+
+'unix-word-rubout (C-w)'
+ Kill the word behind point, using white space as a word boundary.
+ The killed text is saved on the kill-ring.
+
+'unix-filename-rubout ()'
+ 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.
+
+'delete-horizontal-space ()'
+ Delete all spaces and tabs around point. By default, this is
+ unbound.
+
+'kill-region ()'
+ Kill the text in the current region. By default, this command is
+ unbound.
+
+'copy-region-as-kill ()'
+ Copy the text in the region to the kill buffer, so it can be yanked
+ right away. By default, this command is unbound.
+
+'copy-backward-word ()'
+ Copy the word before point to the kill buffer. The word boundaries
+ are the same as 'backward-word'. By default, this command is
+ unbound.
+
+'copy-forward-word ()'
+ Copy the word following point to the kill buffer. The word
+ boundaries are the same as 'forward-word'. By default, this
+ command is unbound.
+
+'yank (C-y)'
+ Yank the top of the kill ring into the buffer at point.
+
+'yank-pop (M-y)'
+ Rotate the kill-ring, and yank the new top. You can only do this
+ if the prior command is 'yank' or 'yank-pop'.
+
+
+File: bash.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands
+
+8.4.5 Specifying Numeric Arguments
+----------------------------------
+
+'digit-argument (M-0, M-1, ... M--)'
+ Add this digit to the argument already accumulating, or start a new
+ argument. 'M--' starts a negative argument.
+
+'universal-argument ()'
+ 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 'universal-argument' again ends the numeric
+ argument, but is otherwise ignored. As a special case, if this
+ command is immediately followed by a character that is neither a
+ digit nor 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.
+
+
+File: bash.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands
+
+8.4.6 Letting Readline Type For You
+-----------------------------------
+
+'complete (<TAB>)'
+ 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
+ '$'), username (if the text begins with '~'), hostname (if the text
+ begins with '@'), or command (including aliases and functions) in
+ turn. If none of these produces a match, filename completion is
+ attempted.
+
+'possible-completions (M-?)'
+ List the possible completions of the text before point. When
+ displaying completions, Readline sets the number of columns used
+ for display to the value of 'completion-display-width', the value
+ of the environment variable 'COLUMNS', or the screen width, in that
+ order.
+
+'insert-completions (M-*)'
+ Insert all completions of the text before point that would have
+ been generated by 'possible-completions'.
+
+'menu-complete ()'
+ Similar to 'complete', but replaces the word to be completed with a
+ single match from the list of possible completions. Repeated
+ execution of 'menu-complete' steps through the list of possible
+ completions, inserting each match in turn. At the end of the list
+ of completions, the bell is rung (subject to the setting of
+ 'bell-style') and the original text is restored. An argument of N
+ moves N positions forward in the list of matches; a negative
+ argument may be used to move backward through the list. This
+ command is intended to be bound to <TAB>, but is unbound by
+ default.
+
+'menu-complete-backward ()'
+ Identical to 'menu-complete', but moves backward through the list
+ of possible completions, as if 'menu-complete' had been given a
+ negative argument.
+
+'delete-char-or-list ()'
+ Deletes the character under the cursor if not at the beginning or
+ end of the line (like 'delete-char'). If at the end of the line,
+ behaves identically to 'possible-completions'. This command is
+ unbound by default.
+
+'complete-filename (M-/)'
+ Attempt filename completion on the text before point.
+
+'possible-filename-completions (C-x /)'
+ List the possible completions of the text before point, treating it
+ as a filename.
+
+'complete-username (M-~)'
+ Attempt completion on the text before point, treating it as a
+ username.
+
+'possible-username-completions (C-x ~)'
+ List the possible completions of the text before point, treating it
+ as a username.
+
+'complete-variable (M-$)'
+ Attempt completion on the text before point, treating it as a shell
+ variable.
+
+'possible-variable-completions (C-x $)'
+ List the possible completions of the text before point, treating it
+ as a shell variable.
+
+'complete-hostname (M-@)'
+ Attempt completion on the text before point, treating it as a
+ hostname.
+
+'possible-hostname-completions (C-x @)'
+ List the possible completions of the text before point, treating it
+ as a hostname.
+
+'complete-command (M-!)'
+ 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.
+
+'possible-command-completions (C-x !)'
+ List the possible completions of the text before point, treating it
+ as a command name.
+
+'dynamic-complete-history (M-<TAB>)'
+ Attempt completion on the text before point, comparing the text
+ against lines from the history list for possible completion
+ matches.
+
+'dabbrev-expand ()'
+ Attempt menu completion on the text before point, comparing the
+ text against lines from the history list for possible completion
+ matches.
+
+'complete-into-braces (M-{)'
+ Perform filename completion and insert the list of possible
+ completions enclosed within braces so the list is available to the
+ shell (*note Brace Expansion::).
+
+
+File: bash.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands
+
+8.4.7 Keyboard Macros
+---------------------
+
+'start-kbd-macro (C-x ()'
+ Begin saving the characters typed into the current keyboard macro.
+
+'end-kbd-macro (C-x ))'
+ Stop saving the characters typed into the current keyboard macro
+ and save the definition.
+
+'call-last-kbd-macro (C-x e)'
+ Re-execute the last keyboard macro defined, by making the
+ characters in the macro appear as if typed at the keyboard.
+
+'print-last-kbd-macro ()'
+ Print the last keboard macro defined in a format suitable for the
+ INPUTRC file.
+
+
+File: bash.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands
+
+8.4.8 Some Miscellaneous Commands
+---------------------------------
+
+'re-read-init-file (C-x C-r)'
+ Read in the contents of the INPUTRC file, and incorporate any
+ bindings or variable assignments found there.
+
+'abort (C-g)'
+ Abort the current editing command and ring the terminal's bell
+ (subject to the setting of 'bell-style').
+
+'do-lowercase-version (M-A, M-B, M-X, ...)'
+ If the metafied character X is upper case, run the command that is
+ bound to the corresponding metafied lower case character. The
+ behavior is undefined if X is already lower case.
+
+'prefix-meta (<ESC>)'
+ Metafy the next character typed. This is for keyboards without a
+ meta key. Typing '<ESC> f' is equivalent to typing 'M-f'.
+
+'undo (C-_ or C-x C-u)'
+ Incremental undo, separately remembered for each line.
+
+'revert-line (M-r)'
+ Undo all changes made to this line. This is like executing the
+ 'undo' command enough times to get back to the beginning.
+
+'tilde-expand (M-&)'
+ Perform tilde expansion on the current word.
+
+'set-mark (C-@)'
+ Set the mark to the point. If a numeric argument is supplied, the
+ mark is set to that position.
+
+'exchange-point-and-mark (C-x C-x)'
+ 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.
+
+'character-search (C-])'
+ A character is read and point is moved to the next occurrence of
+ that character. A negative count searches for previous
+ occurrences.
+
+'character-search-backward (M-C-])'
+ A character is read and point is moved to the previous occurrence
+ of that character. A negative count searches for subsequent
+ occurrences.
+
+'skip-csi-sequence ()'
+ Read enough characters to consume a multi-key sequence such as
+ those defined for keys like Home and End. Such sequences begin
+ with a Control Sequence Indicator (CSI), usually ESC-[. If this
+ sequence is bound to "\e[", keys producing such sequences will have
+ no effect unless explicitly bound to a readline command, instead of
+ inserting stray characters into the editing buffer. This is
+ unbound by default, but usually bound to ESC-[.
+
+'insert-comment (M-#)'
+ Without a numeric argument, the value of the 'comment-begin'
+ variable is inserted at the beginning of the current line. If a
+ numeric argument is supplied, this command acts as a toggle: if the
+ characters at the beginning of the line do not match the value of
+ 'comment-begin', the value is inserted, otherwise the characters in
+ 'comment-begin' are deleted from the beginning of the line. In
+ either case, the line is accepted as if a newline had been typed.
+ The default value of 'comment-begin' causes this command to make
+ the current line a shell comment. If a numeric argument causes the
+ comment character to be removed, the line will be executed by the
+ shell.
+
+'dump-functions ()'
+ 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 INPUTRC
+ file. This command is unbound by default.
+
+'dump-variables ()'
+ 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
+ INPUTRC file. This command is unbound by default.
+
+'dump-macros ()'
+ 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 INPUTRC
+ file. This command is unbound by default.
+
+'glob-complete-word (M-g)'
+ 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.
+
+'glob-expand-word (C-x *)'
+ 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 '*' is
+ appended before pathname expansion.
+
+'glob-list-expansions (C-x g)'
+ The list of expansions that would have been generated by
+ 'glob-expand-word' is displayed, and the line is redrawn. If a
+ numeric argument is supplied, a '*' is appended before pathname
+ expansion.
+
+'display-shell-version (C-x C-v)'
+ Display version information about the current instance of Bash.
+
+'shell-expand-line (M-C-e)'
+ Expand the line as the shell does. This performs alias and history
+ expansion as well as all of the shell word expansions (*note Shell
+ Expansions::).
+
+'history-expand-line (M-^)'
+ Perform history expansion on the current line.
+
+'magic-space ()'
+ Perform history expansion on the current line and insert a space
+ (*note History Interaction::).
+
+'alias-expand-line ()'
+ Perform alias expansion on the current line (*note Aliases::).
+
+'history-and-alias-expand-line ()'
+ Perform history and alias expansion on the current line.
+
+'insert-last-argument (M-. or M-_)'
+ A synonym for 'yank-last-arg'.
+
+'operate-and-get-next (C-o)'
+ Accept the current line for execution and fetch the next line
+ relative to the current line from the history for editing. A
+ numeric argument, if supplied, specifies the history entry to use
+ instead of the current line.
+
+'edit-and-execute-command (C-x C-e)'
+ Invoke an editor on the current command line, and execute the
+ result as shell commands. Bash attempts to invoke '$VISUAL',
+ '$EDITOR', and 'emacs' as the editor, in that order.
+
+
+File: bash.info, Node: Readline vi Mode, Next: Programmable Completion, Prev: Bindable Readline Commands, Up: Command Line Editing
+
+8.5 Readline vi Mode
+====================
+
+While the Readline library does not have a full set of 'vi' editing
+functions, it does contain enough to allow simple editing of the line.
+The Readline 'vi' mode behaves as specified in the POSIX standard.
+
+ In order to switch interactively between 'emacs' and 'vi' editing
+modes, use the 'set -o emacs' and 'set -o vi' commands (*note The Set
+Builtin::). The Readline default is 'emacs' mode.
+
+ When you enter a line in 'vi' mode, you are already placed in
+'insertion' mode, as if you had typed an 'i'. Pressing <ESC> switches
+you into 'command' mode, where you can edit the text of the line with
+the standard 'vi' movement keys, move to previous history lines with 'k'
+and subsequent lines with 'j', and so forth.
+
+
+File: bash.info, Node: Programmable Completion, Next: Programmable Completion Builtins, Prev: Readline vi Mode, Up: Command Line Editing
+
+8.6 Programmable Completion
+===========================
+
+When word completion is attempted for an argument to a command for which
+a completion specification (a COMPSPEC) has been defined using the
+'complete' builtin (*note Programmable Completion Builtins::), the
+programmable completion facilities are invoked.
+
+ First, the command name is identified. If a compspec has been
+defined for that command, the compspec is used to generate the list of
+possible completions for the word. If the command word is the empty
+string (completion attempted at the beginning of an empty line), any
+compspec defined with the '-E' option to 'complete' is used. If the
+command word is a full pathname, a compspec for the full pathname is
+searched for first. If no compspec is found for the full pathname, an
+attempt is made to find a compspec for the portion following the final
+slash. If those searches do not result in a compspec, any compspec
+defined with the '-D' option to 'complete' is used as the default. If
+there is no default compspec, Bash attempts alias expansion on the
+command word as a final resort, and attempts to find a compspec for the
+command word from any successful expansion
+
+ 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 (*note Commands For Completion::) is performed.
+
+ First, the actions specified by the compspec are used. Only matches
+which are prefixed by the word being completed are returned. When the
+'-f' or '-d' option is used for filename or directory name completion,
+the shell variable 'FIGNORE' is used to filter the matches. *Note Bash
+Variables::, for a description of 'FIGNORE'.
+
+ Any completions specified by a filename expansion pattern to the '-G'
+option are generated next. The words generated by the pattern need not
+match the word being completed. The 'GLOBIGNORE' shell variable is not
+used to filter the matches, but the 'FIGNORE' shell variable is used.
+
+ Next, the string specified as the argument to the '-W' option is
+considered. The string is first split using the characters in the 'IFS'
+special variable as delimiters. Shell quoting is honored within the
+string, in order to provide a mechanism for the words to contain shell
+metacharacters or characters in the value of 'IFS'. Each word is then
+expanded using brace expansion, tilde expansion, parameter and variable
+expansion, command substitution, and arithmetic expansion, as described
+above (*note Shell Expansions::). The results are split using the rules
+described above (*note Word Splitting::). The results of the expansion
+are prefix-matched against the word being completed, and the matching
+words become the possible completions.
+
+ After these matches have been generated, any shell function or
+command specified with the '-F' and '-C' options is invoked. When the
+command or function is invoked, the 'COMP_LINE', 'COMP_POINT',
+'COMP_KEY', and 'COMP_TYPE' variables are assigned values as described
+above (*note Bash Variables::). If a shell function is being invoked,
+the 'COMP_WORDS' and 'COMP_CWORD' variables are also set. When the
+function or command is invoked, the first argument ($1) is the name of
+the command whose arguments are being completed, the second argument
+($2) is the word being completed, and the third argument ($3) is the
+word preceding the word being completed on the current command line. No
+filtering of the generated completions against the word being completed
+is performed; the function or command has complete freedom in generating
+the matches.
+
+ Any function specified with '-F' is invoked first. The function may
+use any of the shell facilities, including the 'compgen' and 'compopt'
+builtins described below (*note Programmable Completion Builtins::), to
+generate the matches. It must put the possible completions in the
+'COMPREPLY' array variable, one per array element.
+
+ Next, any command specified with the '-C' option is invoked in an
+environment equivalent to command substitution. It should print a list
+of completions, one per line, to the standard output. Backslash may be
+used to escape a newline, if necessary.
+
+ After all of the possible completions are generated, any filter
+specified with the '-X' option is applied to the list. The filter is a
+pattern as used for pathname expansion; a '&' in the pattern is replaced
+with the text of the word being completed. A literal '&' may be escaped
+with a backslash; the backslash is removed before attempting a match.
+Any completion that matches the pattern will be removed from the list.
+A leading '!' negates the pattern; in this case any completion not
+matching the pattern will be removed. If the 'nocasematch' shell option
+(see the description of 'shopt' in *note The Shopt Builtin::) is
+enabled, the match is performed without regard to the case of alphabetic
+characters.
+
+ Finally, any prefix and suffix specified with the '-P' and '-S'
+options are added to each member of the completion list, and the result
+is returned to the Readline completion code as the list of possible
+completions.
+
+ If the previously-applied actions do not generate any matches, and
+the '-o dirnames' option was supplied to 'complete' when the compspec
+was defined, directory name completion is attempted.
+
+ If the '-o plusdirs' option was supplied to 'complete' when the
+compspec was defined, directory name completion is attempted and any
+matches are added to the results of the other actions.
+
+ By default, if a compspec is found, whatever it generates is returned
+to the completion code as the full set of possible completions. The
+default Bash completions are not attempted, and the Readline default of
+filename completion is disabled. If the '-o bashdefault' option was
+supplied to 'complete' when the compspec was defined, the default Bash
+completions are attempted if the compspec generates no matches. If the
+'-o default' option was supplied to 'complete' when the compspec was
+defined, Readline's default completion will be performed if the compspec
+(and, if attempted, the default Bash completions) generate no matches.
+
+ When a compspec indicates that directory name completion is desired,
+the programmable completion functions force Readline to append a slash
+to completed names which are symbolic links to directories, subject to
+the value of the MARK-DIRECTORIES Readline variable, regardless of the
+setting of the MARK-SYMLINKED-DIRECTORIES Readline variable.
+
+ There is some support for dynamically modifying completions. This is
+most useful when used in combination with a default completion specified
+with '-D'. It's possible for shell functions executed as completion
+handlers to indicate that completion should be retried by returning an
+exit status of 124. If a shell function returns 124, and changes the
+compspec associated with the command on which completion is being
+attempted (supplied as the first argument when the function is
+executed), programmable completion restarts from the beginning, with an
+attempt to find a new compspec for that command. This allows a set of
+completions to be built dynamically as completion is attempted, rather
+than being loaded all at once.
+
+ For instance, assuming that there is a library of compspecs, each
+kept in a file corresponding to the name of the command, the following
+default completion function would load completions dynamically:
+
+ _completion_loader()
+ {
+ . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
+ }
+ complete -D -F _completion_loader -o bashdefault -o default
+
+
+File: bash.info, Node: Programmable Completion Builtins, Next: A Programmable Completion Example, Prev: Programmable Completion, Up: Command Line Editing
+
+8.7 Programmable Completion Builtins
+====================================
+
+Three builtin commands are available to manipulate the programmable
+completion facilities: one to specify how the arguments to a particular
+command are to be completed, and two to modify the completion as it is
+happening.
+
+'compgen'
+ compgen [OPTION] [WORD]
+
+ Generate possible completion matches for WORD according to the
+ OPTIONs, which may be any option accepted by the 'complete' builtin
+ with the exception of '-p' and '-r', and write the matches to the
+ standard output. When using the '-F' or '-C' options, the various
+ shell variables set by the programmable completion facilities,
+ while available, will not have useful values.
+
+ The matches will be generated in the same way as if the
+ programmable completion code had generated them directly from a
+ completion specification with the same flags. If WORD is
+ specified, only those completions matching WORD will be displayed.
+
+ The return value is true unless an invalid option is supplied, or
+ no matches were generated.
+
+'complete'
+ complete [-abcdefgjksuv] [-o COMP-OPTION] [-DEI] [-A ACTION] [-G GLOBPAT]
+ [-W WORDLIST] [-F FUNCTION] [-C COMMAND] [-X FILTERPAT]
+ [-P PREFIX] [-S SUFFIX] NAME [NAME ...]
+ complete -pr [-DEI] [NAME ...]
+
+ Specify how arguments to each NAME should be completed. If the
+ '-p' option is supplied, or if no options are supplied, existing
+ completion specifications are printed in a way that allows them to
+ be reused as input. The '-r' option removes a completion
+ specification for each NAME, or, if no NAMEs are supplied, all
+ completion specifications. The '-D' option indicates that other
+ supplied options and actions should apply to the "default" command
+ completion; that is, completion attempted on a command for which no
+ completion has previously been defined. The '-E' option indicates
+ that other supplied options and actions should apply to "empty"
+ command completion; that is, completion attempted on a blank line.
+ The '-I' option indicates that other supplied options and actions
+ should apply to completion on the inital non-assignment word on the
+ line, or after a command delimiter such as ';' or '|', which is
+ usually command name completion. If multiple options are supplied,
+ the '-D' option takes precedence over '-E', and both take
+ precedence over '-I'. If any of '-D', '-E', or '-I' are supplied,
+ any other NAME arguments are ignored; these completions only apply
+ to the case specified by the option.
+
+ The process of applying these completion specifications when word
+ completion is attempted is described above (*note Programmable
+ Completion::).
+
+ Other options, if specified, have the following meanings. The
+ arguments to the '-G', '-W', and '-X' options (and, if necessary,
+ the '-P' and '-S' options) should be quoted to protect them from
+ expansion before the 'complete' builtin is invoked.
+
+ '-o COMP-OPTION'
+ The COMP-OPTION controls several aspects of the compspec's
+ behavior beyond the simple generation of completions.
+ COMP-OPTION may be one of:
+
+ 'bashdefault'
+ Perform the rest of the default Bash completions if the
+ compspec generates no matches.
+
+ 'default'
+ Use Readline's default filename completion if the
+ compspec generates no matches.
+
+ 'dirnames'
+ Perform directory name completion if the compspec
+ generates no matches.
+
+ 'filenames'
+ Tell Readline that the compspec generates filenames, so
+ it can perform any filename-specific processing (like
+ adding a slash to directory names, quoting special
+ characters, or suppressing trailing spaces). This option
+ is intended to be used with shell functions specified
+ with '-F'.
+
+ 'noquote'
+ Tell Readline not to quote the completed words if they
+ are filenames (quoting filenames is the default).
+
+ 'nosort'
+ Tell Readline not to sort the list of possible
+ completions alphabetically.
+
+ 'nospace'
+ Tell Readline not to append a space (the default) to
+ words completed at the end of the line.
+
+ 'plusdirs'
+ 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.
+
+ '-A ACTION'
+ The ACTION may be one of the following to generate a list of
+ possible completions:
+
+ 'alias'
+ Alias names. May also be specified as '-a'.
+
+ 'arrayvar'
+ Array variable names.
+
+ 'binding'
+ Readline key binding names (*note Bindable Readline
+ Commands::).
+
+ 'builtin'
+ Names of shell builtin commands. May also be specified
+ as '-b'.
+
+ 'command'
+ Command names. May also be specified as '-c'.
+
+ 'directory'
+ Directory names. May also be specified as '-d'.
+
+ 'disabled'
+ Names of disabled shell builtins.
+
+ 'enabled'
+ Names of enabled shell builtins.
+
+ 'export'
+ Names of exported shell variables. May also be specified
+ as '-e'.
+
+ 'file'
+ File names. May also be specified as '-f'.
+
+ 'function'
+ Names of shell functions.
+
+ 'group'
+ Group names. May also be specified as '-g'.
+
+ 'helptopic'
+ Help topics as accepted by the 'help' builtin (*note Bash
+ Builtins::).
+
+ 'hostname'
+ Hostnames, as taken from the file specified by the
+ 'HOSTFILE' shell variable (*note Bash Variables::).
+
+ 'job'
+ Job names, if job control is active. May also be
+ specified as '-j'.
+
+ 'keyword'
+ Shell reserved words. May also be specified as '-k'.
+
+ 'running'
+ Names of running jobs, if job control is active.
+
+ 'service'
+ Service names. May also be specified as '-s'.
+
+ 'setopt'
+ Valid arguments for the '-o' option to the 'set' builtin
+ (*note The Set Builtin::).
+
+ 'shopt'
+ Shell option names as accepted by the 'shopt' builtin
+ (*note Bash Builtins::).
+
+ 'signal'
+ Signal names.
+
+ 'stopped'
+ Names of stopped jobs, if job control is active.
+
+ 'user'
+ User names. May also be specified as '-u'.
+
+ 'variable'
+ Names of all shell variables. May also be specified as
+ '-v'.
+
+ '-C COMMAND'
+ COMMAND is executed in a subshell environment, and its output
+ is used as the possible completions.
+
+ '-F FUNCTION'
+ The shell function FUNCTION is executed in the current shell
+ environment. When it is executed, $1 is the name of the
+ command whose arguments are being completed, $2 is the word
+ being completed, and $3 is the word preceding the word being
+ completed, as described above (*note Programmable
+ Completion::). When it finishes, the possible completions are
+ retrieved from the value of the 'COMPREPLY' array variable.
+
+ '-G GLOBPAT'
+ The filename expansion pattern GLOBPAT is expanded to generate
+ the possible completions.
+
+ '-P PREFIX'
+ PREFIX is added at the beginning of each possible completion
+ after all other options have been applied.
+
+ '-S SUFFIX'
+ SUFFIX is appended to each possible completion after all other
+ options have been applied.
+
+ '-W WORDLIST'
+ The WORDLIST is split using the characters in the 'IFS'
+ special variable as delimiters, and each resultant word is
+ expanded. The possible completions are the members of the
+ resultant list which match the word being completed.
+
+ '-X FILTERPAT'
+ FILTERPAT 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
+ FILTERPAT is removed from the list. A leading '!' in
+ FILTERPAT negates the pattern; in this case, any completion
+ not matching FILTERPAT is removed.
+
+ The return value is true unless an invalid option is supplied, an
+ option other than '-p' or '-r' is supplied without a NAME argument,
+ an attempt is made to remove a completion specification for a NAME
+ for which no specification exists, or an error occurs adding a
+ completion specification.
+
+'compopt'
+ compopt [-o OPTION] [-DEI] [+o OPTION] [NAME]
+ Modify completion options for each NAME according to the OPTIONs,
+ or for the currently-executing completion if no NAMEs are supplied.
+ If no OPTIONs are given, display the completion options for each
+ NAME or the current completion. The possible values of OPTION are
+ those valid for the 'complete' builtin described above. The '-D'
+ option indicates that other supplied options should apply to the
+ "default" command completion; that is, completion attempted on a
+ command for which no completion has previously been defined. The
+ '-E' option indicates that other supplied options should apply to
+ "empty" command completion; that is, completion attempted on a
+ blank line. The '-I' option indicates that other supplied options
+ should apply to completion on the inital non-assignment word on the
+ line, or after a command delimiter such as ';' or '|', which is
+ usually command name completion.
+
+ If multiple options are supplied, the '-D' option takes precedence
+ over '-E', and both take precedence over '-I'
+
+ The return value is true unless an invalid option is supplied, an
+ attempt is made to modify the options for a NAME for which no
+ completion specification exists, or an output error occurs.
+
+
+File: bash.info, Node: A Programmable Completion Example, Prev: Programmable Completion Builtins, Up: Command Line Editing
+
+8.8 A Programmable Completion Example
+=====================================
+
+The most common way to obtain additional completion functionality beyond
+the default actions 'complete' and 'compgen' provide is to use a shell
+function and bind it to a particular command using 'complete -F'.
+
+ The following function provides completions for the 'cd' builtin. It
+is a reasonably good example of what shell functions must do when used
+for completion. This function uses the word passed as '$2' to determine
+the directory name to complete. You can also use the 'COMP_WORDS' array
+variable; the current word is indexed by the 'COMP_CWORD' variable.
+
+ The function relies on the 'complete' and 'compgen' builtins to do
+much of the work, adding only the things that the Bash 'cd' does beyond
+accepting basic directory names: tilde expansion (*note Tilde
+Expansion::), searching directories in $CDPATH, which is described above
+(*note Bourne Shell Builtins::), and basic support for the 'cdable_vars'
+shell option (*note The Shopt Builtin::). '_comp_cd' modifies the value
+of IFS so that it contains only a newline to accommodate file names
+containing spaces and tabs - 'compgen' prints the possible completions
+it generates one per line.
+
+ Possible completions go into the COMPREPLY array variable, one
+completion per array element. The programmable completion system
+retrieves the completions from there when the function returns.
+
+ # A completion function for the cd builtin
+ # based on the cd completion function from the bash_completion package
+ _comp_cd()
+ {
+ local IFS=$' \t\n' # normalize IFS
+ local cur _skipdot _cdpath
+ local i j k
+
+ # Tilde expansion, which also expands tilde to full pathname
+ case "$2" in
+ \~*) eval cur="$2" ;;
+ *) cur=$2 ;;
+ esac
+
+ # no cdpath or absolute pathname -- straight directory completion
+ if [[ -z "${CDPATH:-}" ]] || [[ "$cur" == @(./*|../*|/*) ]]; then
+ # compgen prints paths one per line; could also use while loop
+ IFS=$'\n'
+ COMPREPLY=( $(compgen -d -- "$cur") )
+ IFS=$' \t\n'
+ # CDPATH+directories in the current directory if not in CDPATH
+ else
+ IFS=$'\n'
+ _skipdot=false
+ # preprocess CDPATH to convert null directory names to .
+ _cdpath=${CDPATH/#:/.:}
+ _cdpath=${_cdpath//::/:.:}
+ _cdpath=${_cdpath/%:/:.}
+ for i in ${_cdpath//:/$'\n'}; do
+ if [[ $i -ef . ]]; then _skipdot=true; fi
+ k="${#COMPREPLY[@]}"
+ for j in $( compgen -d -- "$i/$cur" ); do
+ COMPREPLY[k++]=${j#$i/} # cut off directory
+ done
+ done
+ $_skipdot || COMPREPLY+=( $(compgen -d -- "$cur") )
+ IFS=$' \t\n'
+ fi
+
+ # variable names if appropriate shell option set and no completions
+ if shopt -q cdable_vars && [[ ${#COMPREPLY[@]} -eq 0 ]]; then
+ COMPREPLY=( $(compgen -v -- "$cur") )
+ fi
+
+ return 0
+ }
+
+ We install the completion function using the '-F' option to
+'complete':
+
+ # Tell readline to quote appropriate and append slashes to directories;
+ # use the bash default completion for other arguments
+ complete -o filenames -o nospace -o bashdefault -F _comp_cd cd
+
+Since we'd like Bash and Readline to take care of some of the other
+details for us, we use several other options to tell Bash and Readline
+what to do. The '-o filenames' option tells Readline that the possible
+completions should be treated as filenames, and quoted appropriately.
+That option will also cause Readline to append a slash to filenames it
+can determine are directories (which is why we might want to extend
+'_comp_cd' to append a slash if we're using directories found via
+CDPATH: Readline can't tell those completions are directories). The '-o
+nospace' option tells Readline to not append a space character to the
+directory name, in case we want to append to it. The '-o bashdefault'
+option brings in the rest of the "Bash default" completions - possible
+completion that Bash adds to the default Readline set. These include
+things like command name completion, variable completion for words
+beginning with '{', completions containing pathname expansion patterns
+(*note Filename Expansion::), and so on.
+
+ Once installed using 'complete', '_comp_cd' will be called every time
+we attempt word completion for a 'cd' command.
+
+ Many more examples - an extensive collection of completions for most
+of the common GNU, Unix, and Linux commands - are available as part of
+the bash_completion project. This is installed by default on many
+GNU/Linux distributions. Originally written by Ian Macdonald, the
+project now lives at <http://bash-completion.alioth.debian.org/>. There
+are ports for other systems such as Solaris and Mac OS X.
+
+ An older version of the bash_completion package is distributed with
+bash in the 'examples/complete' subdirectory.
+
+
+File: bash.info, Node: Using History Interactively, Next: Installing Bash, Prev: Command Line Editing, Up: Top
+
+9 Using History Interactively
+*****************************
+
+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.
+
+* Menu:
+
+* Bash History Facilities:: How Bash lets you manipulate your command
+ history.
+* Bash History Builtins:: The Bash builtin commands that manipulate
+ the command history.
+* History Interaction:: What it feels like using History as a user.
+
+
+File: bash.info, Node: Bash History Facilities, Next: Bash History Builtins, Up: Using History Interactively
+
+9.1 Bash History Facilities
+===========================
+
+When the '-o history' option to the 'set' builtin is enabled (*note The
+Set Builtin::), the shell provides access to the "command history", the
+list of commands previously typed. The value of the 'HISTSIZE' shell
+variable is used as the number of commands to save in a history list.
+The text of the last '$HISTSIZE' commands (default 500) is saved. The
+shell stores each command in the history list prior to parameter and
+variable expansion but after history expansion is performed, subject to
+the values of the shell variables 'HISTIGNORE' and 'HISTCONTROL'.
+
+ When the shell starts up, the history is initialized from the file
+named by the 'HISTFILE' variable (default '~/.bash_history'). The file
+named by the value of 'HISTFILE' is truncated, if necessary, to contain
+no more than the number of lines specified by the value of the
+'HISTFILESIZE' variable. When a shell with history enabled exits, the
+last '$HISTSIZE' lines are copied from the history list to the file
+named by '$HISTFILE'. If the 'histappend' shell option is set (*note
+Bash Builtins::), the lines are appended to the history file, otherwise
+the history file is overwritten. If 'HISTFILE' is unset, or if the
+history file is unwritable, the history is not saved. After saving the
+history, the history file is truncated to contain no more than
+'$HISTFILESIZE' lines. If 'HISTFILESIZE' is unset, or set to null, a
+non-numeric value, or a numeric value less than zero, the history file
+is not truncated.
+
+ If the 'HISTTIMEFORMAT' is set, the time stamp information associated
+with each history entry is written to the history file, marked with the
+history comment character. When the history file is read, lines
+beginning with the history comment character followed immediately by a
+digit are interpreted as timestamps for the following history entry.
+
+ The builtin command 'fc' may be used to list or edit and re-execute a
+portion of the history list. The 'history' builtin may be used to
+display or modify the history list and manipulate the history file.
+When using command-line editing, search commands are available in each
+editing mode that provide access to the history list (*note Commands For
+History::).
+
+ The shell allows control over which commands are saved on the history
+list. The 'HISTCONTROL' and 'HISTIGNORE' variables may be set to cause
+the shell to save only a subset of the commands entered. The 'cmdhist'
+shell option, if enabled, causes the shell to attempt to save each line
+of a multi-line command in the same history entry, adding semicolons
+where necessary to preserve syntactic correctness. The 'lithist' shell
+option causes the shell to save the command with embedded newlines
+instead of semicolons. The 'shopt' builtin is used to set these
+options. *Note The Shopt Builtin::, for a description of 'shopt'.
+
+
+File: bash.info, Node: Bash History Builtins, Next: History Interaction, Prev: Bash History Facilities, Up: Using History Interactively
+
+9.2 Bash History Builtins
+=========================
+
+Bash provides two builtin commands which manipulate the history list and
+history file.
+
+'fc'
+ fc [-e ENAME] [-lnr] [FIRST] [LAST]
+ fc -s [PAT=REP] [COMMAND]
+
+ The first form selects a range of commands from FIRST to LAST from
+ the history list and displays or edits and re-executes them. Both
+ FIRST and LAST may be specified as a string (to locate the most
+ recent command beginning with that string) or as a number (an index
+ into the history list, where a negative number is used as an offset
+ from the current command number). If LAST is not specified, it is
+ set to FIRST. If FIRST is not specified, it is set to the previous
+ command for editing and -16 for listing. If the '-l' flag is
+ given, the commands are listed on standard output. The '-n' flag
+ suppresses the command numbers when listing. The '-r' flag
+ reverses the order of the listing. Otherwise, the editor given by
+ ENAME is invoked on a file containing those commands. If ENAME is
+ not given, the value of the following variable expansion is used:
+ '${FCEDIT:-${EDITOR:-vi}}'. This says to use the value of the
+ 'FCEDIT' variable if set, or the value of the 'EDITOR' variable if
+ that is set, or 'vi' if neither is set. When editing is complete,
+ the edited commands are echoed and executed.
+
+ In the second form, COMMAND is re-executed after each instance of
+ PAT in the selected command is replaced by REP. COMMAND is
+ intepreted the same as FIRST above.
+
+ A useful alias to use with the 'fc' command is 'r='fc -s'', so that
+ typing 'r cc' runs the last command beginning with 'cc' and typing
+ 'r' re-executes the last command (*note Aliases::).
+
+'history'
+ history [N]
+ history -c
+ history -d OFFSET
+ history -d START-END
+ history [-anrw] [FILENAME]
+ history -ps ARG
+
+ With no options, display the history list with line numbers. Lines
+ prefixed with a '*' have been modified. An argument of N lists
+ only the last N lines. If the shell variable 'HISTTIMEFORMAT' is
+ set and not null, it is used as a format string for STRFTIME to
+ display the time stamp associated with each displayed history
+ entry. No intervening blank is printed between the formatted time
+ stamp and the history line.
+
+ Options, if supplied, have the following meanings:
+
+ '-c'
+ Clear the history list. This may be combined with the other
+ options to replace the history list completely.
+
+ '-d OFFSET'
+ Delete the history entry at position OFFSET. If OFFSET is
+ positive, it should be specified as it appears when the
+ history is displayed. If OFFSET is negative, it is
+ interpreted as relative to one greater than the last history
+ position, so negative indices count back from the end of the
+ history, and an index of '-1' refers to the current 'history
+ -d' command.
+
+ '-d START-END'
+ Delete the history entries between positions START and END,
+ inclusive. Positive and negative values for START and END are
+ interpreted as described above.
+
+ '-a'
+ Append the new history lines to the history file. These are
+ history lines entered since the beginning of the current Bash
+ session, but not already appended to the history file.
+
+ '-n'
+ 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.
+
+ '-r'
+ Read the history file and append its contents to the history
+ list.
+
+ '-w'
+ Write out the current history list to the history file.
+
+ '-p'
+ Perform history substitution on the ARGs and display the
+ result on the standard output, without storing the results in
+ the history list.
+
+ '-s'
+ The ARGs are added to the end of the history list as a single
+ entry.
+
+ When any of the '-w', '-r', '-a', or '-n' options is used, if
+ FILENAME is given, then it is used as the history file. If not,
+ then the value of the 'HISTFILE' variable is used.
+
+
+File: bash.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively
+
+9.3 History Expansion
+=====================
+
+The History library provides a history expansion feature that is similar
+to the history expansion provided by 'csh'. This section describes the
+syntax used to manipulate the history information.
+
+ History expansions introduce words from the history list into the
+input stream, making it easy to repeat commands, insert the arguments to
+a previous command into the current input line, or fix errors in
+previous commands quickly.
+
+ History expansion is performed immediately after a complete line is
+read, before the shell breaks it into words, and is performed on each
+line individually. Bash attempts to inform the history expansion
+functions about quoting still in effect from previous lines.
+
+ History expansion takes place in two parts. The first is to
+determine which line from the history list should be used during
+substitution. The second is to select portions of that line for
+inclusion into the current one. The line selected from the history is
+called the "event", and the portions of that line that are acted upon
+are called "words". Various "modifiers" are available to manipulate the
+selected words. The line is broken into words in the same fashion that
+Bash does, so that several words surrounded by quotes are considered one
+word. History expansions are introduced by the appearance of the
+history expansion character, which is '!' by default.
+
+ History expansion implements shell-like quoting conventions: a
+backslash can be used to remove the special handling for the next
+character; single quotes enclose verbatim sequences of characters, and
+can be used to inhibit history expansion; and characters enclosed within
+double quotes may be subject to history expansion, since backslash can
+escape the history expansion character, but single quotes may not, since
+they are not treated specially within double quotes.
+
+ When using the shell, only '\' and ''' may be used to escape the
+history expansion character, but the history expansion character is also
+treated as quoted if it immediately precedes the closing double quote in
+a double-quoted string.
+
+ Several shell options settable with the 'shopt' builtin (*note The
+Shopt Builtin::) may be used to tailor the behavior of history
+expansion. If the 'histverify' shell option is enabled, and Readline is
+being used, history substitutions are not immediately passed to the
+shell parser. Instead, the expanded line is reloaded into the Readline
+editing buffer for further modification. If Readline is being used, and
+the 'histreedit' shell option is enabled, a failed history expansion
+will be reloaded into the Readline editing buffer for correction. The
+'-p' option to the 'history' builtin command may be used to see what a
+history expansion will do before using it. The '-s' option to the
+'history' builtin may be used to add commands to the end of the history
+list without actually executing them, so that they are available for
+subsequent recall. This is most useful in conjunction with Readline.
+
+ The shell allows control of the various characters used by the
+history expansion mechanism with the 'histchars' variable, as explained
+above (*note Bash Variables::). The shell uses the history comment
+character to mark history timestamps when writing the history file.
+
+* Menu:
+
+* Event Designators:: How to specify which history line to use.
+* Word Designators:: Specifying which words are of interest.
+* Modifiers:: Modifying the results of substitution.
+
+
+File: bash.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
+
+9.3.1 Event Designators
+-----------------------
+
+An event designator is a reference to a command line entry in the
+history list. Unless the reference is absolute, events are relative to
+the current position in the history list.
+
+'!'
+ Start a history substitution, except when followed by a space, tab,
+ the end of the line, '=' or '(' (when the 'extglob' shell option is
+ enabled using the 'shopt' builtin).
+
+'!N'
+ Refer to command line N.
+
+'!-N'
+ Refer to the command N lines back.
+
+'!!'
+ Refer to the previous command. This is a synonym for '!-1'.
+
+'!STRING'
+ Refer to the most recent command preceding the current position in
+ the history list starting with STRING.
+
+'!?STRING[?]'
+ Refer to the most recent command preceding the current position in
+ the history list containing STRING. The trailing '?' may be
+ omitted if the STRING is followed immediately by a newline.
+
+'^STRING1^STRING2^'
+ Quick Substitution. Repeat the last command, replacing STRING1
+ with STRING2. Equivalent to '!!:s/STRING1/STRING2/'.
+
+'!#'
+ The entire command line typed so far.
+
+
+File: bash.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
+
+9.3.2 Word Designators
+----------------------
+
+Word designators are used to select desired words from the event. A ':'
+separates the event specification from the word designator. It may be
+omitted if the word designator begins with a '^', '$', '*', '-', or '%'.
+Words are numbered from the beginning of the line, with the first word
+being denoted by 0 (zero). Words are inserted into the current line
+separated by single spaces.
+
+ For example,
+
+'!!'
+ designates the preceding command. When you type this, the
+ preceding command is repeated in toto.
+
+'!!:$'
+ designates the last argument of the preceding command. This may be
+ shortened to '!$'.
+
+'!fi:2'
+ designates the second argument of the most recent command starting
+ with the letters 'fi'.
+
+ Here are the word designators:
+
+'0 (zero)'
+ The '0'th word. For many applications, this is the command word.
+
+'N'
+ The Nth word.
+
+'^'
+ The first argument; that is, word 1.
+
+'$'
+ The last argument.
+
+'%'
+ The word matched by the most recent '?STRING?' search.
+
+'X-Y'
+ A range of words; '-Y' abbreviates '0-Y'.
+
+'*'
+ All of the words, except the '0'th. This is a synonym for '1-$'.
+ It is not an error to use '*' if there is just one word in the
+ event; the empty string is returned in that case.
+
+'X*'
+ Abbreviates 'X-$'
+
+'X-'
+ Abbreviates 'X-$' like 'X*', but omits the last word.
+
+ If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+
+File: bash.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
+
+9.3.3 Modifiers
+---------------
+
+After the optional word designator, you can add a sequence of one or
+more of the following modifiers, each preceded by a ':'.
+
+'h'
+ Remove a trailing pathname component, leaving only the head.
+
+'t'
+ Remove all leading pathname components, leaving the tail.
+
+'r'
+ Remove a trailing suffix of the form '.SUFFIX', leaving the
+ basename.
+
+'e'
+ Remove all but the trailing suffix.
+
+'p'
+ Print the new command but do not execute it.
+
+'q'
+ Quote the substituted words, escaping further substitutions.
+
+'x'
+ Quote the substituted words as with 'q', but break into words at
+ spaces, tabs, and newlines.
+
+'s/OLD/NEW/'
+ Substitute NEW for the first occurrence of OLD in the event line.
+ Any delimiter may be used in place of '/'. The delimiter may be
+ quoted in OLD and NEW with a single backslash. If '&' appears in
+ NEW, it is replaced by OLD. A single backslash will quote the '&'.
+ The final delimiter is optional if it is the last character on the
+ input line.
+
+'&'
+ Repeat the previous substitution.
+
+'g'
+'a'
+ Cause changes to be applied over the entire event line. Used in
+ conjunction with 's', as in 'gs/OLD/NEW/', or with '&'.
+
+'G'
+ Apply the following 's' modifier once to each word in the event.
+
+
+File: bash.info, Node: Installing Bash, Next: Reporting Bugs, Prev: Using History Interactively, Up: Top
+
+10 Installing Bash
+******************
+
+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.
+
+* Menu:
+
+* Basic Installation:: Installation instructions.
+* Compilers and Options:: How to set special options for various
+ systems.
+* Compiling For Multiple Architectures:: How to compile Bash for more
+ than one kind of system from
+ the same source tree.
+* Installation Names:: How to set the various paths used by the installation.
+* Specifying the System Type:: How to configure Bash for a particular system.
+* Sharing Defaults:: How to share default configuration values among GNU
+ programs.
+* Operation Controls:: Options recognized by the configuration program.
+* Optional Features:: How to enable and disable optional features when
+ building Bash.
+
+
+File: bash.info, Node: Basic Installation, Next: Compilers and Options, Up: Installing Bash
+
+10.1 Basic Installation
+=======================
+
+These are installation instructions for Bash.
+
+ The simplest way to compile Bash is:
+
+ 1. 'cd' to the directory containing the source code and type
+ './configure' to configure Bash for your system. If you're using
+ 'csh' on an old version of System V, you might need to type 'sh
+ ./configure' instead to prevent 'csh' from trying to execute
+ 'configure' itself.
+
+ Running 'configure' takes some time. While running, it prints
+ messages telling which features it is checking for.
+
+ 2. Type 'make' to compile Bash and build the 'bashbug' bug reporting
+ script.
+
+ 3. Optionally, type 'make tests' to run the Bash test suite.
+
+ 4. Type 'make install' to install 'bash' and 'bashbug'. This will
+ also install the manual pages and Info file.
+
+ The 'configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a 'Makefile' in each directory of the package
+(the top directory, the 'builtins', 'doc', and 'support' directories,
+each directory under 'lib', and several others). It also creates a
+'config.h' file containing system-dependent definitions. Finally, it
+creates a shell script named 'config.status' that you can run in the
+future to recreate the current configuration, a file 'config.cache' that
+saves the results of its tests to speed up reconfiguring, and a file
+'config.log' containing compiler output (useful mainly for debugging
+'configure'). If at some point 'config.cache' contains results you
+don't want to keep, you may remove or edit it.
+
+ To find out more about the options and arguments that the 'configure'
+script understands, type
+
+ bash-4.2$ ./configure --help
+
+at the Bash prompt in your Bash source directory.
+
+ If you want to build Bash in a directory separate from the source
+directory - to build for multiple architectures, for example - just use
+the full path to the configure script. The following commands will
+build bash in a directory under '/usr/local/build' from the source code
+in '/usr/local/src/bash-4.4':
+
+ mkdir /usr/local/build/bash-4.4
+ cd /usr/local/build/bash-4.4
+ bash /usr/local/src/bash-4.4/configure
+ make
+
+ See *note Compiling For Multiple Architectures:: for more information
+about building in a directory separate from the source.
+
+ If you need to do unusual things to compile Bash, please try to
+figure out how 'configure' could check whether or not to do them, and
+mail diffs or instructions to <bash-maintainers@gnu.org> so they can be
+considered for the next release.
+
+ The file 'configure.ac' is used to create 'configure' by a program
+called Autoconf. You only need 'configure.ac' if you want to change it
+or regenerate 'configure' using a newer version of Autoconf. If you do
+this, make sure you are using Autoconf version 2.50 or newer.
+
+ You can remove the program binaries and object files from the source
+code directory by typing 'make clean'. To also remove the files that
+'configure' created (so you can compile Bash for a different kind of
+computer), type 'make distclean'.
+
+
+File: bash.info, Node: Compilers and Options, Next: Compiling For Multiple Architectures, Prev: Basic Installation, Up: Installing Bash
+
+10.2 Compilers and Options
+==========================
+
+Some systems require unusual options for compilation or linking that the
+'configure' script does not know about. You can give 'configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+ On systems that have the 'env' program, you can do it like this:
+
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+ The configuration process uses GCC to build Bash if it is available.
+
+
+File: bash.info, Node: Compiling For Multiple Architectures, Next: Installation Names, Prev: Compilers and Options, Up: Installing Bash
+
+10.3 Compiling For Multiple Architectures
+=========================================
+
+You can compile Bash for more than one kind of computer at the same
+time, by placing the object files for each architecture in their own
+directory. To do this, you must use a version of 'make' that supports
+the 'VPATH' variable, such as GNU 'make'. 'cd' to the directory where
+you want the object files and executables to go and run the 'configure'
+script from the source directory (*note Basic Installation::). You may
+need to supply the '--srcdir=PATH' argument to tell 'configure' where
+the source files are. 'configure' automatically checks for the source
+code in the directory that 'configure' is in and in '..'.
+
+ If you have to use a 'make' that does not supports the 'VPATH'
+variable, you can compile Bash for one architecture at a time in the
+source code directory. After you have installed Bash for one
+architecture, use 'make distclean' before reconfiguring for another
+architecture.
+
+ Alternatively, if your system supports symbolic links, you can use
+the 'support/mkclone' script to create a build tree which has symbolic
+links back to each file in the source directory. Here's an example that
+creates a build directory in the current directory from a source
+directory '/usr/gnu/src/bash-2.0':
+
+ bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+
+The 'mkclone' script requires Bash, so you must have already built Bash
+for at least one architecture before you can create build directories
+for other architectures.
+
+
+File: bash.info, Node: Installation Names, Next: Specifying the System Type, Prev: Compiling For Multiple Architectures, Up: Installing Bash
+
+10.4 Installation Names
+=======================
+
+By default, 'make install' will install into '/usr/local/bin',
+'/usr/local/man', etc. You can specify an installation prefix other
+than '/usr/local' by giving 'configure' the option '--prefix=PATH', or
+by specifying a value for the 'DESTDIR' 'make' variable when running
+'make install'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give 'configure' the option '--exec-prefix=PATH', 'make install' will
+use PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+
+File: bash.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash
+
+10.5 Specifying the System Type
+===============================
+
+There may be some features 'configure' can not figure out automatically,
+but need to determine by the type of host Bash will run on. Usually
+'configure' can figure that out, but if it prints a message saying it
+can not guess the host type, give it the '--host=TYPE' option. 'TYPE'
+can either be a short name for the system type, such as 'sun4', or a
+canonical name with three fields: 'CPU-COMPANY-SYSTEM' (e.g.,
+'i386-unknown-freebsd4.2').
+
+ See the file 'support/config.sub' for the possible values of each
+field.
+
+
+File: bash.info, Node: Sharing Defaults, Next: Operation Controls, Prev: Specifying the System Type, Up: Installing Bash
+
+10.6 Sharing Defaults
+=====================
+
+If you want to set default values for 'configure' scripts to share, you
+can create a site shell script called 'config.site' that gives default
+values for variables like 'CC', 'cache_file', and 'prefix'. 'configure'
+looks for 'PREFIX/share/config.site' if it exists, then
+'PREFIX/etc/config.site' if it exists. Or, you can set the
+'CONFIG_SITE' environment variable to the location of the site script.
+A warning: the Bash 'configure' looks for a site script, but not all
+'configure' scripts do.
+
+
+File: bash.info, Node: Operation Controls, Next: Optional Features, Prev: Sharing Defaults, Up: Installing Bash
+
+10.7 Operation Controls
+=======================
+
+'configure' recognizes the following options to control how it operates.
+
+'--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ './config.cache'. Set FILE to '/dev/null' to disable caching, for
+ debugging 'configure'.
+
+'--help'
+ Print a summary of the options to 'configure', and exit.
+
+'--quiet'
+'--silent'
+'-q'
+ Do not print messages saying which checks are being made.
+
+'--srcdir=DIR'
+ Look for the Bash source code in directory DIR. Usually
+ 'configure' can determine that directory automatically.
+
+'--version'
+ Print the version of Autoconf used to generate the 'configure'
+ script, and exit.
+
+ 'configure' also accepts some other, not widely used, boilerplate
+options. 'configure --help' prints the complete list.
+
+
+File: bash.info, Node: Optional Features, Prev: Operation Controls, Up: Installing Bash
+
+10.8 Optional Features
+======================
+
+The Bash 'configure' has a number of '--enable-FEATURE' options, where
+FEATURE indicates an optional part of Bash. There are also several
+'--with-PACKAGE' options, where PACKAGE is something like 'bash-malloc'
+or 'purify'. To turn off the default use of a package, use
+'--without-PACKAGE'. To configure Bash without a feature that is
+enabled by default, use '--disable-FEATURE'.
+
+ Here is a complete list of the '--enable-' and '--with-' options that
+the Bash 'configure' recognizes.
+
+'--with-afs'
+ Define if you are using the Andrew File System from Transarc.
+
+'--with-bash-malloc'
+ Use the Bash version of 'malloc' in the directory 'lib/malloc'.
+ This is not the same 'malloc' that appears in GNU libc, but an
+ older version originally derived from the 4.2 BSD 'malloc'. This
+ 'malloc' is very fast, but wastes some space on each allocation.
+ This option is enabled by default. The 'NOTES' file contains a
+ list of systems for which this should be turned off, and
+ 'configure' disables this option automatically for a number of
+ systems.
+
+'--with-curses'
+ Use the curses library instead of the termcap library. This should
+ be supplied if your system has an inadequate or incomplete termcap
+ database.
+
+'--with-gnu-malloc'
+ A synonym for '--with-bash-malloc'.
+
+'--with-installed-readline[=PREFIX]'
+ Define this to make Bash link with a locally-installed version of
+ Readline rather than the version in 'lib/readline'. This works
+ only with Readline 5.0 and later versions. If PREFIX is 'yes' or
+ not supplied, 'configure' uses the values of the make variables
+ 'includedir' and 'libdir', which are subdirectories of 'prefix' by
+ default, to find the installed version of Readline if it is not in
+ the standard system include and library directories. If PREFIX is
+ 'no', Bash links with the version in 'lib/readline'. If PREFIX is
+ set to any other value, 'configure' treats it as a directory
+ pathname and looks for the installed version of Readline in
+ subdirectories of that directory (include files in PREFIX/'include'
+ and the library in PREFIX/'lib').
+
+'--with-purify'
+ Define this to use the Purify memory allocation checker from
+ Rational Software.
+
+'--enable-minimal-config'
+ This produces a shell with minimal features, close to the
+ historical Bourne shell.
+
+ There are several '--enable-' options that alter how Bash is compiled
+and linked, rather than changing run-time features.
+
+'--enable-largefile'
+ Enable support for large files
+ (http://www.unix.org/version2/whatsnew/lfs20mar.html) 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.
+
+'--enable-profiling'
+ This builds a Bash binary that produces profiling information to be
+ processed by 'gprof' each time it is executed.
+
+'--enable-static-link'
+ This causes Bash to be linked statically, if 'gcc' is being used.
+ This could be used to build a version to use as root's shell.
+
+ The 'minimal-config' option can be used to disable all of the
+following options, but it is processed first, so individual options may
+be enabled using 'enable-FEATURE'.
+
+ All of the following options except for 'disabled-builtins',
+'direxpand-default', and 'xpg-echo-default' are enabled by default,
+unless the operating system does not provide the necessary support.
+
+'--enable-alias'
+ Allow alias expansion and include the 'alias' and 'unalias'
+ builtins (*note Aliases::).
+
+'--enable-arith-for-command'
+ Include support for the alternate form of the 'for' command that
+ behaves like the C language 'for' statement (*note Looping
+ Constructs::).
+
+'--enable-array-variables'
+ Include support for one-dimensional array shell variables (*note
+ Arrays::).
+
+'--enable-bang-history'
+ Include support for 'csh'-like history substitution (*note History
+ Interaction::).
+
+'--enable-brace-expansion'
+ Include 'csh'-like brace expansion ( 'b{a,b}c' ==> 'bac bbc' ).
+ See *note Brace Expansion::, for a complete description.
+
+'--enable-casemod-attributes'
+ Include support for case-modifying attributes in the 'declare'
+ builtin and assignment statements. Variables with the UPPERCASE
+ attribute, for example, will have their values converted to
+ uppercase upon assignment.
+
+'--enable-casemod-expansion'
+ Include support for case-modifying word expansions.
+
+'--enable-command-timing'
+ Include support for recognizing 'time' as a reserved word and for
+ displaying timing statistics for the pipeline following 'time'
+ (*note Pipelines::). This allows pipelines as well as shell
+ builtins and functions to be timed.
+
+'--enable-cond-command'
+ Include support for the '[[' conditional command. (*note
+ Conditional Constructs::).
+
+'--enable-cond-regexp'
+ Include support for matching POSIX regular expressions using the
+ '=~' binary operator in the '[[' conditional command. (*note
+ Conditional Constructs::).
+
+'--enable-coprocesses'
+ Include support for coprocesses and the 'coproc' reserved word
+ (*note Pipelines::).
+
+'--enable-debugger'
+ Include support for the bash debugger (distributed separately).
+
+'--enable-dev-fd-stat-broken'
+ If calling 'stat' on /dev/fd/N returns different results than
+ calling 'fstat' on file descriptor N, supply this option to enable
+ a workaround. This has implications for conditional commands that
+ test file attributes.
+
+'--enable-direxpand-default'
+ Cause the 'direxpand' shell option (*note The Shopt Builtin::) to
+ be enabled by default when the shell starts. It is normally
+ disabled by default.
+
+'--enable-directory-stack'
+ Include support for a 'csh'-like directory stack and the 'pushd',
+ 'popd', and 'dirs' builtins (*note The Directory Stack::).
+
+'--enable-disabled-builtins'
+ Allow builtin commands to be invoked via 'builtin xxx' even after
+ 'xxx' has been disabled using 'enable -n xxx'. See *note Bash
+ Builtins::, for details of the 'builtin' and 'enable' builtin
+ commands.
+
+'--enable-dparen-arithmetic'
+ Include support for the '((...))' command (*note Conditional
+ Constructs::).
+
+'--enable-extended-glob'
+ Include support for the extended pattern matching features
+ described above under *note Pattern Matching::.
+
+'--enable-extended-glob-default'
+ Set the default value of the EXTGLOB shell option described above
+ under *note The Shopt Builtin:: to be enabled.
+
+'--enable-function-import'
+ Include support for importing function definitions exported by
+ another instance of the shell from the environment. This option is
+ enabled by default.
+
+'--enable-glob-asciirange-default'
+ Set the default value of the GLOBASCIIRANGES shell option described
+ above under *note The Shopt Builtin:: to be enabled. This controls
+ the behavior of character ranges when used in pattern matching
+ bracket expressions.
+
+'--enable-help-builtin'
+ Include the 'help' builtin, which displays help on shell builtins
+ and variables (*note Bash Builtins::).
+
+'--enable-history'
+ Include command history and the 'fc' and 'history' builtin commands
+ (*note Bash History Facilities::).
+
+'--enable-job-control'
+ This enables the job control features (*note Job Control::), if the
+ operating system supports them.
+
+'--enable-multibyte'
+ This enables support for multibyte characters if the operating
+ system provides the necessary support.
+
+'--enable-net-redirections'
+ This enables the special handling of filenames of the form
+ '/dev/tcp/HOST/PORT' and '/dev/udp/HOST/PORT' when used in
+ redirections (*note Redirections::).
+
+'--enable-process-substitution'
+ This enables process substitution (*note Process Substitution::) if
+ the operating system provides the necessary support.
+
+'--enable-progcomp'
+ Enable the programmable completion facilities (*note Programmable
+ Completion::). If Readline is not enabled, this option has no
+ effect.
+
+'--enable-prompt-string-decoding'
+ Turn on the interpretation of a number of backslash-escaped
+ characters in the '$PS0', '$PS1', '$PS2', and '$PS4' prompt
+ strings. See *note Controlling the Prompt::, for a complete list
+ of prompt string escape sequences.
+
+'--enable-readline'
+ Include support for command-line editing and history with the Bash
+ version of the Readline library (*note Command Line Editing::).
+
+'--enable-restricted'
+ Include support for a "restricted shell". If this is enabled,
+ Bash, when called as 'rbash', enters a restricted mode. See *note
+ The Restricted Shell::, for a description of restricted mode.
+
+'--enable-select'
+ Include the 'select' compound command, which allows the generation
+ of simple menus (*note Conditional Constructs::).
+
+'--enable-separate-helpfiles'
+ Use external files for the documentation displayed by the 'help'
+ builtin instead of storing the text internally.
+
+'--enable-single-help-strings'
+ Store the text displayed by the 'help' builtin as a single string
+ for each help topic. This aids in translating the text to
+ different languages. You may need to disable this if your compiler
+ cannot handle very long string literals.
+
+'--enable-strict-posix-default'
+ Make Bash POSIX-conformant by default (*note Bash POSIX Mode::).
+
+'--enable-usg-echo-default'
+ A synonym for '--enable-xpg-echo-default'.
+
+'--enable-xpg-echo-default'
+ Make the 'echo' builtin expand backslash-escaped characters by
+ default, without requiring the '-e' option. This sets the default
+ value of the 'xpg_echo' shell option to 'on', which makes the Bash
+ 'echo' behave more like the version specified in the Single Unix
+ Specification, version 3. *Note Bash Builtins::, for a description
+ of the escape sequences that 'echo' recognizes.
+
+ The file 'config-top.h' contains C Preprocessor '#define' statements
+for options which are not settable from 'configure'. Some of these are
+not meant to be changed; beware of the consequences if you do. Read the
+comments associated with each definition for more information about its
+effect.
+
+
+File: bash.info, Node: Reporting Bugs, Next: Major Differences From The Bourne Shell, Prev: Installing Bash, Up: Top
+
+Appendix A Reporting Bugs
+*************************
+
+Please report all bugs you find in Bash. But first, you should make
+sure that it really is a bug, and that it appears in the latest version
+of Bash. The latest version of Bash is always available for FTP from
+<ftp://ftp.gnu.org/pub/gnu/bash/>.
+
+ Once you have determined that a bug actually exists, use the
+'bashbug' command to submit a bug report. If you have a fix, you are
+encouraged to mail that as well! Suggestions and 'philosophical' bug
+reports may be mailed to <bug-bash@gnu.org> or posted to the Usenet
+newsgroup 'gnu.bash.bug'.
+
+ All bug reports should include:
+ * The version number of Bash.
+ * The hardware and operating system.
+ * The compiler used to compile Bash.
+ * A description of the bug behaviour.
+ * A short script or 'recipe' which exercises the bug and may be used
+ to reproduce it.
+
+'bashbug' inserts the first three items automatically into the template
+it provides for filing a bug report.
+
+ Please send all reports concerning this manual to <bug-bash@gnu.org>.
+
+
+File: bash.info, Node: Major Differences From The Bourne Shell, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
+
+Appendix B Major Differences From The Bourne Shell
+**************************************************
+
+Bash implements essentially the same grammar, parameter and variable
+expansion, redirection, and quoting as the Bourne Shell. Bash uses the
+POSIX standard as the specification of how these features are to be
+implemented. There are some differences between the traditional Bourne
+shell and Bash; this section quickly details the differences of
+significance. A number of these differences are explained in greater
+depth in previous sections. This section uses the version of 'sh'
+included in SVR4.2 (the last version of the historical Bourne shell) as
+the baseline reference.
+
+ * Bash is POSIX-conformant, even where the POSIX specification
+ differs from traditional 'sh' behavior (*note Bash POSIX Mode::).
+
+ * Bash has multi-character invocation options (*note Invoking
+ Bash::).
+
+ * Bash has command-line editing (*note Command Line Editing::) and
+ the 'bind' builtin.
+
+ * Bash provides a programmable word completion mechanism (*note
+ Programmable Completion::), and builtin commands 'complete',
+ 'compgen', and 'compopt', to manipulate it.
+
+ * Bash has command history (*note Bash History Facilities::) and the
+ 'history' and 'fc' builtins to manipulate it. The Bash history
+ list maintains timestamp information and uses the value of the
+ 'HISTTIMEFORMAT' variable to display it.
+
+ * Bash implements 'csh'-like history expansion (*note History
+ Interaction::).
+
+ * Bash has one-dimensional array variables (*note Arrays::), 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.
+
+ * The '$'...'' quoting syntax, which expands ANSI-C backslash-escaped
+ characters in the text between the single quotes, is supported
+ (*note ANSI-C Quoting::).
+
+ * Bash supports the '$"..."' quoting syntax to do locale-specific
+ translation of the characters between the double quotes. The '-D',
+ '--dump-strings', and '--dump-po-strings' invocation options list
+ the translatable strings found in a script (*note Locale
+ Translation::).
+
+ * Bash implements the '!' keyword to negate the return value of a
+ pipeline (*note Pipelines::). Very useful when an 'if' statement
+ needs to act only if a test fails. The Bash '-o pipefail' option
+ to 'set' will cause a pipeline to return a failure status if any
+ command fails.
+
+ * Bash has the 'time' reserved word and command timing (*note
+ Pipelines::). The display of the timing statistics may be
+ controlled with the 'TIMEFORMAT' variable.
+
+ * Bash implements the 'for (( EXPR1 ; EXPR2 ; EXPR3 ))' arithmetic
+ for command, similar to the C language (*note Looping
+ Constructs::).
+
+ * Bash includes the 'select' compound command, which allows the
+ generation of simple menus (*note Conditional Constructs::).
+
+ * Bash includes the '[[' compound command, which makes conditional
+ testing part of the shell grammar (*note Conditional Constructs::),
+ including optional regular expression matching.
+
+ * Bash provides optional case-insensitive matching for the 'case' and
+ '[[' constructs.
+
+ * Bash includes brace expansion (*note Brace Expansion::) and tilde
+ expansion (*note Tilde Expansion::).
+
+ * Bash implements command aliases and the 'alias' and 'unalias'
+ builtins (*note Aliases::).
+
+ * Bash provides shell arithmetic, the '((' compound command (*note
+ Conditional Constructs::), and arithmetic expansion (*note Shell
+ Arithmetic::).
+
+ * 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 'export' command.
+
+ * Bash supports the '+=' assignment operator, which appends to the
+ value of the variable named on the left hand side.
+
+ * Bash includes the POSIX pattern removal '%', '#', '%%' and '##'
+ expansions to remove leading or trailing substrings from variable
+ values (*note Shell Parameter Expansion::).
+
+ * The expansion '${#xx}', which returns the length of '${xx}', is
+ supported (*note Shell Parameter Expansion::).
+
+ * The expansion '${var:'OFFSET'[:'LENGTH']}', which expands to the
+ substring of 'var''s value of length LENGTH, beginning at OFFSET,
+ is present (*note Shell Parameter Expansion::).
+
+ * The expansion '${var/[/]'PATTERN'[/'REPLACEMENT']}', which matches
+ PATTERN and replaces it with REPLACEMENT in the value of 'var', is
+ available (*note Shell Parameter Expansion::).
+
+ * The expansion '${!PREFIX*}' expansion, which expands to the names
+ of all shell variables whose names begin with PREFIX, is available
+ (*note Shell Parameter Expansion::).
+
+ * Bash has INDIRECT variable expansion using '${!word}' (*note Shell
+ Parameter Expansion::).
+
+ * Bash can expand positional parameters beyond '$9' using '${NUM}'.
+
+ * The POSIX '$()' form of command substitution is implemented (*note
+ Command Substitution::), and preferred to the Bourne shell's '``'
+ (which is also implemented for backwards compatibility).
+
+ * Bash has process substitution (*note Process Substitution::).
+
+ * Bash automatically assigns variables that provide information about
+ the current user ('UID', 'EUID', and 'GROUPS'), the current host
+ ('HOSTTYPE', 'OSTYPE', 'MACHTYPE', and 'HOSTNAME'), and the
+ instance of Bash that is running ('BASH', 'BASH_VERSION', and
+ 'BASH_VERSINFO'). *Note Bash Variables::, for details.
+
+ * The 'IFS' variable is used to split only the results of expansion,
+ not all words (*note Word Splitting::). This closes a longstanding
+ shell security hole.
+
+ * The filename expansion bracket expression code uses '!' and '^' to
+ negate the set of characters between the brackets. The Bourne
+ shell uses only '!'.
+
+ * Bash implements the full set of POSIX filename expansion operators,
+ including CHARACTER CLASSES, EQUIVALENCE CLASSES, and COLLATING
+ SYMBOLS (*note Filename Expansion::).
+
+ * Bash implements extended pattern matching features when the
+ 'extglob' shell option is enabled (*note Pattern Matching::).
+
+ * It is possible to have a variable and a function with the same
+ name; 'sh' does not separate the two name spaces.
+
+ * Bash functions are permitted to have local variables using the
+ 'local' builtin, and thus useful recursive functions may be written
+ (*note Bash Builtins::).
+
+ * Variable assignments preceding commands affect only that command,
+ even builtins and functions (*note Environment::). In 'sh', all
+ variable assignments preceding commands are global unless the
+ command is executed from the file system.
+
+ * Bash performs filename expansion on filenames specified as operands
+ to input and output redirection operators (*note Redirections::).
+
+ * Bash contains the '<>' redirection operator, allowing a file to be
+ opened for both reading and writing, and the '&>' redirection
+ operator, for directing standard output and standard error to the
+ same file (*note Redirections::).
+
+ * Bash includes the '<<<' redirection operator, allowing a string to
+ be used as the standard input to a command.
+
+ * Bash implements the '[n]<&WORD' and '[n]>&WORD' redirection
+ operators, which move one file descriptor to another.
+
+ * Bash treats a number of filenames specially when they are used in
+ redirection operators (*note Redirections::).
+
+ * Bash can open network connections to arbitrary machines and
+ services with the redirection operators (*note Redirections::).
+
+ * The 'noclobber' option is available to avoid overwriting existing
+ files with output redirection (*note The Set Builtin::). The '>|'
+ redirection operator may be used to override 'noclobber'.
+
+ * The Bash 'cd' and 'pwd' builtins (*note Bourne Shell Builtins::)
+ each take '-L' and '-P' options to switch between logical and
+ physical modes.
+
+ * 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 'builtin' and 'command' builtins (*note Bash
+ Builtins::).
+
+ * The 'command' builtin allows selective disabling of functions when
+ command lookup is performed (*note Bash Builtins::).
+
+ * Individual builtins may be enabled or disabled using the 'enable'
+ builtin (*note Bash Builtins::).
+
+ * The Bash 'exec' builtin takes additional options that allow users
+ to control the contents of the environment passed to the executed
+ command, and what the zeroth argument to the command is to be
+ (*note Bourne Shell Builtins::).
+
+ * Shell functions may be exported to children via the environment
+ using 'export -f' (*note Shell Functions::).
+
+ * The Bash 'export', 'readonly', and 'declare' builtins can take a
+ '-f' option to act on shell functions, a '-p' option to display
+ variables with various attributes set in a format that can be used
+ as shell input, a '-n' option to remove various variable
+ attributes, and 'name=value' arguments to set variable attributes
+ and values simultaneously.
+
+ * The Bash 'hash' builtin allows a name to be associated with an
+ arbitrary filename, even when that filename cannot be found by
+ searching the '$PATH', using 'hash -p' (*note Bourne Shell
+ Builtins::).
+
+ * Bash includes a 'help' builtin for quick reference to shell
+ facilities (*note Bash Builtins::).
+
+ * The 'printf' builtin is available to display formatted output
+ (*note Bash Builtins::).
+
+ * The Bash 'read' builtin (*note Bash Builtins::) will read a line
+ ending in '\' with the '-r' option, and will use the 'REPLY'
+ variable as a default if no non-option arguments are supplied. The
+ Bash 'read' builtin also accepts a prompt string with the '-p'
+ option and will use Readline to obtain the line when given the '-e'
+ option. The 'read' builtin also has additional options to control
+ input: the '-s' option will turn off echoing of input characters as
+ they are read, the '-t' option will allow 'read' to time out if
+ input does not arrive within a specified number of seconds, the
+ '-n' option will allow reading only a specified number of
+ characters rather than a full line, and the '-d' option will read
+ until a particular character rather than newline.
+
+ * The 'return' builtin may be used to abort execution of scripts
+ executed with the '.' or 'source' builtins (*note Bourne Shell
+ Builtins::).
+
+ * Bash includes the 'shopt' builtin, for finer control of shell
+ optional capabilities (*note The Shopt Builtin::), and allows these
+ options to be set and unset at shell invocation (*note Invoking
+ Bash::).
+
+ * Bash has much more optional behavior controllable with the 'set'
+ builtin (*note The Set Builtin::).
+
+ * The '-x' ('xtrace') option displays commands other than simple
+ commands when performing an execution trace (*note The Set
+ Builtin::).
+
+ * The 'test' builtin (*note Bourne Shell Builtins::) is slightly
+ different, as it implements the POSIX algorithm, which specifies
+ the behavior based on the number of arguments.
+
+ * Bash includes the 'caller' builtin, which displays the context of
+ any active subroutine call (a shell function or a script executed
+ with the '.' or 'source' builtins). This supports the bash
+ debugger.
+
+ * The 'trap' builtin (*note Bourne Shell Builtins::) allows a 'DEBUG'
+ pseudo-signal specification, similar to 'EXIT'. Commands specified
+ with a 'DEBUG' trap are executed before every simple command, 'for'
+ command, 'case' command, 'select' command, every arithmetic 'for'
+ command, and before the first command executes in a shell function.
+ The 'DEBUG' trap is not inherited by shell functions unless the
+ function has been given the 'trace' attribute or the 'functrace'
+ option has been enabled using the 'shopt' builtin. The 'extdebug'
+ shell option has additional effects on the 'DEBUG' trap.
+
+ The 'trap' builtin (*note Bourne Shell Builtins::) allows an 'ERR'
+ pseudo-signal specification, similar to 'EXIT' and 'DEBUG'.
+ Commands specified with an 'ERR' trap are executed after a simple
+ command fails, with a few exceptions. The 'ERR' trap is not
+ inherited by shell functions unless the '-o errtrace' option to the
+ 'set' builtin is enabled.
+
+ The 'trap' builtin (*note Bourne Shell Builtins::) allows a
+ 'RETURN' pseudo-signal specification, similar to 'EXIT' and
+ 'DEBUG'. Commands specified with an 'RETURN' trap are executed
+ before execution resumes after a shell function or a shell script
+ executed with '.' or 'source' returns. The 'RETURN' trap is not
+ inherited by shell functions unless the function has been given the
+ 'trace' attribute or the 'functrace' option has been enabled using
+ the 'shopt' builtin.
+
+ * The Bash 'type' builtin is more extensive and gives more
+ information about the names it finds (*note Bash Builtins::).
+
+ * The Bash 'umask' builtin permits a '-p' option to cause the output
+ to be displayed in the form of a 'umask' command that may be reused
+ as input (*note Bourne Shell Builtins::).
+
+ * Bash implements a 'csh'-like directory stack, and provides the
+ 'pushd', 'popd', and 'dirs' builtins to manipulate it (*note The
+ Directory Stack::). Bash also makes the directory stack visible as
+ the value of the 'DIRSTACK' shell variable.
+
+ * Bash interprets special backslash-escaped characters in the prompt
+ strings when interactive (*note Controlling the Prompt::).
+
+ * The Bash restricted mode is more useful (*note The Restricted
+ Shell::); the SVR4.2 shell restricted mode is too limited.
+
+ * The 'disown' builtin can remove a job from the internal shell job
+ table (*note Job Control Builtins::) or suppress the sending of
+ 'SIGHUP' to a job when the shell exits as the result of a 'SIGHUP'.
+
+ * Bash includes a number of features to support a separate debugger
+ for shell scripts.
+
+ * The SVR4.2 shell has two privilege-related builtins ('mldmode' and
+ 'priv') not present in Bash.
+
+ * Bash does not have the 'stop' or 'newgrp' builtins.
+
+ * Bash does not use the 'SHACCT' variable or perform shell
+ accounting.
+
+ * The SVR4.2 'sh' uses a 'TIMEOUT' variable like Bash uses 'TMOUT'.
+
+More features unique to Bash may be found in *note Bash Features::.
+
+B.1 Implementation Differences From The SVR4.2 Shell
+====================================================
+
+Since Bash is a completely new implementation, it does not suffer from
+many of the limitations of the SVR4.2 shell. For instance:
+
+ * Bash does not fork a subshell when redirecting into or out of a
+ shell control structure such as an 'if' or 'while' statement.
+
+ * Bash does not allow unbalanced quotes. The SVR4.2 shell will
+ silently insert a needed closing quote at 'EOF' under certain
+ circumstances. This can be the cause of some hard-to-find errors.
+
+ * The SVR4.2 shell uses a baroque memory management scheme based on
+ trapping 'SIGSEGV'. If the shell is started from a process with
+ 'SIGSEGV' blocked (e.g., by using the 'system()' C library function
+ call), it misbehaves badly.
+
+ * In a questionable attempt at security, the SVR4.2 shell, when
+ invoked without the '-p' 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.
+
+ * The SVR4.2 shell does not allow users to trap 'SIGSEGV', 'SIGALRM',
+ or 'SIGCHLD'.
+
+ * The SVR4.2 shell does not allow the 'IFS', 'MAILCHECK', 'PATH',
+ 'PS1', or 'PS2' variables to be unset.
+
+ * The SVR4.2 shell treats '^' as the undocumented equivalent of '|'.
+
+ * Bash allows multiple option arguments when it is invoked ('-x -v');
+ the SVR4.2 shell allows only one option argument ('-xv'). In fact,
+ some versions of the shell dump core if the second argument begins
+ with a '-'.
+
+ * 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.
+
+ * The SVR4.2 shell behaves differently when invoked as 'jsh' (it
+ turns on job control).
+
+
+File: bash.info, Node: GNU Free Documentation License, Next: Indexes, Prev: Major Differences From The Bourne Shell, Up: Top
+
+Appendix C GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ 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:
+
+ A. 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.
+
+ B. 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.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. 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.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. 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.
+
+ J. 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.
+
+ K. 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.
+
+ L. 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.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <http://www.gnu.org/copyleft/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: bash.info, Node: Indexes, Prev: GNU Free Documentation License, Up: Top
+
+Appendix D Indexes
+******************
+
+* Menu:
+
+* Builtin Index:: Index of Bash builtin commands.
+* Reserved Word Index:: Index of Bash reserved words.
+* Variable Index:: Quick reference helps you find the
+ variable you want.
+* Function Index:: Index of bindable Readline functions.
+* Concept Index:: General index for concepts described in
+ this manual.
+
+
+File: bash.info, Node: Builtin Index, Next: Reserved Word Index, Up: Indexes
+
+D.1 Index of Shell Builtin Commands
+===================================
+
+
+* Menu:
+
+* .: Bourne Shell Builtins.
+ (line 17)
+* :: Bourne Shell Builtins.
+ (line 11)
+* [: Bourne Shell Builtins.
+ (line 269)
+* alias: Bash Builtins. (line 11)
+* bg: Job Control Builtins.
+ (line 7)
+* bind: Bash Builtins. (line 21)
+* break: Bourne Shell Builtins.
+ (line 36)
+* builtin: Bash Builtins. (line 102)
+* caller: Bash Builtins. (line 111)
+* cd: Bourne Shell Builtins.
+ (line 44)
+* command: Bash Builtins. (line 128)
+* compgen: Programmable Completion Builtins.
+ (line 12)
+* complete: Programmable Completion Builtins.
+ (line 30)
+* compopt: Programmable Completion Builtins.
+ (line 237)
+* continue: Bourne Shell Builtins.
+ (line 85)
+* declare: Bash Builtins. (line 148)
+* dirs: Directory Stack Builtins.
+ (line 7)
+* disown: Job Control Builtins.
+ (line 92)
+* echo: Bash Builtins. (line 246)
+* enable: Bash Builtins. (line 295)
+* eval: Bourne Shell Builtins.
+ (line 94)
+* exec: Bourne Shell Builtins.
+ (line 102)
+* exit: Bourne Shell Builtins.
+ (line 120)
+* export: Bourne Shell Builtins.
+ (line 127)
+* fc: Bash History Builtins.
+ (line 10)
+* fg: Job Control Builtins.
+ (line 17)
+* getopts: Bourne Shell Builtins.
+ (line 143)
+* hash: Bourne Shell Builtins.
+ (line 186)
+* help: Bash Builtins. (line 324)
+* history: Bash History Builtins.
+ (line 40)
+* jobs: Job Control Builtins.
+ (line 27)
+* kill: Job Control Builtins.
+ (line 58)
+* let: Bash Builtins. (line 343)
+* local: Bash Builtins. (line 351)
+* logout: Bash Builtins. (line 365)
+* mapfile: Bash Builtins. (line 370)
+* popd: Directory Stack Builtins.
+ (line 35)
+* printf: Bash Builtins. (line 416)
+* pushd: Directory Stack Builtins.
+ (line 53)
+* pwd: Bourne Shell Builtins.
+ (line 206)
+* read: Bash Builtins. (line 460)
+* readarray: Bash Builtins. (line 554)
+* readonly: Bourne Shell Builtins.
+ (line 216)
+* return: Bourne Shell Builtins.
+ (line 235)
+* set: The Set Builtin. (line 11)
+* shift: Bourne Shell Builtins.
+ (line 256)
+* shopt: The Shopt Builtin. (line 9)
+* source: Bash Builtins. (line 563)
+* suspend: Job Control Builtins.
+ (line 104)
+* test: Bourne Shell Builtins.
+ (line 269)
+* times: Bourne Shell Builtins.
+ (line 348)
+* trap: Bourne Shell Builtins.
+ (line 354)
+* type: Bash Builtins. (line 568)
+* typeset: Bash Builtins. (line 600)
+* ulimit: Bash Builtins. (line 606)
+* umask: Bourne Shell Builtins.
+ (line 403)
+* unalias: Bash Builtins. (line 705)
+* unset: Bourne Shell Builtins.
+ (line 421)
+* wait: Job Control Builtins.
+ (line 76)
+
+
+File: bash.info, Node: Reserved Word Index, Next: Variable Index, Prev: Builtin Index, Up: Indexes
+
+D.2 Index of Shell Reserved Words
+=================================
+
+
+* Menu:
+
+* !: Pipelines. (line 9)
+* [[: Conditional Constructs.
+ (line 124)
+* ]]: Conditional Constructs.
+ (line 124)
+* {: Command Grouping. (line 21)
+* }: Command Grouping. (line 21)
+* case: Conditional Constructs.
+ (line 28)
+* do: Looping Constructs. (line 12)
+* done: Looping Constructs. (line 12)
+* elif: Conditional Constructs.
+ (line 7)
+* else: Conditional Constructs.
+ (line 7)
+* esac: Conditional Constructs.
+ (line 28)
+* fi: Conditional Constructs.
+ (line 7)
+* for: Looping Constructs. (line 32)
+* function: Shell Functions. (line 13)
+* if: Conditional Constructs.
+ (line 7)
+* in: Conditional Constructs.
+ (line 28)
+* select: Conditional Constructs.
+ (line 82)
+* then: Conditional Constructs.
+ (line 7)
+* time: Pipelines. (line 9)
+* until: Looping Constructs. (line 12)
+* while: Looping Constructs. (line 22)
+
+
+File: bash.info, Node: Variable Index, Next: Function Index, Prev: Reserved Word Index, Up: Indexes
+
+D.3 Parameter and Variable Index
+================================
+
+
+* Menu:
+
+* !: Special Parameters. (line 56)
+* #: Special Parameters. (line 39)
+* $: Special Parameters. (line 51)
+* $!: Special Parameters. (line 57)
+* $#: Special Parameters. (line 40)
+* $$: Special Parameters. (line 52)
+* $*: Special Parameters. (line 10)
+* $-: Special Parameters. (line 47)
+* $0: Special Parameters. (line 62)
+* $?: Special Parameters. (line 43)
+* $@: Special Parameters. (line 23)
+* $_: Special Parameters. (line 71)
+* *: Special Parameters. (line 9)
+* -: Special Parameters. (line 46)
+* 0: Special Parameters. (line 61)
+* ?: Special Parameters. (line 42)
+* @: Special Parameters. (line 22)
+* _: Special Parameters. (line 70)
+* auto_resume: Job Control Variables.
+ (line 6)
+* BASH: Bash Variables. (line 13)
+* BASHOPTS: Bash Variables. (line 16)
+* BASHPID: Bash Variables. (line 25)
+* BASH_ALIASES: Bash Variables. (line 32)
+* BASH_ARGC: Bash Variables. (line 41)
+* BASH_ARGV: Bash Variables. (line 54)
+* BASH_ARGV0: Bash Variables. (line 66)
+* BASH_CMDS: Bash Variables. (line 74)
+* BASH_COMMAND: Bash Variables. (line 83)
+* BASH_COMPAT: Bash Variables. (line 88)
+* BASH_ENV: Bash Variables. (line 103)
+* BASH_EXECUTION_STRING: Bash Variables. (line 109)
+* BASH_LINENO: Bash Variables. (line 112)
+* BASH_LOADABLES_PATH: Bash Variables. (line 120)
+* BASH_REMATCH: Bash Variables. (line 124)
+* BASH_SOURCE: Bash Variables. (line 132)
+* BASH_SUBSHELL: Bash Variables. (line 139)
+* BASH_VERSINFO: Bash Variables. (line 144)
+* BASH_VERSION: Bash Variables. (line 167)
+* BASH_XTRACEFD: Bash Variables. (line 170)
+* bell-style: Readline Init File Syntax.
+ (line 38)
+* bind-tty-special-chars: Readline Init File Syntax.
+ (line 45)
+* blink-matching-paren: Readline Init File Syntax.
+ (line 50)
+* CDPATH: Bourne Shell Variables.
+ (line 9)
+* CHILD_MAX: Bash Variables. (line 181)
+* colored-completion-prefix: Readline Init File Syntax.
+ (line 55)
+* colored-stats: Readline Init File Syntax.
+ (line 62)
+* COLUMNS: Bash Variables. (line 188)
+* comment-begin: Readline Init File Syntax.
+ (line 68)
+* completion-display-width: Readline Init File Syntax.
+ (line 73)
+* completion-ignore-case: Readline Init File Syntax.
+ (line 80)
+* completion-map-case: Readline Init File Syntax.
+ (line 85)
+* completion-prefix-display-length: Readline Init File Syntax.
+ (line 91)
+* completion-query-items: Readline Init File Syntax.
+ (line 98)
+* COMPREPLY: Bash Variables. (line 240)
+* COMP_CWORD: Bash Variables. (line 194)
+* COMP_KEY: Bash Variables. (line 223)
+* COMP_LINE: Bash Variables. (line 200)
+* COMP_POINT: Bash Variables. (line 205)
+* COMP_TYPE: Bash Variables. (line 213)
+* COMP_WORDBREAKS: Bash Variables. (line 227)
+* COMP_WORDS: Bash Variables. (line 233)
+* convert-meta: Readline Init File Syntax.
+ (line 108)
+* COPROC: Bash Variables. (line 246)
+* DIRSTACK: Bash Variables. (line 250)
+* disable-completion: Readline Init File Syntax.
+ (line 116)
+* echo-control-characters: Readline Init File Syntax.
+ (line 121)
+* editing-mode: Readline Init File Syntax.
+ (line 126)
+* EMACS: Bash Variables. (line 260)
+* emacs-mode-string: Readline Init File Syntax.
+ (line 132)
+* enable-bracketed-paste: Readline Init File Syntax.
+ (line 142)
+* enable-keypad: Readline Init File Syntax.
+ (line 150)
+* ENV: Bash Variables. (line 265)
+* EPOCHREALTIME: Bash Variables. (line 269)
+* EPOCHSECONDS: Bash Variables. (line 277)
+* EUID: Bash Variables. (line 284)
+* EXECIGNORE: Bash Variables. (line 288)
+* expand-tilde: Readline Init File Syntax.
+ (line 161)
+* FCEDIT: Bash Variables. (line 301)
+* FIGNORE: Bash Variables. (line 305)
+* FUNCNAME: Bash Variables. (line 311)
+* FUNCNEST: Bash Variables. (line 328)
+* GLOBIGNORE: Bash Variables. (line 333)
+* GROUPS: Bash Variables. (line 340)
+* histchars: Bash Variables. (line 346)
+* HISTCMD: Bash Variables. (line 361)
+* HISTCONTROL: Bash Variables. (line 366)
+* HISTFILE: Bash Variables. (line 382)
+* HISTFILESIZE: Bash Variables. (line 386)
+* HISTIGNORE: Bash Variables. (line 397)
+* history-preserve-point: Readline Init File Syntax.
+ (line 165)
+* history-size: Readline Init File Syntax.
+ (line 171)
+* HISTSIZE: Bash Variables. (line 417)
+* HISTTIMEFORMAT: Bash Variables. (line 424)
+* HOME: Bourne Shell Variables.
+ (line 13)
+* horizontal-scroll-mode: Readline Init File Syntax.
+ (line 180)
+* HOSTFILE: Bash Variables. (line 432)
+* HOSTNAME: Bash Variables. (line 443)
+* HOSTTYPE: Bash Variables. (line 446)
+* IFS: Bourne Shell Variables.
+ (line 18)
+* IGNOREEOF: Bash Variables. (line 449)
+* input-meta: Readline Init File Syntax.
+ (line 187)
+* INPUTRC: Bash Variables. (line 459)
+* INSIDE_EMACS: Bash Variables. (line 463)
+* isearch-terminators: Readline Init File Syntax.
+ (line 195)
+* keymap: Readline Init File Syntax.
+ (line 202)
+* LANG: Bash Variables. (line 469)
+* LC_ALL: Bash Variables. (line 473)
+* LC_COLLATE: Bash Variables. (line 477)
+* LC_CTYPE: Bash Variables. (line 484)
+* LC_MESSAGES: Locale Translation. (line 11)
+* LC_MESSAGES <1>: Bash Variables. (line 489)
+* LC_NUMERIC: Bash Variables. (line 493)
+* LC_TIME: Bash Variables. (line 497)
+* LINENO: Bash Variables. (line 501)
+* LINES: Bash Variables. (line 505)
+* MACHTYPE: Bash Variables. (line 511)
+* MAIL: Bourne Shell Variables.
+ (line 22)
+* MAILCHECK: Bash Variables. (line 515)
+* MAILPATH: Bourne Shell Variables.
+ (line 27)
+* MAPFILE: Bash Variables. (line 523)
+* mark-modified-lines: Readline Init File Syntax.
+ (line 232)
+* mark-symlinked-directories: Readline Init File Syntax.
+ (line 237)
+* match-hidden-files: Readline Init File Syntax.
+ (line 242)
+* menu-complete-display-prefix: Readline Init File Syntax.
+ (line 249)
+* meta-flag: Readline Init File Syntax.
+ (line 187)
+* OLDPWD: Bash Variables. (line 527)
+* OPTARG: Bourne Shell Variables.
+ (line 34)
+* OPTERR: Bash Variables. (line 530)
+* OPTIND: Bourne Shell Variables.
+ (line 38)
+* OSTYPE: Bash Variables. (line 534)
+* output-meta: Readline Init File Syntax.
+ (line 254)
+* page-completions: Readline Init File Syntax.
+ (line 260)
+* PATH: Bourne Shell Variables.
+ (line 42)
+* PIPESTATUS: Bash Variables. (line 537)
+* POSIXLY_CORRECT: Bash Variables. (line 542)
+* PPID: Bash Variables. (line 552)
+* PROMPT_COMMAND: Bash Variables. (line 556)
+* PROMPT_DIRTRIM: Bash Variables. (line 560)
+* PS0: Bash Variables. (line 566)
+* PS1: Bourne Shell Variables.
+ (line 48)
+* PS2: Bourne Shell Variables.
+ (line 53)
+* PS3: Bash Variables. (line 571)
+* PS4: Bash Variables. (line 576)
+* PWD: Bash Variables. (line 584)
+* RANDOM: Bash Variables. (line 587)
+* READLINE_LINE: Bash Variables. (line 592)
+* READLINE_POINT: Bash Variables. (line 596)
+* REPLY: Bash Variables. (line 600)
+* revert-all-at-newline: Readline Init File Syntax.
+ (line 270)
+* SECONDS: Bash Variables. (line 603)
+* SHELL: Bash Variables. (line 609)
+* SHELLOPTS: Bash Variables. (line 614)
+* SHLVL: Bash Variables. (line 623)
+* show-all-if-ambiguous: Readline Init File Syntax.
+ (line 276)
+* show-all-if-unmodified: Readline Init File Syntax.
+ (line 282)
+* show-mode-in-prompt: Readline Init File Syntax.
+ (line 291)
+* skip-completed-text: Readline Init File Syntax.
+ (line 297)
+* TEXTDOMAIN: Locale Translation. (line 11)
+* TEXTDOMAINDIR: Locale Translation. (line 11)
+* TIMEFORMAT: Bash Variables. (line 628)
+* TMOUT: Bash Variables. (line 666)
+* TMPDIR: Bash Variables. (line 678)
+* UID: Bash Variables. (line 682)
+* vi-cmd-mode-string: Readline Init File Syntax.
+ (line 310)
+* vi-ins-mode-string: Readline Init File Syntax.
+ (line 321)
+* visible-stats: Readline Init File Syntax.
+ (line 332)
+
+
+File: bash.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes
+
+D.4 Function Index
+==================
+
+
+* Menu:
+
+* abort (C-g): Miscellaneous Commands.
+ (line 10)
+* accept-line (Newline or Return): Commands For History.
+ (line 6)
+* alias-expand-line (): Miscellaneous Commands.
+ (line 125)
+* backward-char (C-b): Commands For Moving. (line 15)
+* backward-delete-char (Rubout): Commands For Text. (line 17)
+* backward-kill-line (C-x Rubout): Commands For Killing.
+ (line 9)
+* backward-kill-word (M-<DEL>): Commands For Killing.
+ (line 24)
+* backward-word (M-b): Commands For Moving. (line 22)
+* beginning-of-history (M-<): Commands For History.
+ (line 20)
+* beginning-of-line (C-a): Commands For Moving. (line 6)
+* bracketed-paste-begin (): Commands For Text. (line 33)
+* call-last-kbd-macro (C-x e): Keyboard Macros. (line 13)
+* capitalize-word (M-c): Commands For Text. (line 61)
+* character-search (C-]): Miscellaneous Commands.
+ (line 42)
+* character-search-backward (M-C-]): Miscellaneous Commands.
+ (line 47)
+* clear-screen (C-l): Commands For Moving. (line 48)
+* complete (<TAB>): Commands For Completion.
+ (line 6)
+* complete-command (M-!): Commands For Completion.
+ (line 80)
+* complete-filename (M-/): Commands For Completion.
+ (line 49)
+* complete-hostname (M-@): Commands For Completion.
+ (line 72)
+* complete-into-braces (M-{): Commands For Completion.
+ (line 100)
+* complete-username (M-~): Commands For Completion.
+ (line 56)
+* complete-variable (M-$): Commands For Completion.
+ (line 64)
+* copy-backward-word (): Commands For Killing.
+ (line 58)
+* copy-forward-word (): Commands For Killing.
+ (line 63)
+* copy-region-as-kill (): Commands For Killing.
+ (line 54)
+* dabbrev-expand (): Commands For Completion.
+ (line 95)
+* delete-char (C-d): Commands For Text. (line 12)
+* delete-char-or-list (): Commands For Completion.
+ (line 43)
+* delete-horizontal-space (): Commands For Killing.
+ (line 46)
+* digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6)
+* display-shell-version (C-x C-v): Miscellaneous Commands.
+ (line 110)
+* do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands.
+ (line 14)
+* downcase-word (M-l): Commands For Text. (line 57)
+* dump-functions (): Miscellaneous Commands.
+ (line 74)
+* dump-macros (): Miscellaneous Commands.
+ (line 86)
+* dump-variables (): Miscellaneous Commands.
+ (line 80)
+* dynamic-complete-history (M-<TAB>): Commands For Completion.
+ (line 90)
+* edit-and-execute-command (C-x C-e): Miscellaneous Commands.
+ (line 140)
+* end-kbd-macro (C-x )): Keyboard Macros. (line 9)
+* end-of-file (usually C-d): Commands For Text. (line 6)
+* end-of-history (M->): Commands For History.
+ (line 23)
+* end-of-line (C-e): Commands For Moving. (line 9)
+* exchange-point-and-mark (C-x C-x): Miscellaneous Commands.
+ (line 37)
+* forward-backward-delete-char (): Commands For Text. (line 21)
+* forward-char (C-f): Commands For Moving. (line 12)
+* forward-search-history (C-s): Commands For History.
+ (line 31)
+* forward-word (M-f): Commands For Moving. (line 18)
+* glob-complete-word (M-g): Miscellaneous Commands.
+ (line 92)
+* glob-expand-word (C-x *): Miscellaneous Commands.
+ (line 98)
+* glob-list-expansions (C-x g): Miscellaneous Commands.
+ (line 104)
+* history-and-alias-expand-line (): Miscellaneous Commands.
+ (line 128)
+* history-expand-line (M-^): Miscellaneous Commands.
+ (line 118)
+* history-search-backward (): Commands For History.
+ (line 53)
+* history-search-forward (): Commands For History.
+ (line 47)
+* history-substring-search-backward (): Commands For History.
+ (line 65)
+* history-substring-search-forward (): Commands For History.
+ (line 59)
+* insert-comment (M-#): Miscellaneous Commands.
+ (line 61)
+* insert-completions (M-*): Commands For Completion.
+ (line 22)
+* insert-last-argument (M-. or M-_): Miscellaneous Commands.
+ (line 131)
+* kill-line (C-k): Commands For Killing.
+ (line 6)
+* kill-region (): Commands For Killing.
+ (line 50)
+* kill-whole-line (): Commands For Killing.
+ (line 15)
+* kill-word (M-d): Commands For Killing.
+ (line 19)
+* magic-space (): Miscellaneous Commands.
+ (line 121)
+* menu-complete (): Commands For Completion.
+ (line 26)
+* menu-complete-backward (): Commands For Completion.
+ (line 38)
+* next-history (C-n): Commands For History.
+ (line 17)
+* next-screen-line (): Commands For Moving. (line 41)
+* non-incremental-forward-search-history (M-n): Commands For History.
+ (line 41)
+* non-incremental-reverse-search-history (M-p): Commands For History.
+ (line 35)
+* operate-and-get-next (C-o): Miscellaneous Commands.
+ (line 134)
+* overwrite-mode (): Commands For Text. (line 65)
+* possible-command-completions (C-x !): Commands For Completion.
+ (line 86)
+* possible-completions (M-?): Commands For Completion.
+ (line 15)
+* possible-filename-completions (C-x /): Commands For Completion.
+ (line 52)
+* possible-hostname-completions (C-x @): Commands For Completion.
+ (line 76)
+* possible-username-completions (C-x ~): Commands For Completion.
+ (line 60)
+* possible-variable-completions (C-x $): Commands For Completion.
+ (line 68)
+* prefix-meta (<ESC>): Miscellaneous Commands.
+ (line 19)
+* previous-history (C-p): Commands For History.
+ (line 13)
+* previous-screen-line (): Commands For Moving. (line 34)
+* print-last-kbd-macro (): Keyboard Macros. (line 17)
+* quoted-insert (C-q or C-v): Commands For Text. (line 26)
+* re-read-init-file (C-x C-r): Miscellaneous Commands.
+ (line 6)
+* redraw-current-line (): Commands For Moving. (line 52)
+* reverse-search-history (C-r): Commands For History.
+ (line 27)
+* revert-line (M-r): Miscellaneous Commands.
+ (line 26)
+* self-insert (a, b, A, 1, !, ...): Commands For Text. (line 30)
+* set-mark (C-@): Miscellaneous Commands.
+ (line 33)
+* shell-backward-kill-word (): Commands For Killing.
+ (line 33)
+* shell-backward-word (): Commands For Moving. (line 30)
+* shell-expand-line (M-C-e): Miscellaneous Commands.
+ (line 113)
+* shell-forward-word (): Commands For Moving. (line 26)
+* shell-kill-word (): Commands For Killing.
+ (line 28)
+* skip-csi-sequence (): Miscellaneous Commands.
+ (line 52)
+* start-kbd-macro (C-x (): Keyboard Macros. (line 6)
+* tilde-expand (M-&): Miscellaneous Commands.
+ (line 30)
+* transpose-chars (C-t): Commands For Text. (line 42)
+* transpose-words (M-t): Commands For Text. (line 48)
+* undo (C-_ or C-x C-u): Miscellaneous Commands.
+ (line 23)
+* universal-argument (): Numeric Arguments. (line 10)
+* unix-filename-rubout (): Commands For Killing.
+ (line 41)
+* unix-line-discard (C-u): Commands For Killing.
+ (line 12)
+* unix-word-rubout (C-w): Commands For Killing.
+ (line 37)
+* upcase-word (M-u): Commands For Text. (line 53)
+* yank (C-y): Commands For Killing.
+ (line 68)
+* yank-last-arg (M-. or M-_): Commands For History.
+ (line 80)
+* yank-nth-arg (M-C-y): Commands For History.
+ (line 71)
+* yank-pop (M-y): Commands For Killing.
+ (line 71)
+
+
+File: bash.info, Node: Concept Index, Prev: Function Index, Up: Indexes
+
+D.5 Concept Index
+=================
+
+
+* Menu:
+
+* alias expansion: Aliases. (line 6)
+* arithmetic evaluation: Shell Arithmetic. (line 6)
+* arithmetic expansion: Arithmetic Expansion.
+ (line 6)
+* arithmetic, shell: Shell Arithmetic. (line 6)
+* arrays: Arrays. (line 6)
+* background: Job Control Basics. (line 6)
+* Bash configuration: Basic Installation. (line 6)
+* Bash installation: Basic Installation. (line 6)
+* Bourne shell: Basic Shell Features.
+ (line 6)
+* brace expansion: Brace Expansion. (line 6)
+* builtin: Definitions. (line 17)
+* command editing: Readline Bare Essentials.
+ (line 6)
+* command execution: Command Search and Execution.
+ (line 6)
+* command expansion: Simple Command Expansion.
+ (line 6)
+* command history: Bash History Facilities.
+ (line 6)
+* command search: Command Search and Execution.
+ (line 6)
+* command substitution: Command Substitution.
+ (line 6)
+* command timing: Pipelines. (line 9)
+* commands, compound: Compound Commands. (line 6)
+* commands, conditional: Conditional Constructs.
+ (line 6)
+* commands, grouping: Command Grouping. (line 6)
+* commands, lists: Lists. (line 6)
+* commands, looping: Looping Constructs. (line 6)
+* commands, pipelines: Pipelines. (line 6)
+* commands, shell: Shell Commands. (line 6)
+* commands, simple: Simple Commands. (line 6)
+* comments, shell: Comments. (line 6)
+* completion builtins: Programmable Completion Builtins.
+ (line 6)
+* configuration: Basic Installation. (line 6)
+* control operator: Definitions. (line 21)
+* coprocess: Coprocesses. (line 6)
+* directory stack: The Directory Stack. (line 6)
+* editing command lines: Readline Bare Essentials.
+ (line 6)
+* environment: Environment. (line 6)
+* evaluation, arithmetic: Shell Arithmetic. (line 6)
+* event designators: Event Designators. (line 6)
+* execution environment: Command Execution Environment.
+ (line 6)
+* exit status: Definitions. (line 26)
+* exit status <1>: Exit Status. (line 6)
+* expansion: Shell Expansions. (line 6)
+* expansion, arithmetic: Arithmetic Expansion.
+ (line 6)
+* expansion, brace: Brace Expansion. (line 6)
+* expansion, filename: Filename Expansion. (line 9)
+* expansion, parameter: Shell Parameter Expansion.
+ (line 6)
+* expansion, pathname: Filename Expansion. (line 9)
+* expansion, tilde: Tilde Expansion. (line 6)
+* expressions, arithmetic: Shell Arithmetic. (line 6)
+* expressions, conditional: Bash Conditional Expressions.
+ (line 6)
+* field: Definitions. (line 30)
+* filename: Definitions. (line 35)
+* filename expansion: Filename Expansion. (line 9)
+* foreground: Job Control Basics. (line 6)
+* functions, shell: Shell Functions. (line 6)
+* history builtins: Bash History Builtins.
+ (line 6)
+* history events: Event Designators. (line 8)
+* history expansion: History Interaction. (line 6)
+* history list: Bash History Facilities.
+ (line 6)
+* History, how to use: A Programmable Completion Example.
+ (line 113)
+* identifier: Definitions. (line 51)
+* initialization file, readline: Readline Init File. (line 6)
+* installation: Basic Installation. (line 6)
+* interaction, readline: Readline Interaction.
+ (line 6)
+* interactive shell: Invoking Bash. (line 131)
+* interactive shell <1>: Interactive Shells. (line 6)
+* internationalization: Locale Translation. (line 6)
+* job: Definitions. (line 38)
+* job control: Definitions. (line 42)
+* job control <1>: Job Control Basics. (line 6)
+* kill ring: Readline Killing Commands.
+ (line 18)
+* killing text: Readline Killing Commands.
+ (line 6)
+* localization: Locale Translation. (line 6)
+* login shell: Invoking Bash. (line 128)
+* matching, pattern: Pattern Matching. (line 6)
+* metacharacter: Definitions. (line 46)
+* name: Definitions. (line 51)
+* native languages: Locale Translation. (line 6)
+* notation, readline: Readline Bare Essentials.
+ (line 6)
+* operator, shell: Definitions. (line 57)
+* parameter expansion: Shell Parameter Expansion.
+ (line 6)
+* parameters: Shell Parameters. (line 6)
+* parameters, positional: Positional Parameters.
+ (line 6)
+* parameters, special: Special Parameters. (line 6)
+* pathname expansion: Filename Expansion. (line 9)
+* pattern matching: Pattern Matching. (line 6)
+* pipeline: Pipelines. (line 6)
+* POSIX: Definitions. (line 9)
+* POSIX Mode: Bash POSIX Mode. (line 6)
+* process group: Definitions. (line 62)
+* process group ID: Definitions. (line 66)
+* process substitution: Process Substitution.
+ (line 6)
+* programmable completion: Programmable Completion.
+ (line 6)
+* prompting: Controlling the Prompt.
+ (line 6)
+* quoting: Quoting. (line 6)
+* quoting, ANSI: ANSI-C Quoting. (line 6)
+* Readline, how to use: Job Control Variables.
+ (line 23)
+* redirection: Redirections. (line 6)
+* reserved word: Definitions. (line 70)
+* restricted shell: The Restricted Shell.
+ (line 6)
+* return status: Definitions. (line 75)
+* shell arithmetic: Shell Arithmetic. (line 6)
+* shell function: Shell Functions. (line 6)
+* shell script: Shell Scripts. (line 6)
+* shell variable: Shell Parameters. (line 6)
+* shell, interactive: Interactive Shells. (line 6)
+* signal: Definitions. (line 78)
+* signal handling: Signals. (line 6)
+* special builtin: Definitions. (line 82)
+* special builtin <1>: Special Builtins. (line 6)
+* startup files: Bash Startup Files. (line 6)
+* suspending jobs: Job Control Basics. (line 6)
+* tilde expansion: Tilde Expansion. (line 6)
+* token: Definitions. (line 86)
+* translation, native languages: Locale Translation. (line 6)
+* variable, shell: Shell Parameters. (line 6)
+* variables, readline: Readline Init File Syntax.
+ (line 37)
+* word: Definitions. (line 90)
+* word splitting: Word Splitting. (line 6)
+* yanking text: Readline Killing Commands.
+ (line 6)
+
+
+
+Tag Table:
+Node: Top895
+Node: Introduction2813
+Node: What is Bash?3029
+Node: What is a shell?4143
+Node: Definitions6681
+Node: Basic Shell Features9632
+Node: Shell Syntax10851
+Node: Shell Operation11877
+Node: Quoting13170
+Node: Escape Character14470
+Node: Single Quotes14955
+Node: Double Quotes15303
+Node: ANSI-C Quoting16581
+Node: Locale Translation17840
+Node: Comments18736
+Node: Shell Commands19354
+Node: Simple Commands20226
+Node: Pipelines20857
+Node: Lists23789
+Node: Compound Commands25580
+Node: Looping Constructs26592
+Node: Conditional Constructs29087
+Node: Command Grouping40170
+Node: Coprocesses41649
+Node: GNU Parallel43552
+Node: Shell Functions47610
+Node: Shell Parameters54693
+Node: Positional Parameters59106
+Node: Special Parameters60006
+Node: Shell Expansions63760
+Node: Brace Expansion65883
+Node: Tilde Expansion68607
+Node: Shell Parameter Expansion71224
+Node: Command Substitution85680
+Node: Arithmetic Expansion87035
+Node: Process Substitution87967
+Node: Word Splitting89087
+Node: Filename Expansion91031
+Node: Pattern Matching93561
+Node: Quote Removal97547
+Node: Redirections97842
+Node: Executing Commands107400
+Node: Simple Command Expansion108070
+Node: Command Search and Execution110000
+Node: Command Execution Environment112376
+Node: Environment115360
+Node: Exit Status117019
+Node: Signals118689
+Node: Shell Scripts120656
+Node: Shell Builtin Commands123171
+Node: Bourne Shell Builtins125209
+Node: Bash Builtins145959
+Node: Modifying Shell Behavior174884
+Node: The Set Builtin175229
+Node: The Shopt Builtin185642
+Node: Special Builtins203284
+Node: Shell Variables204263
+Node: Bourne Shell Variables204700
+Node: Bash Variables206804
+Node: Bash Features237264
+Node: Invoking Bash238163
+Node: Bash Startup Files244176
+Node: Interactive Shells249279
+Node: What is an Interactive Shell?249689
+Node: Is this Shell Interactive?250338
+Node: Interactive Shell Behavior251153
+Node: Bash Conditional Expressions254640
+Node: Shell Arithmetic259217
+Node: Aliases262034
+Node: Arrays264654
+Node: The Directory Stack270020
+Node: Directory Stack Builtins270804
+Node: Controlling the Prompt273772
+Node: The Restricted Shell276538
+Node: Bash POSIX Mode278363
+Node: Job Control289296
+Node: Job Control Basics289756
+Node: Job Control Builtins294724
+Node: Job Control Variables299451
+Node: Command Line Editing300607
+Node: Introduction and Notation302278
+Node: Readline Interaction303901
+Node: Readline Bare Essentials305092
+Node: Readline Movement Commands306875
+Node: Readline Killing Commands307835
+Node: Readline Arguments309753
+Node: Searching310797
+Node: Readline Init File312983
+Node: Readline Init File Syntax314130
+Node: Conditional Init Constructs334569
+Node: Sample Init File338765
+Node: Bindable Readline Commands341882
+Node: Commands For Moving343086
+Node: Commands For History344935
+Node: Commands For Text349230
+Node: Commands For Killing352618
+Node: Numeric Arguments355099
+Node: Commands For Completion356238
+Node: Keyboard Macros360429
+Node: Miscellaneous Commands361116
+Node: Readline vi Mode367069
+Node: Programmable Completion367976
+Node: Programmable Completion Builtins375756
+Node: A Programmable Completion Example386449
+Node: Using History Interactively391689
+Node: Bash History Facilities392373
+Node: Bash History Builtins395378
+Node: History Interaction399909
+Node: Event Designators403529
+Node: Word Designators404748
+Node: Modifiers406385
+Node: Installing Bash407787
+Node: Basic Installation408924
+Node: Compilers and Options412182
+Node: Compiling For Multiple Architectures412923
+Node: Installation Names414616
+Node: Specifying the System Type415434
+Node: Sharing Defaults416150
+Node: Operation Controls416823
+Node: Optional Features417781
+Node: Reporting Bugs428299
+Node: Major Differences From The Bourne Shell429493
+Node: GNU Free Documentation License446345
+Node: Indexes471522
+Node: Builtin Index471976
+Node: Reserved Word Index478803
+Node: Variable Index481251
+Node: Function Index497002
+Node: Concept Index510305
+
+End Tag Table
diff --git a/doc/bash.pdf b/doc/bash.pdf
new file mode 100644
index 0000000..54c061e
--- /dev/null
+++ b/doc/bash.pdf
Binary files differ
diff --git a/doc/bash.ps b/doc/bash.ps
new file mode 100644
index 0000000..8b3b733
--- /dev/null
+++ b/doc/bash.ps
@@ -0,0 +1,9725 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.22.3
+%%CreationDate: Wed Jan 2 09:14:38 2019
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%+ font Symbol
+%%DocumentSuppliedResources: procset grops 1.22 3
+%%Pages: 81
+%%PageOrder: Ascend
+%%DocumentMedia: Default 612 792 0 () ()
+%%Orientation: Portrait
+%%EndComments
+%%BeginDefaults
+%%PageMedia: Default
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset grops 1.22 3
+%!PS-Adobe-3.0 Resource-ProcSet
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+DEFS/BPhook known{DEFS begin BPhook end}if
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/setcmykcolor where{
+pop
+/Fk{
+setcmykcolor fill
+}bind def
+}if
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/setcmykcolor where{
+pop
+/Ck/setcmykcolor load def
+}if
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne
+2 index/UniqueID ne
+and
+{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+/setpagedevice{}def
+mark
+}bind def
+/PEND{
+cleartomark
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%%BeginFeature: *PageSize Default
+<< /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice
+%%EndFeature
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+%%IncludeResource: font Symbol
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE
+/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10.95
+/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0(bash \255 GNU Bourne-Ag)
+108 96 Q(ain SHell)-.05 E F1(SYNOPSIS)72 112.8 Q/F2 10/Times-Bold@0 SF
+(bash)108 124.8 Q F0([options] [command_string | \214le])2.5 E F1
+(COPYRIGHT)72 141.6 Q F0(Bash is Cop)108 153.6 Q
+(yright \251 1989-2018 by the Free Softw)-.1 E(are F)-.1 E
+(oundation, Inc.)-.15 E F1(DESCRIPTION)72 170.4 Q F2(Bash)108 182.4 Q F0
+.973(is an)3.474 F F2(sh)3.473 E F0 .973
+(-compatible command language interpreter that e)B -.15(xe)-.15 G .973
+(cutes commands read from the standard).15 F(input or from a \214le.)108
+194.4 Q F2(Bash)5 E F0(also incorporates useful features from the)2.5 E
+/F3 10/Times-Italic@0 SF -.4(Ko)2.5 G(rn).4 E F0(and)2.5 E F3(C)2.5 E F0
+(shells \()2.5 E F2(ksh)A F0(and)2.5 E F2(csh)2.5 E F0(\).)A F2(Bash)108
+211.2 Q F0 .527(is intended to be a conformant implementation of the Sh\
+ell and Utilities portion of the IEEE POSIX)3.027 F
+(speci\214cation \(IEEE Standard 1003.1\).)108 223.2 Q F2(Bash)5 E F0
+(can be con\214gured to be POSIX-conformant by def)2.5 E(ault.)-.1 E F1
+(OPTIONS)72 240 Q F0 .483(All of the single-character shell options doc\
+umented in the description of the)108 252 R F2(set)2.983 E F0 -.2(bu)
+2.983 G .483(iltin command, includ-).2 F(ing)108 264 Q F2<ad6f>2.718 E
+F0 2.718(,c)C .218(an be used as options when the shell is in)-2.718 F
+-.2(vo)-.4 G -.1(ke).2 G 2.718(d. In).1 F(addition,)2.719 E F2(bash)
+2.719 E F0 .219(interprets the follo)2.719 F .219(wing options)-.25 F
+(when it is in)108 276 Q -.2(vo)-.4 G -.1(ke).2 G(d:).1 E F2<ad63>108
+292.8 Q F0 .881(If the)158 292.8 R F2<ad63>3.381 E F0 .881(option is pr\
+esent, then commands are read from the \214rst non-option ar)3.381 F
+(gument)-.18 E F3(com-)3.38 E(mand_string)158 304.8 Q F0 5.743(.I).22 G
+3.243(ft)-5.743 G .743(here are ar)-3.243 F .743(guments after the)-.18
+F F3(command_string)3.243 E F0 3.243(,t).22 G .744(he \214rst ar)-3.243
+F .744(gument is assigned)-.18 F(to)158 316.8 Q F2($0)2.919 E F0 .419
+(and an)2.919 F 2.919(yr)-.15 G .419(emaining ar)-2.919 F .418
+(guments are assigned to the positional parameters.)-.18 F .418
+(The assignment)5.418 F(to)158 328.8 Q F2($0)2.5 E F0
+(sets the name of the shell, which is used in w)2.5 E
+(arning and error messages.)-.1 E F2<ad69>108 340.8 Q F0(If the)158
+340.8 Q F2<ad69>2.5 E F0(option is present, the shell is)2.5 E F3(inter)
+2.5 E(active)-.15 E F0(.).18 E F2<ad6c>108 352.8 Q F0(Mak)158 352.8 Q(e)
+-.1 E F2(bash)2.5 E F0(act as if it had been in)2.5 E -.2(vo)-.4 G -.1
+(ke).2 G 2.5(da).1 G 2.5(sal)-2.5 G(ogin shell \(see)-2.5 E/F4 9
+/Times-Bold@0 SF(INV)2.5 E(OCA)-.405 E(TION)-.855 E F0(belo)2.25 E(w\).)
+-.25 E F2<ad72>108 364.8 Q F0(If the)158 364.8 Q F2<ad72>2.5 E F0
+(option is present, the shell becomes)2.5 E F3 -.37(re)2.5 G(stricted)
+.37 E F0(\(see)3.27 E F4(RESTRICTED SHELL)2.5 E F0(belo)2.25 E(w\).)-.25
+E F2<ad73>108 376.8 Q F0 .602(If the)158 376.8 R F2<ad73>3.102 E F0 .602
+(option is present, or if no ar)3.102 F .602
+(guments remain after option processing, then commands)-.18 F .617
+(are read from the standard input.)158 388.8 R .617(This option allo)
+5.617 F .616(ws the positional parameters to be set when)-.25 F(in)158
+400.8 Q -.2(vo)-.4 G(king an interacti).2 E .3 -.15(ve s)-.25 H
+(hell or when reading input through a pipe.).15 E F2<ad44>108 412.8 Q F0
+3.183(Al)158 412.8 S .683(ist of all double-quoted strings preceded by)
+-3.183 F F2($)3.184 E F0 .684(is printed on the standard output.)3.184 F
+.684(These are)5.684 F .458(the strings that are subject to language tr\
+anslation when the current locale is not)158 424.8 R F2(C)2.958 E F0(or)
+2.958 E F2(POSIX)2.958 E F0(.)A(This implies the)158 436.8 Q F2<ad6e>2.5
+E F0(option; no commands will be e)2.5 E -.15(xe)-.15 G(cuted.).15 E F2
+([\255+]O [)108 448.8 Q F3(shopt_option)A F2(])A F3(shopt_option)158
+460.8 Q F0 1.097(is one of the shell options accepted by the)3.596 F F2
+(shopt)3.597 E F0 -.2(bu)3.597 G 1.097(iltin \(see).2 F F4 1.097
+(SHELL B)3.597 F(UIL)-.09 E(TIN)-.828 E(COMMANDS)158 472.8 Q F0(belo)
+3.003 E 3.253(w\). If)-.25 F F3(shopt_option)3.253 E F0 .753
+(is present,)3.253 F F2<ad4f>3.253 E F0 .753(sets the v)3.253 F .753
+(alue of that option;)-.25 F F2(+O)3.252 E F0(unsets)3.252 E 2.624
+(it. If)158 484.8 R F3(shopt_option)2.624 E F0 .124
+(is not supplied, the names and v)2.624 F .125
+(alues of the shell options accepted by)-.25 F F2(shopt)2.625 E F0 .506
+(are printed on the standard output.)158 496.8 R .505(If the in)5.505 F
+-.2(vo)-.4 G .505(cation option is).2 F F2(+O)3.005 E F0 3.005(,t)C .505
+(he output is displayed in a)-3.005 F
+(format that may be reused as input.)158 508.8 Q F2<adad>108 520.8 Q F0
+(A)158 520.8 Q F2<adad>3.363 E F0 .864
+(signals the end of options and disables further option processing.)
+3.363 F(An)5.864 E 3.364(ya)-.15 G -.18(rg)-3.364 G .864(uments after)
+.18 F(the)158 532.8 Q F2<adad>2.5 E F0
+(are treated as \214lenames and ar)2.5 E 2.5(guments. An)-.18 F(ar)2.5 E
+(gument of)-.18 E F2<ad>2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to)
+.25 E F2<adad>2.5 E F0(.)A F2(Bash)108 549.6 Q F0 .304
+(also interprets a number of multi-character options.)2.804 F .303
+(These options must appear on the command line)5.303 F
+(before the single-character options to be recognized.)108 561.6 Q F2
+<adad646562>108 578.4 Q(ugger)-.2 E F0 .474(Arrange for the deb)144
+590.4 R .474(ugger pro\214le to be e)-.2 F -.15(xe)-.15 G .475
+(cuted before the shell starts.).15 F -.45(Tu)5.475 G .475(rns on e).45
+F .475(xtended deb)-.15 F(ug-)-.2 E
+(ging mode \(see the description of the)144 602.4 Q F2(extdeb)2.5 E(ug)
+-.2 E F0(option to the)2.5 E F2(shopt)2.5 E F0 -.2(bu)2.5 G(iltin belo)
+.2 E(w\).)-.25 E F2(\255\255dump\255po\255strings)108 614.4 Q F0(Equi)
+144 626.4 Q -.25(va)-.25 G(lent to).25 E F2<ad44>2.5 E F0 2.5(,b)C
+(ut the output is in the GNU)-2.7 E F3 -.1(ge)2.5 G(tte).1 E(xt)-.2 E F2
+(po)2.5 E F0(\(portable object\) \214le format.)2.5 E F2
+(\255\255dump\255strings)108 638.4 Q F0(Equi)144 650.4 Q -.25(va)-.25 G
+(lent to).25 E F2<ad44>2.5 E F0(.)A F2(\255\255help)108 662.4 Q F0
+(Display a usage message on standard output and e)144 662.4 Q
+(xit successfully)-.15 E(.)-.65 E F2<adad696e6974ad8c6c65>108 674.4 Q F3
+(\214le)2.5 E F2<adad72>108 686.4 Q(c\214le)-.18 E F3(\214le)2.5 E F0
+(Ex)144 698.4 Q 1.599(ecute commands from)-.15 F F3(\214le)6.009 E F0
+1.598(instead of the standard personal initialization \214le)4.279 F F3
+(~/.bashr)3.598 E(c)-.37 E F0 1.598(if the)4.408 F(shell is interacti)
+144 710.4 Q .3 -.15(ve \()-.25 H(see).15 E F4(INV)2.5 E(OCA)-.405 E
+(TION)-.855 E F0(belo)2.25 E(w\).)-.25 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(1)193.455 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(\255\255login)108 84 Q F0(Equi)144 96 Q -.25(va)-.25 G(lent to).25 E
+F1<ad6c>2.5 E F0(.)A F1(\255\255noediting)108 112.8 Q F0
+(Do not use the GNU)144 124.8 Q F1 -.18(re)2.5 G(adline).18 E F0
+(library to read command lines when the shell is interacti)2.5 E -.15
+(ve)-.25 G(.).15 E F1(\255\255nopr)108 141.6 Q(o\214le)-.18 E F0 .017
+(Do not read either the system-wide startup \214le)144 153.6 R/F2 10
+/Times-Italic@0 SF(/etc/pr)4.183 E(o\214le)-.45 E F0 .017(or an)4.183 F
+2.517(yo)-.15 G 2.517(ft)-2.517 G .018
+(he personal initialization \214les)-2.517 F F2(~/.bash_pr)144 165.6 Q
+(o\214le)-.45 E F0(,).18 E F2(~/.bash_lo)2.698 E(gin)-.1 E F0 2.698(,o)
+.24 G(r)-2.698 E F2(~/.pr)2.698 E(o\214le)-.45 E F0 5.198(.B).18 G 2.698
+(yd)-5.198 G(ef)-2.698 E(ault,)-.1 E F1(bash)2.698 E F0 .198
+(reads these \214les when it is in)2.698 F -.2(vo)-.4 G -.1(ke).2 G
+2.697(da).1 G(s)-2.697 E 2.5(al)144 177.6 S(ogin shell \(see)-2.5 E/F3 9
+/Times-Bold@0 SF(INV)2.5 E(OCA)-.405 E(TION)-.855 E F0(belo)2.25 E(w\).)
+-.25 E F1<adad6e6f72>108 194.4 Q(c)-.18 E F0 1.228(Do not read and e)144
+194.4 R -.15(xe)-.15 G 1.228(cute the personal initialization \214le).15
+F F2(~/.bashr)3.228 E(c)-.37 E F0 1.228(if the shell is interacti)4.038
+F -.15(ve)-.25 G 6.228(.T).15 G(his)-6.228 E(option is on by def)144
+206.4 Q(ault if the shell is in)-.1 E -.2(vo)-.4 G -.1(ke).2 G 2.5(da).1
+G(s)-2.5 E F1(sh)2.5 E F0(.)A F1(\255\255posix)108 223.2 Q F0 1.783
+(Change the beha)144 235.2 R 1.782(vior of)-.2 F F1(bash)4.282 E F0
+1.782(where the def)4.282 F 1.782(ault operation dif)-.1 F 1.782
+(fers from the POSIX standard to)-.25 F .332(match the standard \()144
+247.2 R F2 .332(posix mode)B F0 2.832(\). See)B F3 .333(SEE ALSO)2.833 F
+F0(belo)2.583 E 2.833(wf)-.25 G .333
+(or a reference to a document that details)-2.833 F(ho)144 259.2 Q 2.5
+(wp)-.25 G(osix mode af)-2.5 E(fects bash')-.25 E 2.5(sb)-.55 G(eha)-2.5
+E(vior)-.2 E(.)-.55 E F1<adad72>108 276 Q(estricted)-.18 E F0
+(The shell becomes restricted \(see)144 288 Q F3(RESTRICTED SHELL)2.5 E
+F0(belo)2.25 E(w\).)-.25 E F1<adad76>108 304.8 Q(erbose)-.1 E F0(Equi)
+144 316.8 Q -.25(va)-.25 G(lent to).25 E F1<ad76>2.5 E F0(.)A F1<adad76>
+108 333.6 Q(ersion)-.1 E F0(Sho)144 345.6 Q 2.5(wv)-.25 G
+(ersion information for this instance of)-2.65 E F1(bash)2.5 E F0
+(on the standard output and e)2.5 E(xit successfully)-.15 E(.)-.65 E/F4
+10.95/Times-Bold@0 SF(ARGUMENTS)72 362.4 Q F0 .017(If ar)108 374.4 R
+.016(guments remain after option processing, and neither the)-.18 F F1
+<ad63>2.516 E F0 .016(nor the)2.516 F F1<ad73>2.516 E F0 .016
+(option has been supplied, the \214rst)2.516 F(ar)108 386.4 Q .041(gume\
+nt is assumed to be the name of a \214le containing shell commands.)-.18
+F(If)5.041 E F1(bash)2.541 E F0 .041(is in)2.541 F -.2(vo)-.4 G -.1(ke)
+.2 G 2.541(di).1 G 2.541(nt)-2.541 G .042(his f)-2.541 F(ashion,)-.1 E
+F1($0)108 398.4 Q F0 .936(is set to the name of the \214le, and the pos\
+itional parameters are set to the remaining ar)3.436 F(guments.)-.18 E
+F1(Bash)5.935 E F0 .233(reads and e)108 410.4 R -.15(xe)-.15 G .233
+(cutes commands from this \214le, then e).15 F(xits.)-.15 E F1(Bash)
+5.234 E F0 1.334 -.55('s e)D .234(xit status is the e).4 F .234
+(xit status of the last com-)-.15 F .349(mand e)108 422.4 R -.15(xe)-.15
+G .349(cuted in the script.).15 F .349(If no commands are e)5.349 F -.15
+(xe)-.15 G .349(cuted, the e).15 F .348(xit status is 0.)-.15 F .348
+(An attempt is \214rst made to)5.348 F .253
+(open the \214le in the current directory)108 434.4 R 2.753(,a)-.65 G
+.254
+(nd, if no \214le is found, then the shell searches the directories in)
+-2.753 F F3 -.666(PA)2.754 G(TH)-.189 E F0(for the script.)108 446.4 Q
+F4(INV)72 463.2 Q(OCA)-.493 E(TION)-1.04 E F0(A)108 475.2 Q F2(lo)2.5 E
+(gin shell)-.1 E F0(is one whose \214rst character of ar)2.5 E
+(gument zero is a)-.18 E F1<ad>2.5 E F0 2.5(,o)C 2.5(ro)-2.5 G
+(ne started with the)-2.5 E F1(\255\255login)2.5 E F0(option.)2.5 E(An)
+108 492 Q F2(inter)2.734 E(active)-.15 E F0 .234
+(shell is one started without non-option ar)2.734 F .234
+(guments \(unless)-.18 F F1<ad73>2.734 E F0 .233
+(is speci\214ed\) and without the)2.734 F F1<ad63>2.733 E F0 .509(optio\
+n whose standard input and error are both connected to terminals \(as d\
+etermined by)108 504 R F2(isatty)3.01 E F0 .51(\(3\)\), or one).32 F
+.946(started with the)108 516 R F1<ad69>3.445 E F0(option.)3.445 E F3
+(PS1)5.945 E F0 .945(is set and)3.195 F F1<24ad>3.445 E F0(includes)
+3.445 E F1(i)3.445 E F0(if)3.445 E F1(bash)3.445 E F0 .945(is interacti)
+3.445 F -.15(ve)-.25 G 3.445(,a).15 G(llo)-3.445 E .945
+(wing a shell script or a)-.25 F(startup \214le to test this state.)108
+528 Q .032(The follo)108 544.8 R .032(wing paragraphs describe ho)-.25 F
+(w)-.25 E F1(bash)2.532 E F0 -.15(exe)2.532 G .032
+(cutes its startup \214les.).15 F .032(If an)5.032 F 2.532(yo)-.15 G
+2.532(ft)-2.532 G .032(he \214les e)-2.532 F .033(xist b)-.15 F .033
+(ut cannot be)-.2 F(read,)108 556.8 Q F1(bash)2.6 E F0 .1
+(reports an error)2.6 F 5.1(.T)-.55 G .1(ildes are e)-5.45 F .099
+(xpanded in \214lenames as described belo)-.15 F 2.599(wu)-.25 G(nder)
+-2.599 E F1 -.18(Ti)2.599 G .099(lde Expansion).18 F F0(in)2.599 E(the)
+108 568.8 Q F3(EXP)2.5 E(ANSION)-.666 E F0(section.)2.25 E(When)108
+585.6 Q F1(bash)2.895 E F0 .395(is in)2.895 F -.2(vo)-.4 G -.1(ke).2 G
+2.895(da).1 G 2.895(sa)-2.895 G 2.895(ni)-2.895 G(nteracti)-2.895 E .695
+-.15(ve l)-.25 H .396(ogin shell, or as a non-interacti).15 F .696 -.15
+(ve s)-.25 H .396(hell with the).15 F F1(\255\255login)2.896 E F0 .396
+(option, it)2.896 F 1.334(\214rst reads and e)108 597.6 R -.15(xe)-.15 G
+1.334(cutes commands from the \214le).15 F F2(/etc/pr)3.834 E(o\214le)
+-.45 E F0 3.834(,i)C 3.833(ft)-3.834 G 1.333(hat \214le e)-3.833 F 3.833
+(xists. After)-.15 F 1.333(reading that \214le, it)3.833 F .248
+(looks for)108 609.6 R F2(~/.bash_pr)2.748 E(o\214le)-.45 E F0(,)A F2
+(~/.bash_lo)2.748 E(gin)-.1 E F0 2.748(,a)C(nd)-2.748 E F2(~/.pr)2.748 E
+(o\214le)-.45 E F0 2.748(,i)C 2.749(nt)-2.748 G .249(hat order)-2.749 F
+2.749(,a)-.4 G .249(nd reads and e)-2.749 F -.15(xe)-.15 G .249
+(cutes commands from).15 F .797(the \214rst one that e)108 621.6 R .797
+(xists and is readable.)-.15 F(The)5.796 E F1(\255\255nopr)3.296 E
+(o\214le)-.18 E F0 .796(option may be used when the shell is started to)
+3.296 F(inhibit this beha)108 633.6 Q(vior)-.2 E(.)-.55 E 1.104
+(When an interacti)108 650.4 R 1.404 -.15(ve l)-.25 H 1.104
+(ogin shell e).15 F 1.104(xits, or a non-interacti)-.15 F 1.404 -.15
+(ve l)-.25 H 1.104(ogin shell e).15 F -.15(xe)-.15 G 1.104(cutes the).15
+F F1(exit)3.604 E F0 -.2(bu)3.604 G 1.104(iltin command,).2 F F1(bash)
+108 662.4 Q F0(reads and e)2.5 E -.15(xe)-.15 G
+(cutes commands from the \214le).15 E F2(~/.bash_lo)2.5 E(gout)-.1 E F0
+2.5(,i)C 2.5(fi)-2.5 G 2.5(te)-2.5 G(xists.)-2.65 E 1.698
+(When an interacti)108 679.2 R 1.998 -.15(ve s)-.25 H 1.698
+(hell that is not a login shell is started,).15 F F1(bash)4.197 E F0
+1.697(reads and e)4.197 F -.15(xe)-.15 G 1.697(cutes commands from).15 F
+F2(~/.bashr)108 691.2 Q(c)-.37 E F0 2.535(,i)C 2.535(ft)-2.535 G .035
+(hat \214le e)-2.535 F 2.535(xists. This)-.15 F .036
+(may be inhibited by using the)2.535 F F1<adad6e6f72>2.536 E(c)-.18 E F0
+2.536(option. The)2.536 F F1<adad72>2.536 E(c\214le)-.18 E F2(\214le)
+2.536 E F0 .036(option will)2.536 F(force)108 703.2 Q F1(bash)2.5 E F0
+(to read and e)2.5 E -.15(xe)-.15 G(cute commands from).15 E F2(\214le)
+2.5 E F0(instead of)2.5 E F2(~/.bashr)2.5 E(c)-.37 E F0(.)A(When)108 720
+Q F1(bash)5.306 E F0 2.806(is started non-interacti)5.306 F -.15(ve)-.25
+G(ly).15 E 5.306(,t)-.65 G 5.306(or)-5.306 G 2.806
+(un a shell script, for e)-5.306 F 2.805(xample, it looks for the v)-.15
+F(ariable)-.25 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(2)
+193.455 E 0 Cg EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 9/Times-Bold@0
+SF -.27(BA)108 84 S(SH_ENV).27 E F0 1.01(in the en)3.26 F 1.01
+(vironment, e)-.4 F 1.01(xpands its v)-.15 F 1.01
+(alue if it appears there, and uses the e)-.25 F 1.011(xpanded v)-.15 F
+1.011(alue as the)-.25 F(name of a \214le to read and e)108 96 Q -.15
+(xe)-.15 G(cute.).15 E/F2 10/Times-Bold@0 SF(Bash)5 E F0(beha)2.5 E -.15
+(ve)-.2 G 2.5(sa).15 G 2.5(si)-2.5 G 2.5(ft)-2.5 G(he follo)-2.5 E
+(wing command were e)-.25 E -.15(xe)-.15 G(cuted:).15 E/F3 10/Courier@0
+SF(if [ \255n "$BASH_ENV" ]; then . "$BASH_ENV"; fi)144 114 Q F0 -.2(bu)
+108 132 S 2.5(tt).2 G(he v)-2.5 E(alue of the)-.25 E F1 -.666(PA)2.5 G
+(TH)-.189 E F0 -.25(va)2.25 G
+(riable is not used to search for the \214lename.).25 E(If)108 148.8 Q
+F2(bash)3.417 E F0 .917(is in)3.417 F -.2(vo)-.4 G -.1(ke).2 G 3.417(dw)
+.1 G .917(ith the name)-3.417 F F2(sh)3.417 E F0 3.417(,i)C 3.417(tt)
+-3.417 G .917(ries to mimic the startup beha)-3.417 F .917
+(vior of historical v)-.2 F .917(ersions of)-.15 F F2(sh)3.417 E F0(as)
+3.417 E .145
+(closely as possible, while conforming to the POSIX standard as well.)
+108 160.8 R .145(When in)5.145 F -.2(vo)-.4 G -.1(ke).2 G 2.645(da).1 G
+2.645(sa)-2.645 G 2.645(ni)-2.645 G(nteracti)-2.645 E .445 -.15(ve l)
+-.25 H(ogin).15 E 1.264(shell, or a non-interacti)108 172.8 R 1.564 -.15
+(ve s)-.25 H 1.264(hell with the).15 F F2(\255\255login)3.764 E F0 1.264
+(option, it \214rst attempts to read and e)3.764 F -.15(xe)-.15 G 1.263
+(cute commands).15 F(from)108 184.8 Q/F4 10/Times-Italic@0 SF(/etc/pr)
+4.142 E(o\214le)-.45 E F0(and)3.172 E F4(~/.pr)2.992 E(o\214le)-.45 E F0
+2.992(,i).18 G 2.992(nt)-2.992 G .492(hat order)-2.992 F 5.492(.T)-.55 G
+(he)-5.492 E F2(\255\255nopr)2.992 E(o\214le)-.18 E F0 .493
+(option may be used to inhibit this beha)2.993 F(vior)-.2 E(.)-.55 E
+.418(When in)108 196.8 R -.2(vo)-.4 G -.1(ke).2 G 2.918(da).1 G 2.918
+(sa)-2.918 G 2.918(ni)-2.918 G(nteracti)-2.918 E .718 -.15(ve s)-.25 H
+.418(hell with the name).15 F F2(sh)2.918 E F0(,)A F2(bash)2.918 E F0
+.418(looks for the v)2.918 F(ariable)-.25 E F1(ENV)2.918 E/F5 9
+/Times-Roman@0 SF(,)A F0 -.15(ex)2.667 G .417(pands its v).15 F(alue)
+-.25 E .171(if it is de\214ned, and uses the e)108 208.8 R .171
+(xpanded v)-.15 F .171(alue as the name of a \214le to read and e)-.25 F
+-.15(xe)-.15 G 2.671(cute. Since).15 F 2.671(as)2.671 G .171(hell in)
+-2.671 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E(as)108 220.8 Q F2(sh)3.081 E F0
+.581(does not attempt to read and e)3.081 F -.15(xe)-.15 G .581
+(cute commands from an).15 F 3.08(yo)-.15 G .58
+(ther startup \214les, the)-3.08 F F2<adad72>3.08 E(c\214le)-.18 E F0
+.58(option has)3.08 F .182(no ef)108 232.8 R 2.682(fect. A)-.25 F
+(non-interacti)2.682 E .482 -.15(ve s)-.25 H .182(hell in).15 F -.2(vo)
+-.4 G -.1(ke).2 G 2.682(dw).1 G .182(ith the name)-2.682 F F2(sh)2.682 E
+F0 .182(does not attempt to read an)2.682 F 2.683(yo)-.15 G .183
+(ther startup \214les.)-2.683 F(When in)108 244.8 Q -.2(vo)-.4 G -.1(ke)
+.2 G 2.5(da).1 G(s)-2.5 E F2(sh)2.5 E F0(,)A F2(bash)2.5 E F0(enters)2.5
+E F4(posix)3.75 E F0(mode after the startup \214les are read.)3.03 E
+(When)108 261.6 Q F2(bash)2.727 E F0 .226(is started in)2.727 F F4
+(posix)3.976 E F0 .226(mode, as with the)3.256 F F2(\255\255posix)2.726
+E F0 .226(command line option, it follo)2.726 F .226(ws the POSIX stan-)
+-.25 F .341(dard for startup \214les.)108 273.6 R .341
+(In this mode, interacti)5.341 F .641 -.15(ve s)-.25 H .341(hells e).15
+F .341(xpand the)-.15 F F1(ENV)2.841 E F0 -.25(va)2.591 G .342
+(riable and commands are read and).25 F -.15(exe)108 285.6 S
+(cuted from the \214le whose name is the e).15 E(xpanded v)-.15 E 2.5
+(alue. No)-.25 F(other startup \214les are read.)2.5 E F2(Bash)108 302.4
+Q F0 .224(attempts to determine when it is being run with its standard \
+input connected to a netw)2.724 F .223(ork connection,)-.1 F .025
+(as when e)108 314.4 R -.15(xe)-.15 G .025
+(cuted by the remote shell daemon, usually).15 F F4 -.1(rs)2.525 G(hd).1
+E F0 2.525(,o)C 2.525(rt)-2.525 G .025(he secure shell daemon)-2.525 F
+F4(sshd)2.525 E F0 5.025(.I)C(f)-5.025 E F2(bash)2.525 E F0(deter)2.525
+E(-)-.2 E .134(mines it is being run in this f)108 326.4 R .134
+(ashion, it reads and e)-.1 F -.15(xe)-.15 G .133(cutes commands from)
+.15 F F4(~/.bashr)2.633 E(c)-.37 E F0 2.633(,i)C 2.633(ft)-2.633 G .133
+(hat \214le e)-2.633 F .133(xists and is)-.15 F 2.869(readable. It)108
+338.4 R .369(will not do this if in)2.869 F -.2(vo)-.4 G -.1(ke).2 G
+2.869(da).1 G(s)-2.869 E F2(sh)2.869 E F0 5.369(.T)C(he)-5.369 E F2
+<adad6e6f72>2.869 E(c)-.18 E F0 .369
+(option may be used to inhibit this beha)2.869 F(vior)-.2 E 2.869(,a)-.4
+G(nd)-2.869 E(the)108 350.4 Q F2<adad72>2.919 E(c\214le)-.18 E F0 .419
+(option may be used to force another \214le to be read, b)2.919 F .419
+(ut neither)-.2 F F4 -.1(rs)2.919 G(hd).1 E F0(nor)2.919 E F4(sshd)2.919
+E F0 .418(generally in)2.919 F -.2(vo)-.4 G -.1(ke).2 G
+(the shell with those options or allo)108 362.4 Q 2.5(wt)-.25 G
+(hem to be speci\214ed.)-2.5 E 1.207
+(If the shell is started with the ef)108 379.2 R(fecti)-.25 E 1.507 -.15
+(ve u)-.25 H 1.208
+(ser \(group\) id not equal to the real user \(group\) id, and the).15 F
+F2<ad70>3.708 E F0 .536(option is not supplied, no startup \214les are \
+read, shell functions are not inherited from the en)108 391.2 R .535
+(vironment, the)-.4 F F1(SHELLOPTS)108 403.2 Q F5(,)A F1 -.27(BA)2.959 G
+(SHOPTS).27 E F5(,)A F1(CDP)2.959 E -.855(AT)-.666 G(H).855 E F5(,)A F0
+(and)2.959 E F1(GLOBIGNORE)3.209 E F0 -.25(va)2.959 G .709
+(riables, if the).25 F 3.209(ya)-.15 G .71(ppear in the en)-3.209 F .71
+(vironment, are)-.4 F .905(ignored, and the ef)108 415.2 R(fecti)-.25 E
+1.205 -.15(ve u)-.25 H .904(ser id is set to the real user id.).15 F
+.904(If the)5.904 F F2<ad70>3.404 E F0 .904(option is supplied at in)
+3.404 F -.2(vo)-.4 G .904(cation, the).2 F(startup beha)108 427.2 Q
+(vior is the same, b)-.2 E(ut the ef)-.2 E(fecti)-.25 E .3 -.15(ve u)
+-.25 H(ser id is not reset.).15 E/F6 10.95/Times-Bold@0 SF(DEFINITIONS)
+72 444 Q F0(The follo)108 456 Q
+(wing de\214nitions are used throughout the rest of this document.)-.25
+E F2(blank)108 468 Q F0 2.5(As)144 468 S(pace or tab)-2.5 E(.)-.4 E F2
+-.1(wo)108 480 S(rd).1 E F0 2.5(As)144 480 S
+(equence of characters considered as a single unit by the shell.)-2.5 E
+(Also kno)5 E(wn as a)-.25 E F2(tok)2.5 E(en)-.1 E F0(.)A F2(name)108
+492 Q F0(A)144 492 Q F4(wor)3.005 E(d)-.37 E F0 .165
+(consisting only of alphanumeric characters and underscores, and be)
+3.435 F .166(ginning with an alpha-)-.15 F
+(betic character or an underscore.)144 504 Q(Also referred to as an)5 E
+F2(identi\214er)2.5 E F0(.)A F2(metacharacter)108 516 Q F0 2.5(Ac)144
+528 S(haracter that, when unquoted, separates w)-2.5 E 2.5(ords. One)-.1
+F(of the follo)2.5 E(wing:)-.25 E F2 5(|&;\(\)<>s)144 540 S 2.5
+(pace tab newline)-5 F(contr)108 552 Q(ol operator)-.18 E F0(A)144 564 Q
+F4(tok)2.5 E(en)-.1 E F0(that performs a control function.)2.5 E
+(It is one of the follo)5 E(wing symbols:)-.25 E F2 2.5
+(|| & && ; ;; ;& ;;& \( \) | |&)144 576 R(<newline>)10 E F6(RESER)72
+592.8 Q(VED W)-.602 E(ORDS)-.11 E F4 .307(Reserved wor)108 604.8 R(ds)
+-.37 E F0 .307(are w)2.807 F .307(ords that ha)-.1 F .607 -.15(ve a s)
+-.2 H .306(pecial meaning to the shell.).15 F .306(The follo)5.306 F
+.306(wing w)-.25 F .306(ords are recognized as)-.1 F(reserv)108 616.8 Q
+.227(ed when unquoted and either the \214rst w)-.15 F .227
+(ord of a simple command \(see)-.1 F F1 .227(SHELL GRAMMAR)2.727 F F0
+(belo)2.477 E .227(w\) or)-.25 F(the third w)108 628.8 Q(ord of a)-.1 E
+F2(case)2.5 E F0(or)2.5 E F2 -.25(fo)2.5 G(r).25 E F0(command:)2.5 E F2
+11.295(!c)144 645.6 S 8.795(ase copr)-11.295 F 8.795
+(oc do done elif else esac \214 f)-.18 F 8.795
+(or function if in select then)-.25 F 7.5(until while { } time [[ ]])144
+657.6 R F6(SHELL GRAMMAR)72 674.4 Q F2(Simple Commands)87 686.4 Q F0(A)
+108 698.4 Q F4 .388(simple command)2.888 F F0 .388
+(is a sequence of optional v)2.888 F .389(ariable assignments follo)-.25
+F .389(wed by)-.25 F F2(blank)2.889 E F0 .389(-separated w)B .389
+(ords and)-.1 F .816(redirections, and terminated by a)108 710.4 R F4
+(contr)3.316 E .815(ol oper)-.45 F(ator)-.15 E F0 5.815(.T)C .815
+(he \214rst w)-5.815 F .815(ord speci\214es the command to be e)-.1 F
+-.15(xe)-.15 G(cuted,).15 E(and is passed as ar)108 722.4 Q
+(gument zero.)-.18 E(The remaining w)5 E(ords are passed as ar)-.1 E
+(guments to the in)-.18 E -.2(vo)-.4 G -.1(ke).2 G 2.5(dc).1 G(ommand.)
+-2.5 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(3)193.455 E 0 Cg
+EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(The return v)108
+84 Q(alue of a)-.25 E/F1 10/Times-Italic@0 SF(simple command)2.5 E F0
+(is its e)2.5 E(xit status, or 128+)-.15 E F1(n)A F0
+(if the command is terminated by signal)3.333 E F1(n)2.5 E F0(.).24 E/F2
+10/Times-Bold@0 SF(Pipelines)87 100.8 Q F0(A)108 112.8 Q F1(pipeline)
+2.996 E F0 .496(is a sequence of one or more commands separated by one \
+of the control operators)2.996 F F2(|)2.996 E F0(or)2.996 E F2(|&)2.996
+E F0 5.496(.T)C(he)-5.496 E(format for a pipeline is:)108 124.8 Q([)144
+141.6 Q F2(time)A F0([)2.5 E F2<ad70>A F0(]] [ ! ])A F1(command)2.5 E F0
+2.5([[)2.5 G F2(|)-2.5 E/F3 10/Symbol SF<ef>A F2(|&)A F0(])A F1
+(command2)2.5 E F0(... ])2.5 E .244(The standard output of)108 158.4 R
+F1(command)2.944 E F0 .243
+(is connected via a pipe to the standard input of)3.514 F F1(command2)
+2.743 E F0 5.243(.T).02 G .243(his connec-)-5.243 F .642
+(tion is performed before an)108 170.4 R 3.142(yr)-.15 G .642
+(edirections speci\214ed by the command \(see)-3.142 F/F4 9/Times-Bold@0
+SF(REDIRECTION)3.143 E F0(belo)2.893 E 3.143(w\). If)-.25 F F2(|&)3.143
+E F0(is)3.143 E(used,)108 182.4 Q F1(command)3.648 E F0 2.248 -.55('s s)
+D 1.147(tandard error).55 F 3.647(,i)-.4 G 3.647(na)-3.647 G 1.147
+(ddition to its standard output, is connected to)-3.647 F F1(command2)
+3.647 E F0 2.247 -.55('s s)D(tandard).55 E .028
+(input through the pipe; it is shorthand for)108 194.4 R F2 .028(2>&1 |)
+2.528 F F0 5.028(.T)C .028
+(his implicit redirection of the standard error to the stan-)-5.028 F
+(dard output is performed after an)108 206.4 Q 2.5(yr)-.15 G
+(edirections speci\214ed by the command.)-2.5 E .48
+(The return status of a pipeline is the e)108 223.2 R .48
+(xit status of the last command, unless the)-.15 F F2(pipefail)2.98 E F0
+.48(option is enabled.)2.98 F(If)108 235.2 Q F2(pipefail)2.686 E F0 .186
+(is enabled, the pipeline')2.686 F 2.686(sr)-.55 G .186
+(eturn status is the v)-2.686 F .187
+(alue of the last \(rightmost\) command to e)-.25 F .187(xit with a)-.15
+F .611(non-zero status, or zero if all commands e)108 247.2 R .611
+(xit successfully)-.15 F 5.611(.I)-.65 G 3.111(ft)-5.611 G .61
+(he reserv)-3.111 F .61(ed w)-.15 F(ord)-.1 E F2(!)3.11 E F0 .61
+(precedes a pipeline, the)5.61 F -.15(ex)108 259.2 S .55
+(it status of that pipeline is the logical ne).15 F -.05(ga)-.15 G .55
+(tion of the e).05 F .55(xit status as described abo)-.15 F -.15(ve)-.15
+G 5.55(.T).15 G .55(he shell w)-5.55 F .55(aits for)-.1 F
+(all commands in the pipeline to terminate before returning a v)108
+271.2 Q(alue.)-.25 E .299(If the)108 288 R F2(time)2.799 E F0(reserv)
+2.799 E .299(ed w)-.15 F .299(ord precedes a pipeline, the elapsed as w\
+ell as user and system time consumed by its)-.1 F -.15(exe)108 300 S
+.139(cution are reported when the pipeline terminates.).15 F(The)5.139 E
+F2<ad70>2.639 E F0 .14(option changes the output format to that spec-)
+2.639 F .303(i\214ed by POSIX.)108 312 R .303(When the shell is in)5.303
+F F1 .303(posix mode)2.803 F F0 2.803(,i)C 2.803(td)-2.803 G .303
+(oes not recognize)-2.803 F F2(time)2.803 E F0 .303(as a reserv)2.803 F
+.303(ed w)-.15 F .302(ord if the ne)-.1 F(xt)-.15 E(tok)108 324 Q .735
+(en be)-.1 F .736(gins with a `-'.)-.15 F(The)5.736 E F4(TIMEFORMA)3.236
+E(T)-.855 E F0 -.25(va)2.986 G .736
+(riable may be set to a format string that speci\214es ho).25 F 3.236
+(wt)-.25 G(he)-3.236 E 2.226
+(timing information should be displayed; see the description of)108 336
+R F4(TIMEFORMA)4.725 E(T)-.855 E F0(under)4.475 E F2 2.225(Shell V)4.725
+F(ariables)-.92 E F0(belo)108 348 Q -.65(w.)-.25 G .85
+(When the shell is in)108 364.8 R F1 .85(posix mode)3.35 F F0(,)A F2
+(time)3.35 E F0 .85(may be follo)3.35 F .85(wed by a ne)-.25 F 3.35
+(wline. In)-.25 F .85(this case, the shell displays the)3.35 F 1.074
+(total user and system time consumed by the shell and its children.)108
+376.8 R(The)6.073 E F4(TIMEFORMA)3.573 E(T)-.855 E F0 -.25(va)3.323 G
+1.073(riable may be).25 F
+(used to specify the format of the time information.)108 388.8 Q .655
+(Each command in a pipeline is e)108 405.6 R -.15(xe)-.15 G .656
+(cuted as a separate process \(i.e., in a subshell\).).15 F(See)5.656 E
+F4 .656(COMMAND EXE-)3.156 F 1.106(CUTION ENVIR)108 417.6 R(ONMENT)-.27
+E F0 1.106(for a description of a subshell en)3.356 F 3.606
+(vironment. If)-.4 F(the)3.606 E F2(lastpipe)3.606 E F0 1.105
+(option is enabled)3.606 F .744(using the)108 429.6 R F2(shopt)3.244 E
+F0 -.2(bu)3.244 G .744(iltin \(see the description of).2 F F2(shopt)
+3.245 E F0(belo)3.245 E .745
+(w\), the last element of a pipeline may be run by)-.25 F
+(the shell process.)108 441.6 Q F2(Lists)87 458.4 Q F0(A)108 470.4 Q F1
+(list)2.85 E F0 .35(is a sequence of one or more pipelines separated by\
+ one of the operators)2.85 F F2(;)2.849 E F0(,)A F2(&)2.849 E F0(,)A F2
+(&&)2.849 E F0 2.849(,o)C(r)-2.849 E F2(||)2.849 E F0 2.849(,a)C .349
+(nd option-)-2.849 F(ally terminated by one of)108 482.4 Q F2(;)2.5 E F0
+(,)A F2(&)2.5 E F0 2.5(,o)C(r)-2.5 E F2(<newline>)2.5 E F0(.)A .96
+(Of these list operators,)108 499.2 R F2(&&)3.46 E F0(and)3.46 E F2(||)
+3.46 E F0(ha)3.46 E 1.26 -.15(ve e)-.2 H .961(qual precedence, follo).15
+F .961(wed by)-.25 F F2(;)3.461 E F0(and)3.461 E F2(&)3.461 E F0 3.461
+(,w)C .961(hich ha)-3.461 F 1.261 -.15(ve e)-.2 H .961(qual prece-).15 F
+(dence.)108 511.2 Q 2.5(As)108 528 S(equence of one or more ne)-2.5 E
+(wlines may appear in a)-.25 E F1(list)2.5 E F0
+(instead of a semicolon to delimit commands.)2.5 E .029
+(If a command is terminated by the control operator)108 544.8 R F2(&)
+2.529 E F0 2.529(,t)C .029(he shell e)-2.529 F -.15(xe)-.15 G .029
+(cutes the command in the).15 F F1(bac)2.528 E(kgr)-.2 E(ound)-.45 E F0
+(in)2.528 E 2.678(as)108 556.8 S 2.678(ubshell. The)-2.678 F .178
+(shell does not w)2.678 F .178
+(ait for the command to \214nish, and the return status is 0.)-.1 F .178
+(These are referred)5.178 F .779(to as)108 568.8 R F1(async)3.279 E(hr)
+-.15 E(onous)-.45 E F0 3.279(commands. Commands)3.279 F .779
+(separated by a)3.279 F F2(;)3.279 E F0 .779(are e)3.279 F -.15(xe)-.15
+G .778(cuted sequentially; the shell w).15 F .778(aits for)-.1 F
+(each command to terminate in turn.)108 580.8 Q
+(The return status is the e)5 E(xit status of the last command e)-.15 E
+-.15(xe)-.15 G(cuted.).15 E .937(AND and OR lists are sequences of one \
+or more pipelines separated by the)108 597.6 R F2(&&)3.437 E F0(and)
+3.437 E F2(||)3.437 E F0 .937(control operators,)3.437 F(respecti)108
+609.6 Q -.15(ve)-.25 G(ly).15 E 5(.A)-.65 G(ND and OR lists are e)-5 E
+-.15(xe)-.15 G(cuted with left associati).15 E(vity)-.25 E 5(.A)-.65 G
+2.5(nA)-5 G(ND list has the form)-2.5 E F1(command1)144 626.4 Q F2(&&)
+2.5 E F1(command2)2.5 E(command2)108.2 643.2 Q F0(is e)2.52 E -.15(xe)
+-.15 G(cuted if, and only if,).15 E F1(command1)2.7 E F0(returns an e)
+2.5 E(xit status of zero \(success\).)-.15 E(An OR list has the form)108
+660 Q F1(command1)144 676.8 Q F2(||)2.5 E F1(command2)2.5 E(command2)
+108.2 693.6 Q F0 .435(is e)2.955 F -.15(xe)-.15 G .435
+(cuted if, and only if,).15 F F1(command1)3.135 E F0 .435
+(returns a non-zero e)2.935 F .435(xit status.)-.15 F .434
+(The return status of AND)5.434 F(and OR lists is the e)108 705.6 Q
+(xit status of the last command e)-.15 E -.15(xe)-.15 G
+(cuted in the list.).15 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295
+E(4)193.455 E 0 Cg EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(Compound Commands)87 84 Q F0(A)108 96 Q/F2 10/Times-Italic@0 SF 1.053
+(compound command)3.553 F F0 1.053(is one of the follo)3.553 F 3.553
+(wing. In)-.25 F 1.053(most cases a)3.553 F F2(list)3.553 E F0 1.054
+(in a command')3.554 F 3.554(sd)-.55 G 1.054(escription may be)-3.554 F
+1.027(separated from the rest of the command by one or more ne)108 108 R
+1.026(wlines, and may be follo)-.25 F 1.026(wed by a ne)-.25 F 1.026
+(wline in)-.25 F(place of a semicolon.)108 120 Q(\()108 136.8 Q F2(list)
+A F0(\))A F2(list)144 136.8 Q F0 .011(is e)2.511 F -.15(xe)-.15 G .011
+(cuted in a subshell en).15 F .011(vironment \(see)-.4 F/F3 9
+/Times-Bold@0 SF .011(COMMAND EXECUTION ENVIR)2.511 F(ONMENT)-.27 E F0
+(belo)2.262 E(w\).)-.25 E -1.11(Va)144 148.8 S 1.064
+(riable assignments and b)1.11 F 1.064(uiltin commands that af)-.2 F
+1.064(fect the shell')-.25 F 3.564(se)-.55 G -.4(nv)-3.564 G 1.064
+(ironment do not remain in).4 F(ef)144 160.8 Q
+(fect after the command completes.)-.25 E(The return status is the e)5 E
+(xit status of)-.15 E F2(list)2.5 E F0(.)A({)108 177.6 Q F2(list)2.5 E
+F0 2.5(;})C F2(list)144 177.6 Q F0 .401(is simply e)2.901 F -.15(xe)-.15
+G .401(cuted in the current shell en).15 F(vironment.)-.4 E F2(list)
+5.401 E F0 .402(must be terminated with a ne)2.901 F .402(wline or)-.25
+F 3.215(semicolon. This)144 189.6 R .715(is kno)3.215 F .715(wn as a)
+-.25 F F2(gr)3.215 E .715(oup command)-.45 F F0 5.715(.T)C .715
+(he return status is the e)-5.715 F .714(xit status of)-.15 F F2(list)
+3.214 E F0 5.714(.N)C(ote)-5.714 E .219(that unlik)144 201.6 R 2.719(et)
+-.1 G .219(he metacharacters)-2.719 F F1(\()2.719 E F0(and)2.719 E F1
+(\))2.719 E F0(,)A F1({)2.719 E F0(and)2.719 E F1(})2.719 E F0(are)2.719
+E F2 -.37(re)2.72 G .22(served wor).37 F(ds)-.37 E F0 .22
+(and must occur where a reserv)2.72 F(ed)-.15 E -.1(wo)144 213.6 S .257
+(rd is permitted to be recognized.).1 F .257(Since the)5.257 F 2.757(yd)
+-.15 G 2.756(on)-2.757 G .256(ot cause a w)-2.756 F .256(ord break, the)
+-.1 F 2.756(ym)-.15 G .256(ust be separated)-2.756 F(from)144 225.6 Q F2
+(list)2.5 E F0(by whitespace or another shell metacharacter)2.5 E(.)-.55
+E(\(\()108 242.4 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F0(\)\))A(The)144
+254.4 Q F2 -.2(ex)2.551 G(pr).2 E(ession)-.37 E F0 .051(is e)2.551 F
+-.25(va)-.25 G .051(luated according to the rules described belo).25 F
+2.552(wu)-.25 G(nder)-2.552 E F3 .052(ARITHMETIC EV)2.552 F(ALU)-1.215 E
+(A-)-.54 E(TION)144 266.4 Q/F4 9/Times-Roman@0 SF(.)A F0 .411(If the v)
+4.911 F .411(alue of the e)-.25 F .411(xpression is non-zero, the retur\
+n status is 0; otherwise the return status)-.15 F(is 1.)144 278.4 Q
+(This is e)5 E(xactly equi)-.15 E -.25(va)-.25 G(lent to).25 E F1(let ")
+2.5 E F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(")A F0(.)A F1([[)108 295.2 Q
+F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F1(]])2.5 E F0 1.299
+(Return a status of 0 or 1 depending on the e)144 307.2 R -.25(va)-.25 G
+1.3(luation of the conditional e).25 F(xpression)-.15 E F2 -.2(ex)3.8 G
+(pr).2 E(ession)-.37 E F0(.)A 2.274
+(Expressions are composed of the primaries described belo)144 319.2 R
+4.773(wu)-.25 G(nder)-4.773 E F3(CONDITION)4.773 E 2.273(AL EXPRES-)-.18
+F(SIONS)144 331.2 Q F4(.)A F0 -.8(Wo)5.632 G 1.133
+(rd splitting and pathname e).8 F 1.133
+(xpansion are not performed on the w)-.15 F 1.133(ords between the)-.1 F
+F1([[)3.633 E F0(and)144 343.2 Q F1(]])2.964 E F0 2.964(;t)C .464
+(ilde e)-2.964 F .464(xpansion, parameter and v)-.15 F .464(ariable e)
+-.25 F .463(xpansion, arithmetic e)-.15 F .463
+(xpansion, command substi-)-.15 F 1.081
+(tution, process substitution, and quote remo)144 355.2 R -.25(va)-.15 G
+3.581(la).25 G 1.081(re performed.)-3.581 F 1.081
+(Conditional operators such as)6.081 F F1<ad66>3.581 E F0
+(must be unquoted to be recognized as primaries.)144 367.2 Q
+(When used with)144 385.2 Q F1([[)2.5 E F0 2.5(,t)C(he)-2.5 E F1(<)2.5 E
+F0(and)2.5 E F1(>)2.5 E F0(operators sort le)2.5 E
+(xicographically using the current locale.)-.15 E .503(When the)144
+403.2 R F1(==)3.003 E F0(and)3.002 E F1(!=)3.002 E F0 .502(operators ar\
+e used, the string to the right of the operator is considered a pat-)
+3.002 F .81(tern and matched according to the rules described belo)144
+415.2 R 3.31(wu)-.25 G(nder)-3.31 E F1 -.1(Pa)3.31 G(tter).1 E 3.31(nM)
+-.15 G(atching)-3.31 E F0 3.31(,a)C 3.31(si)-3.31 G 3.31(ft)-3.31 G(he)
+-3.31 E F1(ext-)3.31 E(glob)144 427.2 Q F0 1.39
+(shell option were enabled.)3.89 F(The)6.39 E F1(=)3.889 E F0 1.389
+(operator is equi)3.889 F -.25(va)-.25 G 1.389(lent to).25 F F1(==)3.889
+E F0 6.389(.I)C 3.889(ft)-6.389 G(he)-3.889 E F1(nocasematch)3.889 E F0
+(shell)3.889 E .271
+(option is enabled, the match is performed without re)144 439.2 R -.05
+(ga)-.15 G .272(rd to the case of alphabetic characters.).05 F(The)5.272
+E 1.068(return v)144 451.2 R 1.068(alue is 0 if the string matches \()
+-.25 F F1(==)A F0 3.568(\)o)C 3.568(rd)-3.568 G 1.068(oes not match \()
+-3.568 F F1(!=)A F0 3.568(\)t)C 1.067(he pattern, and 1 otherwise.)
+-3.568 F(An)144 463.2 Q 2.5(yp)-.15 G(art of the pattern may be quoted \
+to force the quoted portion to be matched as a string.)-2.5 E .243
+(An additional binary operator)144 481.2 R(,)-.4 E F1(=~)2.743 E F0
+2.743(,i)C 2.743(sa)-2.743 G -.25(va)-2.943 G .243
+(ilable, with the same precedence as).25 F F1(==)2.743 E F0(and)2.743 E
+F1(!=)2.743 E F0 5.243(.W)C .243(hen it is)-5.243 F .182
+(used, the string to the right of the operator is considered a POSIX e)
+144 493.2 R .182(xtended re)-.15 F .181(gular e)-.15 F .181
+(xpression and)-.15 F .207(matched accordingly \(as in)144 505.2 R F2
+-.37(re)2.707 G -.1(ge)-.03 G(x)-.1 E F0 2.707(\(3\)\). The)B .207
+(return v)2.707 F .207
+(alue is 0 if the string matches the pattern, and 1)-.25 F 3.346
+(otherwise. If)144 517.2 R .846(the re)3.346 F .846(gular e)-.15 F .845
+(xpression is syntactically incorrect, the conditional e)-.15 F
+(xpression')-.15 E 3.345(sr)-.55 G(eturn)-3.345 E -.25(va)144 529.2 S
+.666(lue is 2.).25 F .667(If the)5.667 F F1(nocasematch)3.167 E F0 .667
+(shell option is enabled, the match is performed without re)3.167 F -.05
+(ga)-.15 G .667(rd to).05 F .593(the case of alphabetic characters.)144
+541.2 R(An)5.593 E 3.093(yp)-.15 G .592
+(art of the pattern may be quoted to force the quoted por)-3.093 F(-)-.2
+E 1.016(tion to be matched as a string.)144 553.2 R(Brack)6.016 E 1.016
+(et e)-.1 F 1.016(xpressions in re)-.15 F 1.016(gular e)-.15 F 1.016
+(xpressions must be treated care-)-.15 F(fully)144 565.2 Q 4.436(,s)-.65
+G 1.936
+(ince normal quoting characters lose their meanings between brack)-4.436
+F 4.435(ets. If)-.1 F 1.935(the pattern is)4.435 F .264
+(stored in a shell v)144 577.2 R .264(ariable, quoting the v)-.25 F .264
+(ariable e)-.25 F .265
+(xpansion forces the entire pattern to be matched as)-.15 F 3.774(as)144
+589.2 S 3.774(tring. Substrings)-3.774 F 1.274
+(matched by parenthesized sube)3.774 F 1.273(xpressions within the re)
+-.15 F 1.273(gular e)-.15 F 1.273(xpression are)-.15 F(sa)144 601.2 Q
+-.15(ve)-.2 G 3.096(di).15 G 3.097(nt)-3.096 G .597(he array v)-3.097 F
+(ariable)-.25 E F3 -.27(BA)3.097 G(SH_REMA).27 E(TCH)-.855 E F4(.)A F0
+.597(The element of)5.097 F F3 -.27(BA)3.097 G(SH_REMA).27 E(TCH)-.855 E
+F0 .597(with inde)2.847 F 3.097(x0i)-.15 G(s)-3.097 E .049
+(the portion of the string matching the entire re)144 613.2 R .049
+(gular e)-.15 F 2.549(xpression. The)-.15 F .049(element of)2.549 F F3
+-.27(BA)2.549 G(SH_REMA).27 E(TCH)-.855 E F0(with inde)144 625.2 Q(x)
+-.15 E F2(n)2.5 E F0(is the portion of the string matching the)2.5 E F2
+(n)2.5 E F0(th parenthesized sube)A(xpression.)-.15 E .785
+(Expressions may be combined using the follo)144 643.2 R .786
+(wing operators, listed in decreasing order of prece-)-.25 F(dence:)144
+655.2 Q F1(\()144 673.2 Q F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F1(\))
+2.5 E F0 .523(Returns the v)180 685.2 R .522(alue of)-.25 F F2 -.2(ex)
+3.022 G(pr).2 E(ession)-.37 E F0 5.522(.T)C .522(his may be used to o)
+-5.522 F -.15(ve)-.15 G .522(rride the normal precedence of).15 F
+(operators.)180 697.2 Q(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E
+(5)193.455 E 0 Cg EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(!)144 84 Q/F2 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E(ession)-.37 E
+F0 -.35(Tr)180 96 S(ue if).35 E F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0
+(is f)2.74 E(alse.)-.1 E F2 -.2(ex)144 108 S(pr).2 E(ession1)-.37 E F1
+(&&)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0 -.35(Tr)180 120 S
+(ue if both).35 E F2 -.2(ex)2.5 G(pr).2 E(ession1)-.37 E F0(and)2.5 E F2
+-.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0(are true.)2.52 E F2 -.2(ex)144
+132 S(pr).2 E(ession1)-.37 E F1(||)2.5 E F2 -.2(ex)2.5 G(pr).2 E
+(ession2)-.37 E F0 -.35(Tr)180 144 S(ue if either).35 E F2 -.2(ex)2.5 G
+(pr).2 E(ession1)-.37 E F0(or)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37
+E F0(is true.)2.52 E(The)144 160.8 Q F1(&&)3.64 E F0(and)3.64 E F1(||)
+3.64 E F0 1.14(operators do not e)3.64 F -.25(va)-.25 G(luate).25 E F2
+-.2(ex)3.641 G(pr).2 E(ession2)-.37 E F0 1.141(if the v)3.641 F 1.141
+(alue of)-.25 F F2 -.2(ex)3.641 G(pr).2 E(ession1)-.37 E F0 1.141
+(is suf)3.641 F 1.141(\214cient to)-.25 F(determine the return v)144
+172.8 Q(alue of the entire conditional e)-.25 E(xpression.)-.15 E F1
+-.25(fo)108 189.6 S(r).25 E F2(name)2.5 E F0 2.5([[)2.5 G F1(in)A F0([)
+2.5 E F2(wor)2.5 E 2.5(d.)-.37 G(..)-2.5 E F0 2.5(]];])2.5 G F1(do)A F2
+(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0 .424(The list of w)144 201.6 R
+.424(ords follo)-.1 F(wing)-.25 E F1(in)2.924 E F0 .423(is e)2.924 F
+.423(xpanded, generating a list of items.)-.15 F .423(The v)5.423 F
+(ariable)-.25 E F2(name)2.923 E F0 .423(is set to)2.923 F .653
+(each element of this list in turn, and)144 213.6 R F2(list)3.153 E F0
+.653(is e)3.153 F -.15(xe)-.15 G .653(cuted each time.).15 F .653
+(If the)5.653 F F1(in)3.153 E F2(wor)3.153 E(d)-.37 E F0 .653
+(is omitted, the)3.153 F F1 -.25(fo)3.153 G(r).25 E F0 .649(command e)
+144 225.6 R -.15(xe)-.15 G(cutes).15 E F2(list)3.149 E F0 .648
+(once for each positional parameter that is set \(see)3.148 F/F3 9
+/Times-Bold@0 SF -.666(PA)3.148 G(RAMETERS).666 E F0(belo)2.898 E(w\).)
+-.25 E .153(The return status is the e)144 237.6 R .153
+(xit status of the last command that e)-.15 F -.15(xe)-.15 G 2.654
+(cutes. If).15 F .154(the e)2.654 F .154(xpansion of the items)-.15 F
+(follo)144 249.6 Q(wing)-.25 E F1(in)2.5 E F0
+(results in an empty list, no commands are e)2.5 E -.15(xe)-.15 G
+(cuted, and the return status is 0.).15 E F1 -.25(fo)108 266.4 S(r).25 E
+F0(\(\()2.5 E F2 -.2(ex)2.5 G(pr1).2 E F0(;)2.5 E F2 -.2(ex)2.5 G(pr2).2
+E F0(;)2.5 E F2 -.2(ex)2.5 G(pr3).2 E F0(\)\) ;)2.5 E F1(do)2.5 E F2
+(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0 1.236(First, the arithmetic e)
+144 278.4 R(xpression)-.15 E F2 -.2(ex)3.736 G(pr1).2 E F0 1.235(is e)
+3.736 F -.25(va)-.25 G 1.235
+(luated according to the rules described belo).25 F 3.735(wu)-.25 G
+(nder)-3.735 E F3 .561(ARITHMETIC EV)144 290.4 R(ALU)-1.215 E -.855(AT)
+-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0 .561(The arithmetic e)
+5.061 F(xpression)-.15 E F2 -.2(ex)3.061 G(pr2).2 E F0 .562(is then e)
+3.062 F -.25(va)-.25 G .562(luated repeatedly until).25 F .592(it e)144
+302.4 R -.25(va)-.25 G .592(luates to zero.).25 F .592(Each time)5.592 F
+F2 -.2(ex)3.092 G(pr2).2 E F0 -.25(eva)3.092 G .592
+(luates to a non-zero v).25 F(alue,)-.25 E F2(list)3.092 E F0 .591(is e)
+3.092 F -.15(xe)-.15 G .591(cuted and the arith-).15 F .228(metic e)144
+314.4 R(xpression)-.15 E F2 -.2(ex)2.728 G(pr3).2 E F0 .229(is e)2.728 F
+-.25(va)-.25 G 2.729(luated. If).25 F(an)2.729 E 2.729(ye)-.15 G .229
+(xpression is omitted, it beha)-2.879 F -.15(ve)-.2 G 2.729(sa).15 G
+2.729(si)-2.729 G 2.729(fi)-2.729 G 2.729(te)-2.729 G -.25(va)-2.979 G
+.229(luates to 1.).25 F .228(The return v)144 326.4 R .228
+(alue is the e)-.25 F .228(xit status of the last command in)-.15 F F2
+(list)2.728 E F0 .227(that is e)2.728 F -.15(xe)-.15 G .227(cuted, or f)
+.15 F .227(alse if an)-.1 F 2.727(yo)-.15 G 2.727(ft)-2.727 G(he)-2.727
+E -.15(ex)144 338.4 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E F1
+(select)108 355.2 Q F2(name)2.5 E F0([)2.5 E F1(in)2.5 E F2(wor)2.5 E(d)
+-.37 E F0 2.5(];)2.5 G F1(do)A F2(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0
+.432(The list of w)144 367.2 R .432(ords follo)-.1 F(wing)-.25 E F1(in)
+2.932 E F0 .432(is e)2.932 F .432(xpanded, generating a list of items.)
+-.15 F .433(The set of e)5.433 F .433(xpanded w)-.15 F(ords)-.1 E .843
+(is printed on the standard error)144 379.2 R 3.342(,e)-.4 G .842
+(ach preceded by a number)-3.342 F 5.842(.I)-.55 G 3.342(ft)-5.842 G(he)
+-3.342 E F1(in)3.342 E F2(wor)3.342 E(d)-.37 E F0 .842
+(is omitted, the posi-)3.342 F .201(tional parameters are printed \(see)
+144 391.2 R F3 -.666(PA)2.701 G(RAMETERS).666 E F0(belo)2.451 E 2.701
+(w\). The)-.25 F F3(PS3)2.701 E F0 .201(prompt is then displayed and a)
+2.451 F .214(line read from the standard input.)144 403.2 R .213
+(If the line consists of a number corresponding to one of the dis-)5.214
+F 1.537(played w)144 415.2 R 1.537(ords, then the v)-.1 F 1.537(alue of)
+-.25 F F2(name)4.397 E F0 1.537(is set to that w)4.217 F 4.037(ord. If)
+-.1 F 1.538(the line is empty)4.038 F 4.038(,t)-.65 G 1.538(he w)-4.038
+F 1.538(ords and)-.1 F .066(prompt are displayed ag)144 427.2 R 2.566
+(ain. If)-.05 F .065(EOF is read, the command completes.)2.566 F(An)
+5.065 E 2.565(yo)-.15 G .065(ther v)-2.565 F .065(alue read causes)-.25
+F F2(name)144.36 439.2 Q F0 .953(to be set to null.)3.633 F .953
+(The line read is sa)5.953 F -.15(ve)-.2 G 3.454(di).15 G 3.454(nt)
+-3.454 G .954(he v)-3.454 F(ariable)-.25 E F3(REPL)3.454 E(Y)-.828 E F4
+(.)A F0(The)5.454 E F2(list)3.544 E F0 .954(is e)4.134 F -.15(xe)-.15 G
+.954(cuted after).15 F .072(each selection until a)144 451.2 R F1(br)
+2.571 E(eak)-.18 E F0 .071(command is e)2.571 F -.15(xe)-.15 G 2.571
+(cuted. The).15 F -.15(ex)2.571 G .071(it status of).15 F F1(select)
+2.571 E F0 .071(is the e)2.571 F .071(xit status of the)-.15 F
+(last command e)144 463.2 Q -.15(xe)-.15 G(cuted in).15 E F2(list)2.5 E
+F0 2.5(,o).68 G 2.5(rz)-2.5 G(ero if no commands were e)-2.5 E -.15(xe)
+-.15 G(cuted.).15 E F1(case)108 480 Q F2(wor)2.5 E(d)-.37 E F1(in)2.5 E
+F0 2.5([[)2.5 G(\(])-2.5 E F2(pattern)2.5 E F0([)2.5 E F1(|)2.5 E F2
+(pattern)2.5 E F0 2.5(].)2.5 G(.. \))-2.5 E F2(list)2.5 E F0(;; ] ...)
+2.5 E F1(esac)2.5 E F0(A)144 492 Q F1(case)3.264 E F0 .764
+(command \214rst e)3.264 F(xpands)-.15 E F2(wor)3.264 E(d)-.37 E F0
+3.264(,a)C .764(nd tries to match it ag)-3.264 F .764(ainst each)-.05 F
+F2(pattern)3.264 E F0 .765(in turn, using the)3.264 F 2.218
+(matching rules described under)144 504 R F1 -.1(Pa)4.718 G(tter).1 E
+4.718(nM)-.15 G(atching)-4.718 E F0(belo)4.718 E 6.017 -.65(w. T)-.25 H
+(he).65 E F2(wor)4.717 E(d)-.37 E F0 2.217(is e)4.717 F 2.217
+(xpanded using tilde)-.15 F -.15(ex)144 516 S 3.968
+(pansion, parameter and v).15 F 3.969(ariable e)-.25 F 3.969
+(xpansion, arithmetic e)-.15 F 3.969(xpansion, command substitution,)
+-.15 F .042(process substitution and quote remo)144 528 R -.25(va)-.15 G
+2.542(l. Each).25 F F2(pattern)2.542 E F0 -.15(ex)2.542 G .042
+(amined is e).15 F .041(xpanded using tilde e)-.15 F(xpansion,)-.15 E .8
+(parameter and v)144 540 R .8(ariable e)-.25 F .8
+(xpansion, arithmetic e)-.15 F .8
+(xpansion, command substitution, and process sub-)-.15 F 2.583
+(stitution. If)144 552 R(the)2.583 E F1(nocasematch)2.583 E F0 .083
+(shell option is enabled, the match is performed without re)2.583 F -.05
+(ga)-.15 G .082(rd to the).05 F .278(case of alphabetic characters.)144
+564 R .279(When a match is found, the corresponding)5.278 F F2(list)
+2.779 E F0 .279(is e)2.779 F -.15(xe)-.15 G 2.779(cuted. If).15 F(the)
+2.779 E F1(;;)2.779 E F0 .812(operator is used, no subsequent matches a\
+re attempted after the \214rst pattern match.)144 576 R(Using)5.812 E F1
+(;&)3.312 E F0(in)3.312 E .007(place of)144 588 R F1(;;)2.507 E F0 .007
+(causes e)2.507 F -.15(xe)-.15 G .007(cution to continue with the).15 F
+F2(list)2.507 E F0 .007(associated with the ne)2.507 F .007
+(xt set of patterns.)-.15 F(Using)5.008 E F1(;;&)144 600 Q F0 .561
+(in place of)3.061 F F1(;;)3.061 E F0 .561
+(causes the shell to test the ne)3.061 F .56
+(xt pattern list in the statement, if an)-.15 F 1.86 -.65(y, a)-.15 H
+.56(nd e).65 F -.15(xe)-.15 G(cute).15 E(an)144 612 Q 2.568(ya)-.15 G
+(ssociated)-2.568 E F2(list)2.568 E F0 .068(on a successful match.)2.568
+F .068(The e)5.068 F .068(xit status is zero if no pattern matches.)-.15
+F(Otherwise,)5.069 E(it is the e)144 624 Q
+(xit status of the last command e)-.15 E -.15(xe)-.15 G(cuted in).15 E
+F2(list)2.5 E F0(.)A F1(if)108 640.8 Q F2(list)2.5 E F0(;)A F1(then)2.5
+E F2(list)2.5 E F0 2.5(;[)C F1(elif)A F2(list)2.5 E F0(;)A F1(then)2.5 E
+F2(list)2.5 E F0 2.5(;].)C(.. [)-2.5 E F1(else)2.5 E F2(list)2.5 E F0
+2.5(;])C F1<8c>A F0(The)144 652.8 Q F1(if)2.978 E F2(list)3.068 E F0
+.478(is e)3.658 F -.15(xe)-.15 G 2.978(cuted. If).15 F .478(its e)2.978
+F .478(xit status is zero, the)-.15 F F1(then)2.978 E F2(list)2.978 E F0
+.478(is e)2.978 F -.15(xe)-.15 G 2.978(cuted. Otherwise,).15 F(each)
+2.978 E F1(elif)2.977 E F2(list)2.977 E F0 1.087(is e)144 664.8 R -.15
+(xe)-.15 G 1.087(cuted in turn, and if its e).15 F 1.087
+(xit status is zero, the corresponding)-.15 F F1(then)3.587 E F2(list)
+3.587 E F0 1.088(is e)3.588 F -.15(xe)-.15 G 1.088(cuted and the).15 F
+.104(command completes.)144 676.8 R .103(Otherwise, the)5.104 F F1(else)
+2.603 E F2(list)2.603 E F0 .103(is e)2.603 F -.15(xe)-.15 G .103
+(cuted, if present.).15 F .103(The e)5.103 F .103(xit status is the e)
+-.15 F .103(xit sta-)-.15 F(tus of the last command e)144 688.8 Q -.15
+(xe)-.15 G(cuted, or zero if no condition tested true.).15 E F1(while)
+108 705.6 Q F2(list-1)2.5 E F0(;)A F1(do)2.5 E F2(list-2)2.5 E F0(;)A F1
+(done)2.5 E F0(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(6)193.455
+E 0 Cg EP
+%%Page: 7 7
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(until)108 84 Q/F2 10/Times-Italic@0 SF(list-1)2.5 E F0(;)A F1(do)2.5
+E F2(list-2)2.5 E F0(;)A F1(done)2.5 E F0(The)144 96 Q F1(while)3.45 E
+F0 .95(command continuously e)3.45 F -.15(xe)-.15 G .95(cutes the list)
+.15 F F2(list-2)3.45 E F0 .95(as long as the last command in the list)
+3.45 F F2(list-1)144 108 Q F0 .205(returns an e)2.705 F .205
+(xit status of zero.)-.15 F(The)5.205 E F1(until)2.705 E F0 .205
+(command is identical to the)2.705 F F1(while)2.705 E F0 .205
+(command, e)2.705 F(xcept)-.15 E .599(that the test is ne)144 120 R -.05
+(ga)-.15 G(ted:).05 E F2(list-2)3.189 E F0 .599(is e)3.119 F -.15(xe)
+-.15 G .6(cuted as long as the last command in).15 F F2(list-1)3.19 E F0
+.6(returns a non-zero)3.1 F -.15(ex)144 132 S .205(it status.).15 F .205
+(The e)5.205 F .205(xit status of the)-.15 F F1(while)2.705 E F0(and)
+2.705 E F1(until)2.704 E F0 .204(commands is the e)2.704 F .204
+(xit status of the last command)-.15 F -.15(exe)144 144 S(cuted in).15 E
+F2(list-2)2.5 E F0 2.5(,o)C 2.5(rz)-2.5 G(ero if none w)-2.5 E(as e)-.1
+E -.15(xe)-.15 G(cuted.).15 E F1(Copr)87 160.8 Q(ocesses)-.18 E F0(A)108
+172.8 Q F2(copr)3.712 E(ocess)-.45 E F0 1.212
+(is a shell command preceded by the)3.712 F F1(copr)3.713 E(oc)-.18 E F0
+(reserv)3.713 E 1.213(ed w)-.15 F 3.713(ord. A)-.1 F 1.213
+(coprocess is e)3.713 F -.15(xe)-.15 G 1.213(cuted asyn-).15 F .575(chr\
+onously in a subshell, as if the command had been terminated with the)
+108 184.8 R F1(&)3.074 E F0 .574(control operator)3.074 F 3.074(,w)-.4 G
+.574(ith a tw)-3.074 F(o-)-.1 E -.1(wa)108 196.8 S 2.5(yp).1 G
+(ipe established between the e)-2.5 E -.15(xe)-.15 G
+(cuting shell and the coprocess.).15 E(The format for a coprocess is:)
+108 213.6 Q F1(copr)144 230.4 Q(oc)-.18 E F0([)2.5 E F2 -.27(NA)C(ME).27
+E F0(])A F2(command)2.5 E F0([)2.5 E F2 -.37(re)C(dir).37 E(ections)-.37
+E F0(])A .708(This creates a coprocess named)108 247.2 R F2 -.27(NA)
+3.208 G(ME).27 E F0 5.708(.I)C(f)-5.708 E F2 -.27(NA)3.208 G(ME).27 E F0
+.708(is not supplied, the def)3.208 F .708(ault name is)-.1 F F1(COPR)
+3.209 E(OC)-.3 E F0(.)A F2 -.27(NA)5.709 G(ME).27 E F0 .64
+(must not be supplied if)108 259.2 R F2(command)3.14 E F0 .64(is a)3.14
+F F2 .64(simple command)3.14 F F0 .64(\(see abo)3.14 F -.15(ve)-.15 G
+.64(\); otherwise, it is interpreted as the \214rst).15 F -.1(wo)108
+271.2 S 1.44(rd of the simple command.).1 F 1.44
+(When the coprocess is e)6.44 F -.15(xe)-.15 G 1.44
+(cuted, the shell creates an array v).15 F 1.44(ariable \(see)-.25 F F1
+(Arrays)108 283.2 Q F0(belo)3.671 E 1.171(w\) named)-.25 F F2 -.27(NA)
+3.671 G(ME).27 E F0 1.171(in the conte)3.671 F 1.171(xt of the e)-.15 F
+-.15(xe)-.15 G 1.171(cuting shell.).15 F 1.17(The standard output of)
+6.17 F F2(command)3.87 E F0(is)4.44 E 2.029
+(connected via a pipe to a \214le descriptor in the e)108 295.2 R -.15
+(xe)-.15 G 2.029
+(cuting shell, and that \214le descriptor is assigned to).15 F F2 -.27
+(NA)108 307.2 S(ME).27 E F0 3.857([0]. The)B 1.357(standard input of)
+3.857 F F2(command)4.057 E F0 1.356
+(is connected via a pipe to a \214le descriptor in the e)4.627 F -.15
+(xe)-.15 G(cuting).15 E .103
+(shell, and that \214le descriptor is assigned to)108 319.2 R F2 -.27
+(NA)2.603 G(ME).27 E F0 2.603([1]. This)B .103
+(pipe is established before an)2.603 F 2.604(yr)-.15 G .104
+(edirections spec-)-2.604 F 1.272(i\214ed by the command \(see)108 331.2
+R/F3 9/Times-Bold@0 SF(REDIRECTION)3.771 E F0(belo)3.521 E 3.771
+(w\). The)-.25 F 1.271(\214le descriptors can be utilized as ar)3.771 F
+1.271(guments to)-.18 F 1.719
+(shell commands and redirections using standard w)108 343.2 R 1.719
+(ord e)-.1 F 4.219(xpansions. Other)-.15 F 1.72(than those created to e)
+4.219 F -.15(xe)-.15 G(cute).15 E .945
+(command and process substitutions, the \214le descriptors are not a)108
+355.2 R -.25(va)-.2 G .945(ilable in subshells.).25 F .944
+(The process ID of)5.944 F .597(the shell spa)108 367.2 R .597
+(wned to e)-.15 F -.15(xe)-.15 G .597(cute the coprocess is a).15 F -.25
+(va)-.2 G .597(ilable as the v).25 F .597(alue of the v)-.25 F(ariable)
+-.25 E F2 -.27(NA)3.097 G(ME).27 E F0 3.097(_PID. The)B F1(wait)3.098 E
+F0 -.2(bu)108 379.2 S(iltin command may be used to w).2 E
+(ait for the coprocess to terminate.)-.1 E .336
+(Since the coprocess is created as an asynchronous command, the)108 396
+R F1(copr)2.836 E(oc)-.18 E F0 .335(command al)2.835 F -.1(wa)-.1 G .335
+(ys returns success.).1 F(The return status of a coprocess is the e)108
+408 Q(xit status of)-.15 E F2(command)2.5 E F0(.)A F1
+(Shell Function De\214nitions)87 424.8 Q F0 2.697(As)108 436.8 S .198
+(hell function is an object that is called lik)-2.697 F 2.698(eas)-.1 G
+.198(imple command and e)-2.698 F -.15(xe)-.15 G .198
+(cutes a compound command with).15 F 2.5(an)108 448.8 S .5 -.25(ew s)
+-2.5 H(et of positional parameters.).25 E
+(Shell functions are declared as follo)5 E(ws:)-.25 E F2(name)108 465.6
+Q F0(\(\))2.5 E F2(compound\255command)2.5 E F0([)2.5 E F2 -.37(re)C
+(dir).37 E(ection)-.37 E F0(])A F1(function)108 477.6 Q F2(name)2.5 E F0
+([\(\)])2.5 E F2(compound\255command)2.5 E F0([)2.5 E F2 -.37(re)C(dir)
+.37 E(ection)-.37 E F0(])A 1.403(This de\214nes a function named)144
+489.6 R F2(name)3.902 E F0 6.402(.T)C 1.402(he reserv)-6.402 F 1.402
+(ed w)-.15 F(ord)-.1 E F1(function)3.902 E F0 1.402(is optional.)3.902 F
+1.402(If the)6.402 F F1(function)3.902 E F0(reserv)144 501.6 Q .162
+(ed w)-.15 F .162(ord is supplied, the parentheses are optional.)-.1 F
+(The)5.162 E F2(body)2.662 E F0 .162(of the function is the compound)
+2.662 F(command)144 513.6 Q F2(compound\255command)2.784 E F0(\(see)
+3.354 E F1 .084(Compound Commands)2.584 F F0(abo)2.584 E -.15(ve)-.15 G
+2.584(\). That).15 F .084(command is usually a)2.584 F F2(list)144 525.6
+Q F0 .044(of commands between { and }, b)2.544 F .044(ut may be an)-.2 F
+2.544(yc)-.15 G .044(ommand listed under)-2.544 F F1 .044
+(Compound Commands)2.544 F F0(abo)144 537.6 Q -.15(ve)-.15 G 2.902(,w)
+.15 G .402(ith one e)-2.902 F .402(xception: If the)-.15 F F1(function)
+2.901 E F0(reserv)2.901 E .401(ed w)-.15 F .401(ord is used, b)-.1 F
+.401(ut the parentheses are not sup-)-.2 F .047
+(plied, the braces are required.)144 549.6 R F2(compound\255command)
+5.047 E F0 .047(is e)2.547 F -.15(xe)-.15 G .047(cuted whene).15 F -.15
+(ve)-.25 G(r).15 E F2(name)2.547 E F0 .047(is speci\214ed as the)2.547 F
+1.68(name of a simple command.)144 561.6 R 1.68(When in)6.68 F F2 1.68
+(posix mode)4.18 F F0(,)A F2(name)4.179 E F0 1.679
+(may not be the name of one of the)4.179 F(POSIX)144 573.6 Q F2 .014
+(special b)2.513 F(uiltins)-.2 E F0 5.014(.A)C .314 -.15(ny r)-5.014 H
+.014(edirections \(see).15 F F3(REDIRECTION)2.514 E F0(belo)2.264 E .014
+(w\) speci\214ed when a function is)-.25 F 1.12
+(de\214ned are performed when the function is e)144 585.6 R -.15(xe)-.15
+G 3.619(cuted. The).15 F -.15(ex)3.619 G 1.119
+(it status of a function de\214nition is).15 F .217(zero unless a synta\
+x error occurs or a readonly function with the same name already e)144
+597.6 R 2.717(xists. When)-.15 F -.15(exe)144 609.6 S .546(cuted, the e)
+.15 F .546(xit status of a function is the e)-.15 F .545
+(xit status of the last command e)-.15 F -.15(xe)-.15 G .545
+(cuted in the body).15 F(.)-.65 E(\(See)144 621.6 Q F3(FUNCTIONS)2.5 E
+F0(belo)2.25 E -.65(w.)-.25 G(\)).65 E/F4 10.95/Times-Bold@0 SF
+(COMMENTS)72 638.4 Q F0 .982(In a non-interacti)108 650.4 R 1.282 -.15
+(ve s)-.25 H .982(hell, or an interacti).15 F 1.282 -.15(ve s)-.25 H
+.982(hell in which the).15 F F1(interacti)3.482 E -.1(ve)-.1 G
+(_comments).1 E F0 .982(option to the)3.482 F F1(shopt)3.482 E F0 -.2
+(bu)108 662.4 S .952(iltin is enabled \(see).2 F F3 .952(SHELL B)3.452 F
+(UIL)-.09 E .952(TIN COMMANDS)-.828 F F0(belo)3.202 E .952(w\), a w)-.25
+F .952(ord be)-.1 F .952(ginning with)-.15 F F1(#)3.451 E F0 .951
+(causes that w)3.451 F(ord)-.1 E .604
+(and all remaining characters on that line to be ignored.)108 674.4 R
+.605(An interacti)5.605 F .905 -.15(ve s)-.25 H .605(hell without the)
+.15 F F1(interacti)3.105 E -.1(ve)-.1 G(_com-).1 E(ments)108 686.4 Q F0
+1.337(option enabled does not allo)3.837 F 3.837(wc)-.25 G 3.836
+(omments. The)-3.837 F F1(interacti)3.836 E -.1(ve)-.1 G(_comments).1 E
+F0 1.336(option is on by def)3.836 F 1.336(ault in)-.1 F(interacti)108
+698.4 Q .3 -.15(ve s)-.25 H(hells.).15 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(7)193.455 E 0 Cg EP
+%%Page: 8 8
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10.95
+/Times-Bold@0 SF -.11(QU)72 84 S -.438(OT).11 G(ING).438 E/F2 10
+/Times-Italic@0 SF(Quoting)108 96 Q F0 .477(is used to remo)2.977 F .777
+-.15(ve t)-.15 H .477(he special meaning of certain characters or w).15
+F .477(ords to the shell.)-.1 F .478(Quoting can be)5.478 F .185
+(used to disable special treatment for special characters, to pre)108
+108 R -.15(ve)-.25 G .185(nt reserv).15 F .184(ed w)-.15 F .184
+(ords from being recognized as)-.1 F(such, and to pre)108 120 Q -.15(ve)
+-.25 G(nt parameter e).15 E(xpansion.)-.15 E .288(Each of the)108 136.8
+R F2(metac)2.788 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 .288(listed abo)
+2.788 F .588 -.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 SF
+(DEFINITIONS)2.788 E F0 .288
+(has special meaning to the shell and must be)2.538 F
+(quoted if it is to represent itself.)108 148.8 Q 1.345
+(When the command history e)108 165.6 R 1.344(xpansion f)-.15 F 1.344
+(acilities are being used \(see)-.1 F F3(HIST)3.844 E(OR)-.162 E 3.594
+(YE)-.315 G(XP)-3.594 E(ANSION)-.666 E F0(belo)3.594 E 1.344(w\), the)
+-.25 F F2(history e)108 177.6 Q(xpansion)-.2 E F0(character)2.5 E 2.5
+(,u)-.4 G(sually)-2.5 E/F4 10/Times-Bold@0 SF(!)2.5 E F0 2.5(,m)C
+(ust be quoted to pre)-2.5 E -.15(ve)-.25 G(nt history e).15 E
+(xpansion.)-.15 E(There are three quoting mechanisms: the)108 194.4 Q F2
+(escape c)2.5 E(har)-.15 E(acter)-.15 E F0 2.5(,s).73 G
+(ingle quotes, and double quotes.)-2.5 E 2.974(An)108 211.2 S .474
+(on-quoted backslash \()-2.974 F F4(\\)A F0 2.974(\)i)C 2.974(st)-2.974
+G(he)-2.974 E F2 .474(escape c)2.974 F(har)-.15 E(acter)-.15 E F0 5.474
+(.I).73 G 2.974(tp)-5.474 G(reserv)-2.974 E .474(es the literal v)-.15 F
+.474(alue of the ne)-.25 F .475(xt character that)-.15 F(follo)108 223.2
+Q 1.554(ws, with the e)-.25 F 1.553(xception of <ne)-.15 F 4.053
+(wline>. If)-.25 F(a)4.053 E F4(\\)4.053 E F0(<ne)A 1.553
+(wline> pair appears, and the backslash is not itself)-.25 F 1.122
+(quoted, the)108 235.2 R F4(\\)3.622 E F0(<ne)A 1.122
+(wline> is treated as a line continuation \(that is, it is remo)-.25 F
+-.15(ve)-.15 G 3.622(df).15 G 1.123(rom the input stream and)-3.622 F
+(ef)108 247.2 Q(fecti)-.25 E -.15(ve)-.25 G(ly ignored\).).15 E .295
+(Enclosing characters in single quotes preserv)108 264 R .295
+(es the literal v)-.15 F .295(alue of each character within the quotes.)
+-.25 F 2.795(As)5.295 G(in-)-2.795 E
+(gle quote may not occur between single quotes, e)108 276 Q -.15(ve)-.25
+G 2.5(nw).15 G(hen preceded by a backslash.)-2.5 E .033
+(Enclosing characters in double quotes preserv)108 292.8 R .034
+(es the literal v)-.15 F .034
+(alue of all characters within the quotes, with the)-.25 F -.15(ex)108
+304.8 S .108(ception of).15 F F4($)2.608 E F0(,)A F4<92>2.608 E F0(,)A
+F4(\\)2.608 E F0 2.608(,a)C .107(nd, when history e)-2.608 F .107
+(xpansion is enabled,)-.15 F F4(!)2.607 E F0 5.107(.W)C .107
+(hen the shell is in)-5.107 F F2 .107(posix mode)2.607 F F0 2.607(,t)C
+(he)-2.607 E F4(!)2.607 E F0 .107(has no)2.607 F 1.397
+(special meaning within double quotes, e)108 316.8 R -.15(ve)-.25 G
+3.897(nw).15 G 1.397(hen history e)-3.897 F 1.397(xpansion is enabled.)
+-.15 F 1.398(The characters)6.398 F F4($)3.898 E F0(and)3.898 E F4<92>
+3.898 E F0 .045(retain their special meaning within double quotes.)108
+328.8 R .044(The backslash retains its special meaning only when fol-)
+5.045 F(lo)108 340.8 Q .601(wed by one of the follo)-.25 F .602
+(wing characters:)-.25 F F4($)3.102 E F0(,)A F4<92>3.102 E F0(,)A F4(")
+3.935 E F0(,).833 E F4(\\)3.102 E F0 3.102(,o)C(r)-3.102 E F4(<newline>)
+3.102 E F0 5.602(.A)C .602(double quote may be quoted within)-2.5 F .131
+(double quotes by preceding it with a backslash.)108 352.8 R .131
+(If enabled, history e)5.131 F .13(xpansion will be performed unless an)
+-.15 F F4(!)2.63 E F0
+(appearing in double quotes is escaped using a backslash.)108 364.8 Q
+(The backslash preceding the)5 E F4(!)2.5 E F0(is not remo)5 E -.15(ve)
+-.15 G(d.).15 E(The special parameters)108 381.6 Q F4(*)2.5 E F0(and)2.5
+E F4(@)2.5 E F0(ha)2.5 E .3 -.15(ve s)-.2 H
+(pecial meaning when in double quotes \(see).15 E F3 -.666(PA)2.5 G
+(RAMETERS).666 E F0(belo)2.25 E(w\).)-.25 E -.8(Wo)108 398.4 S .211
+(rds of the form).8 F F4($)2.711 E F0<08>A F2(string)A F0 2.711<0861>C
+.211(re treated specially)-2.711 F 5.211(.T)-.65 G .211(he w)-5.211 F
+.211(ord e)-.1 F .212(xpands to)-.15 F F2(string)2.712 E F0 2.712(,w)C
+.212(ith backslash-escaped char)-2.712 F(-)-.2 E .605
+(acters replaced as speci\214ed by the ANSI C standard.)108 410.4 R .604
+(Backslash escape sequences, if present, are decoded)5.605 F(as follo)
+108 422.4 Q(ws:)-.25 E F4(\\a)144 434.4 Q F0(alert \(bell\))180 434.4 Q
+F4(\\b)144 446.4 Q F0(backspace)180 446.4 Q F4(\\e)144 458.4 Q(\\E)144
+470.4 Q F0(an escape character)180 470.4 Q F4(\\f)144 482.4 Q F0
+(form feed)180 482.4 Q F4(\\n)144 494.4 Q F0(ne)180 494.4 Q 2.5(wl)-.25
+G(ine)-2.5 E F4(\\r)144 506.4 Q F0(carriage return)180 506.4 Q F4(\\t)
+144 518.4 Q F0(horizontal tab)180 518.4 Q F4(\\v)144 530.4 Q F0 -.15(ve)
+180 530.4 S(rtical tab).15 E F4(\\\\)144 542.4 Q F0(backslash)180 542.4
+Q F4<5c08>144 554.4 Q F0(single quote)180 554.4 Q F4(\\")144 566.4 Q F0
+(double quote)180 566.4 Q F4(\\?)144 578.4 Q F0(question mark)180 578.4
+Q F4(\\)144 590.4 Q F2(nnn)A F0(the eight-bit character whose v)180
+590.4 Q(alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0
+(\(one to three octal digits\))2.5 E F4(\\x)144 602.4 Q F2(HH)A F0
+(the eight-bit character whose v)180 602.4 Q(alue is the he)-.25 E
+(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh)
+-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F4(\\u)144 614.4 Q F2(HHHH)A F0
+1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 626.4 R 1.507
+(alue is the he)-.25 F 1.507(xadecimal v)-.15 F(alue)-.25 E F2(HHHH)
+4.007 E F0(\(one to four he)180 638.4 Q 2.5(xd)-.15 G(igits\))-2.5 E F4
+(\\U)144 650.4 Q F2(HHHHHHHH)A F0 .548
+(the Unicode \(ISO/IEC 10646\) character whose v)180 662.4 R .547
+(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
+3.047 E(HHH)180 674.4 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G
+(igits\))-2.5 E F4(\\c)144 686.4 Q F2(x)A F0 2.5(ac)180 686.4 S(ontrol-)
+-2.5 E F2(x)A F0(character)2.5 E(The e)108 703.2 Q(xpanded result is si\
+ngle-quoted, as if the dollar sign had not been present.)-.15 E 2.64(Ad)
+108 720 S .14(ouble-quoted string preceded by a dollar sign \()-2.64 F
+F4($)A F0(")A F2(string)A F0 .14
+("\) will cause the string to be translated according)B(GNU Bash 5.0)72
+768 Q(2018 December 7)139.295 E(8)193.455 E 0 Cg EP
+%%Page: 9 9
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .496
+(to the current locale.)108 84 R .495(If the current locale is)5.496 F
+/F1 10/Times-Bold@0 SF(C)2.995 E F0(or)2.995 E F1(POSIX)2.995 E F0 2.995
+(,t)C .495(he dollar sign is ignored.)-2.995 F .495
+(If the string is trans-)5.495 F
+(lated and replaced, the replacement is double-quoted.)108 96 Q/F2 10.95
+/Times-Bold@0 SF -.81(PA)72 112.8 S(RAMETERS).81 E F0(A)108 124.8 Q/F3
+10/Times-Italic@0 SF(par)4.592 E(ameter)-.15 E F0 .842
+(is an entity that stores v)4.072 F 3.342(alues. It)-.25 F .842
+(can be a)3.342 F F3(name)3.343 E F0 3.343(,an).18 G(umber)-3.343 E
+3.343(,o)-.4 G 3.343(ro)-3.343 G .843(ne of the special characters)
+-3.343 F .823(listed belo)108 136.8 R 3.323(wu)-.25 G(nder)-3.323 E F1
+.823(Special P)3.323 F(arameters)-.1 E F0 5.823(.A)C F3(variable)-2.21 E
+F0 .823(is a parameter denoted by a)3.503 F F3(name)3.323 E F0 5.823(.A)
+.18 G -.25(va)-2.5 G .823(riable has a).25 F F3(value)108 148.8 Q F0
+.368(and zero or more)2.868 F F3(attrib)2.868 E(utes)-.2 E F0 5.369(.A)C
+(ttrib)-5.369 E .369(utes are assigned using the)-.2 F F1(declar)2.869 E
+(e)-.18 E F0 -.2(bu)2.869 G .369(iltin command \(see).2 F F1(declar)
+2.869 E(e)-.18 E F0(belo)108 160.8 Q 2.5(wi)-.25 G(n)-2.5 E/F4 9
+/Times-Bold@0 SF(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E/F5 9
+/Times-Roman@0 SF(\).)A F0 2.755(Ap)108 177.6 S .255
+(arameter is set if it has been assigned a v)-2.755 F 2.754(alue. The)
+-.25 F .254(null string is a v)2.754 F .254(alid v)-.25 F 2.754
+(alue. Once)-.25 F 2.754(av)2.754 G .254(ariable is set, it)-3.004 F
+(may be unset only by using the)108 189.6 Q F1(unset)2.5 E F0 -.2(bu)2.5
+G(iltin command \(see).2 E F4(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)
+-.828 E F0(belo)2.25 E(w\).)-.25 E(A)108 206.4 Q F3(variable)2.79 E F0
+(may be assigned to by a statement of the form)2.68 E F3(name)144 223.2
+Q F0(=[)A F3(value)A F0(])A(If)108 240 Q F3(value)3.022 E F0 .232
+(is not gi)2.912 F -.15(ve)-.25 G .232(n, the v).15 F .232
+(ariable is assigned the null string.)-.25 F(All)5.233 E F3(values)3.023
+E F0(under)3.003 E .233(go tilde e)-.18 F .233(xpansion, parameter)-.15
+F .515(and v)108 252 R .515(ariable e)-.25 F .515
+(xpansion, command substitution, arithmetic e)-.15 F .515
+(xpansion, and quote remo)-.15 F -.25(va)-.15 G 3.015(l\().25 G(see)
+-3.015 E F4(EXP)3.015 E(ANSION)-.666 E F0(belo)108 264 Q 2.698(w\). If)
+-.25 F .198(the v)2.698 F .198(ariable has its)-.25 F F1(integer)2.698 E
+F0(attrib)2.698 E .198(ute set, then)-.2 F F3(value)2.988 E F0 .198
+(is e)2.878 F -.25(va)-.25 G .199(luated as an arithmetic e).25 F .199
+(xpression e)-.15 F -.15(ve)-.25 G(n).15 E .902(if the $\(\(...\)\) e)
+108 276 R .902(xpansion is not used \(see)-.15 F F1 .901
+(Arithmetic Expansion)3.401 F F0(belo)3.401 E 3.401(w\). W)-.25 F .901
+(ord splitting is not performed,)-.8 F 1.178(with the e)108 288 R 1.178
+(xception of)-.15 F F1("$@")3.678 E F0 1.178(as e)3.678 F 1.179
+(xplained belo)-.15 F 3.679(wu)-.25 G(nder)-3.679 E F1 1.179(Special P)
+3.679 F(arameters)-.1 E F0 6.179(.P)C 1.179(athname e)-6.329 F 1.179
+(xpansion is not)-.15 F 3.649(performed. Assignment)108 300 R 1.149
+(statements may also appear as ar)3.649 F 1.148(guments to the)-.18 F F1
+(alias)3.648 E F0(,)A F1(declar)3.648 E(e)-.18 E F0(,)A F1(typeset)3.648
+E F0(,)A F1(export)3.648 E F0(,)A F1 -.18(re)108 312 S(adonly).18 E F0
+3.288(,a)C(nd)-3.288 E F1(local)3.288 E F0 -.2(bu)3.288 G .788
+(iltin commands \().2 F F3(declar)A(ation)-.15 E F0 3.288
+(commands\). When)3.288 F(in)3.289 E F3 .789(posix mode)3.289 F F0 3.289
+(,t)C .789(hese b)-3.289 F .789(uiltins may)-.2 F 1.496
+(appear in a command after one or more instances of the)108 324 R F1
+(command)3.996 E F0 -.2(bu)3.996 G 1.496
+(iltin and retain these assignment).2 F(statement properties.)108 336 Q
+.376(In the conte)108 352.8 R .376
+(xt where an assignment statement is assigning a v)-.15 F .376
+(alue to a shell v)-.25 F .377(ariable or array inde)-.25 F .377
+(x, the +=)-.15 F 1.631
+(operator can be used to append to or add to the v)108 364.8 R(ariable')
+-.25 E 4.13(sp)-.55 G(re)-4.13 E 1.63(vious v)-.25 F 4.13(alue. This)
+-.25 F 1.63(includes ar)4.13 F 1.63(guments to)-.18 F -.2(bu)108 376.8 S
+.163(iltin commands such as).2 F F1(declar)2.664 E(e)-.18 E F0 .164
+(that accept assignment statements \()2.664 F F3(declar)A(ation)-.15 E
+F0 2.664(commands\). When)2.664 F .164(+= is)2.664 F .252
+(applied to a v)108 388.8 R .252(ariable for which the)-.25 F F3(inte)
+2.752 E -.1(ge)-.4 G(r).1 E F0(attrib)2.752 E .252(ute has been set,)-.2
+F F3(value)2.752 E F0 .251(is e)2.751 F -.25(va)-.25 G .251
+(luated as an arithmetic e).25 F(xpres-)-.15 E .05
+(sion and added to the v)108 400.8 R(ariable')-.25 E 2.55(sc)-.55 G .05
+(urrent v)-2.55 F .05(alue, which is also e)-.25 F -.25(va)-.25 G 2.55
+(luated. When).25 F .05(+= is applied to an array v)2.55 F(ari-)-.25 E
+.459(able using compound assignment \(see)108 412.8 R F1(Arrays)2.959 E
+F0(belo)2.959 E .459(w\), the v)-.25 F(ariable')-.25 E 2.959(sv)-.55 G
+.459(alue is not unset \(as it is when using)-3.209 F .265(=\), and ne)
+108 424.8 R 2.765(wv)-.25 G .265(alues are appended to the array be)
+-3.015 F .265(ginning at one greater than the array')-.15 F 2.765(sm)
+-.55 G .265(aximum inde)-2.765 F 2.765(x\()-.15 G(for)-2.765 E(inde)108
+436.8 Q -.15(xe)-.15 G 3.402(da).15 G .902
+(rrays\) or added as additional k)-3.402 F -.15(ey)-.1 G<ad76>.15 E .901
+(alue pairs in an associati)-.25 F 1.201 -.15(ve a)-.25 H(rray).15 E
+5.901(.W)-.65 G .901(hen applied to a string-)-5.901 F -.25(va)108 448.8
+S(lued v).25 E(ariable,)-.25 E F3(value)2.5 E F0(is e)2.5 E
+(xpanded and appended to the v)-.15 E(ariable')-.25 E 2.5(sv)-.55 G
+(alue.)-2.75 E 3.382(Av)108 465.6 S .882(ariable can be assigned the)
+-3.632 F F3(namer)3.382 E(ef)-.37 E F0(attrib)3.382 E .882
+(ute using the)-.2 F F1<ad6e>3.382 E F0 .882(option to the)3.382 F F1
+(declar)3.382 E(e)-.18 E F0(or)3.383 E F1(local)3.383 E F0 -.2(bu)3.383
+G .883(iltin com-).2 F .316(mands \(see the descriptions of)108 477.6 R
+F1(declar)2.816 E(e)-.18 E F0(and)2.816 E F1(local)2.816 E F0(belo)2.816
+E .316(w\) to create a)-.25 F F3(namer)2.815 E(ef)-.37 E F0 2.815(,o)C
+2.815(rar)-2.815 G .315(eference to another v)-2.815 F(ari-)-.25 E 4.04
+(able. This)108 489.6 R(allo)4.04 E 1.54(ws v)-.25 F 1.54
+(ariables to be manipulated indirectly)-.25 F 6.54(.W)-.65 G(hene)-6.54
+E -.15(ve)-.25 G 4.04(rt).15 G 1.54(he nameref v)-4.04 F 1.54
+(ariable is referenced,)-.25 F .54
+(assigned to, unset, or has its attrib)108 501.6 R .54
+(utes modi\214ed \(other than using or changing the)-.2 F F3(namer)3.04
+E(ef)-.37 E F0(attrib)3.04 E .54(ute itself\),)-.2 F .352
+(the operation is actually performed on the v)108 513.6 R .352
+(ariable speci\214ed by the nameref v)-.25 F(ariable')-.25 E 2.852(sv)
+-.55 G 2.852(alue. A)-3.102 F .352(nameref is)2.852 F .972
+(commonly used within shell functions to refer to a v)108 525.6 R .971
+(ariable whose name is passed as an ar)-.25 F .971(gument to the)-.18 F
+2.5(function. F)108 537.6 R(or instance, if a v)-.15 E
+(ariable name is passed to a shell function as its \214rst ar)-.25 E
+(gument, running)-.18 E/F6 10/Courier@0 SF(declare -n ref=$1)144 555.6 Q
+F0 .302(inside the function creates a nameref v)108 573.6 R(ariable)-.25
+E F1 -.18(re)2.803 G(f).18 E F0 .303(whose v)2.803 F .303(alue is the v)
+-.25 F .303(ariable name passed as the \214rst ar)-.25 F(gu-)-.18 E
+3.592(ment. References)108 585.6 R 1.092(and assignments to)3.592 F F1
+-.18(re)3.592 G(f).18 E F0 3.592(,a)C 1.092(nd changes to its attrib)
+-3.592 F 1.092(utes, are treated as references, assign-)-.2 F .143
+(ments, and attrib)108 597.6 R .144(ute modi\214cations to the v)-.2 F
+.144(ariable whose name w)-.25 F .144(as passed as)-.1 F F1($1)2.644 E
+F0 5.144(.I)C 2.644(ft)-5.144 G .144(he control v)-2.644 F .144
+(ariable in a)-.25 F F1 -.25(fo)108 609.6 S(r).25 E F0 .868
+(loop has the nameref attrib)3.368 F .868(ute, the list of w)-.2 F .867
+(ords can be a list of shell v)-.1 F .867
+(ariables, and a name reference)-.25 F .509
+(will be established for each w)108 621.6 R .509
+(ord in the list, in turn, when the loop is e)-.1 F -.15(xe)-.15 G 3.009
+(cuted. Array).15 F -.25(va)3.009 G .509(riables cannot be).25 F(gi)108
+633.6 Q -.15(ve)-.25 G 4.193(nt).15 G(he)-4.193 E F1(namer)4.193 E(ef)
+-.18 E F0(attrib)4.193 E 4.193(ute. Ho)-.2 F(we)-.25 E -.15(ve)-.25 G
+2.493 -.4(r, n).15 H 1.693(ameref v).4 F 1.692
+(ariables can reference array v)-.25 F 1.692(ariables and subscripted)
+-.25 F .101(array v)108 645.6 R 2.601(ariables. Namerefs)-.25 F .101
+(can be unset using the)2.601 F F1<ad6e>2.602 E F0 .102(option to the)
+2.602 F F1(unset)2.602 E F0 -.2(bu)2.602 G 2.602(iltin. Otherwise,).2 F
+(if)2.602 E F1(unset)2.602 E F0 .102(is e)2.602 F -.15(xe)-.15 G(-).15 E
+.443(cuted with the name of a nameref v)108 657.6 R .442
+(ariable as an ar)-.25 F .442(gument, the v)-.18 F .442
+(ariable referenced by the nameref v)-.25 F(ariable)-.25 E
+(will be unset.)108 669.6 Q F1 -.2(Po)87 686.4 S(sitional P).2 E
+(arameters)-.1 E F0(A)108 698.4 Q F3 .705(positional par)4.455 F(ameter)
+-.15 E F0 .706(is a parameter denoted by one or more digits, other than\
+ the single digit 0.)3.935 F(Posi-)5.706 E .445
+(tional parameters are assigned from the shell')108 710.4 R 2.944(sa)
+-.55 G -.18(rg)-2.944 G .444(uments when it is in).18 F -.2(vo)-.4 G -.1
+(ke).2 G .444(d, and may be reassigned using).1 F(the)108 722.4 Q F1
+(set)3.333 E F0 -.2(bu)3.333 G .833(iltin command.).2 F .834(Positional\
+ parameters may not be assigned to with assignment statements.)5.833 F
+(The)5.834 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(9)193.455 E
+0 Cg EP
+%%Page: 10 10
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(positional parame\
+ters are temporarily replaced when a shell function is e)108 84 Q -.15
+(xe)-.15 G(cuted \(see).15 E/F1 9/Times-Bold@0 SF(FUNCTIONS)2.5 E F0
+(belo)2.25 E(w\).)-.25 E 1.404(When a positional parameter consisting o\
+f more than a single digit is e)108 100.8 R 1.403
+(xpanded, it must be enclosed in)-.15 F(braces \(see)108 112.8 Q F1(EXP)
+2.5 E(ANSION)-.666 E F0(belo)2.25 E(w\).)-.25 E/F2 10/Times-Bold@0 SF
+(Special P)87 129.6 Q(arameters)-.1 E F0 1.674(The shell treats se)108
+141.6 R -.15(ve)-.25 G 1.674(ral parameters specially).15 F 6.675(.T)
+-.65 G 1.675(hese parameters may only be referenced; assignment to)
+-6.675 F(them is not allo)108 153.6 Q(wed.)-.25 E F2(*)108 165.6 Q F0
+.224(Expands to the positional parameters, starting from one.)144 165.6
+R .223(When the e)5.224 F .223(xpansion is not within double)-.15 F .662
+(quotes, each positional parameter e)144 177.6 R .662
+(xpands to a separate w)-.15 F 3.162(ord. In)-.1 F(conte)3.162 E .662
+(xts where it is performed,)-.15 F 1.082(those w)144 189.6 R 1.082
+(ords are subject to further w)-.1 F 1.081(ord splitting and pathname e)
+-.1 F 3.581(xpansion. When)-.15 F 1.081(the e)3.581 F(xpansion)-.15 E
+.914(occurs within double quotes, it e)144 201.6 R .914
+(xpands to a single w)-.15 F .915(ord with the v)-.1 F .915
+(alue of each parameter sepa-)-.25 F .891
+(rated by the \214rst character of the)144 213.6 R F1(IFS)3.39 E F0 .89
+(special v)3.14 F 3.39(ariable. That)-.25 F .89(is, ")3.39 F F2($*)A F0
+3.39("i)C 3.39(se)-3.39 G(qui)-3.39 E -.25(va)-.25 G .89(lent to ").25 F
+F2($1)A/F3 10/Times-Italic@0 SF(c)A F2($2)A F3(c)A F2(...)A F0(",)A
+(where)144 225.6 Q F3(c)3.532 E F0 .832
+(is the \214rst character of the v)3.642 F .832(alue of the)-.25 F F1
+(IFS)3.332 E F0 -.25(va)3.082 G 3.332(riable. If).25 F F1(IFS)3.332 E F0
+.833(is unset, the parameters are)3.082 F(separated by spaces.)144 237.6
+Q(If)5 E F1(IFS)2.5 E F0
+(is null, the parameters are joined without interv)2.25 E
+(ening separators.)-.15 E F2(@)108 249.6 Q F0 .722
+(Expands to the positional parameters, starting from one.)144 249.6 R
+.722(In conte)5.722 F .722(xts where w)-.15 F .722(ord splitting is per)
+-.1 F(-)-.2 E 1.165(formed, this e)144 261.6 R 1.165
+(xpands each positional parameter to a separate w)-.15 F 1.165
+(ord; if not within double quotes,)-.1 F .655(these w)144 273.6 R .655
+(ords are subject to w)-.1 F .655(ord splitting.)-.1 F .655(In conte)
+5.655 F .655(xts where w)-.15 F .654
+(ord splitting is not performed, this)-.1 F -.15(ex)144 285.6 S .748
+(pands to a single w).15 F .748
+(ord with each positional parameter separated by a space.)-.1 F .748
+(When the e)5.748 F(xpan-)-.15 E 1.091
+(sion occurs within double quotes, each parameter e)144 297.6 R 1.091
+(xpands to a separate w)-.15 F 3.59(ord. That)-.1 F 1.09(is, ")3.59 F F2
+($@)A F0 3.59("i)C(s)-3.59 E(equi)144 309.6 Q -.25(va)-.25 G .412
+(lent to ").25 F F2($1)A F0 2.912("")C F2($2)-2.912 E F0 2.912(".)C
+2.912(.. If)-2.912 F .413(the double-quoted e)2.913 F .413
+(xpansion occurs within a w)-.15 F .413(ord, the e)-.1 F .413
+(xpansion of)-.15 F .38(the \214rst parameter is joined with the be)144
+321.6 R .379(ginning part of the original w)-.15 F .379(ord, and the e)
+-.1 F .379(xpansion of the)-.15 F 1.774
+(last parameter is joined with the last part of the original w)144 333.6
+R 4.274(ord. When)-.1 F 1.774(there are no positional)4.274 F
+(parameters, ")144 345.6 Q F2($@)A F0 2.5("a)C(nd)-2.5 E F2($@)2.5 E F0
+-.15(ex)2.5 G(pand to nothing \(i.e., the).15 E 2.5(ya)-.15 G(re remo)
+-2.5 E -.15(ve)-.15 G(d\).).15 E F2(#)108 357.6 Q F0
+(Expands to the number of positional parameters in decimal.)144 357.6 Q
+F2(?)108 369.6 Q F0(Expands to the e)144 369.6 Q
+(xit status of the most recently e)-.15 E -.15(xe)-.15 G(cuted fore).15
+E(ground pipeline.)-.15 E F2<ad>108 381.6 Q F0 .882
+(Expands to the current option \215ags as speci\214ed upon in)144 381.6
+R -.2(vo)-.4 G .881(cation, by the).2 F F2(set)3.381 E F0 -.2(bu)3.381 G
+.881(iltin command, or).2 F(those set by the shell itself \(such as the)
+144 393.6 Q F2<ad69>2.5 E F0(option\).)2.5 E F2($)108 405.6 Q F0 .214
+(Expands to the process ID of the shell.)144 405.6 R .214
+(In a \(\) subshell, it e)5.214 F .214
+(xpands to the process ID of the current)-.15 F
+(shell, not the subshell.)144 417.6 Q F2(!)108 429.6 Q F0 .499(Expands \
+to the process ID of the job most recently placed into the background, \
+whether e)144 429.6 R -.15(xe)-.15 G(cuted).15 E
+(as an asynchronous command or using the)144 441.6 Q F2(bg)2.5 E F0 -.2
+(bu)2.5 G(iltin \(see).2 E F1(JOB CONTR)2.5 E(OL)-.27 E F0(belo)2.25 E
+(w\).)-.25 E F2(0)108 453.6 Q F0 1.691
+(Expands to the name of the shell or shell script.)144 453.6 R 1.692
+(This is set at shell initialization.)6.692 F(If)6.692 E F2(bash)4.192 E
+F0(is)4.192 E(in)144 465.6 Q -.2(vo)-.4 G -.1(ke).2 G 3.078(dw).1 G .578
+(ith a \214le of commands,)-3.078 F F2($0)3.078 E F0 .578
+(is set to the name of that \214le.)3.078 F(If)5.577 E F2(bash)3.077 E
+F0 .577(is started with the)3.077 F F2<ad63>3.077 E F0 .368
+(option, then)144 477.6 R F2($0)2.869 E F0 .369
+(is set to the \214rst ar)2.869 F .369(gument after the string to be e)
+-.18 F -.15(xe)-.15 G .369(cuted, if one is present.).15 F(Other)5.369 E
+(-)-.2 E(wise, it is set to the \214lename used to in)144 489.6 Q -.2
+(vo)-.4 G -.1(ke).2 G F2(bash)2.6 E F0 2.5(,a)C 2.5(sg)-2.5 G -2.15 -.25
+(iv e)-2.5 H 2.5(nb).25 G 2.5(ya)-2.5 G -.18(rg)-2.5 G(ument zero.).18 E
+F2(_)108 501.6 Q F0 .055
+(At shell startup, set to the absolute pathname used to in)144 501.6 R
+-.2(vo)-.4 G .255 -.1(ke t).2 H .054(he shell or shell script being e).1
+F -.15(xe)-.15 G(cuted).15 E .691(as passed in the en)144 513.6 R .691
+(vironment or ar)-.4 F .691(gument list.)-.18 F(Subsequently)5.691 E
+3.191(,e)-.65 G .692(xpands to the last ar)-3.341 F .692(gument to the)
+-.18 F(pre)144 525.6 Q .752(vious simple command e)-.25 F -.15(xe)-.15 G
+.752(cuted in the fore).15 F .751(ground, after e)-.15 F 3.251
+(xpansion. Also)-.15 F .751(set to the full path-)3.251 F .156
+(name used to in)144 537.6 R -.2(vo)-.4 G .356 -.1(ke e).2 H .156
+(ach command e).1 F -.15(xe)-.15 G .157(cuted and placed in the en).15 F
+.157(vironment e)-.4 F .157(xported to that com-)-.15 F 4.937
+(mand. When)144 549.6 R 2.436(checking mail, this parameter holds the n\
+ame of the mail \214le currently being)4.937 F(check)144 561.6 Q(ed.)-.1
+E F2(Shell V)87 578.4 Q(ariables)-.92 E F0(The follo)108 590.4 Q(wing v)
+-.25 E(ariables are set by the shell:)-.25 E F2 -.3(BA)108 607.2 S(SH).3
+E F0(Expands to the full \214lename used to in)144 607.2 Q -.2(vo)-.4 G
+.2 -.1(ke t).2 H(his instance of).1 E F2(bash)2.5 E F0(.)A F2 -.3(BA)108
+619.2 S(SHOPTS).3 E F0 2.548(Ac)144 631.2 S .049
+(olon-separated list of enabled shell options.)-2.548 F .049(Each w)
+5.049 F .049(ord in the list is a v)-.1 F .049(alid ar)-.25 F .049
+(gument for the)-.18 F F2<ad73>2.549 E F0 1.398(option to the)144 643.2
+R F2(shopt)3.898 E F0 -.2(bu)3.898 G 1.398(iltin command \(see).2 F F1
+1.398(SHELL B)3.898 F(UIL)-.09 E 1.398(TIN COMMANDS)-.828 F F0(belo)
+3.648 E 3.898(w\). The)-.25 F(options)3.898 E .476(appearing in)144
+655.2 R F1 -.27(BA)2.976 G(SHOPTS).27 E F0 .476(are those reported as)
+2.726 F F3(on)3.206 E F0(by)3.217 E F2(shopt)2.977 E F0 5.477(.I)C 2.977
+(ft)-5.477 G .477(his v)-2.977 F .477(ariable is in the en)-.25 F
+(vironment)-.4 E(when)144 667.2 Q F2(bash)3.142 E F0 .642(starts up, ea\
+ch shell option in the list will be enabled before reading an)3.142 F
+3.141(ys)-.15 G .641(tartup \214les.)-3.141 F(This v)144 679.2 Q
+(ariable is read-only)-.25 E(.)-.65 E F2 -.3(BA)108 691.2 S(SHPID).3 E
+F0 .187(Expands to the process ID of the current)144 703.2 R F2(bash)
+2.687 E F0 2.688(process. This)2.688 F(dif)2.688 E .188(fers from)-.25 F
+F2($$)2.688 E F0 .188(under certain circum-)2.688 F .548
+(stances, such as subshells that do not require)144 715.2 R F2(bash)
+3.048 E F0 .548(to be re-initialized.)3.048 F .548(Assignments to)5.548
+F F1 -.27(BA)3.048 G(SHPID).27 E F0(ha)144 727.2 Q .3 -.15(ve n)-.2 H
+2.5(oe).15 G -.25(ff)-2.5 G 2.5(ect. If).25 F F2 -.3(BA)2.5 G(SHPID).3 E
+F0(is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5
+(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)
+-2.5 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(10)188.455 E 0 Cg
+EP
+%%Page: 11 11
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF -.3(BA)108 84 S(SH_ALIASES).3 E F0 1.195(An associati)144 96 R 1.495
+-.15(ve a)-.25 H 1.195(rray v).15 F 1.195(ariable whose members corresp\
+ond to the internal list of aliases as main-)-.25 F .16(tained by the)
+144 108 R F1(alias)2.66 E F0 -.2(bu)2.66 G 2.66(iltin. Elements).2 F .16
+(added to this array appear in the alias list; ho)2.66 F(we)-.25 E -.15
+(ve)-.25 G .96 -.4(r, u).15 H(nsetting).4 E 4.503
+(array elements currently does not cause aliases to be remo)144 120 R
+-.15(ve)-.15 G 7.003(df).15 G 4.503(rom the alias list.)-7.003 F(If)
+9.503 E F1 -.3(BA)144 132 S(SH_ALIASES).3 E F0
+(is unset, it loses its special properties, e)2.5 E -.15(ve)-.25 G 2.5
+(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)
+-2.5 E F1 -.3(BA)108 144 S(SH_ARGC).3 E F0 .935(An array v)144 156 R
+.935(ariable whose v)-.25 F .934
+(alues are the number of parameters in each frame of the current)-.25 F
+F1(bash)3.434 E F0 -.15(exe)144 168 S .535(cution call stack.).15 F .535
+(The number of parameters to the current subroutine \(shell function or\
+ script)5.535 F -.15(exe)144 180 S .142(cuted with).15 F F1(.)2.642 E F0
+(or)2.642 E F1(sour)2.642 E(ce)-.18 E F0 2.642(\)i)C 2.642(sa)-2.642 G
+2.642(tt)-2.642 G .142(he top of the stack.)-2.642 F .141
+(When a subroutine is e)5.141 F -.15(xe)-.15 G .141
+(cuted, the number of).15 F 2.63(parameters passed is pushed onto)144
+192 R/F2 9/Times-Bold@0 SF -.27(BA)5.13 G(SH_ARGC).27 E/F3 9
+/Times-Roman@0 SF(.)A F0 2.63(The shell sets)7.13 F F2 -.27(BA)5.131 G
+(SH_ARGC).27 E F0 2.631(only when in)4.881 F -.15(ex)144 204 S .284
+(tended deb).15 F .284(ugging mode \(see the description of the)-.2 F F1
+(extdeb)2.784 E(ug)-.2 E F0 .283(option to the)2.783 F F1(shopt)2.783 E
+F0 -.2(bu)2.783 G .283(iltin belo).2 F(w\).)-.25 E(Setting)144 216 Q F1
+(extdeb)3.362 E(ug)-.2 E F0 .862(after the shell has started to e)3.362
+F -.15(xe)-.15 G .863(cute a script, or referencing this v).15 F .863
+(ariable when)-.25 F F1(extdeb)144 228 Q(ug)-.2 E F0
+(is not set, may result in inconsistent v)2.5 E(alues.)-.25 E F1 -.3(BA)
+108 240 S(SH_ARGV).3 E F0 .98(An array v)144 252 R .979
+(ariable containing all of the parameters in the current)-.25 F F1(bash)
+3.479 E F0 -.15(exe)3.479 G .979(cution call stack.).15 F(The)5.979 E
+.275(\214nal parameter of the last subroutine call is at the top of the\
+ stack; the \214rst parameter of the initial)144 264 R 1.424
+(call is at the bottom.)144 276 R 1.424(When a subroutine is e)6.424 F
+-.15(xe)-.15 G 1.424(cuted, the parameters supplied are pushed onto).15
+F F2 -.27(BA)144 288 S(SH_ARGV).27 E F3(.)A F0 2.197(The shell sets)
+6.697 F F2 -.27(BA)4.697 G(SH_ARGV).27 E F0 2.197(only when in e)4.447 F
+2.197(xtended deb)-.15 F 2.197(ugging mode \(see the)-.2 F .966
+(description of the)144 300 R F1(extdeb)3.466 E(ug)-.2 E F0 .966
+(option to the)3.466 F F1(shopt)3.466 E F0 -.2(bu)3.466 G .966
+(iltin belo).2 F 3.466(w\). Setting)-.25 F F1(extdeb)3.465 E(ug)-.2 E F0
+.965(after the shell)3.465 F .319(has started to e)144 312 R -.15(xe)
+-.15 G .319(cute a script, or referencing this v).15 F .319
+(ariable when)-.25 F F1(extdeb)2.82 E(ug)-.2 E F0 .32
+(is not set, may result in)2.82 F(inconsistent v)144 324 Q(alues.)-.25 E
+F1 -.3(BA)108 336 S(SH_ARGV0).3 E F0 .251(When referenced, this v)144
+348 R .251(ariable e)-.25 F .251
+(xpands to the name of the shell or shell script \(identical to)-.15 F
+F1($0)2.75 E F0 2.75(;s)C(ee)-2.75 E 1.224
+(the description of special parameter 0 abo)144 360 R -.15(ve)-.15 G
+3.724(\). Assignment).15 F(to)3.724 E F1 -.3(BA)3.724 G(SH_ARGV0).3 E F0
+1.225(causes the v)3.724 F(alue)-.25 E .247
+(assigned to also be assigned to)144 372 R F1($0)2.747 E F0 5.247(.I)C
+(f)-5.247 E F1 -.3(BA)2.747 G(SH_ARGV0).3 E F0 .247
+(is unset, it loses its special properties, e)2.747 F -.15(ve)-.25 G(n)
+.15 E(if it is subsequently reset.)144 384 Q F1 -.3(BA)108 396 S
+(SH_CMDS).3 E F0 .667(An associati)144 408 R .967 -.15(ve a)-.25 H .667
+(rray v).15 F .668(ariable whose members correspond to the internal has\
+h table of commands)-.25 F .196(as maintained by the)144 420 R F1(hash)
+2.696 E F0 -.2(bu)2.696 G 2.696(iltin. Elements).2 F .195
+(added to this array appear in the hash table; ho)2.696 F(we)-.25 E -.15
+(ve)-.25 G -.4(r,).15 G .852(unsetting array elements currently does no\
+t cause command names to be remo)144 432 R -.15(ve)-.15 G 3.352(df).15 G
+.853(rom the hash)-3.352 F 2.5(table. If)144 444 R F1 -.3(BA)2.5 G
+(SH_CMDS).3 E F0(is unset, it loses its special properties, e)2.5 E -.15
+(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G
+(ubsequently reset.)-2.5 E F1 -.3(BA)108 456 S(SH_COMMAND).3 E F0 1.243
+(The command currently being e)144 468 R -.15(xe)-.15 G 1.243
+(cuted or about to be e).15 F -.15(xe)-.15 G 1.242
+(cuted, unless the shell is e).15 F -.15(xe)-.15 G 1.242(cuting a).15 F
+(command as the result of a trap, in which case it is the command e)144
+480 Q -.15(xe)-.15 G(cuting at the time of the trap.).15 E F1 -.3(BA)108
+492 S(SH_EXECUTION_STRING).3 E F0(The command ar)144 504 Q
+(gument to the)-.18 E F1<ad63>2.5 E F0(in)2.5 E -.2(vo)-.4 G
+(cation option.).2 E F1 -.3(BA)108 516 S(SH_LINENO).3 E F0 .692
+(An array v)144 528 R .692(ariable whose members are the line numbers i\
+n source \214les where each corresponding)-.25 F .97(member of)144 540 R
+F2(FUNCN)3.47 E(AME)-.18 E F0 -.1(wa)3.22 G 3.47(si).1 G -1.9 -.4(nv o)
+-3.47 H -.1(ke).4 G(d.).1 E F1(${B)5.969 E(ASH_LINENO[)-.3 E/F4 10
+/Times-Italic@0 SF($i)A F1(]})A F0 .969
+(is the line number in the source)3.469 F 14.671(\214le \()144 552 R F1
+(${B)A(ASH_SOURCE[)-.3 E F4($i+1)A F1(]})A F0 17.171(\)w)C(here)-17.171
+E F1(${FUNCN)17.172 E(AME[)-.2 E F4($i)A F1(]})A F0 -.1(wa)17.172 G
+17.172(sc).1 G 14.672(alled \(or)-17.172 F F1(${B)144 564 Q(ASH_LINENO[)
+-.3 E F4($i-1)A F1(]})A F0 .115
+(if referenced within another shell function\).)2.615 F(Use)5.115 E F2
+(LINENO)2.615 E F0 .115(to obtain the)2.365 F(current line number)144
+576 Q(.)-.55 E F1 -.3(BA)108 588 S(SH_LO).3 E(AD)-.4 E(ABLES_P)-.35 E
+-.95(AT)-.74 G(H).95 E F0 4.07(Ac)144 600 S 1.57(olon-separated list of\
+ directories in which the shell looks for dynamically loadable b)-4.07 F
+(uiltins)-.2 E(speci\214ed by the)144 612 Q F1(enable)2.5 E F0(command.)
+2.5 E F1 -.3(BA)108 624 S(SH_REMA).3 E(TCH)-.95 E F0 .006(An array v)144
+636 R .006(ariable whose members are assigned by the)-.25 F F1(=~)2.506
+E F0 .005(binary operator to the)2.506 F F1([[)2.505 E F0 .005
+(conditional com-)2.505 F 2.506(mand. The)144 648 R .007
+(element with inde)2.506 F 2.507(x0i)-.15 G 2.507(st)-2.507 G .007
+(he portion of the string matching the entire re)-2.507 F .007(gular e)
+-.15 F(xpression.)-.15 E .998(The element with inde)144 660 R(x)-.15 E
+F4(n)3.498 E F0 .997(is the portion of the string matching the)3.498 F
+F4(n)3.497 E F0 .997(th parenthesized sube)B(xpres-)-.15 E 2.5
+(sion. This)144 672 R -.25(va)2.5 G(riable is read-only).25 E(.)-.65 E
+F1 -.3(BA)108 684 S(SH_SOURCE).3 E F0 .125(An array v)144 696 R .125(ar\
+iable whose members are the source \214lenames where the corresponding \
+shell function)-.25 F .781(names in the)144 708 R F2(FUNCN)3.28 E(AME)
+-.18 E F0 .78(array v)3.03 F .78(ariable are de\214ned.)-.25 F .78
+(The shell function)5.78 F F1(${FUNCN)3.28 E(AME[)-.2 E F4($i)A F1(]})A
+F0(is)3.28 E(de\214ned in the \214le)144 720 Q F1(${B)2.5 E(ASH_SOURCE[)
+-.3 E F4($i)A F1(]})A F0(and called from)2.5 E F1(${B)2.5 E(ASH_SOURCE[)
+-.3 E F4($i+1)A F1(]})A F0(.)A(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(11)188.455 E 0 Cg EP
+%%Page: 12 12
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF -.3(BA)108 84 S(SH_SUBSHELL).3 E F0 .296
+(Incremented by one within each subshell or subshell en)144 96 R .296
+(vironment when the shell be)-.4 F .297(gins e)-.15 F -.15(xe)-.15 G
+(cuting).15 E(in that en)144 108 Q 2.5(vironment. The)-.4 F(initial v)
+2.5 E(alue is 0.)-.25 E F1 -.3(BA)108 120 S(SH_VERSINFO).3 E F0 2.645
+(Ar)144 132 S .145(eadonly array v)-2.645 F .144
+(ariable whose members hold v)-.25 F .144
+(ersion information for this instance of)-.15 F F1(bash)2.644 E F0 5.144
+(.T)C(he)-5.144 E -.25(va)144 144 S
+(lues assigned to the array members are as follo).25 E(ws:)-.25 E F1 -.3
+(BA)144 162 S(SH_VERSINFO[).3 E F0(0)A F1(])A F0(The major v)264 162 Q
+(ersion number \(the)-.15 E/F2 10/Times-Italic@0 SF -.37(re)2.5 G(lease)
+.37 E F0(\).)A F1 -.3(BA)144 174 S(SH_VERSINFO[).3 E F0(1)A F1(])A F0
+(The minor v)264 174 Q(ersion number \(the)-.15 E F2(ver)2.5 E(sion)-.1
+E F0(\).)A F1 -.3(BA)144 186 S(SH_VERSINFO[).3 E F0(2)A F1(])A F0
+(The patch le)264 186 Q -.15(ve)-.25 G(l.).15 E F1 -.3(BA)144 198 S
+(SH_VERSINFO[).3 E F0(3)A F1(])A F0(The b)264 198 Q(uild v)-.2 E
+(ersion.)-.15 E F1 -.3(BA)144 210 S(SH_VERSINFO[).3 E F0(4)A F1(])A F0
+(The release status \(e.g.,)264 210 Q F2(beta1)2.5 E F0(\).)A F1 -.3(BA)
+144 222 S(SH_VERSINFO[).3 E F0(5)A F1(])A F0(The v)264 222 Q(alue of)
+-.25 E/F3 9/Times-Bold@0 SF(MA)2.5 E(CHTYPE)-.495 E/F4 9/Times-Roman@0
+SF(.)A F1 -.3(BA)108 234 S(SH_VERSION).3 E F0
+(Expands to a string describing the v)144 246 Q
+(ersion of this instance of)-.15 E F1(bash)2.5 E F0(.)A F1(COMP_CW)108
+258 Q(ORD)-.1 E F0 .396(An inde)144 270 R 2.896(xi)-.15 G(nto)-2.896 E
+F1(${COMP_W)2.896 E(ORDS})-.1 E F0 .396(of the w)2.896 F .396
+(ord containing the current cursor position.)-.1 F .397(This v)5.397 F
+(ari-)-.25 E 1.181(able is a)144 282 R -.25(va)-.2 G 1.181
+(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 3.681
+(db).1 G 3.681(yt)-3.681 G 1.18(he programmable completion f)-3.681 F
+1.18(acilities \(see)-.1 F F1(Pr)144 294 Q(ogrammable Completion)-.18 E
+F0(belo)2.5 E(w\).)-.25 E F1(COMP_KEY)108 306 Q F0(The k)144 318 Q .3
+-.15(ey \()-.1 H(or \214nal k).15 E .3 -.15(ey o)-.1 H 2.5(fak).15 G .3
+-.15(ey s)-2.6 H(equence\) used to in).15 E -.2(vo)-.4 G .2 -.1(ke t).2
+H(he current completion function.).1 E F1(COMP_LINE)108 330 Q F0 1.207
+(The current command line.)144 342 R 1.208(This v)6.208 F 1.208
+(ariable is a)-.25 F -.25(va)-.2 G 1.208
+(ilable only in shell functions and e).25 F 1.208(xternal com-)-.15 F
+2.849(mands in)144 354 R -.2(vo)-.4 G -.1(ke).2 G 5.349(db).1 G 5.349
+(yt)-5.349 G 2.849(he programmable completion f)-5.349 F 2.849
+(acilities \(see)-.1 F F1(Pr)5.349 E 2.848(ogrammable Completion)-.18 F
+F0(belo)144 366 Q(w\).)-.25 E F1(COMP_POINT)108 378 Q F0 .666(The inde)
+144 390 R 3.166(xo)-.15 G 3.166(ft)-3.166 G .666
+(he current cursor position relati)-3.166 F .966 -.15(ve t)-.25 H 3.166
+(ot).15 G .666(he be)-3.166 F .666(ginning of the current command.)-.15
+F .667(If the)5.667 F .535
+(current cursor position is at the end of the current command, the v)144
+402 R .534(alue of this v)-.25 F .534(ariable is equal to)-.25 F F1
+(${#COMP_LINE})144 414 Q F0 7.005(.T)C 2.005(his v)-7.005 F 2.005
+(ariable is a)-.25 F -.25(va)-.2 G 2.006
+(ilable only in shell functions and e).25 F 2.006(xternal commands)-.15
+F(in)144 426 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G
+(he programmable completion f)-2.5 E(acilities \(see)-.1 E F1(Pr)2.5 E
+(ogrammable Completion)-.18 E F0(belo)2.5 E(w\).)-.25 E F1(COMP_TYPE)108
+438 Q F0 .042(Set to an inte)144 450 R .042(ger v)-.15 F .041(alue corr\
+esponding to the type of completion attempted that caused a completion)
+-.25 F .337(function to be called:)144 462 R F2 -.5(TA)2.837 G(B).5 E F0
+2.837(,f)C .337(or normal completion,)-2.837 F F2(?)2.837 E F0 2.837(,f)
+C .337(or listing completions after successi)-2.837 F .638 -.15(ve t)
+-.25 H(abs,).15 E F2(!)144 474 Q F0 4.092(,f)C 1.592
+(or listing alternati)-4.092 F -.15(ve)-.25 G 4.092(so).15 G 4.092(np)
+-4.092 G 1.592(artial w)-4.092 F 1.592(ord completion,)-.1 F F2(@)4.092
+E F0 4.092(,t)C 4.092(ol)-4.092 G 1.592(ist completions if the w)-4.092
+F 1.591(ord is not)-.1 F 1.552(unmodi\214ed, or)144 486 R F2(%)4.052 E
+F0 4.052(,f)C 1.552(or menu completion.)-4.052 F 1.552(This v)6.552 F
+1.552(ariable is a)-.25 F -.25(va)-.2 G 1.552
+(ilable only in shell functions and).25 F -.15(ex)144 498 S 2.929
+(ternal commands in).15 F -.2(vo)-.4 G -.1(ke).2 G 5.429(db).1 G 5.429
+(yt)-5.429 G 2.929(he programmable completion f)-5.429 F 2.929
+(acilities \(see)-.1 F F1(Pr)5.428 E(ogrammable)-.18 E(Completion)144
+510 Q F0(belo)2.5 E(w\).)-.25 E F1(COMP_W)108 522 Q(ORDBREAKS)-.1 E F0
+1.335(The set of characters that the)144 534 R F1 -.18(re)3.836 G
+(adline).18 E F0 1.336(library treats as w)3.836 F 1.336
+(ord separators when performing w)-.1 F(ord)-.1 E 3.126(completion. If)
+144 546 R F3(COMP_W)3.126 E(ORDBREAKS)-.09 E F0 .626
+(is unset, it loses its special properties, e)2.876 F -.15(ve)-.25 G
+3.125(ni).15 G 3.125(fi)-3.125 G 3.125(ti)-3.125 G 3.125(ss)-3.125 G
+(ubse-)-3.125 E(quently reset.)144 558 Q F1(COMP_W)108 570 Q(ORDS)-.1 E
+F0 .653(An array v)144 582 R .653(ariable \(see)-.25 F F1(Arrays)3.153 E
+F0(belo)3.153 E .654(w\) consisting of the indi)-.25 F .654(vidual w)
+-.25 F .654(ords in the current command)-.1 F 4.333(line. The)144 594 R
+1.832(line is split into w)4.332 F 1.832(ords as)-.1 F F1 -.18(re)4.332
+G(adline).18 E F0 -.1(wo)4.332 G 1.832(uld split it, using).1 F F3
+(COMP_W)4.332 E(ORDBREAKS)-.09 E F0(as)4.082 E .831(described abo)144
+606 R -.15(ve)-.15 G 5.831(.T).15 G .831(his v)-5.831 F .831
+(ariable is a)-.25 F -.25(va)-.2 G .832
+(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 3.332
+(db).1 G 3.332(yt)-3.332 G .832(he programmable)-3.332 F(completion f)
+144 618 Q(acilities \(see)-.1 E F1(Pr)2.5 E(ogrammable Completion)-.18 E
+F0(belo)2.5 E(w\).)-.25 E F1(COPR)108 630 Q(OC)-.3 E F0 .169(An array v)
+144 642 R .169(ariable \(see)-.25 F F1(Arrays)2.669 E F0(belo)2.669 E
+.169
+(w\) created to hold the \214le descriptors for output from and input)
+-.25 F(to an unnamed coprocess \(see)144 654 Q F1(Copr)2.5 E(ocesses)
+-.18 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(DIRST)108 666 Q -.55(AC)
+-.9 G(K).55 E F0 2.26(An array v)144 678 R 2.26(ariable \(see)-.25 F F1
+(Arrays)4.76 E F0(belo)4.76 E 2.26
+(w\) containing the current contents of the directory stack.)-.25 F
+1.095(Directories appear in the stack in the order the)144 690 R 3.594
+(ya)-.15 G 1.094(re displayed by the)-3.594 F F1(dirs)3.594 E F0 -.2(bu)
+3.594 G 3.594(iltin. Assigning).2 F(to)3.594 E 1.431
+(members of this array v)144 702 R 1.432
+(ariable may be used to modify directories already in the stack, b)-.25
+F 1.432(ut the)-.2 F F1(pushd)144 714 Q F0(and)2.746 E F1(popd)2.746 E
+F0 -.2(bu)2.746 G .246(iltins must be used to add and remo).2 F .546
+-.15(ve d)-.15 H 2.746(irectories. Assignment).15 F .246(to this v)2.746
+F(ariable)-.25 E .35(will not change the current directory)144 726 R
+5.35(.I)-.65 G(f)-5.35 E F3(DIRST)2.85 E -.495(AC)-.81 G(K).495 E F0 .35
+(is unset, it loses its special properties, e)2.6 F -.15(ve)-.25 G 2.851
+(ni).15 G(f)-2.851 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(12)
+188.455 E 0 Cg EP
+%%Page: 13 13
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E
+(it is subsequently reset.)144 84 Q/F1 10/Times-Bold@0 SF(EPOCHREAL)108
+96 Q(TIME)-.92 E F0 .338(Each time this parameter is referenced, it e)
+144 108 R .337(xpands to the number of seconds since the Unix Epoch)-.15
+F(\(see)144 120 Q/F2 10/Times-Italic@0 SF(time)2.916 E F0 .416
+(\(3\)\) as a \215oating point v)B .417
+(alue with micro-second granularity)-.25 F 5.417(.A)-.65 G .417
+(ssignments to)-5.417 F/F3 9/Times-Bold@0 SF(EPOCHRE-)2.917 E(AL)144 132
+Q(TIME)-.828 E F0 1.091(are ignored.)3.341 F(If)6.091 E F3(EPOCHREAL)
+3.59 E(TIME)-.828 E F0 1.09
+(is unset, it loses its special properties, e)3.34 F -.15(ve)-.25 G 3.59
+(ni).15 G 3.59(fi)-3.59 G 3.59(ti)-3.59 G(s)-3.59 E(subsequently reset.)
+144 144 Q F1(EPOCHSECONDS)108 156 Q F0 .337
+(Each time this parameter is referenced, it e)144 168 R .338
+(xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)144
+180 Q F2(time)4.042 E F0 4.042(\(3\)\). Assignments)B(to)4.042 E F3
+(EPOCHSECONDS)4.042 E F0 1.542(are ignored.)3.792 F(If)6.542 E F3
+(EPOCHSECONDS)4.041 E F0 1.541(is unset, it)3.791 F
+(loses its special properties, e)144 192 Q -.15(ve)-.25 G 2.5(ni).15 G
+2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1
+(EUID)108 204 Q F0 1.103(Expands to the ef)144 204 R(fecti)-.25 E 1.403
+-.15(ve u)-.25 H 1.103(ser ID of the current user).15 F 3.603(,i)-.4 G
+1.103(nitialized at shell startup.)-3.603 F 1.104(This v)6.103 F 1.104
+(ariable is)-.25 F(readonly)144 216 Q(.)-.65 E F1(FUNCN)108 228 Q(AME)
+-.2 E F0 .479(An array v)144 240 R .479
+(ariable containing the names of all shell functions currently in the e)
+-.25 F -.15(xe)-.15 G .478(cution call stack.).15 F .276
+(The element with inde)144 252 R 2.776(x0i)-.15 G 2.776(st)-2.776 G .276
+(he name of an)-2.776 F 2.777(yc)-.15 G(urrently-e)-2.777 E -.15(xe)-.15
+G .277(cuting shell function.).15 F .277(The bottom-most)5.277 F .385
+(element \(the one with the highest inde)144 264 R .384(x\) is)-.15 F/F4
+10/Courier@0 SF("main")2.884 E F0 5.384(.T)C .384(his v)-5.384 F .384
+(ariable e)-.25 F .384(xists only when a shell func-)-.15 F .075
+(tion is e)144 276 R -.15(xe)-.15 G 2.575(cuting. Assignments).15 F(to)
+2.575 E F3(FUNCN)2.575 E(AME)-.18 E F0(ha)2.325 E .376 -.15(ve n)-.2 H
+2.576(oe).15 G -.25(ff)-2.576 G 2.576(ect. If).25 F F3(FUNCN)2.576 E
+(AME)-.18 E F0 .076(is unset, it loses its)2.326 F
+(special properties, e)144 288 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5
+G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E .111(This v)144
+306 R .111(ariable can be used with)-.25 F F1 -.3(BA)2.611 G(SH_LINENO)
+.3 E F0(and)2.611 E F1 -.3(BA)2.611 G(SH_SOURCE).3 E F0 5.111(.E)C .111
+(ach element of)-5.111 F F1(FUNC-)2.61 E -.2(NA)144 318 S(ME).2 E F0
+1.404(has corresponding elements in)3.904 F F1 -.3(BA)3.904 G(SH_LINENO)
+.3 E F0(and)3.904 E F1 -.3(BA)3.904 G(SH_SOURCE).3 E F0 1.404
+(to describe the)3.904 F .012(call stack.)144 330 R -.15(Fo)5.012 G
+2.512(ri).15 G(nstance,)-2.512 E F1(${FUNCN)2.512 E(AME[)-.2 E F2($i)A
+F1(]})A F0 -.1(wa)2.512 G 2.512(sc).1 G .012(alled from the \214le)
+-2.512 F F1(${B)2.512 E(ASH_SOURCE[)-.3 E F2($i+1)A F1(]})A F0 1.183
+(at line number)144 342 R F1(${B)3.683 E(ASH_LINENO[)-.3 E F2($i)A F1
+(]})A F0 6.183(.T)C(he)-6.183 E F1(caller)3.683 E F0 -.2(bu)3.683 G
+1.184(iltin displays the current call stack using).2 F
+(this information.)144 354 Q F1(GR)108 366 Q(OUPS)-.3 E F0 1.229
+(An array v)144 378 R 1.228(ariable containing the list of groups of wh\
+ich the current user is a member)-.25 F 6.228(.A)-.55 G(ssign-)-6.228 E
+.571(ments to)144 390 R F3(GR)3.071 E(OUPS)-.27 E F0(ha)2.822 E .872
+-.15(ve n)-.2 H 3.072(oe).15 G -.25(ff)-3.072 G 3.072(ect. If).25 F F3
+(GR)3.072 E(OUPS)-.27 E F0 .572
+(is unset, it loses its special properties, e)2.822 F -.15(ve)-.25 G
+3.072(ni).15 G 3.072(fi)-3.072 G 3.072(ti)-3.072 G(s)-3.072 E
+(subsequently reset.)144 402 Q F1(HISTCMD)108 414 Q F0 .356
+(The history number)144 426 R 2.856(,o)-.4 G 2.856(ri)-2.856 G(nde)
+-2.856 E 2.856(xi)-.15 G 2.856(nt)-2.856 G .356
+(he history list, of the current command.)-2.856 F(If)5.356 E F3
+(HISTCMD)2.855 E F0 .355(is unset, it)2.605 F
+(loses its special properties, e)144 438 Q -.15(ve)-.25 G 2.5(ni).15 G
+2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1
+(HOSTN)108 450 Q(AME)-.2 E F0
+(Automatically set to the name of the current host.)144 462 Q F1
+(HOSTTYPE)108 474 Q F0 .222(Automatically set to a string that uniquely\
+ describes the type of machine on which)144 486 R F1(bash)2.723 E F0
+.223(is e)2.723 F -.15(xe)-.15 G(cut-).15 E 2.5(ing. The)144 498 R(def)
+2.5 E(ault is system-dependent.)-.1 E F1(LINENO)108 510 Q F0 1.408(Each\
+ time this parameter is referenced, the shell substitutes a decimal num\
+ber representing the)144 522 R .078(current sequential line number \(st\
+arting with 1\) within a script or function.)144 534 R .079
+(When not in a script or)5.078 F .307(function, the v)144 546 R .307
+(alue substituted is not guaranteed to be meaningful.)-.25 F(If)5.306 E
+F3(LINENO)2.806 E F0 .306(is unset, it loses its)2.556 F
+(special properties, e)144 558 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5
+G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(MA)108 570 Q
+(CHTYPE)-.55 E F0 .898(Automatically set to a string that fully describ\
+es the system type on which)144 582 R F1(bash)3.398 E F0 .899(is e)3.398
+F -.15(xe)-.15 G .899(cuting, in).15 F(the standard GNU)144 594 Q F2
+(cpu-company-system)2.5 E F0 2.5(format. The)2.5 F(def)2.5 E
+(ault is system-dependent.)-.1 E F1(MAPFILE)108 606 Q F0 .294
+(An array v)144 618 R .294(ariable \(see)-.25 F F1(Arrays)2.794 E F0
+(belo)2.794 E .294(w\) created to hold the te)-.25 F .293
+(xt read by the)-.15 F F1(map\214le)2.793 E F0 -.2(bu)2.793 G .293
+(iltin when no).2 F -.25(va)144 630 S(riable name is supplied.).25 E F1
+(OLDPWD)108 642 Q F0(The pre)144 654 Q(vious w)-.25 E
+(orking directory as set by the)-.1 E F1(cd)2.5 E F0(command.)2.5 E F1
+(OPT)108 666 Q(ARG)-.9 E F0 1.626(The v)144 678 R 1.627
+(alue of the last option ar)-.25 F 1.627(gument processed by the)-.18 F
+F1(getopts)4.127 E F0 -.2(bu)4.127 G 1.627(iltin command \(see).2 F F3
+(SHELL)4.127 E -.09(BU)144 690 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)
+2.25 E(w\).)-.25 E F1(OPTIND)108 702 Q F0 1.652(The inde)144 714 R 4.152
+(xo)-.15 G 4.152(ft)-4.152 G 1.652(he ne)-4.152 F 1.652(xt ar)-.15 F
+1.652(gument to be processed by the)-.18 F F1(getopts)4.151 E F0 -.2(bu)
+4.151 G 1.651(iltin command \(see).2 F F3(SHELL)4.151 E -.09(BU)144 726
+S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E(GNU Bash 5.0)
+72 768 Q(2018 December 7)139.295 E(13)188.455 E 0 Cg EP
+%%Page: 14 14
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(OSTYPE)108 84 Q F0 .329(Automatically set to a string that describes\
+ the operating system on which)144 96 R F1(bash)2.83 E F0 .33(is e)2.83
+F -.15(xe)-.15 G 2.83(cuting. The).15 F(def)144 108 Q
+(ault is system-dependent.)-.1 E F1(PIPEST)108 120 Q -.95(AT)-.9 G(US)
+.95 E F0 .61(An array v)144 132 R .61(ariable \(see)-.25 F F1(Arrays)
+3.11 E F0(belo)3.11 E .61(w\) containing a list of e)-.25 F .61
+(xit status v)-.15 F .61(alues from the processes in)-.25 F
+(the most-recently-e)144 144 Q -.15(xe)-.15 G(cuted fore).15 E
+(ground pipeline \(which may contain only a single command\).)-.15 E F1
+(PPID)108 156 Q F0(The process ID of the shell')144 156 Q 2.5(sp)-.55 G
+2.5(arent. This)-2.5 F -.25(va)2.5 G(riable is readonly).25 E(.)-.65 E
+F1(PWD)108 168 Q F0(The current w)144 168 Q
+(orking directory as set by the)-.1 E F1(cd)2.5 E F0(command.)2.5 E F1
+(RANDOM)108 180 Q F0 .565
+(Each time this parameter is referenced, a random inte)144 192 R .566
+(ger between 0 and 32767 is generated.)-.15 F(The)5.566 E .01
+(sequence of random numbers may be initialized by assigning a v)144 204
+R .01(alue to)-.25 F/F2 9/Times-Bold@0 SF(RANDOM)2.51 E/F3 9
+/Times-Roman@0 SF(.)A F0(If)4.51 E F2(RANDOM)2.51 E F0(is)2.26 E
+(unset, it loses its special properties, e)144 216 Q -.15(ve)-.25 G 2.5
+(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)
+-2.5 E F1(READLINE_LINE)108 228 Q F0 1.546(The contents of the)144 240 R
+F1 -.18(re)4.047 G(adline).18 E F0 1.547(line b)4.047 F(uf)-.2 E(fer)
+-.25 E 4.047(,f)-.4 G 1.547(or use with)-4.047 F/F4 10/Courier@0 SF
+1.547(bind -x)4.047 F F0(\(see)4.047 E F2 1.547(SHELL B)4.047 F(UIL)-.09
+E 1.547(TIN COM-)-.828 F(MANDS)144 252 Q F0(belo)2.25 E(w\).)-.25 E F1
+(READLINE_POINT)108 264 Q F0 .314
+(The position of the insertion point in the)144 276 R F1 -.18(re)2.813 G
+(adline).18 E F0 .313(line b)2.813 F(uf)-.2 E(fer)-.25 E 2.813(,f)-.4 G
+.313(or use with)-2.813 F F4 .313(bind -x)2.813 F F0(\(see)2.813 E F2
+(SHELL)2.813 E -.09(BU)144 288 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)
+2.25 E(w\).)-.25 E F1(REPL)108 300 Q(Y)-.92 E F0
+(Set to the line of input read by the)144 312 Q F1 -.18(re)2.5 G(ad).18
+E F0 -.2(bu)2.5 G(iltin command when no ar).2 E(guments are supplied.)
+-.18 E F1(SECONDS)108 324 Q F0 .795(Each time this parameter is referen\
+ced, the number of seconds since shell in)144 336 R -.2(vo)-.4 G .795
+(cation is returned.).2 F .713(If a v)144 348 R .712
+(alue is assigned to)-.25 F F2(SECONDS)3.212 E F3(,)A F0 .712(the v)
+2.962 F .712(alue returned upon subsequent references is the number)-.25
+F .407(of seconds since the assignment plus the v)144 360 R .408
+(alue assigned.)-.25 F(If)5.408 E F2(SECONDS)2.908 E F0 .408
+(is unset, it loses its special)2.658 F(properties, e)144 372 Q -.15(ve)
+-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G
+(ubsequently reset.)-2.5 E F1(SHELLOPTS)108 384 Q F0 3.263(Ac)144 396 S
+.763(olon-separated list of enabled shell options.)-3.263 F .763(Each w)
+5.763 F .763(ord in the list is a v)-.1 F .763(alid ar)-.25 F .763
+(gument for the)-.18 F F1<ad6f>144 408 Q F0 1.173(option to the)3.673 F
+F1(set)3.673 E F0 -.2(bu)3.673 G 1.173(iltin command \(see).2 F F2 1.174
+(SHELL B)3.674 F(UIL)-.09 E 1.174(TIN COMMANDS)-.828 F F0(belo)3.424 E
+3.674(w\). The)-.25 F(options)3.674 E .02(appearing in)144 420 R F2
+(SHELLOPTS)2.52 E F0 .019(are those reported as)2.27 F/F5 10
+/Times-Italic@0 SF(on)2.749 E F0(by)2.759 E F1 .019(set \255o)2.519 F F0
+5.019(.I)C 2.519(ft)-5.019 G .019(his v)-2.519 F .019
+(ariable is in the en)-.25 F(vironment)-.4 E(when)144 432 Q F1(bash)
+3.141 E F0 .642(starts up, each shell option in the list will be enable\
+d before reading an)3.141 F 3.142(ys)-.15 G .642(tartup \214les.)-3.142
+F(This v)144 444 Q(ariable is read-only)-.25 E(.)-.65 E F1(SHL)108 456 Q
+(VL)-.92 E F0(Incremented by one each time an instance of)144 468 Q F1
+(bash)2.5 E F0(is started.)2.5 E F1(UID)108 480 Q F0
+(Expands to the user ID of the current user)144 480 Q 2.5(,i)-.4 G
+(nitialized at shell startup.)-2.5 E(This v)5 E(ariable is readonly)-.25
+E(.)-.65 E .994(The follo)108 496.8 R .994(wing v)-.25 F .994
+(ariables are used by the shell.)-.25 F .994(In some cases,)5.994 F F1
+(bash)3.494 E F0 .994(assigns a def)3.494 F .994(ault v)-.1 F .993
+(alue to a v)-.25 F(ariable;)-.25 E(these cases are noted belo)108 508.8
+Q -.65(w.)-.25 G F1 -.3(BA)108 525.6 S(SH_COMP).3 E -.95(AT)-.74 G F0
+1.192(The v)144 537.6 R 1.192(alue is used to set the shell')-.25 F
+3.692(sc)-.55 G 1.193(ompatibility le)-3.692 F -.15(ve)-.25 G 3.693
+(l. See).15 F 1.193(the description of the)3.693 F F1(shopt)3.693 E F0
+-.2(bu)3.693 G(iltin).2 E(belo)144 549.6 Q 2.872(wu)-.25 G(nder)-2.872 E
+F1 .372(SHELL B)2.872 F(UIL)-.1 E .372(TIN COMMANDS)-.92 F F0 .372
+(for a description of the v)2.872 F .371(arious compatibility le)-.25 F
+(v-)-.25 E .36(els and their ef)144 561.6 R 2.86(fects. The)-.25 F -.25
+(va)2.86 G .361(lue may be a decimal number \(e.g., 4.2\) or an inte).25
+F .361(ger \(e.g., 42\) corre-)-.15 F 1.751
+(sponding to the desired compatibility le)144 573.6 R -.15(ve)-.25 G
+4.251(l. If).15 F F1 -.3(BA)4.251 G(SH_COMP).3 E -.95(AT)-.74 G F0 1.75
+(is unset or set to the empty)5.201 F .578(string, the compatibility le)
+144 585.6 R -.15(ve)-.25 G 3.078(li).15 G 3.078(ss)-3.078 G .578
+(et to the def)-3.078 F .578(ault for the current v)-.1 F 3.078
+(ersion. If)-.15 F F1 -.3(BA)3.078 G(SH_COMP).3 E -.95(AT)-.74 G F0(is)
+4.028 E .249(set to a v)144 597.6 R .249(alue that is not one of the v)
+-.25 F .248(alid compatibility le)-.25 F -.15(ve)-.25 G .248
+(ls, the shell prints an error message and).15 F 1.119
+(sets the compatibility le)144 609.6 R -.15(ve)-.25 G 3.619(lt).15 G
+3.619(ot)-3.619 G 1.119(he def)-3.619 F 1.119(ault for the current v)-.1
+F 3.62(ersion. The)-.15 F -.25(va)3.62 G 1.12(lid compatibility le).25 F
+-.15(ve)-.25 G(ls).15 E .576
+(correspond to the compatibility options accepted by the)144 621.6 R F1
+(shopt)3.075 E F0 -.2(bu)3.075 G .575(iltin described belo).2 F 3.075
+(w\()-.25 G .575(for e)-3.075 F(xam-)-.15 E(ple,)144 633.6 Q F1
+(compat42)2.5 E F0(means that 4.2 and 42 are v)2.5 E(alid v)-.25 E 2.5
+(alues\). The)-.25 F(current v)2.5 E(ersion is also a v)-.15 E(alid v)
+-.25 E(alue.)-.25 E F1 -.3(BA)108 645.6 S(SH_ENV).3 E F0 .505
+(If this parameter is set when)144 657.6 R F1(bash)3.005 E F0 .505(is e)
+3.005 F -.15(xe)-.15 G .506(cuting a shell script, its v).15 F .506
+(alue is interpreted as a \214lename)-.25 F .355
+(containing commands to initialize the shell, as in)144 669.6 R F5
+(~/.bashr)2.855 E(c)-.37 E F0 5.354(.T).31 G .354(he v)-5.354 F .354
+(alue of)-.25 F F2 -.27(BA)2.854 G(SH_ENV).27 E F0 .354(is subjected)
+2.604 F .525(to parameter e)144 681.6 R .525
+(xpansion, command substitution, and arithmetic e)-.15 F .525
+(xpansion before being interpreted)-.15 F(as a \214lename.)144 693.6 Q
+F2 -.666(PA)5 G(TH)-.189 E F0
+(is not used to search for the resultant \214lename.)2.25 E F1 -.3(BA)
+108 705.6 S(SH_XTRA).3 E(CEFD)-.55 E F0 .481(If set to an inte)144 717.6
+R .481(ger corresponding to a v)-.15 F .481(alid \214le descriptor)-.25
+F(,)-.4 E F1(bash)2.98 E F0 .48(will write the trace output gener)2.98 F
+(-)-.2 E 3.114(ated when)144 729.6 R F4 3.114(set -x)5.614 F F0 3.114
+(is enabled to that \214le descriptor)5.614 F 8.114(.T)-.55 G 3.114
+(he \214le descriptor is closed when)-8.114 F(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(14)188.455 E 0 Cg EP
+%%Page: 15 15
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 9/Times-Bold@0
+SF -.27(BA)144 84 S(SH_XTRA).27 E(CEFD)-.495 E F0 .138
+(is unset or assigned a ne)2.388 F 2.638(wv)-.25 G 2.638
+(alue. Unsetting)-2.888 F F1 -.27(BA)2.638 G(SH_XTRA).27 E(CEFD)-.495 E
+F0 .138(or assigning it)2.388 F 2.531(the empty string causes the trace\
+ output to be sent to the standard error)144 96 R 7.531(.N)-.55 G 2.531
+(ote that setting)-7.531 F F1 -.27(BA)144 108 S(SH_XTRA).27 E(CEFD)-.495
+E F0 .74(to 2 \(the standard error \214le descriptor\) and then unsetti\
+ng it will result in the)2.991 F(standard error being closed.)144 120 Q
+/F2 10/Times-Bold@0 SF(CDP)108 132 Q -.95(AT)-.74 G(H).95 E F0 1.247
+(The search path for the)144 144 R F2(cd)3.747 E F0 3.747(command. This)
+3.747 F 1.248(is a colon-separated list of directories in which the)
+3.747 F 3.796
+(shell looks for destination directories speci\214ed by the)144 156 R F2
+(cd)6.295 E F0 6.295(command. A)6.295 F 3.795(sample v)6.295 F 3.795
+(alue is)-.25 F/F3 10/Courier@0 SF(".:~:/usr")144 168 Q F0(.)A F2
+(CHILD_MAX)108 180 Q F0 .997(Set the number of e)144 192 R .997
+(xited child status v)-.15 F .997(alues for the shell to remember)-.25 F
+5.997(.B)-.55 G .997(ash will not allo)-5.997 F 3.498(wt)-.25 G(his)
+-3.498 E -.25(va)144 204 S 1.078(lue to be decreased belo).25 F 3.577
+(waP)-.25 G 1.077(OSIX-mandated minimum, and there is a maximum v)-3.577
+F 1.077(alue \(cur)-.25 F(-)-.2 E(rently 8192\) that this may not e)144
+216 Q 2.5(xceed. The)-.15 F(minimum v)2.5 E(alue is system-dependent.)
+-.25 E F2(COLUMNS)108 228 Q F0 .828(Used by the)144 240 R F2(select)
+3.328 E F0 .829(compound command to determine the terminal width when p\
+rinting selection)3.328 F 4.507(lists. Automatically)144 252 R 2.007
+(set if the)4.507 F F2(checkwinsize)4.507 E F0 2.006
+(option is enabled or in an interacti)4.507 F 2.306 -.15(ve s)-.25 H
+2.006(hell upon).15 F(receipt of a)144 264 Q F1(SIGWINCH)2.5 E/F4 9
+/Times-Roman@0 SF(.)A F2(COMPREPL)108 276 Q(Y)-.92 E F0 .847(An array v)
+144 288 R .848(ariable from which)-.25 F F2(bash)3.348 E F0 .848
+(reads the possible completions generated by a shell function)3.348 F
+(in)144 300 Q -.2(vo)-.4 G -.1(ke).2 G 2.785(db).1 G 2.785(yt)-2.785 G
+.285(he programmable completion f)-2.785 F .285(acility \(see)-.1 F F2
+(Pr)2.785 E .285(ogrammable Completion)-.18 F F0(belo)2.785 E 2.785
+(w\). Each)-.25 F(array element contains one possible completion.)144
+312 Q F2(EMA)108 324 Q(CS)-.55 E F0(If)144 336 Q F2(bash)2.535 E F0 .035
+(\214nds this v)2.535 F .035(ariable in the en)-.25 F .036
+(vironment when the shell starts with v)-.4 F(alue)-.25 E F3(t)2.536 E
+F0 2.536(,i)C 2.536(ta)-2.536 G .036(ssumes that the)-2.536 F
+(shell is running in an Emacs shell b)144 348 Q(uf)-.2 E
+(fer and disables line editing.)-.25 E F2(ENV)108 360 Q F0(Similar to)
+144 360 Q F1 -.27(BA)2.5 G(SH_ENV).27 E F4(;)A F0
+(used when the shell is in)2.25 E -.2(vo)-.4 G -.1(ke).2 G 2.5(di).1 G
+(n)-2.5 E/F5 10/Times-Italic@0 SF(posix mode)2.5 E F0(.)A F2(EXECIGNORE)
+108 372 Q F0 2.717(Ac)144 384 S .217
+(olon-separated list of shell patterns \(see)-2.717 F F2 -.1(Pa)2.717 G
+(tter).1 E 2.717(nM)-.15 G(atching)-2.717 E F0 2.717(\)d)C .216
+(e\214ning the list of \214lenames to be)-2.717 F .116
+(ignored by command search using)144 396 R F2 -.74(PA)2.616 G(TH)-.21 E
+F0 5.116(.F)C .117
+(iles whose full pathnames match one of these patterns)-5.116 F 1.433
+(are not considered e)144 408 R -.15(xe)-.15 G 1.432
+(cutable \214les for the purposes of completion and command e).15 F -.15
+(xe)-.15 G 1.432(cution via).15 F F2 -.74(PA)144 420 S(TH)-.21 E F0
+2.908(lookup. This)2.908 F .408(does not af)2.908 F .408(fect the beha)
+-.25 F .408(vior of the)-.2 F F2([)2.908 E F0(,)A F2(test)2.908 E F0
+2.908(,a)C(nd)-2.908 E F2([[)2.908 E F0 2.909(commands. Full)2.908 F
+(pathnames)2.909 E .364(in the command hash table are not subject to)144
+432 R F2(EXECIGNORE)2.864 E F0 5.364(.U)C .364(se this v)-5.364 F .364
+(ariable to ignore shared)-.25 F 1.37(library \214les that ha)144 444 R
+1.67 -.15(ve t)-.2 H 1.37(he e).15 F -.15(xe)-.15 G 1.37
+(cutable bit set, b).15 F 1.37(ut are not e)-.2 F -.15(xe)-.15 G 1.37
+(cutable \214les.).15 F 1.37(The pattern matching)6.37 F
+(honors the setting of the)144 456 Q F2(extglob)2.5 E F0(shell option.)
+2.5 E F2(FCEDIT)108 468 Q F0(The def)144 480 Q(ault editor for the)-.1 E
+F2(fc)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E F2(FIGNORE)108 492 Q F0
+2.599(Ac)144 504 S .098(olon-separated list of suf)-2.599 F<8c78>-.25 E
+.098(es to ignore when performing \214lename completion \(see)-.15 F F1
+(READLINE)2.598 E F0(belo)144 516 Q 2.704(w\). A)-.25 F .204
+(\214lename whose suf)2.704 F .205(\214x matches one of the entries in)
+-.25 F F1(FIGNORE)2.705 E F0 .205(is e)2.455 F .205
+(xcluded from the list)-.15 F(of matched \214lenames.)144 528 Q 2.5(As)5
+G(ample v)-2.5 E(alue is)-.25 E F3(".o:~")2.5 E F0(.)A F2(FUNCNEST)108
+540 Q F0 .231(If set to a numeric v)144 552 R .231
+(alue greater than 0, de\214nes a maximum function nesting le)-.25 F
+-.15(ve)-.25 G 2.73(l. Function).15 F(in)2.73 E -.2(vo)-.4 G(-).2 E
+(cations that e)144 564 Q(xceed this nesting le)-.15 E -.15(ve)-.25 G
+2.5(lw).15 G(ill cause the current command to abort.)-2.5 E F2
+(GLOBIGNORE)108 576 Q F0 2.923(Ac)144 588 S .423(olon-separated list of\
+ patterns de\214ning the set of \214le names to be ignored by pathname \
+e)-2.923 F(xpan-)-.15 E 2.948(sion. If)144 600 R 2.948<618c>2.948 G .448
+(le name matched by a pathname e)-2.948 F .447
+(xpansion pattern also matches one of the patterns in)-.15 F F1
+(GLOBIGNORE)144 612 Q F4(,)A F0(it is remo)2.25 E -.15(ve)-.15 G 2.5(df)
+.15 G(rom the list of matches.)-2.5 E F2(HISTCONTR)108 624 Q(OL)-.3 E F0
+2.653(Ac)144 636 S .153(olon-separated list of v)-2.653 F .153
+(alues controlling ho)-.25 F 2.653(wc)-.25 G .153(ommands are sa)-2.653
+F -.15(ve)-.2 G 2.653(do).15 G 2.653(nt)-2.653 G .153(he history list.)
+-2.653 F .154(If the list)5.153 F .491(of v)144 648 R .491
+(alues includes)-.25 F F5(ignor)2.991 E(espace)-.37 E F0 2.991(,l).18 G
+.491(ines which be)-2.991 F .491(gin with a)-.15 F F2(space)2.991 E F0
+.49(character are not sa)2.991 F -.15(ve)-.2 G 2.99(di).15 G 2.99(nt)
+-2.99 G .49(he his-)-2.99 F .557(tory list.)144 660 R 3.057(Av)5.557 G
+.557(alue of)-3.307 F F5(ignor)3.067 E(edups)-.37 E F0 .557
+(causes lines matching the pre)3.327 F .558
+(vious history entry to not be sa)-.25 F -.15(ve)-.2 G(d.).15 E 2.926
+(Av)144 672 S .426(alue of)-3.176 F F5(ignor)2.936 E(eboth)-.37 E F0
+.426(is shorthand for)3.206 F F5(ignor)2.926 E(espace)-.37 E F0(and)
+2.926 E F5(ignor)2.926 E(edups)-.37 E F0 5.426(.A)C -.25(va)-2.501 G
+.425(lue of).25 F F5(er)3.115 E(asedups)-.15 E F0(causes)3.195 E .698
+(all pre)144 684 R .698
+(vious lines matching the current line to be remo)-.25 F -.15(ve)-.15 G
+3.198(df).15 G .699(rom the history list before that line is)-3.198 F
+(sa)144 696 Q -.15(ve)-.2 G 2.764(d. An).15 F 2.764(yv)-.15 G .264
+(alue not in the abo)-3.014 F .563 -.15(ve l)-.15 H .263
+(ist is ignored.).15 F(If)5.263 E F1(HISTCONTR)2.763 E(OL)-.27 E F0 .263
+(is unset, or does not include)2.513 F 2.941(av)144 708 S .441(alid v)
+-3.191 F .441(alue, all lines read by the shell parser are sa)-.25 F
+-.15(ve)-.2 G 2.942(do).15 G 2.942(nt)-2.942 G .442
+(he history list, subject to the v)-2.942 F .442(alue of)-.25 F F1
+(HISTIGNORE)144 720 Q F4(.)A F0 1.981(The second and subsequent lines o\
+f a multi-line compound command are not)6.482 F(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(15)188.455 E 0 Cg EP
+%%Page: 16 16
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E
+(tested, and are added to the history re)144 84 Q -.05(ga)-.15 G
+(rdless of the v).05 E(alue of)-.25 E/F1 9/Times-Bold@0 SF(HISTCONTR)2.5
+E(OL)-.27 E/F2 9/Times-Roman@0 SF(.)A/F3 10/Times-Bold@0 SF(HISTFILE)108
+96 Q F0 .181(The name of the \214le in which command history is sa)144
+108 R -.15(ve)-.2 G 2.681(d\().15 G(see)-2.681 E F1(HIST)2.681 E(OR)
+-.162 E(Y)-.315 E F0(belo)2.431 E 2.682(w\). The)-.25 F(def)2.682 E .182
+(ault v)-.1 F(alue)-.25 E(is)144 120 Q/F4 10/Times-Italic@0 SF
+(~/.bash_history)2.5 E F0 5(.I)C 2.5(fu)-5 G
+(nset, the command history is not sa)-2.5 E -.15(ve)-.2 G 2.5(dw).15 G
+(hen a shell e)-2.5 E(xits.)-.15 E F3(HISTFILESIZE)108 132 Q F0 1.623
+(The maximum number of lines contained in the history \214le.)144 144 R
+1.622(When this v)6.623 F 1.622(ariable is assigned a)-.25 F -.25(va)144
+156 S .931(lue, the history \214le is truncated, if necessary).25 F
+3.432(,t)-.65 G 3.432(oc)-3.432 G .932
+(ontain no more than that number of lines by)-3.432 F(remo)144 168 Q
+.871(ving the oldest entries.)-.15 F .87(The history \214le is also tru\
+ncated to this size after writing it when a)5.871 F 1.244(shell e)144
+180 R 3.744(xits. If)-.15 F 1.244(the v)3.744 F 1.244
+(alue is 0, the history \214le is truncated to zero size.)-.25 F 1.245
+(Non-numeric v)6.244 F 1.245(alues and)-.25 F 1.022(numeric v)144 192 R
+1.022(alues less than zero inhibit truncation.)-.25 F 1.022
+(The shell sets the def)6.022 F 1.022(ault v)-.1 F 1.022(alue to the v)
+-.25 F 1.021(alue of)-.25 F F3(HISTSIZE)144 204 Q F0(after reading an)
+2.5 E 2.5(ys)-.15 G(tartup \214les.)-2.5 E F3(HISTIGNORE)108 216 Q F0
+2.657(Ac)144 228 S .157(olon-separated list of patterns used to decide \
+which command lines should be sa)-2.657 F -.15(ve)-.2 G 2.658(do).15 G
+2.658(nt)-2.658 G .158(he his-)-2.658 F .708(tory list.)144 240 R .708
+(Each pattern is anchored at the be)5.708 F .707
+(ginning of the line and must match the complete line)-.15 F .625
+(\(no implicit `)144 252 R F3(*)A F0 3.125('i)C 3.125(sa)-3.125 G 3.125
+(ppended\). Each)-3.125 F .626(pattern is tested ag)3.125 F .626
+(ainst the line after the checks speci\214ed by)-.05 F F1(HISTCONTR)144
+264 Q(OL)-.27 E F0 1.793(are applied.)4.043 F 1.793
+(In addition to the normal shell pattern matching characters, `)6.793 F
+F3(&)A F0(')A 2.514(matches the pre)144 276 R 2.514(vious history line.)
+-.25 F(`)7.514 E F3(&)A F0 5.014('m)C 2.514
+(ay be escaped using a backslash; the backslash is)-5.014 F(remo)144 288
+Q -.15(ve)-.15 G 3.353(db).15 G .853(efore attempting a match.)-3.353 F
+.852(The second and subsequent lines of a multi-line compound)5.852 F
+1.269(command are not tested, and are added to the history re)144 300 R
+-.05(ga)-.15 G 1.269(rdless of the v).05 F 1.269(alue of)-.25 F F1
+(HISTIGNORE)3.77 E F2(.)A F0
+(The pattern matching honors the setting of the)144 312 Q F3(extglob)2.5
+E F0(shell option.)2.5 E F3(HISTSIZE)108 324 Q F0 1.387
+(The number of commands to remember in the command history \(see)144 336
+R F1(HIST)3.887 E(OR)-.162 E(Y)-.315 E F0(belo)3.637 E 3.887(w\). If)
+-.25 F(the)3.887 E -.25(va)144 348 S 1.32(lue is 0, commands are not sa)
+.25 F -.15(ve)-.2 G 3.82(di).15 G 3.821(nt)-3.82 G 1.321
+(he history list.)-3.821 F 1.321(Numeric v)6.321 F 1.321
+(alues less than zero result in)-.25 F -2.15 -.25(ev e)144 360 T .437
+(ry command being sa).25 F -.15(ve)-.2 G 2.937(do).15 G 2.937(nt)-2.937
+G .437(he history list \(there is no limit\).)-2.937 F .436
+(The shell sets the def)5.436 F .436(ault v)-.1 F(alue)-.25 E
+(to 500 after reading an)144 372 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E
+F3(HISTTIMEFORMA)108 384 Q(T)-.95 E F0 .951(If this v)144 396 R .951
+(ariable is set and not null, its v)-.25 F .952
+(alue is used as a format string for)-.25 F F4(strftime)3.452 E F0 .952
+(\(3\) to print the)B .673
+(time stamp associated with each history entry displayed by the)144 408
+R F3(history)3.173 E F0 -.2(bu)3.172 G 3.172(iltin. If).2 F .672(this v)
+3.172 F .672(ariable is)-.25 F .144
+(set, time stamps are written to the history \214le so the)144 420 R
+2.644(ym)-.15 G .144(ay be preserv)-2.644 F .144
+(ed across shell sessions.)-.15 F(This)5.145 E(uses the history comment\
+ character to distinguish timestamps from other history lines.)144 432 Q
+F3(HOME)108 444 Q F0 1.27
+(The home directory of the current user; the def)144 456 R 1.27(ault ar)
+-.1 F 1.27(gument for the)-.18 F F3(cd)3.77 E F0 -.2(bu)3.77 G 1.27
+(iltin command.).2 F(The)6.27 E -.25(va)144 468 S(lue of this v).25 E
+(ariable is also used when performing tilde e)-.25 E(xpansion.)-.15 E F3
+(HOSTFILE)108 480 Q F0 1.015
+(Contains the name of a \214le in the same format as)144 492 R F4
+(/etc/hosts)5.181 E F0 1.015(that should be read when the shell)5.181 F
+.551(needs to complete a hostname.)144 504 R .551
+(The list of possible hostname completions may be changed while)5.551 F
+1.058(the shell is running; the ne)144 516 R 1.059
+(xt time hostname completion is attempted after the v)-.15 F 1.059
+(alue is changed,)-.25 F F3(bash)144 528 Q F0 .138
+(adds the contents of the ne)2.639 F 2.638<778c>-.25 G .138(le to the e)
+-2.638 F .138(xisting list.)-.15 F(If)5.138 E F1(HOSTFILE)2.638 E F0
+.138(is set, b)2.388 F .138(ut has no v)-.2 F .138(alue, or)-.25 F .517
+(does not name a readable \214le,)144 540 R F3(bash)3.017 E F0 .517
+(attempts to read)3.017 F F4(/etc/hosts)4.684 E F0 .518
+(to obtain the list of possible host-)4.684 F(name completions.)144 552
+Q(When)5 E F1(HOSTFILE)2.5 E F0(is unset, the hostname list is cleared.)
+2.25 E F3(IFS)108 564 Q F0(The)144 564 Q F4 .556(Internal F)3.636 F .556
+(ield Separ)-.45 F(ator)-.15 E F0 .556(that is used for w)3.786 F .556
+(ord splitting after e)-.1 F .555(xpansion and to split lines into)-.15
+F -.1(wo)144 576 S(rds with the).1 E F3 -.18(re)2.5 G(ad).18 E F0 -.2
+(bu)2.5 G(iltin command.).2 E(The def)5 E(ault v)-.1 E(alue is `)-.25 E
+(`<space><tab><ne)-.74 E(wline>')-.25 E('.)-.74 E F3(IGNOREEOF)108 588 Q
+F0 .503(Controls the action of an interacti)144 600 R .803 -.15(ve s)
+-.25 H .503(hell on receipt of an).15 F F1(EOF)3.003 E F0 .503
+(character as the sole input.)2.753 F .504(If set,)5.504 F .426(the v)
+144 612 R .426(alue is the number of consecuti)-.25 F -.15(ve)-.25 G F1
+(EOF)3.076 E F0 .426
+(characters which must be typed as the \214rst characters)2.676 F .302
+(on an input line before)144 624 R F3(bash)2.802 E F0 -.15(ex)2.802 G
+2.802(its. If).15 F .302(the v)2.802 F .302(ariable e)-.25 F .302
+(xists b)-.15 F .302(ut does not ha)-.2 F .602 -.15(ve a n)-.2 H .302
+(umeric v).15 F .303(alue, or has)-.25 F(no v)144 636 Q(alue, the def)
+-.25 E(ault v)-.1 E(alue is 10.)-.25 E(If it does not e)5 E(xist,)-.15 E
+F1(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F3
+(INPUTRC)108 648 Q F0 1.436(The \214lename for the)144 660 R F3 -.18(re)
+3.936 G(adline).18 E F0 1.436(startup \214le, o)3.936 F -.15(ve)-.15 G
+1.436(rriding the def).15 F 1.436(ault of)-.1 F F4(~/.inputr)5.602 E(c)
+-.37 E F0(\(see)5.601 E F1(READLINE)3.935 E F0(belo)144 672 Q(w\).)-.25
+E F3(INSIDE_EMA)108 684 Q(CS)-.55 E F0 .886(If this v)144 696 R .886
+(ariable appears in the en)-.25 F .886(vironment when the shell starts,)
+-.4 F F3(bash)3.386 E F0 .887(assumes that it is running)3.386 F
+(inside an Emacs shell b)144 708 Q(uf)-.2 E
+(fer and may disable line editing, depending on the v)-.25 E(alue of)
+-.25 E F3(TERM)2.5 E F0(.)A(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(16)188.455 E 0 Cg EP
+%%Page: 17 17
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(LANG)108 84 Q F0 1.24(Used to determine the locale cate)144 84 R
+1.239(gory for an)-.15 F 3.739(yc)-.15 G(ate)-3.739 E 1.239
+(gory not speci\214cally selected with a v)-.15 F(ariable)-.25 E
+(starting with)144 96 Q F1(LC_)2.5 E F0(.)A F1(LC_ALL)108 108 Q F0 .973
+(This v)144 120 R .973(ariable o)-.25 F -.15(ve)-.15 G .973
+(rrides the v).15 F .973(alue of)-.25 F/F2 9/Times-Bold@0 SF(LANG)3.473
+E F0 .973(and an)3.223 F 3.473(yo)-.15 G(ther)-3.473 E F1(LC_)3.473 E F0
+-.25(va)3.473 G .974(riable specifying a locale cate-).25 F(gory)144 132
+Q(.)-.65 E F1(LC_COLLA)108 144 Q(TE)-.95 E F0 .412(This v)144 156 R .412
+(ariable determines the collation order used when sorting the results o\
+f pathname e)-.25 F(xpansion,)-.15 E 1.464(and determines the beha)144
+168 R 1.464(vior of range e)-.2 F 1.465(xpressions, equi)-.15 F -.25(va)
+-.25 G 1.465(lence classes, and collating sequences).25 F
+(within pathname e)144 180 Q(xpansion and pattern matching.)-.15 E F1
+(LC_CTYPE)108 192 Q F0 1.936(This v)144 204 R 1.936
+(ariable determines the interpretation of characters and the beha)-.25 F
+1.935(vior of character classes)-.2 F(within pathname e)144 216 Q
+(xpansion and pattern matching.)-.15 E F1(LC_MESSA)108 228 Q(GES)-.55 E
+F0(This v)144 240 Q(ariable determines the locale used to translate dou\
+ble-quoted strings preceded by a)-.25 E F1($)2.5 E F0(.)A F1(LC_NUMERIC)
+108 252 Q F0(This v)144 264 Q(ariable determines the locale cate)-.25 E
+(gory used for number formatting.)-.15 E F1(LC_TIME)108 276 Q F0(This v)
+144 288 Q(ariable determines the locale cate)-.25 E
+(gory used for data and time formatting.)-.15 E F1(LINES)108 300 Q F0
+.054(Used by the)144 300 R F1(select)2.554 E F0 .054(compound command t\
+o determine the column length for printing selection lists.)2.554 F .265
+(Automatically set if the)144 312 R F1(checkwinsize)2.765 E F0 .264
+(option is enabled or in an interacti)2.765 F .564 -.15(ve s)-.25 H .264
+(hell upon receipt of a).15 F F2(SIGWINCH)144 324 Q/F3 9/Times-Roman@0
+SF(.)A F1(MAIL)108 336 Q F0 1.201
+(If this parameter is set to a \214le or directory name and the)144 336
+R F2(MAILP)3.701 E -.855(AT)-.666 G(H).855 E F0 -.25(va)3.451 G 1.202
+(riable is not set,).25 F F1(bash)3.702 E F0
+(informs the user of the arri)144 348 Q -.25(va)-.25 G 2.5(lo).25 G 2.5
+(fm)-2.5 G(ail in the speci\214ed \214le or Maildir)-2.5 E
+(-format directory)-.2 E(.)-.65 E F1(MAILCHECK)108 360 Q F0 .099
+(Speci\214es ho)144 372 R 2.599(wo)-.25 G .099(ften \(in seconds\))
+-2.599 F F1(bash)2.598 E F0 .098(checks for mail.)2.598 F .098(The def)
+5.098 F .098(ault is 60 seconds.)-.1 F .098(When it is time)5.098 F .223
+(to check for mail, the shell does so before displaying the primary pro\
+mpt.)144 384 R .224(If this v)5.224 F .224(ariable is unset,)-.25 F
+(or set to a v)144 396 Q(alue that is not a number greater than or equa\
+l to zero, the shell disables mail checking.)-.25 E F1(MAILP)108 408 Q
+-.95(AT)-.74 G(H).95 E F0 2.99(Ac)144 420 S .49
+(olon-separated list of \214lenames to be check)-2.99 F .49
+(ed for mail.)-.1 F .49(The message to be printed when mail)5.49 F(arri)
+144 432 Q -.15(ve)-.25 G 2.62(si).15 G 2.62(nap)-2.62 G .12(articular \
+\214le may be speci\214ed by separating the \214lename from the message\
+ with a `?'.)-2.62 F(When used in the te)144 444 Q(xt of the message,)
+-.15 E F1($_)2.5 E F0 -.15(ex)2.5 G
+(pands to the name of the current mail\214le.).15 E(Example:)5 E F1
+(MAILP)144 456 Q -.95(AT)-.74 G(H).95 E F0(=\010/v)A(ar/mail/bfox?"Y)
+-.25 E(ou ha)-1.1 E .3 -.15(ve m)-.2 H
+(ail":~/shell\255mail?"$_ has mail!"\010).15 E F1(Bash)144 468 Q F0 .015
+(can be con\214gured to supply a def)2.515 F .015(ault v)-.1 F .015
+(alue for this v)-.25 F .015(ariable \(there is no v)-.25 F .015
+(alue by def)-.25 F .015(ault\), b)-.1 F(ut)-.2 E(the location of the u\
+ser mail \214les that it uses is system dependent \(e.g., /v)144 480 Q
+(ar/mail/)-.25 E F1($USER)A F0(\).)A F1(OPTERR)108 492 Q F0 .389
+(If set to the v)144 504 R .389(alue 1,)-.25 F F1(bash)2.889 E F0 .389
+(displays error messages generated by the)2.889 F F1(getopts)2.89 E F0
+-.2(bu)2.89 G .39(iltin command \(see).2 F F2 .36(SHELL B)144 516 R(UIL)
+-.09 E .36(TIN COMMANDS)-.828 F F0(belo)2.61 E(w\).)-.25 E F2(OPTERR)
+5.36 E F0 .359(is initialized to 1 each time the shell is in)2.61 F -.2
+(vo)-.4 G -.1(ke).2 G(d).1 E(or a shell script is e)144 528 Q -.15(xe)
+-.15 G(cuted.).15 E F1 -.74(PA)108 540 S(TH)-.21 E F0 .587
+(The search path for commands.)144 540 R .588
+(It is a colon-separated list of directories in which the shell looks)
+5.587 F .472(for commands \(see)144 552 R F2 .472(COMMAND EXECUTION)
+2.972 F F0(belo)2.722 E 2.972(w\). A)-.25 F .471
+(zero-length \(null\) directory name in the)2.972 F -.25(va)144 564 S
+.535(lue of).25 F F2 -.666(PA)3.035 G(TH)-.189 E F0 .535
+(indicates the current directory)2.785 F 5.535(.A)-.65 G .535
+(null directory name may appear as tw)-2.5 F 3.036(oa)-.1 G(djacent)
+-3.036 E .868(colons, or as an initial or trailing colon.)144 576 R .868
+(The def)5.868 F .867(ault path is system-dependent, and is set by the)
+-.1 F(administrator who installs)144 588 Q F1(bash)2.5 E F0 5(.A)C
+(common v)-2.5 E(alue is)-.25 E/F4 10/Courier@0 SF
+(/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)144 600 Q
+F0(.)A F1(POSIXL)108 612 Q(Y_CORRECT)-.92 E F0 .472(If this v)144 624 R
+.472(ariable is in the en)-.25 F .471(vironment when)-.4 F F1(bash)2.971
+E F0 .471(starts, the shell enters)2.971 F/F5 10/Times-Italic@0 SF .471
+(posix mode)2.971 F F0 .471(before reading)2.971 F .011
+(the startup \214les, as if the)144 636 R F1(\255\255posix)2.511 E F0
+(in)2.511 E -.2(vo)-.4 G .011(cation option had been supplied.).2 F .011
+(If it is set while the shell is)5.011 F(running,)144 648 Q F1(bash)
+4.498 E F0(enables)4.498 E F5 1.997(posix mode)4.497 F F0 4.497(,a)C
+4.497(si)-4.497 G 4.497(ft)-4.497 G 1.997(he command)-4.497 F F4 1.997
+(set -o posix)4.497 F F0 1.997(had been e)4.497 F -.15(xe)-.15 G(cuted.)
+.15 E(When the shell enters)144 660 Q F5(posix mode)2.5 E F0 2.5(,i)C
+2.5(ts)-2.5 G(ets this v)-2.5 E(ariable if it w)-.25 E
+(as not already set.)-.1 E F1(PR)108 672 Q(OMPT_COMMAND)-.3 E F0
+(If set, the v)144 684 Q(alue is e)-.25 E -.15(xe)-.15 G
+(cuted as a command prior to issuing each primary prompt.).15 E F1(PR)
+108 696 Q(OMPT_DIR)-.3 E(TRIM)-.4 E F0 .676
+(If set to a number greater than zero, the v)144 708 R .676
+(alue is used as the number of trailing directory compo-)-.25 F .923
+(nents to retain when e)144 720 R .923(xpanding the)-.15 F F1(\\w)3.423
+E F0(and)3.423 E F1(\\W)3.423 E F0 .923(prompt string escapes \(see)
+3.423 F F2(PR)3.423 E(OMPTING)-.27 E F0(belo)3.173 E(w\).)-.25 E
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(17)188.455 E 0 Cg EP
+%%Page: 18 18
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(Characters remo)
+144 84 Q -.15(ve)-.15 G 2.5(da).15 G(re replaced with an ellipsis.)-2.5
+E/F1 10/Times-Bold@0 SF(PS0)108 96 Q F0 1.174(The v)144 96 R 1.174
+(alue of this parameter is e)-.25 F 1.174(xpanded \(see)-.15 F/F2 9
+/Times-Bold@0 SF(PR)3.674 E(OMPTING)-.27 E F0(belo)3.424 E 1.174
+(w\) and displayed by interacti)-.25 F -.15(ve)-.25 G
+(shells after reading a command and before the command is e)144 108 Q
+-.15(xe)-.15 G(cuted.).15 E F1(PS1)108 120 Q F0 .065(The v)144 120 R
+.065(alue of this parameter is e)-.25 F .065(xpanded \(see)-.15 F F2(PR)
+2.565 E(OMPTING)-.27 E F0(belo)2.315 E .065
+(w\) and used as the primary prompt)-.25 F 2.5(string. The)144 132 R
+(def)2.5 E(ault v)-.1 E(alue is `)-.25 E(`)-.74 E F1(\\s\255\\v\\$)A F0
+-.74('')2.5 G(.).74 E F1(PS2)108 144 Q F0 .117(The v)144 144 R .117
+(alue of this parameter is e)-.25 F .117(xpanded as with)-.15 F F2(PS1)
+2.617 E F0 .118(and used as the secondary prompt string.)2.368 F(The)
+5.118 E(def)144 156 Q(ault is `)-.1 E(`)-.74 E F1(>)A F0 -.74('')2.5 G
+(.).74 E F1(PS3)108 168 Q F0 1.116(The v)144 168 R 1.115
+(alue of this parameter is used as the prompt for the)-.25 F F1(select)
+3.615 E F0 1.115(command \(see)3.615 F F2 1.115(SHELL GRAM-)3.615 F(MAR)
+144 180 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E F1(PS4)108 192 Q F0 .1
+(The v)144 192 R .1(alue of this parameter is e)-.25 F .1
+(xpanded as with)-.15 F F2(PS1)2.6 E F0 .101(and the v)2.35 F .101
+(alue is printed before each command)-.25 F F1(bash)144 204 Q F0 .335
+(displays during an e)2.835 F -.15(xe)-.15 G .335(cution trace.).15 F
+.335(The \214rst character of the e)5.335 F .335(xpanded v)-.15 F .335
+(alue of)-.25 F F2(PS4)2.834 E F0 .334(is repli-)2.584 F
+(cated multiple times, as necessary)144 216 Q 2.5(,t)-.65 G 2.5(oi)-2.5
+G(ndicate multiple le)-2.5 E -.15(ve)-.25 G(ls of indirection.).15 E
+(The def)5 E(ault is `)-.1 E(`)-.74 E F1(+)A F0 -.74('')2.5 G(.).74 E F1
+(SHELL)108 228 Q F0 .663(The full pathname to the shell is k)144 240 R
+.664(ept in this en)-.1 F .664(vironment v)-.4 F 3.164(ariable. If)-.25
+F .664(it is not set when the shell)3.164 F(starts,)144 252 Q F1(bash)
+2.5 E F0(assigns to it the full pathname of the current user')2.5 E 2.5
+(sl)-.55 G(ogin shell.)-2.5 E F1(TIMEFORMA)108 264 Q(T)-.95 E F0 .827
+(The v)144 276 R .826
+(alue of this parameter is used as a format string specifying ho)-.25 F
+3.326(wt)-.25 G .826(he timing information for)-3.326 F .648
+(pipelines pre\214x)144 288 R .648(ed with the)-.15 F F1(time)3.148 E F0
+(reserv)3.148 E .648(ed w)-.15 F .649(ord should be displayed.)-.1 F
+(The)5.649 E F1(%)3.149 E F0 .649(character introduces)3.149 F .712
+(an escape sequence that is e)144 300 R .711(xpanded to a time v)-.15 F
+.711(alue or other information.)-.25 F .711(The escape sequences)5.711 F
+(and their meanings are as follo)144 312 Q
+(ws; the braces denote optional portions.)-.25 E F1(%%)144 330 Q F0 2.5
+(Al)194 330 S(iteral)-2.5 E F1(%)2.5 E F0(.)A F1(%[)144 342 Q/F3 10
+/Times-Italic@0 SF(p)A F1(][l]R)A F0(The elapsed time in seconds.)194
+342 Q F1(%[)144 354 Q F3(p)A F1(][l]U)A F0
+(The number of CPU seconds spent in user mode.)194 354 Q F1(%[)144 366 Q
+F3(p)A F1(][l]S)A F0(The number of CPU seconds spent in system mode.)194
+366 Q F1(%P)144 378 Q F0
+(The CPU percentage, computed as \(%U + %S\) / %R.)194 378 Q .87
+(The optional)144 394.8 R F3(p)3.37 E F0 .87(is a digit specifying the)
+3.37 F F3(pr)3.37 E(ecision)-.37 E F0 3.37(,t)C .87
+(he number of fractional digits after a decimal)-3.37 F 2.526(point. A)
+144 406.8 R -.25(va)2.526 G .025
+(lue of 0 causes no decimal point or fraction to be output.).25 F .025
+(At most three places after the)5.025 F .537
+(decimal point may be speci\214ed; v)144 418.8 R .537(alues of)-.25 F F3
+(p)3.037 E F0 .537(greater than 3 are changed to 3.)3.037 F(If)5.538 E
+F3(p)3.038 E F0 .538(is not speci\214ed,)3.038 F(the v)144 430.8 Q
+(alue 3 is used.)-.25 E .668(The optional)144 447.6 R F1(l)3.168 E F0
+.668(speci\214es a longer format, including minutes, of the form)3.168 F
+F3(MM)3.168 E F0(m)A F3(SS)A F0(.)A F3(FF)A F0 3.167(s. The)B -.25(va)
+3.167 G(lue).25 E(of)144 459.6 Q F3(p)2.5 E F0
+(determines whether or not the fraction is included.)2.5 E 13.364
+(If this v)144 476.4 R 13.364(ariable is not set,)-.25 F F1(bash)15.865
+E F0 13.365(acts as if it had the v)15.865 F(alue)-.25 E F1($\010\\nr)
+144 488.4 Q(eal\\t%3lR\\nuser\\t%3lU\\nsys\\t%3lS\010)-.18 E F0 7.113
+(.I)C 4.613(ft)-7.113 G 2.113(he v)-4.613 F 2.113
+(alue is null, no timing information is dis-)-.25 F 2.5(played. A)144
+500.4 R(trailing ne)2.5 E
+(wline is added when the format string is displayed.)-.25 E F1(TMOUT)108
+512.4 Q F0 .941(If set to a v)144 524.4 R .941(alue greater than zero,)
+-.25 F F2(TMOUT)3.441 E F0 .941(is treated as the def)3.191 F .941
+(ault timeout for the)-.1 F F1 -.18(re)3.441 G(ad).18 E F0 -.2(bu)3.441
+G(iltin.).2 E(The)144 536.4 Q F1(select)2.811 E F0 .311
+(command terminates if input does not arri)2.811 F .61 -.15(ve a)-.25 H
+(fter).15 E F2(TMOUT)2.81 E F0 .31(seconds when input is com-)2.56 F
+.885(ing from a terminal.)144 548.4 R .885(In an interacti)5.885 F 1.185
+-.15(ve s)-.25 H .885(hell, the v).15 F .886
+(alue is interpreted as the number of seconds to)-.25 F -.1(wa)144 560.4
+S 1.05(it for a line of input after issuing the primary prompt.).1 F F1
+(Bash)6.05 E F0 1.05(terminates after w)3.55 F 1.05(aiting for that)-.1
+F(number of seconds if a complete line of input does not arri)144 572.4
+Q -.15(ve)-.25 G(.).15 E F1(TMPDIR)108 584.4 Q F0 .39(If set,)144 596.4
+R F1(bash)2.89 E F0 .39(uses its v)2.89 F .39
+(alue as the name of a directory in which)-.25 F F1(bash)2.891 E F0 .391
+(creates temporary \214les for the)2.891 F(shell')144 608.4 Q 2.5(su)
+-.55 G(se.)-2.5 E F1(auto_r)108 620.4 Q(esume)-.18 E F0 .531(This v)144
+632.4 R .531(ariable controls ho)-.25 F 3.031(wt)-.25 G .531
+(he shell interacts with the user and job control.)-3.031 F .53
+(If this v)5.53 F .53(ariable is set,)-.25 F .538(single w)144 644.4 R
+.538(ord simple commands without redirections are treated as candidates\
+ for resumption of an)-.1 F -.15(ex)144 656.4 S .367(isting stopped job)
+.15 F 5.367(.T)-.4 G .366(here is no ambiguity allo)-5.367 F .366
+(wed; if there is more than one job be)-.25 F .366(ginning with)-.15 F
+1.124(the string typed, the job most recently accessed is selected.)144
+668.4 R(The)6.125 E F3(name)3.985 E F0 1.125(of a stopped job, in this)
+3.805 F(conte)144 680.4 Q 1.133
+(xt, is the command line used to start it.)-.15 F 1.133(If set to the v)
+6.133 F(alue)-.25 E F3 -.2(ex)3.633 G(act).2 E F0 3.632(,t).68 G 1.132
+(he string supplied must)-3.632 F .624
+(match the name of a stopped job e)144 692.4 R .624(xactly; if set to)
+-.15 F F3(substring)3.125 E F0 3.125(,t).22 G .625
+(he string supplied needs to match a)-3.125 F .885
+(substring of the name of a stopped job)144 704.4 R 5.884(.T)-.4 G(he)
+-5.884 E F3(substring)3.724 E F0 -.25(va)3.604 G .884(lue pro).25 F .884
+(vides functionality analogous to)-.15 F(the)144 716.4 Q F1(%?)3.333 E
+F0 .833(job identi\214er \(see)5.833 F F2 .834(JOB CONTR)3.334 F(OL)-.27
+E F0(belo)3.084 E 3.334(w\). If)-.25 F .834(set to an)3.334 F 3.334(yo)
+-.15 G .834(ther v)-3.334 F .834(alue, the supplied string)-.25 F .316
+(must be a pre\214x of a stopped job')144 728.4 R 2.816(sn)-.55 G .316
+(ame; this pro)-2.816 F .315(vides functionality analogous to the)-.15 F
+F1(%)2.815 E F3(string)A F0(job)2.815 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(18)188.455 E 0 Cg EP
+%%Page: 19 19
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(identi\214er)144
+84 Q(.)-.55 E/F1 10/Times-Bold@0 SF(histchars)108 96 Q F0 2.069(The tw)
+144 108 R 4.57(oo)-.1 G 4.57(rt)-4.57 G 2.07
+(hree characters which control history e)-4.57 F 2.07(xpansion and tok)
+-.15 F 2.07(enization \(see)-.1 F/F2 9/Times-Bold@0 SF(HIST)4.57 E(OR)
+-.162 E(Y)-.315 E(EXP)144 120 Q(ANSION)-.666 E F0(belo)3.466 E 3.716
+(w\). The)-.25 F 1.216(\214rst character is the)3.716 F/F3 10
+/Times-Italic@0 SF 1.215(history e)3.715 F(xpansion)-.2 E F0(character)
+3.715 E 3.715(,t)-.4 G 1.215(he character which)-3.715 F .798
+(signals the start of a history e)144 132 R .798(xpansion, normally `)
+-.15 F F1(!)A F0 3.298('. The)B .798(second character is the)3.298 F F3
+(quic)3.298 E 3.298(ks)-.2 G(ubstitu-)-3.298 E(tion)144 144 Q F0
+(character)2.74 E 2.74(,w)-.4 G .239
+(hich is used as shorthand for re-running the pre)-2.74 F .239
+(vious command entered, substitut-)-.25 F .575
+(ing one string for another in the command.)144 156 R .575(The def)5.575
+F .575(ault is `)-.1 F F1(^)A F0 3.075('. The)B .576
+(optional third character is the)3.076 F .223(character which indicates\
+ that the remainder of the line is a comment when found as the \214rst \
+char)144 168 R(-)-.2 E 1.293(acter of a w)144 180 R 1.293
+(ord, normally `)-.1 F F1(#)A F0 3.793('. The)B 1.294
+(history comment character causes history substitution to be)3.794 F .38
+(skipped for the remaining w)144 192 R .38(ords on the line.)-.1 F .379
+(It does not necessarily cause the shell parser to treat)5.379 F
+(the rest of the line as a comment.)144 204 Q F1(Arrays)87 220.8 Q(Bash)
+108 232.8 Q F0(pro)3.39 E .89(vides one-dimensional inde)-.15 F -.15(xe)
+-.15 G 3.39(da).15 G .891(nd associati)-3.39 F 1.191 -.15(ve a)-.25 H
+.891(rray v).15 F 3.391(ariables. An)-.25 F 3.391(yv)-.15 G .891
+(ariable may be used as an)-3.641 F(inde)108 244.8 Q -.15(xe)-.15 G
+2.574(da).15 G .074(rray; the)-2.574 F F1(declar)2.574 E(e)-.18 E F0 -.2
+(bu)2.574 G .074(iltin will e).2 F .073(xplicitly declare an array)-.15
+F 5.073(.T)-.65 G .073(here is no maximum limit on the size of)-5.073 F
+.328(an array)108 256.8 R 2.828(,n)-.65 G .328(or an)-2.828 F 2.828(yr)
+-.15 G .329(equirement that members be inde)-2.828 F -.15(xe)-.15 G
+2.829(do).15 G 2.829(ra)-2.829 G .329(ssigned contiguously)-2.829 F
+5.329(.I)-.65 G(nde)-5.329 E -.15(xe)-.15 G 2.829(da).15 G .329
+(rrays are refer)-2.829 F(-)-.2 E 1.595(enced using inte)108 268.8 R
+1.595(gers \(including arithmetic e)-.15 F 1.595
+(xpressions\) and are zero-based; associati)-.15 F 1.895 -.15(ve a)-.25
+H 1.595(rrays are refer).15 F(-)-.2 E(enced using arbitrary strings.)108
+280.8 Q(Unless otherwise noted, inde)5 E -.15(xe)-.15 G 2.5(da).15 G
+(rray indices must be non-ne)-2.5 E -.05(ga)-.15 G(ti).05 E .3 -.15
+(ve i)-.25 H(nte).15 E(gers.)-.15 E 2.462(An inde)108 297.6 R -.15(xe)
+-.15 G 4.962(da).15 G 2.462(rray is created automatically if an)-4.962 F
+4.963(yv)-.15 G 2.463(ariable is assigned to using the syntax)-5.213 F
+F3(name)4.963 E F0([)A F3(sub-)A(script)108 309.6 Q F0(]=)A F3(value)A
+F0 6.549(.T)C(he)-6.549 E F3(subscript)4.389 E F0 1.549
+(is treated as an arithmetic e)4.729 F 1.549(xpression that must e)-.15
+F -.25(va)-.25 G 1.548(luate to a number).25 F 6.548(.T)-.55 G(o)-7.348
+E -.15(ex)108 321.6 S 1.979(plicitly declare an inde).15 F -.15(xe)-.15
+G 4.479(da).15 G(rray)-4.479 E 4.48(,u)-.65 G(se)-4.48 E F1(declar)4.48
+E 4.48<65ad>-.18 G(a)-4.48 E F3(name)4.48 E F0(\(see)4.48 E F2 1.98
+(SHELL B)4.48 F(UIL)-.09 E 1.98(TIN COMMANDS)-.828 F F0(belo)4.23 E
+(w\).)-.25 E F1(declar)108 333.6 Q 2.5<65ad>-.18 G(a)-2.5 E F3(name)2.5
+E F1([)A F3(subscript)A F1(])A F0(is also accepted; the)2.5 E F3
+(subscript)2.5 E F0(is ignored.)2.5 E(Associati)108 350.4 Q .3 -.15
+(ve a)-.25 H(rrays are created using).15 E F1(declar)2.5 E 2.5<65ad>-.18
+G(A)-2.5 E F3(name)2.5 E F0(.)A(Attrib)108 367.2 Q .941
+(utes may be speci\214ed for an array v)-.2 F .941(ariable using the)
+-.25 F F1(declar)3.441 E(e)-.18 E F0(and)3.44 E F1 -.18(re)3.44 G
+(adonly).18 E F0 -.2(bu)3.44 G 3.44(iltins. Each).2 F(attrib)3.44 E(ute)
+-.2 E(applies to all members of an array)108 379.2 Q(.)-.65 E 1.647
+(Arrays are assigned to using compound assignments of the form)108 396 R
+F3(name)4.147 E F0(=)A F1(\()A F0 -.25(va)C(lue).25 E F3(1)A F0 1.647
+(... v)4.147 F(alue)-.25 E F3(n)A F1(\))A F0 4.148(,w)C 1.648(here each)
+-4.148 F F3(value)108 408 Q F0 1.833(is of the form [)4.333 F F3
+(subscript)A F0(]=)A F3(string)A F0 6.833(.I)C(nde)-6.833 E -.15(xe)-.15
+G 4.333(da).15 G 1.833(rray assignments do not require an)-4.333 F 1.832
+(ything b)-.15 F(ut)-.2 E F3(string)4.332 E F0(.)A .163
+(When assigning to inde)108 420 R -.15(xe)-.15 G 2.663(da).15 G .163
+(rrays, if the optional brack)-2.663 F .163
+(ets and subscript are supplied, that inde)-.1 F 2.664(xi)-.15 G 2.664
+(sa)-2.664 G(ssigned)-2.664 E 1.411(to; otherwise the inde)108 432 R
+3.911(xo)-.15 G 3.911(ft)-3.911 G 1.411
+(he element assigned is the last inde)-3.911 F 3.91(xa)-.15 G 1.41
+(ssigned to by the statement plus one.)-3.91 F(Inde)108 444 Q
+(xing starts at zero.)-.15 E(When assigning to an associati)108 460.8 Q
+.3 -.15(ve a)-.25 H(rray).15 E 2.5(,t)-.65 G(he subscript is required.)
+-2.5 E .239(This syntax is also accepted by the)108 477.6 R F1(declar)
+2.739 E(e)-.18 E F0 -.2(bu)2.739 G 2.739(iltin. Indi).2 F .24
+(vidual array elements may be assigned to using the)-.25 F F3(name)108
+489.6 Q F0([)A F3(subscript)A F0(]=)A F3(value)A F0 1.917
+(syntax introduced abo)4.417 F -.15(ve)-.15 G 6.917(.W).15 G 1.917
+(hen assigning to an inde)-6.917 F -.15(xe)-.15 G 4.417(da).15 G(rray)
+-4.417 E 4.417(,i)-.65 G(f)-4.417 E F3(name)4.777 E F0 1.916(is sub-)
+4.597 F .115(scripted by a ne)108 501.6 R -.05(ga)-.15 G(ti).05 E .415
+-.15(ve n)-.25 H(umber).15 E 2.615(,t)-.4 G .115
+(hat number is interpreted as relati)-2.615 F .415 -.15(ve t)-.25 H
+2.615(oo).15 G .116(ne greater than the maximum inde)-2.615 F(x)-.15 E
+(of)108 513.6 Q F3(name)3.338 E F0 3.338(,s)C 3.338(on)-3.338 G -2.25
+-.15(eg a)-3.338 H(ti).15 E 1.138 -.15(ve i)-.25 H .838
+(ndices count back from the end of the array).15 F 3.338(,a)-.65 G .838
+(nd an inde)-3.338 F 3.338(xo)-.15 G 3.338<66ad>-3.338 G 3.338(1r)-3.338
+G .838(eferences the last)-3.338 F(element.)108 525.6 Q(An)108 542.4 Q
+3.575(ye)-.15 G 1.075(lement of an array may be referenced using ${)
+-3.575 F F3(name)A F0([)A F3(subscript)A F0 3.575(]}. The)B 1.076
+(braces are required to a)3.576 F -.2(vo)-.2 G(id).2 E 1.542
+(con\215icts with pathname e)108 554.4 R 4.041(xpansion. If)-.15 F F3
+(subscript)4.041 E F0(is)4.041 E F1(@)4.041 E F0(or)4.041 E F1(*)4.041 E
+F0 4.041(,t)C 1.541(he w)-4.041 F 1.541(ord e)-.1 F 1.541
+(xpands to all members of)-.15 F F3(name)4.041 E F0(.)A 1.056
+(These subscripts dif)108 566.4 R 1.056(fer only when the w)-.25 F 1.057
+(ord appears within double quotes.)-.1 F 1.057(If the w)6.057 F 1.057
+(ord is double-quoted,)-.1 F(${)108 578.4 Q F3(name)A F0 .521([*]} e)B
+.521(xpands to a single w)-.15 F .521(ord with the v)-.1 F .52
+(alue of each array member separated by the \214rst character)-.25 F
+1.374(of the)108 590.4 R F2(IFS)3.874 E F0 1.374(special v)3.624 F 1.375
+(ariable, and ${)-.25 F F3(name)A F0 1.375([@]} e)B 1.375
+(xpands each element of)-.15 F F3(name)3.875 E F0 1.375(to a separate w)
+3.875 F 3.875(ord. When)-.1 F 2.028(there are no array members, ${)108
+602.4 R F3(name)A F0 2.028([@]} e)B 2.028(xpands to nothing.)-.15 F
+2.027(If the double-quoted e)7.028 F 2.027(xpansion occurs)-.15 F .758
+(within a w)108 614.4 R .759(ord, the e)-.1 F .759
+(xpansion of the \214rst parameter is joined with the be)-.15 F .759
+(ginning part of the original w)-.15 F(ord,)-.1 E .516(and the e)108
+626.4 R .516(xpansion of the last parameter is joined with the last par\
+t of the original w)-.15 F 3.015(ord. This)-.1 F .515(is analogous)3.015
+F .227(to the e)108 638.4 R .228(xpansion of the special parameters)-.15
+F F1(*)2.728 E F0(and)2.728 E F1(@)2.728 E F0(\(see)2.728 E F1 .228
+(Special P)2.728 F(arameters)-.1 E F0(abo)2.728 E -.15(ve)-.15 G 2.728
+(\). ${#).15 F F3(name)A F0([)A F3(subscript)A F0(]})A -.15(ex)108 650.4
+S .886(pands to the length of ${).15 F F3(name)A F0([)A F3(subscript)A
+F0 3.386(]}. If)B F3(subscript)3.386 E F0(is)3.386 E F1(*)3.386 E F0(or)
+3.386 E F1(@)3.386 E F0 3.386(,t)C .886(he e)-3.386 F .886
+(xpansion is the number of ele-)-.15 F .294(ments in the array)108 662.4
+R 5.294(.I)-.65 G 2.794(ft)-5.294 G(he)-2.794 E F3(subscript)3.135 E F0
+.295(used to reference an element of an inde)3.475 F -.15(xe)-.15 G
+2.795(da).15 G .295(rray e)-2.795 F -.25(va)-.25 G .295
+(luates to a number).25 F .629
+(less than zero, it is interpreted as relati)108 674.4 R .929 -.15(ve t)
+-.25 H 3.128(oo).15 G .628(ne greater than the maximum inde)-3.128 F
+3.128(xo)-.15 G 3.128(ft)-3.128 G .628(he array)-3.128 F 3.128(,s)-.65 G
+3.128(on)-3.128 G -2.25 -.15(eg a)-3.128 H(ti).15 E -.15(ve)-.25 G
+(indices count back from the end of the array)108 686.4 Q 2.5(,a)-.65 G
+(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G
+(eferences the last element.)-2.5 E .595(Referencing an array v)108
+703.2 R .595(ariable without a subscript is equi)-.25 F -.25(va)-.25 G
+.595(lent to referencing the array with a subscript of).25 F 2.5(0. An)
+108 715.2 R 2.5(yr)-.15 G(eference to a v)-2.5 E(ariable using a v)-.25
+E(alid subscript is le)-.25 E -.05(ga)-.15 G(l, and).05 E F1(bash)2.5 E
+F0(will create an array if necessary)2.5 E(.)-.65 E(GNU Bash 5.0)72 768
+Q(2018 December 7)139.295 E(19)188.455 E 0 Cg EP
+%%Page: 20 20
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(An array v)108 84
+Q(ariable is considered set if a subscript has been assigned a v)-.25 E
+2.5(alue. The)-.25 F(null string is a v)2.5 E(alid v)-.25 E(alue.)-.25 E
+.418(It is possible to obtain the k)108 100.8 R -.15(ey)-.1 G 2.918(s\()
+.15 G .418(indices\) of an array as well as the v)-2.918 F 2.917
+(alues. ${)-.25 F/F1 10/Times-Bold@0 SF(!)A/F2 10/Times-Italic@0 SF
+(name)A F0([)A F2(@)A F0 .417(]} and ${)B F1(!)A F2(name)A F0([)A F2(*)A
+F0(]})A -.15(ex)108 112.8 S .749
+(pand to the indices assigned in array v).15 F(ariable)-.25 E F2(name)
+3.249 E F0 5.749(.T)C .75
+(he treatment when in double quotes is similar to)-5.749 F(the e)108
+124.8 Q(xpansion of the special parameters)-.15 E F2(@)2.5 E F0(and)2.5
+E F2(*)2.5 E F0(within double quotes.)2.5 E(The)108 141.6 Q F1(unset)
+2.767 E F0 -.2(bu)2.767 G .267(iltin is used to destro).2 F 2.767(ya)-.1
+G(rrays.)-2.767 E F1(unset)5.267 E F2(name)2.767 E F0([)A F2(subscript)A
+F0 2.767(]d)C(estro)-2.767 E .267(ys the array element at inde)-.1 F(x)
+-.15 E F2(sub-)2.766 E(script)108 153.6 Q F0 3.974(,f)C 1.474
+(or both inde)-3.974 F -.15(xe)-.15 G 3.974(da).15 G 1.474(nd associati)
+-3.974 F 1.774 -.15(ve a)-.25 H 3.974(rrays. Ne).15 F -.05(ga)-.15 G(ti)
+.05 E 1.774 -.15(ve s)-.25 H 1.474(ubscripts to inde).15 F -.15(xe)-.15
+G 3.975(da).15 G 1.475(rrays are interpreted as)-3.975 F .615
+(described abo)108 165.6 R -.15(ve)-.15 G 5.615(.U).15 G .615
+(nsetting the last element of an array v)-5.615 F .614
+(ariable does not unset the v)-.25 F(ariable.)-.25 E F1(unset)5.614 E F2
+(name)3.114 E F0(,)A(where)108 177.6 Q F2(name)2.5 E F0(is an array)2.5
+E 2.5(,o)-.65 G(r)-2.5 E F1(unset)2.5 E F2(name)2.5 E F0([)A F2
+(subscript)A F0(], where)A F2(subscript)2.5 E F0(is)2.5 E F1(*)2.5 E F0
+(or)2.5 E F1(@)2.5 E F0 2.5(,r)C(emo)-2.5 E -.15(ve)-.15 G 2.5(st).15 G
+(he entire array)-2.5 E(.)-.65 E .847(When using a v)108 194.4 R .848
+(ariable name with a subscript as an ar)-.25 F .848
+(gument to a command, such as with)-.18 F F1(unset)3.348 E F0 3.348(,w)C
+(ithout)-3.348 E .345(using the w)108 206.4 R .345(ord e)-.1 F .345
+(xpansion syntax described abo)-.15 F -.15(ve)-.15 G 2.845(,t).15 G .345
+(he ar)-2.845 F .344(gument is subject to pathname e)-.18 F 2.844
+(xpansion. If)-.15 F(path-)2.844 E(name e)108 218.4 Q
+(xpansion is not desired, the ar)-.15 E(gument should be quoted.)-.18 E
+(The)108 235.2 Q F1(declar)3.573 E(e)-.18 E F0(,)A F1(local)3.573 E F0
+3.573(,a)C(nd)-3.573 E F1 -.18(re)3.573 G(adonly).18 E F0 -.2(bu)3.573 G
+1.073(iltins each accept a).2 F F1<ad61>3.573 E F0 1.073
+(option to specify an inde)3.573 F -.15(xe)-.15 G 3.574(da).15 G 1.074
+(rray and a)-3.574 F F1<ad41>3.574 E F0 .339
+(option to specify an associati)108 247.2 R .638 -.15(ve a)-.25 H(rray)
+.15 E 5.338(.I)-.65 G 2.838(fb)-5.338 G .338(oth options are supplied,)
+-2.838 F F1<ad41>2.838 E F0(tak)2.838 E .338(es precedence.)-.1 F(The)
+5.338 E F1 -.18(re)2.838 G(ad).18 E F0 -.2(bu)2.838 G(iltin).2 E .44
+(accepts a)108 259.2 R F1<ad61>2.941 E F0 .441
+(option to assign a list of w)2.941 F .441
+(ords read from the standard input to an array)-.1 F 5.441(.T)-.65 G(he)
+-5.441 E F1(set)2.941 E F0(and)2.941 E F1(declar)2.941 E(e)-.18 E F0 -.2
+(bu)108 271.2 S(iltins display array v).2 E(alues in a w)-.25 E
+(ay that allo)-.1 E(ws them to be reused as assignments.)-.25 E/F3 10.95
+/Times-Bold@0 SF(EXP)72 288 Q(ANSION)-.81 E F0 .76(Expansion is perform\
+ed on the command line after it has been split into w)108 300 R 3.26
+(ords. There)-.1 F .76(are se)3.26 F -.15(ve)-.25 G 3.26(nk).15 G .76
+(inds of)-3.26 F -.15(ex)108 312 S .369(pansion performed:).15 F F2(br)
+2.869 E .369(ace e)-.15 F(xpansion)-.2 E F0(,).24 E F2 .369(tilde e)
+2.869 F(xpansion)-.2 E F0(,).24 E F2(par)2.869 E .369
+(ameter and variable e)-.15 F(xpansion)-.2 E F0(,).24 E F2 .37
+(command sub-)2.869 F(stitution)108 324 Q F0(,).24 E F2(arithmetic e)2.5
+E(xpansion)-.2 E F0(,).24 E F2(wor)2.5 E 2.5(ds)-.37 G(plitting)-2.5 E
+F0 2.5(,a).22 G(nd)-2.5 E F2(pathname e)2.5 E(xpansion)-.2 E F0(.).24 E
+.419(The order of e)108 340.8 R .419(xpansions is: brace e)-.15 F .418
+(xpansion; tilde e)-.15 F .418(xpansion, parameter and v)-.15 F .418
+(ariable e)-.25 F .418(xpansion, arithmetic)-.15 F -.15(ex)108 352.8 S
+.195(pansion, and command substitution \(done in a left-to-right f).15 F
+.196(ashion\); w)-.1 F .196(ord splitting; and pathname e)-.1 F(xpan-)
+-.15 E(sion.)108 364.8 Q .257
+(On systems that can support it, there is an additional e)108 381.6 R
+.257(xpansion a)-.15 F -.25(va)-.2 G(ilable:).25 E F2(pr)2.757 E .257
+(ocess substitution)-.45 F F0 5.257(.T)C .256(his is per)-5.257 F(-)-.2
+E(formed at the same time as tilde, parameter)108 393.6 Q 2.5(,v)-.4 G
+(ariable, and arithmetic e)-2.75 E(xpansion and command substitution.)
+-.15 E .002(After these e)108 410.4 R .003
+(xpansions are performed, quote characters present in the original w)
+-.15 F .003(ord are remo)-.1 F -.15(ve)-.15 G 2.503(du).15 G .003
+(nless the)-2.503 F(y)-.15 E(ha)108 422.4 Q .3 -.15(ve b)-.2 H
+(een quoted themselv).15 E(es \()-.15 E F2(quote r)A(emo)-.37 E(val)-.1
+E F0(\).)A 1.191(Only brace e)108 439.2 R 1.191(xpansion, w)-.15 F 1.191
+(ord splitting, and pathname e)-.1 F 1.191
+(xpansion can increase the number of w)-.15 F 1.19(ords of the)-.1 F
+-.15(ex)108 451.2 S 1.164(pansion; other e).15 F 1.164(xpansions e)-.15
+F 1.164(xpand a single w)-.15 F 1.165(ord to a single w)-.1 F 3.665
+(ord. The)-.1 F 1.165(only e)3.665 F 1.165(xceptions to this are the)
+-.15 F -.15(ex)108 463.2 S 1.245(pansions of ").15 F F1($@)A F0 3.745
+("a)C 1.245(nd ")-3.745 F F1(${)A F2(name)A F1([@]})A F0 1.245
+(", and, in most cases,)B F1($*)3.745 E F0(and)3.745 E F1(${)3.744 E F2
+(name)A F1([*]})A F0 1.244(as e)3.744 F 1.244(xplained abo)-.15 F 1.544
+-.15(ve \()-.15 H(see).15 E/F4 9/Times-Bold@0 SF -.666(PA)108 475.2 S
+(RAMETERS).666 E/F5 9/Times-Roman@0 SF(\).)A F1(Brace Expansion)87 492 Q
+F2(Br)108.58 504 Q .606(ace e)-.15 F(xpansion)-.2 E F0 .606
+(is a mechanism by which arbitrary strings may be generated.)3.346 F
+.606(This mechanism is similar)5.606 F(to)108 516 Q F2 .415(pathname e)
+2.915 F(xpansion)-.2 E F0 2.915(,b)C .415
+(ut the \214lenames generated need not e)-3.115 F 2.915(xist. P)-.15 F
+.415(atterns to be brace e)-.15 F .415(xpanded tak)-.15 F 2.915(et)-.1 G
+(he)-2.915 E .151(form of an optional)108 528 R F2(pr)2.651 E(eamble)
+-.37 E F0 2.651(,f).18 G(ollo)-2.651 E .151
+(wed by either a series of comma-separated strings or a sequence e)-.25
+F(xpres-)-.15 E .563(sion between a pair of braces, follo)108 540 R .563
+(wed by an optional)-.25 F F2(postscript)3.063 E F0 5.563(.T).68 G .563
+(he preamble is pre\214x)-5.563 F .563(ed to each string)-.15 F .659(co\
+ntained within the braces, and the postscript is then appended to each \
+resulting string, e)108 552 R .659(xpanding left to)-.15 F(right.)108
+564 Q .719(Brace e)108 580.8 R .719(xpansions may be nested.)-.15 F .719
+(The results of each e)5.719 F .719
+(xpanded string are not sorted; left to right order is)-.15 F(preserv)
+108 592.8 Q 2.5(ed. F)-.15 F(or e)-.15 E(xample, a)-.15 E F1({)A F0
+(d,c,b)A F1(})A F0 2.5(ee)C(xpands into `ade ace abe'.)-2.65 E 3.242(As)
+108 609.6 S .742(equence e)-3.242 F .742(xpression tak)-.15 F .742
+(es the form)-.1 F F1({)3.242 E F2(x)A F1(..)A F2(y)A F1([..)A F2(incr)A
+F1(]})A F0 3.242(,w)C(here)-3.242 E F2(x)3.242 E F0(and)3.243 E F2(y)
+3.243 E F0 .743(are either inte)3.243 F .743(gers or single characters,)
+-.15 F(and)108 621.6 Q F2(incr)3.032 E F0 3.032(,a)C 3.032(no)-3.032 G
+.532(ptional increment, is an inte)-3.032 F(ger)-.15 E 5.532(.W)-.55 G
+.532(hen inte)-5.532 F .532(gers are supplied, the e)-.15 F .532
+(xpression e)-.15 F .531(xpands to each)-.15 F .077(number between)108
+633.6 R F2(x)2.577 E F0(and)2.577 E F2(y)2.577 E F0 2.577(,i)C(nclusi)
+-2.577 E -.15(ve)-.25 G 5.077(.S).15 G .077(upplied inte)-5.077 F .077
+(gers may be pre\214x)-.15 F .077(ed with)-.15 F F2(0)2.577 E F0 .078
+(to force each term to ha)2.578 F .378 -.15(ve t)-.2 H(he).15 E .015
+(same width.)108 645.6 R .015(When either)5.015 F F2(x)2.515 E F0(or)
+2.515 E F2(y)2.515 E F0(be)2.515 E .014(gins with a zero, the shell att\
+empts to force all generated terms to contain)-.15 F 1.143
+(the same number of digits, zero-padding where necessary)108 657.6 R
+6.143(.W)-.65 G 1.143(hen characters are supplied, the e)-6.143 F
+(xpression)-.15 E -.15(ex)108 669.6 S 1.064(pands to each character le)
+.15 F 1.064(xicographically between)-.15 F F2(x)3.564 E F0(and)3.564 E
+F2(y)3.564 E F0 3.564(,i)C(nclusi)-3.564 E -.15(ve)-.25 G 3.564(,u).15 G
+1.064(sing the def)-3.564 F 1.064(ault C locale.)-.1 F(Note)6.064 E .983
+(that both)108 681.6 R F2(x)3.483 E F0(and)3.483 E F2(y)3.483 E F0 .983
+(must be of the same type.)3.483 F .984
+(When the increment is supplied, it is used as the dif)5.983 F(ference)
+-.25 E(between each term.)108 693.6 Q(The def)5 E
+(ault increment is 1 or \2551 as appropriate.)-.1 E .582(Brace e)108
+710.4 R .582(xpansion is performed before an)-.15 F 3.082(yo)-.15 G .581
+(ther e)-3.082 F .581(xpansions, and an)-.15 F 3.081(yc)-.15 G .581
+(haracters special to other e)-3.081 F(xpansions)-.15 E 1.208
+(are preserv)108 722.4 R 1.208(ed in the result.)-.15 F 1.209
+(It is strictly te)6.209 F(xtual.)-.15 E F1(Bash)6.209 E F0 1.209
+(does not apply an)3.709 F 3.709(ys)-.15 G 1.209
+(yntactic interpretation to the)-3.709 F(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(20)188.455 E 0 Cg EP
+%%Page: 21 21
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(conte)108 84 Q
+(xt of the e)-.15 E(xpansion or the te)-.15 E(xt between the braces.)
+-.15 E 3.633(Ac)108 100.8 S 1.133(orrectly-formed brace e)-3.633 F 1.132
+(xpansion must contain unquoted opening and closing braces, and at leas\
+t one)-.15 F 3.44(unquoted comma or a v)108 112.8 R 3.441
+(alid sequence e)-.25 F 5.941(xpression. An)-.15 F 5.941(yi)-.15 G 3.441
+(ncorrectly formed brace e)-5.941 F 3.441(xpansion is left)-.15 F 2.755
+(unchanged. A)108 124.8 R/F1 10/Times-Bold@0 SF({)2.755 E F0(or)2.755 E
+F1(,)2.755 E F0 .255(may be quoted with a backslash to pre)2.755 F -.15
+(ve)-.25 G .255(nt its being considered part of a brace e).15 F(xpres-)
+-.15 E 2.91(sion. T)108 136.8 R 2.91(oa)-.8 G -.2(vo)-3.11 G .41
+(id con\215icts with parameter e).2 F .411(xpansion, the string)-.15 F
+F1(${)2.911 E F0 .411(is not considered eligible for brace e)2.911 F
+(xpan-)-.15 E(sion, and inhibits brace e)108 148.8 Q
+(xpansion until the closing)-.15 E F1(})2.5 E F0(.)A 1.476(This constru\
+ct is typically used as shorthand when the common pre\214x of the strin\
+gs to be generated is)108 165.6 R(longer than in the abo)108 177.6 Q .3
+-.15(ve ex)-.15 H(ample:).15 E(mkdir /usr/local/src/bash/{old,ne)144
+194.4 Q -.65(w,)-.25 G(dist,b).65 E(ugs})-.2 E(or)108 206.4 Q(cho)144
+218.4 Q(wn root /usr/{ucb/{e)-.25 E(x,edit},lib/{e)-.15 E(x?.?*,ho)-.15
+E(w_e)-.25 E(x}})-.15 E .618(Brace e)108 235.2 R .618
+(xpansion introduces a slight incompatibility with historical v)-.15 F
+.618(ersions of)-.15 F F1(sh)3.118 E F0(.)A F1(sh)5.618 E F0 .618
+(does not treat open-)3.118 F .248
+(ing or closing braces specially when the)108 247.2 R 2.748(ya)-.15 G
+.247(ppear as part of a w)-2.748 F .247(ord, and preserv)-.1 F .247
+(es them in the output.)-.15 F F1(Bash)5.247 E F0(remo)108 259.2 Q -.15
+(ve)-.15 G 3.53(sb).15 G 1.03(races from w)-3.53 F 1.03
+(ords as a consequence of brace e)-.1 F 3.53(xpansion. F)-.15 F 1.03
+(or e)-.15 F 1.03(xample, a w)-.15 F 1.03(ord entered to)-.1 F F1(sh)
+3.53 E F0(as)3.53 E/F2 10/Times-Italic@0 SF(\214le{1,2})108 271.2 Q F0
+.515(appears identically in the output.)3.015 F .515(The same w)5.515 F
+.515(ord is output as)-.1 F F2 .514(\214le1 \214le2)4.925 F F0 .514
+(after e)3.034 F .514(xpansion by)-.15 F F1(bash)3.014 E F0(.)A .436
+(If strict compatibility with)108 283.2 R F1(sh)2.936 E F0 .436
+(is desired, start)2.936 F F1(bash)2.936 E F0 .436(with the)2.936 F F1
+(+B)2.936 E F0 .436(option or disable brace e)2.936 F .437
+(xpansion with the)-.15 F F1(+B)108 295.2 Q F0(option to the)2.5 E F1
+(set)2.5 E F0(command \(see)2.5 E/F3 9/Times-Bold@0 SF(SHELL B)2.5 E
+(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1 -.18(Ti)
+87 312 S(lde Expansion).18 E F0 1.087(If a w)108 324 R 1.087(ord be)-.1
+F 1.087(gins with an unquoted tilde character \(`)-.15 F F1(~)A F0 1.086
+('\), all of the characters preceding the \214rst unquoted)B .185(slash\
+ \(or all characters, if there is no unquoted slash\) are considered a)
+108 336 R F2(tilde-pr)2.685 E(e\214x)-.37 E F0 5.185(.I)C 2.685(fn)
+-5.185 G .185(one of the characters)-2.685 F .726(in the tilde-pre\214x\
+ are quoted, the characters in the tilde-pre\214x follo)108 348 R .725
+(wing the tilde are treated as a possible)-.25 F F2(lo)108 360 Q .522
+(gin name)-.1 F F0 5.522(.I)C 3.022(ft)-5.522 G .522
+(his login name is the null string, the tilde is replaced with the v)
+-3.022 F .523(alue of the shell parameter)-.25 F F3(HOME)108 372 Q/F4 9
+/Times-Roman@0 SF(.)A F0(If)4.787 E F3(HOME)2.787 E F0 .287
+(is unset, the home directory of the user e)2.537 F -.15(xe)-.15 G .286
+(cuting the shell is substituted instead.).15 F(Other)5.286 E(-)-.2 E(w\
+ise, the tilde-pre\214x is replaced with the home directory associated \
+with the speci\214ed login name.)108 384 Q .092
+(If the tilde-pre\214x is a `~+', the v)108 400.8 R .092
+(alue of the shell v)-.25 F(ariable)-.25 E F3(PWD)2.592 E F0 .092
+(replaces the tilde-pre\214x.)2.342 F .093(If the tilde-pre\214x is)
+5.093 F 3.404(a`)108 412.8 S .904(~\255', the v)-3.404 F .904
+(alue of the shell v)-.25 F(ariable)-.25 E F3(OLDPWD)3.404 E F4(,)A F0
+.904(if it is set, is substituted.)3.154 F .903(If the characters follo)
+5.903 F .903(wing the)-.25 F 1.641
+(tilde in the tilde-pre\214x consist of a number)108 424.8 R F2(N)4.141
+E F0 4.142(,o)C 1.642(ptionally pre\214x)-4.142 F 1.642
+(ed by a `+' or a `\255', the tilde-pre\214x is)-.15 F 1.438(replaced w\
+ith the corresponding element from the directory stack, as it w)108
+436.8 R 1.437(ould be displayed by the)-.1 F F1(dirs)3.937 E F0 -.2(bu)
+108 448.8 S .454(iltin in).2 F -.2(vo)-.4 G -.1(ke).2 G 2.954(dw).1 G
+.454(ith the tilde-pre\214x as an ar)-2.954 F 2.954(gument. If)-.18 F
+.454(the characters follo)2.954 F .455
+(wing the tilde in the tilde-pre\214x)-.25 F
+(consist of a number without a leading `+' or `\255', `+' is assumed.)
+108 460.8 Q(If the login name is in)108 477.6 Q -.25(va)-.4 G
+(lid, or the tilde e).25 E(xpansion f)-.15 E(ails, the w)-.1 E
+(ord is unchanged.)-.1 E .167(Each v)108 494.4 R .167
+(ariable assignment is check)-.25 F .167(ed for unquoted tilde-pre\214x)
+-.1 F .167(es immediately follo)-.15 F .167(wing a)-.25 F F1(:)2.667 E
+F0 .167(or the \214rst)2.667 F F1(=)2.666 E F0 5.166(.I)C(n)-5.166 E
+.467(these cases, tilde e)108 506.4 R .467(xpansion is also performed.)
+-.15 F(Consequently)5.467 E 2.967(,o)-.65 G .468
+(ne may use \214lenames with tildes in assign-)-2.967 F(ments to)108
+518.4 Q F3 -.666(PA)2.5 G(TH)-.189 E F4(,)A F3(MAILP)2.25 E -.855(AT)
+-.666 G(H).855 E F4(,)A F0(and)2.25 E F3(CDP)2.5 E -.855(AT)-.666 G(H)
+.855 E F4(,)A F0(and the shell assigns the e)2.25 E(xpanded v)-.15 E
+(alue.)-.25 E .024(Bash also performs tilde e)108 535.2 R .024
+(xpansion on w)-.15 F .023(ords satisfying the conditions of v)-.1 F
+.023(ariable assignments \(as described)-.25 F(abo)108 547.2 Q .769 -.15
+(ve u)-.15 H(nder).15 E F3 -.666(PA)2.969 G(RAMETERS).666 E F4(\))A F0
+.469(when the)2.719 F 2.969(ya)-.15 G .469(ppear as ar)-2.969 F .469
+(guments to simple commands.)-.18 F .47(Bash does not do this,)5.469 F
+-.15(ex)108 559.2 S(cept for the).15 E F2(declar)2.5 E(ation)-.15 E F0
+(commands listed abo)2.5 E -.15(ve)-.15 G 2.5(,w).15 G(hen in)-2.5 E F2
+(posix mode)2.5 E F0(.)A F1 -.1(Pa)87 576 S(rameter Expansion).1 E F0
+1.606(The `)108 588 R F1($)A F0 4.106('c)C 1.606
+(haracter introduces parameter e)-4.106 F 1.605
+(xpansion, command substitution, or arithmetic e)-.15 F 4.105
+(xpansion. The)-.15 F .406(parameter name or symbol to be e)108 600 R
+.407(xpanded may be enclosed in braces, which are optional b)-.15 F .407
+(ut serv)-.2 F 2.907(et)-.15 G 2.907(op)-2.907 G(ro-)-2.907 E .033
+(tect the v)108 612 R .033(ariable to be e)-.25 F .033
+(xpanded from characters immediately follo)-.15 F .032
+(wing it which could be interpreted as part)-.25 F(of the name.)108 624
+Q 1.189
+(When braces are used, the matching ending brace is the \214rst `)108
+640.8 R F1(})A F0 3.69('n)C 1.19(ot escaped by a backslash or within a)
+-3.69 F 2.15(quoted string, and not within an embedded arithmetic e)108
+652.8 R 2.15(xpansion, command substitution, or parameter)-.15 F -.15
+(ex)108 664.8 S(pansion.).15 E(${)108 681.6 Q F2(par)A(ameter)-.15 E F0
+(})A 1.204(The v)144 693.6 R 1.204(alue of)-.25 F F2(par)3.704 E(ameter)
+-.15 E F0 1.204(is substituted.)3.704 F 1.204
+(The braces are required when)6.204 F F2(par)4.955 E(ameter)-.15 E F0
+1.205(is a positional)4.435 F .264
+(parameter with more than one digit, or when)144 705.6 R F2(par)4.014 E
+(ameter)-.15 E F0 .264(is follo)3.494 F .264
+(wed by a character which is not to)-.25 F 2.676
+(be interpreted as part of its name.)144 717.6 R(The)7.677 E F2(par)
+5.177 E(ameter)-.15 E F0 2.677(is a shell parameter as described abo)
+5.177 F -.15(ve)-.15 G F1 -.74(PA)144 729.6 S(RAMETERS).74 E F0 2.5(\)o)
+C 2.5(ra)-2.5 G 2.5(na)-2.5 G(rray reference \()-2.5 E F1(Arrays)A F0
+(\).)A(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(21)188.455 E 0 Cg
+EP
+%%Page: 22 22
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .347
+(If the \214rst character of)108 84 R/F1 10/Times-Italic@0 SF(par)2.846
+E(ameter)-.15 E F0 .346(is an e)2.846 F .346(xclamation point \()-.15 F
+/F2 10/Times-Bold@0 SF(!)A F0 .346(\), and)B F1(par)2.846 E(ameter)-.15
+E F0 .346(is not a)2.846 F F1(namer)2.846 E(ef)-.37 E F0 2.846(,i)C
+2.846(ti)-2.846 G(ntroduces)-2.846 E 2.906(al)108 96 S -2.15 -.25(ev e)
+-2.906 H 2.906(lo).25 G 2.906(fi)-2.906 G(ndirection.)-2.906 E F2(Bash)
+5.406 E F0 .406(uses the v)2.906 F .406(alue formed by e)-.25 F .406
+(xpanding the rest of)-.15 F F1(par)2.906 E(ameter)-.15 E F0 .406
+(as the ne)2.906 F(w)-.25 E F1(par)2.907 E(ame-)-.15 E(ter)108 108 Q F0
+2.579(;t)C .079(his is then e)-2.579 F .079(xpanded and that v)-.15 F
+.079(alue is used in the rest of the e)-.25 F .078
+(xpansion, rather than the e)-.15 F .078(xpansion of the)-.15 F
+(original)108 120 Q F1(par)2.542 E(ameter)-.15 E F0 5.042(.T)C .042
+(his is kno)-5.042 F .042(wn as)-.25 F F1(indir)2.543 E .043(ect e)-.37
+F(xpansion)-.2 E F0 5.043(.T)C .043(he v)-5.043 F .043
+(alue is subject to tilde e)-.25 F .043(xpansion, parameter)-.15 F -.15
+(ex)108 132 S .249(pansion, command substitution, and arithmetic e).15 F
+2.749(xpansion. If)-.15 F F1(par)2.749 E(ameter)-.15 E F0 .248
+(is a nameref, this e)2.749 F .248(xpands to the)-.15 F 1.51
+(name of the parameter referenced by)108 144 R F1(par)4.01 E(ameter)-.15
+E F0 1.51(instead of performing the complete indirect e)4.01 F
+(xpansion.)-.15 E .388(The e)108 156 R .387(xceptions to this are the e)
+-.15 F .387(xpansions of ${)-.15 F F2(!)A F1(pr)A(e\214x)-.37 E F2(*)A
+F0 2.887(}a)C .387(nd ${)-2.887 F F2(!)A F1(name)A F0([)A F1(@)A F0 .387
+(]} described belo)B 4.187 -.65(w. T)-.25 H .387(he e).65 F(xclama-)-.15
+E(tion point must immediately follo)108 168 Q 2.5(wt)-.25 G
+(he left brace in order to introduce indirection.)-2.5 E .334
+(In each of the cases belo)108 184.8 R -.65(w,)-.25 G F1(wor)3.484 E(d)
+-.37 E F0 .334(is subject to tilde e)2.834 F .334(xpansion, parameter e)
+-.15 F .334(xpansion, command substitution,)-.15 F(and arithmetic e)108
+196.8 Q(xpansion.)-.15 E 1.09(When not performing substring e)108 213.6
+R 1.089(xpansion, using the forms documented belo)-.15 F 3.589(w\()-.25
+G(e.g.,)-3.589 E F2(:-)3.589 E F0(\),)A F2(bash)3.589 E F0 1.089
+(tests for a)3.589 F(parameter that is unset or null.)108 225.6 Q(Omitt\
+ing the colon results in a test only for a parameter that is unset.)5 E
+(${)108 242.4 Q F1(par)A(ameter)-.15 E F2<3aad>A F1(wor)A(d)-.37 E F0(})
+A F2 .722(Use Default V)144 254.4 R(alues)-.92 E F0 5.722(.I)C(f)-5.722
+E F1(par)4.472 E(ameter)-.15 E F0 .723(is unset or null, the e)3.952 F
+.723(xpansion of)-.15 F F1(wor)3.563 E(d)-.37 E F0 .723(is substituted.)
+3.993 F(Other)5.723 E(-)-.2 E(wise, the v)144 266.4 Q(alue of)-.25 E F1
+(par)3.75 E(ameter)-.15 E F0(is substituted.)3.23 E(${)108 278.4 Q F1
+(par)A(ameter)-.15 E F2(:=)A F1(wor)A(d)-.37 E F0(})A F2 2.005
+(Assign Default V)144 290.4 R(alues)-.92 E F0 7.005(.I)C(f)-7.005 E F1
+(par)5.755 E(ameter)-.15 E F0 2.005(is unset or null, the e)5.235 F
+2.004(xpansion of)-.15 F F1(wor)4.844 E(d)-.37 E F0 2.004
+(is assigned to)5.274 F F1(par)144 302.4 Q(ameter)-.15 E F0 5.278(.T).73
+G .278(he v)-5.278 F .278(alue of)-.25 F F1(par)4.028 E(ameter)-.15 E F0
+.278(is then substituted.)3.508 F .279
+(Positional parameters and special param-)5.278 F
+(eters may not be assigned to in this w)144 314.4 Q(ay)-.1 E(.)-.65 E
+(${)108 326.4 Q F1(par)A(ameter)-.15 E F2(:?)A F1(wor)A(d)-.37 E F0(})A
+F2 .535(Display Err)144 338.4 R .535(or if Null or Unset)-.18 F F0 5.535
+(.I)C(f)-5.535 E F1(par)4.285 E(ameter)-.15 E F0 .535
+(is null or unset, the e)3.765 F .535(xpansion of)-.15 F F1(wor)3.035 E
+(d)-.37 E F0 .535(\(or a mes-)3.035 F .661(sage to that ef)144 350.4 R
+.661(fect if)-.25 F F1(wor)3.501 E(d)-.37 E F0 .662(is not present\) is\
+ written to the standard error and the shell, if it is not)3.931 F
+(interacti)144 362.4 Q -.15(ve)-.25 G 2.5(,e).15 G 2.5(xits. Otherwise,)
+-2.65 F(the v)2.5 E(alue of)-.25 E F1(par)2.5 E(ameter)-.15 E F0
+(is substituted.)2.5 E(${)108 374.4 Q F1(par)A(ameter)-.15 E F2(:+)A F1
+(wor)A(d)-.37 E F0(})A F2 .745(Use Alter)144 386.4 R .745(nate V)-.15 F
+(alue)-.92 E F0 5.745(.I)C(f)-5.745 E F1(par)4.495 E(ameter)-.15 E F0
+.745(is null or unset, nothing is substituted, otherwise the e)3.975 F
+(xpan-)-.15 E(sion of)144 398.4 Q F1(wor)2.84 E(d)-.37 E F0
+(is substituted.)3.27 E(${)108 410.4 Q F1(par)A(ameter)-.15 E F2(:)A F1
+(of)A(fset)-.18 E F0(})A(${)108 422.4 Q F1(par)A(ameter)-.15 E F2(:)A F1
+(of)A(fset)-.18 E F2(:)A F1(length)A F0(})A F2 .002(Substring Expansion)
+144 434.4 R F0 5.002(.E)C .002(xpands to up to)-5.002 F F1(length)2.502
+E F0 .002(characters of the v)2.502 F .002(alue of)-.25 F F1(par)2.502 E
+(ameter)-.15 E F0 .002(starting at the)2.502 F 1.082
+(character speci\214ed by)144 446.4 R F1(of)3.582 E(fset)-.18 E F0 6.082
+(.I)C(f)-6.082 E F1(par)3.582 E(ameter)-.15 E F0(is)3.582 E F2(@)3.582 E
+F0 3.582(,a)C 3.582(ni)-3.582 G(nde)-3.582 E -.15(xe)-.15 G 3.582(da).15
+G 1.082(rray subscripted by)-3.582 F F2(@)3.582 E F0(or)3.581 E F2(*)
+3.581 E F0 3.581(,o)C 3.581(ra)-3.581 G(n)-3.581 E(associati)144 458.4 Q
+1.022 -.15(ve a)-.25 H .722(rray name, the results dif).15 F .722
+(fer as described belo)-.25 F 4.522 -.65(w. I)-.25 H(f).65 E F1(length)
+3.222 E F0 .722(is omitted, e)3.222 F .722(xpands to the)-.15 F .043
+(substring of the v)144 470.4 R .043(alue of)-.25 F F1(par)2.543 E
+(ameter)-.15 E F0 .042(starting at the character speci\214ed by)2.543 F
+F1(of)2.542 E(fset)-.18 E F0 .042(and e)2.542 F .042(xtending to the)
+-.15 F .846(end of the v)144 482.4 R(alue.)-.25 E F1(length)5.846 E F0
+(and)3.346 E F1(of)3.346 E(fset)-.18 E F0 .846(are arithmetic e)3.346 F
+.847(xpressions \(see)-.15 F/F3 9/Times-Bold@0 SF .847(ARITHMETIC EV)
+3.347 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(belo)144 494.4 Q
+(w\).)-.25 E(If)144 518.4 Q F1(of)3.029 E(fset)-.18 E F0 -.25(eva)3.029
+G .529(luates to a number less than zero, the v).25 F .529
+(alue is used as an of)-.25 F .529(fset in characters from the)-.25 F
+.045(end of the v)144 530.4 R .045(alue of)-.25 F F1(par)2.546 E(ameter)
+-.15 E F0 5.046(.I)C(f)-5.046 E F1(length)2.546 E F0 -.25(eva)2.546 G
+.046(luates to a number less than zero, it is interpreted as an).25 F
+(of)144 542.4 Q .203(fset in characters from the end of the v)-.25 F
+.202(alue of)-.25 F F1(par)2.702 E(ameter)-.15 E F0 .202
+(rather than a number of characters, and)2.702 F .557(the e)144 554.4 R
+.557(xpansion is the characters between)-.15 F F1(of)3.057 E(fset)-.18 E
+F0 .557(and that result.)3.057 F .558(Note that a ne)5.558 F -.05(ga)
+-.15 G(ti).05 E .858 -.15(ve o)-.25 H -.25(ff).15 G .558(set must be).25
+F(separated from the colon by at least one space to a)144 566.4 Q -.2
+(vo)-.2 G(id being confused with the).2 E F2(:-)2.5 E F0 -.15(ex)2.5 G
+(pansion.).15 E(If)144 590.4 Q F1(par)2.959 E(ameter)-.15 E F0(is)2.959
+E F2(@)2.959 E F0 2.959(,t)C .459(he result is)-2.959 F F1(length)2.959
+E F0 .459(positional parameters be)2.959 F .458(ginning at)-.15 F F1(of)
+2.958 E(fset)-.18 E F0 5.458(.A)C(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15
+(ve)-.25 G F1(of)3.108 E(fset)-.18 E F0 .6(is tak)144 602.4 R .6
+(en relati)-.1 F .9 -.15(ve t)-.25 H 3.1(oo).15 G .6
+(ne greater than the greatest positional parameter)-3.1 F 3.1(,s)-.4 G
+3.1(oa)-3.1 G 3.1(no)-3.1 G -.25(ff)-3.1 G .6(set of \2551 e).25 F -.25
+(va)-.25 G(luates).25 E .64(to the last positional parameter)144 614.4 R
+5.64(.I)-.55 G 3.14(ti)-5.64 G 3.14(sa)-3.14 G 3.139(ne)-3.14 G .639
+(xpansion error if)-3.289 F F1(length)3.139 E F0 -.25(eva)3.139 G .639
+(luates to a number less than).25 F(zero.)144 626.4 Q(If)144 650.4 Q F1
+(par)3.013 E(ameter)-.15 E F0 .514(is an inde)3.013 F -.15(xe)-.15 G
+3.014(da).15 G .514(rray name subscripted by @ or *, the result is the)
+-3.014 F F1(length)3.014 E F0 .514(members of)3.014 F 1.082
+(the array be)144 662.4 R 1.082(ginning with ${)-.15 F F1(par)A(ameter)
+-.15 E F0([)A F1(of)A(fset)-.18 E F0 3.582(]}. A)B(ne)3.582 E -.05(ga)
+-.15 G(ti).05 E -.15(ve)-.25 G F1(of)3.732 E(fset)-.18 E F0 1.081
+(is tak)3.581 F 1.081(en relati)-.1 F 1.381 -.15(ve t)-.25 H 3.581(oo)
+.15 G 1.081(ne greater)-3.581 F 1.079(than the maximum inde)144 674.4 R
+3.579(xo)-.15 G 3.579(ft)-3.579 G 1.079(he speci\214ed array)-3.579 F
+6.079(.I)-.65 G 3.579(ti)-6.079 G 3.579(sa)-3.579 G 3.58(ne)-3.579 G
+1.08(xpansion error if)-3.73 F F1(length)3.58 E F0 -.25(eva)3.58 G 1.08
+(luates to a).25 F(number less than zero.)144 686.4 Q(Substring e)144
+710.4 Q(xpansion applied to an associati)-.15 E .3 -.15(ve a)-.25 H
+(rray produces unde\214ned results.).15 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(22)188.455 E 0 Cg EP
+%%Page: 23 23
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.931
+(Substring inde)144 84 R 1.931(xing is zero-based unless the positional\
+ parameters are used, in which case the)-.15 F(inde)144 96 Q .306
+(xing starts at 1 by def)-.15 F 2.806(ault. If)-.1 F/F1 10
+/Times-Italic@0 SF(of)2.807 E(fset)-.18 E F0 .307
+(is 0, and the positional parameters are used,)2.807 F/F2 10
+/Times-Bold@0 SF($0)2.807 E F0 .307(is pre\214x)2.807 F(ed)-.15 E
+(to the list.)144 108 Q(${)108 124.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2
+(*)A F0(})A(${)108 136.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(@)A F0(})A F2
+.085(Names matching pr)144 148.8 R(e\214x)-.18 E F0 5.085(.E)C .084
+(xpands to the names of v)-5.085 F .084(ariables whose names be)-.25 F
+.084(gin with)-.15 F F1(pr)2.584 E(e\214x)-.37 E F0 2.584(,s)C(epa-)
+-2.584 E .257(rated by the \214rst character of the)144 160.8 R/F3 9
+/Times-Bold@0 SF(IFS)2.757 E F0 .257(special v)2.507 F 2.757
+(ariable. When)-.25 F F1(@)2.758 E F0 .258(is used and the e)2.758 F
+.258(xpansion appears)-.15 F(within double quotes, each v)144 172.8 Q
+(ariable name e)-.25 E(xpands to a separate w)-.15 E(ord.)-.1 E(${)108
+189.6 Q F2(!)A F1(name)A F0([)A F1(@)A F0(]})A(${)108 201.6 Q F2(!)A F1
+(name)A F0([)A F1(*)A F0(]})A F2 2.036(List of array k)144 213.6 R(eys)
+-.1 E F0 7.036(.I)C(f)-7.036 E F1(name)4.536 E F0 2.036(is an array v)
+4.536 F 2.036(ariable, e)-.25 F 2.036
+(xpands to the list of array indices \(k)-.15 F -.15(ey)-.1 G(s\)).15 E
+.595(assigned in)144 225.6 R F1(name)3.095 E F0 5.595(.I)C(f)-5.595 E F1
+(name)3.095 E F0 .595(is not an array)3.095 F 3.095(,e)-.65 G .595
+(xpands to 0 if)-3.245 F F1(name)3.095 E F0 .596
+(is set and null otherwise.)3.095 F(When)5.596 E F1(@)144 237.6 Q F0
+(is used and the e)2.5 E(xpansion appears within double quotes, each k)
+-.15 E .3 -.15(ey ex)-.1 H(pands to a separate w).15 E(ord.)-.1 E(${)108
+254.4 Q F2(#)A F1(par)A(ameter)-.15 E F0(})A F2 -.1(Pa)144 266.4 S .471
+(rameter length).1 F F0 5.471(.T)C .471
+(he length in characters of the v)-5.471 F .471(alue of)-.25 F F1(par)
+2.971 E(ameter)-.15 E F0 .47(is substituted.)2.97 F(If)5.47 E F1(par)
+4.22 E(ame-)-.15 E(ter)144 278.4 Q F0(is)4.438 E F2(*)3.708 E F0(or)
+3.708 E F2(@)3.708 E F0 3.708(,t)C 1.208(he v)-3.708 F 1.208
+(alue substituted is the number of positional parameters.)-.25 F(If)
+6.209 E F1(par)4.959 E(ameter)-.15 E F0 1.209(is an)4.439 F .349
+(array name subscripted by)144 290.4 R F2(*)2.849 E F0(or)2.849 E F2(@)
+2.849 E F0 2.849(,t)C .349(he v)-2.849 F .349
+(alue substituted is the number of elements in the array)-.25 F 5.348
+(.I)-.65 G(f)-5.348 E F1(par)145.25 302.4 Q(ameter)-.15 E F0 .455
+(is an inde)3.685 F -.15(xe)-.15 G 2.955(da).15 G .456
+(rray name subscripted by a ne)-2.955 F -.05(ga)-.15 G(ti).05 E .756
+-.15(ve n)-.25 H(umber).15 E 2.956(,t)-.4 G .456
+(hat number is interpreted)-2.956 F .973(as relati)144 314.4 R 1.273
+-.15(ve t)-.25 H 3.473(oo).15 G .973(ne greater than the maximum inde)
+-3.473 F 3.473(xo)-.15 G(f)-3.473 E F1(par)3.473 E(ameter)-.15 E F0
+3.472(,s)C 3.472(on)-3.472 G -2.25 -.15(eg a)-3.472 H(ti).15 E 1.272
+-.15(ve i)-.25 H .972(ndices count back).15 F(from the end of the array)
+144 326.4 Q 2.5(,a)-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5
+G 2.5(1r)-2.5 G(eferences the last element.)-2.5 E(${)108 343.2 Q F1
+(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)-.37 E F0(})A(${)108 355.2 Q F1
+(par)A(ameter)-.15 E F2(##)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 367.2
+Q 1.396 -.1(ve m)-.1 H 1.196(atching pr).1 F 1.196(e\214x patter)-.18 F
+(n)-.15 E F0 6.196(.T)C(he)-6.196 E F1(wor)4.036 E(d)-.37 E F0 1.196
+(is e)4.466 F 1.196(xpanded to produce a pattern just as in path-)-.15 F
+.544(name e)144 379.2 R .544(xpansion, and matched ag)-.15 F .544
+(ainst the e)-.05 F .544(xpanded v)-.15 F .544(alue of)-.25 F F1(par)
+4.294 E(ameter)-.15 E F0 .543(using the rules described)3.774 F(under)
+144 391.2 Q F2 -.1(Pa)3.221 G(tter).1 E 3.221(nM)-.15 G(atching)-3.221 E
+F0(belo)3.221 E 4.521 -.65(w. I)-.25 H 3.221(ft).65 G .721
+(he pattern matches the be)-3.221 F .722(ginning of the v)-.15 F .722
+(alue of)-.25 F F1(par)3.222 E(ameter)-.15 E F0(,).73 E 1.152
+(then the result of the e)144 403.2 R 1.151(xpansion is the e)-.15 F
+1.151(xpanded v)-.15 F 1.151(alue of)-.25 F F1(par)4.901 E(ameter)-.15 E
+F0 1.151(with the shortest matching)4.381 F .183(pattern \(the `)144
+415.2 R(`)-.74 E F2(#)A F0 1.663 -.74('' c)D .184
+(ase\) or the longest matching pattern \(the `).74 F(`)-.74 E F2(##)A F0
+1.664 -.74('' c)D .184(ase\) deleted.).74 F(If)5.184 E F1(par)3.934 E
+(ameter)-.15 E F0(is)3.414 E F2(@)2.684 E F0(or)144 427.2 Q F2(*)3.019 E
+F0 3.019(,t)C .518(he pattern remo)-3.019 F -.25(va)-.15 G 3.018(lo).25
+G .518
+(peration is applied to each positional parameter in turn, and the e)
+-3.018 F(xpan-)-.15 E 1.121(sion is the resultant list.)144 439.2 R(If)
+6.121 E F1(par)4.871 E(ameter)-.15 E F0 1.121(is an array v)4.351 F
+1.121(ariable subscripted with)-.25 F F2(@)3.621 E F0(or)3.621 E F2(*)
+3.622 E F0 3.622(,t)C 1.122(he pattern)-3.622 F(remo)144 451.2 Q -.25
+(va)-.15 G 2.53(lo).25 G .03
+(peration is applied to each member of the array in turn, and the e)
+-2.53 F .03(xpansion is the resultant)-.15 F(list.)144 463.2 Q(${)108
+480 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108 492
+Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144
+504 Q .346 -.1(ve m)-.1 H .146(atching suf\214x patter).1 F(n)-.15 E F0
+5.146(.T)C(he)-5.146 E F1(wor)2.646 E(d)-.37 E F0 .147(is e)2.647 F .147
+(xpanded to produce a pattern just as in pathname)-.15 F -.15(ex)144 516
+S .459(pansion, and matched ag).15 F .459(ainst the e)-.05 F .459
+(xpanded v)-.15 F .458(alue of)-.25 F F1(par)4.208 E(ameter)-.15 E F0
+.458(using the rules described under)3.688 F F2 -.1(Pa)144 528 S(tter).1
+E 4.592(nM)-.15 G(atching)-4.592 E F0(belo)4.592 E 5.892 -.65(w. I)-.25
+H 4.592(ft).65 G 2.092(he pattern matches a trailing portion of the e)
+-4.592 F 2.093(xpanded v)-.15 F 2.093(alue of)-.25 F F1(par)144 540 Q
+(ameter)-.15 E F0 3.15(,t).73 G .65(hen the result of the e)-3.15 F .65
+(xpansion is the e)-.15 F .65(xpanded v)-.15 F .65(alue of)-.25 F F1
+(par)4.4 E(ameter)-.15 E F0 .65(with the shortest)3.88 F 1.084
+(matching pattern \(the `)144 552 R(`)-.74 E F2(%)A F0 2.564 -.74('' c)D
+1.084(ase\) or the longest matching pattern \(the `).74 F(`)-.74 E F2
+(%%)A F0 2.565 -.74('' c)D 1.085(ase\) deleted.).74 F(If)6.085 E F1(par)
+145.25 564 Q(ameter)-.15 E F0(is)3.39 E F2(@)2.66 E F0(or)2.66 E F2(*)
+2.66 E F0 2.66(,t)C .16(he pattern remo)-2.66 F -.25(va)-.15 G 2.659(lo)
+.25 G .159(peration is applied to each positional parameter in turn,)
+-2.659 F .509(and the e)144 576 R .509(xpansion is the resultant list.)
+-.15 F(If)5.509 E F1(par)4.259 E(ameter)-.15 E F0 .51(is an array v)
+3.739 F .51(ariable subscripted with)-.25 F F2(@)3.01 E F0(or)3.01 E F2
+(*)3.01 E F0(,)A .423(the pattern remo)144 588 R -.25(va)-.15 G 2.923
+(lo).25 G .422
+(peration is applied to each member of the array in turn, and the e)
+-2.923 F .422(xpansion is)-.15 F(the resultant list.)144 600 Q(${)108
+616.8 Q F1(par)A(ameter)-.15 E F2(/)A F1(pattern)A F2(/)A F1(string)A F0
+(})A F2 -.1(Pa)144 628.8 S(tter).1 E 3.606(ns)-.15 G(ubstitution)-3.606
+E F0 6.106(.T)C(he)-6.106 E F1(pattern)3.606 E F0 1.106(is e)3.606 F
+1.107(xpanded to produce a pattern just as in pathname e)-.15 F(xpan-)
+-.15 E(sion,)144 640.8 Q F1 -.8(Pa)3.7 G -.15(ra).8 G(meter).15 E F0 1.2
+(is e)3.7 F 1.2(xpanded and the longest match of)-.15 F F1(pattern)3.7 E
+F0(ag)3.7 E 1.2(ainst its v)-.05 F 1.2(alue is replaced with)-.25 F F1
+(string)144 652.8 Q F0 5.396(.T)C .396
+(he match is performed using the rules described under)-5.396 F F2 -.1
+(Pa)2.897 G(tter).1 E 2.897(nM)-.15 G(atching)-2.897 E F0(belo)2.897 E
+4.197 -.65(w. I)-.25 H(f).65 E F1(pat-)2.897 E(tern)144 664.8 Q F0(be)
+2.57 E .07(gins with)-.15 F F2(/)2.57 E F0 2.57(,a)C .07(ll matches of)
+-2.57 F F1(pattern)2.57 E F0 .069(are replaced with)2.569 F F1(string)
+2.569 E F0 5.069(.N)C .069(ormally only the \214rst match is)-5.069 F
+2.579(replaced. If)144 676.8 R F1(pattern)2.579 E F0(be)2.579 E .079
+(gins with)-.15 F F2(#)2.579 E F0 2.579(,i)C 2.579(tm)-2.579 G .079
+(ust match at the be)-2.579 F .08(ginning of the e)-.15 F .08(xpanded v)
+-.15 F .08(alue of)-.25 F F1(par)2.58 E(am-)-.15 E(eter)144 688.8 Q F0
+5.762(.I)C(f)-5.762 E F1(pattern)3.262 E F0(be)3.261 E .761(gins with)
+-.15 F F2(%)3.261 E F0 3.261(,i)C 3.261(tm)-3.261 G .761
+(ust match at the end of the e)-3.261 F .761(xpanded v)-.15 F .761
+(alue of)-.25 F F1(par)3.261 E(ameter)-.15 E F0 5.761(.I)C(f)-5.761 E F1
+(string)144 700.8 Q F0 .957(is null, matches of)3.457 F F1(pattern)3.457
+E F0 .958(are deleted and the)3.457 F F2(/)3.458 E F0(follo)3.458 E
+(wing)-.25 E F1(pattern)3.458 E F0 .958(may be omitted.)3.458 F .958
+(If the)5.958 F F2(nocasematch)144 712.8 Q F0 .492
+(shell option is enabled, the match is performed without re)2.992 F -.05
+(ga)-.15 G .492(rd to the case of alpha-).05 F .883(betic characters.)
+144 724.8 R(If)5.883 E F1(par)4.633 E(ameter)-.15 E F0(is)4.113 E F2(@)
+3.383 E F0(or)3.383 E F2(*)3.383 E F0 3.383(,t)C .884
+(he substitution operation is applied to each positional)-3.383 F
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(23)188.455 E 0 Cg EP
+%%Page: 24 24
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.002
+(parameter in turn, and the e)144 84 R 1.002
+(xpansion is the resultant list.)-.15 F(If)6.002 E/F1 10/Times-Italic@0
+SF(par)4.752 E(ameter)-.15 E F0 1.002(is an array v)4.232 F 1.001
+(ariable sub-)-.25 F .158(scripted with)144 96 R/F2 10/Times-Bold@0 SF
+(@)2.658 E F0(or)2.659 E F2(*)2.659 E F0 2.659(,t)C .159(he substitutio\
+n operation is applied to each member of the array in turn, and)-2.659 F
+(the e)144 108 Q(xpansion is the resultant list.)-.15 E(${)108 124.8 Q
+F1(par)A(ameter)-.15 E F2(^)A F1(pattern)A F0(})A(${)108 136.8 Q F1(par)
+A(ameter)-.15 E F2(^^)A F1(pattern)A F0(})A(${)108 148.8 Q F1(par)A
+(ameter)-.15 E F2(,)A F1(pattern)A F0(})A(${)108 160.8 Q F1(par)A
+(ameter)-.15 E F2(,,)A F1(pattern)A F0(})A F2 .438(Case modi\214cation)
+144 172.8 R F0 5.438(.T)C .438(his e)-5.438 F .437
+(xpansion modi\214es the case of alphabetic characters in)-.15 F F1(par)
+2.937 E(ameter)-.15 E F0 5.437(.T)C(he)-5.437 E F1(pattern)144 184.8 Q
+F0 1.406(is e)3.906 F 1.407
+(xpanded to produce a pattern just as in pathname e)-.15 F 3.907
+(xpansion. Each)-.15 F 1.407(character in the)3.907 F -.15(ex)144 196.8
+S 1.232(panded v).15 F 1.232(alue of)-.25 F F1(par)3.732 E(ameter)-.15 E
+F0 1.232(is tested ag)3.732 F(ainst)-.05 E F1(pattern)3.732 E F0 3.732
+(,a)C 1.232(nd, if it matches the pattern, its case is)-3.732 F(con)144
+208.8 Q -.15(ve)-.4 G 2.924(rted. The).15 F .424
+(pattern should not attempt to match more than one character)2.924 F
+5.424(.T)-.55 G(he)-5.424 E F2(^)2.924 E F0 .424(operator con-)2.924 F
+-.15(ve)144 220.8 S .61(rts lo).15 F .61(wercase letters matching)-.25 F
+F1(pattern)3.11 E F0 .61(to uppercase; the)3.11 F F2(,)3.11 E F0 .61
+(operator con)3.11 F -.15(ve)-.4 G .61(rts matching uppercase).15 F
+1.547(letters to lo)144 232.8 R 4.047(wercase. The)-.25 F F2(^^)4.047 E
+F0(and)4.047 E F2(,,)4.047 E F0 -.15(ex)4.047 G 1.547(pansions con).15 F
+-.15(ve)-.4 G 1.547(rt each matched character in the e).15 F(xpanded)
+-.15 E -.25(va)144 244.8 S .634(lue; the).25 F F2(^)3.134 E F0(and)3.134
+E F2(,)3.134 E F0 -.15(ex)3.134 G .634(pansions match and con).15 F -.15
+(ve)-.4 G .633(rt only the \214rst character in the e).15 F .633
+(xpanded v)-.15 F 3.133(alue. If)-.25 F F1(pattern)144 256.8 Q F0 .78
+(is omitted, it is treated lik)3.28 F 3.28(ea)-.1 G F2(?)A F0 3.28(,w)C
+.78(hich matches e)-3.28 F -.15(ve)-.25 G .78(ry character).15 F 5.78
+(.I)-.55 G(f)-5.78 E F1(par)4.53 E(ameter)-.15 E F0(is)4.01 E F2(@)3.28
+E F0(or)3.28 E F2(*)3.28 E F0(,)A .582(the case modi\214cation operatio\
+n is applied to each positional parameter in turn, and the e)144 268.8 R
+(xpansion)-.15 E .468(is the resultant list.)144 280.8 R(If)5.468 E F1
+(par)4.218 E(ameter)-.15 E F0 .468(is an array v)3.698 F .468
+(ariable subscripted with)-.25 F F2(@)2.968 E F0(or)2.968 E F2(*)2.969 E
+F0 2.969(,t)C .469(he case modi\214ca-)-2.969 F(tion operation is appli\
+ed to each member of the array in turn, and the e)144 292.8 Q
+(xpansion is the resultant list.)-.15 E(${)108 309.6 Q F1(par)A(ameter)
+-.15 E F2(@)A F1(oper)A(ator)-.15 E F0(})A F2 -.1(Pa)144 321.6 S .86
+(rameter transf).1 F(ormation)-.25 E F0 5.86(.T)C .86(he e)-5.86 F .86
+(xpansion is either a transformation of the v)-.15 F .86(alue of)-.25 F
+F1(par)3.36 E(ameter)-.15 E F0 .153(or information about)144 333.6 R F1
+(par)2.653 E(ameter)-.15 E F0 .153(itself, depending on the v)2.653 F
+.153(alue of)-.25 F F1(oper)2.653 E(ator)-.15 E F0 5.154(.E)C(ach)-5.154
+E F1(oper)2.654 E(ator)-.15 E F0 .154(is a sin-)2.654 F(gle letter:)144
+345.6 Q F2(Q)144 369.6 Q F0 1.065(The e)180 369.6 R 1.065
+(xpansion is a string that is the v)-.15 F 1.065(alue of)-.25 F F1(par)
+3.565 E(ameter)-.15 E F0 1.064(quoted in a format that can be)3.565 F
+(reused as input.)180 381.6 Q F2(E)144 393.6 Q F0 .44(The e)180 393.6 R
+.441(xpansion is a string that is the v)-.15 F .441(alue of)-.25 F F1
+(par)2.941 E(ameter)-.15 E F0 .441(with backslash escape sequences)2.941
+F -.15(ex)180 405.6 S(panded as with the).15 E F2($'...)2.5 E(')-.55 E
+F0(quoting mechanism.)2.5 E F2(P)144 417.6 Q F0 1.073(The e)180 417.6 R
+1.073(xpansion is a string that is the result of e)-.15 F 1.073
+(xpanding the v)-.15 F 1.073(alue of)-.25 F F1(par)3.573 E(ameter)-.15 E
+F0 1.073(as if it)3.573 F(were a prompt string \(see)180 429.6 Q F2(PR)
+2.5 E(OMPTING)-.3 E F0(belo)2.5 E(w\).)-.25 E F2(A)144 441.6 Q F0 1.137
+(The e)180 441.6 R 1.138
+(xpansion is a string in the form of an assignment statement or)-.15 F
+F2(declar)3.638 E(e)-.18 E F0(command)3.638 E(that, if e)180 453.6 Q
+-.25(va)-.25 G(luated, will recreate).25 E F1(par)2.5 E(ameter)-.15 E F0
+(with its attrib)2.5 E(utes and v)-.2 E(alue.)-.25 E F2(a)144 465.6 Q F0
+(The e)180 465.6 Q(xpansion is a string consisting of \215ag v)-.15 E
+(alues representing)-.25 E F1(par)2.5 E(ameter)-.15 E F0 1.1 -.55('s a)D
+(ttrib).55 E(utes.)-.2 E(If)144 482.4 Q F1(par)5.331 E(ameter)-.15 E F0
+(is)4.811 E F2(@)4.081 E F0(or)4.081 E F2(*)4.081 E F0 4.081(,t)C 1.58
+(he operation is applied to each positional parameter in turn, and the)
+-4.081 F -.15(ex)144 494.4 S .129(pansion is the resultant list.).15 F
+(If)5.129 E F1(par)3.879 E(ameter)-.15 E F0 .129(is an array v)3.359 F
+.13(ariable subscripted with)-.25 F F2(@)2.63 E F0(or)2.63 E F2(*)2.63 E
+F0 2.63(,t)C .13(he oper)-2.63 F(-)-.2 E
+(ation is applied to each member of the array in turn, and the e)144
+506.4 Q(xpansion is the resultant list.)-.15 E 1.85(The result of the e)
+144 530.4 R 1.849(xpansion is subject to w)-.15 F 1.849
+(ord splitting and pathname e)-.1 F 1.849(xpansion as described)-.15 F
+(belo)144 542.4 Q -.65(w.)-.25 G F2(Command Substitution)87 559.2 Q F1
+1.697(Command substitution)108 571.2 R F0(allo)4.197 E 1.697
+(ws the output of a command to replace the command name.)-.25 F 1.698
+(There are tw)6.698 F(o)-.1 E(forms:)108 583.2 Q F2($\()144 600 Q F1
+(command)A F2(\))1.666 E F0(or)108 612 Q F2<92>144 624 Q F1(command)A F2
+<92>A(Bash)108 640.8 Q F0 .089(performs the e)2.589 F .089
+(xpansion by e)-.15 F -.15(xe)-.15 G(cuting).15 E F1(command)2.589 E F0
+.088(in a subshell en)2.589 F .088(vironment and replacing the command)
+-.4 F .41(substitution with the standard output of the command, with an)
+108 652.8 R 2.91(yt)-.15 G .41(railing ne)-2.91 F .41(wlines deleted.)
+-.25 F .41(Embedded ne)5.41 F(w-)-.25 E .192(lines are not deleted, b)
+108 664.8 R .192(ut the)-.2 F 2.692(ym)-.15 G .192(ay be remo)-2.692 F
+-.15(ve)-.15 G 2.692(dd).15 G .192(uring w)-2.692 F .192(ord splitting.)
+-.1 F .192(The command substitution)5.192 F F2($\(cat)2.691 E F1(\214le)
+2.691 E F2(\))A F0(can be replaced by the equi)108 676.8 Q -.25(va)-.25
+G(lent b).25 E(ut f)-.2 E(aster)-.1 E F2($\(<)2.5 E F1(\214le)2.5 E F2
+(\))A F0(.)A 1.724(When the old-style backquote form of substitution is\
+ used, backslash retains its literal meaning e)108 693.6 R(xcept)-.15 E
+.315(when follo)108 705.6 R .315(wed by)-.25 F F2($)2.815 E F0(,)A F2
+<92>2.815 E F0 2.815(,o)C(r)-2.815 E F2(\\)2.815 E F0 5.315(.T)C .314(h\
+e \214rst backquote not preceded by a backslash terminates the command \
+sub-)-5.315 F 3.886(stitution. When)108 717.6 R 1.386(using the $\()
+3.886 F F1(command).833 E F0 3.886(\)f)1.666 G 1.387
+(orm, all characters between the parentheses mak)-3.886 F 3.887(eu)-.1 G
+3.887(pt)-3.887 G 1.387(he com-)-3.887 F
+(mand; none are treated specially)108 729.6 Q(.)-.65 E(GNU Bash 5.0)72
+768 Q(2018 December 7)139.295 E(24)188.455 E 0 Cg EP
+%%Page: 25 25
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .894
+(Command substitutions may be nested.)108 84 R 2.494 -.8(To n)5.894 H
+.894(est when using the backquoted form, escape the inner back-).8 F
+(quotes with backslashes.)108 96 Q .422
+(If the substitution appears within double quotes, w)108 112.8 R .422
+(ord splitting and pathname e)-.1 F .423(xpansion are not performed)-.15
+F(on the results.)108 124.8 Q/F1 10/Times-Bold@0 SF
+(Arithmetic Expansion)87 141.6 Q F0 1.035(Arithmetic e)108 153.6 R 1.035
+(xpansion allo)-.15 F 1.035(ws the e)-.25 F -.25(va)-.25 G 1.034
+(luation of an arithmetic e).25 F 1.034
+(xpression and the substitution of the result.)-.15 F
+(The format for arithmetic e)108 165.6 Q(xpansion is:)-.15 E F1($\(\()
+144 182.4 Q/F2 10/Times-Italic@0 SF -.2(ex)C(pr).2 E(ession)-.37 E F1
+(\)\))A F0(The)108 199.2 Q F2 -.2(ex)2.665 G(pr).2 E(ession)-.37 E F0
+.165(is treated as if it were within double quotes, b)2.905 F .166
+(ut a double quote inside the parentheses is not)-.2 F .231
+(treated specially)108 211.2 R 5.231(.A)-.65 G .231(ll tok)-5.231 F .231
+(ens in the e)-.1 F .231(xpression under)-.15 F .231(go parameter and v)
+-.18 F .23(ariable e)-.25 F .23(xpansion, command substi-)-.15 F 1.059
+(tution, and quote remo)108 223.2 R -.25(va)-.15 G 3.559(l. The).25 F
+1.059(result is treated as the arithmetic e)3.559 F 1.06
+(xpression to be e)-.15 F -.25(va)-.25 G 3.56(luated. Arithmetic).25 F
+-.15(ex)108 235.2 S(pansions may be nested.).15 E 1.379(The e)108 252 R
+-.25(va)-.25 G 1.378
+(luation is performed according to the rules listed belo).25 F 3.878(wu)
+-.25 G(nder)-3.878 E/F3 9/Times-Bold@0 SF 1.378(ARITHMETIC EV)3.878 F
+(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0
+(If)5.878 E F2 -.2(ex)108 264 S(pr).2 E(ession)-.37 E F0(is in)2.74 E
+-.25(va)-.4 G(lid,).25 E F1(bash)2.5 E F0(prints a message indicating f)
+2.5 E(ailure and no substitution occurs.)-.1 E F1(Pr)87 280.8 Q
+(ocess Substitution)-.18 E F2(Pr)108 292.8 Q .405(ocess substitution)
+-.45 F F0(allo)2.905 E .405(ws a process')-.25 F 2.905(si)-.55 G .405
+(nput or output to be referred to using a \214lename.)-2.905 F .405
+(It tak)5.405 F .405(es the form)-.1 F(of)108 304.8 Q F1(<\()3.251 E F2
+(list)A F1(\)).833 E F0(or)3.251 E F1(>\()3.251 E F2(list)A F1(\)).833 E
+F0 5.751(.T)C .751(he process)-5.751 F F2(list)3.251 E F0 .751
+(is run asynchronously)3.251 F 3.251(,a)-.65 G .751
+(nd its input or output appears as a \214lename.)-3.251 F .147
+(This \214lename is passed as an ar)108 316.8 R .148
+(gument to the current command as the result of the e)-.18 F 2.648
+(xpansion. If)-.15 F(the)2.648 E F1(>\()2.648 E F2(list)A F1(\)).833 E
+F0 .56(form is used, writing to the \214le will pro)108 328.8 R .56
+(vide input for)-.15 F F2(list)3.059 E F0 5.559(.I)C 3.059(ft)-5.559 G
+(he)-3.059 E F1(<\()3.059 E F2(list)A F1(\)).833 E F0 .559
+(form is used, the \214le passed as an)3.059 F(ar)108 340.8 Q .308
+(gument should be read to obtain the output of)-.18 F F2(list)2.808 E F0
+5.308(.P)C .309(rocess substitution is supported on systems that sup-)
+-5.308 F(port named pipes \()108 352.8 Q F2(FIFOs)A F0 2.5(\)o)C 2.5(rt)
+-2.5 G(he)-2.5 E F1(/de)2.5 E(v/fd)-.15 E F0
+(method of naming open \214les.)2.5 E .897(When a)108 369.6 R -.25(va)
+-.2 G .896(ilable, process substitution is performed simultaneously wit\
+h parameter and v).25 F .896(ariable e)-.25 F(xpansion,)-.15 E
+(command substitution, and arithmetic e)108 381.6 Q(xpansion.)-.15 E F1
+-.75(Wo)87 398.4 S(rd Splitting).75 E F0 1.142
+(The shell scans the results of parameter e)108 410.4 R 1.143
+(xpansion, command substitution, and arithmetic e)-.15 F 1.143
+(xpansion that)-.15 F(did not occur within double quotes for)108 422.4 Q
+F2(wor)2.5 E 2.5(ds)-.37 G(plitting)-2.5 E F0(.).22 E .063
+(The shell treats each character of)108 439.2 R F3(IFS)2.563 E F0 .063
+(as a delimiter)2.313 F 2.563(,a)-.4 G .063
+(nd splits the results of the other e)-2.563 F .063(xpansions into w)
+-.15 F(ords)-.1 E .207(using these characters as \214eld terminators.)
+108 451.2 R(If)5.207 E F3(IFS)2.707 E F0 .207(is unset, or its v)2.457 F
+.207(alue is e)-.25 F(xactly)-.15 E F1(<space><tab><newline>)2.708 E F0
+(,)A .837(the def)108 463.2 R .837(ault, then sequences of)-.1 F F1
+(<space>)3.337 E F0(,)A F1(<tab>)3.337 E F0 3.337(,a)C(nd)-3.337 E F1
+(<newline>)3.337 E F0 .836(at the be)3.336 F .836
+(ginning and end of the results of)-.15 F .345(the pre)108 475.2 R .345
+(vious e)-.25 F .345(xpansions are ignored, and an)-.15 F 2.845(ys)-.15
+G .345(equence of)-2.845 F F3(IFS)2.845 E F0 .345
+(characters not at the be)2.595 F .345(ginning or end serv)-.15 F(es)
+-.15 E 1.237(to delimit w)108 487.2 R 3.737(ords. If)-.1 F F3(IFS)3.737
+E F0 1.236(has a v)3.486 F 1.236(alue other than the def)-.25 F 1.236
+(ault, then sequences of the whitespace characters)-.1 F F1(space)108
+499.2 Q F0(,)A F1(tab)2.506 E F0 2.506(,a)C(nd)-2.506 E F1(newline)2.506
+E F0 .006(are ignored at the be)2.506 F .006(ginning and end of the w)
+-.15 F .007(ord, as long as the whitespace charac-)-.1 F .921
+(ter is in the v)108 511.2 R .92(alue of)-.25 F F3(IFS)3.42 E F0(\(an)
+3.17 E F3(IFS)3.42 E F0 .92(whitespace character\).)3.17 F(An)5.92 E
+3.42(yc)-.15 G .92(haracter in)-3.42 F F3(IFS)3.42 E F0 .92(that is not)
+3.17 F F3(IFS)3.42 E F0(whitespace,)3.17 E .428(along with an)108 523.2
+R 2.928(ya)-.15 G(djacent)-2.928 E F3(IFS)2.928 E F0 .428
+(whitespace characters, delimits a \214eld.)2.678 F 2.928(As)5.428 G
+.428(equence of)-2.928 F F3(IFS)2.928 E F0 .429(whitespace charac-)2.679
+F(ters is also treated as a delimiter)108 535.2 Q 5(.I)-.55 G 2.5(ft)-5
+G(he v)-2.5 E(alue of)-.25 E F3(IFS)2.5 E F0(is null, no w)2.25 E
+(ord splitting occurs.)-.1 E 1.927(Explicit null ar)108 552 R 1.927
+(guments \()-.18 F F1 .833("").833 G F0(or)3.594 E F1 .833<0808>5.26 G
+F0 4.427(\)a)C 1.927
+(re retained and passed to commands as empty strings.)-4.427 F(Unquoted)
+6.927 E .484(implicit null ar)108 564 R .484
+(guments, resulting from the e)-.18 F .484
+(xpansion of parameters that ha)-.15 F .785 -.15(ve n)-.2 H 2.985(ov).15
+G .485(alues, are remo)-3.235 F -.15(ve)-.15 G 2.985(d. If).15 F(a)2.985
+E 1.572(parameter with no v)108 576 R 1.572(alue is e)-.25 F 1.571
+(xpanded within double quotes, a null ar)-.15 F 1.571
+(gument results and is retained and)-.18 F .723
+(passed to a command as an empty string.)108 588 R .724
+(When a quoted null ar)5.724 F .724(gument appears as part of a w)-.18 F
+.724(ord whose)-.1 F -.15(ex)108 600 S .176
+(pansion is non-null, the null ar).15 F .176(gument is remo)-.18 F -.15
+(ve)-.15 G 2.676(d. That).15 F .176(is, the w)2.676 F(ord)-.1 E/F5 10
+/Courier@0 SF -5.167<ad64082008>2.676 F F0(becomes)2.675 E F5<ad64>2.675
+E F0 .175(after w)2.675 F .175(ord split-)-.1 F(ting and null ar)108 612
+Q(gument remo)-.18 E -.25(va)-.15 G(l.).25 E(Note that if no e)108 628.8
+Q(xpansion occurs, no splitting is performed.)-.15 E F1 -.1(Pa)87 645.6
+S(thname Expansion).1 E F0 .37(After w)108 657.6 R .37
+(ord splitting, unless the)-.1 F F1<ad66>2.87 E F0 .37
+(option has been set,)2.87 F F1(bash)2.87 E F0 .371(scans each w)2.871 F
+.371(ord for the characters)-.1 F F1(*)2.871 E F0(,)A F1(?)2.871 E F0
+2.871(,a)C(nd)-2.871 E F1([)2.871 E F0(.)A .678
+(If one of these characters appears, then the w)108 669.6 R .677
+(ord is re)-.1 F -.05(ga)-.15 G .677(rded as a).05 F F2(pattern)3.177 E
+F0 3.177(,a).24 G .677(nd replaced with an alphabeti-)-3.177 F .562
+(cally sorted list of \214lenames matching the pattern \(see)108 681.6 R
+F3 -.09(Pa)3.062 G(tter).09 E 2.812(nM)-.135 G(atching)-2.812 E F0(belo)
+2.812 E 3.062(w\). If)-.25 F .562(no matching \214lenames)3.062 F .009
+(are found, and the shell option)108 693.6 R F1(nullglob)2.509 E F0 .008
+(is not enabled, the w)2.509 F .008(ord is left unchanged.)-.1 F .008
+(If the)5.008 F F1(nullglob)2.508 E F0 .008(option is)2.508 F .442
+(set, and no matches are found, the w)108 705.6 R .442(ord is remo)-.1 F
+-.15(ve)-.15 G 2.942(d. If).15 F(the)2.943 E F1(failglob)2.943 E F0 .443
+(shell option is set, and no matches are)2.943 F 1.38
+(found, an error message is printed and the command is not e)108 717.6 R
+-.15(xe)-.15 G 3.88(cuted. If).15 F 1.38(the shell option)3.88 F F1
+(nocaseglob)3.88 E F0(is)3.88 E .103
+(enabled, the match is performed without re)108 729.6 R -.05(ga)-.15 G
+.104(rd to the case of alphabetic characters.).05 F .104
+(When a pattern is used)5.104 F(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(25)188.455 E 0 Cg EP
+%%Page: 26 26
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .378
+(for pathname e)108 84 R .378(xpansion, the character)-.15 F/F1 10
+/Times-Bold@0 SF -.63(``)2.878 G -.55(.').63 G(')-.08 E F0 .378
+(at the start of a name or immediately follo)5.378 F .377
+(wing a slash must be)-.25 F 1.353(matched e)108 96 R(xplicitly)-.15 E
+3.853(,u)-.65 G 1.353(nless the shell option)-3.853 F F1(dotglob)3.854 E
+F0 1.354(is set.)3.854 F 1.354(The \214lenames)6.354 F F1 -.63(``)3.854
+G -.55(.').63 G(')-.08 E F0(and)6.354 E F1 -.63(``)3.854 G(..).63 E -.63
+('')-.55 G F0 1.354(must al)6.984 F -.1(wa)-.1 G 1.354(ys be).1 F .486
+(matched e)108 108 R(xplicitly)-.15 E 2.986(,e)-.65 G -.15(ve)-3.236 G
+2.986(ni).15 G(f)-2.986 E F1(dotglob)2.986 E F0 .485(is set.)2.986 F
+.485(In other cases, the)5.485 F F1 -.63(``)2.985 G -.55(.').63 G(')-.08
+E F0 .485(character is not treated specially)5.485 F 5.485(.W)-.65 G
+(hen)-5.485 E .114(matching a pathname, the slash character must al)108
+120 R -.1(wa)-.1 G .114(ys be matched e).1 F .115
+(xplicitly by a slash in the pattern, b)-.15 F .115(ut in)-.2 F .581
+(other matching conte)108 132 R .581
+(xts it can be matched by a special pattern character as described belo)
+-.15 F 3.081(wu)-.25 G(nder)-3.081 E/F2 9/Times-Bold@0 SF -.09(Pa)3.081
+G(tter).09 E(n)-.135 E(Matching)108 144 Q/F3 9/Times-Roman@0 SF(.)A F0
+.072(See the description of)4.572 F F1(shopt)2.572 E F0(belo)2.572 E
+2.572(wu)-.25 G(nder)-2.572 E F2 .073(SHELL B)2.572 F(UIL)-.09 E .073
+(TIN COMMANDS)-.828 F F0 .073(for a description of the)2.323 F F1
+(nocaseglob)108 156 Q F0(,)A F1(nullglob)2.5 E F0(,)A F1(failglob)2.5 E
+F0 2.5(,a)C(nd)-2.5 E F1(dotglob)2.5 E F0(shell options.)2.5 E(The)108
+172.8 Q F2(GLOBIGNORE)2.631 E F0 .131(shell v)2.381 F .131
+(ariable may be used to restrict the set of \214le names matching a)-.25
+F/F4 10/Times-Italic@0 SF(pattern)2.63 E F0 5.13(.I).24 G(f)-5.13 E F2
+(GLO-)2.63 E(BIGNORE)108 184.8 Q F0 2.015(is set, each matching \214le \
+name that also matches one of the patterns in)4.264 F F2(GLOBIGNORE)
+4.515 E F0(is)4.265 E(remo)108 196.8 Q -.15(ve)-.15 G 3.915(df).15 G
+1.415(rom the list of matches.)-3.915 F 1.415(If the)6.415 F F1
+(nocaseglob)3.915 E F0 1.415(option is set, the matching ag)3.915 F
+1.414(ainst the patterns in)-.05 F F2(GLOBIGNORE)108 208.8 Q F0 .146
+(is performed without re)2.396 F -.05(ga)-.15 G .146(rd to case.).05 F
+.146(The \214lenames)5.146 F F1 -.63(``)2.646 G -.55(.').63 G(')-.08 E
+F0(and)5.147 E F1 -.63(``)2.647 G(..).63 E -.63('')-.55 G F0 .147
+(are al)5.777 F -.1(wa)-.1 G .147(ys ignored when).1 F F2(GLOBIGNORE)108
+220.8 Q F0 .827(is set and not null.)3.077 F(Ho)5.827 E(we)-.25 E -.15
+(ve)-.25 G 1.627 -.4(r, s).15 H(etting).4 E F2(GLOBIGNORE)3.327 E F0
+.827(to a non-null v)3.077 F .827(alue has the ef)-.25 F .827(fect of)
+-.25 F .682(enabling the)108 232.8 R F1(dotglob)3.182 E F0 .682
+(shell option, so all other \214lenames be)3.182 F .682(ginning with a)
+-.15 F F1 -.63(``)3.182 G -.55(.').63 G(')-.08 E F0 .682(will match.)
+5.682 F 2.283 -.8(To g)5.683 H .683(et the old).8 F(beha)108 244.8 Q
+1.185(vior of ignoring \214lenames be)-.2 F 1.185(ginning with a)-.15 F
+F1 -.63(``)3.684 G -.55(.').63 G(')-.08 E F0 3.684(,m)C(ak)-3.684 E(e)
+-.1 E F1 -.63(``)3.684 G(.*').63 E(')-.63 E F0 1.184
+(one of the patterns in)6.184 F F2(GLOBIGNORE)3.684 E F3(.)A F0(The)108
+256.8 Q F1(dotglob)3.131 E F0 .631(option is disabled when)3.131 F F2
+(GLOBIGNORE)3.132 E F0 .632(is unset.)2.882 F .632
+(The pattern matching honors the setting of)5.632 F(the)108 268.8 Q F1
+(extglob)2.5 E F0(shell option.)2.5 E F1 -.1(Pa)108 285.6 S(tter).1 E
+2.5(nM)-.15 G(atching)-2.5 E F0(An)108 302.4 Q 3.138(yc)-.15 G .638(har\
+acter that appears in a pattern, other than the special pattern charact\
+ers described belo)-3.138 F 1.938 -.65(w, m)-.25 H(atches).65 E 3.62
+(itself. The)108 314.4 R 1.12(NUL character may not occur in a pattern.)
+3.62 F 3.62(Ab)6.12 G 1.12(ackslash escapes the follo)-3.62 F 1.12
+(wing character; the)-.25 F .576
+(escaping backslash is discarded when matching.)108 326.4 R .576
+(The special pattern characters must be quoted if the)5.576 F 3.076(ya)
+-.15 G(re)-3.076 E(to be matched literally)108 338.4 Q(.)-.65 E
+(The special pattern characters ha)108 355.2 Q .3 -.15(ve t)-.2 H
+(he follo).15 E(wing meanings:)-.25 E F1(*)144 372 Q F0 .376(Matches an)
+180 372 R 2.876(ys)-.15 G .376(tring, including the null string.)-2.876
+F .376(When the)5.376 F F1(globstar)2.876 E F0 .377
+(shell option is enabled,)2.876 F(and)180 384 Q F1(*)3.275 E F0 .775
+(is used in a pathname e)3.275 F .775(xpansion conte)-.15 F .775(xt, tw)
+-.15 F 3.275(oa)-.1 G(djacent)-3.275 E F1(*)3.275 E F0 3.275(su)C .775
+(sed as a single pattern)-3.275 F 1.058(will match all \214les and zero\
+ or more directories and subdirectories.)180 396 R 1.058(If follo)6.058
+F 1.058(wed by a)-.25 F F1(/)3.558 E F0(,)A(tw)180 408 Q 2.5(oa)-.1 G
+(djacent)-2.5 E F1(*)2.5 E F0 2.5(sw)C
+(ill match only directories and subdirectories.)-2.5 E F1(?)144 420 Q F0
+(Matches an)180 420 Q 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E F1
+([...])144 432 Q F0 .579(Matches an)180 432 R 3.079(yo)-.15 G .579
+(ne of the enclosed characters.)-3.079 F 3.079(Ap)5.579 G .578
+(air of characters separated by a h)-3.079 F(yphen)-.05 E .684
+(denotes a)180 444 R F4 -.15(ra)3.184 G(ng).15 E 3.184(ee)-.1 G(xpr)
+-3.384 E(ession)-.37 E F0 3.184(;a)C .984 -.15(ny c)-3.184 H .684
+(haracter that f).15 F .684(alls between those tw)-.1 F 3.185(oc)-.1 G
+.685(haracters, inclu-)-3.185 F(si)180 456 Q -.15(ve)-.25 G 3.713(,u).15
+G 1.213(sing the current locale')-3.713 F 3.712(sc)-.55 G 1.212
+(ollating sequence and character set, is matched.)-3.712 F 1.212(If the)
+6.212 F 1.123(\214rst character follo)180 468 R 1.123(wing the)-.25 F F1
+([)3.623 E F0 1.123(is a)3.623 F F1(!)3.623 E F0 1.124(or a)6.123 F F1
+(^)3.624 E F0 1.124(then an)3.624 F 3.624(yc)-.15 G 1.124
+(haracter not enclosed is matched.)-3.624 F .895
+(The sorting order of characters in range e)180 480 R .894
+(xpressions is determined by the current locale)-.15 F .375(and the v)
+180 492 R .375(alues of the)-.25 F F2(LC_COLLA)2.875 E(TE)-.855 E F0(or)
+2.625 E F2(LC_ALL)2.875 E F0 .375(shell v)2.625 F .375
+(ariables, if set.)-.25 F 1.976 -.8(To o)5.376 H .376(btain the tra-).8
+F .068(ditional interpretation of range e)180 504 R .068
+(xpressions, where)-.15 F F1([a\255d])2.568 E F0 .067(is equi)2.567 F
+-.25(va)-.25 G .067(lent to).25 F F1([abcd])2.567 E F0 2.567(,s)C .067
+(et v)-2.567 F(alue)-.25 E .156(of the)180 516 R F1(LC_ALL)2.656 E F0
+.156(shell v)2.656 F .156(ariable to)-.25 F F1(C)2.657 E F0 2.657(,o)C
+2.657(re)-2.657 G .157(nable the)-2.657 F F1(globasciiranges)2.657 E F0
+.157(shell option.)2.657 F(A)5.157 E F1<ad>2.657 E F0(may)2.657 E .193(\
+be matched by including it as the \214rst or last character in the set.)
+180 528 R(A)5.193 E F1(])2.693 E F0 .193(may be matched by)2.693 F
+(including it as the \214rst character in the set.)180 540 Q -.4(Wi)180
+558 S(thin).4 E F1([)3.07 E F0(and)3.07 E F1(])3.07 E F0(,)A F4 -.15(ch)
+3.07 G(ar).15 E .571(acter classes)-.15 F F0 .571
+(can be speci\214ed using the syntax)3.071 F F1([:)3.071 E F4(class)A F1
+(:])A F0 3.071(,w)C(here)-3.071 E F4(class)3.071 E F0
+(is one of the follo)180 570 Q
+(wing classes de\214ned in the POSIX standard:)-.25 E F1 8.173
+(alnum alpha ascii blank cntrl digit graph lo)180 582 R 8.173
+(wer print punct space)-.1 F 5(upper w)180 594 R 5(ord xdigit)-.1 F F0
+4.289(Ac)180 606 S 1.789(haracter class matches an)-4.289 F 4.289(yc)
+-.15 G 1.789(haracter belonging to that class.)-4.289 F(The)6.789 E F1
+-.1(wo)4.29 G(rd).1 E F0(character)4.29 E
+(class matches letters, digits, and the character _.)180 618 Q -.4(Wi)
+180 636 S(thin).4 E F1([)4.537 E F0(and)4.537 E F1(])4.537 E F0 4.537
+(,a)C(n)-4.537 E F4 2.037(equivalence class)4.537 F F0 2.036
+(can be speci\214ed using the syntax)4.536 F F1([=)4.536 E F4(c)A F1(=])
+A F0 4.536(,w)C(hich)-4.536 E .125(matches all characters with the same\
+ collation weight \(as de\214ned by the current locale\) as)180 648 R
+(the character)180 660 Q F4(c)2.5 E F0(.)A -.4(Wi)180 678 S(thin).4 E F1
+([)2.5 E F0(and)2.5 E F1(])2.5 E F0 2.5(,t)C(he syntax)-2.5 E F1([.)2.5
+E F4(symbol)A F1(.])A F0(matches the collating symbol)2.5 E F4(symbol)
+2.5 E F0(.)A .705(If the)108 694.8 R F1(extglob)3.205 E F0 .705
+(shell option is enabled using the)3.205 F F1(shopt)3.205 E F0 -.2(bu)
+3.205 G .704(iltin, se).2 F -.15(ve)-.25 G .704(ral e).15 F .704
+(xtended pattern matching operators)-.15 F .255(are recognized.)108
+706.8 R .255(In the follo)5.255 F .255(wing description, a)-.25 F F4
+(pattern-list)2.755 E F0 .255
+(is a list of one or more patterns separated by a)2.755 F F1(|)2.756 E
+F0(.)A(Composite patterns may be formed using one or more of the follo)
+108 718.8 Q(wing sub-patterns:)-.25 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(26)188.455 E 0 Cg EP
+%%Page: 27 27
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(?\()144 84 Q/F2 10/Times-Italic@0 SF(pattern-list).833 E F1(\)).833 E
+F0(Matches zero or one occurrence of the gi)180 96 Q -.15(ve)-.25 G 2.5
+(np).15 G(atterns)-2.5 E F1(*\()144 108 Q F2(pattern-list).833 E F1(\))
+.833 E F0(Matches zero or more occurrences of the gi)180 120 Q -.15(ve)
+-.25 G 2.5(np).15 G(atterns)-2.5 E F1(+\()144 132 Q F2(pattern-list).833
+E F1(\)).833 E F0(Matches one or more occurrences of the gi)180 144 Q
+-.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(@\()144 156 Q F2
+(pattern-list).833 E F1(\)).833 E F0(Matches one of the gi)180 168 Q
+-.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(!\()144 180 Q F2
+(pattern-list).833 E F1(\)).833 E F0(Matches an)180 192 Q(ything e)-.15
+E(xcept one of the gi)-.15 E -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E
+.969(Complicated e)108 208.8 R .969(xtended pattern matching ag)-.15 F
+.969(ainst long strings is slo)-.05 F 2.268 -.65(w, e)-.25 H .968
+(specially when the patterns contain).65 F 1.23
+(alternations and the strings contain multiple matches.)108 220.8 R 1.23
+(Using separate matches ag)6.23 F 1.23(ainst shorter strings, or)-.05 F
+(using arrays of strings instead of a single long string, may be f)108
+232.8 Q(aster)-.1 E(.)-.55 E F1(Quote Remo)87 249.6 Q -.1(va)-.1 G(l).1
+E F0 1.113(After the preceding e)108 261.6 R 1.113
+(xpansions, all unquoted occurrences of the characters)-.15 F F1(\\)
+3.613 E F0(,)A F1<08>3.612 E F0 3.612(,a)C(nd)-3.612 E F1(")4.445 E F0
+1.112(that did not result)4.445 F(from one of the abo)108 273.6 Q .3
+-.15(ve ex)-.15 H(pansions are remo).15 E -.15(ve)-.15 G(d.).15 E/F3
+10.95/Times-Bold@0 SF(REDIRECTION)72 290.4 Q F0 .545
+(Before a command is e)108 302.4 R -.15(xe)-.15 G .545
+(cuted, its input and output may be).15 F F2 -.37(re)3.045 G(dir).37 E
+(ected)-.37 E F0 .545(using a special notation interpreted)3.815 F .405
+(by the shell.)108 314.4 R .405(Redirection allo)5.405 F .405(ws comman\
+ds' \214le handles to be duplicated, opened, closed, made to refer to)
+-.25 F(dif)108 326.4 Q 1.019(ferent \214les, and can change the \214les\
+ the command reads from and writes to.)-.25 F 1.02
+(Redirection may also be)6.02 F .215
+(used to modify \214le handles in the current shell e)108 338.4 R -.15
+(xe)-.15 G .215(cution en).15 F 2.715(vironment. The)-.4 F(follo)2.715 E
+.215(wing redirection operators)-.25 F .875(may precede or appear an)108
+350.4 R .875(ywhere within a)-.15 F F2 .875(simple command)3.715 F F0
+.875(or may follo)4.145 F 3.376(wa)-.25 G F2(command)A F0 5.876(.R).77 G
+.876(edirections are)-5.876 F(processed in the order the)108 362.4 Q 2.5
+(ya)-.15 G(ppear)-2.5 E 2.5(,f)-.4 G(rom left to right.)-2.5 E .771(Eac\
+h redirection that may be preceded by a \214le descriptor number may in\
+stead be preceded by a w)108 379.2 R .771(ord of)-.1 F .292(the form {)
+108 391.2 R F2(varname)A F0 2.793(}. In)B .293
+(this case, for each redirection operator e)2.793 F .293
+(xcept >&- and <&-, the shell will allocate)-.15 F 3.18<618c>108 403.2 S
+.679(le descriptor greater than or equal to 10 and assign it to)-3.18 F
+F2(varname)3.179 E F0 5.679(.I)C 3.179(f>)-5.679 G .679
+(&- or <&- is preceded by {)-3.179 F F2(var)A(-)-.2 E(name)108 415.2 Q
+F0 .599(}, the v)B .599(alue of)-.25 F F2(varname)3.099 E F0 .599
+(de\214nes the \214le descriptor to close.)3.099 F .6(If {)5.6 F F2
+(varname)A F0 3.1(}i)C 3.1(ss)-3.1 G .6(upplied, the redirection)-3.1 F
+1.238(persists be)108 427.2 R 1.238(yond the scope of the command, allo)
+-.15 F 1.238(wing the shell programmer to manage the \214le descriptor)
+-.25 F(himself.)108 439.2 Q .283(In the follo)108 456 R .284(wing descr\
+iptions, if the \214le descriptor number is omitted, and the \214rst ch\
+aracter of the redirect-)-.25 F .513(ion operator is)108 468 R F1(<)
+3.012 E F0 3.012(,t)C .512
+(he redirection refers to the standard input \(\214le descriptor 0\).)
+-3.012 F .512(If the \214rst character of the)5.512 F
+(redirection operator is)108 480 Q F1(>)2.5 E F0 2.5(,t)C
+(he redirection refers to the standard output \(\214le descriptor 1\).)
+-2.5 E .824(The w)108 496.8 R .824(ord follo)-.1 F .824
+(wing the redirection operator in the follo)-.25 F .825
+(wing descriptions, unless otherwise noted, is sub-)-.25 F .463
+(jected to brace e)108 508.8 R .463(xpansion, tilde e)-.15 F .462
+(xpansion, parameter and v)-.15 F .462(ariable e)-.25 F .462
+(xpansion, command substitution, arith-)-.15 F .866(metic e)108 520.8 R
+.866(xpansion, quote remo)-.15 F -.25(va)-.15 G .866(l, pathname e).25 F
+.867(xpansion, and w)-.15 F .867(ord splitting.)-.1 F .867(If it e)5.867
+F .867(xpands to more than one)-.15 F -.1(wo)108 532.8 S(rd,).1 E F1
+(bash)2.5 E F0(reports an error)2.5 E(.)-.55 E
+(Note that the order of redirections is signi\214cant.)108 549.6 Q -.15
+(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 566.4 Q F1(>)2.5
+E F0(dirlist 2)2.5 E F1(>&)A F0(1)A
+(directs both standard output and standard error to the \214le)108 583.2
+Q F2(dirlist)2.5 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144 600
+Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .527
+(directs only the standard output to \214le)108 616.8 R F2(dirlist)3.027
+E F0 3.027(,b).68 G .527(ecause the standard error w)-3.027 F .527
+(as duplicated from the standard)-.1 F
+(output before the standard output w)108 628.8 Q(as redirected to)-.1 E
+F2(dirlist)2.5 E F0(.).68 E F1(Bash)108 645.6 Q F0 .598(handles se)3.098
+F -.15(ve)-.25 G .598(ral \214lenames specially when the).15 F 3.099(ya)
+-.15 G .599(re used in redirections, as described in the follo)-3.099 F
+(wing)-.25 E 3.478(table. If)108 657.6 R .978
+(the operating system on which)3.478 F F1(bash)3.478 E F0 .978
+(is running pro)3.478 F .977
+(vides these special \214les, bash will use them;)-.15 F
+(otherwise it will emulate them internally with the beha)108 669.6 Q
+(vior described belo)-.2 E -.65(w.)-.25 G F1(/de)144 686.4 Q(v/fd/)-.15
+E F2(fd)A F0(If)180 698.4 Q F2(fd)2.5 E F0(is a v)2.5 E(alid inte)-.25 E
+(ger)-.15 E 2.5<2c8c>-.4 G(le descriptor)-2.5 E F2(fd)2.5 E F0
+(is duplicated.)2.5 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E
+(27)188.455 E 0 Cg EP
+%%Page: 28 28
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(/de)144 84 Q(v/stdin)-.15 E F0(File descriptor 0 is duplicated.)180
+96 Q F1(/de)144 108 Q(v/stdout)-.15 E F0
+(File descriptor 1 is duplicated.)180 120 Q F1(/de)144 132 Q(v/stderr)
+-.15 E F0(File descriptor 2 is duplicated.)180 144 Q F1(/de)144 156 Q
+(v/tcp/)-.15 E/F2 10/Times-Italic@0 SF(host)A F1(/)A F2(port)A F0(If)180
+168 Q F2(host)2.996 E F0 .496(is a v)2.996 F .496
+(alid hostname or Internet address, and)-.25 F F2(port)2.997 E F0 .497
+(is an inte)2.997 F .497(ger port number or ser)-.15 F(-)-.2 E
+(vice name,)180 180 Q F1(bash)2.5 E F0
+(attempts to open the corresponding TCP sock)2.5 E(et.)-.1 E F1(/de)144
+192 Q(v/udp/)-.15 E F2(host)A F1(/)A F2(port)A F0(If)180 204 Q F2(host)
+2.997 E F0 .497(is a v)2.997 F .497
+(alid hostname or Internet address, and)-.25 F F2(port)2.996 E F0 .496
+(is an inte)2.996 F .496(ger port number or ser)-.15 F(-)-.2 E
+(vice name,)180 216 Q F1(bash)2.5 E F0
+(attempts to open the corresponding UDP sock)2.5 E(et.)-.1 E 2.5(Af)108
+232.8 S(ailure to open or create a \214le causes the redirection to f)
+-2.6 E(ail.)-.1 E .946(Redirections using \214le descriptors greater th\
+an 9 should be used with care, as the)108 249.6 R 3.447(ym)-.15 G .947
+(ay con\215ict with \214le)-3.447 F
+(descriptors the shell uses internally)108 261.6 Q(.)-.65 E F1(Redir)87
+278.4 Q(ecting Input)-.18 E F0 .391
+(Redirection of input causes the \214le whose name results from the e)
+108 290.4 R .391(xpansion of)-.15 F F2(wor)3.231 E(d)-.37 E F0 .391
+(to be opened for read-)3.661 F(ing on \214le descriptor)108 302.4 Q F2
+(n)2.5 E F0 2.5(,o).24 G 2.5(rt)-2.5 G
+(he standard input \(\214le descriptor 0\) if)-2.5 E F2(n)2.86 E F0
+(is not speci\214ed.)2.74 E
+(The general format for redirecting input is:)108 319.2 Q([)144 336 Q F2
+(n)A F0(])A F1(<)A F2(wor)A(d)-.37 E F1(Redir)87 352.8 Q(ecting Output)
+-.18 E F0 .174
+(Redirection of output causes the \214le whose name results from the e)
+108 364.8 R .175(xpansion of)-.15 F F2(wor)3.015 E(d)-.37 E F0 .175
+(to be opened for writ-)3.445 F .825(ing on \214le descriptor)108 376.8
+R F2(n)3.325 E F0 3.325(,o).24 G 3.325(rt)-3.325 G .824
+(he standard output \(\214le descriptor 1\) if)-3.325 F F2(n)3.684 E F0
+.824(is not speci\214ed.)3.564 F .824(If the \214le does not)5.824 F
+-.15(ex)108 388.8 S(ist it is created; if it does e).15 E
+(xist it is truncated to zero size.)-.15 E
+(The general format for redirecting output is:)108 405.6 Q([)144 422.4 Q
+F2(n)A F0(])A F1(>)A F2(wor)A(d)-.37 E F0 .154
+(If the redirection operator is)108 439.2 R F1(>)2.654 E F0 2.654(,a)C
+.154(nd the)-2.654 F F1(noclob)2.654 E(ber)-.1 E F0 .154(option to the)
+2.654 F F1(set)2.655 E F0 -.2(bu)2.655 G .155
+(iltin has been enabled, the redirection).2 F .658(will f)108 451.2 R
+.658(ail if the \214le whose name results from the e)-.1 F .658
+(xpansion of)-.15 F F2(wor)3.158 E(d)-.37 E F0 -.15(ex)3.158 G .657
+(ists and is a re).15 F .657(gular \214le.)-.15 F .657(If the redi-)
+5.657 F .408(rection operator is)108 463.2 R F1(>|)2.909 E F0 2.909(,o)C
+2.909(rt)-2.909 G .409(he redirection operator is)-2.909 F F1(>)2.909 E
+F0 .409(and the)2.909 F F1(noclob)2.909 E(ber)-.1 E F0 .409
+(option to the)2.909 F F1(set)2.909 E F0 -.2(bu)2.909 G .409
+(iltin command).2 F(is not enabled, the redirection is attempted e)108
+475.2 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214le named by)
+-2.5 E F2(wor)2.5 E(d)-.37 E F0 -.15(ex)2.5 G(ists.).15 E F1 -.25(Ap)87
+492 S(pending Redir).25 E(ected Output)-.18 E F0 .642
+(Redirection of output in this f)108 504 R .642
+(ashion causes the \214le whose name results from the e)-.1 F .641
+(xpansion of)-.15 F F2(wor)3.481 E(d)-.37 E F0 .641(to be)3.911 F .473
+(opened for appending on \214le descriptor)108 516 R F2(n)2.973 E F0
+2.974(,o).24 G 2.974(rt)-2.974 G .474
+(he standard output \(\214le descriptor 1\) if)-2.974 F F2(n)3.334 E F0
+.474(is not speci\214ed.)3.214 F(If)5.474 E(the \214le does not e)108
+528 Q(xist it is created.)-.15 E
+(The general format for appending output is:)108 544.8 Q([)144 561.6 Q
+F2(n)A F0(])A F1(>>)A F2(wor)A(d)-.37 E F1(Redir)87 578.4 Q
+(ecting Standard Output and Standard Err)-.18 E(or)-.18 E F0 .249
+(This construct allo)108 590.4 R .249(ws both the standard output \(\
+\214le descriptor 1\) and the standard error output \(\214le descrip-)
+-.25 F(tor 2\) to be redirected to the \214le whose name is the e)108
+602.4 Q(xpansion of)-.15 E F2(wor)2.5 E(d)-.37 E F0(.).77 E
+(There are tw)108 619.2 Q 2.5(of)-.1 G
+(ormats for redirecting standard output and standard error:)-2.5 E F1
+(&>)144 636 Q F2(wor)A(d)-.37 E F0(and)108 648 Q F1(>&)144 660 Q F2(wor)
+A(d)-.37 E F0(Of the tw)108 676.8 Q 2.5(of)-.1 G
+(orms, the \214rst is preferred.)-2.5 E(This is semantically equi)5 E
+-.25(va)-.25 G(lent to).25 E F1(>)144 693.6 Q F2(wor)A(d)-.37 E F0(2)2.5
+E F1(>&)A F0(1)A .114(When using the second form,)108 710.4 R F2(wor)
+2.614 E(d)-.37 E F0 .114(may not e)2.614 F .114(xpand to a number or)
+-.15 F F1<ad>2.614 E F0 5.114(.I)C 2.614(fi)-5.114 G 2.615(td)-2.614 G
+.115(oes, other redirection operators)-2.615 F(apply \(see)108 722.4 Q
+F1(Duplicating File Descriptors)2.5 E F0(belo)2.5 E
+(w\) for compatibility reasons.)-.25 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(28)188.455 E 0 Cg EP
+%%Page: 29 29
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF -.25(Ap)87 84 S(pending Standard Output and Standard Err).25 E(or)
+-.18 E F0 .249(This construct allo)108 96 R .249(ws both the standard o\
+utput \(\214le descriptor 1\) and the standard error output \(\214le de\
+scrip-)-.25 F(tor 2\) to be appended to the \214le whose name is the e)
+108 108 Q(xpansion of)-.15 E/F2 10/Times-Italic@0 SF(wor)2.5 E(d)-.37 E
+F0(.).77 E
+(The format for appending standard output and standard error is:)108
+124.8 Q F1(&>>)144 141.6 Q F2(wor)A(d)-.37 E F0
+(This is semantically equi)108 158.4 Q -.25(va)-.25 G(lent to).25 E F1
+(>>)144 175.2 Q F2(wor)A(d)-.37 E F0(2)2.5 E F1(>&)A F0(1)A(\(see)108
+192 Q F1(Duplicating File Descriptors)2.5 E F0(belo)2.5 E(w\).)-.25 E F1
+(Her)87 208.8 Q 2.5(eD)-.18 G(ocuments)-2.5 E F0 .33(This type of redir\
+ection instructs the shell to read input from the current source until \
+a line containing only)108 220.8 R F2(delimiter)108.35 232.8 Q F0 .615
+(\(with no trailing blanks\) is seen.)3.845 F .615
+(All of the lines read up to that point are then used as the stan-)5.615
+F(dard input \(or \214le descriptor)108 244.8 Q F2(n)2.5 E F0(if)2.5 E
+F2(n)2.5 E F0(is speci\214ed\) for a command.)2.5 E
+(The format of here-documents is:)108 261.6 Q([)144 278.4 Q F2(n)A F0(])
+A F1(<<)A F0([)A F1<ad>A F0(])A F2(wor)A(d)-.37 E(her)164 290.4 Q
+(e-document)-.37 E(delimiter)144 302.4 Q F0 .301(No parameter and v)108
+319.2 R .302(ariable e)-.25 F .302
+(xpansion, command substitution, arithmetic e)-.15 F .302
+(xpansion, or pathname e)-.15 F(xpansion)-.15 E .415(is performed on)108
+331.2 R F2(wor)2.915 E(d)-.37 E F0 5.415(.I).77 G 2.915(fa)-5.415 G .715
+-.15(ny p)-2.915 H .415(art of).15 F F2(wor)3.255 E(d)-.37 E F0 .415
+(is quoted, the)3.685 F F2(delimiter)3.265 E F0 .415
+(is the result of quote remo)3.645 F -.25(va)-.15 G 2.915(lo).25 G(n)
+-2.915 E F2(wor)2.915 E(d)-.37 E F0(,).77 E .773
+(and the lines in the here-document are not e)108 343.2 R 3.274
+(xpanded. If)-.15 F F2(wor)3.274 E(d)-.37 E F0 .774
+(is unquoted, all lines of the here-document)3.274 F 2.59
+(are subjected to parameter e)108 355.2 R 2.59
+(xpansion, command substitution, and arithmetic e)-.15 F 2.59
+(xpansion, the character)-.15 F(sequence)108 367.2 Q F1(\\<newline>)2.5
+E F0(is ignored, and)2.5 E F1(\\)2.5 E F0
+(must be used to quote the characters)2.5 E F1(\\)2.5 E F0(,)A F1($)2.5
+E F0 2.5(,a)C(nd)-2.5 E F1<92>2.5 E F0(.)A .601
+(If the redirection operator is)108 384 R F1(<<\255)3.101 E F0 3.101(,t)
+C .601(hen all leading tab characters are stripped from input lines and\
+ the line)-3.101 F(containing)108 396 Q F2(delimiter)2.5 E F0 5(.T).73 G
+(his allo)-5 E
+(ws here-documents within shell scripts to be indented in a natural f)
+-.25 E(ashion.)-.1 E F1(Her)87 412.8 Q 2.5(eS)-.18 G(trings)-2.5 E F0
+2.5(Av)108 424.8 S(ariant of here documents, the format is:)-2.75 E([)
+144 441.6 Q F2(n)A F0(])A F1(<<<)A F2(wor)A(d)-.37 E F0(The)108 458.4 Q
+F2(wor)3.292 E(d)-.37 E F0(under)3.292 E .792(goes tilde e)-.18 F .792
+(xpansion, parameter and v)-.15 F .792(ariable e)-.25 F .791
+(xpansion, command substitution, arithmetic)-.15 F -.15(ex)108 470.4 S
+1.187(pansion, and quote remo).15 F -.25(va)-.15 G 3.687(l. P).25 F
+1.187(athname e)-.15 F 1.187(xpansion and w)-.15 F 1.187
+(ord splitting are not performed.)-.1 F 1.188(The result is)6.187 F .375
+(supplied as a single string, with a ne)108 482.4 R .374(wline appended\
+, to the command on its standard input \(or \214le descrip-)-.25 F(tor)
+108 494.4 Q F2(n)2.5 E F0(if)2.5 E F2(n)2.5 E F0(is speci\214ed\).)2.5 E
+F1(Duplicating File Descriptors)87 511.2 Q F0(The redirection operator)
+108 523.2 Q([)144 540 Q F2(n)A F0(])A F1(<&)A F2(wor)A(d)-.37 E F0 .126
+(is used to duplicate input \214le descriptors.)108 556.8 R(If)5.127 E
+F2(wor)2.967 E(d)-.37 E F0 -.15(ex)3.397 G .127
+(pands to one or more digits, the \214le descriptor denoted).15 F(by)108
+568.8 Q F2(n)3.318 E F0 .458(is made to be a cop)3.198 F 2.958(yo)-.1 G
+2.958(ft)-2.958 G .457(hat \214le descriptor)-2.958 F 5.457(.I)-.55 G
+2.957(ft)-5.457 G .457(he digits in)-2.957 F F2(wor)3.297 E(d)-.37 E F0
+.457(do not specify a \214le descriptor open)3.727 F .149
+(for input, a redirection error occurs.)108 580.8 R(If)5.149 E F2(wor)
+2.989 E(d)-.37 E F0 -.25(eva)3.419 G .149(luates to).25 F F1<ad>2.649 E
+F0 2.65<2c8c>C .15(le descriptor)-2.65 F F2(n)3.01 E F0 .15(is closed.)
+2.89 F(If)5.15 E F2(n)3.01 E F0 .15(is not speci\214ed,)2.89 F
+(the standard input \(\214le descriptor 0\) is used.)108 592.8 Q
+(The operator)108 609.6 Q([)144 626.4 Q F2(n)A F0(])A F1(>&)A F2(wor)A
+(d)-.37 E F0 .444
+(is used similarly to duplicate output \214le descriptors.)108 643.2 R
+(If)5.444 E F2(n)3.304 E F0 .443
+(is not speci\214ed, the standard output \(\214le descrip-)3.183 F 1.357
+(tor 1\) is used.)108 655.2 R 1.357(If the digits in)6.357 F F2(wor)
+4.197 E(d)-.37 E F0 1.358(do not specify a \214le descriptor open for o\
+utput, a redirection error)4.627 F 2.754(occurs. If)108 667.2 R F2(wor)
+3.094 E(d)-.37 E F0 -.25(eva)3.524 G .254(luates to).25 F F1<ad>2.754 E
+F0 2.754<2c8c>C .254(le descriptor)-2.754 F F2(n)3.114 E F0 .254
+(is closed.)2.994 F .254(As a special case, if)5.254 F F2(n)2.754 E F0
+.253(is omitted, and)2.754 F F2(wor)2.753 E(d)-.37 E F0(does)2.753 E
+.965(not e)108 679.2 R .965(xpand to one or more digits or)-.15 F F1<ad>
+3.465 E F0 3.466(,t)C .966
+(he standard output and standard error are redirected as described)
+-3.466 F(pre)108 691.2 Q(viously)-.25 E(.)-.65 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(29)188.455 E 0 Cg EP
+%%Page: 30 30
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(Mo)87 84 Q(ving File Descriptors)-.1 E F0(The redirection operator)
+108 96 Q([)144 112.8 Q/F2 10/Times-Italic@0 SF(n)A F0(])A F1(<&)A F2
+(digit)A F1<ad>A F0(mo)108 129.6 Q -.15(ve)-.15 G 3.036(st).15 G .536
+(he \214le descriptor)-3.036 F F2(digit)3.036 E F0 .536
+(to \214le descriptor)3.036 F F2(n)3.036 E F0 3.036(,o).24 G 3.036(rt)
+-3.036 G .535(he standard input \(\214le descriptor 0\) if)-3.036 F F2
+(n)3.035 E F0 .535(is not speci-)3.035 F(\214ed.)108 141.6 Q F2(digit)5
+E F0(is closed after being duplicated to)2.5 E F2(n)2.5 E F0(.)A
+(Similarly)108 158.4 Q 2.5(,t)-.65 G(he redirection operator)-2.5 E([)
+144 175.2 Q F2(n)A F0(])A F1(>&)A F2(digit)A F1<ad>A F0(mo)108 192 Q
+-.15(ve)-.15 G 2.785(st).15 G .285(he \214le descriptor)-2.785 F F2
+(digit)2.785 E F0 .285(to \214le descriptor)2.785 F F2(n)2.785 E F0
+2.785(,o).24 G 2.785(rt)-2.785 G .286
+(he standard output \(\214le descriptor 1\) if)-2.785 F F2(n)2.786 E F0
+.286(is not speci-)2.786 F(\214ed.)108 204 Q F1
+(Opening File Descriptors f)87 220.8 Q(or Reading and Writing)-.25 E F0
+(The redirection operator)108 232.8 Q([)144 249.6 Q F2(n)A F0(])A F1(<>)
+A F2(wor)A(d)-.37 E F0 1.349(causes the \214le whose name is the e)108
+266.4 R 1.349(xpansion of)-.15 F F2(wor)4.189 E(d)-.37 E F0 1.349
+(to be opened for both reading and writing on \214le)4.619 F(descriptor)
+108 278.4 Q F2(n)2.5 E F0 2.5(,o).24 G 2.5(ro)-2.5 G 2.5<6e8c>-2.5 G
+(le descriptor 0 if)-2.5 E F2(n)2.86 E F0(is not speci\214ed.)2.74 E
+(If the \214le does not e)5 E(xist, it is created.)-.15 E/F3 10.95
+/Times-Bold@0 SF(ALIASES)72 295.2 Q F2(Aliases)108 307.2 Q F0(allo)3.173
+E 3.173(was)-.25 G .674(tring to be substituted for a w)-3.173 F .674
+(ord when it is used as the \214rst w)-.1 F .674
+(ord of a simple command.)-.1 F .394(The shell maintains a list of alia\
+ses that may be set and unset with the)108 319.2 R F1(alias)2.893 E F0
+(and)2.893 E F1(unalias)2.893 E F0 -.2(bu)2.893 G .393(iltin commands).2
+F(\(see)108 331.2 Q/F4 9/Times-Bold@0 SF 1.979(SHELL B)4.479 F(UIL)-.09
+E 1.979(TIN COMMANDS)-.828 F F0(belo)4.229 E 4.48(w\). The)-.25 F 1.98
+(\214rst w)4.48 F 1.98(ord of each simple command, if unquoted, is)-.1 F
+(check)108 343.2 Q .473(ed to see if it has an alias.)-.1 F .473
+(If so, that w)5.473 F .472(ord is replaced by the te)-.1 F .472
+(xt of the alias.)-.15 F .472(The characters)5.472 F F1(/)2.972 E F0(,)A
+F1($)2.972 E F0(,)A F1<92>2.972 E F0(,)A(and)108 355.2 Q F1(=)3.611 E F0
+1.111(and an)3.611 F 3.611(yo)-.15 G 3.611(ft)-3.611 G 1.111(he shell)
+-3.611 F F2(metac)3.612 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 1.112
+(or quoting characters listed abo)3.612 F 1.412 -.15(ve m)-.15 H 1.112
+(ay not appear in an alias).15 F 3.62(name. The)108 367.2 R 1.12
+(replacement te)3.62 F 1.119(xt may contain an)-.15 F 3.619(yv)-.15 G
+1.119(alid shell input, including shell metacharacters.)-3.869 F 1.119
+(The \214rst)6.119 F -.1(wo)108 379.2 S .513(rd of the replacement te).1
+F .513(xt is tested for aliases, b)-.15 F .513(ut a w)-.2 F .514
+(ord that is identical to an alias being e)-.1 F .514(xpanded is)-.15 F
+.296(not e)108 391.2 R .296(xpanded a second time.)-.15 F .296
+(This means that one may alias)5.296 F F1(ls)2.796 E F0(to)2.796 E F1
+.296(ls \255F)2.796 F F0 2.796(,f)C .295(or instance, and)-2.796 F F1
+(bash)2.795 E F0 .295(does not try)2.795 F .542(to recursi)108 403.2 R
+-.15(ve)-.25 G .542(ly e).15 F .542(xpand the replacement te)-.15 F
+3.042(xt. If)-.15 F .543(the last character of the alias v)3.042 F .543
+(alue is a)-.25 F F2(blank)3.043 E F0 3.043(,t).67 G .543(hen the ne)
+-3.043 F(xt)-.15 E(command w)108 415.2 Q(ord follo)-.1 E
+(wing the alias is also check)-.25 E(ed for alias e)-.1 E(xpansion.)-.15
+E(Aliases are created and listed with the)108 432 Q F1(alias)2.5 E F0
+(command, and remo)2.5 E -.15(ve)-.15 G 2.5(dw).15 G(ith the)-2.5 E F1
+(unalias)2.5 E F0(command.)2.5 E .284
+(There is no mechanism for using ar)108 448.8 R .284
+(guments in the replacement te)-.18 F 2.784(xt. If)-.15 F(ar)2.784 E
+.284(guments are needed, a shell func-)-.18 F(tion should be used \(see)
+108 460.8 Q F4(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E 1.22
+(Aliases are not e)108 477.6 R 1.22
+(xpanded when the shell is not interacti)-.15 F -.15(ve)-.25 G 3.72(,u)
+.15 G 1.22(nless the)-3.72 F F1(expand_aliases)3.72 E F0 1.22
+(shell option is set)3.72 F(using)108 489.6 Q F1(shopt)2.5 E F0
+(\(see the description of)2.5 E F1(shopt)2.5 E F0(under)2.5 E F4
+(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25
+E .436
+(The rules concerning the de\214nition and use of aliases are some)108
+506.4 R .435(what confusing.)-.25 F F1(Bash)5.435 E F0(al)2.935 E -.1
+(wa)-.1 G .435(ys reads at least).1 F .67
+(one complete line of input, and all lines that mak)108 518.4 R 3.17(eu)
+-.1 G 3.17(pac)-3.17 G .67(ompound command, before e)-3.17 F -.15(xe)
+-.15 G .67(cuting an).15 F 3.17(yo)-.15 G 3.17(ft)-3.17 G(he)-3.17 E
+1.059(commands on that line or the compound command.)108 530.4 R 1.059
+(Aliases are e)6.059 F 1.058(xpanded when a command is read, not)-.15 F
+.074(when it is e)108 542.4 R -.15(xe)-.15 G 2.574(cuted. Therefore,).15
+F .075(an alias de\214nition appearing on the same line as another comm\
+and does not)2.574 F(tak)108 554.4 Q 2.838(ee)-.1 G -.25(ff)-2.838 G
+.338(ect until the ne).25 F .338(xt line of input is read.)-.15 F .337
+(The commands follo)5.337 F .337
+(wing the alias de\214nition on that line are)-.25 F 1.472(not af)108
+566.4 R 1.473(fected by the ne)-.25 F 3.973(wa)-.25 G 3.973(lias. This)
+-3.973 F(beha)3.973 E 1.473(vior is also an issue when functions are e)
+-.2 F -.15(xe)-.15 G 3.973(cuted. Aliases).15 F(are)3.973 E -.15(ex)108
+578.4 S .61(panded when a function de\214nition is read, not when the f\
+unction is e).15 F -.15(xe)-.15 G .609
+(cuted, because a function de\214ni-).15 F .711
+(tion is itself a command.)108 590.4 R .711
+(As a consequence, aliases de\214ned in a function are not a)5.711 F
+-.25(va)-.2 G .712(ilable until after that).25 F 1.186(function is e)108
+602.4 R -.15(xe)-.15 G 3.686(cuted. T).15 F 3.686(ob)-.8 G 3.686(es)
+-3.686 G 1.185(afe, al)-3.686 F -.1(wa)-.1 G 1.185
+(ys put alias de\214nitions on a separate line, and do not use).1 F F1
+(alias)3.685 E F0(in)3.685 E(compound commands.)108 614.4 Q -.15(Fo)108
+631.2 S 2.5(ra).15 G(lmost e)-2.5 E -.15(ve)-.25 G
+(ry purpose, aliases are superseded by shell functions.).15 E F3
+(FUNCTIONS)72 648 Q F0 3.467(As)108 660 S .967
+(hell function, de\214ned as described abo)-3.467 F 1.267 -.15(ve u)-.15
+H(nder).15 E F4 .967(SHELL GRAMMAR)3.467 F/F5 9/Times-Roman@0 SF(,)A F0
+.968(stores a series of commands for)3.217 F 1.002(later e)108 672 R
+-.15(xe)-.15 G 3.502(cution. When).15 F 1.002(the name of a shell funct\
+ion is used as a simple command name, the list of com-)3.502 F .315
+(mands associated with that function name is e)108 684 R -.15(xe)-.15 G
+2.816(cuted. Functions).15 F .316(are e)2.816 F -.15(xe)-.15 G .316
+(cuted in the conte).15 F .316(xt of the current)-.15 F .036
+(shell; no ne)108 696 R 2.536(wp)-.25 G .036
+(rocess is created to interpret them \(contrast this with the e)-2.536 F
+-.15(xe)-.15 G .036(cution of a shell script\).).15 F .035(When a)5.035
+F .639(function is e)108 708 R -.15(xe)-.15 G .639(cuted, the ar).15 F
+.639
+(guments to the function become the positional parameters during its e)
+-.18 F -.15(xe)-.15 G(cution.).15 E 1.659(The special parameter)108 720
+R F1(#)4.159 E F0 1.659(is updated to re\215ect the change.)4.159 F
+1.659(Special parameter)6.659 F F1(0)4.159 E F0 1.658(is unchanged.)
+4.158 F 1.658(The \214rst)6.658 F(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(30)188.455 E 0 Cg EP
+%%Page: 31 31
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(element of the)108
+84 Q/F1 9/Times-Bold@0 SF(FUNCN)2.5 E(AME)-.18 E F0 -.25(va)2.25 G
+(riable is set to the name of the function while the function is e).25 E
+-.15(xe)-.15 G(cuting.).15 E 1.25(All other aspects of the shell e)108
+100.8 R -.15(xe)-.15 G 1.25(cution en).15 F 1.25
+(vironment are identical between a function and its caller with)-.4 F
+1.215(these e)108 112.8 R 1.215(xceptions: the)-.15 F F1(DEB)3.715 E(UG)
+-.09 E F0(and)3.465 E/F2 10/Times-Bold@0 SF(RETURN)3.715 E F0 1.215
+(traps \(see the description of the)3.715 F F2(trap)3.714 E F0 -.2(bu)
+3.714 G 1.214(iltin under).2 F F1(SHELL)3.714 E -.09(BU)108 124.8 S(IL)
+.09 E .478(TIN COMMANDS)-.828 F F0(belo)2.728 E .479
+(w\) are not inherited unless the function has been gi)-.25 F -.15(ve)
+-.25 G 2.979(nt).15 G(he)-2.979 E F2(trace)2.979 E F0(attrib)2.979 E
+.479(ute \(see)-.2 F .421(the description of the)108 136.8 R F1(declar)
+2.92 E(e)-.162 E F0 -.2(bu)2.67 G .42(iltin belo).2 F .42(w\) or the)
+-.25 F F2 .42(\255o functrace)2.92 F F0 .42
+(shell option has been enabled with the)2.92 F F2(set)2.92 E F0 -.2(bu)
+108 148.8 S .071(iltin \(in which case all functions inherit the).2 F F2
+(DEB)2.572 E(UG)-.1 E F0(and)2.572 E F2(RETURN)2.572 E F0 .072
+(traps\), and the)2.572 F F1(ERR)2.572 E F0 .072(trap is not inher)2.322
+F(-)-.2 E(ited unless the)108 160.8 Q F2(\255o errtrace)2.5 E F0
+(shell option has been enabled.)2.5 E -1.11(Va)108 177.6 S .656
+(riables local to the function may be declared with the)1.11 F F2(local)
+3.155 E F0 -.2(bu)3.155 G .655(iltin command.).2 F(Ordinarily)5.655 E
+3.155(,v)-.65 G .655(ariables and)-3.405 F .05(their v)108 189.6 R .05
+(alues are shared between the function and its caller)-.25 F 5.051(.I)
+-.55 G 2.551(fav)-5.051 G .051(ariable is declared)-2.801 F F2(local)
+2.551 E F0 2.551(,t)C .051(he v)-2.551 F(ariable')-.25 E 2.551(sv)-.55 G
+(isi-)-2.551 E 1.186(ble scope is restricted to that function and its c\
+hildren \(including the functions it calls\).)108 201.6 R 1.185(Local v)
+6.185 F(ariables)-.25 E("shado)108 213.6 Q .154(w" v)-.25 F .154
+(ariables with the same name declared at pre)-.25 F .155(vious scopes.)
+-.25 F -.15(Fo)5.155 G 2.655(ri).15 G .155(nstance, a local v)-2.655 F
+.155(ariable declared)-.25 F .67(in a function hides a global v)108
+225.6 R .669(ariable of the same name: references and assignments refer\
+ to the local v)-.25 F(ari-)-.25 E .688(able, lea)108 237.6 R .688
+(ving the global v)-.2 F .688(ariable unmodi\214ed.)-.25 F .688
+(When the function returns, the global v)5.688 F .688
+(ariable is once ag)-.25 F(ain)-.05 E(visible.)108 249.6 Q .727
+(The shell uses)108 266.4 R/F3 10/Times-Italic@0 SF .727
+(dynamic scoping)3.227 F F0 .726(to control a v)3.227 F(ariable')-.25 E
+3.226(sv)-.55 G .726(isibility within functions.)-3.226 F -.4(Wi)5.726 G
+.726(th dynamic scoping,).4 F .007(visible v)108 278.4 R .007
+(ariables and their v)-.25 F .007
+(alues are a result of the sequence of function calls that caused e)-.25
+F -.15(xe)-.15 G .008(cution to reach).15 F .814(the current function.)
+108 290.4 R .813(The v)5.814 F .813(alue of a v)-.25 F .813
+(ariable that a function sees depends on its v)-.25 F .813
+(alue within its caller)-.25 F 3.313(,i)-.4 G(f)-3.313 E(an)108 302.4 Q
+2.116 -.65(y, w)-.15 H .816
+(hether that caller is the "global" scope or another shell function.).65
+F .817(This is also the v)5.816 F .817(alue that a local)-.25 F -.25(va)
+108 314.4 S(riable declaration "shado).25 E(ws", and the v)-.25 E
+(alue that is restored when the function returns.)-.25 E -.15(Fo)108
+331.2 S 2.724(re).15 G .224(xample, if a v)-2.874 F(ariable)-.25 E F3
+(var)2.724 E F0 .223(is declared as local in function)2.724 F F3(func1)
+2.723 E F0 2.723(,a)C(nd)-2.723 E F3(func1)2.723 E F0 .223
+(calls another function)2.723 F F3(func2)2.723 E F0(,)A .463
+(references to)108 343.2 R F3(var)2.963 E F0 .463(made from within)2.963
+F F3(func2)2.963 E F0 .463(will resolv)2.963 F 2.964(et)-.15 G 2.964(ot)
+-2.964 G .464(he local v)-2.964 F(ariable)-.25 E F3(var)2.964 E F0(from)
+2.964 E F3(func1)2.964 E F0 2.964(,s)C(hado)-2.964 E .464(wing an)-.25 F
+(y)-.15 E(global v)108 355.2 Q(ariable named)-.25 E F3(var)2.5 E F0(.)A
+(The)108 372 Q F2(unset)2.983 E F0 -.2(bu)2.983 G .483
+(iltin also acts using the same dynamic scope: if a v).2 F .482
+(ariable is local to the current scope,)-.25 F F2(unset)2.982 E F0 .19
+(will unset it; otherwise the unset will refer to the v)108 384 R .19
+(ariable found in an)-.25 F 2.69(yc)-.15 G .19
+(alling scope as described abo)-2.69 F -.15(ve)-.15 G 5.19(.I).15 G(f)
+-5.19 E 2.721(av)108 396 S .221(ariable at the current local scope is u\
+nset, it will remain so until it is reset in that scope or until the fu\
+nc-)-2.971 F .013(tion returns.)108 408 R .013
+(Once the function returns, an)5.013 F 2.513(yi)-.15 G .014
+(nstance of the v)-2.513 F .014(ariable at a pre)-.25 F .014
+(vious scope will become visible.)-.25 F .567(If the unset acts on a v)
+108 420 R .566(ariable at a pre)-.25 F .566(vious scope, an)-.25 F 3.066
+(yi)-.15 G .566(nstance of a v)-3.066 F .566
+(ariable with that name that had been)-.25 F(shado)108 432 Q
+(wed will become visible.)-.25 E(The)108 448.8 Q F2(FUNCNEST)3.528 E F0
+-.25(va)3.528 G 1.028(riable, if set to a numeric v).25 F 1.028
+(alue greater than 0, de\214nes a maximum function nesting)-.25 F(le)108
+460.8 Q -.15(ve)-.25 G 2.5(l. Function).15 F(in)2.5 E -.2(vo)-.4 G
+(cations that e).2 E(xceed the limit cause the entire command to abort.)
+-.15 E .044(If the b)108 477.6 R .043(uiltin command)-.2 F F2 -.18(re)
+2.543 G(tur).18 E(n)-.15 E F0 .043(is e)2.543 F -.15(xe)-.15 G .043
+(cuted in a function, the function completes and e).15 F -.15(xe)-.15 G
+.043(cution resumes with).15 F 1.011(the ne)108 489.6 R 1.011
+(xt command after the function call.)-.15 F(An)6.011 E 3.511(yc)-.15 G
+1.011(ommand associated with the)-3.511 F F2(RETURN)3.512 E F0 1.012
+(trap is e)3.512 F -.15(xe)-.15 G(cuted).15 E .214(before e)108 501.6 R
+-.15(xe)-.15 G .214(cution resumes.).15 F .213
+(When a function completes, the v)5.214 F .213
+(alues of the positional parameters and the spe-)-.25 F(cial parameter)
+108 513.6 Q F2(#)2.5 E F0(are restored to the v)2.5 E(alues the)-.25 E
+2.5(yh)-.15 G(ad prior to the function')-2.5 E 2.5(se)-.55 G -.15(xe)
+-2.65 G(cution.).15 E 1.358
+(Function names and de\214nitions may be listed with the)108 530.4 R F2
+<ad66>3.858 E F0 1.358(option to the)3.858 F F2(declar)3.858 E(e)-.18 E
+F0(or)3.859 E F2(typeset)3.859 E F0 -.2(bu)3.859 G 1.359(iltin com-).2 F
+3.39(mands. The)108 542.4 R F2<ad46>3.39 E F0 .89(option to)3.39 F F2
+(declar)3.39 E(e)-.18 E F0(or)3.39 E F2(typeset)3.39 E F0 .89
+(will list the function names only \(and optionally the source)3.39 F
+.326(\214le and line number)108 554.4 R 2.826(,i)-.4 G 2.826(ft)-2.826 G
+(he)-2.826 E F2(extdeb)2.826 E(ug)-.2 E F0 .326
+(shell option is enabled\).)2.826 F .327(Functions may be e)5.327 F .327
+(xported so that subshells)-.15 F 1.298(automatically ha)108 566.4 R
+1.598 -.15(ve t)-.2 H 1.298(hem de\214ned with the).15 F F2<ad66>3.798 E
+F0 1.298(option to the)3.798 F F2(export)3.797 E F0 -.2(bu)3.797 G 3.797
+(iltin. A).2 F 1.297(function de\214nition may be)3.797 F
+(deleted using the)108 578.4 Q F2<ad66>2.5 E F0(option to the)2.5 E F2
+(unset)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .371(Functions may be recursi)
+108 595.2 R -.15(ve)-.25 G 5.371(.T).15 G(he)-5.371 E F2(FUNCNEST)2.871
+E F0 -.25(va)2.871 G .371
+(riable may be used to limit the depth of the function call).25 F 1.141
+(stack and restrict the number of function in)108 607.2 R -.2(vo)-.4 G
+3.641(cations. By).2 F(def)3.641 E 1.141
+(ault, no limit is imposed on the number of)-.1 F(recursi)108 619.2 Q .3
+-.15(ve c)-.25 H(alls.).15 E/F4 10.95/Times-Bold@0 SF(ARITHMETIC EV)72
+636 Q(ALU)-1.478 E -1.04(AT)-.657 G(ION)1.04 E F0 2.297(The shell allo)
+108 648 R 2.297(ws arithmetic e)-.25 F 2.297(xpressions to be e)-.15 F
+-.25(va)-.25 G 2.297(luated, under certain circumstances \(see the).25 F
+F2(let)4.798 E F0(and)4.798 E F2(declar)108 660 Q(e)-.18 E F0 -.2(bu)
+2.684 G .183(iltin commands, the).2 F F2(\(\()2.683 E F0 .183
+(compound command, and)2.683 F F2 .183(Arithmetic Expansion)2.683 F F0
+2.683(\). Ev)B .183(aluation is done in)-.25 F<8c78>108 672 Q 1.057
+(ed-width inte)-.15 F 1.057(gers with no check for o)-.15 F -.15(ve)-.15
+G(r\215o).15 E 2.357 -.65(w, t)-.25 H 1.057(hough di).65 F 1.057
+(vision by 0 is trapped and \215agged as an error)-.25 F(.)-.55 E .829
+(The operators and their precedence, associati)108 684 R(vity)-.25 E
+3.329(,a)-.65 G .829(nd v)-3.329 F .829
+(alues are the same as in the C language.)-.25 F .828(The fol-)5.828 F
+(lo)108 696 Q .439(wing list of operators is grouped into le)-.25 F -.15
+(ve)-.25 G .439(ls of equal-precedence operators.).15 F .44(The le)5.44
+F -.15(ve)-.25 G .44(ls are listed in order).15 F
+(of decreasing precedence.)108 708 Q(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(31)188.455 E 0 Cg EP
+%%Page: 32 32
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10
+/Times-Italic@0 SF(id)108 84 Q/F2 10/Times-Bold@0 SF(++)A F1(id)2.5 E F2
+<adad>A F0 -.25(va)144 96 S(riable post-increment and post-decrement).25
+E F2 2.5<ad2b>108 108 S F0(unary minus and plus)144 108 Q F2(++)108 120
+Q F1(id)A F2<adad>2.5 E F1(id)A F0 -.25(va)144 132 S
+(riable pre-increment and pre-decrement).25 E F2 2.5(!~)108 144 S F0
+(logical and bitwise ne)144 144 Q -.05(ga)-.15 G(tion).05 E F2(**)108
+156 Q F0 -.15(ex)144 156 S(ponentiation).15 E F2 2.5(*/%)108 168 S F0
+(multiplication, di)144 168 Q(vision, remainder)-.25 E F2 2.5<2bad>108
+180 S F0(addition, subtraction)144 180 Q F2(<< >>)108 192 Q F0
+(left and right bitwise shifts)144 192 Q F2(<= >= < >)108 204 Q F0
+(comparison)144 216 Q F2(== !=)108 228 Q F0(equality and inequality)144
+228 Q F2(&)108 240 Q F0(bitwise AND)144 240 Q F2(^)108 252 Q F0
+(bitwise e)144 252 Q(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F2(|)108
+264 Q F0(bitwise OR)144 264 Q F2(&&)108 276 Q F0(logical AND)144 276 Q
+F2(||)108 288 Q F0(logical OR)144 288 Q F1 -.2(ex)108 300 S(pr).2 E F2
+(?)A F1 -.2(ex)C(pr).2 E F2(:)A F1 -.2(ex)C(pr).2 E F0
+(conditional operator)144 312 Q F2 2.5(=*)108 324 S 2.5(=/)-2.5 G 2.5
+(=%)-2.5 G 2.5(=+)-2.5 G 2.5<3dad>-2.5 G 2.5(=<)-2.5 G(<= >>= &= ^= |=)
+-2.5 E F0(assignment)144 336 Q F1 -.2(ex)108 348 S(pr1).2 E F2(,)2.5 E
+F1 -.2(ex)2.5 G(pr2).2 E F0(comma)144 360 Q .68(Shell v)108 376.8 R .68
+(ariables are allo)-.25 F .68(wed as operands; parameter e)-.25 F .68
+(xpansion is performed before the e)-.15 F .68(xpression is e)-.15 F
+-.25(va)-.25 G(lu-).25 E 3.507(ated. W)108 388.8 R 1.007(ithin an e)-.4
+F 1.007(xpression, shell v)-.15 F 1.007
+(ariables may also be referenced by name without using the parameter)
+-.25 F -.15(ex)108 400.8 S 1.041(pansion syntax.).15 F 3.541(As)6.041 G
+1.041(hell v)-3.541 F 1.041(ariable that is null or unset e)-.25 F -.25
+(va)-.25 G 1.04(luates to 0 when referenced by name without).25 F 1.466
+(using the parameter e)108 412.8 R 1.466(xpansion syntax.)-.15 F 1.467
+(The v)6.466 F 1.467(alue of a v)-.25 F 1.467(ariable is e)-.25 F -.25
+(va)-.25 G 1.467(luated as an arithmetic e).25 F(xpression)-.15 E 1.258
+(when it is referenced, or when a v)108 424.8 R 1.258
+(ariable which has been gi)-.25 F -.15(ve)-.25 G 3.758(nt).15 G(he)
+-3.758 E F1(inte)3.758 E -.1(ge)-.4 G(r).1 E F0(attrib)3.758 E 1.257
+(ute using)-.2 F F2(declar)3.757 E 3.757<65ad>-.18 G(i)-3.757 E F0(is)
+3.757 E .332(assigned a v)108 436.8 R 2.832(alue. A)-.25 F .332(null v)
+2.832 F .332(alue e)-.25 F -.25(va)-.25 G .332(luates to 0.).25 F 2.832
+(As)5.332 G .332(hell v)-2.832 F .332(ariable need not ha)-.25 F .632
+-.15(ve i)-.2 H(ts).15 E F1(inte)2.832 E -.1(ge)-.4 G(r).1 E F0(attrib)
+2.832 E .333(ute turned on)-.2 F(to be used in an e)108 448.8 Q
+(xpression.)-.15 E 1.406
+(Constants with a leading 0 are interpreted as octal numbers.)108 465.6
+R 3.906(Al)6.406 G 1.406(eading 0x or 0X denotes he)-3.906 F(xadecimal.)
+-.15 E .112(Otherwise, numbers tak)108 477.6 R 2.612(et)-.1 G .112
+(he form [)-2.612 F F1(base#)A F0 .112(]n, where the optional)B F1(base)
+2.612 E F0 .113(is a decimal number between 2 and 64)2.612 F .534
+(representing the arithmetic base, and)108 489.6 R F1(n)3.034 E F0 .534
+(is a number in that base.)3.034 F(If)5.533 E F1(base#)3.033 E F0 .533
+(is omitted, then base 10 is used.)3.033 F .512(When specifying)108
+501.6 R F1(n)3.012 E F0 3.012(,t)C .512
+(he digits greater than 9 are represented by the lo)-3.012 F .513
+(wercase letters, the uppercase letters,)-.25 F .943
+(@, and _, in that order)108 513.6 R 5.943(.I)-.55 G(f)-5.943 E F1(base)
+3.443 E F0 .942(is less than or equal to 36, lo)3.443 F .942
+(wercase and uppercase letters may be used)-.25 F
+(interchangeably to represent numbers between 10 and 35.)108 525.6 Q
+.234(Operators are e)108 542.4 R -.25(va)-.25 G .234
+(luated in order of precedence.).25 F(Sub-e)5.234 E .234
+(xpressions in parentheses are e)-.15 F -.25(va)-.25 G .235
+(luated \214rst and may).25 F -.15(ove)108 554.4 S
+(rride the precedence rules abo).15 E -.15(ve)-.15 G(.).15 E/F3 10.95
+/Times-Bold@0 SF(CONDITION)72 571.2 Q(AL EXPRESSIONS)-.219 E F0 .256
+(Conditional e)108 583.2 R .256(xpressions are used by the)-.15 F F2([[)
+2.755 E F0 .255(compound command and the)2.755 F F2(test)2.755 E F0(and)
+2.755 E F2([)2.755 E F0 -.2(bu)2.755 G .255(iltin commands to test).2 F
+1.233(\214le attrib)108 595.2 R 1.233
+(utes and perform string and arithmetic comparisons.)-.2 F(The)6.234 E
+F2(test)3.734 E F0(abd)3.734 E F2([)3.734 E F0 1.234
+(commands determine their)3.734 F(beha)108 607.2 Q .997
+(vior based on the number of ar)-.2 F .996
+(guments; see the descriptions of those commands for an)-.18 F 3.496(yo)
+-.15 G .996(ther com-)-3.496 F(mand-speci\214c actions.)108 619.2 Q .234
+(Expressions are formed from the follo)108 636 R .234
+(wing unary or binary primaries.)-.25 F F2(Bash)5.234 E F0 .235
+(handles se)2.735 F -.15(ve)-.25 G .235(ral \214lenames spe-).15 F .425
+(cially when the)108 648 R 2.925(ya)-.15 G .425(re used in e)-2.925 F
+2.925(xpressions. If)-.15 F .425(the operating system on which)2.925 F
+F2(bash)2.924 E F0 .424(is running pro)2.924 F .424(vides these)-.15 F
+1.153(special \214les, bash will use them; otherwise it will emulate th\
+em internally with this beha)108 660 R 1.153(vior: If an)-.2 F(y)-.15 E
+F1(\214le)3.653 E F0(ar)108 672 Q .426
+(gument to one of the primaries is of the form)-.18 F F1(/de)2.926 E
+(v/fd/n)-.15 E F0 2.926(,t)C .426(hen \214le descriptor)-2.926 F F1(n)
+2.926 E F0 .426(is check)2.926 F 2.926(ed. If)-.1 F(the)2.926 E F1
+(\214le)2.926 E F0(ar)2.926 E(gu-)-.18 E .029
+(ment to one of the primaries is one of)108 684 R F1(/de)2.529 E
+(v/stdin)-.15 E F0(,)A F1(/de)2.529 E(v/stdout)-.15 E F0 2.53(,o)C(r)
+-2.53 E F1(/de)2.53 E(v/stderr)-.15 E F0 2.53<2c8c>C .03
+(le descriptor 0, 1, or 2, respec-)-2.53 F(ti)108 696 Q -.15(ve)-.25 G
+(ly).15 E 2.5(,i)-.65 G 2.5(sc)-2.5 G(heck)-2.5 E(ed.)-.1 E .722
+(Unless otherwise speci\214ed, primaries that operate on \214les follo)
+108 712.8 R 3.221(ws)-.25 G .721(ymbolic links and operate on the tar)
+-3.221 F(get)-.18 E(of the link, rather than the link itself.)108 724.8
+Q(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(32)188.455 E 0 Cg EP
+%%Page: 33 33
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.095
+(When used with)108 84 R/F1 10/Times-Bold@0 SF([[)3.595 E F0 3.595(,t)C
+(he)-3.595 E F1(<)3.595 E F0(and)3.595 E F1(>)3.595 E F0 1.095
+(operators sort le)3.595 F 1.095
+(xicographically using the current locale.)-.15 F(The)6.096 E F1(test)
+3.596 E F0(com-)3.596 E(mand sorts using ASCII ordering.)108 96 Q F1
+<ad61>108 120 Q/F2 10/Times-Italic@0 SF(\214le)2.5 E F0 -.35(Tr)144 120
+S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1<ad62>108
+132 Q F2(\214le)2.5 E F0 -.35(Tr)144 132 S(ue if).35 E F2(\214le)2.5 E
+F0 -.15(ex)2.5 G(ists and is a block special \214le.).15 E F1<ad63>108
+144 Q F2(\214le)2.5 E F0 -.35(Tr)144 144 S(ue if).35 E F2(\214le)2.5 E
+F0 -.15(ex)2.5 G(ists and is a character special \214le.).15 E F1<ad64>
+108 156 Q F2(\214le)2.5 E F0 -.35(Tr)144 156 S(ue if).35 E F2(\214le)2.5
+E F0 -.15(ex)2.5 G(ists and is a directory).15 E(.)-.65 E F1<ad65>108
+168 Q F2(\214le)2.5 E F0 -.35(Tr)144 168 S(ue if).35 E F2(\214le)2.5 E
+F0 -.15(ex)2.5 G(ists.).15 E F1<ad66>108 180 Q F2(\214le)2.5 E F0 -.35
+(Tr)144 180 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G
+(ists and is a re).15 E(gular \214le.)-.15 E F1<ad67>108 192 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 192 S(ue if).35 E F2(\214le)2.5 E F0 -.15
+(ex)2.5 G(ists and is set-group-id.).15 E F1<ad68>108 204 Q F2(\214le)
+2.5 E F0 -.35(Tr)144 204 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G
+(ists and is a symbolic link.).15 E F1<ad6b>108 216 Q F2(\214le)2.5 E F0
+-.35(Tr)144 216 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G
+(ists and its `).15 E(`stick)-.74 E(y')-.15 E 2.5('b)-.74 G(it is set.)
+-2.5 E F1<ad70>108 228 Q F2(\214le)2.5 E F0 -.35(Tr)144 228 S(ue if).35
+E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a named pipe \(FIFO\).)
+.15 E F1<ad72>108 240 Q F2(\214le)2.5 E F0 -.35(Tr)144 240 S(ue if).35 E
+F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is readable.).15 E F1<ad73>108
+252 Q F2(\214le)2.5 E F0 -.35(Tr)144 252 S(ue if).35 E F2(\214le)2.5 E
+F0 -.15(ex)2.5 G(ists and has a size greater than zero.).15 E F1<ad74>
+108 264 Q F2(fd)2.5 E F0 -.35(Tr)144 264 S(ue if \214le descriptor).35 E
+F2(fd)4.47 E F0(is open and refers to a terminal.)3.27 E F1<ad75>108 276
+Q F2(\214le)2.5 E F0 -.35(Tr)144 276 S(ue if).35 E F2(\214le)2.5 E F0
+-.15(ex)2.5 G(ists and its set-user).15 E(-id bit is set.)-.2 E F1<ad77>
+108 288 Q F2(\214le)2.5 E F0 -.35(Tr)144 288 S(ue if).35 E F2(\214le)2.5
+E F0 -.15(ex)2.5 G(ists and is writable.).15 E F1<ad78>108 300 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 300 S(ue if).35 E F2(\214le)2.5 E F0 -.15
+(ex)2.5 G(ists and is e).15 E -.15(xe)-.15 G(cutable.).15 E F1<ad47>108
+312 Q F2(\214le)2.5 E F0 -.35(Tr)144 312 S(ue if).35 E F2(\214le)2.5 E
+F0 -.15(ex)2.5 G(ists and is o).15 E(wned by the ef)-.25 E(fecti)-.25 E
+.3 -.15(ve g)-.25 H(roup id.).15 E F1<ad4c>108 324 Q F2(\214le)2.5 E F0
+-.35(Tr)144 324 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G
+(ists and is a symbolic link.).15 E F1<ad4e>108 336 Q F2(\214le)2.5 E F0
+-.35(Tr)144 336 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G
+(ists and has been modi\214ed since it w).15 E(as last read.)-.1 E F1
+<ad4f>108 348 Q F2(\214le)2.5 E F0 -.35(Tr)144 348 S(ue if).35 E F2
+(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is o).15 E(wned by the ef)-.25 E
+(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id.).15 E F1<ad53>108 360 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 360 S(ue if).35 E F2(\214le)2.5 E F0 -.15
+(ex)2.5 G(ists and is a sock).15 E(et.)-.1 E F2(\214le1)108 372 Q F1
+(\255ef)2.5 E F2(\214le2)2.5 E F0 -.35(Tr)144 384 S(ue if).35 E F2
+(\214le1)2.5 E F0(and)2.5 E F2(\214le2)2.5 E F0(refer to the same de)2.5
+E(vice and inode numbers.)-.25 E F2(\214le1)108 396 Q F0<ad>2.5 E F1(nt)
+A F2(\214le2)2.5 E F0 -.35(Tr)144 408 S(ue if).35 E F2(\214le1)2.5 E F0
+(is ne)2.5 E(wer \(according to modi\214cation date\) than)-.25 E F2
+(\214le2)2.5 E F0 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F2(\214le1)2.5 E F0
+-.15(ex)2.5 G(ists and).15 E F2(\214le2)2.5 E F0(does not.)2.5 E F2
+(\214le1)108 420 Q F0<ad>2.5 E F1(ot)A F2(\214le2)2.5 E F0 -.35(Tr)144
+432 S(ue if).35 E F2(\214le1)2.5 E F0(is older than)2.5 E F2(\214le2)2.5
+E F0 2.5(,o)C 2.5(ri)-2.5 G(f)-2.5 E F2(\214le2)2.5 E F0 -.15(ex)2.5 G
+(ists and).15 E F2(\214le1)2.5 E F0(does not.)2.5 E F1<ad6f>108 444 Q F2
+(optname)2.5 E F0 -.35(Tr)144 456 S .263(ue if the shell option).35 F F2
+(optname)2.992 E F0 .262(is enabled.)2.942 F .262
+(See the list of options under the description of the)5.262 F F1<ad6f>
+2.762 E F0(option to the)144 468 Q F1(set)2.5 E F0 -.2(bu)2.5 G
+(iltin belo).2 E -.65(w.)-.25 G F1<ad76>108 480 Q F2(varname)2.5 E F0
+-.35(Tr)144 492 S(ue if the shell v).35 E(ariable)-.25 E F2(varname)2.79
+E F0(is set \(has been assigned a v)2.68 E(alue\).)-.25 E F1<ad52>108
+504 Q F2(varname)2.5 E F0 -.35(Tr)144 516 S(ue if the shell v).35 E
+(ariable)-.25 E F2(varname)2.79 E F0(is set and is a name reference.)
+2.68 E F1<ad7a>108 528 Q F2(string)2.5 E F0 -.35(Tr)144 540 S
+(ue if the length of).35 E F2(string)2.5 E F0(is zero.)2.5 E F2(string)
+108 552 Q F1<ad6e>108 564 Q F2(string)2.5 E F0 -.35(Tr)144 576 S
+(ue if the length of).35 E F2(string)2.84 E F0(is non-zero.)2.72 E F2
+(string1)108 592.8 Q F1(==)2.5 E F2(string2)2.5 E(string1)108 604.8 Q F1
+(=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 616.8 S .861
+(ue if the strings are equal.).35 F F1(=)5.861 E F0 .861
+(should be used with the)3.361 F F1(test)3.361 E F0 .862
+(command for POSIX conformance.)3.362 F .447(When used with the)144
+628.8 R F1([[)2.946 E F0 .446
+(command, this performs pattern matching as described abo)2.946 F .746
+-.15(ve \()-.15 H F1(Compound).15 E(Commands)144 640.8 Q F0(\).)A F2
+(string1)108 657.6 Q F1(!=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 669.6 S
+(ue if the strings are not equal.).35 E F2(string1)108 686.4 Q F1(<)2.5
+E F2(string2)2.5 E F0 -.35(Tr)144 698.4 S(ue if).35 E F2(string1)2.5 E
+F0(sorts before)2.5 E F2(string2)2.5 E F0(le)2.5 E(xicographically)-.15
+E(.)-.65 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(33)188.455 E
+0 Cg EP
+%%Page: 34 34
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10
+/Times-Italic@0 SF(string1)108 84 Q/F2 10/Times-Bold@0 SF(>)2.5 E F1
+(string2)2.5 E F0 -.35(Tr)144 96 S(ue if).35 E F1(string1)2.5 E F0
+(sorts after)2.5 E F1(string2)2.5 E F0(le)2.5 E(xicographically)-.15 E
+(.)-.65 E F1(ar)108.33 112.8 Q(g1)-.37 E F2(OP)2.5 E F1(ar)2.5 E(g2)-.37
+E/F3 9/Times-Bold@0 SF(OP)144 124.8 Q F0 .385(is one of)2.634 F F2
+(\255eq)2.885 E F0(,)A F2(\255ne)2.885 E F0(,)A F2(\255lt)2.885 E F0(,)A
+F2(\255le)2.885 E F0(,)A F2(\255gt)2.885 E F0 2.885(,o)C(r)-2.885 E F2
+(\255ge)2.885 E F0 5.385(.T)C .385
+(hese arithmetic binary operators return true if)-5.385 F F1(ar)2.885 E
+(g1)-.37 E F0 .845(is equal to, not equal to, less than, less than or e\
+qual to, greater than, or greater than or equal to)144 136.8 R F1(ar)144
+148.8 Q(g2)-.37 E F0 3.589(,r)C(especti)-3.589 E -.15(ve)-.25 G(ly).15 E
+(.)-.65 E F1(Ar)7.099 E(g1)-.37 E F0(and)3.589 E F1(ar)3.919 E(g2)-.37 E
+F0 1.089(may be positi)3.609 F 1.389 -.15(ve o)-.25 H 3.589(rn).15 G
+-2.25 -.15(eg a)-3.589 H(ti).15 E 1.389 -.15(ve i)-.25 H(nte).15 E 3.59
+(gers. When)-.15 F 1.09(used with the)3.59 F F2([[)3.59 E F0(command,)
+144 160.8 Q F1(Ar)4.22 E(g1)-.37 E F0(and)3.21 E F1(Ar)4.22 E(g2)-.37 E
+F0 .71(are e)3.23 F -.25(va)-.25 G .71(luated as arithmetic e).25 F
+3.209(xpressions \(see)-.15 F F3 .709(ARITHMETIC EV)3.209 F(ALU)-1.215 E
+(A-)-.54 E(TION)144 172.8 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E/F4
+10.95/Times-Bold@0 SF(SIMPLE COMMAND EXP)72 189.6 Q(ANSION)-.81 E F0
+.613(When a simple command is e)108 201.6 R -.15(xe)-.15 G .614
+(cuted, the shell performs the follo).15 F .614(wing e)-.25 F .614
+(xpansions, assignments, and redi-)-.15 F(rections, from left to right.)
+108 213.6 Q(1.)108 230.4 Q 1.849(The w)144 230.4 R 1.849
+(ords that the parser has mark)-.1 F 1.848(ed as v)-.1 F 1.848
+(ariable assignments \(those preceding the command)-.25 F
+(name\) and redirections are sa)144 242.4 Q -.15(ve)-.2 G 2.5(df).15 G
+(or later processing.)-2.5 E(2.)108 259.2 Q 1.163(The w)144 259.2 R
+1.163(ords that are not v)-.1 F 1.164
+(ariable assignments or redirections are e)-.25 F 3.664(xpanded. If)-.15
+F(an)3.664 E 3.664(yw)-.15 G 1.164(ords remain)-3.764 F .776(after e)144
+271.2 R .776(xpansion, the \214rst w)-.15 F .776(ord is tak)-.1 F .775
+(en to be the name of the command and the remaining w)-.1 F(ords)-.1 E
+(are the ar)144 283.2 Q(guments.)-.18 E(3.)108 300 Q
+(Redirections are performed as described abo)144 300 Q .3 -.15(ve u)-.15
+H(nder).15 E F3(REDIRECTION)2.5 E/F5 9/Times-Roman@0 SF(.)A F0(4.)108
+316.8 Q .716(The te)144 316.8 R .717(xt after the)-.15 F F2(=)3.217 E F0
+.717(in each v)3.217 F .717(ariable assignment under)-.25 F .717
+(goes tilde e)-.18 F .717(xpansion, parameter e)-.15 F(xpansion,)-.15 E
+.34(command substitution, arithmetic e)144 328.8 R .339
+(xpansion, and quote remo)-.15 F -.25(va)-.15 G 2.839(lb).25 G .339
+(efore being assigned to the v)-2.839 F(ari-)-.25 E(able.)144 340.8 Q
+.332(If no command name results, the v)108 357.6 R .332
+(ariable assignments af)-.25 F .332(fect the current shell en)-.25 F
+2.833(vironment. Otherwise,)-.4 F(the)2.833 E -.25(va)108 369.6 S .757
+(riables are added to the en).25 F .757(vironment of the e)-.4 F -.15
+(xe)-.15 G .757(cuted command and do not af).15 F .757
+(fect the current shell en)-.25 F(vi-)-.4 E 3.176(ronment. If)108 381.6
+R(an)3.176 E 3.176(yo)-.15 G 3.176(ft)-3.176 G .677
+(he assignments attempts to assign a v)-3.176 F .677
+(alue to a readonly v)-.25 F .677(ariable, an error occurs, and)-.25 F
+(the command e)108 393.6 Q(xits with a non-zero status.)-.15 E .15
+(If no command name results, redirections are performed, b)108 410.4 R
+.149(ut do not af)-.2 F .149(fect the current shell en)-.25 F 2.649
+(vironment. A)-.4 F(redirection error causes the command to e)108 422.4
+Q(xit with a non-zero status.)-.15 E 1.064
+(If there is a command name left after e)108 439.2 R 1.064(xpansion, e)
+-.15 F -.15(xe)-.15 G 1.064(cution proceeds as described belo).15 F
+4.864 -.65(w. O)-.25 H 1.064(therwise, the).65 F .069(command e)108
+451.2 R 2.569(xits. If)-.15 F .069(one of the e)2.569 F .069
+(xpansions contained a command substitution, the e)-.15 F .068
+(xit status of the command)-.15 F .466(is the e)108 463.2 R .466
+(xit status of the last command substitution performed.)-.15 F .467
+(If there were no command substitutions, the)5.466 F(command e)108 475.2
+Q(xits with a status of zero.)-.15 E F4(COMMAND EXECUTION)72 492 Q F0
+.547(After a command has been split into w)108 504 R .546
+(ords, if it results in a simple command and an optional list of ar)-.1
+F(gu-)-.18 E(ments, the follo)108 516 Q(wing actions are tak)-.25 E(en.)
+-.1 E .379(If the command name contains no slashes, the shell attempts \
+to locate it.)108 532.8 R .379(If there e)5.379 F .379
+(xists a shell function by)-.15 F .246(that name, that function is in)
+108 544.8 R -.2(vo)-.4 G -.1(ke).2 G 2.746(da).1 G 2.746(sd)-2.746 G
+.246(escribed abo)-2.746 F .546 -.15(ve i)-.15 H(n).15 E F3(FUNCTIONS)
+2.746 E F5(.)A F0 .246(If the name does not match a func-)4.746 F
+(tion, the shell searches for it in the list of shell b)108 556.8 Q 2.5
+(uiltins. If)-.2 F 2.5(am)2.5 G(atch is found, that b)-2.5 E
+(uiltin is in)-.2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E .309
+(If the name is neither a shell function nor a b)108 573.6 R .31
+(uiltin, and contains no slashes,)-.2 F F2(bash)2.81 E F0 .31
+(searches each element of)2.81 F(the)108 585.6 Q F3 -.666(PA)3.163 G(TH)
+-.189 E F0 .662(for a directory containing an e)2.913 F -.15(xe)-.15 G
+.662(cutable \214le by that name.).15 F F2(Bash)5.662 E F0 .662
+(uses a hash table to remember)3.162 F 1.914(the full pathnames of e)108
+597.6 R -.15(xe)-.15 G 1.915(cutable \214les \(see).15 F F2(hash)4.415 E
+F0(under)4.415 E F3 1.915(SHELL B)4.415 F(UIL)-.09 E 1.915(TIN COMMANDS)
+-.828 F F0(belo)4.165 E 4.415(w\). A)-.25 F(full)4.415 E .72
+(search of the directories in)108 609.6 R F3 -.666(PA)3.22 G(TH)-.189 E
+F0 .719
+(is performed only if the command is not found in the hash table.)2.97 F
+.719(If the)5.719 F .956(search is unsuccessful, the shell searches for\
+ a de\214ned shell function named)108 621.6 R F2(command_not_f)3.456 E
+(ound_han-)-.25 E(dle)108 633.6 Q F0 6.006(.I)C 3.506(ft)-6.006 G 1.006
+(hat function e)-3.506 F 1.006(xists, it is in)-.15 F -.2(vo)-.4 G -.1
+(ke).2 G 3.506(di).1 G 3.506(nas)-3.506 G 1.005(eparate e)-3.506 F -.15
+(xe)-.15 G 1.005(cution en).15 F 1.005
+(vironment with the original command)-.4 F .255
+(and the original command')108 645.6 R 2.755(sa)-.55 G -.18(rg)-2.755 G
+.255(uments as its ar).18 F .256(guments, and the function')-.18 F 2.756
+(se)-.55 G .256(xit status becomes the e)-2.906 F .256(xit sta-)-.15 F
+.263(tus of that subshell.)108 657.6 R .263(If that function is not de\
+\214ned, the shell prints an error message and returns an e)5.263 F .263
+(xit sta-)-.15 F(tus of 127.)108 669.6 Q 1.089(If the search is success\
+ful, or if the command name contains one or more slashes, the shell e)
+108 686.4 R -.15(xe)-.15 G 1.09(cutes the).15 F .198
+(named program in a separate e)108 698.4 R -.15(xe)-.15 G .198
+(cution en).15 F 2.698(vironment. Ar)-.4 F .198
+(gument 0 is set to the name gi)-.18 F -.15(ve)-.25 G .197
+(n, and the remain-).15 F(ing ar)108 710.4 Q
+(guments to the command are set to the ar)-.18 E(guments gi)-.18 E -.15
+(ve)-.25 G(n, if an).15 E -.65(y.)-.15 G 1.809(If this e)108 727.2 R
+-.15(xe)-.15 G 1.809(cution f).15 F 1.809
+(ails because the \214le is not in e)-.1 F -.15(xe)-.15 G 1.809
+(cutable format, and the \214le is not a directory).15 F 4.309(,i)-.65 G
+4.309(ti)-4.309 G(s)-4.309 E(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(34)188.455 E 0 Cg EP
+%%Page: 35 35
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .678
+(assumed to be a)108 84 R/F1 10/Times-Italic@0 SF .678(shell script)
+3.178 F F0 3.178(,a\214)C .678(le containing shell commands.)-3.178 F
+3.178(As)5.678 G .678(ubshell is spa)-3.178 F .677(wned to e)-.15 F -.15
+(xe)-.15 G .677(cute it.).15 F(This)5.677 E .329
+(subshell reinitializes itself, so that the ef)108 96 R .329
+(fect is as if a ne)-.25 F 2.83(ws)-.25 G .33(hell had been in)-2.83 F
+-.2(vo)-.4 G -.1(ke).2 G 2.83(dt).1 G 2.83(oh)-2.83 G .33
+(andle the script, with)-2.83 F 1.219(the e)108 108 R 1.219
+(xception that the locations of commands remembered by the parent \(see)
+-.15 F/F2 10/Times-Bold@0 SF(hash)3.719 E F0(belo)3.719 E 3.719(wu)-.25
+G(nder)-3.719 E/F3 9/Times-Bold@0 SF(SHELL)3.719 E -.09(BU)108 120 S(IL)
+.09 E(TIN COMMANDS)-.828 E/F4 9/Times-Roman@0 SF(\))A F0
+(are retained by the child.)2.25 E .347(If the program is a \214le be)
+108 136.8 R .347(ginning with)-.15 F F2(#!)2.847 E F0 2.847(,t)C .348(h\
+e remainder of the \214rst line speci\214es an interpreter for the pro-)
+-2.847 F 3.178(gram. The)108 148.8 R .678(shell e)3.178 F -.15(xe)-.15 G
+.678(cutes the speci\214ed interpreter on operating systems that do not\
+ handle this e).15 F -.15(xe)-.15 G(cutable).15 E 1.192(format themselv)
+108 160.8 R 3.692(es. The)-.15 F(ar)3.693 E 1.193
+(guments to the interpreter consist of a single optional ar)-.18 F 1.193
+(gument follo)-.18 F 1.193(wing the)-.25 F 1.131
+(interpreter name on the \214rst line of the program, follo)108 172.8 R
+1.13(wed by the name of the program, follo)-.25 F 1.13(wed by the)-.25 F
+(command ar)108 184.8 Q(guments, if an)-.18 E -.65(y.)-.15 G/F5 10.95
+/Times-Bold@0 SF(COMMAND EXECUTION ENVIR)72 201.6 Q(ONMENT)-.329 E F0
+(The shell has an)108 213.6 Q F1 -.2(ex)2.5 G(ecution en).2 E(vir)-.4 E
+(onment)-.45 E F0 2.5(,w)C(hich consists of the follo)-2.5 E(wing:)-.25
+E<83>108 230.4 Q 1.405(open \214les inherited by the shell at in)144
+230.4 R -.2(vo)-.4 G 1.406
+(cation, as modi\214ed by redirections supplied to the).2 F F2(exec)
+3.906 E F0 -.2(bu)144 242.4 S(iltin).2 E<83>108 259.2 Q(the current w)
+144 259.2 Q(orking directory as set by)-.1 E F2(cd)2.5 E F0(,)A F2
+(pushd)2.5 E F0 2.5(,o)C(r)-2.5 E F2(popd)2.5 E F0 2.5(,o)C 2.5(ri)-2.5
+G(nherited by the shell at in)-2.5 E -.2(vo)-.4 G(cation).2 E<83>108 276
+Q(the \214le creation mode mask as set by)144 276 Q F2(umask)2.5 E F0
+(or inherited from the shell')2.5 E 2.5(sp)-.55 G(arent)-2.5 E<83>108
+292.8 Q(current traps set by)144 292.8 Q F2(trap)2.5 E F0<83>108 309.6 Q
+.257(shell parameters that are set by v)144 309.6 R .256
+(ariable assignment or with)-.25 F F2(set)2.756 E F0 .256
+(or inherited from the shell')2.756 F 2.756(sp)-.55 G(arent)-2.756 E
+(in the en)144 321.6 Q(vironment)-.4 E<83>108 338.4 Q
+(shell functions de\214ned during e)144 338.4 Q -.15(xe)-.15 G
+(cution or inherited from the shell').15 E 2.5(sp)-.55 G
+(arent in the en)-2.5 E(vironment)-.4 E<83>108 355.2 Q
+(options enabled at in)144 355.2 Q -.2(vo)-.4 G(cation \(either by def)
+.2 E(ault or with command-line ar)-.1 E(guments\) or by)-.18 E F2(set)
+2.5 E F0<83>108 372 Q(options enabled by)144 372 Q F2(shopt)2.5 E F0<83>
+108 388.8 Q(shell aliases de\214ned with)144 388.8 Q F2(alias)2.5 E F0
+<83>108 405.6 Q -.25(va)144 405.6 S
+(rious process IDs, including those of background jobs, the v).25 E
+(alue of)-.25 E F2($$)2.5 E F0 2.5(,a)C(nd the v)-2.5 E(alue of)-.25 E
+F3(PPID)2.5 E F0 .426(When a simple command other than a b)108 422.4 R
+.427(uiltin or shell function is to be e)-.2 F -.15(xe)-.15 G .427
+(cuted, it is in).15 F -.2(vo)-.4 G -.1(ke).2 G 2.927(di).1 G 2.927(nas)
+-2.927 G(eparate)-2.927 E -.15(exe)108 434.4 S .134(cution en).15 F .134
+(vironment that consists of the follo)-.4 F 2.634(wing. Unless)-.25 F
+.133(otherwise noted, the v)2.634 F .133(alues are inherited from)-.25 F
+(the shell.)108 446.4 Q<83>108 463.2 Q 1.055(the shell')144 463.2 R
+3.555(so)-.55 G 1.055(pen \214les, plus an)-3.555 F 3.556(ym)-.15 G
+1.056
+(odi\214cations and additions speci\214ed by redirections to the com-)
+-3.556 F(mand)144 475.2 Q<83>108 492 Q(the current w)144 492 Q
+(orking directory)-.1 E<83>108 508.8 Q(the \214le creation mode mask)144
+508.8 Q<83>108 525.6 Q .857(shell v)144 525.6 R .857
+(ariables and functions mark)-.25 F .857(ed for e)-.1 F .857
+(xport, along with v)-.15 F .857(ariables e)-.25 F .857
+(xported for the command,)-.15 F(passed in the en)144 537.6 Q(vironment)
+-.4 E<83>108 554.4 Q .306(traps caught by the shell are reset to the v)
+144 554.4 R .307(alues inherited from the shell')-.25 F 2.807(sp)-.55 G
+.307(arent, and traps ignored)-2.807 F(by the shell are ignored)144
+566.4 Q 2.5(Ac)108 583.2 S(ommand in)-2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5
+(di).1 G 2.5(nt)-2.5 G(his separate en)-2.5 E(vironment cannot af)-.4 E
+(fect the shell')-.25 E 2.5(se)-.55 G -.15(xe)-2.65 G(cution en).15 E
+(vironment.)-.4 E .577(Command substitution, commands grouped with pare\
+ntheses, and asynchronous commands are in)108 600 R -.2(vo)-.4 G -.1(ke)
+.2 G 3.077(di).1 G(n)-3.077 E 2.744(as)108 612 S .244(ubshell en)-2.744
+F .244(vironment that is a duplicate of the shell en)-.4 F .245
+(vironment, e)-.4 F .245(xcept that traps caught by the shell are)-.15 F
+.359(reset to the v)108 624 R .358
+(alues that the shell inherited from its parent at in)-.25 F -.2(vo)-.4
+G 2.858(cation. Builtin).2 F .358(commands that are in)2.858 F -.2(vo)
+-.4 G -.1(ke).2 G(d).1 E .856(as part of a pipeline are also e)108 636 R
+-.15(xe)-.15 G .856(cuted in a subshell en).15 F 3.357
+(vironment. Changes)-.4 F .857(made to the subshell en)3.357 F(viron-)
+-.4 E(ment cannot af)108 648 Q(fect the shell')-.25 E 2.5(se)-.55 G -.15
+(xe)-2.65 G(cution en).15 E(vironment.)-.4 E 1.377(Subshells spa)108
+664.8 R 1.377(wned to e)-.15 F -.15(xe)-.15 G 1.377
+(cute command substitutions inherit the v).15 F 1.377(alue of the)-.25 F
+F2<ad65>3.876 E F0 1.376(option from the parent)3.876 F 2.5(shell. When)
+108 676.8 R(not in)2.5 E F1(posix mode)2.5 E F0(,)A F2(bash)2.5 E F0
+(clears the)2.5 E F2<ad65>2.5 E F0(option in such subshells.)2.5 E .404
+(If a command is follo)108 693.6 R .404(wed by a)-.25 F F2(&)2.904 E F0
+.405(and job control is not acti)2.904 F -.15(ve)-.25 G 2.905(,t).15 G
+.405(he def)-2.905 F .405(ault standard input for the command)-.1 F .198
+(is the empty \214le)108 705.6 R F1(/de)2.698 E(v/null)-.15 E F0 5.198
+(.O)C .198(therwise, the in)-5.198 F -.2(vo)-.4 G -.1(ke).2 G 2.698(dc)
+.1 G .197(ommand inherits the \214le descriptors of the calling shell)
+-2.698 F(as modi\214ed by redirections.)108 717.6 Q(GNU Bash 5.0)72 768
+Q(2018 December 7)139.295 E(35)188.455 E 0 Cg EP
+%%Page: 36 36
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10.95
+/Times-Bold@0 SF(ENVIR)72 84 Q(ONMENT)-.329 E F0 2.353
+(When a program is in)108 96 R -.2(vo)-.4 G -.1(ke).2 G 4.853(di).1 G
+4.853(ti)-4.853 G 4.853(sg)-4.853 G -2.15 -.25(iv e)-4.853 H 4.853(na)
+.25 G 4.853(na)-4.853 G 2.353(rray of strings called the)-4.853 F/F2 10
+/Times-Italic@0 SF(en)4.853 E(vir)-.4 E(onment)-.45 E F0 7.353(.T).68 G
+2.354(his is a list of)-7.353 F F2(name)108 108 Q F0<ad>A F2(value)A F0
+(pairs, of the form)2.5 E F2(name)2.5 E F0(=)A F2(value)A F0(.).18 E
+1.486(The shell pro)108 124.8 R 1.486(vides se)-.15 F -.15(ve)-.25 G
+1.486(ral w).15 F 1.485(ays to manipulate the en)-.1 F 3.985
+(vironment. On)-.4 F(in)3.985 E -.2(vo)-.4 G 1.485
+(cation, the shell scans its o).2 F(wn)-.25 E(en)108 136.8 Q .144(viron\
+ment and creates a parameter for each name found, automatically marking\
+ it for)-.4 F F2 -.2(ex)2.644 G(port).2 E F0 .144(to child pro-)3.324 F
+2.704(cesses. Ex)108 148.8 R .203(ecuted commands inherit the en)-.15 F
+2.703(vironment. The)-.4 F/F3 10/Times-Bold@0 SF(export)2.703 E F0(and)
+2.703 E F3(declar)2.703 E 2.703<65ad>-.18 G(x)-2.703 E F0 .203
+(commands allo)2.703 F 2.703(wp)-.25 G(aram-)-2.703 E 1.153
+(eters and functions to be added to and deleted from the en)108 160.8 R
+3.653(vironment. If)-.4 F 1.153(the v)3.653 F 1.154
+(alue of a parameter in the)-.25 F(en)108 172.8 Q .64
+(vironment is modi\214ed, the ne)-.4 F 3.14(wv)-.25 G .64
+(alue becomes part of the en)-3.39 F .64(vironment, replacing the old.)
+-.4 F .64(The en)5.64 F(viron-)-.4 E .58(ment inherited by an)108 184.8
+R 3.08(ye)-.15 G -.15(xe)-3.23 G .58
+(cuted command consists of the shell').15 F 3.08(si)-.55 G .58
+(nitial en)-3.08 F .58(vironment, whose v)-.4 F .58(alues may be)-.25 F
+.301(modi\214ed in the shell, less an)108 196.8 R 2.801(yp)-.15 G .301
+(airs remo)-2.801 F -.15(ve)-.15 G 2.801(db).15 G 2.801(yt)-2.801 G(he)
+-2.801 E F3(unset)2.801 E F0 .3(command, plus an)2.8 F 2.8(ya)-.15 G .3
+(dditions via the)-2.8 F F3(export)2.8 E F0(and)2.8 E F3(declar)108
+208.8 Q 2.5<65ad>-.18 G(x)-2.5 E F0(commands.)2.5 E .562(The en)108
+225.6 R .562(vironment for an)-.4 F(y)-.15 E F2 .562(simple command)
+3.402 F F0 .563
+(or function may be augmented temporarily by pre\214xing it with)3.833 F
+.203(parameter assignments, as described abo)108 237.6 R .502 -.15(ve i)
+-.15 H(n).15 E/F4 9/Times-Bold@0 SF -.666(PA)2.702 G(RAMETERS).666 E/F5
+9/Times-Roman@0 SF(.)A F0 .202(These assignment statements af)4.702 F
+.202(fect only the)-.25 F(en)108 249.6 Q
+(vironment seen by that command.)-.4 E .81(If the)108 266.4 R F3<ad6b>
+3.31 E F0 .81(option is set \(see the)3.31 F F3(set)3.31 E F0 -.2(bu)
+3.31 G .81(iltin command belo).2 F .81(w\), then)-.25 F F2(all)3.64 E F0
+.81(parameter assignments are placed in)3.82 F(the en)108 278.4 Q
+(vironment for a command, not just those that precede the command name.)
+-.4 E(When)108 295.2 Q F3(bash)3.586 E F0(in)3.586 E -.2(vo)-.4 G -.1
+(ke).2 G 3.586(sa).1 G 3.586(ne)-3.586 G 1.086(xternal command, the v)
+-3.736 F(ariable)-.25 E F3(_)3.586 E F0 1.085
+(is set to the full \214lename of the command and)3.586 F
+(passed to that command in its en)108 307.2 Q(vironment.)-.4 E F1
+(EXIT ST)72 324 Q -1.04(AT)-.986 G(US)1.04 E F0 .15(The e)108 336 R .15
+(xit status of an e)-.15 F -.15(xe)-.15 G .15(cuted command is the v).15
+F .151(alue returned by the)-.25 F F2(waitpid)2.651 E F0 .151
+(system call or equi)2.651 F -.25(va)-.25 G .151(lent func-).25 F 2.848
+(tion. Exit)108 348 R .348(statuses f)2.848 F .347
+(all between 0 and 255, though, as e)-.1 F .347(xplained belo)-.15 F
+1.647 -.65(w, t)-.25 H .347(he shell may use v).65 F .347(alues abo)-.25
+F .647 -.15(ve 1)-.15 H(25).15 E(specially)108 360 Q 5.506(.E)-.65 G
+.506(xit statuses from shell b)-5.506 F .507
+(uiltins and compound commands are also limited to this range.)-.2 F
+(Under)5.507 E(certain circumstances, the shell will use special v)108
+372 Q(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15(Fo)
+108 388.8 S 3.373(rt).15 G .873(he shell')-3.373 F 3.373(sp)-.55 G .873
+(urposes, a command which e)-3.373 F .873(xits with a zero e)-.15 F .873
+(xit status has succeeded.)-.15 F .872(An e)5.872 F .872(xit status of)
+-.15 F .048(zero indicates success.)108 400.8 R 2.548(An)5.048 G .049
+(on-zero e)-2.548 F .049(xit status indicates f)-.15 F 2.549
+(ailure. When)-.1 F 2.549(ac)2.549 G .049(ommand terminates on a f)
+-2.549 F .049(atal sig-)-.1 F(nal)108 412.8 Q F2(N)2.5 E F0(,)A F3(bash)
+2.5 E F0(uses the v)2.5 E(alue of 128+)-.25 E F2(N)A F0(as the e)2.5 E
+(xit status.)-.15 E .405
+(If a command is not found, the child process created to e)108 429.6 R
+-.15(xe)-.15 G .404(cute it returns a status of 127.).15 F .404
+(If a command is)5.404 F(found b)108 441.6 Q(ut is not e)-.2 E -.15(xe)
+-.15 G(cutable, the return status is 126.).15 E(If a command f)108 458.4
+Q(ails because of an error during e)-.1 E
+(xpansion or redirection, the e)-.15 E(xit status is greater than zero.)
+-.15 E .08(Shell b)108 475.2 R .08
+(uiltin commands return a status of 0 \()-.2 F F2(true)A F0 2.581(\)i)C
+2.581(fs)-2.581 G .081(uccessful, and non-zero \()-2.581 F F2(false)A F0
+2.581(\)i)C 2.581(fa)-2.581 G 2.581(ne)-2.581 G .081(rror occurs while)
+-2.581 F(the)108 487.2 Q 2.968(ye)-.15 G -.15(xe)-3.118 G 2.968
+(cute. All).15 F -.2(bu)2.968 G .468(iltins return an e).2 F .468
+(xit status of 2 to indicate incorrect usage, generally in)-.15 F -.25
+(va)-.4 G .467(lid options or).25 F(missing ar)108 499.2 Q(guments.)-.18
+E F3(Bash)108 516 Q F0 .201(itself returns the e)2.701 F .202
+(xit status of the last command e)-.15 F -.15(xe)-.15 G .202
+(cuted, unless a syntax error occurs, in which case).15 F(it e)108 528 Q
+(xits with a non-zero v)-.15 E 2.5(alue. See)-.25 F(also the)2.5 E F3
+(exit)2.5 E F0 -.2(bu)2.5 G(iltin command belo).2 E -.65(w.)-.25 G F1
+(SIGN)72 544.8 Q(ALS)-.219 E F0(When)108 556.8 Q F3(bash)3.183 E F0 .683
+(is interacti)3.183 F -.15(ve)-.25 G 3.183(,i).15 G 3.183(nt)-3.183 G
+.683(he absence of an)-3.183 F 3.183(yt)-.15 G .683(raps, it ignores)
+-3.183 F F4(SIGTERM)3.183 E F0 .682(\(so that)2.933 F F3 .682(kill 0)
+3.182 F F0 .682(does not kill an)3.182 F(interacti)108 568.8 Q .757 -.15
+(ve s)-.25 H .457(hell\), and).15 F F4(SIGINT)2.957 E F0 .458
+(is caught and handled \(so that the)2.707 F F3(wait)2.958 E F0 -.2(bu)
+2.958 G .458(iltin is interruptible\).).2 F .458(In all cases,)5.458 F
+F3(bash)108 580.8 Q F0(ignores)2.5 E F4(SIGQ)2.5 E(UIT)-.09 E F5(.)A F0
+(If job control is in ef)4.5 E(fect,)-.25 E F3(bash)2.5 E F0(ignores)2.5
+E F4(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU)-.162 E F5(,)A F0(and)2.25
+E F4(SIGTSTP)2.5 E F5(.)A F0(Non-b)108 597.6 Q 1.065
+(uiltin commands run by)-.2 F F3(bash)3.565 E F0(ha)3.565 E 1.365 -.15
+(ve s)-.2 H 1.065(ignal handlers set to the v).15 F 1.064
+(alues inherited by the shell from its)-.25 F 3.247(parent. When)108
+609.6 R .747(job control is not in ef)3.247 F .747
+(fect, asynchronous commands ignore)-.25 F F4(SIGINT)3.248 E F0(and)
+2.998 E F4(SIGQ)3.248 E(UIT)-.09 E F0 .748(in addi-)2.998 F .653
+(tion to these inherited handlers.)108 621.6 R .653
+(Commands run as a result of command substitution ignore the k)5.653 F
+-.15(ey)-.1 G(board-).15 E(generated job control signals)108 633.6 Q F4
+(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU)-.162 E F5(,)A F0(and)2.25 E F4
+(SIGTSTP)2.5 E F5(.)A F0 2.045(The shell e)108 650.4 R 2.045
+(xits by def)-.15 F 2.045(ault upon receipt of a)-.1 F F4(SIGHUP)4.545 E
+F5(.)A F0 2.045(Before e)6.545 F 2.045(xiting, an interacti)-.15 F 2.346
+-.15(ve s)-.25 H 2.046(hell resends the).15 F F4(SIGHUP)108 662.4 Q F0
+1.005(to all jobs, running or stopped.)3.255 F 1.004
+(Stopped jobs are sent)6.005 F F4(SIGCONT)3.504 E F0 1.004
+(to ensure that the)3.254 F 3.504(yr)-.15 G(ecei)-3.504 E 1.304 -.15
+(ve t)-.25 H(he).15 E F4(SIGHUP)108 674.4 Q F5(.)A F0 2.529 -.8(To p)
+5.429 H(re).8 E -.15(ve)-.25 G .93(nt the shell from sending the signal\
+ to a particular job, it should be remo).15 F -.15(ve)-.15 G 3.43(df).15
+G .93(rom the)-3.43 F 1.357(jobs table with the)108 686.4 R F3(diso)
+3.857 E(wn)-.1 E F0 -.2(bu)3.857 G 1.357(iltin \(see).2 F F4 1.356
+(SHELL B)3.856 F(UIL)-.09 E 1.356(TIN COMMANDS)-.828 F F0(belo)3.606 E
+1.356(w\) or mark)-.25 F 1.356(ed to not recei)-.1 F -.15(ve)-.25 G F4
+(SIGHUP)108 698.4 Q F0(using)2.25 E F3(diso)2.5 E(wn \255h)-.1 E F0(.)A
+.166(If the)108 715.2 R F3(huponexit)2.666 E F0 .166
+(shell option has been set with)2.666 F F3(shopt)2.666 E F0(,)A F3(bash)
+2.666 E F0 .166(sends a)2.666 F F4(SIGHUP)2.666 E F0 .166
+(to all jobs when an interacti)2.416 F -.15(ve)-.25 G(login shell e)108
+727.2 Q(xits.)-.15 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(36)
+188.455 E 0 Cg EP
+%%Page: 37 37
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(If)108 84 Q/F1 10
+/Times-Bold@0 SF(bash)3.047 E F0 .547(is w)3.047 F .546
+(aiting for a command to complete and recei)-.1 F -.15(ve)-.25 G 3.046
+(sas).15 G .546(ignal for which a trap has been set, the trap)-3.046 F
+.662(will not be e)108 96 R -.15(xe)-.15 G .662
+(cuted until the command completes.).15 F(When)5.663 E F1(bash)3.163 E
+F0 .663(is w)3.163 F .663(aiting for an asynchronous command)-.1 F .99
+(via the)108 108 R F1(wait)3.49 E F0 -.2(bu)3.49 G .99(iltin, the recep\
+tion of a signal for which a trap has been set will cause the).2 F F1
+(wait)3.49 E F0 -.2(bu)3.49 G .99(iltin to).2 F
+(return immediately with an e)108 120 Q
+(xit status greater than 128, immediately after which the trap is e)-.15
+E -.15(xe)-.15 G(cuted.).15 E/F2 10.95/Times-Bold@0 SF(JOB CONTR)72
+136.8 Q(OL)-.329 E/F3 10/Times-Italic@0 SF -.25(Jo)108 148.8 S 4.567(bc)
+.25 G(ontr)-4.567 E(ol)-.45 E F0 2.067(refers to the ability to selecti)
+5.077 F -.15(ve)-.25 G 2.067(ly stop \().15 F F3(suspend)A F0 4.567(\)t)
+C 2.068(he e)-4.567 F -.15(xe)-.15 G 2.068
+(cution of processes and continue).15 F(\()108 160.8 Q F3 -.37(re)C
+(sume).37 E F0 3.202(\)t)C .702(heir e)-3.202 F -.15(xe)-.15 G .702
+(cution at a later point.).15 F 3.202(Au)5.702 G .702
+(ser typically emplo)-3.202 F .702(ys this f)-.1 F .702
+(acility via an interacti)-.1 F 1.001 -.15(ve i)-.25 H(nterf).15 E(ace)
+-.1 E(supplied jointly by the operating system k)108 172.8 Q(ernel')-.1
+E 2.5(st)-.55 G(erminal dri)-2.5 E -.15(ve)-.25 G 2.5(ra).15 G(nd)-2.5 E
+F1(bash)2.5 E F0(.)A .784(The shell associates a)108 189.6 R F3(job)
+5.024 E F0 .784(with each pipeline.)3.514 F .784(It k)5.784 F .785
+(eeps a table of currently e)-.1 F -.15(xe)-.15 G .785
+(cuting jobs, which may be).15 F .341(listed with the)108 201.6 R F1
+(jobs)2.841 E F0 2.841(command. When)2.841 F F1(bash)2.841 E F0 .341
+(starts a job asynchronously \(in the)2.841 F F3(bac)2.84 E(kgr)-.2 E
+(ound)-.45 E F0 .34(\), it prints a line).77 F(that looks lik)108 213.6
+Q(e:)-.1 E([1] 25647)144 230.4 Q .241(indicating that this job is job n\
+umber 1 and that the process ID of the last process in the pipeline ass\
+ociated)108 247.2 R .733(with this job is 25647.)108 259.2 R .732
+(All of the processes in a single pipeline are members of the same job)
+5.733 F(.)-.4 E F1(Bash)5.732 E F0(uses)3.232 E(the)108 271.2 Q F3(job)
+4.24 E F0(abstraction as the basis for job control.)2.73 E 3.062 -.8
+(To f)108 288 T 1.462(acilitate the implementation of the user interf).7
+F 1.463(ace to job control, the operating system maintains the)-.1 F
+.871(notion of a)108 300 R F3(curr)3.371 E .871(ent terminal pr)-.37 F
+.871(ocess gr)-.45 F .871(oup ID)-.45 F F0 5.871(.M)C .87
+(embers of this process group \(processes whose process)-5.871 F .023
+(group ID is equal to the current terminal process group ID\) recei)108
+312 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023
+(board-generated signals such as).15 F/F4 9/Times-Bold@0 SF(SIG-)2.523 E
+(INT)108 324 Q/F5 9/Times-Roman@0 SF(.)A F0 1.347
+(These processes are said to be in the)5.847 F F3(for)3.846 E -.4(eg)
+-.37 G -.45(ro).4 G(und).45 E F0(.).77 E F3(Bac)6.926 E(kgr)-.2 E(ound)
+-.45 E F0 1.346(processes are those whose process)4.616 F .145
+(group ID dif)108 336 R .145(fers from the terminal')-.25 F .146
+(s; such processes are immune to k)-.55 F -.15(ey)-.1 G .146
+(board-generated signals.).15 F .146(Only fore-)5.146 F .16
+(ground processes are allo)108 348 R .16(wed to read from or)-.25 F 2.66
+(,i)-.4 G 2.66(ft)-2.66 G .16(he user so speci\214es with)-2.66 F/F6 10
+/Courier@0 SF .16(stty tostop)2.66 F F0 2.66(,w)C .16(rite to the ter)
+-2.66 F(-)-.2 E 3.051(minal. Background)108 360 R .551
+(processes which attempt to read from \(write to when)3.051 F F6 .551
+(stty tostop)3.051 F F0 .552(is in ef)3.052 F .552(fect\) the)-.25 F
+.718(terminal are sent a)108 372 R F4 .718(SIGTTIN \(SIGTT)3.218 F(OU\))
+-.162 E F0 .718(signal by the k)2.968 F(ernel')-.1 E 3.217(st)-.55 G
+.717(erminal dri)-3.217 F -.15(ve)-.25 G 1.517 -.4(r, w).15 H .717
+(hich, unless caught, sus-).4 F(pends the process.)108 384 Q 1.087
+(If the operating system on which)108 400.8 R F1(bash)3.587 E F0 1.088
+(is running supports job control,)3.588 F F1(bash)3.588 E F0 1.088
+(contains f)3.588 F 1.088(acilities to use it.)-.1 F -.8(Ty)108 412.8 S
+.302(ping the).8 F F3(suspend)3.142 E F0 .302(character \(typically)
+3.572 F F1(^Z)2.801 E F0 2.801(,C)C .301
+(ontrol-Z\) while a process is running causes that process to be)-2.801
+F 2.142(stopped and returns control to)108 424.8 R F1(bash)4.642 E F0
+7.142(.T)C 2.142(yping the)-7.942 F F3 2.142(delayed suspend)4.992 F F0
+2.143(character \(typically)5.413 F F1(^Y)4.643 E F0 4.643(,C)C
+(ontrol-Y\))-4.643 E .021(causes the process to be stopped when it atte\
+mpts to read input from the terminal, and control to be returned)108
+436.8 R(to)108 448.8 Q F1(bash)3.392 E F0 5.892(.T)C .892
+(he user may then manipulate the state of this job, using the)-5.892 F
+F1(bg)3.392 E F0 .892(command to continue it in the)3.392 F .895
+(background, the)108 460.8 R F1(fg)3.395 E F0 .895
+(command to continue it in the fore)3.395 F .895(ground, or the)-.15 F
+F1(kill)3.395 E F0 .894(command to kill it.)3.395 F(A)5.894 E F1(^Z)
+3.394 E F0(tak)3.394 E(es)-.1 E(ef)108 472.8 Q .948(fect immediately)
+-.25 F 3.448(,a)-.65 G .948(nd has the additional side ef)-3.448 F .948
+(fect of causing pending output and typeahead to be dis-)-.25 F(carded.)
+108 484.8 Q .777(There are a number of w)108 501.6 R .777
+(ays to refer to a job in the shell.)-.1 F .777(The character)5.777 F F1
+(%)3.277 E F0 .777(introduces a job speci\214cation)3.277 F(\()108 513.6
+Q F3(jobspec)A F0 3.457(\). Job)B(number)3.457 E F3(n)3.817 E F0 .957
+(may be referred to as)3.697 F F1(%n)3.457 E F0 5.957(.A)C .957
+(job may also be referred to using a pre\214x of the)-2.5 F .59(name us\
+ed to start it, or using a substring that appears in its command line.)
+108 525.6 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F1(%ce)3.09 E
+F0 .59(refers to a)3.09 F(stopped)108 537.6 Q F1(ce)3.463 E F0(job)3.463
+E 5.963(.I)-.4 G 3.463(fap)-5.963 G .963
+(re\214x matches more than one job,)-3.463 F F1(bash)3.463 E F0 .963
+(reports an error)3.463 F 5.963(.U)-.55 G(sing)-5.963 E F1(%?ce)3.463 E
+F0 3.464(,o)C 3.464(nt)-3.464 G .964(he other)-3.464 F .087
+(hand, refers to an)108 549.6 R 2.587(yj)-.15 G .087
+(ob containing the string)-2.587 F F1(ce)2.587 E F0 .087
+(in its command line.)2.587 F .087
+(If the substring matches more than one)5.087 F(job,)108 561.6 Q F1
+(bash)2.518 E F0 .018(reports an error)2.518 F 5.018(.T)-.55 G .018
+(he symbols)-5.018 F F1(%%)2.518 E F0(and)2.518 E F1(%+)2.518 E F0 .018
+(refer to the shell')2.518 F 2.518(sn)-.55 G .018(otion of the)-2.518 F
+F3(curr)2.518 E .018(ent job)-.37 F F0 2.518(,w).23 G .018(hich is)
+-2.518 F .495(the last job stopped while it w)108 573.6 R .495
+(as in the fore)-.1 F .495(ground or started in the background.)-.15 F
+(The)5.494 E F3(pr)4.244 E -.15(ev)-.37 G .494(ious job).15 F F0 .494
+(may be)3.224 F .787(referenced using)108 585.6 R F1<25ad>3.287 E F0
+5.787(.I)C 3.287(ft)-5.787 G .787(here is only a single job,)-3.287 F F1
+(%+)3.287 E F0(and)3.287 E F1<25ad>3.287 E F0 .788
+(can both be used to refer to that job)3.287 F 5.788(.I)-.4 G(n)-5.788 E
+.257(output pertaining to jobs \(e.g., the output of the)108 597.6 R F1
+(jobs)2.756 E F0 .256(command\), the current job is al)2.756 F -.1(wa)
+-.1 G .256(ys \215agged with a).1 F F1(+)2.756 E F0(,)A .41(and the pre)
+108 609.6 R .41(vious job with a)-.25 F F1<ad>2.91 E F0 5.41(.A)C .411
+(single % \(with no accompan)-2.5 F .411
+(ying job speci\214cation\) also refers to the cur)-.15 F(-)-.2 E
+(rent job)108 621.6 Q(.)-.4 E .444
+(Simply naming a job can be used to bring it into the fore)108 638.4 R
+(ground:)-.15 E F1(%1)2.943 E F0 .443(is a synon)2.943 F .443(ym for)
+-.15 F F1 -.63(``)2.943 G .443(fg %1').63 F(')-.63 E F0 2.943(,b)C
+(ringing)-2.943 E 1.472(job 1 from the background into the fore)108
+650.4 R 3.972(ground. Similarly)-.15 F(,)-.65 E F1 -.63(``)3.973 G 1.473
+(%1 &').63 F(')-.63 E F0 1.473(resumes job 1 in the background,)3.973 F
+(equi)108 662.4 Q -.25(va)-.25 G(lent to).25 E F1 -.63(``)2.5 G(bg %1')
+.63 E(')-.63 E F0(.)A .131(The shell learns immediately whene)108 679.2
+R -.15(ve)-.25 G 2.631(raj).15 G .131(ob changes state.)-2.631 F
+(Normally)5.131 E(,)-.65 E F1(bash)2.631 E F0 -.1(wa)2.63 G .13
+(its until it is about to print a).1 F .157
+(prompt before reporting changes in a job')108 691.2 R 2.657(ss)-.55 G
+.157(tatus so as to not interrupt an)-2.657 F 2.658(yo)-.15 G .158
+(ther output.)-2.658 F .158(If the)5.158 F F1<ad62>2.658 E F0 .158
+(option to)2.658 F(the)108 703.2 Q F1(set)2.648 E F0 -.2(bu)2.648 G .148
+(iltin command is enabled,).2 F F1(bash)2.648 E F0 .148
+(reports such changes immediately)2.648 F 5.147(.A)-.65 G .447 -.15
+(ny t)-5.147 H .147(rap on).15 F F4(SIGCHLD)2.647 E F0 .147(is e)2.397 F
+-.15(xe)-.15 G(-).15 E(cuted for each child that e)108 715.2 Q(xits.)
+-.15 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(37)188.455 E 0 Cg
+EP
+%%Page: 38 38
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .032
+(If an attempt to e)108 84 R(xit)-.15 E/F1 10/Times-Bold@0 SF(bash)2.532
+E F0 .032(is made while jobs are stopped \(or)2.532 F 2.533(,i)-.4 G
+2.533(ft)-2.533 G(he)-2.533 E F1(checkjobs)2.533 E F0 .033
+(shell option has been enabled)2.533 F 2.02(using the)108 96 R F1(shopt)
+4.52 E F0 -.2(bu)4.52 G 2.02(iltin, running\), the shell prints a w).2 F
+2.019(arning message, and, if the)-.1 F F1(checkjobs)4.519 E F0 2.019
+(option is)4.519 F .458(enabled, lists the jobs and their statuses.)108
+108 R(The)5.458 E F1(jobs)2.958 E F0 .459
+(command may then be used to inspect their status.)2.958 F .459(If a)
+5.459 F .604(second attempt to e)108 120 R .604
+(xit is made without an interv)-.15 F .604
+(ening command, the shell does not print another w)-.15 F(arning,)-.1 E
+(and an)108 132 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E .644
+(When the shell is w)108 148.8 R .644
+(aiting for a job or process using the)-.1 F F1(wait)3.145 E F0 -.2(bu)
+3.145 G .645(iltin, and job control is enabled,).2 F F1(wait)3.145 E F0
+(will)3.145 E .428(return when the job changes state. The)108 160.8 R F1
+<ad66>2.928 E F0 .428(option will force)2.928 F F1(wait)2.928 E F0 .428
+(to w)2.928 F .428(ait until the job or process terminates)-.1 F
+(before returning.)108 172.8 Q/F2 10.95/Times-Bold@0 SF(PR)72 189.6 Q
+(OMPTING)-.329 E F0 .644(When e)108 201.6 R -.15(xe)-.15 G .644
+(cuting interacti).15 F -.15(ve)-.25 G(ly).15 E(,)-.65 E F1(bash)3.144 E
+F0 .645(displays the primary prompt)3.145 F/F3 9/Times-Bold@0 SF(PS1)
+3.145 E F0 .645(when it is ready to read a command,)2.895 F .428
+(and the secondary prompt)108 213.6 R F3(PS2)2.928 E F0 .427
+(when it needs more input to complete a command.)2.678 F F1(Bash)5.427 E
+F0(displays)2.927 E F3(PS0)2.927 E F0(after)2.677 E .037
+(it reads a command b)108 225.6 R .037(ut before e)-.2 F -.15(xe)-.15 G
+.037(cuting it.).15 F F1(Bash)5.037 E F0(displays)2.537 E F3(PS4)2.538 E
+F0 .038(as described abo)2.288 F .338 -.15(ve b)-.15 H .038
+(efore tracing each com-).15 F 1.122(mand when the)108 237.6 R F1<ad78>
+3.622 E F0 1.122(option is enabled.)3.622 F F1(Bash)6.122 E F0(allo)
+3.622 E 1.122(ws these prompt strings to be customized by inserting a)
+-.25 F(number of backslash-escaped special characters that are decoded \
+as follo)108 249.6 Q(ws:)-.25 E F1(\\a)144 261.6 Q F0
+(an ASCII bell character \(07\))180 261.6 Q F1(\\d)144 273.6 Q F0
+(the date in "W)180 273.6 Q(eekday Month Date" format \(e.g., "T)-.8 E
+(ue May 26"\))-.45 E F1(\\D{)144 285.6 Q/F4 10/Times-Italic@0 SF(format)
+A F1(})A F0(the)180 297.6 Q F4(format)3.926 E F0 1.426(is passed to)
+3.926 F F4(strftime)3.926 E F0 1.427
+(\(3\) and the result is inserted into the prompt string; an)B(empty)180
+309.6 Q F4(format)2.5 E F0
+(results in a locale-speci\214c time representation.)2.5 E
+(The braces are required)5 E F1(\\e)144 321.6 Q F0
+(an ASCII escape character \(033\))180 321.6 Q F1(\\h)144 333.6 Q F0
+(the hostname up to the \214rst `.)180 333.6 Q(')-.7 E F1(\\H)144 345.6
+Q F0(the hostname)180 345.6 Q F1(\\j)144 357.6 Q F0
+(the number of jobs currently managed by the shell)180 357.6 Q F1(\\l)
+144 369.6 Q F0(the basename of the shell')180 369.6 Q 2.5(st)-.55 G
+(erminal de)-2.5 E(vice name)-.25 E F1(\\n)144 381.6 Q F0(ne)180 381.6 Q
+(wline)-.25 E F1(\\r)144 393.6 Q F0(carriage return)180 393.6 Q F1(\\s)
+144 405.6 Q F0(the name of the shell, the basename of)180 405.6 Q F1($0)
+2.5 E F0(\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F1
+(\\t)144 417.6 Q F0(the current time in 24-hour HH:MM:SS format)180
+417.6 Q F1(\\T)144 429.6 Q F0
+(the current time in 12-hour HH:MM:SS format)180 429.6 Q F1(\\@)144
+441.6 Q F0(the current time in 12-hour am/pm format)180 441.6 Q F1(\\A)
+144 453.6 Q F0(the current time in 24-hour HH:MM format)180 453.6 Q F1
+(\\u)144 465.6 Q F0(the username of the current user)180 465.6 Q F1(\\v)
+144 477.6 Q F0(the v)180 477.6 Q(ersion of)-.15 E F1(bash)2.5 E F0
+(\(e.g., 2.00\))2.5 E F1(\\V)144 489.6 Q F0(the release of)180 489.6 Q
+F1(bash)2.5 E F0 2.5(,v)C(ersion + patch le)-2.65 E -.15(ve)-.25 G 2.5
+(l\().15 G(e.g., 2.00.0\))-2.5 E F1(\\w)144 501.6 Q F0 .116
+(the current w)180 501.6 R .116(orking directory)-.1 F 2.616(,w)-.65 G
+(ith)-2.616 E F3($HOME)2.616 E F0(abbre)2.366 E .115
+(viated with a tilde \(uses the v)-.25 F .115(alue of the)-.25 F F3(PR)
+180 513.6 Q(OMPT_DIR)-.27 E(TRIM)-.36 E F0 -.25(va)2.25 G(riable\)).25 E
+F1(\\W)144 525.6 Q F0(the basename of the current w)180 525.6 Q
+(orking directory)-.1 E 2.5(,w)-.65 G(ith)-2.5 E F3($HOME)2.5 E F0
+(abbre)2.25 E(viated with a tilde)-.25 E F1(\\!)144 537.6 Q F0
+(the history number of this command)180 537.6 Q F1(\\#)144 549.6 Q F0
+(the command number of this command)180 549.6 Q F1(\\$)144 561.6 Q F0
+(if the ef)180 561.6 Q(fecti)-.25 E .3 -.15(ve U)-.25 H(ID is 0, a).15 E
+F1(#)2.5 E F0 2.5(,o)C(therwise a)-2.5 E F1($)2.5 E(\\)144 573.6 Q F4
+(nnn)A F0(the character corresponding to the octal number)180 573.6 Q F4
+(nnn)2.5 E F1(\\\\)144 585.6 Q F0 2.5(ab)180 585.6 S(ackslash)-2.5 E F1
+(\\[)144 597.6 Q F0(be)180 597.6 Q 1.257(gin a sequence of non-printing\
+ characters, which could be used to embed a terminal)-.15 F
+(control sequence into the prompt)180 609.6 Q F1(\\])144 621.6 Q F0
+(end a sequence of non-printing characters)180 621.6 Q .12
+(The command number and the history number are usually dif)108 638.4 R
+.119(ferent: the history number of a command is its)-.25 F 1.585(positi\
+on in the history list, which may include commands restored from the hi\
+story \214le \(see)108 650.4 R F3(HIST)4.085 E(OR)-.162 E(Y)-.315 E F0
+(belo)108 662.4 Q .541(w\), while the command number is the position in\
+ the sequence of commands e)-.25 F -.15(xe)-.15 G .54
+(cuted during the cur).15 F(-)-.2 E .546(rent shell session.)108 674.4 R
+.546(After the string is decoded, it is e)5.546 F .546
+(xpanded via parameter e)-.15 F .546(xpansion, command substitu-)-.15 F
+.352(tion, arithmetic e)108 686.4 R .352(xpansion, and quote remo)-.15 F
+-.25(va)-.15 G .352(l, subject to the v).25 F .352(alue of the)-.25 F F1
+(pr)2.852 E(omptv)-.18 E(ars)-.1 E F0 .351(shell option \(see the)2.852
+F(description of the)108 698.4 Q F1(shopt)2.5 E F0(command under)2.5 E
+F3(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)
+-.25 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(38)188.455 E 0 Cg
+EP
+%%Page: 39 39
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10.95
+/Times-Bold@0 SF(READLINE)72 84 Q F0 .15
+(This is the library that handles reading input when using an interacti)
+108 96 R .451 -.15(ve s)-.25 H .151(hell, unless the).15 F/F2 10
+/Times-Bold@0 SF(\255\255noediting)2.651 E F0(option)2.651 E 1.209
+(is gi)108 108 R -.15(ve)-.25 G 3.709(na).15 G 3.709(ts)-3.709 G 1.209
+(hell in)-3.709 F -.2(vo)-.4 G 3.709(cation. Line).2 F 1.208
+(editing is also used when using the)3.709 F F2<ad65>3.708 E F0 1.208
+(option to the)3.708 F F2 -.18(re)3.708 G(ad).18 E F0 -.2(bu)3.708 G
+3.708(iltin. By).2 F(def)108 120 Q .851
+(ault, the line editing commands are similar to those of Emacs.)-.1 F
+3.351(Av)5.851 G .851(i-style line editing interf)-3.351 F .852
+(ace is also)-.1 F -.2(av)108 132 S 3.35(ailable. Line)-.05 F .85
+(editing can be enabled at an)3.35 F 3.35(yt)-.15 G .85(ime using the)
+-3.35 F F2 .85(\255o emacs)3.35 F F0(or)3.35 E F2 .85(\255o vi)3.35 F F0
+.85(options to the)3.35 F F2(set)3.35 E F0 -.2(bu)3.35 G(iltin).2 E
+(\(see)108 144 Q/F3 9/Times-Bold@0 SF .762(SHELL B)3.262 F(UIL)-.09 E
+.762(TIN COMMANDS)-.828 F F0(belo)3.012 E 3.262(w\). T)-.25 F 3.263(ot)
+-.8 G .763(urn of)-3.263 F 3.263(fl)-.25 G .763
+(ine editing after the shell is running, use the)-3.263 F F2(+o)3.263 E
+(emacs)108 156 Q F0(or)2.5 E F2(+o vi)2.5 E F0(options to the)2.5 E F2
+(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F2(Readline Notation)87 172.8 Q
+F0 .463(In this section, the Emacs-style notation is used to denote k)
+108 184.8 R -.15(ey)-.1 G(strok).15 E 2.963(es. Control)-.1 F -.1(ke)
+2.963 G .463(ys are denoted by C\255)-.05 F/F4 10/Times-Italic@0 SF -.1
+(ke)C(y)-.2 E F0(,)A 1.152(e.g., C\255n means Control\255N.)108 196.8 R
+(Similarly)6.152 E(,)-.65 E F4(meta)4.032 E F0 -.1(ke)3.913 G 1.153
+(ys are denoted by M\255)-.05 F F4 -.1(ke)C(y)-.2 E F0 3.653(,s)C 3.653
+(oM)-3.653 G 1.153(\255x means Meta\255X.)-3.653 F(\(On)6.153 E -.1(ke)
+108 208.8 S .831(yboards without a)-.05 F F4(meta)3.711 E F0 -.1(ke)
+3.591 G 2.131 -.65(y, M)-.05 H<ad>.65 E F4(x)A F0 .831(means ESC)3.331 F
+F4(x)3.331 E F0 3.331(,i)C .83(.e., press the Escape k)-3.331 F 1.13
+-.15(ey t)-.1 H .83(hen the).15 F F4(x)4.1 E F0 -.1(ke)3.86 G 4.63 -.65
+(y. T)-.05 H .83(his mak).65 F(es)-.1 E .599(ESC the)108 220.8 R F4 .599
+(meta pr)3.099 F(e\214x)-.37 E F0 5.599(.T)C .599
+(he combination M\255C\255)-5.599 F F4(x)A F0 .599
+(means ESC\255Control\255)3.099 F F4(x)A F0 3.099(,o)C 3.099(rp)-3.099 G
+.6(ress the Escape k)-3.099 F .9 -.15(ey t)-.1 H .6(hen hold).15 F
+(the Control k)108 232.8 Q .3 -.15(ey w)-.1 H(hile pressing the).15 E F4
+(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G(\)).65 E .62
+(Readline commands may be gi)108 249.6 R -.15(ve)-.25 G 3.119(nn).15 G
+(umeric)-3.119 E F4(ar)3.119 E(guments)-.37 E F0 3.119(,w).27 G .619
+(hich normally act as a repeat count.)-3.119 F(Sometimes,)5.619 E(ho)108
+261.6 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H 3.118(ti).4 G
+3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619
+(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne)
+.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619
+(ument to a command that).18 F 1.019(acts in the forw)108 273.6 R 1.018
+(ard direction \(e.g.,)-.1 F F2(kill\255line)3.518 E F0 3.518(\)c)C
+1.018(auses that command to act in a backw)-3.518 F 1.018
+(ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 285.6 Q
+(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo)
+-.25 E -.65(w.)-.25 G .811(When a command is described as)108 302.4 R F4
+(killing)3.311 E F0(te)3.311 E .811(xt, the te)-.15 F .811
+(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .812
+(or possible future retrie)-3.311 F -.25(va)-.25 G 3.312(l\().25 G F4
+(yank-)-3.312 E(ing)108 314.4 Q F0 2.529(\). The)B .029(killed te)2.529
+F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F4
+.029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H
+.029(ills cause the te).15 F .029(xt to be accumulated into one unit,)
+-.15 F .567(which can be yank)108 326.4 R .567(ed all at once.)-.1 F
+.567(Commands which do not kill te)5.567 F .567
+(xt separate the chunks of te)-.15 F .567(xt on the kill)-.15 F(ring.)
+108 338.4 Q F2(Readline Initialization)87 355.2 Q F0 .091(Readline is c\
+ustomized by putting commands in an initialization \214le \(the)108
+367.2 R F4(inputr)2.591 E(c)-.37 E F0 2.591(\214le\). The)2.591 F .091
+(name of this \214le)2.591 F .196(is tak)108 379.2 R .196(en from the v)
+-.1 F .196(alue of the)-.25 F F3(INPUTRC)2.696 E F0 -.25(va)2.446 G
+2.696(riable. If).25 F .196(that v)2.696 F .196
+(ariable is unset, the def)-.25 F .196(ault is)-.1 F F4(~/.inputr)2.696
+E(c)-.37 E F0 5.196(.W).31 G .197(hen a)-5.196 F 1.034(program which us\
+es the readline library starts up, the initialization \214le is read, a\
+nd the k)108 391.2 R 1.334 -.15(ey b)-.1 H 1.034(indings and).15 F -.25
+(va)108 403.2 S 1.149(riables are set.).25 F 1.149(There are only a fe)
+6.149 F 3.649(wb)-.25 G 1.149(asic constructs allo)-3.649 F 1.15
+(wed in the readline initialization \214le.)-.25 F(Blank)6.15 E .737
+(lines are ignored.)108 415.2 R .737(Lines be)5.737 F .737
+(ginning with a)-.15 F F2(#)3.237 E F0 .737(are comments.)3.237 F .737
+(Lines be)5.737 F .737(ginning with a)-.15 F F2($)3.237 E F0 .736
+(indicate conditional)3.236 F 2.5(constructs. Other)108 427.2 R
+(lines denote k)2.5 E .3 -.15(ey b)-.1 H(indings and v).15 E
+(ariable settings.)-.25 E .986(The def)108 444 R .986(ault k)-.1 F -.15
+(ey)-.1 G .987(-bindings may be changed with an).15 F F4(inputr)3.497 E
+(c)-.37 E F0 3.487(\214le. Other)3.797 F .987
+(programs that use this library may)3.487 F(add their o)108 456 Q
+(wn commands and bindings.)-.25 E -.15(Fo)108 472.8 S 2.5(re).15 G
+(xample, placing)-2.65 E(M\255Control\255u: uni)144 489.6 Q -.15(ve)-.25
+G(rsal\255ar).15 E(gument)-.18 E(or)108 501.6 Q(C\255Meta\255u: uni)144
+513.6 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 525.6
+Q F4(inputr)2.51 E(c)-.37 E F0 -.1(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G
+(\255C\255u e)-2.5 E -.15(xe)-.15 G(cute the readline command).15 E F4
+(univer)2.5 E(sal\255ar)-.1 E(gument)-.37 E F0(.).68 E 1.261(The follo)
+108 542.4 R 1.261(wing symbolic character names are recognized:)-.25 F
+F4 -.4(RU)3.761 G(BOUT).4 E F0(,)1.27 E F4(DEL)3.761 E F0(,).53 E F4
+(ESC)3.761 E F0(,).72 E F4(LFD)3.761 E F0(,).28 E F4(NEWLINE)3.76 E F0
+(,).73 E F4(RET)3.76 E F0(,)1.27 E F4(RETURN)108 554.4 Q F0(,)1.1 E F4
+(SPC)2.5 E F0(,).72 E F4(SP)2.5 E -.3(AC)-.9 G(E).3 E F0 2.5(,a).73 G
+(nd)-2.5 E F4 -.5(TA)2.5 G(B).5 E F0(.).27 E .209
+(In addition to command names, readline allo)108 571.2 R .209(ws k)-.25
+F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209
+(ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i)
+-.1 H(s).15 E(pressed \(a)108 583.2 Q F4(macr)2.5 E(o)-.45 E F0(\).)A F2
+(Readline K)87 600 Q(ey Bindings)-.25 E F0 .366
+(The syntax for controlling k)108 612 R .666 -.15(ey b)-.1 H .366
+(indings in the).15 F F4(inputr)2.876 E(c)-.37 E F0 .366
+(\214le is simple.)3.176 F .366(All that is required is the name of the)
+5.366 F .263(command or the te)108 624 R .264(xt of a macro and a k)-.15
+F .564 -.15(ey s)-.1 H .264(equence to which it should be bound.).15 F
+.264(The name may be speci-)5.264 F .853(\214ed in one of tw)108 636 R
+3.353(ow)-.1 G .853(ays: as a symbolic k)-3.453 F 1.153 -.15(ey n)-.1 H
+.853(ame, possibly with).15 F F4(Meta\255)3.353 E F0(or)3.353 E F4
+(Contr)3.353 E(ol\255)-.45 E F0(pre\214x)3.353 E .853(es, or as a k)-.15
+F -.15(ey)-.1 G(sequence.)108 648 Q .16(When using the form)108 664.8 R
+F2 -.1(ke)2.66 G(yname).1 E F0(:)A F4(function\255name).833 E F0(or)2.66
+E F4(macr)2.66 E(o)-.45 E F0(,)A F4 -.1(ke)2.66 G(yname)-.2 E F0 .161
+(is the name of a k)2.84 F .461 -.15(ey s)-.1 H .161(pelled out in Eng-)
+.15 F 2.5(lish. F)108 676.8 R(or e)-.15 E(xample:)-.15 E(Control-u: uni)
+144 700.8 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E
+(Meta-Rubout: backw)144 712.8 Q(ard-kill-w)-.1 E(ord)-.1 E
+(Control-o: "> output")144 724.8 Q(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(39)188.455 E 0 Cg EP
+%%Page: 40 40
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .699(In the abo)
+108 84 R .998 -.15(ve ex)-.15 H(ample,).15 E/F1 10/Times-Italic@0 SF
+(C\255u)3.038 E F0 .698(is bound to the function)3.448 F/F2 10
+/Times-Bold@0 SF(uni)3.198 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E
+F0(,)A F1(M\255DEL)3.878 E F0 .698(is bound to the func-)3.728 F(tion)
+108 96 Q F2(backward\255kill\255w)2.758 E(ord)-.1 E F0 2.758(,a)C(nd)
+-2.758 E F1(C\255o)2.598 E F0 .258(is bound to run the macro e)2.938 F
+.259(xpressed on the right hand side \(that is, to)-.15 F(insert the te)
+108 108 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0
+(into the line\).)2.5 E .056(In the second form,)108 124.8 R F2("k)2.556
+E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr)
+2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055
+(fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15
+(ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284
+(denoting an entire k)108 136.8 R 1.584 -.15(ey s)-.1 H 1.284(equence m\
+ay be speci\214ed by placing the sequence within double quotes.).15 F
+(Some)6.284 E .386(GNU Emacs style k)108 148.8 R .686 -.15(ey e)-.1 H
+.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .385
+(xample, b)-.15 F .385(ut the symbolic character names)-.2 F
+(are not recognized.)108 160.8 Q("\\C\255u": uni)144 184.8 Q -.15(ve)
+-.25 G(rsal\255ar).15 E(gument)-.18 E
+("\\C\255x\\C\255r": re\255read\255init\255\214le)144 196.8 Q
+("\\e[11~": "Function K)144 208.8 Q .3 -.15(ey 1)-.25 H(").15 E .314
+(In this e)108 225.6 R(xample,)-.15 E F1(C\255u)2.654 E F0 .314(is ag)
+3.064 F .315(ain bound to the function)-.05 F F2(uni)2.815 E -.1(ve)-.1
+G(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .315(C\255x C\255r)5.155 F F0
+.315(is bound to the func-)3.545 F(tion)108 237.6 Q F2 -.18(re)2.5 G
+<ad72>.18 E(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1
+(ESC [ 1 1 ~)3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F3
+(Function Key 1)2.5 E F0(.)A
+(The full set of GNU Emacs style escape sequences is)108 254.4 Q F2
+<5c43ad>144 266.4 Q F0(control pre\214x)180 266.4 Q F2<5c4dad>144 278.4
+Q F0(meta pre\214x)180 278.4 Q F2(\\e)144 290.4 Q F0
+(an escape character)180 290.4 Q F2(\\\\)144 302.4 Q F0(backslash)180
+302.4 Q F2(\\")144 314.4 Q F0(literal ")180 314.4 Q F2<5c08>144 326.4 Q
+F0(literal \010)180 326.4 Q(In addition to the GNU Emacs style escape s\
+equences, a second set of backslash escapes is a)108 343.2 Q -.25(va)-.2
+G(ilable:).25 E F2(\\a)144 355.2 Q F0(alert \(bell\))180 355.2 Q F2(\\b)
+144 367.2 Q F0(backspace)180 367.2 Q F2(\\d)144 379.2 Q F0(delete)180
+379.2 Q F2(\\f)144 391.2 Q F0(form feed)180 391.2 Q F2(\\n)144 403.2 Q
+F0(ne)180 403.2 Q(wline)-.25 E F2(\\r)144 415.2 Q F0(carriage return)180
+415.2 Q F2(\\t)144 427.2 Q F0(horizontal tab)180 427.2 Q F2(\\v)144
+439.2 Q F0 -.15(ve)180 439.2 S(rtical tab).15 E F2(\\)144 451.2 Q F1
+(nnn)A F0(the eight-bit character whose v)180 451.2 Q
+(alue is the octal v)-.25 E(alue)-.25 E F1(nnn)2.5 E F0
+(\(one to three digits\))2.5 E F2(\\x)144 463.2 Q F1(HH)A F0
+(the eight-bit character whose v)180 463.2 Q(alue is the he)-.25 E
+(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh)
+-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E 1.142(When entering the te)108
+480 R 1.141(xt of a macro, single or double quotes must be used to indi\
+cate a macro de\214nition.)-.15 F .089(Unquoted te)108 492 R .089
+(xt is assumed to be a function name.)-.15 F .09(In the macro body)5.089
+F 2.59(,t)-.65 G .09(he backslash escapes described abo)-2.59 F -.15(ve)
+-.15 G(are e)108 504 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E
+2.5(yo)-.15 G(ther character in the macro te)-2.5 E
+(xt, including " and \010.)-.15 E F2(Bash)108 520.8 Q F0(allo)2.93 E .43
+(ws the current readline k)-.25 F .73 -.15(ey b)-.1 H .429
+(indings to be displayed or modi\214ed with the).15 F F2(bind)2.929 E F0
+-.2(bu)2.929 G .429(iltin command.).2 F .045
+(The editing mode may be switched during interacti)108 532.8 R .345 -.15
+(ve u)-.25 H .046(se by using the).15 F F2<ad6f>2.546 E F0 .046
+(option to the)2.546 F F2(set)2.546 E F0 -.2(bu)2.546 G .046
+(iltin command).2 F(\(see)108 544.8 Q/F4 9/Times-Bold@0 SF(SHELL B)2.5 E
+(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F2
+(Readline V)87 561.6 Q(ariables)-.92 E F0 .044(Readline has v)108 573.6
+R .043(ariables that can be used to further customize its beha)-.25 F
+(vior)-.2 E 5.043(.A)-.55 G -.25(va)-2.5 G .043
+(riable may be set in the).25 F F1(inpu-)2.553 E(tr)108 585.6 Q(c)-.37 E
+F0(\214le with a statement of the form)2.81 E F2(set)144 602.4 Q F1
+(variable\255name value)2.5 E F0 .79(Except where noted, readline v)108
+619.2 R .79(ariables can tak)-.25 F 3.29(et)-.1 G .79(he v)-3.29 F
+(alues)-.25 E F2(On)3.29 E F0(or)3.29 E F2(Off)3.29 E F0 .79
+(\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).).05 F(Unrecog-)
+5.79 E .449(nized v)108 631.2 R .448(ariable names are ignored.)-.25 F
+.448(When a v)5.448 F .448(ariable v)-.25 F .448
+(alue is read, empty or null v)-.25 F .448(alues, "on" \(case-insensi-)
+-.25 F(ti)108 643.2 Q -.15(ve)-.25 G .467(\), and "1" are equi).15 F
+-.25(va)-.25 G .468(lent to).25 F F2(On)2.968 E F0 5.468(.A)C .468
+(ll other v)-5.468 F .468(alues are equi)-.25 F -.25(va)-.25 G .468
+(lent to).25 F F2(Off)2.968 E F0 5.468(.T)C .468(he v)-5.468 F .468
+(ariables and their def)-.25 F(ault)-.1 E -.25(va)108 655.2 S(lues are:)
+.25 E F2(bell\255style \(audible\))108 672 Q F0 .011
+(Controls what happens when readline w)144 684 R .011
+(ants to ring the terminal bell.)-.1 F .01(If set to)5.01 F F2(none)2.51
+E F0 2.51(,r)C .01(eadline ne)-2.51 F -.15(ve)-.25 G(r).15 E .94
+(rings the bell.)144 696 R .94(If set to)5.94 F F2(visible)3.44 E F0
+3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25(va)
+-.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F2(audible)3.44 E F0(,)A
+(readline attempts to ring the terminal')144 708 Q 2.5(sb)-.55 G(ell.)
+-2.5 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(40)188.455 E 0 Cg
+EP
+%%Page: 41 41
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(bind\255tty\255special\255chars \(On\))108 84 Q F0 .056(If set to)144
+96 R F1(On)2.556 E F0 2.556(,r)C .056(eadline attempts to bind the cont\
+rol characters treated specially by the k)-2.556 F(ernel')-.1 E 2.555
+(st)-.55 G(ermi-)-2.555 E(nal dri)144 108 Q -.15(ve)-.25 G 2.5(rt).15 G
+2.5(ot)-2.5 G(heir readline equi)-2.5 E -.25(va)-.25 G(lents.).25 E F1
+(blink\255matching\255par)108 120 Q(en \(Off\))-.18 E F0 .21(If set to)
+144 132 R F1(On)2.71 E F0 2.71(,r)C .21
+(eadline attempts to brie\215y mo)-2.71 F .51 -.15(ve t)-.15 H .21
+(he cursor to an opening parenthesis when a closing).15 F
+(parenthesis is inserted.)144 144 Q F1(color)108 156 Q
+(ed\255completion\255pr)-.18 E(e\214x \(Off\))-.18 E F0 .515(If set to)
+144 168 R F1(On)3.015 E F0 3.015(,w)C .515(hen listing completions, rea\
+dline displays the common pre\214x of the set of possible)-3.015 F 2.935
+(completions using a dif)144 180 R 2.935(ferent color)-.25 F 7.936(.T)
+-.55 G 2.936(he color de\214nitions are tak)-7.936 F 2.936
+(en from the v)-.1 F 2.936(alue of the)-.25 F F1(LS_COLORS)144 192 Q F0
+(en)2.5 E(vironment v)-.4 E(ariable.)-.25 E F1(color)108 204 Q
+(ed\255stats \(Off\))-.18 E F0 1.58(If set to)144 216 R F1(On)4.08 E F0
+4.08(,r)C 1.579(eadline displays possible completions using dif)-4.08 F
+1.579(ferent colors to indicate their \214le)-.25 F 2.5(type. The)144
+228 R(color de\214nitions are tak)2.5 E(en from the v)-.1 E(alue of the)
+-.25 E F1(LS_COLORS)2.5 E F0(en)2.5 E(vironment v)-.4 E(ariable.)-.25 E
+F1(comment\255begin \(`)108 240 Q(`#')-.63 E('\))-.63 E F0 .884
+(The string that is inserted when the readline)144 252 R F1
+(insert\255comment)3.385 E F0 .885(command is e)3.385 F -.15(xe)-.15 G
+3.385(cuted. This).15 F(com-)3.385 E(mand is bound to)144 264 Q F1
+(M\255#)2.5 E F0(in emacs mode and to)2.5 E F1(#)2.5 E F0
+(in vi command mode.)2.5 E F1(completion\255display\255width \(\2551\))
+108 276 Q F0 1.453(The number of screen columns used to display possibl\
+e matches when performing completion.)144 288 R .193(The v)144 300 R
+.193(alue is ignored if it is less than 0 or greater than the terminal \
+screen width.)-.25 F 2.694(Av)5.194 G .194(alue of 0 will)-2.944 F
+(cause matches to be displayed one per line.)144 312 Q(The def)5 E
+(ault v)-.1 E(alue is \2551.)-.25 E F1(completion\255ignor)108 324 Q
+(e\255case \(Off\))-.18 E F0(If set to)144 336 Q F1(On)2.5 E F0 2.5(,r)C
+(eadline performs \214lename matching and completion in a case\255insen\
+siti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1
+(completion\255map\255case \(Off\))108 348 Q F0 .094(If set to)144 360 R
+F1(On)2.593 E F0 2.593(,a)C(nd)-2.593 E F1(completion\255ignor)2.593 E
+(e\255case)-.18 E F0 .093(is enabled, readline treats h)2.593 F .093
+(yphens \()-.05 F/F2 10/Times-Italic@0 SF<ad>A F0 2.593(\)a)C .093
+(nd underscores)-2.593 F(\()144 372 Q F2(_)A F0 2.5(\)a)C 2.5(se)-2.5 G
+(qui)-2.5 E -.25(va)-.25 G(lent when performing case\255insensiti).25 E
+.3 -.15(ve \214)-.25 H(lename matching and completion.).15 E F1
+(completion\255pr)108 384 Q(e\214x\255display\255length \(0\))-.18 E F0
+.829(The length in characters of the common pre\214x of a list of possi\
+ble completions that is displayed)144 396 R 1.275
+(without modi\214cation.)144 408 R 1.275(When set to a v)6.275 F 1.274
+(alue greater than zero, common pre\214x)-.25 F 1.274
+(es longer than this)-.15 F -.25(va)144 420 S(lue are replaced with an \
+ellipsis when displaying possible completions.).25 E F1
+(completion\255query\255items \(100\))108 432 Q F0 .529
+(This determines when the user is queried about vie)144 444 R .53
+(wing the number of possible completions gen-)-.25 F .561(erated by the)
+144 456 R F1(possible\255completions)3.061 E F0 3.061(command. It)3.061
+F .561(may be set to an)3.061 F 3.06(yi)-.15 G(nte)-3.06 E .56(ger v)
+-.15 F .56(alue greater than or)-.25 F .782(equal to zero.)144 468 R
+.783(If the number of possible completions is greater than or equal to \
+the v)5.782 F .783(alue of this)-.25 F -.25(va)144 480 S .237
+(riable, the user is ask).25 F .237(ed whether or not he wishes to vie)
+-.1 F 2.737(wt)-.25 G .237(hem; otherwise the)-2.737 F 2.737(ya)-.15 G
+.237(re simply listed)-2.737 F(on the terminal.)144 492 Q F1(con)108 504
+Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .612(If set to)144 516 R F1(On)
+3.112 E F0 3.112(,r)C .613(eadline will con)-3.112 F -.15(ve)-.4 G .613
+(rt characters with the eighth bit set to an ASCII k).15 F .913 -.15
+(ey s)-.1 H .613(equence by).15 F .541
+(stripping the eighth bit and pre\214xing an escape character \(in ef)
+144 528 R .541(fect, using escape as the)-.25 F F2 .541(meta pr)3.041 F
+(e-)-.37 E<8c78>144 540 Q F0 2.5(\). The)B(def)2.5 E(ault is)-.1 E F2
+(On)2.5 E F0 2.5(,b)C(ut readline will set it to)-2.7 E F2(Of)2.5 E(f)
+-.18 E F0(if the locale contains eight-bit characters.)2.5 E F1
+(disable\255completion \(Off\))108 552 Q F0 .038(If set to)144 564 R F1
+(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)-2.538 F .038
+(ord completion.)-.1 F .038
+(Completion characters will be inserted into the)5.038 F(line as if the)
+144 576 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E F0
+(.)A F1(echo\255contr)108 588 Q(ol\255characters \(On\))-.18 E F0 1.211
+(When set to)144 600 R F1(On)3.711 E F0 3.711(,o)C 3.711(no)-3.711 G
+1.211(perating systems that indicate the)-3.711 F 3.711(ys)-.15 G 1.21
+(upport it, readline echoes a character)-3.711 F
+(corresponding to a signal generated from the k)144 612 Q -.15(ey)-.1 G
+(board.).15 E F1(editing\255mode \(emacs\))108 624 Q F0 .141
+(Controls whether readline be)144 636 R .141(gins with a set of k)-.15 F
+.441 -.15(ey b)-.1 H .141(indings similar to).15 F F2(Emacs)2.642 E F0
+(or)2.642 E F2(vi)2.642 E F0(.)A F1(editing\255mode)5.142 E F0
+(can be set to either)144 648 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E
+F0(.)A F1(emacs\255mode\255string \(@\))108 660 Q F0 .518(If the)144 672
+R F2(show\255mode\255in\255pr)3.018 E(ompt)-.45 E F0 -.25(va)3.018 G
+.517(riable is enabled, this string is displayed immediately before the)
+.25 F .622
+(last line of the primary prompt when emacs editing mode is acti)144 684
+R -.15(ve)-.25 G 5.622(.T).15 G .622(he v)-5.622 F .622(alue is e)-.25 F
+.622(xpanded lik)-.15 F 3.122(ea)-.1 G -.1(ke)144 696 S 3.34(yb)-.05 G
+.839(inding, so the standard set of meta- and control pre\214x)-3.34 F
+.839(es and backslash escape sequences is)-.15 F -.2(av)144 708 S 2.798
+(ailable. Use)-.05 F .298(the \\1 and \\2 escapes to be)2.798 F .298
+(gin and end sequences of non-printing characters, which)-.15 F
+(can be used to embed a terminal control sequence into the mode string.)
+144 720 Q(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(41)188.455 E 0
+Cg EP
+%%Page: 42 42
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(enable\255brack)108 84 Q(eted\255paste \(Off\))-.1 E F0 1.222
+(When set to)144 96 R F1(On)3.721 E F0 3.721(,r)C 1.221
+(eadline will con\214gure the terminal in a w)-3.721 F 1.221
+(ay that will enable it to insert each)-.1 F .353
+(paste into the editing b)144 108 R(uf)-.2 E .353(fer as a single strin\
+g of characters, instead of treating each character as if)-.25 F .544
+(it had been read from the k)144 120 R -.15(ey)-.1 G 3.043(board. This)
+.15 F .543(can pre)3.043 F -.15(ve)-.25 G .543
+(nt pasted characters from being interpreted as).15 F(editing commands.)
+144 132 Q F1(enable\255k)108 144 Q(eypad \(Off\))-.1 E F0 .892
+(When set to)144 156 R F1(On)3.393 E F0 3.393(,r)C .893
+(eadline will try to enable the application k)-3.393 F -.15(ey)-.1 G
+.893(pad when it is called.).15 F .893(Some sys-)5.893 F
+(tems need this to enable the arro)144 168 Q 2.5(wk)-.25 G -.15(ey)-2.6
+G(s.).15 E F1(enable\255meta\255k)108 180 Q(ey \(On\))-.1 E F0 .64
+(When set to)144 192 R F1(On)3.14 E F0 3.14(,r)C .64
+(eadline will try to enable an)-3.14 F 3.14(ym)-.15 G .64
+(eta modi\214er k)-3.14 F .94 -.15(ey t)-.1 H .64
+(he terminal claims to support).15 F(when it is called.)144 204 Q
+(On man)5 E 2.5(yt)-.15 G(erminals, the meta k)-2.5 E .3 -.15(ey i)-.1 H
+2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F1
+(expand\255tilde \(Off\))108 216 Q F0(If set to)144 228 Q F1(On)2.5 E F0
+2.5(,t)C(ilde e)-2.5 E(xpansion is performed when readline attempts w)
+-.15 E(ord completion.)-.1 E F1(history\255pr)108 240 Q(eser)-.18 E -.1
+(ve)-.1 G(\255point \(Off\)).1 E F0 1.338(If set to)144 252 R F1(On)
+3.838 E F0 3.838(,t)C 1.338(he history code attempts to place point at \
+the same location on each history line)-3.838 F(retrie)144 264 Q -.15
+(ve)-.25 G 2.5(dw).15 G(ith)-2.5 E F1(pr)2.5 E -.15(ev)-.18 G
+(ious-history).15 E F0(or)2.5 E F1(next-history)2.5 E F0(.)A F1
+(history\255size \(unset\))108 276 Q F0 .949
+(Set the maximum number of history entries sa)144 288 R -.15(ve)-.2 G
+3.448(di).15 G 3.448(nt)-3.448 G .948(he history list.)-3.448 F .948
+(If set to zero, an)5.948 F 3.448(ye)-.15 G(xisting)-3.598 E .482
+(history entries are deleted and no ne)144 300 R 2.982(we)-.25 G .483
+(ntries are sa)-2.982 F -.15(ve)-.2 G 2.983(d. If).15 F .483(set to a v)
+2.983 F .483(alue less than zero, the num-)-.25 F .278
+(ber of history entries is not limited.)144 312 R .277(By def)5.278 F
+.277(ault, the number of history entries is set to the v)-.1 F .277
+(alue of)-.25 F(the)144 324 Q F1(HISTSIZE)3.41 E F0 .91(shell v)3.41 F
+3.41(ariable. If)-.25 F .911(an attempt is made to set)3.41 F/F2 10
+/Times-Italic@0 SF(history\255size)3.411 E F0 .911(to a non-numeric v)
+3.411 F(alue,)-.25 E
+(the maximum number of history entries will be set to 500.)144 336 Q F1
+(horizontal\255scr)108 348 Q(oll\255mode \(Off\))-.18 E F0 .449
+(When set to)144 360 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E .448
+(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .448
+(crolling the input horizontally on a)-2.948 F 1.194(single screen line\
+ when it becomes longer than the screen width rather than wrapping to a\
+ ne)144 372 R(w)-.25 E(line.)144 384 Q F1(input\255meta \(Off\))108 396
+Q F0 1.062(If set to)144 408 R F1(On)3.562 E F0 3.562(,r)C 1.061(eadlin\
+e will enable eight-bit input \(that is, it will not strip the eighth b\
+it from the)-3.562 F .335(characters it reads\), re)144 420 R -.05(ga)
+-.15 G .335(rdless of what the terminal claims it can support.).05 F
+.336(The name)5.336 F F1(meta\255\215ag)2.836 E F0(is)2.836 E 2.865(as)
+144 432 S(ynon)-2.865 E .365(ym for this v)-.15 F 2.864(ariable. The)
+-.25 F(def)2.864 E .364(ault is)-.1 F F2(Of)2.864 E(f)-.18 E F0 2.864
+(,b)C .364(ut readline will set it to)-3.064 F F2(On)2.864 E F0 .364
+(if the locale contains)2.864 F(eight-bit characters.)144 444 Q F1
+(isear)108 456 Q(ch\255terminators \(`)-.18 E(`C\255[C\255J')-.63 E('\))
+-.63 E F0 .439(The string of characters that should terminate an increm\
+ental search without subsequently e)144 468 R -.15(xe)-.15 G(cut-).15 E
+.935(ing the character as a command.)144 480 R .935(If this v)5.935 F
+.935(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.434(nav).15 G .934
+(alue, the characters)-3.684 F F2(ESC)3.434 E F0(and)144 492 Q F2
+(C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F1 -.1(ke)
+108 504 S(ymap \(emacs\)).1 E F0 2.02(Set the current readline k)144 516
+R -.15(ey)-.1 G 4.521(map. The).15 F 2.021(set of v)4.521 F 2.021
+(alid k)-.25 F -.15(ey)-.1 G 2.021(map names is).15 F F2 2.021
+(emacs, emacs\255standar)4.521 F(d,)-.37 E .069
+(emacs\255meta, emacs\255ctlx, vi, vi\255command)144 528 R F0 2.568(,a)C
+(nd)-2.568 E F2(vi\255insert)2.568 E F0(.).68 E F2(vi)5.068 E F0 .068
+(is equi)2.568 F -.25(va)-.25 G .068(lent to).25 F F2(vi\255command)
+2.568 E F0(;)A F2(emacs)2.568 E F0 1.543(is equi)144 540 R -.25(va)-.25
+G 1.543(lent to).25 F F2(emacs\255standar)4.044 E(d)-.37 E F0 6.544(.T)C
+1.544(he def)-6.544 F 1.544(ault v)-.1 F 1.544(alue is)-.25 F F2(emacs)
+4.044 E F0 4.044(;t).27 G 1.544(he v)-4.044 F 1.544(alue of)-.25 F F1
+(editing\255mode)4.044 E F0(also)4.044 E(af)144 552 Q(fects the def)-.25
+E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1 -.1(ke)108 564 S
+(yseq\255timeout \(500\)).1 E F0 .368(Speci\214es the duration)144 576 R
+F2 -.37(re)2.867 G(adline).37 E F0 .367(will w)2.867 F .367
+(ait for a character when reading an ambiguous k)-.1 F .667 -.15(ey s)
+-.1 H(equence).15 E 1.356(\(one that can form a complete k)144 588 R
+1.656 -.15(ey s)-.1 H 1.356(equence using the input read so f).15 F(ar)
+-.1 E 3.856(,o)-.4 G 3.856(rc)-3.856 G 1.356(an tak)-3.856 F 3.856(ea)
+-.1 G(dditional)-3.856 E .32(input to complete a longer k)144 600 R .62
+-.15(ey s)-.1 H 2.82(equence\). If).15 F .32(no input is recei)2.82 F
+-.15(ve)-.25 G 2.82(dw).15 G .32(ithin the timeout,)-2.82 F F2 -.37(re)
+2.82 G(adline).37 E F0(will)2.82 E .906(use the shorter b)144 612 R .907
+(ut complete k)-.2 F 1.207 -.15(ey s)-.1 H 3.407(equence. The).15 F -.25
+(va)3.407 G .907(lue is speci\214ed in milliseconds, so a v).25 F .907
+(alue of)-.25 F .05(1000 means that)144 624 R F2 -.37(re)2.55 G(adline)
+.37 E F0 .05(will w)2.55 F .05(ait one second for additional input.)-.1
+F .05(If this v)5.05 F .05(ariable is set to a v)-.25 F(alue)-.25 E .051
+(less than or equal to zero, or to a non-numeric v)144 636 R(alue,)-.25
+E F2 -.37(re)2.551 G(adline).37 E F0 .051(will w)2.551 F .051
+(ait until another k)-.1 F .352 -.15(ey i)-.1 H 2.552(sp).15 G(ressed)
+-2.552 E(to decide which k)144 648 Q .3 -.15(ey s)-.1 H
+(equence to complete.).15 E F1(mark\255dir)108 660 Q(ectories \(On\))
+-.18 E F0(If set to)144 672 Q F1(On)2.5 E F0 2.5(,c)C
+(ompleted directory names ha)-2.5 E .3 -.15(ve a s)-.2 H(lash appended.)
+.15 E F1(mark\255modi\214ed\255lines \(Off\))108 684 Q F0(If set to)144
+696 Q F1(On)2.5 E F0 2.5(,h)C(istory lines that ha)-2.5 E .3 -.15(ve b)
+-.2 H(een modi\214ed are displayed with a preceding asterisk \().15 E F1
+(*)A F0(\).)A(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(42)188.455
+E 0 Cg EP
+%%Page: 43 43
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(mark\255symlink)108 84 Q(ed\255dir)-.1 E(ectories \(Off\))-.18 E F0
+.175(If set to)144 96 R F1(On)2.675 E F0 2.675(,c)C .175
+(ompleted names which are symbolic links to directories ha)-2.675 F .475
+-.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 108
+Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F1
+(match\255hidden\255\214les \(On\))108 120 Q F0 .192(This v)144 132 R
+.192(ariable, when set to)-.25 F F1(On)2.692 E F0 2.692(,c)C .192
+(auses readline to match \214les whose names be)-2.692 F .193
+(gin with a `.)-.15 F 2.693('\()-.7 G(hidden)-2.693 E .457
+(\214les\) when performing \214lename completion.)144 144 R .456
+(If set to)5.456 F F1(Off)2.956 E F0 2.956(,t)C .456(he leading `.)
+-2.956 F 2.956('m)-.7 G .456(ust be supplied by the)-2.956 F
+(user in the \214lename to be completed.)144 156 Q F1
+(menu\255complete\255display\255pr)108 168 Q(e\214x \(Off\))-.18 E F0
+1.585(If set to)144 180 R F1(On)4.085 E F0 4.085(,m)C 1.585(enu complet\
+ion displays the common pre\214x of the list of possible completions)
+-4.085 F(\(which may be empty\) before c)144 192 Q
+(ycling through the list.)-.15 E F1(output\255meta \(Off\))108 204 Q F0
+.507(If set to)144 216 R F1(On)3.007 E F0 3.007(,r)C .507(eadline will \
+display characters with the eighth bit set directly rather than as a me\
+ta-)-3.007 F(pre\214x)144 228 Q .884(ed escape sequence.)-.15 F .884
+(The def)5.884 F .884(ault is)-.1 F/F2 10/Times-Italic@0 SF(Of)3.384 E
+(f)-.18 E F0 3.384(,b)C .884(ut readline will set it to)-3.584 F F2(On)
+3.384 E F0 .885(if the locale contains)3.384 F(eight-bit characters.)144
+240 Q F1(page\255completions \(On\))108 252 Q F0 .809(If set to)144 264
+R F1(On)3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F F2
+(mor)3.308 E(e)-.37 E F0(-lik)A 3.308(ep)-.1 G .808
+(ager to display a screenful of possible comple-)-3.308 F
+(tions at a time.)144 276 Q F1
+(print\255completions\255horizontally \(Off\))108 288 Q F0 1.318
+(If set to)144 300 R F1(On)3.818 E F0 3.818(,r)C 1.319(eadline will dis\
+play completions with matches sorted horizontally in alphabetical)-3.818
+F(order)144 312 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25
+E F1 -2.29 -.18(re v)108 324 T(ert\255all\255at\255newline \(Off\)).08 E
+F0 .699(If set to)144 336 R F1(On)3.199 E F0 3.199(,r)C .699
+(eadline will undo all changes to history lines before returning when)
+-3.199 F F1(accept\255line)3.198 E F0(is)3.198 E -.15(exe)144 348 S
+2.686(cuted. By).15 F(def)2.686 E .186
+(ault, history lines may be modi\214ed and retain indi)-.1 F .186
+(vidual undo lists across calls to)-.25 F F1 -.18(re)144 360 S(adline)
+.18 E F0(.)A F1(sho)108 372 Q(w\255all\255if\255ambiguous \(Off\))-.1 E
+F0 .304(This alters the def)144 384 R .304(ault beha)-.1 F .304
+(vior of the completion functions.)-.2 F .304(If set to)5.304 F F1(On)
+2.804 E F0 2.803(,w)C .303(ords which ha)-2.903 F .603 -.15(ve m)-.2 H
+(ore).15 E 1.264(than one possible completion cause the matches to be l\
+isted immediately instead of ringing the)144 396 R(bell.)144 408 Q F1
+(sho)108 420 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.346
+(This alters the def)144 432 R 5.346(ault beha)-.1 F 5.345
+(vior of the completion functions in a f)-.2 F 5.345(ashion similar to)
+-.1 F F1(sho)144 444 Q(w\255all\255if\255ambiguous)-.1 E F0 6.69(.I)C
+4.19(fs)-6.69 G 1.691(et to)-4.19 F F1(On)4.191 E F0 4.191(,w)C 1.691
+(ords which ha)-4.291 F 1.991 -.15(ve m)-.2 H 1.691
+(ore than one possible completion).15 F 1.04(without an)144 456 R 3.54
+(yp)-.15 G 1.039
+(ossible partial completion \(the possible completions don')-3.54 F
+3.539(ts)-.18 G 1.039(hare a common pre\214x\))-3.539 F(cause the match\
+es to be listed immediately instead of ringing the bell.)144 468 Q F1
+(sho)108 480 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 1.021
+(If set to)144 492 R F1(On)3.521 E F0 3.521(,a)C 1.022
+(dd a string to the be)-3.521 F 1.022
+(ginning of the prompt indicating the editing mode: emacs, vi)-.15 F
+(command, or vi insertion.)144 504 Q(The mode strings are user)5 E
+(-settable \(e.g.,)-.2 E F2(emacs\255mode\255string)2.5 E F0(\).)A F1
+(skip\255completed\255text \(Off\))108 516 Q F0 .095(If set to)144 528 R
+F1(On)2.595 E F0 2.595(,t)C .095(his alters the def)-2.595 F .095
+(ault completion beha)-.1 F .094
+(vior when inserting a single match into the line.)-.2 F(It')144 540 Q
+2.545(so)-.55 G .045(nly acti)-2.545 F .345 -.15(ve w)-.25 H .046
+(hen performing completion in the middle of a w).15 F 2.546(ord. If)-.1
+F .046(enabled, readline does not)2.546 F 1.394(insert characters from \
+the completion that match characters after point in the w)144 552 R
+1.394(ord being com-)-.1 F(pleted, so portions of the w)144 564 Q
+(ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F1
+(vi\255cmd\255mode\255string \(\(cmd\)\))108 576 Q F0 .517(If the)144
+588 R F2(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0 -.25(va)3.017 G
+.518(riable is enabled, this string is displayed immediately before the)
+.25 F .475(last line of the primary prompt when vi editing mode is acti)
+144 600 R .775 -.15(ve a)-.25 H .475(nd in command mode.).15 F .475
+(The v)5.475 F(alue)-.25 E 1.235(is e)144 612 R 1.235(xpanded lik)-.15 F
+3.735(eak)-.1 G 1.535 -.15(ey b)-3.835 H 1.236
+(inding, so the standard set of meta- and control pre\214x).15 F 1.236
+(es and backslash)-.15 F .315(escape sequences is a)144 624 R -.25(va)
+-.2 G 2.815(ilable. Use).25 F .314(the \\1 and \\2 escapes to be)2.815 F
+.314(gin and end sequences of non-print-)-.15 F(ing characters, which c\
+an be used to embed a terminal control sequence into the mode string.)
+144 636 Q F1(vi\255ins\255mode\255string \(\(ins\)\))108 648 Q F0 .517
+(If the)144 660 R F2(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0
+-.25(va)3.017 G .518
+(riable is enabled, this string is displayed immediately before the).25
+F .186(last line of the primary prompt when vi editing mode is acti)144
+672 R .486 -.15(ve a)-.25 H .186(nd in insertion mode.).15 F .186(The v)
+5.186 F .186(alue is)-.25 F -.15(ex)144 684 S 1.929(panded lik).15 F
+4.429(eak)-.1 G 2.229 -.15(ey b)-4.529 H 1.929
+(inding, so the standard set of meta- and control pre\214x).15 F 1.93
+(es and backslash)-.15 F .315(escape sequences is a)144 696 R -.25(va)
+-.2 G 2.815(ilable. Use).25 F .314(the \\1 and \\2 escapes to be)2.815 F
+.314(gin and end sequences of non-print-)-.15 F(ing characters, which c\
+an be used to embed a terminal control sequence into the mode string.)
+144 708 Q(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(43)188.455 E 0
+Cg EP
+%%Page: 44 44
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(visible\255stats \(Off\))108 84 Q F0 .846(If set to)144 96 R F1(On)
+3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346
+(st)-.55 G .846(ype as reported by)-3.346 F/F2 10/Times-Italic@0 SF
+(stat)3.346 E F0 .846(\(2\) is appended to the \214lename)B
+(when listing possible completions.)144 108 Q F1
+(Readline Conditional Constructs)87 124.8 Q F0 .05
+(Readline implements a f)108 136.8 R .05(acility similar in spirit to t\
+he conditional compilation features of the C preprocessor)-.1 F .096
+(which allo)108 148.8 R .096(ws k)-.25 F .396 -.15(ey b)-.1 H .096
+(indings and v).15 F .096
+(ariable settings to be performed as the result of tests.)-.25 F .097
+(There are four parser)5.096 F(directi)108 160.8 Q -.15(ve)-.25 G 2.5
+(su).15 G(sed.)-2.5 E F1($if)108 177.6 Q F0(The)144 177.6 Q F1($if)2.963
+E F0 .463(construct allo)2.963 F .462(ws bindings to be made based on t\
+he editing mode, the terminal being used,)-.25 F
+(or the application using readline.)144 189.6 Q(The te)5 E
+(xt of the test, after an)-.15 E 2.5(yc)-.15 G(omparison operator)-2.5 E
+(,)-.4 E -.15(ex)146.5 201.6 S(tends to the end of the line; unless oth\
+erwise noted, no characters are required to isolate it.).15 E F1(mode)
+144 218.4 Q F0(The)180 218.4 Q F1(mode=)3.711 E F0 1.211(form of the)
+3.711 F F1($if)3.711 E F0(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711
+(su).15 G 1.211(sed to test whether readline is in emacs or vi)-3.711 F
+3.065(mode. This)180 230.4 R .565(may be used in conjunction with the)
+3.065 F F1 .565(set k)3.065 F(eymap)-.1 E F0 .565
+(command, for instance, to)3.065 F .735(set bindings in the)180 242.4 R
+F2(emacs\255standar)3.235 E(d)-.37 E F0(and)3.235 E F2(emacs\255ctlx)
+3.235 E F0 -.1(ke)3.235 G .735(ymaps only if readline is starting)-.05 F
+(out in emacs mode.)180 254.4 Q F1(term)144 271.2 Q F0(The)180 271.2 Q
+F1(term=)3.197 E F0 .696
+(form may be used to include terminal-speci\214c k)3.197 F .996 -.15
+(ey b)-.1 H .696(indings, perhaps to bind).15 F .654(the k)180 283.2 R
+.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154
+(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1
+(wo)3.154 G .654(rd on the right side of).1 F(the)180 295.2 Q F1(=)3.232
+E F0 .732(is tested ag)3.232 F .732(ainst both the full name of the ter\
+minal and the portion of the terminal)-.05 F(name before the \214rst)180
+307.2 Q F1<ad>2.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.84 E F0
+(to match both)2.74 E F2(sun)2.84 E F0(and)2.74 E F2(sun\255cmd)2.5 E F0
+2.5(,f).77 G(or instance.)-2.5 E F1 -.1(ve)144 324 S(rsion).1 E F0(The)
+180 336 Q F1 -.1(ve)3.108 G(rsion).1 E F0 .608
+(test may be used to perform comparisons ag)3.108 F .609
+(ainst speci\214c readline v)-.05 F(ersions.)-.15 E(The)180 348 Q F1 -.1
+(ve)3.929 G(rsion).1 E F0 -.15(ex)3.929 G 1.428
+(pands to the current readline v).15 F 3.928(ersion. The)-.15 F 1.428
+(set of comparison operators)3.928 F(includes)180 360 Q F1(=)2.605 E F0
+2.605(,\()C(and)-2.605 E F1(==)2.606 E F0(\),)A F1(!=)2.606 E F0(,)A F1
+(<=)2.606 E F0(,)A F1(>=)2.606 E F0(,)A F1(<)2.606 E F0 2.606(,a)C(nd)
+-2.606 E F1(>)2.606 E F0 5.106(.T)C .106(he v)-5.106 F .106
+(ersion number supplied on the right side)-.15 F 1.472
+(of the operator consists of a major v)180 372 R 1.471(ersion number)
+-.15 F 3.971(,a)-.4 G 3.971(no)-3.971 G 1.471
+(ptional decimal point, and an)-3.971 F .766(optional minor v)180 384 R
+.766(ersion \(e.g.,)-.15 F F1(7.1)3.266 E F0 .766(\). If the minor v)B
+.766(ersion is omitted, it is assumed to be)-.15 F F1(0)3.267 E F0(.)A
+1.756(The operator may be separated from the string)180 396 R F1 -.1(ve)
+4.255 G(rsion).1 E F0 1.755(and from the v)4.255 F 1.755(ersion number)
+-.15 F(ar)180 408 Q(gument by whitespace.)-.18 E F1(application)144
+424.8 Q F0(The)180 436.8 Q F1(application)3.003 E F0 .503
+(construct is used to include application-speci\214c settings.)3.003 F
+.503(Each program)5.503 F .114(using the readline library sets the)180
+448.8 R F2 .114(application name)2.614 F F0 2.614(,a)C .114
+(nd an initialization \214le can test for a)-2.614 F .5(particular v)180
+460.8 R 3(alue. This)-.25 F .501(could be used to bind k)3 F .801 -.15
+(ey s)-.1 H .501(equences to functions useful for a spe-).15 F .397
+(ci\214c program.)180 472.8 R -.15(Fo)5.397 G 2.896(ri).15 G .396
+(nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15
+(ey s)-.1 H .396(equence that quotes the).15 F(current or pre)180 484.8
+Q(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 508.8 Q F0
+(Bash)2.5 E 2.5(#Q)180 520.8 S(uote the current or pre)-2.5 E(vious w)
+-.25 E(ord)-.1 E("\\C\255xq": "\\eb\\"\\ef\\"")180 532.8 Q F1($endif)180
+544.8 Q F2(variable)144 561.6 Q F0(The)180 573.6 Q F2(variable)3.776 E
+F0 1.276(construct pro)3.776 F 1.276
+(vides simple equality tests for readline v)-.15 F 1.277(ariables and v)
+-.25 F(alues.)-.25 E .08(The permitted comparison operators are)180
+585.6 R F2(=)2.579 E F0(,)A F2(==)2.579 E F0 2.579(,a)C(nd)-2.579 E F2
+(!=)2.579 E F0 5.079(.T)C .079(he v)-5.079 F .079
+(ariable name must be sepa-)-.25 F .98(rated from the comparison operat\
+or by whitespace; the operator may be separated from)180 597.6 R .13
+(the v)180 609.6 R .13(alue on the right hand side by whitespace.)-.25 F
+.129(Both string and boolean v)5.129 F .129(ariables may be)-.25 F
+(tested. Boolean v)180 621.6 Q(ariables must be tested ag)-.25 E
+(ainst the v)-.05 E(alues)-.25 E F2(on)2.5 E F0(and)2.5 E F2(of)2.5 E(f)
+-.18 E F0(.)A F1($endif)108 638.4 Q F0(This command, as seen in the pre)
+144 638.4 Q(vious e)-.25 E(xample, terminates an)-.15 E F1($if)2.5 E F0
+(command.)2.5 E F1($else)108 655.2 Q F0(Commands in this branch of the)
+144 655.2 Q F1($if)2.5 E F0(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E
+-.15(xe)-.15 G(cuted if the test f).15 E(ails.)-.1 E F1($include)108 672
+Q F0 .356(This directi)144 684 R .656 -.15(ve t)-.25 H(ak).15 E .356
+(es a single \214lename as an ar)-.1 F .357
+(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F)
+144 696 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3
+-.15(ve w)-.25 H(ould read).05 E F2(/etc/inputr)2.5 E(c)-.37 E F0(:)A F1
+($include)144 720 Q F2(/etc/inputr)5.833 E(c)-.37 E F0(GNU Bash 5.0)72
+768 Q(2018 December 7)139.295 E(44)188.455 E 0 Cg EP
+%%Page: 45 45
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(Sear)87 84 Q(ching)-.18 E F0 .835(Readline pro)108 96 R .835
+(vides commands for searching through the command history \(see)-.15 F
+/F2 9/Times-Bold@0 SF(HIST)3.334 E(OR)-.162 E(Y)-.315 E F0(belo)3.084 E
+.834(w\) for lines)-.25 F(containing a speci\214ed string.)108 108 Q
+(There are tw)5 E 2.5(os)-.1 G(earch modes:)-2.5 E/F3 10/Times-Italic@0
+SF(incr)2.51 E(emental)-.37 E F0(and)3.01 E F3(non-incr)2.5 E(emental)
+-.37 E F0(.).51 E .697(Incremental searches be)108 124.8 R .697
+(gin before the user has \214nished typing the search string.)-.15 F
+.698(As each character of the)5.698 F .113
+(search string is typed, readline displays the ne)108 136.8 R .112
+(xt entry from the history matching the string typed so f)-.15 F(ar)-.1
+E 5.112(.A)-.55 G(n)-5.112 E .542
+(incremental search requires only as man)108 148.8 R 3.042(yc)-.15 G
+.542(haracters as needed to \214nd the desired history entry)-3.042 F
+5.542(.T)-.65 G .542(he char)-5.542 F(-)-.2 E .224
+(acters present in the v)108 160.8 R .224(alue of the)-.25 F F1(isear)
+2.724 E(ch-terminators)-.18 E F0 -.25(va)2.724 G .224
+(riable are used to terminate an incremental search.).25 F .66
+(If that v)108 172.8 R .66(ariable has not been assigned a v)-.25 F .66
+(alue the Escape and Control-J characters will terminate an incre-)-.25
+F .097(mental search.)108 184.8 R .096(Control-G will abort an incremen\
+tal search and restore the original line.)5.097 F .096
+(When the search is)5.096 F(terminated, the history entry containing th\
+e search string becomes the current line.)108 196.8 Q 2.938 -.8(To \214)
+108 213.6 T 1.339(nd other matching entries in the history list, type C\
+ontrol-S or Control-R as appropriate.).8 F 1.339(This will)6.339 F .675
+(search backw)108 225.6 R .675(ard or forw)-.1 F .675
+(ard in the history for the ne)-.1 F .674
+(xt entry matching the search string typed so f)-.15 F(ar)-.1 E 5.674
+(.A)-.55 G -.15(ny)-5.674 G .174(other k)108 237.6 R .474 -.15(ey s)-.1
+H .174
+(equence bound to a readline command will terminate the search and e).15
+F -.15(xe)-.15 G .175(cute that command.).15 F -.15(Fo)5.175 G(r).15 E
+.541(instance, a)108 249.6 R F3(ne)3.041 E(wline)-.15 E F0 .541
+(will terminate the search and accept the line, thereby e)3.041 F -.15
+(xe)-.15 G .54(cuting the command from the).15 F(history list.)108 261.6
+Q .653(Readline remembers the last incremental search string.)108 278.4
+R .653(If tw)5.653 F 3.153(oC)-.1 G .653(ontrol-Rs are typed without an)
+-3.153 F 3.153(yi)-.15 G(nterv)-3.153 E(en-)-.15 E
+(ing characters de\214ning a ne)108 290.4 Q 2.5(ws)-.25 G
+(earch string, an)-2.5 E 2.5(yr)-.15 G(emembered search string is used.)
+-2.5 E .567(Non-incremental searches read the entire search string befo\
+re starting to search for matching history lines.)108 307.2 R(The searc\
+h string may be typed by the user or be part of the contents of the cur\
+rent line.)108 319.2 Q F1(Readline Command Names)87 336 Q F0 1.391
+(The follo)108 348 R 1.391
+(wing is a list of the names of the commands and the def)-.25 F 1.391
+(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F
+3.892(ya)-.15 G(re)-3.892 E 2.622(bound. Command)108 360 R .122
+(names without an accompan)2.622 F .122(ying k)-.15 F .421 -.15(ey s)-.1
+H .121(equence are unbound by def).15 F 2.621(ault. In)-.1 F .121
+(the follo)2.621 F(wing)-.25 E(descriptions,)108 372 Q F3(point)3.41 E
+F0 .91(refers to the current cursor position, and)3.41 F F3(mark)3.411 E
+F0 .911(refers to a cursor position sa)3.411 F -.15(ve)-.2 G 3.411(db)
+.15 G 3.411(yt)-3.411 G(he)-3.411 E F1(set\255mark)108 384 Q F0 2.5
+(command. The)2.5 F(te)2.5 E
+(xt between the point and mark is referred to as the)-.15 E F3 -.37(re)
+2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 400.8 Q(or Mo)-.25 E(ving)-.1
+E(beginning\255of\255line \(C\255a\))108 412.8 Q F0(Mo)144 424.8 Q .3
+-.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1
+(end\255of\255line \(C\255e\))108 436.8 Q F0(Mo)144 448.8 Q .3 -.15
+(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108
+460.8 S(rward\255char \(C\255f\)).25 E F0(Mo)144 472.8 Q .3 -.15(ve f)
+-.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1
+(backward\255char \(C\255b\))108 484.8 Q F0(Mo)144 496.8 Q .3 -.15(ve b)
+-.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 508.8 S(rward\255w)
+.25 E(ord \(M\255f\))-.1 E F0(Mo)144 520.8 Q .823 -.15(ve f)-.15 H(orw)
+.15 E .523(ard to the end of the ne)-.1 F .523(xt w)-.15 F 3.023(ord. W)
+-.1 F .522(ords are composed of alphanumeric characters \(let-)-.8 F
+(ters and digits\).)144 532.8 Q F1(backward\255w)108 544.8 Q
+(ord \(M\255b\))-.1 E F0(Mo)144 556.8 Q 1.71 -.15(ve b)-.15 H 1.41
+(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91
+(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F
+(characters \(letters and digits\).)144 568.8 Q F1(shell\255f)108 580.8
+Q(orward\255w)-.25 E(ord)-.1 E F0(Mo)144 592.8 Q .784 -.15(ve f)-.15 H
+(orw).15 E .484(ard to the end of the ne)-.1 F .484(xt w)-.15 F 2.984
+(ord. W)-.1 F .484(ords are delimited by non-quoted shell metacharac-)
+-.8 F(ters.)144 604.8 Q F1(shell\255backward\255w)108 616.8 Q(ord)-.1 E
+F0(Mo)144 628.8 Q .908 -.15(ve b)-.15 H .609
+(ack to the start of the current or pre).15 F .609(vious w)-.25 F 3.109
+(ord. W)-.1 F .609(ords are delimited by non-quoted shell)-.8 F
+(metacharacters.)144 640.8 Q F1(pr)108 652.8 Q -.15(ev)-.18 G
+(ious\255scr).15 E(een\255line)-.18 E F0 .891(Attempt to mo)144 664.8 R
+1.191 -.15(ve p)-.15 H .891(oint to the same ph).15 F .891
+(ysical screen column on the pre)-.05 F .89(vious ph)-.25 F .89
+(ysical screen line.)-.05 F .87(This will not ha)144 676.8 R 1.17 -.15
+(ve t)-.2 H .87(he desired ef).15 F .87
+(fect if the current Readline line does not tak)-.25 F 3.37(eu)-.1 G
+3.37(pm)-3.37 G .87(ore than one)-3.37 F(ph)144 688.8 Q(ysical line or \
+if point is not greater than the length of the prompt plus the screen w\
+idth.)-.05 E F1(next\255scr)108 700.8 Q(een\255line)-.18 E F0 .638
+(Attempt to mo)144 712.8 R .938 -.15(ve p)-.15 H .638
+(oint to the same ph).15 F .637(ysical screen column on the ne)-.05 F
+.637(xt ph)-.15 F .637(ysical screen line. This)-.05 F .008(will not ha)
+144 724.8 R .309 -.15(ve t)-.2 H .009(he desired ef).15 F .009
+(fect if the current Readline line does not tak)-.25 F 2.509(eu)-.1 G
+2.509(pm)-2.509 G .009(ore than one ph)-2.509 F(ysical)-.05 E
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(45)188.455 E 0 Cg EP
+%%Page: 46 46
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .772(line or if t\
+he length of the current Readline line is not greater than the length o\
+f the prompt plus)144 84 R(the screen width.)144 96 Q/F1 10/Times-Bold@0
+SF(clear\255scr)108 108 Q(een \(C\255l\))-.18 E F0 .993
+(Clear the screen lea)144 120 R .993
+(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 G
+.993(th an ar).4 F .993(gument, refresh the)-.18 F
+(current line without clearing the screen.)144 132 Q F1 -.18(re)108 144
+S(draw\255curr).18 E(ent\255line)-.18 E F0(Refresh the current line.)144
+156 Q F1(Commands f)87 172.8 Q(or Manipulating the History)-.25 E
+(accept\255line \(Newline, Retur)108 184.8 Q(n\))-.15 E F0 .159
+(Accept the line re)144 196.8 R -.05(ga)-.15 G .159
+(rdless of where the cursor is.).05 F .158(If this line is non-empty)
+5.158 F 2.658(,a)-.65 G .158(dd it to the history list)-2.658 F .699
+(according to the state of the)144 208.8 R/F2 9/Times-Bold@0 SF
+(HISTCONTR)3.199 E(OL)-.27 E F0 -.25(va)2.949 G 3.199(riable. If).25 F
+.699(the line is a modi\214ed history line, then)3.199 F
+(restore the history line to its original state.)144 220.8 Q F1(pr)108
+232.8 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0
+(Fetch the pre)144 244.8 Q(vious command from the history list, mo)-.25
+E(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 256.8
+Q F0(Fetch the ne)144 268.8 Q(xt command from the history list, mo)-.15
+E(ving forw)-.15 E(ard in the list.)-.1 E F1
+(beginning\255of\255history \(M\255<\))108 280.8 Q F0(Mo)144 292.8 Q .3
+-.15(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.)
+-.65 E F1(end\255of\255history \(M\255>\))108 304.8 Q F0(Mo)144 316.8 Q
+.3 -.15(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5
+(,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18
+(re v)108 328.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0
+1.471(Search backw)144 340.8 R 1.471
+(ard starting at the current line and mo)-.1 F 1.47
+(ving `up' through the history as necessary)-.15 F(.)-.65 E
+(This is an incremental search.)144 352.8 Q F1 -.25(fo)108 364.8 S
+(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131
+(Search forw)144 376.8 R 1.131(ard starting at the current line and mo)
+-.1 F 1.132(ving `do)-.15 F 1.132(wn' through the history as necessary)
+-.25 F(.)-.65 E(This is an incremental search.)144 388.8 Q F1
+(non\255incr)108 400.8 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H
+(rse\255sear).15 E(ch\255history \(M\255p\))-.18 E F0 .165(Search backw)
+144 412.8 R .164(ard through the history starting at the current line u\
+sing a non-incremental search for)-.1 F 2.5(as)144 424.8 S
+(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 436.8 Q
+(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18
+E F0 1.353(Search forw)144 448.8 R 1.354(ard through the history using \
+a non-incremental search for a string supplied by the)-.1 F(user)144
+460.8 Q(.)-.55 E F1(history\255sear)108 472.8 Q(ch\255f)-.18 E(orward)
+-.25 E F0 .249(Search forw)144 484.8 R .249(ard through the history for\
+ the string of characters between the start of the current line)-.1 F
+(and the point.)144 496.8 Q(This is a non-incremental search.)5 E F1
+(history\255sear)108 508.8 Q(ch\255backward)-.18 E F0 .95(Search backw)
+144 520.8 R .951(ard through the history for the string of characters b\
+etween the start of the current)-.1 F(line and the point.)144 532.8 Q
+(This is a non-incremental search.)5 E F1(history\255substring\255sear)
+108 544.8 Q(ch\255backward)-.18 E F0 .951(Search backw)144 556.8 R .951
+(ard through the history for the string of characters between the start\
+ of the current)-.1 F .007(line and the current cursor position \(the)
+144 568.8 R/F3 10/Times-Italic@0 SF(point)2.507 E F0 2.507(\). The)B
+.007(search string may match an)2.507 F .007(ywhere in a history)-.15 F
+2.5(line. This)144 580.8 R(is a non-incremental search.)2.5 E F1
+(history\255substring\255sear)108 592.8 Q(ch\255f)-.18 E(orward)-.25 E
+F0 .249(Search forw)144 604.8 R .249(ard through the history for the st\
+ring of characters between the start of the current line)-.1 F .318
+(and the point.)144 616.8 R .319(The search string may match an)5.318 F
+.319(ywhere in a history line.)-.15 F .319(This is a non-incremental)
+5.319 F(search.)144 628.8 Q F1(yank\255nth\255ar)108 640.8 Q 2.5(g\()-.1
+G<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 652.8 R .622
+(gument to the pre)-.18 F .622(vious command \(usually the second w)-.25
+F .622(ord on the pre)-.1 F .622(vious line\))-.25 F .794(at point.)144
+664.8 R -.4(Wi)5.794 G .794(th an ar).4 F(gument)-.18 E F3(n)3.294 E F0
+3.294(,i).24 G .794(nsert the)-3.294 F F3(n)3.294 E F0 .794(th w)B .794
+(ord from the pre)-.1 F .794(vious command \(the w)-.25 F .795
+(ords in the)-.1 F(pre)144 676.8 Q .292(vious command be)-.25 F .292
+(gin with w)-.15 F .291(ord 0\).)-.1 F 2.791(An)5.291 G -2.25 -.15(eg a)
+-2.791 H(ti).15 E .591 -.15(ve a)-.25 H -.18(rg).15 G .291
+(ument inserts the).18 F F3(n)2.791 E F0 .291(th w)B .291
+(ord from the end of)-.1 F .281(the pre)144 688.8 R .281(vious command.)
+-.25 F .281(Once the ar)5.281 F(gument)-.18 E F3(n)2.781 E F0 .281
+(is computed, the ar)2.781 F .281(gument is e)-.18 F .282
+(xtracted as if the "!)-.15 F F3(n)A F0(")A(history e)144 700.8 Q
+(xpansion had been speci\214ed.)-.15 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(46)188.455 E 0 Cg EP
+%%Page: 47 47
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(yank\255last\255ar)108 84 Q 2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F
+-1.667(M\255_ \))2.5 F F0 1.308(Insert the last ar)144 96 R 1.308
+(gument to the pre)-.18 F 1.307(vious command \(the last w)-.25 F 1.307
+(ord of the pre)-.1 F 1.307(vious history entry\).)-.25 F -.4(Wi)144 108
+S .203(th a numeric ar).4 F .203(gument, beha)-.18 F .504 -.15(ve ex)-.2
+H .204(actly lik).15 F(e)-.1 E F1(yank\255nth\255ar)2.704 E(g)-.1 E F0
+5.204(.S)C(uccessi)-5.204 E .504 -.15(ve c)-.25 H .204(alls to).15 F F1
+(yank\255last\255ar)2.704 E(g)-.1 E F0(mo)144 120 Q .807 -.15(ve b)-.15
+H .507(ack through the history list, inserting the last w).15 F .507
+(ord \(or the w)-.1 F .507(ord speci\214ed by the ar)-.1 F(gument)-.18 E
+1.396(to the \214rst call\) of each line in turn.)144 132 R(An)6.396 E
+3.896(yn)-.15 G 1.396(umeric ar)-3.896 F 1.397
+(gument supplied to these successi)-.18 F 1.697 -.15(ve c)-.25 H(alls)
+.15 E .492(determines the direction to mo)144 144 R .792 -.15(ve t)-.15
+H .492(hrough the history).15 F 5.491(.A)-.65 G(ne)-2.5 E -.05(ga)-.15 G
+(ti).05 E .791 -.15(ve a)-.25 H -.18(rg).15 G .491
+(ument switches the direction).18 F .494
+(through the history \(back or forw)144 156 R 2.994(ard\). The)-.1 F
+.494(history e)2.994 F .494(xpansion f)-.15 F .494
+(acilities are used to e)-.1 F .494(xtract the last)-.15 F -.1(wo)144
+168 S(rd, as if the "!$" history e).1 E(xpansion had been speci\214ed.)
+-.15 E F1(shell\255expand\255line \(M\255C\255e\))108 180 Q F0 .623
+(Expand the line as the shell does.)144 192 R .622
+(This performs alias and history e)5.622 F .622
+(xpansion as well as all of the)-.15 F(shell w)144 204 Q(ord e)-.1 E 2.5
+(xpansions. See)-.15 F/F2 9/Times-Bold@0 SF(HIST)2.5 E(OR)-.162 E 2.25
+(YE)-.315 G(XP)-2.25 E(ANSION)-.666 E F0(belo)2.25 E 2.5(wf)-.25 G
+(or a description of history e)-2.5 E(xpansion.)-.15 E F1
+(history\255expand\255line \(M\255^\))108 216 Q F0 .938
+(Perform history e)144 228 R .939(xpansion on the current line.)-.15 F
+(See)5.939 E F2(HIST)3.439 E(OR)-.162 E 3.189(YE)-.315 G(XP)-3.189 E
+(ANSION)-.666 E F0(belo)3.189 E 3.439(wf)-.25 G .939(or a descrip-)
+-3.439 F(tion of history e)144 240 Q(xpansion.)-.15 E F1(magic\255space)
+108 252 Q F0 1.627(Perform history e)144 264 R 1.627
+(xpansion on the current line and insert a space.)-.15 F(See)6.626 E F2
+(HIST)4.126 E(OR)-.162 E 3.876(YE)-.315 G(XP)-3.876 E(ANSION)-.666 E F0
+(belo)144 276 Q 2.5(wf)-.25 G(or a description of history e)-2.5 E
+(xpansion.)-.15 E F1(alias\255expand\255line)108 288 Q F0 .394
+(Perform alias e)144 300 R .394(xpansion on the current line.)-.15 F
+(See)5.395 E F2(ALIASES)2.895 E F0(abo)2.645 E .695 -.15(ve f)-.15 H
+.395(or a description of alias e).15 F(xpan-)-.15 E(sion.)144 312 Q F1
+(history\255and\255alias\255expand\255line)108 324 Q F0
+(Perform history and alias e)144 336 Q(xpansion on the current line.)
+-.15 E F1(insert\255last\255ar)108 348 Q(gument \(M\255.)-.1 E 2.5(,M)
+.833 G -1.667(\255_ \))-2.5 F F0 2.5(As)144 360 S(ynon)-2.5 E(ym for)
+-.15 E F1(yank\255last\255ar)2.5 E(g)-.1 E F0(.)A F1
+(operate\255and\255get\255next \(C\255o\))108 372 Q F0 .948
+(Accept the current line for e)144 384 R -.15(xe)-.15 G .948
+(cution and fetch the ne).15 F .948(xt line relati)-.15 F 1.247 -.15
+(ve t)-.25 H 3.447(ot).15 G .947(he current line from the)-3.447 F .729
+(history for editing.)144 396 R 3.229(An)5.729 G .729(umeric ar)-3.229 F
+.729
+(gument, if supplied, speci\214es the history entry to use instead of)
+-.18 F(the current line.)144 408 Q F1
+(edit\255and\255execute\255command \(C\255x C\255e\))108 420 Q F0(In)144
+432 Q -.2(vo)-.4 G 1.226 -.1(ke a).2 H 3.526(ne).1 G 1.026
+(ditor on the current command line, and e)-3.526 F -.15(xe)-.15 G 1.026
+(cute the result as shell commands.).15 F F1(Bash)6.026 E F0
+(attempts to in)144 444 Q -.2(vo)-.4 G -.1(ke).2 G F2($VISU)2.6 E(AL)
+-.54 E/F3 9/Times-Roman@0 SF(,)A F2($EDIT)2.25 E(OR)-.162 E F3(,)A F0
+(and)2.25 E/F4 10/Times-Italic@0 SF(emacs)2.5 E F0(as the editor)2.5 E
+2.5(,i)-.4 G 2.5(nt)-2.5 G(hat order)-2.5 E(.)-.55 E F1(Commands f)87
+460.8 Q(or Changing T)-.25 E(ext)-.92 E F4(end\255of\255\214le)108 472.8
+Q F1(\(usually C\255d\))2.5 E F0 .798
+(The character indicating end-of-\214le as set, for e)144 484.8 R .799
+(xample, by)-.15 F/F5 10/Courier@0 SF(stty)3.299 E F0 5.799(.I)C 3.299
+(ft)-5.799 G .799(his character is read when)-3.299 F .592
+(there are no characters on the line, and point is at the be)144 496.8 R
+.592(ginning of the line, Readline interprets it)-.15 F
+(as the end of input and returns)144 508.8 Q F2(EOF)2.5 E F3(.)A F1
+(delete\255char \(C\255d\))108 520.8 Q F0 .441
+(Delete the character at point.)144 532.8 R .442
+(If this function is bound to the same character as the tty)5.441 F F1
+(EOF)2.942 E F0(char)2.942 E(-)-.2 E(acter)144 544.8 Q 2.5(,a)-.4 G(s)
+-2.5 E F1(C\255d)2.5 E F0(commonly is, see abo)2.5 E .3 -.15(ve f)-.15 H
+(or the ef).15 E(fects.)-.25 E F1(backward\255delete\255char \(Rubout\))
+108 556.8 Q F0 .553(Delete the character behind the cursor)144 568.8 R
+5.553(.W)-.55 G .553(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553
+(umeric ar)-3.053 F .552(gument, sa)-.18 F .852 -.15(ve t)-.2 H .552
+(he deleted te).15 F .552(xt on)-.15 F(the kill ring.)144 580.8 Q F1
+-.25(fo)108 592.8 S(rward\255backward\255delete\255char).25 E F0 .473
+(Delete the character under the cursor)144 604.8 R 2.973(,u)-.4 G .474
+(nless the cursor is at the end of the line, in which case the)-2.973 F
+(character behind the cursor is deleted.)144 616.8 Q F1
+(quoted\255insert \(C\255q, C\255v\))108 628.8 Q F0 .779(Add the ne)144
+640.8 R .779(xt character typed to the line v)-.15 F 3.279
+(erbatim. This)-.15 F .779(is ho)3.279 F 3.279(wt)-.25 G 3.279(oi)-3.279
+G .779(nsert characters lik)-3.279 F(e)-.1 E F1(C\255q)3.278 E F0 3.278
+(,f)C(or)-3.278 E -.15(ex)144 652.8 S(ample.).15 E F1
+(tab\255insert \(C\255v T)108 664.8 Q(AB\))-.9 E F0
+(Insert a tab character)144 676.8 Q(.)-.55 E F1
+(self\255insert \(a, b, A, 1, !, ...\))108 688.8 Q F0
+(Insert the character typed.)144 700.8 Q(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(47)188.455 E 0 Cg EP
+%%Page: 48 48
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(transpose\255chars \(C\255t\))108 84 Q F0 .321
+(Drag the character before point forw)144 96 R .321(ard o)-.1 F -.15(ve)
+-.15 G 2.821(rt).15 G .321(he character at point, mo)-2.821 F .322
+(ving point forw)-.15 F .322(ard as well.)-.1 F 1.182
+(If point is at the end of the line, then this transposes the tw)144 108
+R 3.682(oc)-.1 G 1.182(haracters before point.)-3.682 F(Ne)6.182 E -.05
+(ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 120 Q(guments ha)-.18 E .3
+-.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1
+(transpose\255w)108 132 Q(ords \(M\255t\))-.1 E F0 .023(Drag the w)144
+144 R .023(ord before point past the w)-.1 F .023(ord after point, mo)
+-.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.524(rt).15 G .024(hat w)
+-2.524 F .024(ord as well.)-.1 F .024(If point)5.024 F
+(is at the end of the line, this transposes the last tw)144 156 Q 2.5
+(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 168 Q
+(ord \(M\255u\))-.1 E F0 1.699(Uppercase the current \(or follo)144 180
+R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga)
+-.15 G(ti).05 E 1.998 -.15(ve a)-.25 H -.18(rg).15 G 1.698
+(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 192 S(rd, b).1 E
+(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 204 Q
+(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 216 Q 1.647
+(wercase the current \(or follo)-.25 F 1.647(wing\) w)-.25 F 4.147
+(ord. W)-.1 F 1.648(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.948 -.15
+(ve a)-.25 H -.18(rg).15 G 1.648(ument, lo).18 F 1.648(wercase the pre)
+-.25 F(vious)-.25 E -.1(wo)144 228 S(rd, b).1 E(ut do not mo)-.2 E .3
+-.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 240 Q
+(ord \(M\255c\))-.1 E F0 1.975(Capitalize the current \(or follo)144 252
+R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga)
+-.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.974
+(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 264 S(rd, b).1
+E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 276
+S(rwrite\255mode).1 E F0 -.8(To)144 288 S .437(ggle o).8 F -.15(ve)-.15
+G .437(rwrite mode.).15 F -.4(Wi)5.437 G .437(th an e).4 F .437
+(xplicit positi)-.15 F .738 -.15(ve n)-.25 H .438(umeric ar).15 F .438
+(gument, switches to o)-.18 F -.15(ve)-.15 G .438(rwrite mode.).15 F -.4
+(Wi)144 300 S .781(th an e).4 F .781(xplicit non-positi)-.15 F 1.081
+-.15(ve n)-.25 H .781(umeric ar).15 F .781
+(gument, switches to insert mode.)-.18 F .78(This command af)5.781 F
+(fects)-.25 E(only)144 312 Q F1(emacs)4.394 E F0(mode;)4.394 E F1(vi)
+4.394 E F0 1.894(mode does o)4.394 F -.15(ve)-.15 G 1.894(rwrite dif).15
+F(ferently)-.25 E 6.894(.E)-.65 G 1.894(ach call to)-6.894 F/F2 10
+/Times-Italic@0 SF -.37(re)4.395 G(adline\(\)).37 E F0 1.895
+(starts in insert)4.395 F 3.969(mode. In)144 324 R -.15(ove)3.969 G
+1.469(rwrite mode, characters bound to).15 F F1(self\255insert)3.969 E
+F0 1.468(replace the te)3.969 F 1.468(xt at point rather than)-.15 F
+.957(pushing the te)144 336 R .957(xt to the right.)-.15 F .958
+(Characters bound to)5.957 F F1(backward\255delete\255char)3.458 E F0
+.958(replace the character)3.458 F(before point with a space.)144 348 Q
+(By def)5 E(ault, this command is unbound.)-.1 E F1(Killing and Y)87
+364.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 376.8 Q F0
+(Kill the te)144 388.8 Q(xt from point to the end of the line.)-.15 E F1
+(backward\255kill\255line \(C\255x Rubout\))108 400.8 Q F0(Kill backw)
+144 412.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1
+(unix\255line\255discard \(C\255u\))108 424.8 Q F0(Kill backw)144 436.8
+Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E
+(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)
+-2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 448.8 Q F0
+(Kill all characters on the current line, no matter where point is.)144
+460.8 Q F1(kill\255w)108 472.8 Q(ord \(M\255d\))-.1 E F0 .729
+(Kill from point to the end of the current w)144 484.8 R .728
+(ord, or if between w)-.1 F .728(ords, to the end of the ne)-.1 F .728
+(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 496.8 S
+(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G
+(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 508.8 Q
+(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 520.8 Q(ord behind point.)
+-.1 E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F1
+(backward\255w)2.5 E(ord)-.1 E F0(.)A F1(shell\255kill\255w)108 532.8 Q
+(ord)-.1 E F0 .728(Kill from point to the end of the current w)144 544.8
+R .729(ord, or if between w)-.1 F .729(ords, to the end of the ne)-.1 F
+.729(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 556.8 S
+(rd boundaries are the same as those used by).8 E F1(shell\255f)2.5 E
+(orward\255w)-.25 E(ord)-.1 E F0(.)A F1(shell\255backward\255kill\255w)
+108 568.8 Q(ord)-.1 E F0 3.025(Kill the w)144 580.8 R 3.025
+(ord behind point.)-.1 F -.8(Wo)8.025 G 3.025
+(rd boundaries are the same as those used by).8 F F1(shell\255back-)
+5.525 E(ward\255w)144 592.8 Q(ord)-.1 E F0(.)A F1(unix\255w)108 604.8 Q
+(ord\255rubout \(C\255w\))-.1 E F0 .364(Kill the w)144 616.8 R .364
+(ord behind point, using white space as a w)-.1 F .365(ord boundary)-.1
+F 5.365(.T)-.65 G .365(he killed te)-5.365 F .365(xt is sa)-.15 F -.15
+(ve)-.2 G 2.865(do).15 G 2.865(nt)-2.865 G(he)-2.865 E(kill-ring.)144
+628.8 Q F1(unix\255\214lename\255rubout)108 640.8 Q F0 .167(Kill the w)
+144 652.8 R .166
+(ord behind point, using white space and the slash character as the w)
+-.1 F .166(ord boundaries.)-.1 F(The)5.166 E(killed te)144 664.8 Q
+(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)-2.5 G(he kill-ring.)
+-2.5 E F1(delete\255horizontal\255space \(M\255\\\))108 676.8 Q F0
+(Delete all spaces and tabs around point.)144 688.8 Q F1(kill\255r)108
+700.8 Q(egion)-.18 E F0(Kill the te)144 712.8 Q(xt in the current re)
+-.15 E(gion.)-.15 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(48)
+188.455 E 0 Cg EP
+%%Page: 49 49
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(copy\255r)108 84 Q(egion\255as\255kill)-.18 E F0(Cop)144 96 Q 2.5(yt)
+-.1 G(he te)-2.5 E(xt in the re)-.15 E(gion to the kill b)-.15 E(uf)-.2
+E(fer)-.25 E(.)-.55 E F1(copy\255backward\255w)108 108 Q(ord)-.1 E F0
+(Cop)144 120 Q 4.8(yt)-.1 G 2.3(he w)-4.8 F 2.3
+(ord before point to the kill b)-.1 F(uf)-.2 E(fer)-.25 E 7.301(.T)-.55
+G 2.301(he w)-7.301 F 2.301(ord boundaries are the same as)-.1 F F1
+(back-)4.801 E(ward\255w)144 132 Q(ord)-.1 E F0(.)A F1(copy\255f)108 144
+Q(orward\255w)-.25 E(ord)-.1 E F0(Cop)144 156 Q 4.508(yt)-.1 G 2.008
+(he w)-4.508 F 2.008(ord follo)-.1 F 2.008(wing point to the kill b)-.25
+F(uf)-.2 E(fer)-.25 E 7.007(.T)-.55 G 2.007(he w)-7.007 F 2.007
+(ord boundaries are the same as)-.1 F F1 -.25(fo)4.507 G -.37(r-).25 G
+(ward\255w)144 168 Q(ord)-.1 E F0(.)A F1(yank \(C\255y\))108 180 Q F0 -1
+(Ya)144 192 S(nk the top of the kill ring into the b)1 E(uf)-.2 E
+(fer at point.)-.25 E F1(yank\255pop \(M\255y\))108 204 Q F0
+(Rotate the kill ring, and yank the ne)144 216 Q 2.5(wt)-.25 G 2.5
+(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E
+F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 232.8 Q
+(guments)-.1 E(digit\255ar)108 244.8 Q
+(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .367
+(Add this digit to the ar)144 256.8 R .367
+(gument already accumulating, or start a ne)-.18 F 2.867(wa)-.25 G -.18
+(rg)-2.867 G 2.867(ument. M\255\255).18 F .367(starts a ne)2.867 F -.05
+(ga)-.15 G(-).05 E(ti)144 268.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G
+(ument.).18 E F1(uni)108 280.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1
+E F0 .779(This is another w)144 292.8 R .779(ay to specify an ar)-.1 F
+3.279(gument. If)-.18 F .779(this command is follo)3.279 F .778
+(wed by one or more digits,)-.25 F 1.376
+(optionally with a leading minus sign, those digits de\214ne the ar)144
+304.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144
+316.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni)
+3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17
+(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other)
+-.2 F(-)-.2 E .898(wise ignored.)144 328.8 R .898
+(As a special case, if this command is immediately follo)5.898 F .898
+(wed by a character that is)-.25 F 1.23
+(neither a digit nor minus sign, the ar)144 340.8 R 1.23
+(gument count for the ne)-.18 F 1.23(xt command is multiplied by four)
+-.15 F(.)-.55 E .822(The ar)144 352.8 R .822
+(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .823
+(cuting this function the \214rst time mak).15 F .823(es the ar)-.1 F
+(gument)-.18 E(count four)144 364.8 Q 2.5(,as)-.4 G(econd time mak)-2.5
+E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1(Completing)
+87 381.6 Q(complete \(T)108 393.6 Q(AB\))-.9 E F0 1.137
+(Attempt to perform completion on the te)144 405.6 R 1.137
+(xt before point.)-.15 F F1(Bash)6.137 E F0 1.137
+(attempts completion treating the)3.637 F(te)144 417.6 Q .532(xt as a v)
+-.15 F .532(ariable \(if the te)-.25 F .532(xt be)-.15 F .533(gins with)
+-.15 F F1($)3.033 E F0 .533(\), username \(if the te)B .533(xt be)-.15 F
+.533(gins with)-.15 F F1(~)3.033 E F0 .533(\), hostname \(if the)B(te)
+144 429.6 Q .702(xt be)-.15 F .702(gins with)-.15 F F1(@)3.202 E F0 .701
+(\), or command \(including aliases and functions\) in turn.)B .701
+(If none of these pro-)5.701 F
+(duces a match, \214lename completion is attempted.)144 441.6 Q F1
+(possible\255completions \(M\255?\))108 453.6 Q F0
+(List the possible completions of the te)144 465.6 Q(xt before point.)
+-.15 E F1(insert\255completions \(M\255*\))108 477.6 Q F0 .783
+(Insert all completions of the te)144 489.6 R .783
+(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H
+.783(een generated by).15 F F1(possible\255com-)3.283 E(pletions)144
+501.6 Q F0(.)A F1(menu\255complete)108 513.6 Q F0 .929(Similar to)144
+525.6 R F1(complete)3.429 E F0 3.429(,b)C .929(ut replaces the w)-3.629
+F .929(ord to be completed with a single match from the list of)-.1 F
+1.193(possible completions.)144 537.6 R 1.193(Repeated e)6.193 F -.15
+(xe)-.15 G 1.193(cution of).15 F F1(menu\255complete)3.694 E F0 1.194
+(steps through the list of possible)3.694 F .829
+(completions, inserting each match in turn.)144 549.6 R .828
+(At the end of the list of completions, the bell is rung)5.828 F .727
+(\(subject to the setting of)144 561.6 R F1(bell\255style)3.227 E F0
+3.227(\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F
+.727(An ar)5.727 F .727(gument of)-.18 F/F2 10/Times-Italic@0 SF(n)3.227
+E F0(mo)3.227 E -.15(ve)-.15 G(s).15 E F2(n)3.228 E F0 1.73
+(positions forw)144 573.6 R 1.73(ard in the list of matches; a ne)-.1 F
+-.05(ga)-.15 G(ti).05 E 2.03 -.15(ve a)-.25 H -.18(rg).15 G 1.73
+(ument may be used to mo).18 F 2.03 -.15(ve b)-.15 H(ackw).15 E(ard)-.1
+E(through the list.)144 585.6 Q(This command is intended to be bound to)
+5 E F1 -.9(TA)2.5 G(B).9 E F0 2.5(,b)C(ut is unbound by def)-2.7 E
+(ault.)-.1 E F1(menu\255complete\255backward)108 597.6 Q F0 .82
+(Identical to)144 609.6 R F1(menu\255complete)3.32 E F0 3.32(,b)C .82
+(ut mo)-3.52 F -.15(ve)-.15 G 3.32(sb).15 G(ackw)-3.32 E .82
+(ard through the list of possible completions, as if)-.1 F F1
+(menu\255complete)144 621.6 Q F0(had been gi)2.5 E -.15(ve)-.25 G 2.5
+(nan).15 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve a)-.25 H -.18(rg)
+.15 G 2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E
+F1(delete\255char\255or\255list)108 633.6 Q F0 .234
+(Deletes the character under the cursor if not at the be)144 645.6 R
+.234(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete\255char)
+2.734 E F0(\).)A .425(If at the end of the line, beha)144 657.6 R -.15
+(ve)-.2 G 2.925(si).15 G .425(dentically to)-2.925 F F1
+(possible\255completions)2.925 E F0 5.425(.T)C .425
+(his command is unbound)-5.425 F(by def)144 669.6 Q(ault.)-.1 E F1
+(complete\255\214lename \(M\255/\))108 681.6 Q F0
+(Attempt \214lename completion on the te)144 693.6 Q(xt before point.)
+-.15 E F1(possible\255\214lename\255completions \(C\255x /\))108 705.6 Q
+F0(List the possible completions of the te)144 717.6 Q
+(xt before point, treating it as a \214lename.)-.15 E(GNU Bash 5.0)72
+768 Q(2018 December 7)139.295 E(49)188.455 E 0 Cg EP
+%%Page: 50 50
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(complete\255user)108 84 Q(name \(M\255~\))-.15 E F0
+(Attempt completion on the te)144 96 Q
+(xt before point, treating it as a username.)-.15 E F1(possible\255user)
+108 108 Q(name\255completions \(C\255x ~\))-.15 E F0
+(List the possible completions of the te)144 120 Q
+(xt before point, treating it as a username.)-.15 E F1(complete\255v)108
+132 Q(ariable \(M\255$\))-.1 E F0(Attempt completion on the te)144 144 Q
+(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1
+(possible\255v)108 156 Q(ariable\255completions \(C\255x $\))-.1 E F0
+(List the possible completions of the te)144 168 Q
+(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1
+(complete\255hostname \(M\255@\))108 180 Q F0
+(Attempt completion on the te)144 192 Q
+(xt before point, treating it as a hostname.)-.15 E F1
+(possible\255hostname\255completions \(C\255x @\))108 204 Q F0
+(List the possible completions of the te)144 216 Q
+(xt before point, treating it as a hostname.)-.15 E F1
+(complete\255command \(M\255!\))108 228 Q F0 .581
+(Attempt completion on the te)144 240 R .581
+(xt before point, treating it as a command name.)-.15 F .58
+(Command comple-)5.58 F .715(tion attempts to match the te)144 252 R
+.715(xt ag)-.15 F .715(ainst aliases, reserv)-.05 F .715(ed w)-.15 F
+.715(ords, shell functions, shell b)-.1 F .715(uiltins, and)-.2 F
+(\214nally e)144 264 Q -.15(xe)-.15 G
+(cutable \214lenames, in that order).15 E(.)-.55 E F1
+(possible\255command\255completions \(C\255x !\))108 276 Q F0
+(List the possible completions of the te)144 288 Q
+(xt before point, treating it as a command name.)-.15 E F1
+(dynamic\255complete\255history \(M\255T)108 300 Q(AB\))-.9 E F0 .425
+(Attempt completion on the te)144 312 R .425
+(xt before point, comparing the te)-.15 F .425(xt ag)-.15 F .424
+(ainst lines from the history list)-.05 F
+(for possible completion matches.)144 324 Q F1(dab)108 336 Q(br)-.1 E
+-.15(ev)-.18 G(\255expand).15 E F0 .61
+(Attempt menu completion on the te)144 348 R .611
+(xt before point, comparing the te)-.15 F .611(xt ag)-.15 F .611
+(ainst lines from the his-)-.05 F
+(tory list for possible completion matches.)144 360 Q F1
+(complete\255into\255braces \(M\255{\))108 372 Q F0 .4(Perform \214lena\
+me completion and insert the list of possible completions enclosed with\
+in braces so)144 384 R(the list is a)144 396 Q -.25(va)-.2 G
+(ilable to the shell \(see).25 E F1(Brace Expansion)2.5 E F0(abo)2.5 E
+-.15(ve)-.15 G(\).).15 E F1 -.25(Ke)87 412.8 S(yboard Macr).25 E(os)-.18
+E(start\255kbd\255macr)108 424.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\))
+.833 E F0(Be)144 436.8 Q(gin sa)-.15 E
+(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G
+(board macro.).15 E F1(end\255kbd\255macr)108 448.8 Q 2.5(o\()-.18 G
+(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 460.8 Q
+(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G
+(board macro and store the de\214nition.).15 E F1
+(call\255last\255kbd\255macr)108 472.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5
+E F0(Re-e)144 484.8 Q -.15(xe)-.15 G .999(cute the last k).15 F -.15(ey)
+-.1 G .999(board macro de\214ned, by making the characters in the macro\
+ appear as if).15 F(typed at the k)144 496.8 Q -.15(ey)-.1 G(board.).15
+E F1(print\255last\255kbd\255macr)108 508.8 Q 2.5(o\()-.18 G(\))-2.5 E
+F0(Print the last k)144 520.8 Q -.15(ey)-.1 G
+(board macro de\214ned in a format suitable for the).15 E/F2 10
+/Times-Italic@0 SF(inputr)2.5 E(c)-.37 E F0(\214le.)2.5 E F1
+(Miscellaneous)87 537.6 Q -.18(re)108 549.6 S<ad72>.18 E
+(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.777
+(Read in the contents of the)144 561.6 R F2(inputr)4.277 E(c)-.37 E F0
+1.776(\214le, and incorporate an)4.276 F 4.276(yb)-.15 G 1.776
+(indings or v)-4.276 F 1.776(ariable assignments)-.25 F(found there.)144
+573.6 Q F1(abort \(C\255g\))108 585.6 Q F0 3.248
+(Abort the current editing command and ring the terminal')144 597.6 R
+5.749(sb)-.55 G 3.249(ell \(subject to the setting of)-5.749 F F1
+(bell\255style)144 609.6 Q F0(\).)A F1(do\255lo)108 621.6 Q(wer)-.1 E
+(case\255v)-.18 E(ersion \(M\255A, M\255B, M\255)-.1 E F2(x)A F1 2.5(,.)
+C(..\))-2.5 E F0 1.739(If the meta\214ed character)144 633.6 R F2(x)
+4.239 E F0 1.739
+(is uppercase, run the command that is bound to the corresponding)4.239
+F(meta\214ed lo)144 645.6 Q(wercase character)-.25 E 5(.T)-.55 G
+(he beha)-5 E(vior is unde\214ned if)-.2 E F2(x)2.5 E F0(is already lo)
+2.5 E(wercase.)-.25 E F1(pr)108 657.6 Q(e\214x\255meta \(ESC\))-.18 E F0
+(Metafy the ne)144 669.6 Q(xt character typed.)-.15 E/F3 9/Times-Bold@0
+SF(ESC)5 E F1(f)2.25 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1
+(Meta\255f)2.5 E F0(.)A F1(undo \(C\255_, C\255x C\255u\))108 681.6 Q F0
+(Incremental undo, separately remembered for each line.)144 693.6 Q F1
+-2.29 -.18(re v)108 705.6 T(ert\255line \(M\255r\)).08 E F0 1.095
+(Undo all changes made to this line.)144 717.6 R 1.095(This is lik)6.095
+F 3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E
+F0 1.095(command enough times to)3.595 F
+(return the line to its initial state.)144 729.6 Q(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(50)188.455 E 0 Cg EP
+%%Page: 51 51
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(tilde\255expand \(M\255&\))108 84 Q F0(Perform tilde e)144 96 Q
+(xpansion on the current w)-.15 E(ord.)-.1 E F1
+(set\255mark \(C\255@, M\255<space>\))108 108 Q F0
+(Set the mark to the point.)144 120 Q(If a numeric ar)5 E
+(gument is supplied, the mark is set to that position.)-.18 E F1
+(exchange\255point\255and\255mark \(C\255x C\255x\))108 132 Q F0(Sw)144
+144 Q .283(ap the point with the mark.)-.1 F .283
+(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G
+2.782(dp).15 G .282(osition, and the old)-2.782 F(cursor position is sa)
+144 156 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1
+(character\255sear)108 168 Q(ch \(C\255]\))-.18 E F0 3.035(Ac)144 180 S
+.535(haracter is read and point is mo)-3.035 F -.15(ve)-.15 G 3.035(dt)
+.15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535
+(xt occurrence of that character)-.15 F 5.536(.A)-.55 G(ne)-2.5 E -.05
+(ga)-.15 G(ti).05 E .836 -.15(ve c)-.25 H(ount).15 E(searches for pre)
+144 192 Q(vious occurrences.)-.25 E F1(character\255sear)108 204 Q
+(ch\255backward \(M\255C\255]\))-.18 E F0 3.544(Ac)144 216 S 1.044
+(haracter is read and point is mo)-3.544 F -.15(ve)-.15 G 3.544(dt).15 G
+3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044
+(vious occurrence of that character)-.25 F 6.043(.A)-.55 G(ne)-2.5 E
+-.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G
+(count searches for subsequent occurrences.)144 228 Q F1
+(skip\255csi\255sequence)108 240 Q F0 1.826
+(Read enough characters to consume a multi-k)144 252 R 2.126 -.15(ey s)
+-.1 H 1.827(equence such as those de\214ned for k).15 F -.15(ey)-.1 G
+4.327(sl).15 G(ik)-4.327 E(e)-.1 E .791(Home and End.)144 264 R .791
+(Such sequences be)5.791 F .791
+(gin with a Control Sequence Indicator \(CSI\), usually ESC\255[.)-.15 F
+.331(If this sequence is bound to "\\[", k)144 276 R -.15(ey)-.1 G 2.831
+(sp).15 G .331(roducing such sequences will ha)-2.831 F .632 -.15(ve n)
+-.2 H 2.832(oe).15 G -.25(ff)-2.832 G .332(ect unless e).25 F(xplic-)
+-.15 E .026(itly bound to a readline command, instead of inserting stra\
+y characters into the editing b)144 288 R(uf)-.2 E(fer)-.25 E 5.026(.T)
+-.55 G(his)-5.026 E(is unbound by def)144 300 Q(ault, b)-.1 E
+(ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108
+312 Q F0 -.4(Wi)144 324 S .48(thout a numeric ar).4 F .48(gument, the v)
+-.18 F .481(alue of the readline)-.25 F F1(comment\255begin)2.981 E F0
+-.25(va)2.981 G .481(riable is inserted at the).25 F(be)144 336 Q .245
+(ginning of the current line.)-.15 F .245(If a numeric ar)5.245 F .244
+(gument is supplied, this command acts as a toggle: if)-.18 F .321
+(the characters at the be)144 348 R .321
+(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1
+(comment\255begin)2.821 E F0 2.822(,t)C .322(he v)-2.822 F .322(alue is)
+-.25 F .832(inserted, otherwise the characters in)144 360 R F1
+(comment\255begin)3.332 E F0 .831(are deleted from the be)3.332 F .831
+(ginning of the line.)-.15 F 1.468
+(In either case, the line is accepted as if a ne)144 372 R 1.468
+(wline had been typed.)-.25 F 1.469(The def)6.469 F 1.469(ault v)-.1 F
+1.469(alue of)-.25 F F1(com-)3.969 E(ment\255begin)144 384 Q F0 .84
+(causes this command to mak)3.34 F 3.339(et)-.1 G .839
+(he current line a shell comment.)-3.339 F .839(If a numeric ar)5.839 F
+(gu-)-.18 E(ment causes the comment character to be remo)144 396 Q -.15
+(ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G
+(cuted by the shell.).15 E F1(glob\255complete\255w)108 408 Q
+(ord \(M\255g\))-.1 E F0 .791(The w)144 420 R .791
+(ord before point is treated as a pattern for pathname e)-.1 F .792
+(xpansion, with an asterisk implicitly)-.15 F 2.5(appended. This)144 432
+R(pattern is used to generate a list of matching \214lenames for possib\
+le completions.)2.5 E F1(glob\255expand\255w)108 444 Q(ord \(C\255x *\))
+-.1 E F0 .176(The w)144 456 R .176
+(ord before point is treated as a pattern for pathname e)-.1 F .176
+(xpansion, and the list of matching \214le-)-.15 F .516
+(names is inserted, replacing the w)144 468 R 3.016(ord. If)-.1 F 3.016
+(an)3.016 G .516(umeric ar)-3.016 F .516
+(gument is supplied, an asterisk is appended)-.18 F(before pathname e)
+144 480 Q(xpansion.)-.15 E F1(glob\255list\255expansions \(C\255x g\))
+108 492 Q F0 .923(The list of e)144 504 R .923(xpansions that w)-.15 F
+.923(ould ha)-.1 F 1.223 -.15(ve b)-.2 H .923(een generated by).15 F F1
+(glob\255expand\255w)3.423 E(ord)-.1 E F0 .923(is displayed, and)3.423 F
+.872(the line is redra)144 516 R 3.372(wn. If)-.15 F 3.372(an)3.372 G
+.872(umeric ar)-3.372 F .872
+(gument is supplied, an asterisk is appended before pathname)-.18 F -.15
+(ex)144 528 S(pansion.).15 E F1(dump\255functions)108 540 Q F0 .627
+(Print all of the functions and their k)144 552 R .927 -.15(ey b)-.1 H
+.626(indings to the readline output stream.).15 F .626(If a numeric ar)
+5.626 F(gu-)-.18 E
+(ment is supplied, the output is formatted in such a w)144 564 Q
+(ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr)
+2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 576 Q(ariables)-.1 E F0
+1.799(Print all of the settable readline v)144 588 R 1.799
+(ariables and their v)-.25 F 1.8(alues to the readline output stream.)
+-.25 F 1.8(If a)6.8 F .305(numeric ar)144 600 R .304
+(gument is supplied, the output is formatted in such a w)-.18 F .304
+(ay that it can be made part of an)-.1 F F2(inputr)144 612 Q(c)-.37 E F0
+(\214le.)2.5 E F1(dump\255macr)108 624 Q(os)-.18 E F0 .592
+(Print all of the readline k)144 636 R .892 -.15(ey s)-.1 H .592
+(equences bound to macros and the strings the).15 F 3.093(yo)-.15 G
+3.093(utput. If)-3.093 F 3.093(an)3.093 G(umeric)-3.093 E(ar)144 648 Q
+.528(gument is supplied, the output is formatted in such a w)-.18 F .528
+(ay that it can be made part of an)-.1 F F2(inputr)3.027 E(c)-.37 E F0
+(\214le.)144 660 Q F1(display\255shell\255v)108 672 Q
+(ersion \(C\255x C\255v\))-.1 E F0(Display v)144 684 Q
+(ersion information about the current instance of)-.15 E F1(bash)2.5 E
+F0(.)A F1(Pr)87 700.8 Q(ogrammable Completion)-.18 E F0 .146(When w)108
+712.8 R .147(ord completion is attempted for an ar)-.1 F .147
+(gument to a command for which a completion speci\214cation \(a)-.18 F
+F2(compspec)108 724.8 Q F0 3.829(\)h)C 1.329
+(as been de\214ned using the)-3.829 F F1(complete)3.829 E F0 -.2(bu)
+3.829 G 1.329(iltin \(see).2 F/F3 9/Times-Bold@0 SF 1.329(SHELL B)3.829
+F(UIL)-.09 E 1.329(TIN COMMANDS)-.828 F F0(belo)3.579 E 1.328(w\), the)
+-.25 F(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(51)188.455 E 0 Cg
+EP
+%%Page: 52 52
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E
+(programmable completion f)108 84 Q(acilities are in)-.1 E -.2(vo)-.4 G
+-.1(ke).2 G(d.).1 E .497(First, the command name is identi\214ed.)108
+100.8 R .497(If the command w)5.497 F .498
+(ord is the empty string \(completion attempted at)-.1 F .234(the be)108
+112.8 R .233(ginning of an empty line\), an)-.15 F 2.733(yc)-.15 G .233
+(ompspec de\214ned with the)-2.733 F/F1 10/Times-Bold@0 SF<ad45>2.733 E
+F0 .233(option to)2.733 F F1(complete)2.733 E F0 .233(is used.)2.733 F
+.233(If a comp-)5.233 F .481(spec has been de\214ned for that command, \
+the compspec is used to generate the list of possible completions)108
+124.8 R .823(for the w)108 136.8 R 3.323(ord. If)-.1 F .823
+(the command w)3.323 F .822(ord is a full pathname, a compspec for the \
+full pathname is searched for)-.1 F 2.866(\214rst. If)108 148.8 R .367(\
+no compspec is found for the full pathname, an attempt is made to \214n\
+d a compspec for the portion)2.866 F(follo)108 160.8 Q .299
+(wing the \214nal slash.)-.25 F .298
+(If those searches do not result in a compspec, an)5.299 F 2.798(yc)-.15
+G .298(ompspec de\214ned with the)-2.798 F F1<ad44>2.798 E F0 .056
+(option to)108 172.8 R F1(complete)2.556 E F0 .056(is used as the def)
+2.556 F 2.556(ault. If)-.1 F .056(there is no def)2.556 F .056
+(ault compspec,)-.1 F F1(bash)2.556 E F0 .056(attempts alias e)2.556 F
+.057(xpansion on)-.15 F .333(the command w)108 184.8 R .332(ord as a \
+\214nal resort, and attempts to \214nd a compspec for the command w)-.1
+F .332(ord from an)-.1 F 2.832(ys)-.15 G(uc-)-2.832 E(cessful e)108
+196.8 Q(xpansion.)-.15 E .817(Once a compspec has been found, it is use\
+d to generate the list of matching w)108 213.6 R 3.317(ords. If)-.1 F
+3.317(ac)3.317 G .817(ompspec is not)-3.317 F(found, the def)108 225.6 Q
+(ault)-.1 E F1(bash)2.5 E F0(completion as described abo)2.5 E .3 -.15
+(ve u)-.15 H(nder).15 E F1(Completing)2.5 E F0(is performed.)2.5 E .464
+(First, the actions speci\214ed by the compspec are used.)108 242.4 R
+.463(Only matches which are pre\214x)5.464 F .463(ed by the w)-.15 F
+.463(ord being)-.1 F .595(completed are returned.)108 254.4 R .595
+(When the)5.595 F F1<ad66>3.095 E F0(or)3.095 E F1<ad64>3.095 E F0 .596
+(option is used for \214lename or directory name completion, the)3.095 F
+(shell v)108 266.4 Q(ariable)-.25 E/F2 9/Times-Bold@0 SF(FIGNORE)2.5 E
+F0(is used to \214lter the matches.)2.25 E(An)108 283.2 Q 4.084(yc)-.15
+G 1.584(ompletions speci\214ed by a pathname e)-4.084 F 1.584
+(xpansion pattern to the)-.15 F F1<ad47>4.084 E F0 1.584
+(option are generated ne)4.084 F 4.084(xt. The)-.15 F -.1(wo)108 295.2 S
+.554(rds generated by the pattern need not match the w).1 F .555
+(ord being completed.)-.1 F(The)5.555 E F2(GLOBIGNORE)3.055 E F0 .555
+(shell v)2.805 F(ari-)-.25 E
+(able is not used to \214lter the matches, b)108 307.2 Q(ut the)-.2 E F2
+(FIGNORE)2.5 E F0 -.25(va)2.25 G(riable is used.).25 E(Ne)108 324 Q .321
+(xt, the string speci\214ed as the ar)-.15 F .321(gument to the)-.18 F
+F1<ad57>2.821 E F0 .32(option is considered.)2.821 F .32
+(The string is \214rst split using the)5.32 F .412(characters in the)108
+336 R F2(IFS)2.912 E F0 .412(special v)2.662 F .412
+(ariable as delimiters.)-.25 F .412(Shell quoting is honored.)5.412 F
+.413(Each w)5.412 F .413(ord is then e)-.1 F(xpanded)-.15 E .092
+(using brace e)108 348 R .092(xpansion, tilde e)-.15 F .092
+(xpansion, parameter and v)-.15 F .092(ariable e)-.25 F .091
+(xpansion, command substitution, and arith-)-.15 F 1.396(metic e)108 360
+R 1.396(xpansion, as described abo)-.15 F 1.696 -.15(ve u)-.15 H(nder)
+.15 E F2(EXP)3.896 E(ANSION)-.666 E/F3 9/Times-Roman@0 SF(.)A F0 1.396
+(The results are split using the rules described)5.896 F(abo)108 372 Q
+.51 -.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)2.71 G .21(rd Splitting).75 F
+F0 5.21(.T)C .209(he results of the e)-5.21 F .209
+(xpansion are pre\214x-matched ag)-.15 F .209(ainst the w)-.05 F .209
+(ord being com-)-.1 F(pleted, and the matching w)108 384 Q
+(ords become the possible completions.)-.1 E 1.237
+(After these matches ha)108 400.8 R 1.537 -.15(ve b)-.2 H 1.237
+(een generated, an).15 F 3.737(ys)-.15 G 1.238
+(hell function or command speci\214ed with the)-3.737 F F1<ad46>3.738 E
+F0(and)3.738 E F1<ad43>3.738 E F0 3.376(options is in)108 412.8 R -.2
+(vo)-.4 G -.1(ke).2 G 5.875(d. When).1 F 3.375
+(the command or function is in)5.875 F -.2(vo)-.4 G -.1(ke).2 G 3.375
+(d, the).1 F F2(COMP_LINE)5.875 E F3(,)A F2(COMP_POINT)5.625 E F3(,)A F2
+(COMP_KEY)108 424.8 Q F3(,)A F0(and)2.407 E F2(COMP_TYPE)2.657 E F0 -.25
+(va)2.407 G .157(riables are assigned v).25 F .157
+(alues as described abo)-.25 F .457 -.15(ve u)-.15 H(nder).15 E F1 .158
+(Shell V)2.658 F(ariables)-.92 E F0 5.158(.I)C(f)-5.158 E 3.486(as)108
+436.8 S .986(hell function is being in)-3.486 F -.2(vo)-.4 G -.1(ke).2 G
+.986(d, the).1 F F2(COMP_W)3.486 E(ORDS)-.09 E F0(and)3.236 E F2
+(COMP_CW)3.486 E(ORD)-.09 E F0 -.25(va)3.236 G .986
+(riables are also set.).25 F(When)5.985 E .346
+(the function or command is in)108 448.8 R -.2(vo)-.4 G -.1(ke).2 G .346
+(d, the \214rst ar).1 F .346(gument \()-.18 F F1($1)A F0 2.847(\)i)C
+2.847(st)-2.847 G .347(he name of the command whose ar)-2.847 F(guments)
+-.18 E .264(are being completed, the second ar)108 460.8 R .264
+(gument \()-.18 F F1($2)A F0 2.764(\)i)C 2.764(st)-2.764 G .264(he w)
+-2.764 F .263(ord being completed, and the third ar)-.1 F .263
+(gument \()-.18 F F1($3)A F0 2.763(\)i)C(s)-2.763 E .628(the w)108 472.8
+R .628(ord preceding the w)-.1 F .629
+(ord being completed on the current command line.)-.1 F .629
+(No \214ltering of the generated)5.629 F .715(completions ag)108 484.8 R
+.715(ainst the w)-.05 F .714(ord being completed is performed; the func\
+tion or command has complete free-)-.1 F(dom in generating the matches.)
+108 496.8 Q(An)108 513.6 Q 2.937(yf)-.15 G .437
+(unction speci\214ed with)-2.937 F F1<ad46>2.937 E F0 .437(is in)2.937 F
+-.2(vo)-.4 G -.1(ke).2 G 2.937<648c>.1 G 2.937(rst. The)-2.937 F .437
+(function may use an)2.937 F 2.937(yo)-.15 G 2.937(ft)-2.937 G .437
+(he shell f)-2.937 F .438(acilities, including)-.1 F(the)108 525.6 Q F1
+(compgen)2.957 E F0 -.2(bu)2.957 G .457(iltin described belo).2 F 1.756
+-.65(w, t)-.25 H 2.956(og).65 G .456(enerate the matches.)-2.956 F .456
+(It must put the possible completions in the)5.456 F F2(COMPREPL)108
+537.6 Q(Y)-.828 E F0(array v)2.25 E(ariable, one per array element.)-.25
+E(Ne)108 554.4 Q .08(xt, an)-.15 F 2.58(yc)-.15 G .08
+(ommand speci\214ed with the)-2.58 F F1<ad43>2.58 E F0 .081
+(option is in)2.581 F -.2(vo)-.4 G -.1(ke).2 G 2.581(di).1 G 2.581(na)
+-2.581 G 2.581(ne)-2.581 G -.4(nv)-2.581 G .081(ironment equi).4 F -.25
+(va)-.25 G .081(lent to command sub-).25 F 2.859(stitution. It)108 566.4
+R .359(should print a list of completions, one per line, to the standar\
+d output.)2.859 F .358(Backslash may be used)5.359 F(to escape a ne)108
+578.4 Q(wline, if necessary)-.25 E(.)-.65 E .376
+(After all of the possible completions are generated, an)108 595.2 R
+2.877<798c>-.15 G .377(lter speci\214ed with the)-2.877 F F1<ad58>2.877
+E F0 .377(option is applied to the)2.877 F 3.182(list. The)108 607.2 R
+.682(\214lter is a pattern as used for pathname e)3.182 F .681
+(xpansion; a)-.15 F F1(&)3.181 E F0 .681
+(in the pattern is replaced with the te)3.181 F .681(xt of)-.15 F .522
+(the w)108 619.2 R .522(ord being completed.)-.1 F 3.022(Al)5.522 G
+(iteral)-3.022 E F1(&)3.022 E F0 .523
+(may be escaped with a backslash; the backslash is remo)3.022 F -.15(ve)
+-.15 G 3.023(db).15 G(efore)-3.023 E .85(attempting a match.)108 631.2 R
+(An)5.85 E 3.35(yc)-.15 G .849
+(ompletion that matches the pattern will be remo)-3.35 F -.15(ve)-.15 G
+3.349(df).15 G .849(rom the list.)-3.349 F 3.349(Al)5.849 G(eading)
+-3.349 E F1(!)3.349 E F0(ne)108 643.2 Q -.05(ga)-.15 G .764
+(tes the pattern; in this case an).05 F 3.264(yc)-.15 G .764
+(ompletion not matching the pattern will be remo)-3.264 F -.15(ve)-.15 G
+3.264(d. If).15 F(the)3.265 E F1(nocase-)3.265 E(match)108 655.2 Q F0
+(shell option is enabled, the match is performed without re)2.5 E -.05
+(ga)-.15 G(rd to the case of alphabetic characters.).05 E(Finally)108
+672 Q 3.087(,a)-.65 G .887 -.15(ny p)-3.087 H .587(re\214x and suf).15 F
+.587(\214x speci\214ed with the)-.25 F F1<ad50>3.087 E F0(and)3.087 E F1
+<ad53>3.087 E F0 .587(options are added to each member of the com-)3.087
+F(pletion list, and the result is returned to the readline completion c\
+ode as the list of possible completions.)108 684 Q .246(If the pre)108
+700.8 R .247(viously-applied actions do not generate an)-.25 F 2.747(ym)
+-.15 G .247(atches, and the)-2.747 F F1 .247(\255o dir)2.747 F(names)
+-.15 E F0 .247(option w)2.747 F .247(as supplied to)-.1 F F1(complete)
+108 712.8 Q F0(when the compspec w)2.5 E
+(as de\214ned, directory name completion is attempted.)-.1 E 2.03
+(If the)108 729.6 R F1 2.03(\255o plusdirs)4.53 F F0 2.03(option w)4.53
+F 2.029(as supplied to)-.1 F F1(complete)4.529 E F0 2.029
+(when the compspec w)4.529 F 2.029(as de\214ned, directory name)-.1 F
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(52)188.455 E 0 Cg EP
+%%Page: 53 53
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E
+(completion is attempted and an)108 84 Q 2.5(ym)-.15 G
+(atches are added to the results of the other actions.)-2.5 E .559
+(By def)108 100.8 R .559(ault, if a compspec is found, whate)-.1 F -.15
+(ve)-.25 G 3.059(ri).15 G 3.059(tg)-3.059 G .56
+(enerates is returned to the completion code as the full set)-3.059 F
+.632(of possible completions.)108 112.8 R .632(The def)5.632 F(ault)-.1
+E/F1 10/Times-Bold@0 SF(bash)3.132 E F0 .631
+(completions are not attempted, and the readline def)3.131 F .631
+(ault of \214le-)-.1 F .558(name completion is disabled.)108 124.8 R
+.558(If the)5.558 F F1 .559(\255o bashdefault)3.059 F F0 .559(option w)
+3.059 F .559(as supplied to)-.1 F F1(complete)3.059 E F0 .559
+(when the compspec)3.059 F -.1(wa)108 136.8 S 3.172(sd).1 G .672
+(e\214ned, the)-3.172 F F1(bash)3.172 E F0(def)3.172 E .671
+(ault completions are attempted if the compspec generates no matches.)
+-.1 F .671(If the)5.671 F F1<ad6f>3.171 E(default)108 148.8 Q F0 1.207
+(option w)3.706 F 1.207(as supplied to)-.1 F F1(complete)3.707 E F0
+1.207(when the compspec w)3.707 F 1.207(as de\214ned, readline')-.1 F
+3.707(sd)-.55 G(ef)-3.707 E 1.207(ault completion)-.1 F
+(will be performed if the compspec \(and, if attempted, the def)108
+160.8 Q(ault)-.1 E F1(bash)2.5 E F0(completions\) generate no matches.)
+2.5 E .245(When a compspec indicates that directory name completion is \
+desired, the programmable completion func-)108 177.6 R .632(tions force\
+ readline to append a slash to completed names which are symbolic links\
+ to directories, subject)108 189.6 R 2.762(to the v)108 201.6 R 2.762
+(alue of the)-.25 F F1(mark\255dir)5.262 E(ectories)-.18 E F0 2.761
+(readline v)5.262 F 2.761(ariable, re)-.25 F -.05(ga)-.15 G 2.761
+(rdless of the setting of the).05 F F1(mark-sym-)5.261 E(link)108 213.6
+Q(ed\255dir)-.1 E(ectories)-.18 E F0(readline v)2.5 E(ariable.)-.25 E
+.19(There is some support for dynamically modifying completions.)108
+230.4 R .191(This is most useful when used in combina-)5.191 F 1.172
+(tion with a def)108 242.4 R 1.172(ault completion speci\214ed with)-.1
+F F1 1.172(complete \255D)3.672 F F0 6.172(.I)C(t')-6.172 E 3.672(sp)
+-.55 G 1.172(ossible for shell functions e)-3.672 F -.15(xe)-.15 G 1.172
+(cuted as).15 F .93(completion handlers to indicate that completion sho\
+uld be retried by returning an e)108 254.4 R .93(xit status of 124.)-.15
+F .93(If a)5.93 F .1(shell function returns 124, and changes the compsp\
+ec associated with the command on which completion is)108 266.4 R .665
+(being attempted \(supplied as the \214rst ar)108 278.4 R .666
+(gument when the function is e)-.18 F -.15(xe)-.15 G .666
+(cuted\), programmable completion).15 F .084(restarts from the be)108
+290.4 R .084(ginning, with an attempt to \214nd a ne)-.15 F 2.584(wc)
+-.25 G .084(ompspec for that command.)-2.584 F .083(This allo)5.083 F
+.083(ws a set of)-.25 F(completions to be b)108 302.4 Q(uilt dynamicall\
+y as completion is attempted, rather than being loaded all at once.)-.2
+E -.15(Fo)108 319.2 S 2.636(ri).15 G .137
+(nstance, assuming that there is a library of compspecs, each k)-2.636 F
+.137(ept in a \214le corresponding to the name of)-.1 F
+(the command, the follo)108 331.2 Q(wing def)-.25 E
+(ault completion function w)-.1 E(ould load completions dynamically:)-.1
+E/F2 10/Courier@0 SF(_completion_loader\(\))108 348 Q({)108 360 Q 6(.")
+144 372 S(/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124)-6
+E(})108 384 Q
+(complete -D -F _completion_loader -o bashdefault -o default)108 396 Q
+/F3 10.95/Times-Bold@0 SF(HIST)72 424.8 Q(OR)-.197 E(Y)-.383 E F0 .372
+(When the)108 436.8 R F1 .372(\255o history)2.872 F F0 .372
+(option to the)2.872 F F1(set)2.872 E F0 -.2(bu)2.872 G .372
+(iltin is enabled, the shell pro).2 F .371(vides access to the)-.15 F/F4
+10/Times-Italic@0 SF .371(command history)2.871 F F0(,)A .304
+(the list of commands pre)108 448.8 R .304(viously typed.)-.25 F .304
+(The v)5.304 F .304(alue of the)-.25 F/F5 9/Times-Bold@0 SF(HISTSIZE)
+2.804 E F0 -.25(va)2.554 G .305(riable is used as the number of com-).25
+F .43(mands to sa)108 460.8 R .73 -.15(ve i)-.2 H 2.93(nah).15 G .43
+(istory list.)-2.93 F .43(The te)5.43 F .429(xt of the last)-.15 F F5
+(HISTSIZE)2.929 E F0 .429(commands \(def)2.679 F .429(ault 500\) is sa)
+-.1 F -.15(ve)-.2 G 2.929(d. The).15 F(shell)2.929 E .287
+(stores each command in the history list prior to parameter and v)108
+472.8 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F5(EXP)2.787 E
+(ANSION)-.666 E F0(abo)2.537 E -.15(ve)-.15 G(\)).15 E -.2(bu)108 484.8
+S 4.066(ta).2 G 1.565(fter history e)-4.066 F 1.565
+(xpansion is performed, subject to the v)-.15 F 1.565
+(alues of the shell v)-.25 F(ariables)-.25 E F5(HISTIGNORE)4.065 E F0
+(and)3.815 E F5(HISTCONTR)108 496.8 Q(OL)-.27 E/F6 9/Times-Roman@0 SF(.)
+A F0 .082
+(On startup, the history is initialized from the \214le named by the v)
+108 513.6 R(ariable)-.25 E F5(HISTFILE)2.583 E F0(\(def)2.333 E(ault)-.1
+E F4(~/.bash_history)2.583 E F0(\).)A .315(The \214le named by the v)108
+525.6 R .315(alue of)-.25 F F5(HISTFILE)2.815 E F0 .315
+(is truncated, if necessary)2.565 F 2.815(,t)-.65 G 2.815(oc)-2.815 G
+.315(ontain no more than the number of)-2.815 F .658
+(lines speci\214ed by the v)108 537.6 R .658(alue of)-.25 F F5
+(HISTFILESIZE)3.158 E F6(.)A F0(If)5.158 E F1(HISTFILESIZE)3.158 E F0
+.659(is unset, or set to null, a non-numeric)3.158 F -.25(va)108 549.6 S
+.142(lue, or a numeric v).25 F .142
+(alue less than zero, the history \214le is not truncated.)-.25 F .142
+(When the history \214le is read, lines)5.142 F(be)108 561.6 Q 1.604
+(ginning with the history comment character follo)-.15 F 1.604
+(wed immediately by a digit are interpreted as time-)-.25 F .151
+(stamps for the follo)108 573.6 R .151(wing history line.)-.25 F .151
+(These timestamps are optionally displayed depending on the v)5.151 F
+.15(alue of)-.25 F(the)108 585.6 Q F5(HISTTIMEFORMA)3.558 E(T)-.855 E F0
+-.25(va)3.309 G 3.559(riable. When).25 F 3.559(as)3.559 G 1.059
+(hell with history enabled e)-3.559 F 1.059(xits, the last)-.15 F F5
+($HISTSIZE)3.559 E F0 1.059(lines are)3.309 F .159
+(copied from the history list to)108 597.6 R F5($HISTFILE)2.659 E F6(.)A
+F0 .159(If the)4.659 F F1(histappend)2.658 E F0 .158
+(shell option is enabled \(see the description of)2.658 F F1(shopt)108
+609.6 Q F0(under)2.581 E F5 .081(SHELL B)2.581 F(UIL)-.09 E .081
+(TIN COMMANDS)-.828 F F0(belo)2.332 E .082
+(w\), the lines are appended to the history \214le, otherwise the)-.25 F
+.197(history \214le is o)108 621.6 R -.15(ve)-.15 G 2.697(rwritten. If)
+.15 F F5(HISTFILE)2.697 E F0 .196(is unset, or if the history \214le is\
+ unwritable, the history is not sa)2.447 F -.15(ve)-.2 G(d.).15 E .583
+(If the)108 633.6 R F5(HISTTIMEFORMA)3.083 E(T)-.855 E F0 -.25(va)2.834
+G .584
+(riable is set, time stamps are written to the history \214le, mark).25
+F .584(ed with the his-)-.1 F 1.148(tory comment character)108 645.6 R
+3.648(,s)-.4 G 3.648(ot)-3.648 G(he)-3.648 E 3.648(ym)-.15 G 1.147
+(ay be preserv)-3.648 F 1.147(ed across shell sessions.)-.15 F 1.147
+(This uses the history comment)6.147 F 1.376
+(character to distinguish timestamps from other history lines.)108 657.6
+R 1.377(After sa)6.377 F 1.377(ving the history)-.2 F 3.877(,t)-.65 G
+1.377(he history \214le is)-3.877 F .757
+(truncated to contain no more than)108 669.6 R F5(HISTFILESIZE)3.257 E
+F0 3.257(lines. If)3.007 F F5(HISTFILESIZE)3.257 E F0 .757
+(is unset, or set to null, a non-)3.007 F(numeric v)108 681.6 Q
+(alue, or a numeric v)-.25 E
+(alue less than zero, the history \214le is not truncated.)-.25 E .298
+(The b)108 698.4 R .298(uiltin command)-.2 F F1(fc)2.798 E F0(\(see)
+2.798 E F5 .298(SHELL B)2.798 F(UIL)-.09 E .298(TIN COMMANDS)-.828 F F0
+(belo)2.549 E .299(w\) may be used to list or edit and re-e)-.25 F -.15
+(xe)-.15 G(-).15 E .472(cute a portion of the history list.)108 710.4 R
+(The)5.472 E F1(history)2.972 E F0 -.2(bu)2.972 G .471
+(iltin may be used to display or modify the history list and).2 F 1.603
+(manipulate the history \214le.)108 722.4 R 1.604
+(When using command-line editing, search commands are a)6.604 F -.25(va)
+-.2 G 1.604(ilable in each).25 F(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(53)188.455 E 0 Cg EP
+%%Page: 54 54
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E
+(editing mode that pro)108 84 Q(vide access to the history list.)-.15 E
+1.486(The shell allo)108 100.8 R 1.486(ws control o)-.25 F -.15(ve)-.15
+G 3.986(rw).15 G 1.486(hich commands are sa)-3.986 F -.15(ve)-.2 G 3.986
+(do).15 G 3.986(nt)-3.986 G 1.486(he history list.)-3.986 F(The)6.485 E
+/F1 9/Times-Bold@0 SF(HISTCONTR)3.985 E(OL)-.27 E F0(and)3.735 E F1
+(HISTIGNORE)108 112.8 Q F0 -.25(va)2.707 G .457
+(riables may be set to cause the shell to sa).25 F .758 -.15(ve o)-.2 H
+.458(nly a subset of the commands entered.).15 F(The)5.458 E/F2 10
+/Times-Bold@0 SF(cmdhist)108 124.8 Q F0 .75
+(shell option, if enabled, causes the shell to attempt to sa)3.25 F 1.05
+-.15(ve e)-.2 H .75(ach line of a multi-line command in).15 F 1.077
+(the same history entry)108 136.8 R 3.577(,a)-.65 G 1.077
+(dding semicolons where necessary to preserv)-3.577 F 3.577(es)-.15 G
+1.077(yntactic correctness.)-3.577 F(The)6.077 E F2(lithist)3.577 E F0
+.374(shell option causes the shell to sa)108 148.8 R .674 -.15(ve t)-.2
+H .374(he command with embedded ne).15 F .373
+(wlines instead of semicolons.)-.25 F .373(See the)5.373 F .318
+(description of the)108 160.8 R F2(shopt)2.818 E F0 -.2(bu)2.818 G .318
+(iltin belo).2 F 2.818(wu)-.25 G(nder)-2.818 E F1 .318(SHELL B)2.818 F
+(UIL)-.09 E .318(TIN COMMANDS)-.828 F F0 .319
+(for information on setting and)2.568 F(unsetting shell options.)108
+172.8 Q/F3 10.95/Times-Bold@0 SF(HIST)72 189.6 Q(OR)-.197 E 2.738(YE)
+-.383 G(XP)-2.738 E(ANSION)-.81 E F0 .611
+(The shell supports a history e)108 201.6 R .611
+(xpansion feature that is similar to the history e)-.15 F .61
+(xpansion in)-.15 F F2(csh)3.11 E F0 5.61(.T)C .61(his section)-5.61 F
+.87(describes what syntax features are a)108 213.6 R -.25(va)-.2 G 3.371
+(ilable. This).25 F .871(feature is enabled by def)3.371 F .871
+(ault for interacti)-.1 F 1.171 -.15(ve s)-.25 H .871(hells, and).15 F
+2.014(can be disabled using the)108 225.6 R F2(+H)4.514 E F0 2.014
+(option to the)4.514 F F2(set)4.514 E F0 -.2(bu)4.514 G 2.014
+(iltin command \(see).2 F F1 2.013(SHELL B)4.513 F(UIL)-.09 E 2.013
+(TIN COMMANDS)-.828 F F0(belo)108 237.6 Q 2.5(w\). Non-interacti)-.25 F
+.3 -.15(ve s)-.25 H(hells do not perform history e).15 E
+(xpansion by def)-.15 E(ault.)-.1 E 1.305(History e)108 254.4 R 1.305
+(xpansions introduce w)-.15 F 1.306(ords from the history list into the\
+ input stream, making it easy to repeat)-.1 F .21
+(commands, insert the ar)108 266.4 R .21(guments to a pre)-.18 F .209
+(vious command into the current input line, or \214x errors in pre)-.25
+F(vious)-.25 E(commands quickly)108 278.4 Q(.)-.65 E 1.163(History e)108
+295.2 R 1.163(xpansion is performed immediately after a complete line i\
+s read, before the shell breaks it into)-.15 F -.1(wo)108 307.2 S .252
+(rds, and is performed on each line indi).1 F .251
+(vidually without taking quoting on pre)-.25 F .251
+(vious lines into account.)-.25 F(It)5.251 E(tak)108 319.2 Q .145
+(es place in tw)-.1 F 2.645(op)-.1 G 2.646(arts. The)-2.645 F .146(\214\
+rst is to determine which line from the history list to use during subs\
+titution.)2.646 F .766(The second is to select portions of that line fo\
+r inclusion into the current one.)108 331.2 R .766
+(The line selected from the)5.766 F .253(history is the)108 343.2 R/F4
+10/Times-Italic@0 SF -.15(ev)2.753 G(ent).15 E F0 2.753(,a)C .253
+(nd the portions of that line that are acted upon are)-2.753 F F4(wor)
+2.753 E(ds)-.37 E F0 5.253(.V)C(arious)-6.363 E F4(modi\214er)2.754 E(s)
+-.1 E F0 .254(are a)2.754 F -.25(va)-.2 G(il-).25 E .539
+(able to manipulate the selected w)108 355.2 R 3.039(ords. The)-.1 F
+.538(line is brok)3.038 F .538(en into w)-.1 F .538(ords in the same f)
+-.1 F .538(ashion as when reading)-.1 F .572(input, so that se)108 367.2
+R -.15(ve)-.25 G(ral).15 E F4(metac)3.072 E(har)-.15 E(acter)-.15 E F0
+.572(-separated w)B .572(ords surrounded by quotes are considered one w)
+-.1 F 3.073(ord. His-)-.1 F .356(tory e)108 379.2 R .355
+(xpansions are introduced by the appearance of the history e)-.15 F .355
+(xpansion character)-.15 F 2.855(,w)-.4 G .355(hich is)-2.855 F F2(!)
+3.688 E F0 .355(by def)3.688 F(ault.)-.1 E .79(Only backslash \()108
+391.2 R F2(\\).833 E F0 3.29(\)a).833 G .79
+(nd single quotes can quote the history e)-3.29 F .79
+(xpansion character)-.15 F 3.291(,b)-.4 G .791(ut the history e)-3.491 F
+(xpansion)-.15 E .789(character is also treated as quoted if it immedia\
+tely precedes the closing double quote in a double-quoted)108 403.2 R
+(string.)108 415.2 Q(Se)108 432 Q -.15(ve)-.25 G .03
+(ral characters inhibit history e).15 F .03
+(xpansion if found immediately follo)-.15 F .03(wing the history e)-.25
+F .03(xpansion character)-.15 F(,)-.4 E -2.15 -.25(ev e)108 444 T 3.163
+(ni).25 G 3.163(fi)-3.163 G 3.162(ti)-3.163 G 3.162(su)-3.162 G .662
+(nquoted: space, tab, ne)-3.162 F .662(wline, carriage return, and)-.25
+F F2(=)3.162 E F0 5.662(.I)C 3.162(ft)-5.662 G(he)-3.162 E F2(extglob)
+3.162 E F0 .662(shell option is enabled,)3.162 F F2(\()3.162 E F0
+(will also inhibit e)108 456 Q(xpansion.)-.15 E(Se)108 472.8 Q -.15(ve)
+-.25 G .109(ral shell options settable with the).15 F F2(shopt)2.609 E
+F0 -.2(bu)2.609 G .11(iltin may be used to tailor the beha).2 F .11
+(vior of history e)-.2 F(xpansion.)-.15 E 1.143(If the)108 484.8 R F2
+(histv)3.643 E(erify)-.1 E F0 1.143
+(shell option is enabled \(see the description of the)3.643 F F2(shopt)
+3.643 E F0 -.2(bu)3.643 G 1.143(iltin belo).2 F 1.143(w\), and)-.25 F F2
+-.18(re)3.643 G(adline).18 E F0(is)3.642 E .461(being used, history sub\
+stitutions are not immediately passed to the shell parser)108 496.8 R
+5.461(.I)-.55 G .461(nstead, the e)-5.461 F .461(xpanded line)-.15 F
+1.516(is reloaded into the)108 508.8 R F2 -.18(re)4.016 G(adline).18 E
+F0 1.516(editing b)4.016 F(uf)-.2 E 1.516
+(fer for further modi\214cation.)-.25 F(If)6.516 E F2 -.18(re)4.015 G
+(adline).18 E F0 1.515(is being used, and the)4.015 F F2(histr)108 520.8
+Q(eedit)-.18 E F0 1.202(shell option is enabled, a f)3.702 F 1.202
+(ailed history substitution will be reloaded into the)-.1 F F2 -.18(re)
+3.702 G(adline).18 E F0(editing)3.702 E -.2(bu)108 532.8 S -.25(ff).2 G
+1.161(er for correction.).25 F(The)6.161 E F2<ad70>3.661 E F0 1.161
+(option to the)3.661 F F2(history)3.661 E F0 -.2(bu)3.661 G 1.16
+(iltin command may be used to see what a history).2 F -.15(ex)108 544.8
+S .055(pansion will do before using it.).15 F(The)5.055 E F2<ad73>2.555
+E F0 .055(option to the)2.555 F F2(history)2.556 E F0 -.2(bu)2.556 G
+.056(iltin may be used to add commands to the).2 F
+(end of the history list without actually e)108 556.8 Q -.15(xe)-.15 G
+(cuting them, so that the).15 E 2.5(ya)-.15 G(re a)-2.5 E -.25(va)-.2 G
+(ilable for subsequent recall.).25 E 2.2(The shell allo)108 573.6 R 2.2
+(ws control of the v)-.25 F 2.2(arious characters used by the history e)
+-.25 F 2.2(xpansion mechanism \(see the)-.15 F 1.146(description of)108
+585.6 R F2(histchars)3.646 E F0(abo)3.646 E 1.446 -.15(ve u)-.15 H(nder)
+.15 E F2 1.146(Shell V)3.646 F(ariables)-.92 E F0 3.646(\). The)B 1.147
+(shell uses the history comment character to)3.646 F
+(mark history timestamps when writing the history \214le.)108 597.6 Q F2
+(Ev)87 614.4 Q(ent Designators)-.1 E F0 .205(An e)108 626.4 R -.15(ve)
+-.25 G .204(nt designator is a reference to a command line entry in the\
+ history list.).15 F .204(Unless the reference is abso-)5.204 F(lute, e)
+108 638.4 Q -.15(ve)-.25 G(nts are relati).15 E .3 -.15(ve t)-.25 H 2.5
+(ot).15 G(he current position in the history list.)-2.5 E F2(!)108 655.2
+Q F0 1.607(Start a history substitution, e)144 655.2 R 1.607
+(xcept when follo)-.15 F 1.607(wed by a)-.25 F F2(blank)4.107 E F0 4.107
+(,n)C -.25(ew)-4.107 G 1.608(line, carriage return, = or \().25 F
+(\(when the)144 667.2 Q F2(extglob)2.5 E F0
+(shell option is enabled using the)2.5 E F2(shopt)2.5 E F0 -.2(bu)2.5 G
+(iltin\).).2 E F2(!)108 679.2 Q F4(n)A F0(Refer to command line)144
+679.2 Q F4(n)2.5 E F0(.).24 E F2<21ad>108 691.2 Q F4(n)A F0
+(Refer to the current command minus)144 691.2 Q F4(n)2.5 E F0(.).24 E F2
+(!!)108 703.2 Q F0(Refer to the pre)144 703.2 Q(vious command.)-.25 E
+(This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 715.2 Q F4(string)
+A F0 .865(Refer to the most recent command preceding the current positi\
+on in the history list starting with)144 715.2 R F4(string)144 727.2 Q
+F0(.).22 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(54)188.455 E
+0 Cg EP
+%%Page: 55 55
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(!?)108 84 Q/F2 10/Times-Italic@0 SF(string)A F1([?])A F0 1.503(Refer\
+ to the most recent command preceding the current position in the histo\
+ry list containing)144 96 R F2(string)144 108 Q F0 5(.T).22 G
+(he trailing)-5 E F1(?)2.5 E F0(may be omitted if)2.5 E F2(string)2.84 E
+F0(is follo)2.72 E(wed immediately by a ne)-.25 E(wline.)-.25 E/F3 12
+/Times-Bold@0 SF(^)108 125 Q F2(string1)-5 I F3(^)5 I F2(string2)-5 I F3
+(^)5 I F0 .784(Quick substitution.)144 132 R .784(Repeat the pre)5.784 F
+.784(vious command, replacing)-.25 F F2(string1)3.624 E F0(with)3.283 E
+F2(string2)3.283 E F0 5.783(.E).02 G(qui)-5.783 E -.25(va)-.25 G .783
+(lent to).25 F -.74(``)144 144 S(!!:s/).74 E F2(string1)A F0(/)A F2
+(string2)A F0(/')A 2.5('\()-.74 G(see)-2.5 E F1(Modi\214ers)2.5 E F0
+(belo)2.5 E(w\).)-.25 E F1(!#)108 156 Q F0
+(The entire command line typed so f)144 156 Q(ar)-.1 E(.)-.55 E F1 -.75
+(Wo)87 172.8 S(rd Designators).75 E F0 -.8(Wo)108 184.8 S 1.313
+(rd designators are used to select desired w).8 F 1.314(ords from the e)
+-.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F1(:)3.814 E F0 1.314
+(separates the e)3.814 F -.15(ve)-.25 G 1.314(nt speci\214cation).15 F
+.53(from the w)108 196.8 R .529(ord designator)-.1 F 5.529(.I)-.55 G
+3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529
+(ord designator be)-.1 F .529(gins with a)-.15 F F1(^)3.029 E F0(,)A F1
+($)3.029 E F0(,)A F1(*)3.029 E F0(,)A F1<ad>3.029 E F0 3.029(,o)C(r)
+-3.029 E F1(%)3.029 E F0 5.529(.W)C(ords)-6.329 E 1.3
+(are numbered from the be)108 208.8 R 1.3
+(ginning of the line, with the \214rst w)-.15 F 1.301
+(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)6.301 G 1.301(rds are).8
+F(inserted into the current line separated by single spaces.)108 220.8 Q
+F1 2.5(0\()108 237.6 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 249.6 Q
+2.5(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E
+F2(n)108.36 261.6 Q F0(The)144 261.6 Q F2(n)2.5 E F0(th w)A(ord.)-.1 E
+F1(^)108 273.6 Q F0(The \214rst ar)144 273.6 Q 2.5(gument. That)-.18 F
+(is, w)2.5 E(ord 1.)-.1 E F1($)108 285.6 Q F0 .064(The last w)144 285.6
+R 2.564(ord. This)-.1 F .064(is usually the last ar)2.564 F .064
+(gument, b)-.18 F .064(ut will e)-.2 F .064(xpand to the zeroth w)-.15 F
+.063(ord if there is only)-.1 F(one w)144 297.6 Q(ord in the line.)-.1 E
+F1(%)108 309.6 Q F0(The w)144 309.6 Q(ord matched by the most recent `?)
+-.1 E F2(string)A F0(?' search.)A F2(x)108.77 321.6 Q F1<ad>A F2(y)A F0
+2.5(Ar)144 321.6 S(ange of w)-2.5 E(ords; `\255)-.1 E F2(y)A F0 2.5('a)C
+(bbre)-2.5 E(viates `0\255)-.25 E F2(y)A F0('.)A F1(*)108 333.6 Q F0
+.315(All of the w)144 333.6 R .315(ords b)-.1 F .315(ut the zeroth.)-.2
+F .315(This is a synon)5.315 F .315(ym for `)-.15 F F2(1\255$)A F0 2.815
+('. It)B .315(is not an error to use)2.815 F F1(*)2.816 E F0 .316
+(if there is)2.816 F(just one w)144 345.6 Q(ord in the e)-.1 E -.15(ve)
+-.25 G(nt; the empty string is returned in that case.).15 E F1(x*)108
+357.6 Q F0(Abbre)144 357.6 Q(viates)-.25 E F2(x\255$)2.5 E F0(.)A F1
+<78ad>108 369.6 Q F0(Abbre)144 369.6 Q(viates)-.25 E F2(x\255$)2.5 E F0
+(lik)2.5 E(e)-.1 E F1(x*)2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E
+(ord.)-.1 E(If a w)108 386.4 Q(ord designator is supplied without an e)
+-.1 E -.15(ve)-.25 G(nt speci\214cation, the pre).15 E
+(vious command is used as the e)-.25 E -.15(ve)-.25 G(nt.).15 E F1
+(Modi\214ers)87 403.2 Q F0 .184(After the optional w)108 415.2 R .184
+(ord designator)-.1 F 2.684(,t)-.4 G .183
+(here may appear a sequence of one or more of the follo)-2.684 F .183
+(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 427.2 Q F1(h)108
+444 Q F0(Remo)144 444 Q .3 -.15(ve a t)-.15 H
+(railing \214lename component, lea).15 E(ving only the head.)-.2 E F1(t)
+108 456 Q F0(Remo)144 456 Q .3 -.15(ve a)-.15 H
+(ll leading \214lename components, lea).15 E(ving the tail.)-.2 E F1(r)
+108 468 Q F0(Remo)144 468 Q .3 -.15(ve a t)-.15 H(railing suf).15 E
+(\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E
+(ving the basename.)-.2 E F1(e)108 480 Q F0(Remo)144 480 Q .3 -.15(ve a)
+-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 492 Q
+F0(Print the ne)144 492 Q 2.5(wc)-.25 G(ommand b)-2.5 E(ut do not e)-.2
+E -.15(xe)-.15 G(cute it.).15 E F1(q)108 504 Q F0
+(Quote the substituted w)144 504 Q
+(ords, escaping further substitutions.)-.1 E F1(x)108 516 Q F0
+(Quote the substituted w)144 516 Q(ords as with)-.1 E F1(q)2.5 E F0 2.5
+(,b)C(ut break into w)-2.7 E(ords at)-.1 E F1(blanks)2.5 E F0(and ne)2.5
+E(wlines.)-.25 E F1(s/)108 528 Q F2(old)A F1(/)A F2(ne)A(w)-.15 E F1(/)A
+F0(Substitute)144 540 Q F2(ne)3.081 E(w)-.15 E F0 .221
+(for the \214rst occurrence of)3.031 F F2(old)2.951 E F0 .221(in the e)
+3.491 F -.15(ve)-.25 G .221(nt line.).15 F(An)5.221 E 2.721(yd)-.15 G
+.221(elimiter can be used in place)-2.721 F .617(of /.)144 552 R .617
+(The \214nal delimiter is optional if it is the last character of the e)
+5.617 F -.15(ve)-.25 G .617(nt line.).15 F .616(The delimiter may)5.616
+F .666(be quoted in)144 564 R F2(old)3.396 E F0(and)3.936 E F2(ne)3.526
+E(w)-.15 E F0 .666(with a single backslash.)3.476 F .666
+(If & appears in)5.666 F F2(ne)3.166 E(w)-.15 E F0 3.166(,i).31 G 3.166
+(ti)-3.166 G 3.166(sr)-3.166 G .666(eplaced by)-3.166 F F2(old)3.166 E
+F0 5.666(.A).77 G .275(single backslash will quote the &.)144 576 R(If)
+5.275 E F2(old)3.004 E F0 .274(is null, it is set to the last)3.544 F F2
+(old)3.004 E F0 .274(substituted, or)3.544 F 2.774(,i)-.4 G 2.774(fn)
+-2.774 G 2.774(op)-2.774 G(re)-2.774 E(vi-)-.25 E
+(ous history substitutions took place, the last)144 588 Q F2(string)2.84
+E F0(in a)2.72 E F1(!?)2.5 E F2(string)A F1([?])A F0(search.)5 E F1(&)
+108 600 Q F0(Repeat the pre)144 600 Q(vious substitution.)-.25 E F1(g)
+108 612 Q F0 .397(Cause changes to be applied o)144 612 R -.15(ve)-.15 G
+2.897(rt).15 G .398(he entire e)-2.897 F -.15(ve)-.25 G .398(nt line.)
+.15 F .398(This is used in conjunction with `)5.398 F F1(:s)A F0 2.898
+('\()C(e.g.,)-2.898 E(`)144 624 Q F1(:gs/)A F2(old)A F1(/)A F2(ne)A(w)
+-.15 E F1(/)A F0 1.219('\) or `)B F1(:&)A F0 3.719('. If)B 1.219
+(used with `)3.719 F F1(:s)A F0 1.218(', an)B 3.718(yd)-.15 G 1.218
+(elimiter can be used in place of /, and the \214nal)-3.718 F .089
+(delimiter is optional if it is the last character of the e)144 636 R
+-.15(ve)-.25 G .09(nt line.).15 F(An)5.09 E F1(a)2.59 E F0 .09
+(may be used as a synon)2.59 F .09(ym for)-.15 F F1(g)144 648 Q F0(.)A
+F1(G)108 660 Q F0(Apply the follo)144 660 Q(wing `)-.25 E F1(s)A F0 2.5
+('m)C(odi\214er once to each w)-2.5 E(ord in the e)-.1 E -.15(ve)-.25 G
+(nt line.).15 E/F4 10.95/Times-Bold@0 SF(SHELL B)72 676.8 Q(UIL)-.11 E
+(TIN COMMANDS)-1.007 E F0 .063(Unless otherwise noted, each b)108 688.8
+R .062(uiltin command documented in this section as accepting options p\
+receded by)-.2 F F1<ad>108 700.8 Q F0(accepts)3.077 E F1<adad>3.077 E F0
+.577(to signify the end of the options.)3.077 F(The)5.577 E F1(:)3.077 E
+F0(,)A F1(true)3.077 E F0(,)A F1(false)3.077 E F0 3.077(,a)C(nd)-3.077 E
+F1(test)3.077 E F0(/)A F1([)A F0 -.2(bu)3.077 G .577
+(iltins do not accept options).2 F .462(and do not treat)108 712.8 R F1
+<adad>2.961 E F0(specially)2.961 E 5.461(.T)-.65 G(he)-5.461 E F1(exit)
+2.961 E F0(,)A F1(logout)2.961 E F0(,)A F1 -.18(re)2.961 G(tur).18 E(n)
+-.15 E F0(,)A F1(br)2.961 E(eak)-.18 E F0(,)A F1(continue)2.961 E F0(,)A
+F1(let)2.961 E F0 2.961(,a)C(nd)-2.961 E F1(shift)2.961 E F0 -.2(bu)
+2.961 G .461(iltins accept and).2 F .26(process ar)108 724.8 R .26
+(guments be)-.18 F .26(ginning with)-.15 F F1<ad>2.76 E F0 .261
+(without requiring)2.76 F F1<adad>2.761 E F0 5.261(.O)C .261(ther b)
+-5.261 F .261(uiltins that accept ar)-.2 F .261(guments b)-.18 F .261
+(ut are not)-.2 F(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(55)
+188.455 E 0 Cg EP
+%%Page: 56 56
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.154
+(speci\214ed as accepting options interpret ar)108 84 R 1.154
+(guments be)-.18 F 1.154(ginning with)-.15 F/F1 10/Times-Bold@0 SF<ad>
+3.654 E F0 1.154(as in)3.654 F -.25(va)-.4 G 1.154
+(lid options and require).25 F F1<adad>3.654 E F0(to)3.654 E(pre)108 96
+Q -.15(ve)-.25 G(nt this interpretation.).15 E F1(:)108 114 Q F0([)2.5 E
+/F2 10/Times-Italic@0 SF(ar)A(guments)-.37 E F0(])A .451(No ef)144 126 R
+.451(fect; the command does nothing be)-.25 F .452(yond e)-.15 F
+(xpanding)-.15 E F2(ar)3.282 E(guments)-.37 E F0 .452(and performing an)
+3.222 F 2.952(ys)-.15 G(peci\214ed)-2.952 E 2.5(redirections. The)144
+138 R(return status is zero.)2.5 E F1(.)110.5 154.8 Q F2(\214lename)
+6.666 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A F1(sour)108 166.8 Q(ce)
+-.18 E F2(\214lename)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A 1.02
+(Read and e)144 178.8 R -.15(xe)-.15 G 1.02(cute commands from).15 F F2
+(\214lename)5.43 E F0 1.02(in the current shell en)3.7 F 1.02
+(vironment and return the e)-.4 F(xit)-.15 E 1.458
+(status of the last command e)144 190.8 R -.15(xe)-.15 G 1.458
+(cuted from).15 F F2(\214lename)3.958 E F0 6.458(.I).18 G(f)-6.458 E F2
+(\214lename)5.868 E F0 1.458(does not contain a slash, \214le-)4.138 F
+.608(names in)144 202.8 R/F3 9/Times-Bold@0 SF -.666(PA)3.108 G(TH)-.189
+E F0 .608(are used to \214nd the directory containing)2.858 F F2
+(\214lename)3.108 E F0 5.608(.T).18 G .608(he \214le searched for in)
+-5.608 F F3 -.666(PA)3.108 G(TH)-.189 E F0 .832(need not be e)144 214.8
+R -.15(xe)-.15 G 3.332(cutable. When).15 F F1(bash)3.332 E F0 .832
+(is not in)3.332 F F2 .832(posix mode)3.332 F F0 3.332(,t)C .833
+(he current directory is searched if no)-3.332 F .982
+(\214le is found in)144 226.8 R F3 -.666(PA)3.481 G(TH)-.189 E/F4 9
+/Times-Roman@0 SF(.)A F0 .981(If the)5.481 F F1(sour)3.481 E(cepath)-.18
+E F0 .981(option to the)3.481 F F1(shopt)3.481 E F0 -.2(bu)3.481 G .981
+(iltin command is turned of).2 F .981(f, the)-.25 F F3 -.666(PA)144
+238.8 S(TH)-.189 E F0 .112(is not searched.)2.362 F .112(If an)5.112 F
+(y)-.15 E F2(ar)2.612 E(guments)-.37 E F0 .112(are supplied, the)2.612 F
+2.612(yb)-.15 G .112(ecome the positional parameters when)-2.612 F F2
+(\214lename)144 250.8 Q F0 1.697(is e)4.197 F -.15(xe)-.15 G 4.197
+(cuted. Otherwise).15 F 1.697(the positional parameters are unchanged.)
+4.197 F 1.697(If the)6.697 F F1<ad54>4.197 E F0 1.696(option is)4.197 F
+(enabled,)144 262.8 Q F1(sour)3.617 E(ce)-.18 E F0 1.117(inherits an)
+3.617 F 3.617(yt)-.15 G 1.117(rap on)-3.617 F F1(DEB)3.617 E(UG)-.1 E F0
+3.618(;i)C 3.618(fi)-3.618 G 3.618(ti)-3.618 G 3.618(sn)-3.618 G 1.118
+(ot, an)-3.618 F(y)-.15 E F1(DEB)3.618 E(UG)-.1 E F0 1.118
+(trap string is sa)3.618 F -.15(ve)-.2 G 3.618(da).15 G(nd)-3.618 E .36
+(restored around the call to)144 274.8 R F1(sour)2.86 E(ce)-.18 E F0
+2.86(,a)C(nd)-2.86 E F1(sour)2.86 E(ce)-.18 E F0 .36(unsets the)2.86 F
+F1(DEB)2.86 E(UG)-.1 E F0 .36(trap while it e)2.86 F -.15(xe)-.15 G 2.86
+(cutes. If).15 F F1<ad54>2.86 E F0(is)2.86 E 1.435
+(not set, and the sourced \214le changes the)144 286.8 R F1(DEB)3.935 E
+(UG)-.1 E F0 1.435(trap, the ne)3.935 F 3.935(wv)-.25 G 1.435
+(alue is retained when)-4.185 F F1(sour)3.935 E(ce)-.18 E F0 3.763
+(completes. The)144 298.8 R 1.262
+(return status is the status of the last command e)3.763 F 1.262
+(xited within the script \(0 if no)-.15 F(commands are e)144 310.8 Q
+-.15(xe)-.15 G(cuted\), and f).15 E(alse if)-.1 E F2(\214lename)4.41 E
+F0(is not found or cannot be read.)2.68 E F1(alias)108 327.6 Q F0([)2.5
+E F1<ad70>A F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C
+(..])-2.5 E F1(Alias)144 339.6 Q F0 2.724(with no ar)5.224 F 2.724
+(guments or with the)-.18 F F1<ad70>5.224 E F0 2.724
+(option prints the list of aliases in the form)5.224 F F1(alias)5.225 E
+F2(name)144 351.6 Q F0(=)A F2(value)A F0 .58(on standard output.)3.08 F
+.58(When ar)5.58 F .58
+(guments are supplied, an alias is de\214ned for each)-.18 F F2(name)
+3.08 E F0(whose)144 363.6 Q F2(value)2.508 E F0 .009(is gi)2.508 F -.15
+(ve)-.25 G 2.509(n. A).15 F .009(trailing space in)2.509 F F2(value)
+2.509 E F0 .009(causes the ne)2.509 F .009(xt w)-.15 F .009
+(ord to be check)-.1 F .009(ed for alias substi-)-.1 F .579
+(tution when the alias is e)144 375.6 R 3.079(xpanded. F)-.15 F .579
+(or each)-.15 F F2(name)3.079 E F0 .579(in the ar)3.079 F .579
+(gument list for which no)-.18 F F2(value)3.079 E F0 .578(is sup-)3.078
+F 1.313(plied, the name and v)144 387.6 R 1.314
+(alue of the alias is printed.)-.25 F F1(Alias)6.314 E F0 1.314
+(returns true unless a)3.814 F F2(name)3.814 E F0 1.314(is gi)3.814 F
+-.15(ve)-.25 G 3.814(nf).15 G(or)-3.814 E
+(which no alias has been de\214ned.)144 399.6 Q F1(bg)108 416.4 Q F0([)
+2.5 E F2(jobspec)A F0(...])2.5 E .745(Resume each suspended job)144
+428.4 R F2(jobspec)3.245 E F0 .745
+(in the background, as if it had been started with)3.245 F F1(&)3.244 E
+F0 5.744(.I)C(f)-5.744 E F2(job-)4.984 E(spec)144 440.4 Q F0 .671
+(is not present, the shell')3.481 F 3.171(sn)-.55 G .672(otion of the)
+-3.171 F F2(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F1
+(bg)5.672 E F2(jobspec)4.912 E F0 .672(returns 0 unless run)3.482 F .419
+(when job control is disabled or)144 452.4 R 2.919(,w)-.4 G .419
+(hen run with job control enabled, an)-2.919 F 2.918(ys)-.15 G
+(peci\214ed)-2.918 E F2(jobspec)2.918 E F0 -.1(wa)2.918 G 2.918(sn).1 G
+(ot)-2.918 E(found or w)144 464.4 Q(as started without job control.)-.1
+E F1(bind)108 481.2 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)2.5 G(ymap)-.2 E F0
+2.5(][)C F1(\255lpsvPSVX)-2.5 E F0(])A F1(bind)108 493.2 Q F0([)2.5 E F1
+<ad6d>A F2 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F1<ad71>-2.5 E F2
+(function)2.5 E F0 2.5(][)C F1<ad75>-2.5 E F2(function)2.5 E F0 2.5(][)C
+F1<ad72>-2.5 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(])A F1(bind)108 505.2 Q F0
+([)2.5 E F1<ad6d>A F2 -.1(ke)2.5 G(ymap)-.2 E F0(])A F1<ad66>2.5 E F2
+(\214lename)2.5 E F1(bind)108 517.2 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)2.5
+G(ymap)-.2 E F0(])A F1<ad78>2.5 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2
+(shell\255command)A F1(bind)108 529.2 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)
+2.5 G(ymap)-.2 E F0(])A F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2
+(function\255name)A F1(bind)108 541.2 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)
+2.5 G(ymap)-.2 E F0(])A F2 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F2 -.37(re)C
+(adline\255command).37 E F0 .238(Display current)144 553.2 R F1 -.18(re)
+2.738 G(adline).18 E F0 -.1(ke)2.738 G 2.738(ya)-.05 G .239
+(nd function bindings, bind a k)-2.738 F .539 -.15(ey s)-.1 H .239
+(equence to a).15 F F1 -.18(re)2.739 G(adline).18 E F0 .239(function or)
+2.739 F .476(macro, or set a)144 565.2 R F1 -.18(re)2.976 G(adline).18 E
+F0 -.25(va)2.976 G 2.976(riable. Each).25 F .476(non-option ar)2.976 F
+.475(gument is a command as it w)-.18 F .475(ould appear in)-.1 F F2
+(.inputr)144 577.2 Q(c)-.37 E F0 2.983(,b).31 G .484
+(ut each binding or command must be passed as a separate ar)-3.183 F
+.484(gument; e.g., '"\\C\255x\\C\255r":)-.18 F 2.5
+(re\255read\255init\255\214le'. Options,)144 589.2 R(if supplied, ha)2.5
+E .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad6d>144
+601.2 Q F2 -.1(ke)2.5 G(ymap)-.2 E F0(Use)180 613.2 Q F2 -.1(ke)5.159 G
+(ymap)-.2 E F0 2.659(as the k)5.349 F -.15(ey)-.1 G 2.658(map to be af)
+.15 F 2.658(fected by the subsequent bindings.)-.25 F(Acceptable)7.658 E
+F2 -.1(ke)180 625.2 S(ymap)-.2 E F0 3.192(names are)5.882 F F2 3.192
+(emacs, emacs\255standar)5.692 F 3.193
+(d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E
+(vi\255command)180 637.2 Q F0 4.114(,a)C(nd)-4.114 E F2(vi\255insert)
+4.114 E F0(.).68 E F2(vi)6.614 E F0 1.613(is equi)4.114 F -.25(va)-.25 G
+1.613(lent to).25 F F2(vi\255command)4.113 E F0(\()4.113 E F2(vi\255mo)A
+(ve)-.1 E F0 1.613(is also a syn-)4.113 F(on)180 649.2 Q(ym\);)-.15 E F2
+(emacs)2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F2
+(emacs\255standar)2.5 E(d)-.37 E F0(.)A F1<ad6c>144 661.2 Q F0
+(List the names of all)180 661.2 Q F1 -.18(re)2.5 G(adline).18 E F0
+(functions.)2.5 E F1<ad70>144 673.2 Q F0(Display)180 673.2 Q F1 -.18(re)
+2.5 G(adline).18 E F0(function names and bindings in such a w)2.5 E
+(ay that the)-.1 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1<ad50>144 685.2
+Q F0(List current)180 685.2 Q F1 -.18(re)2.5 G(adline).18 E F0
+(function names and bindings.)2.5 E F1<ad73>144 697.2 Q F0(Display)180
+697.2 Q F1 -.18(re)3.655 G(adline).18 E F0 -.1(ke)3.655 G 3.655(ys)-.05
+G 1.155(equences bound to macros and the strings the)-3.655 F 3.655(yo)
+-.15 G 1.155(utput in such a)-3.655 F -.1(wa)180 709.2 S 2.5(yt).1 G
+(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E(GNU Bash 5.0)72 768
+Q(2018 December 7)139.295 E(56)188.455 E 0 Cg EP
+%%Page: 57 57
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF<ad53>144 84 Q F0(Display)180 84 Q F1 -.18(re)2.5 G(adline).18 E F0
+-.1(ke)2.5 G 2.5(ys)-.05 G(equences bound to macros and the strings the)
+-2.5 E 2.5(yo)-.15 G(utput.)-2.5 E F1<ad76>144 96 Q F0(Display)180 96 Q
+F1 -.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E
+(alues in such a w)-.25 E(ay that the)-.1 E 2.5(yc)-.15 G
+(an be re-read.)-2.5 E F1<ad56>144 108 Q F0(List current)180 108 Q F1
+-.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E
+(alues.)-.25 E F1<ad66>144 120 Q/F2 10/Times-Italic@0 SF(\214lename)2.5
+E F0(Read k)180 132 Q .3 -.15(ey b)-.1 H(indings from).15 E F2
+(\214lename)2.5 E F0(.)A F1<ad71>144 144 Q F2(function)2.5 E F0
+(Query about which k)180 156 Q -.15(ey)-.1 G 2.5(si).15 G -1.9 -.4(nv o)
+-2.5 H .2 -.1(ke t).4 H(he named).1 E F2(function)2.5 E F0(.)A F1<ad75>
+144 168 Q F2(function)2.5 E F0(Unbind all k)180 180 Q -.15(ey)-.1 G 2.5
+(sb).15 G(ound to the named)-2.5 E F2(function)2.5 E F0(.)A F1<ad72>144
+192 Q F2 -.1(ke)2.5 G(yseq)-.2 E F0(Remo)180 204 Q .3 -.15(ve a)-.15 H
+.3 -.15(ny c).15 H(urrent binding for).15 E F2 -.1(ke)2.5 G(yseq)-.2 E
+F0(.)A F1<ad78>144 216 Q F2 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F2
+(shell\255command)A F0(Cause)180 228 Q F2(shell\255command)4.325 E F0
+1.825(to be e)4.325 F -.15(xe)-.15 G 1.825(cuted whene).15 F -.15(ve)
+-.25 G(r).15 E F2 -.1(ke)4.325 G(yseq)-.2 E F0 1.825(is entered.)4.325 F
+(When)6.825 E F2(shell\255com-)4.325 E(mand)180 240 Q F0 1.764(is e)
+4.264 F -.15(xe)-.15 G 1.765(cuted, the shell sets the).15 F/F3 9
+/Times-Bold@0 SF(READLINE_LINE)4.265 E F0 -.25(va)4.015 G 1.765
+(riable to the contents of the).25 F F1 -.18(re)180 252 S(adline).18 E
+F0 1.353(line b)3.853 F(uf)-.2 E 1.353(fer and the)-.25 F F3
+(READLINE_POINT)3.853 E F0 -.25(va)3.603 G 1.353
+(riable to the current location of the).25 F 2.011(insertion point.)180
+264 R 2.011(If the e)7.011 F -.15(xe)-.15 G 2.011
+(cuted command changes the v).15 F 2.011(alue of)-.25 F F3
+(READLINE_LINE)4.512 E F0(or)4.262 E F3(READLINE_POINT)180 276 Q/F4 9
+/Times-Roman@0 SF(,)A F0(those ne)2.25 E 2.5(wv)-.25 G
+(alues will be re\215ected in the editing state.)-2.75 E F1<ad58>144 288
+Q F0 .83(List all k)180 288 R 1.13 -.15(ey s)-.1 H .829
+(equences bound to shell commands and the associated commands in a for)
+.15 F(-)-.2 E(mat that can be reused as input.)180 300 Q(The return v)
+144 316.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15
+(ve)-.25 G 2.5(no).15 G 2.5(ra)-2.5 G 2.5(ne)-2.5 G(rror occurred.)-2.5
+E F1(br)108 333.6 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .054
+(Exit from within a)144 345.6 R F1 -.25(fo)2.554 G(r).25 E F0(,)A F1
+(while)2.554 E F0(,)A F1(until)2.555 E F0 2.555(,o)C(r)-2.555 E F1
+(select)2.555 E F0 2.555(loop. If)2.555 F F2(n)2.555 E F0 .055
+(is speci\214ed, break)2.555 F F2(n)2.555 E F0(le)2.555 E -.15(ve)-.25 G
+(ls.).15 E F2(n)5.415 E F0 .055(must be)2.795 F/F5 10/Symbol SF<b3>2.555
+E F0(1.)2.555 E(If)144 357.6 Q F2(n)3.075 E F0 .215(is greater than the\
+ number of enclosing loops, all enclosing loops are e)2.955 F 2.714
+(xited. The)-.15 F .214(return v)2.714 F(alue)-.25 E(is 0 unless)144
+369.6 Q F2(n)2.5 E F0(is not greater than or equal to 1.)2.5 E F1 -.2
+(bu)108 386.4 S(iltin).2 E F2(shell\255b)2.5 E(uiltin)-.2 E F0([)2.5 E
+F2(ar)A(guments)-.37 E F0(])A(Ex)144 398.4 Q .792
+(ecute the speci\214ed shell b)-.15 F .792(uiltin, passing it)-.2 F F2
+(ar)3.293 E(guments)-.37 E F0 3.293(,a).27 G .793(nd return its e)-3.293
+F .793(xit status.)-.15 F .793(This is useful)5.793 F .616
+(when de\214ning a function whose name is the same as a shell b)144
+410.4 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144
+422.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F1(cd)3.07 E F0
+-.2(bu)3.07 G .57(iltin is commonly rede\214ned this w).2 F(ay)-.1 E
+5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 434.4 Q(alse if)-.1
+E F2(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E
+(uiltin command.)-.2 E F1(caller)108 451.2 Q F0([)2.5 E F2 -.2(ex)C(pr)
+.2 E F0(])A .254(Returns the conte)144 463.2 R .254(xt of an)-.15 F
+2.754(ya)-.15 G(cti)-2.754 E .554 -.15(ve s)-.25 H .254
+(ubroutine call \(a shell function or a script e).15 F -.15(xe)-.15 G
+.254(cuted with the).15 F F1(.)2.753 E F0(or)2.753 E F1(sour)144 475.2 Q
+(ce)-.18 E F0 -.2(bu)2.824 G 2.824(iltins\). W).2 F(ithout)-.4 E F2 -.2
+(ex)2.824 G(pr).2 E F0(,)A F1(caller)2.824 E F0 .324
+(displays the line number and source \214lename of the current)2.824 F
+.254(subroutine call.)144 487.2 R .254(If a non-ne)5.254 F -.05(ga)-.15
+G(ti).05 E .554 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15
+F F2 -.2(ex)2.753 G(pr).2 E F0(,)A F1(caller)2.753 E F0 .253
+(displays the line number)2.753 F 2.753(,s)-.4 G(ub-)-2.753 E 1.327(rou\
+tine name, and source \214le corresponding to that position in the curr\
+ent e)144 499.2 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001
+(This e)144 511.2 R .001(xtra information may be used, for e)-.15 F .001
+(xample, to print a stack trace.)-.15 F(The current frame is frame)5 E
+3.019(0. The)144 523.2 R .519(return v)3.019 F .519
+(alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .52
+(cuting a subroutine call or).15 F F2 -.2(ex)3.02 G(pr).2 E F0 .52
+(does not corre-)3.02 F(spond to a v)144 535.2 Q
+(alid position in the call stack.)-.25 E F1(cd)108 552 Q F0([)2.5 E F1
+<ad4c>A F0(|[)A F1<ad50>A F0([)2.5 E F1<ad65>A F0(]] [\255@]] [)A F2
+(dir)A F0(])A .322(Change the current directory to)144 564 R F2(dir)
+2.822 E F0 5.322(.i)C(f)-5.322 E F2(dir)2.822 E F0 .321
+(is not supplied, the v)2.822 F .321(alue of the)-.25 F F3(HOME)2.821 E
+F0 .321(shell v)2.571 F .321(ariable is)-.25 F 1.035(the def)144 576 R
+3.535(ault. An)-.1 F 3.535(ya)-.15 G 1.035(dditional ar)-3.535 F 1.035
+(guments follo)-.18 F(wing)-.25 E F2(dir)3.535 E F0 1.035(are ignored.)
+3.535 F 1.036(The v)6.035 F(ariable)-.25 E F3(CDP)3.536 E -.855(AT)-.666
+G(H).855 E F0(de\214nes)3.286 E .85
+(the search path for the directory containing)144 588 R F2(dir)3.35 E F0
+3.35(:e).73 G .849(ach directory name in)-3.35 F F3(CDP)3.349 E -.855
+(AT)-.666 G(H).855 E F0 .849(is searched for)3.099 F F2(dir)144 600 Q F0
+5.664(.A)C(lternati)-5.664 E .964 -.15(ve d)-.25 H .665
+(irectory names in).15 F F3(CDP)3.165 E -.855(AT)-.666 G(H).855 E F0
+.665(are separated by a colon \(:\).)2.915 F 3.165(An)5.665 G .665
+(ull directory name)-3.165 F(in)144 612 Q F3(CDP)4.163 E -.855(AT)-.666
+G(H).855 E F0 1.663(is the same as the current directory)3.913 F 4.162
+(,i)-.65 G 1.662(.e., `)-4.162 F(`)-.74 E F1(.)A F0 -.74('')C 6.662(.I)
+.74 G(f)-6.662 E F2(dir)4.512 E F0(be)4.892 E 1.662
+(gins with a slash \(/\), then)-.15 F F3(CDP)144 624 Q -.855(AT)-.666 G
+(H).855 E F0 .19(is not used.)2.44 F(The)5.191 E F1<ad50>2.691 E F0 .191
+(option causes)2.691 F F1(cd)2.691 E F0 .191(to use the ph)2.691 F .191
+(ysical directory structure by resolving)-.05 F 1.12
+(symbolic links while tra)144 636 R -.15(ve)-.2 G(rsing).15 E F2(dir)
+3.62 E F0 1.12(and before processing instances of)3.62 F F2(..)3.62 E F0
+(in)3.62 E F2(dir)3.62 E F0 1.12(\(see also the)3.62 F F1<ad50>3.62 E F0
+.395(option to the)144 648 R F1(set)2.895 E F0 -.2(bu)2.895 G .395
+(iltin command\); the).2 F F1<ad4c>2.895 E F0 .395
+(option forces symbolic links to be follo)2.895 F .395(wed by resolv-)
+-.25 F .444(ing the link after processing instances of)144 660 R F2(..)
+2.943 E F0(in)2.943 E F2(dir)2.943 E F0 5.443(.I)C(f)-5.443 E F2(..)
+2.943 E F0 .443(appears in)2.943 F F2(dir)2.943 E F0 2.943(,i)C 2.943
+(ti)-2.943 G 2.943(sp)-2.943 G .443(rocessed by remo)-2.943 F(ving)-.15
+E .744(the immediately pre)144 672 R .744(vious pathname component from)
+-.25 F F2(dir)3.244 E F0 3.244(,b)C .744(ack to a slash or the be)-3.244
+F .744(ginning of)-.15 F F2(dir)3.244 E F0(.)A 1.466(If the)144 684 R F1
+<ad65>3.966 E F0 1.466(option is supplied with)3.966 F F1<ad50>3.965 E
+F0 3.965(,a)C 1.465(nd the current w)-3.965 F 1.465
+(orking directory cannot be successfully)-.1 F .467
+(determined after a successful directory change,)144 696 R F1(cd)2.968 E
+F0 .468(will return an unsuccessful status.)2.968 F .468(On systems)
+5.468 F .337(that support it, the)144 708 R F1<ad40>2.837 E F0 .336
+(option presents the e)2.836 F .336(xtended attrib)-.15 F .336
+(utes associated with a \214le as a directory)-.2 F(.)-.65 E .71(An ar)
+144 720 R .71(gument of)-.18 F F1<ad>3.21 E F0 .71(is con)3.21 F -.15
+(ve)-.4 G .71(rted to).15 F F3($OLDPWD)3.21 E F0 .71
+(before the directory change is attempted.)2.96 F .71(If a non-)5.71 F
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(57)188.455 E 0 Cg EP
+%%Page: 58 58
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .107
+(empty directory name from)144 84 R/F1 9/Times-Bold@0 SF(CDP)2.607 E
+-.855(AT)-.666 G(H).855 E F0 .107(is used, or if)2.357 F/F2 10
+/Times-Bold@0 SF<ad>2.607 E F0 .106(is the \214rst ar)2.607 F .106
+(gument, and the directory change)-.18 F .038
+(is successful, the absolute pathname of the ne)144 96 R 2.538(ww)-.25 G
+.038(orking directory is written to the standard output.)-2.638 F
+(The return v)144 108 Q(alue is true if the directory w)-.25 E
+(as successfully changed; f)-.1 E(alse otherwise.)-.1 E F2(command)108
+124.8 Q F0([)2.5 E F2(\255pVv)A F0(])A/F3 10/Times-Italic@0 SF(command)
+2.5 E F0([)2.5 E F3(ar)A(g)-.37 E F0(...])2.5 E(Run)144 136.8 Q F3
+(command)2.765 E F0(with)3.335 E F3(ar)2.895 E(gs)-.37 E F0 .065
+(suppressing the normal shell function lookup.)2.835 F .064(Only b)5.064
+F .064(uiltin commands or)-.2 F .501(commands found in the)144 148.8 R
+F1 -.666(PA)3.001 G(TH)-.189 E F0 .502(are e)2.751 F -.15(xe)-.15 G
+3.002(cuted. If).15 F(the)3.002 E F2<ad70>3.002 E F0 .502(option is gi)
+3.002 F -.15(ve)-.25 G .502(n, the search for).15 F F3(command)3.202 E
+F0(is)3.772 E .4(performed using a def)144 160.8 R .4(ault v)-.1 F .4
+(alue for)-.25 F F1 -.666(PA)2.9 G(TH)-.189 E F0 .399
+(that is guaranteed to \214nd all of the standard utilities.)2.649 F(If)
+5.399 E .174(either the)144 172.8 R F2<ad56>2.674 E F0(or)2.674 E F2
+<ad76>2.674 E F0 .175(option is supplied, a description of)2.674 F F3
+(command)2.875 E F0 .175(is printed.)3.445 F(The)5.175 E F2<ad76>2.675 E
+F0 .175(option causes)2.675 F 3.318(as)144 184.8 S .818(ingle w)-3.318 F
+.817(ord indicating the command or \214lename used to in)-.1 F -.2(vo)
+-.4 G -.1(ke).2 G F3(command)3.617 E F0 .817(to be displayed; the)4.087
+F F2<ad56>144 196.8 Q F0 .249(option produces a more v)2.749 F .249
+(erbose description.)-.15 F .249(If the)5.249 F F2<ad56>2.749 E F0(or)
+2.749 E F2<ad76>2.75 E F0 .25(option is supplied, the e)2.75 F .25
+(xit status)-.15 F 1.005(is 0 if)144 208.8 R F3(command)3.705 E F0 -.1
+(wa)4.275 G 3.505(sf).1 G 1.005(ound, and 1 if not.)-3.505 F 1.004
+(If neither option is supplied and an error occurred or)6.005 F F3
+(command)144.2 220.8 Q F0 1.598(cannot be found, the e)4.868 F 1.599
+(xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.599
+(xit status of the)-.15 F F2(command)4.099 E F0 -.2(bu)144 232.8 S
+(iltin is the e).2 E(xit status of)-.15 E F3(command)2.5 E F0(.).77 E F2
+(compgen)108 249.6 Q F0([)2.5 E F3(option)A F0 2.5(][)C F3(wor)-2.5 E(d)
+-.37 E F0(])A .013(Generate possible completion matches for)144 261.6 R
+F3(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F3(option)2.513
+E F0 .013(s, which may be an)B 2.512(yo)-.15 G(ption)-2.512 E .981
+(accepted by the)144 273.6 R F2(complete)3.481 E F0 -.2(bu)3.481 G .981
+(iltin with the e).2 F .981(xception of)-.15 F F2<ad70>3.481 E F0(and)
+3.481 E F2<ad72>3.481 E F0 3.481(,a)C .982(nd write the matches to the)
+-3.481 F .131(standard output.)144 285.6 R .131(When using the)5.131 F
+F2<ad46>2.631 E F0(or)2.631 E F2<ad43>2.631 E F0 .131(options, the v)
+2.631 F .13(arious shell v)-.25 F .13(ariables set by the program-)-.25
+F(mable completion f)144 297.6 Q(acilities, while a)-.1 E -.25(va)-.2 G
+(ilable, will not ha).25 E .3 -.15(ve u)-.2 H(seful v).15 E(alues.)-.25
+E .352(The matches will be generated in the same w)144 321.6 R .352
+(ay as if the programmable completion code had gen-)-.1 F .02(erated th\
+em directly from a completion speci\214cation with the same \215ags.)144
+333.6 R(If)5.02 E F3(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only)
+2.52 F(those completions matching)144 345.6 Q F3(wor)2.5 E(d)-.37 E F0
+(will be displayed.)2.5 E(The return v)144 369.6 Q
+(alue is true unless an in)-.25 E -.25(va)-.4 G
+(lid option is supplied, or no matches were generated.).25 E F2
+(complete)108 386.4 Q F0([)3.404 E F2(\255abcdefgjksuv)A F0 3.404(][)C
+F2<ad6f>-3.404 E F3(comp-option)3.404 E F0 3.404(][)C F2(\255DEI)-3.404
+E F0 3.404(][)C F2<ad41>-3.404 E F3(action)3.404 E F0 3.404(][)C F2
+<ad47>-3.404 E F3(globpat)3.404 E F0 3.404(][)C F2<ad57>-3.404 E F3(wor)
+3.404 E(dlist)-.37 E F0 3.405(][)C F2<ad46>-3.405 E F3(func-)3.405 E
+(tion)108 398.4 Q F0 2.5(][)C F2<ad43>-2.5 E F3(command)2.5 E F0(])A([)
+144 410.4 Q F2<ad58>A F3(\214lterpat)2.5 E F0 2.5(][)C F2<ad50>-2.5 E F3
+(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F2<ad53>-2.5 E F3(suf)2.5 E<8c78>
+-.18 E F0(])A F3(name)2.5 E F0([)2.5 E F3(name ...)A F0(])A F2
+(complete \255pr)108 422.4 Q F0([)2.5 E F2(\255DEI)A F0 2.5(][)C F3
+(name)-2.5 E F0(...])2.5 E .634(Specify ho)144 434.4 R 3.134(wa)-.25 G
+-.18(rg)-3.134 G .634(uments to each).18 F F3(name)3.134 E F0 .634
+(should be completed.)3.134 F .633(If the)5.634 F F2<ad70>3.133 E F0
+.633(option is supplied, or if no)3.133 F .139(options are supplied, e)
+144 446.4 R .139(xisting completion speci\214cations are printed in a w)
+-.15 F .14(ay that allo)-.1 F .14(ws them to be)-.25 F .31
+(reused as input.)144 458.4 R(The)5.31 E F2<ad72>2.81 E F0 .31
+(option remo)2.81 F -.15(ve)-.15 G 2.81(sac).15 G .31
+(ompletion speci\214cation for each)-2.81 F F3(name)2.81 E F0 2.81(,o)C
+1.11 -.4(r, i)-2.81 H 2.81(fn).4 G(o)-2.81 E F3(name)2.81 E F0(s)A 1.207
+(are supplied, all completion speci\214cations.)144 470.4 R(The)6.207 E
+F2<ad44>3.707 E F0 1.208(option indicates that other supplied options)
+3.708 F .5(and actions should apply to the `)144 482.4 R(`def)-.74 E
+(ault')-.1 E 3('c)-.74 G .5
+(ommand completion; that is, completion attempted on)-3 F 3.455(ac)144
+494.4 S .955(ommand for which no completion has pre)-3.455 F .955
+(viously been de\214ned.)-.25 F(The)5.955 E F2<ad45>3.455 E F0 .955
+(option indicates that)3.455 F .876
+(other supplied options and actions should apply to `)144 506.4 R
+(`empty')-.74 E 3.376('c)-.74 G .876(ommand completion; that is, com-)
+-3.376 F .447(pletion attempted on a blank line.)144 518.4 R(The)5.447 E
+F2<ad49>2.947 E F0 .448
+(option indicates that other supplied options and actions)2.947 F 1.335
+(should apply to completion on the inital non-assignment w)144 530.4 R
+1.334(ord on the line, or after a command)-.1 F .43(delimiter such as)
+144 542.4 R F2(;)2.93 E F0(or)2.93 E F2(|)2.93 E F0 2.93(,w)C .431
+(hich is usually command name completion.)-2.93 F .431
+(If multiple options are sup-)5.431 F .708(plied, the)144 554.4 R F2
+<ad44>3.208 E F0 .708(option tak)3.208 F .708(es precedence o)-.1 F -.15
+(ve)-.15 G(r).15 E F2<ad45>3.208 E F0 3.208(,a)C .708(nd both tak)-3.208
+F 3.208(ep)-.1 G .707(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F2
+<ad49>3.207 E F0 5.707(.I)C 3.207(fa)-5.707 G 1.007 -.15(ny o)-3.207 H
+(f).15 E F2<ad44>3.207 E F0(,)A F2<ad45>144 566.4 Q F0 2.603(,o)C(r)
+-2.603 E F2<ad49>2.603 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15
+G(ther)-2.603 E F3(name)2.603 E F0(ar)2.603 E .103
+(guments are ignored; these completions only apply to the)-.18 F
+(case speci\214ed by the option.)144 578.4 Q 1.438
+(The process of applying these completion speci\214cations when w)144
+602.4 R 1.437(ord completion is attempted is)-.1 F(described abo)144
+614.4 Q .3 -.15(ve u)-.15 H(nder).15 E F2(Pr)2.5 E
+(ogrammable Completion)-.18 E F0(.)A .555
+(Other options, if speci\214ed, ha)144 638.4 R .855 -.15(ve t)-.2 H .555
+(he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F .555
+(guments to the)-.18 F F2<ad47>3.056 E F0(,)A F2<ad57>3.056 E F0 3.056
+(,a)C(nd)-3.056 E F2<ad58>3.056 E F0 .723(options \(and, if necessary)
+144 650.4 R 3.223(,t)-.65 G(he)-3.223 E F2<ad50>3.223 E F0(and)3.223 E
+F2<ad53>3.223 E F0 .722
+(options\) should be quoted to protect them from e)3.223 F(xpan-)-.15 E
+(sion before the)144 662.4 Q F2(complete)2.5 E F0 -.2(bu)2.5 G
+(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F2<ad6f>144 674.4 Q
+F3(comp-option)2.5 E F0(The)184 686.4 Q F3(comp-option)2.79 E F0 .291
+(controls se)2.791 F -.15(ve)-.25 G .291(ral aspects of the compspec')
+.15 F 2.791(sb)-.55 G(eha)-2.791 E .291(vior be)-.2 F .291
+(yond the simple)-.15 F(generation of completions.)184 698.4 Q F3
+(comp-option)5 E F0(may be one of:)2.5 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(58)188.455 E 0 Cg EP
+%%Page: 59 59
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(bashdefault)184 84 Q F0 .281(Perform the rest of the def)224 96 R
+(ault)-.1 E F1(bash)2.781 E F0 .281
+(completions if the compspec generates no)2.781 F(matches.)224 108 Q F1
+(default)184 120 Q F0 2.875(Use readline')224 120 R 5.375(sd)-.55 G(ef)
+-5.375 E 2.876(ault \214lename completion if the compspec generates no)
+-.1 F(matches.)224 132 Q F1(dir)184 144 Q(names)-.15 E F0(Perform direc\
+tory name completion if the compspec generates no matches.)224 156 Q F1
+(\214lenames)184 168 Q F0 -.7(Te)224 180 S .137(ll readline that the co\
+mpspec generates \214lenames, so it can perform an).7 F 2.636<798c>-.15
+G(le-)-2.636 E .134(name\255speci\214c processing \(lik)224 192 R 2.634
+(ea)-.1 G .134(dding a slash to directory names, quoting spe-)-2.634 F
+.45(cial characters, or suppressing trailing spaces\).)224 204 R .45
+(Intended to be used with shell)5.45 F(functions.)224 216 Q F1(noquote)
+184 228 Q F0 -.7(Te)224 228 S .814
+(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F
+3.314(ya)-.15 G .815(re \214lenames \(quoting)-3.314 F
+(\214lenames is the def)224 240 Q(ault\).)-.1 E F1(nosort)184 252 Q F0
+-.7(Te)224 252 S(ll readline not to sort the list of possible completio\
+ns alphabetically).7 E(.)-.65 E F1(nospace)184 264 Q F0 -.7(Te)224 264 S
+.22(ll readline not to append a space \(the def).7 F .22(ault\) to w)-.1
+F .22(ords completed at the end)-.1 F(of the line.)224 276 Q F1
+(plusdirs)184 288 Q F0 1.985(After an)224 288 R 4.485(ym)-.15 G 1.985
+(atches de\214ned by the compspec are generated, directory name)-4.485 F
+.584(completion is attempted and an)224 300 R 3.084(ym)-.15 G .584
+(atches are added to the results of the other)-3.084 F(actions.)224 312
+Q F1<ad41>144 324 Q/F2 10/Times-Italic@0 SF(action)2.5 E F0(The)184 336
+Q F2(action)2.5 E F0(may be one of the follo)2.5 E
+(wing to generate a list of possible completions:)-.25 E F1(alias)184
+348 Q F0(Alias names.)224 348 Q(May also be speci\214ed as)5 E F1<ad61>
+2.5 E F0(.)A F1(arrayv)184 360 Q(ar)-.1 E F0(Array v)224 372 Q
+(ariable names.)-.25 E F1(binding)184 384 Q(Readline)224 384 Q F0 -.1
+(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 396 S(iltin)
+.2 E F0(Names of shell b)224 396 Q(uiltin commands.)-.2 E
+(May also be speci\214ed as)5 E F1<ad62>2.5 E F0(.)A F1(command)184 408
+Q F0(Command names.)224 420 Q(May also be speci\214ed as)5 E F1<ad63>2.5
+E F0(.)A F1(dir)184 432 Q(ectory)-.18 E F0(Directory names.)224 444 Q
+(May also be speci\214ed as)5 E F1<ad64>2.5 E F0(.)A F1(disabled)184 456
+Q F0(Names of disabled shell b)224 468 Q(uiltins.)-.2 E F1(enabled)184
+480 Q F0(Names of enabled shell b)224 480 Q(uiltins.)-.2 E F1(export)184
+492 Q F0(Names of e)224 492 Q(xported shell v)-.15 E 2.5(ariables. May)
+-.25 F(also be speci\214ed as)2.5 E F1<ad65>2.5 E F0(.)A F1(\214le)184
+504 Q F0(File names.)224 504 Q(May also be speci\214ed as)5 E F1<ad66>
+2.5 E F0(.)A F1(function)184 516 Q F0(Names of shell functions.)224 528
+Q F1(gr)184 540 Q(oup)-.18 E F0(Group names.)224 540 Q
+(May also be speci\214ed as)5 E F1<ad67>2.5 E F0(.)A F1(helptopic)184
+552 Q F0(Help topics as accepted by the)224 564 Q F1(help)2.5 E F0 -.2
+(bu)2.5 G(iltin.).2 E F1(hostname)184 576 Q F0(Hostnames, as tak)224 588
+Q(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF
+(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 600 Q F0
+(Job names, if job control is acti)224 600 Q -.15(ve)-.25 G 5(.M).15 G
+(ay also be speci\214ed as)-5 E F1<ad6a>2.5 E F0(.)A F1 -.1(ke)184 612 S
+(yw).1 E(ord)-.1 E F0(Shell reserv)224 624 Q(ed w)-.15 E 2.5(ords. May)
+-.1 F(also be speci\214ed as)2.5 E F1<ad6b>2.5 E F0(.)A F1(running)184
+636 Q F0(Names of running jobs, if job control is acti)224 636 Q -.15
+(ve)-.25 G(.).15 E F1(ser)184 648 Q(vice)-.1 E F0(Service names.)224 648
+Q(May also be speci\214ed as)5 E F1<ad73>2.5 E F0(.)A F1(setopt)184 660
+Q F0 -1.11(Va)224 660 S(lid ar)1.11 E(guments for the)-.18 E F1<ad6f>2.5
+E F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1
+(shopt)184 672 Q F0(Shell option names as accepted by the)224 672 Q F1
+(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 684 Q F0
+(Signal names.)224 684 Q F1(stopped)184 696 Q F0
+(Names of stopped jobs, if job control is acti)224 696 Q -.15(ve)-.25 G
+(.).15 E F1(user)184 708 Q F0(User names.)224 708 Q
+(May also be speci\214ed as)5 E F1<ad75>2.5 E F0(.)A(GNU Bash 5.0)72 768
+Q(2018 December 7)139.295 E(59)188.455 E 0 Cg EP
+%%Page: 60 60
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF -.1(va)184 84 S(riable).1 E F0(Names of all shell v)224 84 Q 2.5
+(ariables. May)-.25 F(also be speci\214ed as)2.5 E F1<ad76>2.5 E F0(.)A
+F1<ad43>144 96 Q/F2 10/Times-Italic@0 SF(command)2.5 E(command)184 108 Q
+F0 1.055(is e)3.555 F -.15(xe)-.15 G 1.055(cuted in a subshell en).15 F
+1.056(vironment, and its output is used as the possible)-.4 F
+(completions.)184 120 Q F1<ad46>144 132 Q F2(function)2.5 E F0 .114
+(The shell function)184 144 R F2(function)2.614 E F0 .114(is e)2.614 F
+-.15(xe)-.15 G .114(cuted in the current shell en).15 F 2.614
+(vironment. When)-.4 F .113(the func-)2.613 F .816(tion is e)184 156 R
+-.15(xe)-.15 G .816(cuted, the \214rst ar).15 F .816(gument \()-.18 F F1
+($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .817
+(he name of the command whose ar)-3.316 F(guments)-.18 E 1.407
+(are being completed, the second ar)184 168 R 1.407(gument \()-.18 F F1
+($2)A F0 3.907(\)i)C 3.907(st)-3.907 G 1.407(he w)-3.907 F 1.407
+(ord being completed, and the)-.1 F .103(third ar)184 180 R .103
+(gument \()-.18 F F1($3)A F0 2.603(\)i)C 2.603(st)-2.603 G .103(he w)
+-2.603 F .104(ord preceding the w)-.1 F .104
+(ord being completed on the current com-)-.1 F .102(mand line.)184 192 R
+.102(When it \214nishes, the possible completions are retrie)5.102 F
+-.15(ve)-.25 G 2.601(df).15 G .101(rom the v)-2.601 F .101(alue of the)
+-.25 F/F3 9/Times-Bold@0 SF(COMPREPL)184 204 Q(Y)-.828 E F0(array v)2.25
+E(ariable.)-.25 E F1<ad47>144 216 Q F2(globpat)2.5 E F0 1.007
+(The pathname e)184 228 R 1.007(xpansion pattern)-.15 F F2(globpat)3.507
+E F0 1.007(is e)3.507 F 1.008(xpanded to generate the possible comple-)
+-.15 F(tions.)184 240 Q F1<ad50>144 252 Q F2(pr)2.5 E(e\214x)-.37 E(pr)
+184 264 Q(e\214x)-.37 E F0 .535(is added at the be)3.035 F .534
+(ginning of each possible completion after all other options ha)-.15 F
+-.15(ve)-.2 G(been applied.)184 276 Q F1<ad53>144 288 Q F2(suf)2.5 E
+<8c78>-.18 E(suf)184 288 Q<8c78>-.18 E F0
+(is appended to each possible completion after all other options ha)2.5
+E .3 -.15(ve b)-.2 H(een applied.).15 E F1<ad57>144 300 Q F2(wor)2.5 E
+(dlist)-.37 E F0(The)184 312 Q F2(wor)3.639 E(dlist)-.37 E F0 1.14
+(is split using the characters in the)3.639 F F3(IFS)3.64 E F0 1.14
+(special v)3.39 F 1.14(ariable as delimiters, and)-.25 F .981
+(each resultant w)184 324 R .981(ord is e)-.1 F 3.481(xpanded. Shell)
+-.15 F .981(quoting is honored within)3.481 F F2(wor)3.481 E(dlist)-.37
+E F0 3.48(,i)C 3.48(no)-3.48 G .98(rder to)-3.48 F(pro)184 336 Q .765
+(vide a mechanism for the w)-.15 F .766
+(ords to contain shell metacharacters or characters in the)-.1 F -.25
+(va)184 348 S 1.965(lue of).25 F F3(IFS)4.465 E/F4 9/Times-Roman@0 SF(.)
+A F0 1.964
+(The possible completions are the members of the resultant list which)
+6.465 F(match the w)184 360 Q(ord being completed.)-.1 E F1<ad58>144 372
+Q F2(\214lterpat)2.5 E(\214lterpat)184 384 Q F0 .455
+(is a pattern as used for pathname e)2.955 F 2.956(xpansion. It)-.15 F
+.456(is applied to the list of possible)2.956 F 1.596
+(completions generated by the preceding options and ar)184 396 R 1.596
+(guments, and each completion)-.18 F(matching)184 408 Q F2(\214lterpat)
+3.204 E F0 .704(is remo)3.204 F -.15(ve)-.15 G 3.204(df).15 G .704
+(rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)3.204 E F0
+(in)3.204 E F2(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 G .705
+(tes the pattern;).05 F(in this case, an)184 420 Q 2.5(yc)-.15 G
+(ompletion not matching)-2.5 E F2(\214lterpat)2.5 E F0(is remo)2.5 E
+-.15(ve)-.15 G(d.).15 E .467(The return v)144 436.8 R .467
+(alue is true unless an in)-.25 F -.25(va)-.4 G .466
+(lid option is supplied, an option other than).25 F F1<ad70>2.966 E F0
+(or)2.966 E F1<ad72>2.966 E F0 .466(is sup-)2.966 F 1.361
+(plied without a)144 448.8 R F2(name)3.861 E F0(ar)3.861 E 1.361
+(gument, an attempt is made to remo)-.18 F 1.662 -.15(ve a c)-.15 H
+1.362(ompletion speci\214cation for a).15 F F2(name)144 460.8 Q F0
+(for which no speci\214cation e)2.5 E
+(xists, or an error occurs adding a completion speci\214cation.)-.15 E
+F1(compopt)108 477.6 Q F0([)2.5 E F1<ad6f>A F2(option)2.5 E F0 2.5(][)C
+F1(\255DEI)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F2(option)2.5 E F0 2.5(][)C
+F2(name)-2.5 E F0(])A .447(Modify completion options for each)144 489.6
+R F2(name)2.947 E F0 .447(according to the)2.947 F F2(option)2.947 E F0
+.447(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .725
+(completion if no)144 501.6 R F2(name)3.225 E F0 3.225(sa)C .725
+(re supplied.)-3.225 F .725(If no)5.725 F F2(option)3.225 E F0 3.225(sa)
+C .725(re gi)-3.225 F -.15(ve)-.25 G .726
+(n, display the completion options for).15 F(each)144 513.6 Q F2(name)
+3.224 E F0 .724(or the current completion.)3.224 F .724(The possible v)
+5.724 F .724(alues of)-.25 F F2(option)3.224 E F0 .724(are those v)3.224
+F .723(alid for the)-.25 F F1(com-)3.223 E(plete)144 525.6 Q F0 -.2(bu)
+2.677 G .177(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he)
+-5.178 E F1<ad44>2.678 E F0 .178
+(option indicates that other supplied options should apply to)2.678 F
+1.228(the `)144 537.6 R(`def)-.74 E(ault')-.1 E 3.728('c)-.74 G 1.228(o\
+mmand completion; that is, completion attempted on a command for which \
+no)-3.728 F 2.038(completion has pre)144 549.6 R 2.038
+(viously been de\214ned.)-.25 F(The)7.038 E F1<ad45>4.538 E F0 2.039
+(option indicates that other supplied options)4.538 F 1.539
+(should apply to `)144 561.6 R(`empty')-.74 E 4.039('c)-.74 G 1.538
+(ommand completion; that is, completion attempted on a blank line.)
+-4.039 F(The)144 573.6 Q F1<ad49>3.205 E F0 .705(option indicates that \
+other supplied options should apply to completion on the inital non-)
+3.205 F .868(assignment w)144 585.6 R .868
+(ord on the line, or after a command delimiter such as)-.1 F F1(;)3.368
+E F0(or)3.368 E F1(|)3.368 E F0 3.367(,w)C .867(hich is usually com-)
+-3.367 F(mand name completion.)144 597.6 Q 1.387(The return v)144 621.6
+R 1.387(alue is true unless an in)-.25 F -.25(va)-.4 G 1.388
+(lid option is supplied, an attempt is made to modify the).25 F
+(options for a)144 633.6 Q F2(name)2.5 E F0
+(for which no completion speci\214cation e)2.5 E
+(xists, or an output error occurs.)-.15 E F1(continue)108 650.4 Q F0([)
+2.5 E F2(n)A F0(])A 1.754(Resume the ne)144 662.4 R 1.754
+(xt iteration of the enclosing)-.15 F F1 -.25(fo)4.254 G(r).25 E F0(,)A
+F1(while)4.254 E F0(,)A F1(until)4.254 E F0 4.254(,o)C(r)-4.254 E F1
+(select)4.254 E F0 4.253(loop. If)4.254 F F2(n)4.613 E F0 1.753
+(is speci\214ed,)4.493 F 1.208(resume at the)144 674.4 R F2(n)3.709 E F0
+1.209(th enclosing loop.)B F2(n)6.569 E F0 1.209(must be)3.949 F/F5 10
+/Symbol SF<b3>3.709 E F0 3.709(1. If)3.709 F F2(n)4.069 E F0 1.209
+(is greater than the number of enclosing)3.949 F .514
+(loops, the last enclosing loop \(the `)144 686.4 R(`top-le)-.74 E -.15
+(ve)-.25 G(l').15 E 3.014('l)-.74 G .514(oop\) is resumed.)-3.014 F .513
+(The return v)5.513 F .513(alue is 0 unless)-.25 F F2(n)3.013 E F0(is)
+3.013 E(not greater than or equal to 1.)144 698.4 Q(GNU Bash 5.0)72 768
+Q(2018 December 7)139.295 E(60)188.455 E 0 Cg EP
+%%Page: 61 61
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(declar)108 84 Q(e)-.18 E F0([)2.5 E F1(\255aAfFgilnrtux)A F0 2.5(][)C
+F1<ad70>-2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(name)-2.5 E F0([=)A
+F2(value)A F0 2.5(].)C(..])-2.5 E F1(typeset)108 96 Q F0([)2.5 E F1
+(\255aAfFgilnrtux)A F0 2.5(][)C F1<ad70>-2.5 E F0 2.5(][)C F2(name)-2.5
+E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E 1.264(Declare v)144 108 R
+1.264(ariables and/or gi)-.25 F 1.564 -.15(ve t)-.25 H 1.264(hem attrib)
+.15 F 3.765(utes. If)-.2 F(no)3.765 E F2(name)3.765 E F0 3.765(sa)C
+1.265(re gi)-3.765 F -.15(ve)-.25 G 3.765(nt).15 G 1.265
+(hen display the v)-3.765 F 1.265(alues of)-.25 F -.25(va)144 120 S
+3.483(riables. The).25 F F1<ad70>3.483 E F0 .983
+(option will display the attrib)3.483 F .983(utes and v)-.2 F .982
+(alues of each)-.25 F F2(name)3.482 E F0 5.982(.W).18 G(hen)-5.982 E F1
+<ad70>3.482 E F0 .982(is used)3.482 F(with)144 132 Q F2(name)2.774 E F0
+(ar)2.774 E .274(guments, additional options, other than)-.18 F F1<ad66>
+2.775 E F0(and)2.775 E F1<ad46>2.775 E F0 2.775(,a)C .275(re ignored.)
+-2.775 F(When)5.275 E F1<ad70>2.775 E F0 .275(is supplied)2.775 F
+(without)144 144 Q F2(name)4.814 E F0(ar)4.814 E 2.314
+(guments, it will display the attrib)-.18 F 2.314(utes and v)-.2 F 2.313
+(alues of all v)-.25 F 2.313(ariables ha)-.25 F 2.313(ving the)-.2 F
+(attrib)144 156 Q 1.181(utes speci\214ed by the additional options.)-.2
+F 1.182(If no other options are supplied with)6.181 F F1<ad70>3.682 E F0
+(,)A F1(declar)3.682 E(e)-.18 E F0 .62(will display the attrib)144 168 R
+.62(utes and v)-.2 F .62(alues of all shell v)-.25 F 3.12(ariables. The)
+-.25 F F1<ad66>3.12 E F0 .62(option will restrict the display)3.12 F
+1.29(to shell functions.)144 180 R(The)6.29 E F1<ad46>3.79 E F0 1.291(o\
+ption inhibits the display of function de\214nitions; only the function)
+3.791 F .948(name and attrib)144 192 R .948(utes are printed.)-.2 F .948
+(If the)5.948 F F1(extdeb)3.448 E(ug)-.2 E F0 .948
+(shell option is enabled using)3.448 F F1(shopt)3.448 E F0 3.448(,t)C
+.948(he source)-3.448 F 1.69(\214le name and line number where each)144
+204 R F2(name)4.19 E F0 1.69(is de\214ned are displayed as well.)4.19 F
+(The)6.69 E F1<ad46>4.19 E F0(option)4.19 E(implies)144 216 Q F1<ad66>
+3.892 E F0 6.392(.T)C(he)-6.392 E F1<ad67>3.892 E F0 1.391
+(option forces v)3.892 F 1.391
+(ariables to be created or modi\214ed at the global scope, e)-.25 F -.15
+(ve)-.25 G(n).15 E(when)144 228 Q F1(declar)4.382 E(e)-.18 E F0 1.882
+(is e)4.382 F -.15(xe)-.15 G 1.882(cuted in a shell function.).15 F
+1.883(It is ignored in all other cases.)6.882 F 1.883(The follo)6.883 F
+(wing)-.25 E .794(options can be used to restrict output to v)144 240 R
+.794(ariables with the speci\214ed attrib)-.25 F .793(ute or to gi)-.2 F
+1.093 -.15(ve v)-.25 H(ariables)-.1 E(attrib)144 252 Q(utes:)-.2 E F1
+<ad61>144 264 Q F0(Each)180 264 Q F2(name)2.5 E F0(is an inde)2.5 E -.15
+(xe)-.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F1(Arrays)2.5
+E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1<ad41>144 276 Q F0(Each)180
+276 Q F2(name)2.5 E F0(is an associati)2.5 E .3 -.15(ve a)-.25 H(rray v)
+.15 E(ariable \(see)-.25 E F1(Arrays)2.5 E F0(abo)2.5 E -.15(ve)-.15 G
+(\).).15 E F1<ad66>144 288 Q F0(Use function names only)180 288 Q(.)-.65
+E F1<ad69>144 300 Q F0 .557(The v)180 300 R .558
+(ariable is treated as an inte)-.25 F .558(ger; arithmetic e)-.15 F -.25
+(va)-.25 G .558(luation \(see).25 F/F3 9/Times-Bold@0 SF .558
+(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION)180 312 Q F0(abo)2.25
+E -.15(ve)-.15 G 2.5(\)i).15 G 2.5(sp)-2.5 G(erformed when the v)-2.5 E
+(ariable is assigned a v)-.25 E(alue.)-.25 E F1<ad6c>144 324 Q F0 .91
+(When the v)180 324 R .909(ariable is assigned a v)-.25 F .909
+(alue, all upper)-.25 F .909(-case characters are con)-.2 F -.15(ve)-.4
+G .909(rted to lo).15 F(wer)-.25 E(-)-.2 E 2.5(case. The)180 336 R
+(upper)2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F1<ad6e>144 348 Q
+F0(Gi)180 348 Q 1.619 -.15(ve e)-.25 H(ach).15 E F2(name)3.819 E F0(the)
+3.819 E F2(namer)3.819 E(ef)-.37 E F0(attrib)3.819 E 1.319
+(ute, making it a name reference to another v)-.2 F(ariable.)-.25 E
+1.519(That other v)180 360 R 1.519(ariable is de\214ned by the v)-.25 F
+1.518(alue of)-.25 F F2(name)4.018 E F0 6.518(.A)C 1.518
+(ll references, assignments, and)-6.518 F(attrib)180 372 Q .226
+(ute modi\214cations to)-.2 F F2(name)2.726 E F0 2.726(,e)C .226
+(xcept those using or changing the)-2.876 F F1<ad6e>2.726 E F0(attrib)
+2.726 E .227(ute itself, are)-.2 F .809(performed on the v)180 384 R
+.809(ariable referenced by)-.25 F F2(name)3.308 E F0 1.908 -.55('s v)D
+3.308(alue. The).3 F .808(nameref attrib)3.308 F .808(ute cannot be)-.2
+F(applied to array v)180 396 Q(ariables.)-.25 E F1<ad72>144 408 Q F0
+(Mak)180 408 Q(e)-.1 E F2(name)5.046 E F0 5.046(sr)C(eadonly)-5.046 E
+7.546(.T)-.65 G 2.546(hese names cannot then be assigned v)-7.546 F
+2.547(alues by subsequent)-.25 F(assignment statements or unset.)180 420
+Q F1<ad74>144 432 Q F0(Gi)180 432 Q .73 -.15(ve e)-.25 H(ach).15 E F2
+(name)2.93 E F0(the)2.929 E F2(tr)2.929 E(ace)-.15 E F0(attrib)2.929 E
+2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F1(DEB)2.929
+E(UG)-.1 E F0(and)2.929 E F1(RETURN)2.929 E F0
+(traps from the calling shell.)180 444 Q(The trace attrib)5 E
+(ute has no special meaning for v)-.2 E(ariables.)-.25 E F1<ad75>144 456
+Q F0 .909(When the v)180 456 R .909(ariable is assigned a v)-.25 F .909
+(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2 F -.15
+(ve)-.4 G .91(rted to upper).15 F(-)-.2 E 2.5(case. The)180 468 R(lo)2.5
+E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F1<ad78>144 480 Q
+F0(Mark)180 480 Q F2(name)2.5 E F0 2.5(sf)C(or e)-2.5 E
+(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .144
+(Using `+' instead of `\255' turns of)144 496.8 R 2.643(ft)-.25 G .143
+(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .143
+(xceptions that)-.15 F F1(+a)2.643 E F0(and)2.643 E F1(+A)2.643 E F0
+.143(may not)2.643 F .578(be used to destro)144 508.8 R 3.079(ya)-.1 G
+.579(rray v)-3.079 F .579(ariables and)-.25 F F1(+r)3.079 E F0 .579
+(will not remo)3.079 F .879 -.15(ve t)-.15 H .579(he readonly attrib).15
+F 3.079(ute. When)-.2 F .579(used in a)3.079 F(function,)144 520.8 Q F1
+(declar)3.544 E(e)-.18 E F0(and)3.544 E F1(typeset)3.544 E F0(mak)3.544
+E 3.544(ee)-.1 G(ach)-3.544 E F2(name)3.543 E F0 1.043
+(local, as with the)3.543 F F1(local)3.543 E F0 1.043
+(command, unless the)3.543 F F1<ad67>3.543 E F0 1.205
+(option is supplied.)144 532.8 R 1.205(If a v)6.205 F 1.205
+(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F2(value)A F0 3.705
+(,t)C 1.205(he v)-3.705 F 1.205(alue of the v)-.25 F 1.205
+(ariable is set to)-.25 F F2(value)144 544.8 Q F0 5.218(.W)C .218
+(hen using)-5.218 F F1<ad61>2.718 E F0(or)2.718 E F1<ad41>2.718 E F0
+.217(and the compound assignment syntax to create array v)2.717 F .217
+(ariables, addi-)-.25 F .882(tional attrib)144 556.8 R .882
+(utes do not tak)-.2 F 3.382(ee)-.1 G -.25(ff)-3.382 G .882
+(ect until subsequent assignments.).25 F .882(The return v)5.882 F .882
+(alue is 0 unless an)-.25 F(in)144 568.8 Q -.25(va)-.4 G 1.26(lid optio\
+n is encountered, an attempt is made to de\214ne a function using).25 F
+/F4 10/Courier@0 SF 1.26(\255f foo=bar)3.76 F F0 3.76(,a)C(n)-3.76 E
+.187(attempt is made to assign a v)144 580.8 R .187
+(alue to a readonly v)-.25 F .188
+(ariable, an attempt is made to assign a v)-.25 F .188(alue to an)-.25 F
+1.749(array v)144 592.8 R 1.749
+(ariable without using the compound assignment syntax \(see)-.25 F F1
+(Arrays)4.248 E F0(abo)4.248 E -.15(ve)-.15 G 1.748(\), one of the).15 F
+F2(names)144 604.8 Q F0 .359(is not a v)2.858 F .359(alid shell v)-.25 F
+.359(ariable name, an attempt is made to turn of)-.25 F 2.859(fr)-.25 G
+.359(eadonly status for a read-)-2.859 F 1.213(only v)144 616.8 R 1.213
+(ariable, an attempt is made to turn of)-.25 F 3.713(fa)-.25 G 1.213
+(rray status for an array v)-3.713 F 1.212(ariable, or an attempt is)
+-.25 F(made to display a non-e)144 628.8 Q(xistent function with)-.15 E
+F1<ad66>2.5 E F0(.)A F1(dirs [\255clpv] [+)108 645.6 Q F2(n)A F1 2.5(][)
+C<ad>-2.5 E F2(n)A F1(])A F0 -.4(Wi)144 657.6 S .328
+(thout options, displays the list of currently remembered directories.)
+.4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238
+(single line with directory names separated by spaces.)144 669.6 R 1.238
+(Directories are added to the list with the)6.238 F F1(pushd)144 681.6 Q
+F0 2.003(command; the)4.503 F F1(popd)4.503 E F0 2.003(command remo)
+4.503 F -.15(ve)-.15 G 4.503(se).15 G 2.003(ntries from the list.)-4.503
+F 2.003(The current directory is)7.003 F(al)144 693.6 Q -.1(wa)-.1 G
+(ys the \214rst directory in the stack.).1 E F1<ad63>144 705.6 Q F0
+(Clears the directory stack by deleting all of the entries.)180 705.6 Q
+F1<ad6c>144 717.6 Q F0 .882
+(Produces a listing using full pathnames; the def)180 717.6 R .881
+(ault listing format uses a tilde to denote)-.1 F(the home directory)180
+729.6 Q(.)-.65 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(61)
+188.455 E 0 Cg EP
+%%Page: 62 62
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF<ad70>144 84 Q F0(Print the directory stack with one entry per line.)
+180 84 Q F1<ad76>144 96 Q F0 .272(Print the directory stack with one en\
+try per line, pre\214xing each entry with its inde)180 96 R 2.773(xi)
+-.15 G 2.773(nt)-2.773 G(he)-2.773 E(stack.)180 108 Q F1(+)144 120 Q/F2
+10/Times-Italic@0 SF(n)A F0 1.565(Displays the)180 120 R F2(n)4.065 E F0
+1.565(th entry counting from the left of the list sho)B 1.564(wn by)-.25
+F F1(dirs)4.064 E F0 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1
+E(without options, starting with zero.)180 132 Q F1<ad>144 144 Q F2(n)A
+F0 1.194(Displays the)180 144 R F2(n)3.694 E F0 1.194
+(th entry counting from the right of the list sho)B 1.194(wn by)-.25 F
+F1(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
+(without options, starting with zero.)180 156 Q .258(The return v)144
+172.8 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258
+(lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe)
+-.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-)
+.15 F(tory stack.)144 184.8 Q F1(diso)108 201.6 Q(wn)-.1 E F0([)2.5 E F1
+(\255ar)A F0 2.5(][)C F1<ad68>-2.5 E F0 2.5(][)C F2(jobspec)-2.5 E F0
+(... |)2.5 E F2(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 213.6 S .121
+(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach).15 E F2(jobspec)
+4.362 E F0 .122(from the table of acti)2.932 F .422 -.15(ve j)-.25 H
+2.622(obs. If).15 F F2(jobspec)4.362 E F0 .122(is not present, and)2.932
+F .096(neither the)144 225.6 R F1<ad61>2.596 E F0 .096(nor the)2.596 F
+F1<ad72>2.596 E F0 .096(option is supplied, the)2.596 F F2(curr)2.596 E
+.096(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F1
+<ad68>2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each)
+.15 F F2(jobspec)145.74 237.6 Q F0 .585(is not remo)3.395 F -.15(ve)-.15
+G 3.085(df).15 G .585(rom the table, b)-3.085 F .585(ut is mark)-.2 F
+.585(ed so that)-.1 F/F3 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .586
+(is not sent to the job if the)2.835 F .962(shell recei)144 249.6 R -.15
+(ve)-.25 G 3.462(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F0 .962
+(If no)5.462 F F2(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F1
+<ad61>3.462 E F0 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15
+H 3.462(rm).15 G .962(ark all)-3.462 F 1.358(jobs; the)144 261.6 R F1
+<ad72>3.858 E F0 1.358(option without a)3.858 F F2(jobspec)5.598 E F0
+(ar)4.169 E 1.359(gument restricts operation to running jobs.)-.18 F
+1.359(The return)6.359 F -.25(va)144 273.6 S(lue is 0 unless a).25 E F2
+(jobspec)4.24 E F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E
+F1(echo)108 290.4 Q F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g)
+-.37 E F0(...])2.5 E .425(Output the)144 302.4 R F2(ar)2.925 E(g)-.37 E
+F0 .424(s, separated by spaces, follo)B .424(wed by a ne)-.25 F 2.924
+(wline. The)-.25 F .424(return status is 0 unless a write)2.924 F .307
+(error occurs.)144 314.4 R(If)5.307 E F1<ad6e>2.807 E F0 .307
+(is speci\214ed, the trailing ne)2.807 F .308(wline is suppressed.)-.25
+F .308(If the)5.308 F F1<ad65>2.808 E F0 .308(option is gi)2.808 F -.15
+(ve)-.25 G .308(n, inter).15 F(-)-.2 E 1.349(pretation of the follo)144
+326.4 R 1.348(wing backslash-escaped characters is enabled.)-.25 F(The)
+6.348 E F1<ad45>3.848 E F0 1.348(option disables the)3.848 F 1.054
+(interpretation of these escape characters, e)144 338.4 R -.15(ve)-.25 G
+3.555(no).15 G 3.555(ns)-3.555 G 1.055(ystems where the)-3.555 F 3.555
+(ya)-.15 G 1.055(re interpreted by def)-3.555 F(ault.)-.1 E(The)144
+350.4 Q F1(xpg_echo)3.459 E F0 .959
+(shell option may be used to dynamically determine whether or not)3.459
+F F1(echo)3.458 E F0 -.15(ex)3.458 G(pands).15 E .715
+(these escape characters by def)144 362.4 R(ault.)-.1 E F1(echo)5.715 E
+F0 .716(does not interpret)3.215 F F1<adad>3.216 E F0 .716
+(to mean the end of options.)3.216 F F1(echo)5.716 E F0
+(interprets the follo)144 374.4 Q(wing escape sequences:)-.25 E F1(\\a)
+144 386.4 Q F0(alert \(bell\))180 386.4 Q F1(\\b)144 398.4 Q F0
+(backspace)180 398.4 Q F1(\\c)144 410.4 Q F0(suppress further output)180
+410.4 Q F1(\\e)144 422.4 Q(\\E)144 434.4 Q F0(an escape character)180
+434.4 Q F1(\\f)144 446.4 Q F0(form feed)180 446.4 Q F1(\\n)144 458.4 Q
+F0(ne)180 458.4 Q 2.5(wl)-.25 G(ine)-2.5 E F1(\\r)144 470.4 Q F0
+(carriage return)180 470.4 Q F1(\\t)144 482.4 Q F0(horizontal tab)180
+482.4 Q F1(\\v)144 494.4 Q F0 -.15(ve)180 494.4 S(rtical tab).15 E F1
+(\\\\)144 506.4 Q F0(backslash)180 506.4 Q F1(\\0)144 518.4 Q F2(nnn)A
+F0(the eight-bit character whose v)180 518.4 Q(alue is the octal v)-.25
+E(alue)-.25 E F2(nnn)2.5 E F0(\(zero to three octal digits\))2.5 E F1
+(\\x)144 530.4 Q F2(HH)A F0(the eight-bit character whose v)180 530.4 Q
+(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0
+(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1
+(\\u)144 542.4 Q F2(HHHH)A F0 1.507
+(the Unicode \(ISO/IEC 10646\) character whose v)180 554.4 R 1.506
+(alue is the he)-.25 F 1.506(xadecimal v)-.15 F(alue)-.25 E F2(HHHH)
+4.006 E F0(\(one to four he)180 566.4 Q 2.5(xd)-.15 G(igits\))-2.5 E F1
+(\\U)144 578.4 Q F2(HHHHHHHH)A F0 .547
+(the Unicode \(ISO/IEC 10646\) character whose v)180 590.4 R .547
+(alue is the he)-.25 F .548(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
+3.048 E(HHH)180 602.4 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G
+(igits\))-2.5 E F1(enable)108 619.2 Q F0([)2.5 E F1<ad61>A F0 2.5(][)C
+F1(\255dnps)-2.5 E F0 2.5(][)C F1<ad66>-2.5 E F2(\214lename)2.5 E F0 2.5
+(][)C F2(name)-2.5 E F0(...])2.5 E .278(Enable and disable b)144 631.2 R
+.278(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278
+(uiltin allo)-.2 F .278(ws a disk command which has)-.25 F .833
+(the same name as a shell b)144 643.2 R .834(uiltin to be e)-.2 F -.15
+(xe)-.15 G .834(cuted without specifying a full pathname, e).15 F -.15
+(ve)-.25 G 3.334(nt).15 G(hough)-3.334 E .99
+(the shell normally searches for b)144 655.2 R .989
+(uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>3.489 E F0 .989
+(is used, each)3.489 F F2(name)3.489 E F0 .989(is dis-)3.489 F 1.581
+(abled; otherwise,)144 667.2 R F2(names)4.082 E F0 1.582(are enabled.)
+4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582(xample, to use the)-4.232 F
+F1(test)4.082 E F0 1.582(binary found via the)4.082 F F3 -.666(PA)4.082
+G(TH)-.189 E F0 .081(instead of the shell b)144 679.2 R .081(uiltin v)
+-.2 F .081(ersion, run)-.15 F/F5 10/Courier@0 SF .081(enable -n test)
+2.581 F F0 5.081(.T)C(he)-5.081 E F1<ad66>2.58 E F0 .08
+(option means to load the ne)2.58 F(w)-.25 E -.2(bu)144 691.2 S 1.524
+(iltin command).2 F F2(name)4.384 E F0 1.524(from shared object)4.204 F
+F2(\214lename)4.024 E F0 4.024(,o).18 G 4.024(ns)-4.024 G 1.524
+(ystems that support dynamic loading.)-4.024 F(The)144 703.2 Q F1<ad64>
+2.867 E F0 .367(option will delete a b)2.867 F .367(uiltin pre)-.2 F
+.367(viously loaded with)-.25 F F1<ad66>2.866 E F0 5.366(.I)C 2.866(fn)
+-5.366 G(o)-2.866 E F2(name)2.866 E F0(ar)2.866 E .366(guments are gi)
+-.18 F -.15(ve)-.25 G .366(n, or).15 F .398(if the)144 715.2 R F1<ad70>
+2.898 E F0 .399(option is supplied, a list of shell b)2.899 F .399
+(uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4
+F .399(guments, the)-.18 F .099(list consists of all enabled shell b)144
+727.2 R 2.598(uiltins. If)-.2 F F1<ad6e>2.598 E F0 .098
+(is supplied, only disabled b)2.598 F .098(uiltins are printed.)-.2 F
+(If)5.098 E F1<ad61>2.598 E F0(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(62)188.455 E 0 Cg EP
+%%Page: 63 63
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.916
+(is supplied, the list printed includes all b)144 84 R 1.916
+(uiltins, with an indication of whether or not each is)-.2 F 2.879
+(enabled. If)144 96 R/F1 10/Times-Bold@0 SF<ad73>2.879 E F0 .379
+(is supplied, the output is restricted to the POSIX)2.879 F/F2 10
+/Times-Italic@0 SF(special)2.879 E F0 -.2(bu)2.878 G 2.878(iltins. The)
+.2 F .378(return v)2.878 F(alue)-.25 E .994(is 0 unless a)144 108 R F2
+(name)3.854 E F0 .994(is not a shell b)3.674 F .994
+(uiltin or there is an error loading a ne)-.2 F 3.495(wb)-.25 G .995
+(uiltin from a shared)-3.695 F(object.)144 120 Q F1 -2.3 -.15(ev a)108
+136.8 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 148.8
+Q F2(ar)3.171 E(g)-.37 E F0 3.171(sa)C .671
+(re read and concatenated together into a single command.)-3.171 F .67
+(This command is then read)5.67 F .495(and e)144 160.8 R -.15(xe)-.15 G
+.495(cuted by the shell, and its e).15 F .495
+(xit status is returned as the v)-.15 F .495(alue of)-.25 F F1 -2.3 -.15
+(ev a)2.995 H(l).15 E F0 5.495(.I)C 2.995(ft)-5.495 G .495(here are no)
+-2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 172.8 Q
+(guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F1
+(exec)108 189.6 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-2.5 E F2
+(name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E F2(ar)A(guments)
+-.37 E F0(]])A(If)144 201.6 Q F2(command)3.006 E F0 .306
+(is speci\214ed, it replaces the shell.)3.576 F .305(No ne)5.305 F 2.805
+(wp)-.25 G .305(rocess is created.)-2.805 F(The)5.305 E F2(ar)3.135 E
+(guments)-.37 E F0(become)3.075 E .176(the ar)144 213.6 R .176
+(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G
+(he)-2.676 E F1<ad6c>2.676 E F0 .176
+(option is supplied, the shell places a dash at the be)2.676 F .177
+(ginning of)-.15 F .5(the zeroth ar)144 225.6 R .5(gument passed to)-.18
+F F2(command)3 E F0 5.499(.T).77 G .499(his is what)-5.499 F F2(lo)2.999
+E(gin)-.1 E F0 .499(\(1\) does.).24 F(The)5.499 E F1<ad63>2.999 E F0
+.499(option causes)2.999 F F2(com-)3.199 E(mand)144 237.6 Q F0 .638
+(to be e)3.908 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138
+(vironment. If)-.4 F F1<ad61>3.138 E F0 .638
+(is supplied, the shell passes)3.138 F F2(name)3.499 E F0 .639(as the)
+3.319 F 1.078(zeroth ar)144 249.6 R 1.077(gument to the e)-.18 F -.15
+(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F2(command)3.777 E F0
+1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077(cuted for some reason, a)
+.15 F(non-interacti)144 261.6 Q .876 -.15(ve s)-.25 H .576(hell e).15 F
+.576(xits, unless the)-.15 F F1(execfail)3.076 E F0 .577
+(shell option is enabled.)3.077 F .577(In that case, it returns f)5.577
+F(ail-)-.1 E 3.32(ure. An)144 273.6 R(interacti)3.32 E 1.12 -.15(ve s)
+-.25 H .82(hell returns f).15 F .82(ailure if the \214le cannot be e)-.1
+F -.15(xe)-.15 G 3.32(cuted. A).15 F .82(subshell e)3.32 F .82
+(xits uncondi-)-.15 F .287(tionally if)144 285.6 R F1(exec)2.787 E F0
+-.1(fa)2.787 G 2.787(ils. If).1 F F2(command)2.987 E F0 .287
+(is not speci\214ed, an)3.557 F 2.788(yr)-.15 G .288(edirections tak)
+-2.788 F 2.788(ee)-.1 G -.25(ff)-2.788 G .288(ect in the current shell,)
+.25 F(and the return status is 0.)144 297.6 Q
+(If there is a redirection error)5 E 2.5(,t)-.4 G
+(he return status is 1.)-2.5 E F1(exit)108 314.4 Q F0([)2.5 E F2(n)A F0
+(])A .096(Cause the shell to e)144 314.4 R .096(xit with a status of)
+-.15 F F2(n)2.596 E F0 5.096(.I)C(f)-5.096 E F2(n)2.955 E F0 .095
+(is omitted, the e)2.835 F .095(xit status is that of the last command)
+-.15 F -.15(exe)144 326.4 S 2.5(cuted. A).15 F(trap on)2.5 E/F3 9
+/Times-Bold@0 SF(EXIT)2.5 E F0(is e)2.25 E -.15(xe)-.15 G
+(cuted before the shell terminates.).15 E F1(export)108 343.2 Q F0([)2.5
+E F1(\255fn)A F0 2.5(][).833 G F2(name)-2.5 E F0([=)A F2(wor)A(d)-.37 E
+F0(]] ...)A F1(export \255p)108 355.2 Q F0 .256(The supplied)144 367.2 R
+F2(names)3.117 E F0 .257(are mark)3.027 F .257(ed for automatic e)-.1 F
+.257(xport to the en)-.15 F .257(vironment of subsequently e)-.4 F -.15
+(xe)-.15 G(cuted).15 E 2.627(commands. If)144 379.2 R(the)2.627 E F1
+<ad66>2.627 E F0 .127(option is gi)2.627 F -.15(ve)-.25 G .127(n, the)
+.15 F F2(names)2.987 E F0 .127(refer to functions.)2.897 F .127(If no)
+5.127 F F2(names)2.987 E F0 .127(are gi)2.897 F -.15(ve)-.25 G .126
+(n, or if the).15 F F1<ad70>144 391.2 Q F0 .048
+(option is supplied, a list of names of all e)2.547 F .048(xported v)
+-.15 F .048(ariables is printed.)-.25 F(The)5.048 E F1<ad6e>2.548 E F0
+.048(option causes the)2.548 F -.15(ex)144 403.2 S 1.447
+(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447
+(rom each)-3.947 F F2(name)3.947 E F0 6.447(.I)C 3.947(fav)-6.447 G
+1.447(ariable name is follo)-4.197 F 1.447(wed by =)-.25 F F2(wor)A(d)
+-.37 E F0 3.946(,t)C(he)-3.946 E -.25(va)144 415.2 S .741(lue of the v)
+.25 F .741(ariable is set to)-.25 F F2(wor)3.241 E(d)-.37 E F0(.)A F1
+(export)5.741 E F0 .742(returns an e)3.242 F .742
+(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .742(lid option is)
+.25 F .032(encountered, one of the)144 427.2 R F2(names)2.532 E F0 .032
+(is not a v)2.532 F .032(alid shell v)-.25 F .032(ariable name, or)-.25
+F F1<ad66>2.531 E F0 .031(is supplied with a)2.531 F F2(name)2.891 E F0
+(that)2.711 E(is not a function.)144 439.2 Q F1(fc)108 456 Q F0([)2.5 E
+F1<ad65>A F2(ename)2.5 E F0 2.5(][)C F1(\255lnr)-2.5 E F0 2.5(][)C F2
+<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F2(last)-2.5 E F0(])A F1(fc \255s)108
+468 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2
+(cmd)-2.5 E F0(])A .431
+(The \214rst form selects a range of commands from)144 480 R F2<8c72>
+4.842 E(st)-.1 E F0(to)3.612 E F2(last)3.022 E F0 .432
+(from the history list and displays or)3.612 F .142(edits and re-e)144
+492 R -.15(xe)-.15 G .142(cutes them.).15 F F2 -.45(Fi)5.141 G -.1(rs)
+.45 G(t).1 E F0(and)3.321 E F2(last)2.731 E F0 .141
+(may be speci\214ed as a string \(to locate the last command)3.321 F(be)
+144 504 Q .31(ginning with that string\) or as a number \(an inde)-.15 F
+2.811(xi)-.15 G .311(nto the history list, where a ne)-2.811 F -.05(ga)
+-.15 G(ti).05 E .611 -.15(ve n)-.25 H(umber).15 E .19(is used as an of)
+144 516 R .19(fset from the current command number\).)-.25 F(If)5.19 E
+F2(last)2.779 E F0 .189(is not speci\214ed, it is set to the cur)3.369 F
+(-)-.2 E .948(rent command for listing \(so that)144 528 R/F4 10
+/Courier@0 SF .948(fc \255l \25510)3.448 F F0 .948
+(prints the last 10 commands\) and to)3.448 F F2<8c72>5.359 E(st)-.1 E
+F0(other)4.129 E(-)-.2 E 2.5(wise. If)144 540 R F2<8c72>4.41 E(st)-.1 E
+F0(is not speci\214ed, it is set to the pre)3.18 E
+(vious command for editing and \25516 for listing.)-.25 E(The)144 564 Q
+F1<ad6e>2.522 E F0 .022
+(option suppresses the command numbers when listing.)2.522 F(The)5.022 E
+F1<ad72>2.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022
+(rses the order of).15 F .438(the commands.)144 576 R .438(If the)5.438
+F F1<ad6c>2.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438
+(n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E
+.335(the editor gi)144 588 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E F2
+(ename)3.025 E F0 .335(is in)3.015 F -.2(vo)-.4 G -.1(ke).2 G 2.835(do)
+.1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835 F
+(If)5.334 E F2(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G
+(n,).15 E .63(the v)144 600 R .63(alue of the)-.25 F F3(FCEDIT)3.13 E F0
+-.25(va)2.88 G .631(riable is used, and the v).25 F .631(alue of)-.25 F
+F3(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F3(FCEDIT)3.131 E F0 .631
+(is not set.)2.881 F .631(If nei-)5.631 F .951(ther v)144 612 R .951
+(ariable is set,)-.25 F F2(vi)5.117 E F0 .951(is used.)5.117 F .95
+(When editing is complete, the edited commands are echoed and)5.951 F
+-.15(exe)144 624 S(cuted.).15 E .788(In the second form,)144 648 R F2
+(command)3.288 E F0 .788(is re-e)3.288 F -.15(xe)-.15 G .788
+(cuted after each instance of).15 F F2(pat)3.288 E F0 .788
+(is replaced by)3.288 F F2 -.37(re)3.289 G(p).37 E F0(.)A F2(Com-)5.789
+E(mand)144 660 Q F0 .172(is interpreted the same as)2.672 F F2<8c72>
+2.672 E(st)-.1 E F0(abo)2.672 E -.15(ve)-.15 G 5.172(.A).15 G .171
+(useful alias to use with this is)-2.5 F F4 .171(r='fc \255s')2.671 F F0
+2.671(,s)C 2.671(ot)-2.671 G(hat)-2.671 E(typing)144 672 Q F4 7.165(rc)
+3.665 G(c)-7.165 E F0 1.165(runs the last command be)3.665 F 1.166
+(ginning with)-.15 F F4(cc)3.666 E F0 1.166(and typing)3.666 F F4(r)
+3.666 E F0(re-e)3.666 E -.15(xe)-.15 G 1.166(cutes the last com-).15 F
+(mand.)144 684 Q .142(If the \214rst form is used, the return v)144 708
+R .142(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142
+(lid option is encountered or).25 F F2<8c72>4.552 E(st)-.1 E F0(or)3.322
+E F2(last)2.732 E F0 .454(specify history lines out of range.)144 720 R
+.454(If the)5.454 F F1<ad65>2.954 E F0 .454
+(option is supplied, the return v)2.954 F .455(alue is the v)-.25 F .455
+(alue of the)-.25 F(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(63)
+188.455 E 0 Cg EP
+%%Page: 64 64
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .788
+(last command e)144 84 R -.15(xe)-.15 G .788(cuted or f).15 F .787
+(ailure if an error occurs with the temporary \214le of commands.)-.1 F
+.787(If the)5.787 F 1.135
+(second form is used, the return status is that of the command re-e)144
+96 R -.15(xe)-.15 G 1.136(cuted, unless).15 F/F1 10/Times-Italic@0 SF
+(cmd)3.836 E F0 1.136(does not)4.406 F(specify a v)144 108 Q
+(alid history line, in which case)-.25 E/F2 10/Times-Bold@0 SF(fc)2.5 E
+F0(returns f)2.5 E(ailure.)-.1 E F2(fg)108 124.8 Q F0([)2.5 E F1
+(jobspec)A F0(])A(Resume)144 136.8 Q F1(jobspec)5.654 E F0 1.413
+(in the fore)4.224 F 1.413(ground, and mak)-.15 F 3.913(ei)-.1 G 3.913
+(tt)-3.913 G 1.413(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F1
+(jobspec)5.653 E F0 1.413(is not present, the)4.223 F(shell')144 148.8 Q
+3.116(sn)-.55 G .616(otion of the)-3.116 F F1(curr)3.116 E .616(ent job)
+-.37 F F0 .617(is used.)3.116 F .617(The return v)5.617 F .617
+(alue is that of the command placed into the)-.25 F(fore)144 160.8 Q
+.363(ground, or f)-.15 F .363
+(ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .362
+(hen run with job control enabled, if)-2.862 F F1(jobspec)145.74 172.8 Q
+F0(does not specify a v)2.81 E(alid job or)-.25 E F1(jobspec)4.24 E F0
+(speci\214es a job that w)2.81 E(as started without job control.)-.1 E
+F2(getopts)108 189.6 Q F1(optstring name)2.5 E F0([)2.5 E F1(ar)A(gs)
+-.37 E F0(])A F2(getopts)144 201.6 Q F0 .793
+(is used by shell procedures to parse positional parameters.)3.293 F F1
+(optstring)6.023 E F0 .793(contains the option)3.513 F .15
+(characters to be recognized; if a character is follo)144 213.6 R .149
+(wed by a colon, the option is e)-.25 F .149(xpected to ha)-.15 F .449
+-.15(ve a)-.2 H(n).15 E(ar)144 225.6 Q .578
+(gument, which should be separated from it by white space.)-.18 F .579
+(The colon and question mark char)5.579 F(-)-.2 E 1.665
+(acters may not be used as option characters.)144 237.6 R 1.665
+(Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F2(getopts)
+4.165 E F0 1.665(places the ne)4.165 F(xt)-.15 E .796
+(option in the shell v)144 249.6 R(ariable)-.25 E F1(name)3.296 E F0
+3.296(,i).18 G(nitializing)-3.296 E F1(name)3.657 E F0 .797
+(if it does not e)3.477 F .797(xist, and the inde)-.15 F 3.297(xo)-.15 G
+3.297(ft)-3.297 G .797(he ne)-3.297 F(xt)-.15 E(ar)144 261.6 Q .085
+(gument to be processed into the v)-.18 F(ariable)-.25 E/F3 9
+/Times-Bold@0 SF(OPTIND)2.585 E/F4 9/Times-Roman@0 SF(.)A F3(OPTIND)
+4.585 E F0 .085(is initialized to 1 each time the shell)2.335 F .845
+(or a shell script is in)144 273.6 R -.2(vo)-.4 G -.1(ke).2 G 3.345
+(d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E F2
+(getopts)3.346 E F0 .846(places that ar)3.346 F(gument)-.18 E .804
+(into the v)144 285.6 R(ariable)-.25 E F3(OPT)3.304 E(ARG)-.81 E F4(.)A
+F0 .803(The shell does not reset)5.304 F F3(OPTIND)3.303 E F0 .803
+(automatically; it must be manually)3.053 F .293
+(reset between multiple calls to)144 297.6 R F2(getopts)2.793 E F0 .293
+(within the same shell in)2.793 F -.2(vo)-.4 G .293(cation if a ne).2 F
+2.793(ws)-.25 G .294(et of parameters)-2.793 F(is to be used.)144 309.6
+Q 2.044(When the end of options is encountered,)144 333.6 R F2(getopts)
+4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.043
+(alue greater than zero.)-.25 F F3(OPTIND)144 345.6 Q F0
+(is set to the inde)2.25 E 2.5(xo)-.15 G 2.5(ft)-2.5 G
+(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0
+(is set to ?.)2.5 E F2(getopts)144 369.6 Q F0 2.392
+(normally parses the positional parameters, b)4.892 F 2.392
+(ut if more ar)-.2 F 2.393(guments are gi)-.18 F -.15(ve)-.25 G 4.893
+(ni).15 G(n)-4.893 E F1(ar)4.893 E(gs)-.37 E F0(,).27 E F2(getopts)144
+381.6 Q F0(parses those instead.)2.5 E F2(getopts)144 405.6 Q F0 1.166
+(can report errors in tw)3.666 F 3.665(ow)-.1 G 3.665(ays. If)-3.765 F
+1.165(the \214rst character of)3.665 F F1(optstring)3.895 E F0 1.165
+(is a colon,)3.885 F F1(silent)4.005 E F0(error)4.345 E 1.07
+(reporting is used.)144 417.6 R 1.071
+(In normal operation, diagnostic messages are printed when in)6.07 F
+-.25(va)-.4 G 1.071(lid options or).25 F .394(missing option ar)144
+429.6 R .394(guments are encountered.)-.18 F .394(If the v)5.394 F
+(ariable)-.25 E F3(OPTERR)2.894 E F0 .394
+(is set to 0, no error messages)2.644 F(will be displayed, e)144 441.6 Q
+-.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E
+F1(optstring)2.73 E F0(is not a colon.)2.72 E .666(If an in)144 465.6 R
+-.25(va)-.4 G .666(lid option is seen,).25 F F2(getopts)3.166 E F0 .667
+(places ? into)3.167 F F1(name)3.527 E F0 .667
+(and, if not silent, prints an error message)3.347 F .4(and unsets)144
+477.6 R F3(OPT)2.9 E(ARG)-.81 E F4(.)A F0(If)4.899 E F2(getopts)2.899 E
+F0 .399(is silent, the option character found is placed in)2.899 F F3
+(OPT)2.899 E(ARG)-.81 E F0 .399(and no)2.649 F
+(diagnostic message is printed.)144 489.6 Q 1.241(If a required ar)144
+513.6 R 1.241(gument is not found, and)-.18 F F2(getopts)3.741 E F0
+1.241(is not silent, a question mark \()3.741 F F2(?).833 E F0 3.742
+(\)i).833 G 3.742(sp)-3.742 G 1.242(laced in)-3.742 F F1(name)144 525.6
+Q F0(,).18 E F3(OPT)2.735 E(ARG)-.81 E F0 .234
+(is unset, and a diagnostic message is printed.)2.485 F(If)5.234 E F2
+(getopts)2.734 E F0 .234(is silent, then a colon \()2.734 F F2(:).833 E
+F0(\)).833 E(is placed in)144 537.6 Q F1(name)2.86 E F0(and)2.68 E F3
+(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F2
+(getopts)144 561.6 Q F0 .902
+(returns true if an option, speci\214ed or unspeci\214ed, is found.)
+3.401 F .902(It returns f)5.902 F .902(alse if the end of)-.1 F
+(options is encountered or an error occurs.)144 573.6 Q F2(hash)108
+590.4 Q F0([)2.5 E F2(\255lr)A F0 2.5(][)C F2<ad70>-2.5 E F1(\214lename)
+2.5 E F0 2.5(][)C F2(\255dt)-2.5 E F0 2.5(][)C F1(name)-2.5 E F0(])A
+.858(Each time)144 602.4 R F2(hash)3.358 E F0 .858(is in)3.358 F -.2(vo)
+-.4 G -.1(ke).2 G .858(d, the full pathname of the command).1 F F1(name)
+3.718 E F0 .858(is determined by searching)3.538 F .956
+(the directories in)144 614.4 R F2($P)3.456 E -.95(AT)-.74 G(H).95 E F0
+.956(and remembered.)3.456 F(An)5.956 E 3.456(yp)-.15 G(re)-3.456 E .956
+(viously-remembered pathname is discarded.)-.25 F .243(If the)144 626.4
+R F2<ad70>2.743 E F0 .243
+(option is supplied, no path search is performed, and)2.743 F F1
+(\214lename)4.653 E F0 .242(is used as the full \214lename)2.923 F 1.711
+(of the command.)144 638.4 R(The)6.711 E F2<ad72>4.211 E F0 1.711
+(option causes the shell to for)4.211 F 1.712
+(get all remembered locations.)-.18 F(The)6.712 E F2<ad64>4.212 E F0
+.833(option causes the shell to for)144 650.4 R .833
+(get the remembered location of each)-.18 F F1(name)3.333 E F0 5.833(.I)
+C 3.333(ft)-5.833 G(he)-3.333 E F2<ad74>3.333 E F0 .833(option is sup-)
+3.333 F .703(plied, the full pathname to which each)144 662.4 R F1(name)
+3.204 E F0 .704(corresponds is printed.)3.204 F .704(If multiple)5.704 F
+F1(name)3.204 E F0(ar)3.204 E(guments)-.18 E .795(are supplied with)144
+674.4 R F2<ad74>3.295 E F0 3.295(,t)C(he)-3.295 E F1(name)3.295 E F0
+.795(is printed before the hashed full pathname.)3.295 F(The)5.795 E F2
+<ad6c>3.295 E F0 .795(option causes)3.295 F .934
+(output to be displayed in a format that may be reused as input.)144
+686.4 R .934(If no ar)5.934 F .935(guments are gi)-.18 F -.15(ve)-.25 G
+.935(n, or if).15 F(only)144 698.4 Q F2<ad6c>2.822 E F0 .322
+(is supplied, information about remembered commands is printed.)2.822 F
+.321(The return status is true)5.321 F(unless a)144 710.4 Q F1(name)2.86
+E F0(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.)
+.25 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(64)188.455 E 0 Cg
+EP
+%%Page: 65 65
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(help)108 84 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C/F2 10
+/Times-Italic@0 SF(pattern)-2.5 E F0(])A .866
+(Display helpful information about b)144 96 R .867(uiltin commands.)-.2
+F(If)5.867 E F2(pattern)4.617 E F0 .867(is speci\214ed,)3.607 F F1(help)
+3.367 E F0(gi)3.367 E -.15(ve)-.25 G 3.367(sd).15 G(etailed)-3.367 E
+.307(help on all commands matching)144 108 R F2(pattern)2.807 E F0 2.807
+(;o).24 G .307(therwise help for all the b)-2.807 F .306
+(uiltins and shell control struc-)-.2 F(tures is printed.)144 120 Q F1
+<ad64>144 132 Q F0(Display a short description of each)180 132 Q F2
+(pattern)2.5 E F1<ad6d>144 144 Q F0(Display the description of each)180
+144 Q F2(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G(ormat)-2.5
+E F1<ad73>144 156 Q F0(Display only a short usage synopsis for each)180
+156 Q F2(pattern)2.5 E F0
+(The return status is 0 unless no command matches)144 172.8 Q F2
+(pattern)2.5 E F0(.).24 E F1(history [)108 189.6 Q F2(n)A F1(])A
+(history \255c)108 201.6 Q(history \255d)108 213.6 Q F2(of)2.5 E(fset)
+-.18 E F1(history \255d)108 225.6 Q F2(start)2.5 E F0<ad>A F2(end)A F1
+(history \255anrw)108 237.6 Q F0([)2.5 E F2(\214lename)A F0(])A F1
+(history \255p)108 249.6 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5
+(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 261.6 Q F2(ar)2.5 E(g)
+-.37 E F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)144
+273.6 S .752
+(th no options, display the command history list with line numbers.).4 F
+.752(Lines listed with a)5.752 F F1(*)3.252 E F0(ha)3.252 E -.15(ve)-.2
+G .381(been modi\214ed.)144 285.6 R .38(An ar)5.38 F .38(gument of)-.18
+F F2(n)3.24 E F0 .38(lists only the last)3.12 F F2(n)3.24 E F0 2.88
+(lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E/F3 9
+/Times-Bold@0 SF(HISTTIMEFOR-)2.88 E(MA)144 297.6 Q(T)-.855 E F0 .264
+(is set and not null, it is used as a format string for)2.514 F F2
+(strftime)2.765 E F0 .265(\(3\) to display the time stamp asso-)B 1.02
+(ciated with each displayed history entry)144 309.6 R 6.019(.N)-.65 G
+3.519(oi)-6.019 G(nterv)-3.519 E 1.019
+(ening blank is printed between the formatted)-.15 F .176
+(time stamp and the history line.)144 321.6 R(If)5.176 E F2(\214lename)
+2.676 E F0 .176
+(is supplied, it is used as the name of the history \214le; if)2.676 F
+(not, the v)144 333.6 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0(is used.)
+2.25 E(Options, if supplied, ha)5 E .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad63>144 345.6 Q F0
+(Clear the history list by deleting all the entries.)180 345.6 Q F1
+<ad64>144 357.6 Q F2(of)2.5 E(fset)-.18 E F0 .39
+(Delete the history entry at position)180 369.6 R F2(of)2.889 E(fset)
+-.18 E F0 5.389(.I)C(f)-5.389 E F2(of)2.889 E(fset)-.18 E F0 .389(is ne)
+2.889 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G 2.889(,i).15 G 2.889(ti)
+-2.889 G 2.889(si)-2.889 G .389(nterpreted as relati)-2.889 F -.15(ve)
+-.25 G .598(to one greater than the last history position, so ne)180
+381.6 R -.05(ga)-.15 G(ti).05 E .899 -.15(ve i)-.25 H .599
+(ndices count back from the end).15 F(of the history)180 393.6 Q 2.5(,a)
+-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G
+(efers to the current)-2.5 E F1(history -d)2.5 E F0(command.)2.5 E F1
+<ad64>144 405.6 Q F2(start)2.5 E F0<ad>A F2(end)A F0 .758
+(Delete the history entries between positions)180 417.6 R F2(start)3.258
+E F0(and)3.257 E F2(end)3.257 E F0 3.257(,i)C(nclusi)-3.257 E -.15(ve)
+-.25 G 5.757(.P).15 G(ositi)-5.757 E 1.057 -.15(ve a)-.25 H .757(nd ne)
+.15 F -.05(ga)-.15 G(-).05 E(ti)180 429.6 Q .3 -.15(ve v)-.25 H
+(alues for)-.1 E F2(start)2.5 E F0(and)2.5 E F2(end)2.5 E F0
+(are interpreted as described abo)2.5 E -.15(ve)-.15 G(.).15 E F1<ad61>
+144 441.6 Q F0 .564(Append the `)180 441.6 R(`ne)-.74 E(w')-.25 E 3.064
+('h)-.74 G .564(istory lines to the history \214le.)-3.064 F .565
+(These are history lines entered since)5.564 F(the be)180 453.6 Q
+(ginning of the current)-.15 E F1(bash)2.5 E F0(session, b)2.5 E
+(ut not already appended to the history \214le.)-.2 E F1<ad6e>144 465.6
+Q F0 .854(Read the history lines not already read from the history \214\
+le into the current history list.)180 465.6 R .772
+(These are lines appended to the history \214le since the be)180 477.6 R
+.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E
+(sion.)180 489.6 Q F1<ad72>144 501.6 Q F0(Read the contents of the hist\
+ory \214le and append them to the current history list.)180 501.6 Q F1
+<ad77>144 513.6 Q F0
+(Write the current history list to the history \214le, o)180 513.6 Q
+-.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G
+(ontents.)-2.5 E F1<ad70>144 525.6 Q F0 .626
+(Perform history substitution on the follo)180 525.6 R(wing)-.25 E F2
+(ar)3.125 E(gs)-.37 E F0 .625(and display the result on the standard)
+3.125 F 2.975(output. Does)180 537.6 R .475
+(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar)
+2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F
+(normal history e)180 549.6 Q(xpansion.)-.15 E F1<ad73>144 561.6 Q F0
+.363(Store the)180 561.6 R F2(ar)3.193 E(gs)-.37 E F0 .363
+(in the history list as a single entry)3.133 F 5.363(.T)-.65 G .362
+(he last command in the history list is)-5.363 F(remo)180 573.6 Q -.15
+(ve)-.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0
+(are added.)2.77 E .145(If the)144 590.4 R F3(HISTTIMEFORMA)2.645 E(T)
+-.855 E F0 -.25(va)2.395 G .145
+(riable is set, the time stamp information associated with each history)
+.25 F .669(entry is written to the history \214le, mark)144 602.4 R .669
+(ed with the history comment character)-.1 F 5.668(.W)-.55 G .668
+(hen the history)-5.668 F .955(\214le is read, lines be)144 614.4 R .956
+(ginning with the history comment character follo)-.15 F .956
+(wed immediately by a digit)-.25 F 1.796
+(are interpreted as timestamps for the follo)144 626.4 R 1.795
+(wing history entry)-.25 F 6.795(.T)-.65 G 1.795(he return v)-6.795 F
+1.795(alue is 0 unless an)-.25 F(in)144 638.4 Q -.25(va)-.4 G .768(lid \
+option is encountered, an error occurs while reading or writing the his\
+tory \214le, an in).25 F -.25(va)-.4 G(lid).25 E F2(of)144 650.4 Q(fset)
+-.18 E F0 1.032(is supplied as an ar)3.532 F 1.031(gument to)-.18 F F1
+<ad64>3.531 E F0 3.531(,o)C 3.531(rt)-3.531 G 1.031(he history e)-3.531
+F 1.031(xpansion supplied as an ar)-.15 F 1.031(gument to)-.18 F F1
+<ad70>3.531 E F0 -.1(fa)144 662.4 S(ils.).1 E F1(jobs)108 679.2 Q F0([)
+2.5 E F1(\255lnprs)A F0 2.5(][)C F2(jobspec)A F0(... ])2.5 E F1
+(jobs \255x)108 691.2 Q F2(command)2.5 E F0([)2.5 E F2(ar)2.5 E(gs)-.37
+E F0(... ])2.5 E(The \214rst form lists the acti)144 703.2 Q .3 -.15
+(ve j)-.25 H 2.5(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H
+(he follo).15 E(wing meanings:)-.25 E F1<ad6c>144 715.2 Q F0
+(List process IDs in addition to the normal information.)180 715.2 Q
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(65)188.455 E 0 Cg EP
+%%Page: 66 66
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF<ad6e>144 84 Q F0 .193(Display information only about jobs that ha)180
+84 R .494 -.15(ve c)-.2 H .194(hanged status since the user w).15 F .194
+(as last noti-)-.1 F(\214ed of their status.)180 96 Q F1<ad70>144 108 Q
+F0(List only the process ID of the job')180 108 Q 2.5(sp)-.55 G
+(rocess group leader)-2.5 E(.)-.55 E F1<ad72>144 120 Q F0
+(Display only running jobs.)180 120 Q F1<ad73>144 132 Q F0
+(Display only stopped jobs.)180 132 Q(If)144 148.8 Q/F2 10
+/Times-Italic@0 SF(jobspec)4.554 E F0 .314(is gi)3.124 F -.15(ve)-.25 G
+.314(n, output is restricted to information about that job).15 F 5.313
+(.T)-.4 G .313(he return status is 0 unless)-5.313 F(an in)144 160.8 Q
+-.25(va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G
+(lid).25 E F2(jobspec)4.24 E F0(is supplied.)2.81 E .394(If the)144
+177.6 R F1<ad78>2.894 E F0 .394(option is supplied,)2.894 F F1(jobs)
+2.894 E F0 .394(replaces an)2.894 F(y)-.15 E F2(jobspec)4.634 E F0 .394
+(found in)3.204 F F2(command)3.094 E F0(or)3.664 E F2(ar)3.224 E(gs)-.37
+E F0 .395(with the corre-)3.164 F(sponding process group ID, and e)144
+189.6 Q -.15(xe)-.15 G(cutes).15 E F2(command)2.7 E F0(passing it)3.27 E
+F2(ar)2.5 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)
+-.15 E F1(kill)108 206.4 Q F0([)2.5 E F1<ad73>A F2(sigspec)2.5 E F0(|)
+2.5 E F1<ad6e>2.5 E F2(signum)2.5 E F0(|)2.5 E F1<ad>2.5 E F2(sigspec)A
+F0 2.5(][)C F2(pid)-2.5 E F0(|)2.5 E F2(jobspec)2.5 E F0 2.5(].)C(..)
+-2.5 E F1(kill \255l)108 218.4 Q F0(|)A F1<ad4c>A F0([)2.5 E F2(sigspec)
+A F0(|)2.5 E F2 -.2(ex)2.5 G(it_status).2 E F0(])A .12
+(Send the signal named by)144 230.4 R F2(sigspec)2.96 E F0(or)2.93 E F2
+(signum)2.96 E F0 .119(to the processes named by)2.939 F F2(pid)3.869 E
+F0(or)3.389 E F2(jobspec)2.619 E F0(.).31 E F2(sigspec)5.459 E F0(is)
+2.929 E .318(either a case-insensiti)144 242.4 R .618 -.15(ve s)-.25 H
+.318(ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.818 E F0
+.319(\(with or without the)2.569 F F3(SIG)2.819 E F0 .319
+(pre\214x\) or a signal)2.569 F(number;)144 254.4 Q F2(signum)4.189 E F0
+1.349(is a signal number)4.169 F 6.349(.I)-.55 G(f)-6.349 E F2(sigspec)
+4.189 E F0 1.349(is not present, then)4.159 F F3(SIGTERM)3.849 E F0
+1.348(is assumed.)3.599 F(An)6.348 E(ar)144 266.4 Q .522(gument of)-.18
+F F1<ad6c>3.023 E F0 .523(lists the signal names.)3.023 F .523(If an)
+5.523 F 3.023(ya)-.15 G -.18(rg)-3.023 G .523(uments are supplied when)
+.18 F F1<ad6c>3.023 E F0 .523(is gi)3.023 F -.15(ve)-.25 G .523
+(n, the names).15 F .28(of the signals corresponding to the ar)144 278.4
+R .28(guments are listed, and the return status is 0.)-.18 F(The)5.28 E
+F2 -.2(ex)2.78 G(it_status).2 E F0(ar)144 290.4 Q .377(gument to)-.18 F
+F1<ad6c>2.877 E F0 .378
+(is a number specifying either a signal number or the e)2.877 F .378
+(xit status of a process termi-)-.15 F .963(nated by a signal.)144 302.4
+R(The)5.962 E F1<ad4c>3.462 E F0 .962(option is equi)3.462 F -.25(va)
+-.25 G .962(lent to).25 F F1<ad6c>3.462 E F0(.)A F1(kill)5.962 E F0 .962
+(returns true if at least one signal w)3.462 F(as)-.1 E
+(successfully sent, or f)144 314.4 Q(alse if an error occurs or an in)
+-.1 E -.25(va)-.4 G(lid option is encountered.).25 E F1(let)108 331.2 Q
+F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(Each)144
+343.2 Q F2(ar)3.026 E(g)-.37 E F0 .196(is an arithmetic e)2.916 F .197
+(xpression to be e)-.15 F -.25(va)-.25 G .197(luated \(see).25 F F3 .197
+(ARITHMETIC EV)2.697 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(abo)
+2.447 E -.15(ve)-.15 G 2.697(\). If).15 F(the last)144 355.2 Q F2(ar)
+2.83 E(g)-.37 E F0 -.25(eva)2.72 G(luates to 0,).25 E F1(let)2.5 E F0
+(returns 1; 0 is returned otherwise.)2.5 E F1(local)108 372 Q F0([)2.5 E
+F2(option)A F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C
+(.. | \255 ])-2.5 E -.15(Fo)144 384 S 2.56(re).15 G .06(ach ar)-2.56 F
+.06(gument, a local v)-.18 F .06(ariable named)-.25 F F2(name)2.92 E F0
+.06(is created, and assigned)2.74 F F2(value)2.56 E F0 5.06(.T).18 G(he)
+-5.06 E F2(option)2.56 E F0 .06(can be)2.56 F(an)144 396 Q 3.152(yo)-.15
+G 3.152(ft)-3.152 G .652(he options accepted by)-3.152 F F1(declar)3.152
+E(e)-.18 E F0 5.652(.W)C(hen)-5.652 E F1(local)3.152 E F0 .653
+(is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144
+408 Q F2(name)3.282 E F0 .422(to ha)3.102 F .722 -.15(ve a v)-.2 H .422
+(isible scope restricted to that function and its children.).15 F(If)
+5.421 E F2(name)2.921 E F0 .421(is \255, the set)2.921 F 1.461
+(of shell options is made local to the function in which)144 420 R F1
+(local)3.961 E F0 1.462(is in)3.961 F -.2(vo)-.4 G -.1(ke).2 G 1.462
+(d: shell options changed).1 F 1.563(using the)144 432 R F1(set)4.063 E
+F0 -.2(bu)4.063 G 1.563
+(iltin inside the function are restored to their original v).2 F 1.562
+(alues when the function)-.25 F 3.743(returns. W)144 444 R 1.243
+(ith no operands,)-.4 F F1(local)3.743 E F0 1.243
+(writes a list of local v)3.743 F 1.244
+(ariables to the standard output.)-.25 F 1.244(It is an)6.244 F .42
+(error to use)144 456 R F1(local)2.92 E F0 .42
+(when not within a function.)2.92 F .42(The return status is 0 unless)
+5.42 F F1(local)2.92 E F0 .42(is used outside a)2.92 F(function, an in)
+144 468 Q -.25(va)-.4 G(lid).25 E F2(name)2.86 E F0(is supplied, or)2.68
+E F2(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F1(logout)108
+484.8 Q F0(Exit a login shell.)144 484.8 Q F1(map\214le)108 501.6 Q F0
+([)2.5 E F1<ad64>A F2(delim)2.5 E F0 2.5(][)C F1<ad6e>-2.5 E F2(count)
+2.5 E F0 2.5(][)C F1<ad4f>-2.5 E F2(origin)2.5 E F0 2.5(][)C F1<ad73>
+-2.5 E F2(count)2.5 E F0 2.5(][)C F1<ad74>-2.5 E F0 2.5(][)C F1<ad75>
+-2.5 E F2(fd)2.5 E F0 2.5(][)C F1<ad43>-2.5 E F2(callbac)2.5 E(k)-.2 E
+F0 2.5(][)C F1<ad63>-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E
+(ay)-.15 E F0(])A F1 -.18(re)108 513.6 S(adarray).18 E F0([)2.5 E F1
+<ad64>A F2(delim)2.5 E F0 2.5(][)C F1<ad6e>-2.5 E F2(count)2.5 E F0 2.5
+(][)C F1<ad4f>-2.5 E F2(origin)2.5 E F0 2.5(][)C F1<ad73>-2.5 E F2
+(count)2.5 E F0 2.5(][)C F1<ad74>-2.5 E F0 2.5(][)C F1<ad75>-2.5 E F2
+(fd)2.5 E F0 2.5(][)C F1<ad43>-2.5 E F2(callbac)2.5 E(k)-.2 E F0 2.5(][)
+C F1<ad63>-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E(ay)-.15 E F0
+(])A .179(Read lines from the standard input into the inde)144 525.6 R
+-.15(xe)-.15 G 2.679(da).15 G .179(rray v)-2.679 F(ariable)-.25 E F2
+(arr)2.68 E(ay)-.15 E F0 2.68(,o).32 G 2.68(rf)-2.68 G .18
+(rom \214le descriptor)-2.68 F F2(fd)4.65 E F0 1.249(if the)144 537.6 R
+F1<ad75>3.749 E F0 1.249(option is supplied.)3.749 F 1.249(The v)6.249 F
+(ariable)-.25 E F3(MAPFILE)3.749 E F0 1.249(is the def)3.499 F(ault)-.1
+E F2(arr)3.748 E(ay)-.15 E F0 6.248(.O)C 1.248(ptions, if supplied,)
+-6.248 F(ha)144 549.6 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad64>144 561.6 Q F0 .91
+(The \214rst character of)180 561.6 R F2(delim)3.41 E F0 .911
+(is used to terminate each input line, rather than ne)3.41 F 3.411
+(wline. If)-.25 F F2(delim)180 573.6 Q F0(is the empty string,)2.5 E F1
+(map\214le)2.5 E F0(will terminate a line when it reads a NUL character)
+2.5 E(.)-.55 E F1<ad6e>144 585.6 Q F0(Cop)180 585.6 Q 2.5(ya)-.1 G 2.5
+(tm)-2.5 G(ost)-2.5 E F2(count)2.7 E F0 2.5(lines. If)3.18 F F2(count)
+2.5 E F0(is 0, all lines are copied.)2.5 E F1<ad4f>144 597.6 Q F0(Be)180
+597.6 Q(gin assigning to)-.15 E F2(arr)2.83 E(ay)-.15 E F0(at inde)2.82
+E(x)-.15 E F2(origin)2.5 E F0 5(.T).24 G(he def)-5 E(ault inde)-.1 E 2.5
+(xi)-.15 G 2.5(s0)-2.5 G(.)-2.5 E F1<ad73>144 609.6 Q F0
+(Discard the \214rst)180 609.6 Q F2(count)2.5 E F0(lines read.)2.5 E F1
+<ad74>144 621.6 Q F0(Remo)180 621.6 Q .3 -.15(ve a t)-.15 H(railing).15
+E F2(delim)2.5 E F0(\(def)2.5 E(ault ne)-.1 E
+(wline\) from each line read.)-.25 E F1<ad75>144 633.6 Q F0
+(Read lines from \214le descriptor)180 633.6 Q F2(fd)2.5 E F0
+(instead of the standard input.)2.5 E F1<ad43>144 645.6 Q F0(Ev)180
+645.6 Q(aluate)-.25 E F2(callbac)2.7 E(k)-.2 E F0(each time)3.17 E F2
+(quantum)2.5 E F0(lines are read.)2.5 E(The)5 E F1<ad63>2.5 E F0
+(option speci\214es)2.5 E F2(quantum)2.5 E F0(.).32 E F1<ad63>144 657.6
+Q F0(Specify the number of lines read between each call to)180 657.6 Q
+F2(callbac)2.5 E(k)-.2 E F0(.).67 E(If)144 674.4 Q F1<ad43>2.968 E F0
+.467(is speci\214ed without)2.967 F F1<ad63>2.967 E F0 2.967(,t)C .467
+(he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F2
+(callbac)2.967 E(k)-.2 E F0 .467(is e)2.967 F -.25(va)-.25 G .467
+(luated, it is sup-).25 F .261(plied the inde)144 686.4 R 2.761(xo)-.15
+G 2.761(ft)-2.761 G .261(he ne)-2.761 F .262(xt array element to be ass\
+igned and the line to be assigned to that element)-.15 F .275
+(as additional ar)144 698.4 R(guments.)-.18 E F2(callbac)5.275 E(k)-.2 E
+F0 .275(is e)2.775 F -.25(va)-.25 G .274
+(luated after the line is read b).25 F .274
+(ut before the array element is)-.2 F(assigned.)144 710.4 Q
+(If not supplied with an e)144 727.2 Q(xplicit origin,)-.15 E F1
+(map\214le)2.5 E F0(will clear)2.5 E F2(arr)2.5 E(ay)-.15 E F0
+(before assigning to it.)2.5 E(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(66)188.455 E 0 Cg EP
+%%Page: 67 67
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(map\214le)144 84 Q F0 1.905(returns successfully unless an in)4.405 F
+-.25(va)-.4 G 1.905(lid option or option ar).25 F 1.906
+(gument is supplied,)-.18 F/F2 10/Times-Italic@0 SF(arr)4.406 E(ay)-.15
+E F0(is)4.406 E(in)144 96 Q -.25(va)-.4 G(lid or unassignable, or if).25
+E F2(arr)2.5 E(ay)-.15 E F0(is not an inde)2.5 E -.15(xe)-.15 G 2.5(da)
+.15 G(rray)-2.5 E(.)-.65 E F1(popd)108 112.8 Q F0<5bad>2.5 E F1(n)A F0
+2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C<ad>-2.5 E F2(n)A F0(])A(Remo)144
+124.8 Q -.15(ve)-.15 G 2.8(se).15 G .3(ntries from the directory stack.)
+-2.8 F -.4(Wi)5.299 G .299(th no ar).4 F .299(guments, remo)-.18 F -.15
+(ve)-.15 G 2.799(st).15 G .299(he top directory from the)-2.799 F 1.478
+(stack, and performs a)144 136.8 R F1(cd)3.978 E F0 1.479(to the ne)
+3.978 F 3.979(wt)-.25 G 1.479(op directory)-3.979 F 6.479(.A)-.65 G -.18
+(rg)-6.479 G 1.479(uments, if supplied, ha).18 F 1.779 -.15(ve t)-.2 H
+1.479(he follo).15 F(wing)-.25 E(meanings:)144 148.8 Q F1<ad6e>144 160.8
+Q F0 .551(Suppresses the normal change of directory when remo)180 160.8
+R .551(ving directories from the stack, so)-.15 F
+(that only the stack is manipulated.)180 172.8 Q F1(+)144 184.8 Q F2(n)A
+F0(Remo)180 184.8 Q -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F2(n)2.64 E
+F0 .14(th entry counting from the left of the list sho)B .14(wn by)-.25
+F F1(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180
+196.8 S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0
+(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)
+-.65 E F3(popd +1)2.5 E F0(the second.)2.5 E F1<ad>144 208.8 Q F2(n)A F0
+(Remo)180 208.8 Q -.15(ve)-.15 G 3.76(st).15 G(he)-3.76 E F2(n)3.76 E F0
+1.259(th entry counting from the right of the list sho)B 1.259(wn by)
+-.25 F F1(dirs)3.759 E F0 3.759(,s)C 1.259(tarting with)-3.759 F 2.5
+(zero. F)180 220.8 R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0
+(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65
+E F3(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .643(If the)144
+237.6 R F1(popd)3.143 E F0 .643(command is successful, a)3.143 F F1
+(dirs)3.143 E F0 .644(is performed as well, and the return status is 0.)
+3.143 F F1(popd)5.644 E F0 .416(returns f)144 249.6 R .416
+(alse if an in)-.1 F -.25(va)-.4 G .415
+(lid option is encountered, the directory stack is empty).25 F 2.915
+(,an)-.65 G(on-e)-2.915 E .415(xistent direc-)-.15 F
+(tory stack entry is speci\214ed, or the directory change f)144 261.6 Q
+(ails.)-.1 E F1(printf)108 278.4 Q F0([)2.5 E F1<ad76>A F2(var)2.5 E F0
+(])A F2(format)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A 1.436
+(Write the formatted)144 290.4 R F2(ar)3.936 E(guments)-.37 E F0 1.437
+(to the standard output under the control of the)3.936 F F2(format)3.937
+E F0 6.437(.T)C(he)-6.437 E F1<ad76>3.937 E F0 .126
+(option causes the output to be assigned to the v)144 302.4 R(ariable)
+-.25 E F2(var)2.626 E F0 .126(rather than being printed to the standard)
+2.626 F(output.)144 314.4 Q(The)144 338.4 Q F2(format)3.017 E F0 .517(i\
+s a character string which contains three types of objects: plain chara\
+cters, which are)3.017 F .704(simply copied to standard output, charact\
+er escape sequences, which are con)144 350.4 R -.15(ve)-.4 G .703
+(rted and copied to).15 F .036(the standard output, and format speci\
+\214cations, each of which causes printing of the ne)144 362.4 R .037
+(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 374.4 Q(gument)-.37 E F0
+5.532(.I)C 3.032(na)-5.532 G .532(ddition to the standard)-3.032 F F2
+(printf)3.032 E F0 .532(\(1\) format speci\214cations,)B F1(printf)3.031
+E F0 .531(interprets the follo)3.031 F(w-)-.25 E(ing e)144 386.4 Q
+(xtensions:)-.15 E F1(%b)144 398.4 Q F0(causes)180 398.4 Q F1(printf)
+2.595 E F0 .096(to e)2.595 F .096
+(xpand backslash escape sequences in the corresponding)-.15 F F2(ar)
+2.596 E(gument)-.37 E F0 .096(in the)2.596 F(same w)180 410.4 Q(ay as)
+-.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 422.4 Q F0(causes)180 422.4 Q
+F1(printf)2.51 E F0 .01(to output the corresponding)2.51 F F2(ar)2.51 E
+(gument)-.37 E F0 .01(in a format that can be reused as shell)2.51 F
+(input.)180 434.4 Q F1(%\()144 446.4 Q F2(datefmt)A F1(\)T)A F0(causes)
+180 458.4 Q F1(printf)4.403 E F0 1.904
+(to output the date-time string resulting from using)4.403 F F2(datefmt)
+4.404 E F0 1.904(as a format)4.404 F .381(string for)180 470.4 R F2
+(strftime)2.881 E F0 2.881(\(3\). The)B(corresponding)2.881 E F2(ar)
+2.881 E(gument)-.37 E F0 .381(is an inte)2.881 F .381
+(ger representing the number)-.15 F .292(of seconds since the epoch.)180
+482.4 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F
+.293(alues may be used: \2551 represents the)-.25 F .694
+(current time, and \2552 represents the time the shell w)180 494.4 R
+.693(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.193(d. If).1 F .693(no ar)
+3.193 F .693(gument is speci-)-.18 F .21(\214ed, con)180 506.4 R -.15
+(ve)-.4 G .21(rsion beha).15 F -.15(ve)-.2 G 2.71(sa).15 G 2.71(si)-2.71
+G 2.71<66ad>-2.71 G 2.71(1h)-2.71 G .21(ad been gi)-2.71 F -.15(ve)-.25
+G 2.71(n. This).15 F .21(is an e)2.71 F .21(xception to the usual)-.15 F
+F1(printf)2.71 E F0(beha)180 518.4 Q(vior)-.2 E(.)-.55 E(Ar)144 535.2 Q
+.464(guments to non-string format speci\214ers are treated as C constan\
+ts, e)-.18 F .463(xcept that a leading plus or)-.15 F 1.258
+(minus sign is allo)144 547.2 R 1.259
+(wed, and if the leading character is a single or double quote, the v)
+-.25 F 1.259(alue is the)-.25 F(ASCII v)144 559.2 Q(alue of the follo)
+-.25 E(wing character)-.25 E(.)-.55 E(The)144 576 Q F2(format)3.424 E F0
+.923(is reused as necessary to consume all of the)3.424 F F2(ar)3.423 E
+(guments)-.37 E F0 5.923(.I)C 3.423(ft)-5.923 G(he)-3.423 E F2(format)
+3.423 E F0 .923(requires more)3.423 F F2(ar)144 588 Q(guments)-.37 E F0
+.033(than are supplied, the e)2.533 F .033
+(xtra format speci\214cations beha)-.15 F .333 -.15(ve a)-.2 H 2.533(si)
+.15 G 2.533(faz)-2.533 G .033(ero v)-2.533 F .034(alue or null string,)
+-.25 F(as appropriate, had been supplied.)144 600 Q(The return v)5 E
+(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd)
+108 616.8 Q F0([)2.5 E F1<ad6e>A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C
+<ad>-2.5 E F2(n)A F0(])A F1(pushd)108 628.8 Q F0([)2.5 E F1<ad6e>A F0
+2.5(][)C F2(dir)-2.5 E F0(])A .64(Adds a directory to the top of the di\
+rectory stack, or rotates the stack, making the ne)144 640.8 R 3.139(wt)
+-.25 G .639(op of the)-3.139 F .416(stack the current w)144 652.8 R .416
+(orking directory)-.1 F 5.416(.W)-.65 G .416(ith no ar)-5.816 F
+(guments,)-.18 E F1(pushd)2.916 E F0 -.15(ex)2.916 G .416
+(changes the top tw).15 F 2.917(od)-.1 G(irectories)-2.917 E 1.625
+(and returns 0, unless the directory stack is empty)144 664.8 R 6.625
+(.A)-.65 G -.18(rg)-6.625 G 1.625(uments, if supplied, ha).18 F 1.925
+-.15(ve t)-.2 H 1.625(he follo).15 F(wing)-.25 E(meanings:)144 676.8 Q
+F1<ad6e>144 688.8 Q F0 1.811(Suppresses the normal change of directory \
+when rotating or adding directories to the)180 688.8 R
+(stack, so that only the stack is manipulated.)180 700.8 Q F1(+)144
+712.8 Q F2(n)A F0 1.268(Rotates the stack so that the)180 712.8 R F2(n)
+3.768 E F0 1.267(th directory \(counting from the left of the list sho)B
+1.267(wn by)-.25 F F1(dirs)180 724.8 Q F0 2.5(,s)C
+(tarting with zero\) is at the top.)-2.5 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(67)188.455 E 0 Cg EP
+%%Page: 68 68
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF<ad>144 84 Q/F2 10/Times-Italic@0 SF(n)A F0 .92
+(Rotates the stack so that the)180 84 R F2(n)3.42 E F0 .92
+(th directory \(counting from the right of the list sho)B .92(wn by)-.25
+F F1(dirs)180 96 Q F0 2.5(,s)C(tarting with zero\) is at the top.)-2.5 E
+F2(dir)144.35 108 Q F0(Adds)180 108 Q F2(dir)3.138 E F0 .288
+(to the directory stack at the top, making it the ne)3.518 F 2.787(wc)
+-.25 G .287(urrent w)-2.787 F .287(orking directory as)-.1 F
+(if it had been supplied as the ar)180 120 Q(gument to the)-.18 E F1(cd)
+2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .488(If the)144 136.8 R F1(pushd)2.988
+E F0 .488(command is successful, a)2.988 F F1(dirs)2.988 E F0 .488
+(is performed as well.)2.988 F .489(If the \214rst form is used,)5.488 F
+F1(pushd)2.989 E F0 1.04(returns 0 unless the cd to)144 148.8 R F2(dir)
+3.89 E F0 -.1(fa)4.27 G 3.539(ils. W).1 F 1.039(ith the second form,)-.4
+F F1(pushd)3.539 E F0 1.039(returns 0 unless the directory)3.539 F .846
+(stack is empty)144 160.8 R 3.346(,an)-.65 G(on-e)-3.346 E .847(xistent\
+ directory stack element is speci\214ed, or the directory change to the)
+-.15 F(speci\214ed ne)144 172.8 Q 2.5(wc)-.25 G(urrent directory f)-2.5
+E(ails.)-.1 E F1(pwd)108 189.6 Q F0([)2.5 E F1(\255LP)A F0(])A .845
+(Print the absolute pathname of the current w)144 201.6 R .845
+(orking directory)-.1 F 5.844(.T)-.65 G .844
+(he pathname printed contains no)-5.844 F .181(symbolic links if the)144
+213.6 R F1<ad50>2.681 E F0 .181(option is supplied or the)2.681 F F1
+.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F1
+(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264
+(enabled. If)144 225.6 R(the)3.264 E F1<ad4c>3.264 E F0 .763
+(option is used, the pathname printed may contain symbolic links.)3.264
+F .763(The return)5.763 F 1.36(status is 0 unless an error occurs while\
+ reading the name of the current directory or an in)144 237.6 R -.25(va)
+-.4 G(lid).25 E(option is supplied.)144 249.6 Q F1 -.18(re)108 266.4 S
+(ad).18 E F0([)3.817 E F1(\255ers)A F0 3.817(][)C F1<ad61>-3.817 E F2
+(aname)3.817 E F0 3.817(][)C F1<ad64>-3.817 E F2(delim)3.817 E F0 3.817
+(][)C F1<ad69>-3.817 E F2(te)3.817 E(xt)-.2 E F0 3.817(][)C F1<ad6e>
+-3.817 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F1<ad4e>-3.816 E
+F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F1<ad70>-3.816 E F2(pr)
+3.816 E(ompt)-.45 E F0 3.816(][)C F1<ad74>-3.816 E F2(timeout)3.816 E F0
+3.816(][)C F1<ad75>-3.816 E F2(fd)3.816 E F0(])A([)108 278.4 Q F2(name)A
+F0(...])2.5 E .516(One line is read from the standard input, or from th\
+e \214le descriptor)144 290.4 R F2(fd)3.016 E F0 .516(supplied as an ar)
+3.016 F .517(gument to)-.18 F(the)144 302.4 Q F1<ad75>3.848 E F0 1.348
+(option, split into w)3.848 F 1.348(ords as described abo)-.1 F 1.647
+-.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)3.847 G 1.347(rd Splitting).75 F
+F0 3.847(,a)C 1.347(nd the \214rst w)-3.847 F 1.347(ord is)-.1 F 1.465
+(assigned to the \214rst)144 314.4 R F2(name)3.965 E F0 3.965(,t).18 G
+1.465(he second w)-3.965 F 1.465(ord to the second)-.1 F F2(name)3.965 E
+F0 3.965(,a).18 G 1.465(nd so on.)-3.965 F 1.465(If there are more)6.465
+F -.1(wo)144 326.4 S 1.112(rds than names, the remaining w).1 F 1.112
+(ords and their interv)-.1 F 1.112
+(ening delimiters are assigned to the last)-.15 F F2(name)144 338.4 Q F0
+5.722(.I).18 G 3.222(ft)-5.722 G .722(here are fe)-3.222 F .722(wer w)
+-.25 F .723
+(ords read from the input stream than names, the remaining names are)-.1
+F .532(assigned empty v)144 350.4 R 3.032(alues. The)-.25 F .532
+(characters in)3.032 F/F3 9/Times-Bold@0 SF(IFS)3.032 E F0 .531
+(are used to split the line into w)2.782 F .531(ords using the same)-.1
+F .197(rules the shell uses for e)144 362.4 R .197
+(xpansion \(described abo)-.15 F .497 -.15(ve u)-.15 H(nder).15 E F1
+-.75(Wo)2.697 G .197(rd Splitting).75 F F0 2.697(\). The)B .197
+(backslash charac-)2.697 F .157(ter \()144 374.4 R F1(\\)A F0 2.657(\)m)
+C .157(ay be used to remo)-2.657 F .457 -.15(ve a)-.15 H .457 -.15(ny s)
+.15 H .157(pecial meaning for the ne).15 F .156
+(xt character read and for line continu-)-.15 F 2.5(ation. Options,)144
+386.4 R(if supplied, ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad61>144 398.4 Q F2(aname)2.5 E F0 1.049
+(The w)180 410.4 R 1.049
+(ords are assigned to sequential indices of the array v)-.1 F(ariable)
+-.25 E F2(aname)3.55 E F0 3.55(,s).18 G 1.05(tarting at 0.)-3.55 F F2
+(aname)180.33 422.4 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5 -.25
+(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F2(name)2.5 E F0(ar)2.5
+E(guments are ignored.)-.18 E F1<ad64>144 434.4 Q F2(delim)2.5 E F0
+1.318(The \214rst character of)180 446.4 R F2(delim)3.818 E F0 1.317
+(is used to terminate the input line, rather than ne)3.818 F 3.817
+(wline. If)-.25 F F2(delim)180 458.4 Q F0(is the empty string,)2.5 E F1
+-.18(re)2.5 G(ad).18 E F0
+(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F1
+<ad65>144 470.4 Q F0 .372
+(If the standard input is coming from a terminal,)180 470.4 R F1 -.18
+(re)2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.873 E F0(abo)
+2.623 E -.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E
+.218(to obtain the line.)180 482.4 R .218
+(Readline uses the current \(or def)5.218 F .218
+(ault, if line editing w)-.1 F .218(as not pre)-.1 F(viously)-.25 E
+(acti)180 494.4 Q -.15(ve)-.25 G 2.5(\)e).15 G(diting settings, b)-2.5 E
+(ut uses Readline')-.2 E 2.5(sd)-.55 G(ef)-2.5 E
+(ault \214lename completion.)-.1 E F1<ad69>144 506.4 Q F2(te)2.5 E(xt)
+-.2 E F0(If)180 506.4 Q F1 -.18(re)2.715 G(adline).18 E F0 .216
+(is being used to read the line,)2.715 F F2(te)2.716 E(xt)-.2 E F0 .216
+(is placed into the editing b)2.716 F(uf)-.2 E .216(fer before edit-)
+-.25 F(ing be)180 518.4 Q(gins.)-.15 E F1<ad6e>144 530.4 Q F2(nc)2.5 E
+(har)-.15 E(s)-.1 E F1 -.18(re)180 542.4 S(ad).18 E F0 1.395
+(returns after reading)3.895 F F2(nc)3.895 E(har)-.15 E(s)-.1 E F0 1.395
+(characters rather than w)3.895 F 1.394(aiting for a complete line of)
+-.1 F(input, b)180 554.4 Q(ut honors a delimiter if fe)-.2 E(wer than)
+-.25 E F2(nc)2.5 E(har)-.15 E(s)-.1 E F0
+(characters are read before the delimiter)2.5 E(.)-.55 E F1<ad4e>144
+566.4 Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 578.4 S(ad).18 E
+F0 1.269(returns after reading e)3.769 F(xactly)-.15 E F2(nc)3.769 E
+(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F 1.27
+(aiting for a complete)-.1 F .275
+(line of input, unless EOF is encountered or)180 590.4 R F1 -.18(re)
+2.775 G(ad).18 E F0 .274(times out.)2.774 F .274
+(Delimiter characters encoun-)5.274 F 1.002
+(tered in the input are not treated specially and do not cause)180 602.4
+R F1 -.18(re)3.503 G(ad).18 E F0 1.003(to return until)3.503 F F2(nc)
+3.503 E(har)-.15 E(s)-.1 E F0 .609(characters are read.)180 614.4 R .608
+(The result is not split on the characters in)5.609 F F1(IFS)3.108 E F0
+3.108(;t)C .608(he intent is that the)-3.108 F -.25(va)180 626.4 S .669
+(riable is assigned e).25 F .669
+(xactly the characters read \(with the e)-.15 F .67
+(xception of backslash; see the)-.15 F F1<ad72>180 638.4 Q F0
+(option belo)2.5 E(w\).)-.25 E F1<ad70>144 650.4 Q F2(pr)2.5 E(ompt)-.45
+E F0(Display)180 662.4 Q F2(pr)3.661 E(ompt)-.45 E F0 1.161
+(on standard error)3.661 F 3.661(,w)-.4 G 1.161(ithout a trailing ne)
+-3.661 F 1.161(wline, before attempting to read)-.25 F(an)180 674.4 Q
+2.5(yi)-.15 G 2.5(nput. The)-2.5 F
+(prompt is displayed only if input is coming from a terminal.)2.5 E F1
+<ad72>144 686.4 Q F0 .543(Backslash does not act as an escape character)
+180 686.4 R 5.543(.T)-.55 G .544
+(he backslash is considered to be part of)-5.543 F .493(the line.)180
+698.4 R .493(In particular)5.493 F 2.993(,ab)-.4 G(ackslash-ne)-2.993 E
+.493(wline pair may not then be used as a line continua-)-.25 F(tion.)
+180 710.4 Q(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(68)188.455 E
+0 Cg EP
+%%Page: 69 69
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF<ad73>144 84 Q F0(Silent mode.)180 84 Q
+(If input is coming from a terminal, characters are not echoed.)5 E F1
+<ad74>144 96 Q/F2 10/Times-Italic@0 SF(timeout)2.5 E F0(Cause)180 108 Q
+F1 -.18(re)2.928 G(ad).18 E F0 .428(to time out and return f)2.928 F
+.428(ailure if a complete line of input \(or a speci\214ed num-)-.1 F
+.561(ber of characters\) is not read within)180 120 R F2(timeout)3.061 E
+F0(seconds.)3.061 E F2(timeout)5.561 E F0 .56(may be a decimal number)
+3.061 F(with a fractional portion follo)180 132 Q
+(wing the decimal point.)-.25 E(This option is only ef)5 E(fecti)-.25 E
+.3 -.15(ve i)-.25 H(f).15 E F1 -.18(re)2.5 G(ad).18 E F0 .506(is readin\
+g input from a terminal, pipe, or other special \214le; it has no ef)180
+144 R .505(fect when reading)-.25 F .589(from re)180 156 R .589
+(gular \214les.)-.15 F(If)5.589 E F1 -.18(re)3.089 G(ad).18 E F0 .589
+(times out,)3.089 F F1 -.18(re)3.089 G(ad).18 E F0(sa)3.089 E -.15(ve)
+-.2 G 3.089(sa).15 G .889 -.15(ny p)-3.089 H .59
+(artial input read into the speci\214ed).15 F -.25(va)180 168 S(riable)
+.25 E F2(name)2.77 E F0 5.27(.I)C(f)-5.27 E F2(timeout)2.77 E F0 .27
+(is 0,)2.77 F F1 -.18(re)2.77 G(ad).18 E F0 .27(returns immediately)2.77
+F 2.77(,w)-.65 G .27(ithout trying to read an)-2.77 F 2.77(yd)-.15 G
+(ata.)-2.77 E 1.12(The e)180 180 R 1.12(xit status is 0 if input is a)
+-.15 F -.25(va)-.2 G 1.12(ilable on the speci\214ed \214le descriptor)
+.25 F 3.62(,n)-.4 G 1.12(on-zero other)-3.62 F(-)-.2 E 2.5(wise. The)180
+192 R -.15(ex)2.5 G(it status is greater than 128 if the timeout is e)
+.15 E(xceeded.)-.15 E F1<ad75>144 204 Q F2(fd)2.5 E F0
+(Read input from \214le descriptor)180 204 Q F2(fd)2.5 E F0(.)A .477
+(If no)144 220.8 R F2(names)3.337 E F0 .477
+(are supplied, the line read is assigned to the v)3.247 F(ariable)-.25 E
+/F3 9/Times-Bold@0 SF(REPL)2.976 E(Y)-.828 E/F4 9/Times-Roman@0 SF(.)A
+F0 .476(The e)4.976 F .476(xit status is zero,)-.15 F .772
+(unless end-of-\214le is encountered,)144 232.8 R F1 -.18(re)3.272 G(ad)
+.18 E F0 .773
+(times out \(in which case the status is greater than 128\), a)3.272 F
+-.25(va)144 244.8 S 2.004
+(riable assignment error \(such as assigning to a readonly v).25 F 2.004
+(ariable\) occurs, or an in)-.25 F -.25(va)-.4 G 2.004(lid \214le).25 F
+(descriptor is supplied as the ar)144 256.8 Q(gument to)-.18 E F1<ad75>
+2.5 E F0(.)A F1 -.18(re)108 273.6 S(adonly).18 E F0([)2.5 E F1(\255aAf)A
+F0 2.5(][)C F1<ad70>-2.5 E F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(wor)A
+(d)-.37 E F0 2.5(].)C(..])-2.5 E .77(The gi)144 285.6 R -.15(ve)-.25 G
+(n).15 E F2(names)3.27 E F0 .77(are mark)3.27 F .77(ed readonly; the v)
+-.1 F .77(alues of these)-.25 F F2(names)3.63 E F0 .77
+(may not be changed by subse-)3.54 F 1.097(quent assignment.)144 297.6 R
+1.097(If the)6.097 F F1<ad66>3.597 E F0 1.097
+(option is supplied, the functions corresponding to the)3.597 F F2
+(names)3.596 E F0 1.096(are so)3.596 F(mark)144 309.6 Q 3.334(ed. The)
+-.1 F F1<ad61>3.334 E F0 .834(option restricts the v)3.334 F .834
+(ariables to inde)-.25 F -.15(xe)-.15 G 3.334(da).15 G .834(rrays; the)
+-3.334 F F1<ad41>3.334 E F0 .834(option restricts the v)3.334 F(ari-)
+-.25 E .777(ables to associati)144 321.6 R 1.077 -.15(ve a)-.25 H 3.277
+(rrays. If).15 F .777(both options are supplied,)3.277 F F1<ad41>3.277 E
+F0(tak)3.277 E .776(es precedence.)-.1 F .776(If no)5.776 F F2(name)
+3.636 E F0(ar)3.456 E(gu-)-.18 E .521(ments are gi)144 333.6 R -.15(ve)
+-.25 G .521(n, or if the).15 F F1<ad70>3.021 E F0 .521
+(option is supplied, a list of all readonly names is printed.)3.021 F
+.522(The other)5.521 F .295(options may be used to restrict the output \
+to a subset of the set of readonly names.)144 345.6 R(The)5.295 E F1
+<ad70>2.795 E F0(option)2.795 E .786
+(causes output to be displayed in a format that may be reused as input.)
+144 357.6 R .786(If a v)5.786 F .786(ariable name is fol-)-.25 F(lo)144
+369.6 Q .718(wed by =)-.25 F F2(wor)A(d)-.37 E F0 3.218(,t)C .718(he v)
+-3.218 F .718(alue of the v)-.25 F .718(ariable is set to)-.25 F F2(wor)
+3.218 E(d)-.37 E F0 5.718(.T)C .718(he return status is 0 unless an in)
+-5.718 F -.25(va)-.4 G(lid).25 E .26(option is encountered, one of the)
+144 381.6 R F2(names)3.12 E F0 .26(is not a v)3.03 F .26(alid shell v)
+-.25 F .26(ariable name, or)-.25 F F1<ad66>2.76 E F0 .26
+(is supplied with a)2.76 F F2(name)144.36 393.6 Q F0
+(that is not a function.)2.68 E F1 -.18(re)108 410.4 S(tur).18 E(n)-.15
+E F0([)2.5 E F2(n)A F0(])A .021(Causes a function to stop e)144 422.4 R
+-.15(xe)-.15 G .021(cuting and return the v).15 F .021
+(alue speci\214ed by)-.25 F F2(n)2.88 E F0 .02(to its caller)2.76 F 5.02
+(.I)-.55 G(f)-5.02 E F2(n)2.88 E F0 .02(is omitted,)2.76 F .596
+(the return status is that of the last command e)144 434.4 R -.15(xe)
+-.15 G .597(cuted in the function body).15 F 5.597(.I)-.65 G(f)-5.597 E
+F1 -.18(re)3.097 G(tur).18 E(n)-.15 E F0 .597(is e)3.097 F -.15(xe)-.15
+G(cuted).15 E 1.239(by a trap handler)144 446.4 R 3.738(,t)-.4 G 1.238
+(he last command used to determine the status is the last command e)
+-3.738 F -.15(xe)-.15 G(cuted).15 E 1.032(before the trap handler)144
+458.4 R 6.032(.I)-.55 G(f)-6.032 E F1 -.18(re)3.532 G(tur).18 E(n)-.15 E
+F0 1.032(is e)3.532 F -.15(xe)-.15 G 1.032(cuted during a).15 F F1(DEB)
+3.533 E(UG)-.1 E F0 1.033(trap, the last command used to)3.533 F .39
+(determine the status is the last command e)144 470.4 R -.15(xe)-.15 G
+.389(cuted by the trap handler before).15 F F1 -.18(re)2.889 G(tur).18 E
+(n)-.15 E F0 -.1(wa)2.889 G 2.889(si).1 G -1.9 -.4(nv o)-2.889 H -.1(ke)
+.4 G(d.).1 E(If)144 482.4 Q F1 -.18(re)2.583 G(tur).18 E(n)-.15 E F0
+.084(is used outside a function, b)2.583 F .084(ut during e)-.2 F -.15
+(xe)-.15 G .084(cution of a script by the).15 F F1(.)2.584 E F0(\()5.084
+E F1(sour)A(ce)-.18 E F0 2.584(\)c)C .084(ommand, it)-2.584 F .589
+(causes the shell to stop e)144 494.4 R -.15(xe)-.15 G .589
+(cuting that script and return either).15 F F2(n)3.448 E F0 .588
+(or the e)3.328 F .588(xit status of the last com-)-.15 F .325(mand e)
+144 506.4 R -.15(xe)-.15 G .325(cuted within the script as the e).15 F
+.326(xit status of the script.)-.15 F(If)5.326 E F2(n)2.826 E F0 .326
+(is supplied, the return v)2.826 F .326(alue is)-.25 F .445
+(its least signi\214cant 8 bits.)144 518.4 R .444
+(The return status is non-zero if)5.445 F F1 -.18(re)2.944 G(tur).18 E
+(n)-.15 E F0 .444(is supplied a non-numeric ar)2.944 F(gu-)-.18 E .381
+(ment, or is used outside a function and not during e)144 530.4 R -.15
+(xe)-.15 G .381(cution of a script by).15 F F1(.)2.881 E F0(or)3.714 E
+F1(sour)2.881 E(ce)-.18 E F0 5.381(.A)C .681 -.15(ny c)-5.381 H(om-).15
+E .75(mand associated with the)144 542.4 R F1(RETURN)3.249 E F0 .749
+(trap is e)3.249 F -.15(xe)-.15 G .749(cuted before e).15 F -.15(xe)-.15
+G .749(cution resumes after the function).15 F(or script.)144 554.4 Q F1
+(set)108 571.2 Q F0([)2.5 E F1(\255\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C
+F1<ad6f>-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E
+F0(...])2.5 E F1(set)108 583.2 Q F0([)2.5 E F1(+abefhkmnptuvxBCEHPT)A F0
+2.5(][)C F1(+o)-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F2(ar)-2.5 E
+(g)-.37 E F0(...])2.5 E -.4(Wi)144 595.2 S .835
+(thout options, the name and v).4 F .835(alue of each shell v)-.25 F
+.836(ariable are displayed in a format that can be)-.25 F .784
+(reused as input for setting or resetting the currently-set v)144 607.2
+R 3.284(ariables. Read-only)-.25 F -.25(va)3.284 G .783
+(riables cannot be).25 F 2.946(reset. In)144 619.2 R F2 .447(posix mode)
+2.946 F F0 2.947(,o)C .447(nly shell v)-2.947 F .447
+(ariables are listed.)-.25 F .447
+(The output is sorted according to the current)5.447 F 3.531
+(locale. When)144 631.2 R 1.031(options are speci\214ed, the)3.531 F
+3.531(ys)-.15 G 1.031(et or unset shell attrib)-3.531 F 3.53(utes. An)
+-.2 F 3.53(ya)-.15 G -.18(rg)-3.53 G 1.03(uments remaining).18 F 1.623
+(after option processing are treated as v)144 643.2 R 1.624
+(alues for the positional parameters and are assigned, in)-.25 F(order)
+144 655.2 Q 2.5(,t)-.4 G(o)-2.5 E F1($1)2.5 E F0(,)A F1($2)2.5 E F0(,)A
+F1 2.5(... $)2.5 F F2(n)A F0 5(.O)C(ptions, if speci\214ed, ha)-5 E .3
+-.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad61>144 667.2 Q
+F0 1.378(Each v)184 667.2 R 1.377
+(ariable or function that is created or modi\214ed is gi)-.25 F -.15(ve)
+-.25 G 3.877(nt).15 G 1.377(he e)-3.877 F 1.377(xport attrib)-.15 F
+1.377(ute and)-.2 F(mark)184 679.2 Q(ed for e)-.1 E(xport to the en)-.15
+E(vironment of subsequent commands.)-.4 E F1<ad62>144 691.2 Q F0 .131
+(Report the status of terminated background jobs immediately)184 691.2 R
+2.632(,r)-.65 G .132(ather than before the ne)-2.632 F(xt)-.15 E
+(primary prompt.)184 703.2 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)
+-.25 H(nly when job control is enabled.).15 E F1<ad65>144 715.2 Q F0
+.088(Exit immediately if a)184 715.2 R F2(pipeline)2.588 E F0 .087
+(\(which may consist of a single)2.588 F F2 .087(simple command)2.587 F
+F0 .087(\), a)B F2(list)2.587 E F0 2.587(,o)C(r)-2.587 E(a)184 727.2 Q
+F2 1.52(compound command)4.02 F F0(\(see)4.021 E F3 1.521(SHELL GRAMMAR)
+4.021 F F0(abo)3.771 E -.15(ve)-.15 G 1.521(\), e).15 F 1.521
+(xits with a non-zero status.)-.15 F(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(69)188.455 E 0 Cg EP
+%%Page: 70 70
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .08
+(The shell does not e)184 84 R .079(xit if the command that f)-.15 F
+.079(ails is part of the command list immediately)-.1 F(follo)184 96 Q
+1.654(wing a)-.25 F/F1 10/Times-Bold@0 SF(while)4.154 E F0(or)4.154 E F1
+(until)4.154 E F0 -.1(ke)4.154 G(yw)-.05 E 1.655
+(ord, part of the test follo)-.1 F 1.655(wing the)-.25 F F1(if)4.155 E
+F0(or)4.155 E F1(elif)4.155 E F0(reserv)4.155 E(ed)-.15 E -.1(wo)184 108
+S .582(rds, part of an).1 F 3.082(yc)-.15 G .582(ommand e)-3.082 F -.15
+(xe)-.15 G .581(cuted in a).15 F F1(&&)3.081 E F0(or)3.081 E F1(||)3.081
+E F0 .581(list e)3.081 F .581(xcept the command follo)-.15 F(wing)-.25 E
+.917(the \214nal)184 120 R F1(&&)3.417 E F0(or)3.417 E F1(||)3.417 E F0
+3.417(,a)C 1.217 -.15(ny c)-3.417 H .918(ommand in a pipeline b).15 F
+.918(ut the last, or if the command')-.2 F 3.418(sr)-.55 G(eturn)-3.418
+E -.25(va)184 132 S .661(lue is being in).25 F -.15(ve)-.4 G .661
+(rted with).15 F F1(!)3.161 E F0 5.661(.I)C 3.161(fac)-5.661 G .66
+(ompound command other than a subshell returns a)-3.161 F 1.112
+(non-zero status because a command f)184 144 R 1.112(ailed while)-.1 F
+F1<ad65>3.612 E F0 -.1(wa)3.612 G 3.612(sb).1 G 1.113
+(eing ignored, the shell does)-3.612 F .178(not e)184 156 R 2.678
+(xit. A)-.15 F .178(trap on)2.678 F F1(ERR)2.678 E F0 2.678(,i)C 2.678
+(fs)-2.678 G .178(et, is e)-2.678 F -.15(xe)-.15 G .178
+(cuted before the shell e).15 F 2.677(xits. This)-.15 F .177
+(option applies to)2.677 F .617(the shell en)184 168 R .617
+(vironment and each subshell en)-.4 F .617(vironment separately \(see)
+-.4 F/F2 9/Times-Bold@0 SF .618(COMMAND EXE-)3.118 F .643(CUTION ENVIR)
+184 180 R(ONMENT)-.27 E F0(abo)2.893 E -.15(ve)-.15 G .643
+(\), and may cause subshells to e).15 F .643(xit before e)-.15 F -.15
+(xe)-.15 G .642(cuting all).15 F(the commands in the subshell.)184 192 Q
+2.042(If a compound command or shell function e)184 210 R -.15(xe)-.15 G
+2.042(cutes in a conte).15 F 2.042(xt where)-.15 F F1<ad65>4.542 E F0
+2.043(is being)4.543 F 1.436(ignored, none of the commands e)184 222 R
+-.15(xe)-.15 G 1.435(cuted within the compound command or function).15 F
+.193(body will be af)184 234 R .193(fected by the)-.25 F F1<ad65>2.693 E
+F0 .193(setting, e)2.693 F -.15(ve)-.25 G 2.693(ni).15 G(f)-2.693 E F1
+<ad65>2.693 E F0 .194(is set and a command returns a f)2.693 F(ailure)
+-.1 E 3.39(status. If)184 246 R 3.39(ac)3.39 G .89
+(ompound command or shell function sets)-3.39 F F1<ad65>3.39 E F0 .89
+(while e)3.39 F -.15(xe)-.15 G .89(cuting in a conte).15 F(xt)-.15 E
+(where)184 258 Q F1<ad65>3.153 E F0 .653
+(is ignored, that setting will not ha)3.153 F .954 -.15(ve a)-.2 H .954
+-.15(ny e).15 H -.25(ff).15 G .654(ect until the compound command).25 F
+(or the command containing the function call completes.)184 270 Q F1
+<ad66>144 282 Q F0(Disable pathname e)184 282 Q(xpansion.)-.15 E F1
+<ad68>144 294 Q F0 2.239(Remember the location of commands as the)184
+294 R 4.738(ya)-.15 G 2.238(re look)-4.738 F 2.238(ed up for e)-.1 F
+-.15(xe)-.15 G 4.738(cution. This).15 F(is)4.738 E(enabled by def)184
+306 Q(ault.)-.1 E F1<ad6b>144 318 Q F0 .513(All ar)184 318 R .514
+(guments in the form of assignment statements are placed in the en)-.18
+F .514(vironment for a)-.4 F
+(command, not just those that precede the command name.)184 330 Q F1
+<ad6d>144 342 Q F0 .149(Monitor mode.)184 342 R .149
+(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F
+.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .65
+(on systems that support it \(see)184 354 R F2 .651(JOB CONTR)3.151 F
+(OL)-.27 E F0(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .651
+(processes run in a separate)3.151 F .679(process group.)184 366 R .678
+(When a background job completes, the shell prints a line containing it\
+s)5.679 F -.15(ex)184 378 S(it status.).15 E F1<ad6e>144 390 Q F0 .652
+(Read commands b)184 390 R .652(ut do not e)-.2 F -.15(xe)-.15 G .652
+(cute them.).15 F .653(This may be used to check a shell script for)
+5.652 F(syntax errors.)184 402 Q(This is ignored by interacti)5 E .3
+-.15(ve s)-.25 H(hells.).15 E F1<ad6f>144 414 Q/F3 10/Times-Italic@0 SF
+(option\255name)2.5 E F0(The)184 426 Q F3(option\255name)2.5 E F0
+(can be one of the follo)2.5 E(wing:)-.25 E F1(allexport)184 438 Q F0
+(Same as)224 450 Q F1<ad61>2.5 E F0(.)A F1(braceexpand)184 462 Q F0
+(Same as)224 474 Q F1<ad42>2.5 E F0(.)A F1(emacs)184 486 Q F0 .089
+(Use an emacs-style command line editing interf)224 486 R 2.589
+(ace. This)-.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95
+(when the shell is interacti)224 498 R -.15(ve)-.25 G 3.45(,u).15 G .95
+(nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E
+F0 2.5(option. This)224 510 R(also af)2.5 E(fects the editing interf)
+-.25 E(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(err)
+184 522 Q(exit)-.18 E F0(Same as)224 522 Q F1<ad65>2.5 E F0(.)A F1
+(errtrace)184 534 Q F0(Same as)224 534 Q F1<ad45>2.5 E F0(.)A F1
+(functrace)184 546 Q F0(Same as)224 558 Q F1<ad54>2.5 E F0(.)A F1
+(hashall)184 570 Q F0(Same as)224 570 Q F1<ad68>2.5 E F0(.)A F1
+(histexpand)184 582 Q F0(Same as)224 594 Q F1<ad48>2.5 E F0(.)A F1
+(history)184 606 Q F0 .587(Enable command history)224 606 R 3.087(,a)
+-.65 G 3.087(sd)-3.087 G .587(escribed abo)-3.087 F .887 -.15(ve u)-.15
+H(nder).15 E F2(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 SF
+(.)A F0 .587(This option is)5.087 F(on by def)224 618 Q
+(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184
+630 Q(eeof)-.18 E F0 1.656(The ef)224 642 R 1.656
+(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF(IGNOREEOF=10)
+4.157 E F0 1.657(had been e)4.157 F -.15(xe)-.15 G(cuted).15 E(\(see)224
+654 Q F1(Shell V)2.5 E(ariables)-.92 E F0(abo)2.5 E -.15(ve)-.15 G(\).)
+.15 E F1 -.1(ke)184 666 S(yw).1 E(ord)-.1 E F0(Same as)224 678 Q F1
+<ad6b>2.5 E F0(.)A F1(monitor)184 690 Q F0(Same as)224 690 Q F1<ad6d>2.5
+E F0(.)A F1(noclob)184 702 Q(ber)-.1 E F0(Same as)224 714 Q F1<ad43>2.5
+E F0(.)A(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(70)188.455 E 0
+Cg EP
+%%Page: 71 71
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(noexec)184 84 Q F0(Same as)224 84 Q F1<ad6e>2.5 E F0(.)A F1(noglob)
+184 96 Q F0(Same as)224 96 Q F1<ad66>2.5 E F0(.)A F1(nolog)184 108 Q F0
+(Currently ignored.)224 108 Q F1(notify)184 120 Q F0(Same as)224 120 Q
+F1<ad62>2.5 E F0(.)A F1(nounset)184 132 Q F0(Same as)224 132 Q F1<ad75>
+2.5 E F0(.)A F1(onecmd)184 144 Q F0(Same as)224 144 Q F1<ad74>2.5 E F0
+(.)A F1(ph)184 156 Q(ysical)-.15 E F0(Same as)224 156 Q F1<ad50>2.5 E F0
+(.)A F1(pipefail)184 168 Q F0 1.03(If set, the return v)224 168 R 1.029
+(alue of a pipeline is the v)-.25 F 1.029
+(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 180 R
+1.136
+(xit with a non-zero status, or zero if all commands in the pipeline)
+-.15 F -.15(ex)224 192 S(it successfully).15 E 5(.T)-.65 G
+(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 204 Q F0
+2.091(Change the beha)224 204 R 2.091(vior of)-.2 F F1(bash)4.591 E F0
+2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091
+(fers from the)-.25 F 1.212(POSIX standard to match the standard \()224
+216 R/F2 10/Times-Italic@0 SF 1.212(posix mode)B F0 3.712(\). See)B/F3 9
+/Times-Bold@0 SF 1.212(SEE ALSO)3.712 F F0(belo)3.463 E(w)-.25 E 2.307
+(for a reference to a document that details ho)224 228 R 4.806(wp)-.25 G
+2.306(osix mode af)-4.806 F 2.306(fects bash')-.25 F(s)-.55 E(beha)224
+240 Q(vior)-.2 E(.)-.55 E F1(pri)184 252 Q(vileged)-.1 E F0(Same as)224
+264 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 276 S(rbose).1 E F0(Same as)224
+276 Q F1<ad76>2.5 E F0(.)A F1(vi)184 288 Q F0 1.465
+(Use a vi-style command line editing interf)224 288 R 3.966(ace. This)
+-.1 F 1.466(also af)3.966 F 1.466(fects the editing)-.25 F(interf)224
+300 Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1
+(xtrace)184 312 Q F0(Same as)224 312 Q F1<ad78>2.5 E F0(.)A(If)184 330 Q
+F1<ad6f>3.053 E F0 .553(is supplied with no)3.053 F F2(option\255name)
+3.053 E F0 3.053(,t)C .553(he v)-3.053 F .552
+(alues of the current options are printed.)-.25 F(If)5.552 E F1(+o)184
+342 Q F0 1.071(is supplied with no)3.571 F F2(option\255name)3.571 E F0
+3.571(,as)C 1.071(eries of)-3.571 F F1(set)3.572 E F0 1.072
+(commands to recreate the current)3.572 F
+(option settings is displayed on the standard output.)184 354 Q F1<ad70>
+144 366 Q F0 -.45(Tu)184 366 S 1.072(rn on).45 F F2(privile)4.822 E -.1
+(ge)-.4 G(d).1 E F0 3.572(mode. In)4.342 F 1.072(this mode, the)3.572 F
+F3($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)-.27 E F0 1.071
+(\214les are not pro-)3.322 F 1.5
+(cessed, shell functions are not inherited from the en)184 378 R 1.501
+(vironment, and the)-.4 F F3(SHELLOPTS)4.001 E/F4 9/Times-Roman@0 SF(,)A
+F3 -.27(BA)184 390 S(SHOPTS).27 E F4(,)A F3(CDP)2.775 E -.855(AT)-.666 G
+(H).855 E F4(,)A F0(and)2.775 E F3(GLOBIGNORE)3.025 E F0 -.25(va)2.775 G
+.524(riables, if the).25 F 3.024(ya)-.15 G .524(ppear in the en)-3.024 F
+(vironment,)-.4 E .379(are ignored.)184 402 R .379
+(If the shell is started with the ef)5.379 F(fecti)-.25 E .679 -.15
+(ve u)-.25 H .38(ser \(group\) id not equal to the real).15 F .462
+(user \(group\) id, and the)184 414 R F1<ad70>2.961 E F0 .461
+(option is not supplied, these actions are tak)2.961 F .461
+(en and the ef)-.1 F(fec-)-.25 E(ti)184 426 Q .694 -.15(ve u)-.25 H .394
+(ser id is set to the real user id.).15 F .395(If the)5.395 F F1<ad70>
+2.895 E F0 .395(option is supplied at startup, the ef)2.895 F(fecti)-.25
+E -.15(ve)-.25 G .387(user id is not reset.)184 438 R -.45(Tu)5.387 G
+.387(rning this option of).45 F 2.886(fc)-.25 G .386(auses the ef)-2.886
+F(fecti)-.25 E .686 -.15(ve u)-.25 H .386(ser and group ids to be).15 F
+(set to the real user and group ids.)184 450 Q F1<ad74>144 462 Q F0
+(Exit after reading and e)184 462 Q -.15(xe)-.15 G(cuting one command.)
+.15 E F1<ad75>144 474 Q F0 -.35(Tr)184 474 S .043(eat unset v).35 F .044
+(ariables and parameters other than the special parameters "@" and "*" \
+as an)-.25 F .183(error when performing parameter e)184 486 R 2.683
+(xpansion. If)-.15 F -.15(ex)2.683 G .182
+(pansion is attempted on an unset v).15 F(ari-)-.25 E .746
+(able or parameter)184 498 R 3.246(,t)-.4 G .746
+(he shell prints an error message, and, if not interacti)-3.246 F -.15
+(ve)-.25 G 3.246(,e).15 G .746(xits with a)-3.396 F(non-zero status.)184
+510 Q F1<ad76>144 522 Q F0(Print shell input lines as the)184 522 Q 2.5
+(ya)-.15 G(re read.)-2.5 E F1<ad78>144 534 Q F0 .315(After e)184 534 R
+.315(xpanding each)-.15 F F2 .315(simple command)2.815 F F0(,)A F1 -.25
+(fo)2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E F0(command,)
+2.815 E F1(select)2.815 E F0(command,)2.815 E 1.235(or arithmetic)184
+546 R F1 -.25(fo)3.736 G(r).25 E F0 1.236(command, display the e)3.736 F
+1.236(xpanded v)-.15 F 1.236(alue of)-.25 F F3(PS4)3.736 E F4(,)A F0
+(follo)3.486 E 1.236(wed by the com-)-.25 F(mand and its e)184 558 Q
+(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E F1
+<ad42>144 570 Q F0 2.579(The shell performs brace e)184 570 R 2.578
+(xpansion \(see)-.15 F F1 2.578(Brace Expansion)5.078 F F0(abo)5.078 E
+-.15(ve)-.15 G 5.078(\). This).15 F 2.578(is on by)5.078 F(def)184 582 Q
+(ault.)-.1 E F1<ad43>144 594 Q F0 .213(If set,)184 594 R F1(bash)2.713 E
+F0 .213(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F .214
+(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0
+2.714(,a)C(nd)-2.714 E F1(<>)2.714 E F0 .214(redirection opera-)2.714 F
+3.054(tors. This)184 606 R .553(may be o)3.053 F -.15(ve)-.15 G .553
+(rridden when creating output \214les by using the redirection opera-)
+.15 F(tor)184 618 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
+<ad45>144 630 Q F0 .103(If set, an)184 630 R 2.603(yt)-.15 G .103
+(rap on)-2.603 F F1(ERR)2.603 E F0 .104
+(is inherited by shell functions, command substitutions, and com-)2.603
+F .839(mands e)184 642 R -.15(xe)-.15 G .839(cuted in a subshell en).15
+F 3.339(vironment. The)-.4 F F1(ERR)3.338 E F0 .838
+(trap is normally not inherited in)3.338 F(such cases.)184 654 Q F1
+<ad48>144 666 Q F0(Enable)184 666 Q F1(!)3.031 E F0 .531
+(style history substitution.)5.531 F .531(This option is on by def)5.531
+F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 678 Q -.15
+(ve)-.25 G(.).15 E F1<ad50>144 690 Q F0 .96
+(If set, the shell does not resolv)184 690 R 3.459(es)-.15 G .959
+(ymbolic links when e)-3.459 F -.15(xe)-.15 G .959
+(cuting commands such as).15 F F1(cd)3.459 E F0 2.821
+(that change the current w)184 702 R 2.822(orking directory)-.1 F 7.822
+(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.822
+(ysical directory structure)-.05 F 2.686(instead. By)184 714 R(def)2.686
+E(ault,)-.1 E F1(bash)2.686 E F0(follo)2.686 E .186
+(ws the logical chain of directories when performing com-)-.25 F
+(mands which change the current directory)184 726 Q(.)-.65 E
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(71)188.455 E 0 Cg EP
+%%Page: 72 72
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF<ad54>144 84 Q F0 .89(If set, an)184 84 R 3.39(yt)-.15 G .89(raps on)
+-3.39 F F1(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89
+(are inherited by shell functions, command)3.39 F 1.932
+(substitutions, and commands e)184 96 R -.15(xe)-.15 G 1.932
+(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E
+(UG)-.1 E F0(and)4.432 E F1(RETURN)184 108 Q F0
+(traps are normally not inherited in such cases.)2.5 E F1<adad>144 120 Q
+F0 .4(If no ar)184 120 R .401(guments follo)-.18 F 2.901(wt)-.25 G .401
+(his option, then the positional parameters are unset.)-2.901 F
+(Otherwise,)5.401 E(the positional parameters are set to the)184 132 Q
+/F2 10/Times-Italic@0 SF(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5
+(ni).15 G 2.5(fs)-2.5 G(ome of them be)-2.5 E(gin with a)-.15 E F1<ad>
+2.5 E F0(.)A F1<ad>144 144 Q F0 1.945
+(Signal the end of options, cause all remaining)184 144 R F2(ar)4.444 E
+(g)-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.444(ea)-4.444 G 1.944
+(ssigned to the positional)-4.444 F 3.445(parameters. The)184 156 R F1
+<ad78>3.445 E F0(and)3.445 E F1<ad76>3.445 E F0 .945
+(options are turned of)3.445 F 3.445(f. If)-.25 F .946(there are no)
+3.445 F F2(ar)3.446 E(g)-.37 E F0 .946(s, the positional)B
+(parameters remain unchanged.)184 168 Q .425(The options are of)144
+184.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425
+(ault unless otherwise noted.)-.1 F .425
+(Using + rather than \255 causes these options)5.425 F .177
+(to be turned of)144 196.8 R 2.677(f. The)-.25 F .178
+(options can also be speci\214ed as ar)2.678 F .178(guments to an in)
+-.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066
+(current set of options may be found in)144 208.8 R F1<24ad>2.566 E F0
+5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066
+(ys true unless an in).1 F -.25(va)-.4 G .066(lid option).25 F
+(is encountered.)144 220.8 Q F1(shift)108 237.6 Q F0([)2.5 E F2(n)A F0
+(])A .428(The positional parameters from)144 249.6 R F2(n)2.928 E F0
+.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.429 G
+.429(rameters represented by the num-).15 F(bers)144 261.6 Q F1($#)2.583
+E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0<ad>A F2(n)A F0 .083
+(+1 are unset.)B F2(n)5.443 E F0 .083(must be a non-ne)2.823 F -.05(ga)
+-.15 G(ti).05 E .382 -.15(ve n)-.25 H .082(umber less than or equal to)
+.15 F F1($#)2.582 E F0 5.082(.I)C(f)-5.082 E F2(n)2.942 E F0 .06
+(is 0, no parameters are changed.)144 273.6 R(If)5.06 E F2(n)2.92 E F0
+.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F
+(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56
+(,t)C(he)-2.56 E .144(positional parameters are not changed.)144 285.6 R
+.144(The return status is greater than zero if)5.144 F F2(n)3.003 E F0
+.143(is greater than)2.883 F F1($#)2.643 E F0
+(or less than zero; otherwise 0.)144 297.6 Q F1(shopt)108 314.4 Q F0([)
+2.5 E F1(\255pqsu)A F0 2.5(][)C F1<ad6f>-2.5 E F0 2.5(][)C F2(optname)
+-2.5 E F0(...])2.5 E -.8(To)144 326.4 S .639(ggle the v).8 F .639
+(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E
+5.639(.T)-.55 G .64(he settings can be either those)-5.639 F .375
+(listed belo)144 338.4 R 1.675 -.65(w, o)-.25 H 1.175 -.4(r, i).65 H
+2.875(ft).4 G(he)-2.875 E F1<ad6f>2.875 E F0 .375
+(option is used, those a)2.875 F -.25(va)-.2 G .375(ilable with the).25
+F F1<ad6f>2.875 E F0 .374(option to the)2.875 F F1(set)2.874 E F0 -.2
+(bu)2.874 G .374(iltin com-).2 F 3.325(mand. W)144 350.4 R .825
+(ith no options, or with the)-.4 F F1<ad70>3.325 E F0 .826
+(option, a list of all settable options is displayed, with an)3.325 F
+.552(indication of whether or not each is set; if)144 362.4 R F2
+(optnames)3.052 E F0 .551
+(are supplied, the output is restricted to those)3.052 F 2.549
+(options. The)144 374.4 R F1<ad70>2.549 E F0 .049(option causes output \
+to be displayed in a form that may be reused as input.)2.549 F(Other)
+5.05 E(options ha)144 386.4 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad73>144 398.4 Q F0(Enable \(set\) each)180
+398.4 Q F2(optname)2.5 E F0(.)A F1<ad75>144 410.4 Q F0
+(Disable \(unset\) each)180 410.4 Q F2(optname)2.5 E F0(.)A F1<ad71>144
+422.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\
+tus indicates whether the)180 422.4 R F2(optname)2.503 E F0(is)2.503 E
+.255(set or unset.)180 434.4 R .255(If multiple)5.255 F F2(optname)2.755
+E F0(ar)2.755 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G
+(ith)-2.756 E F1<ad71>2.756 E F0 2.756(,t)C .256
+(he return status is zero if)-2.756 F(all)180 446.4 Q F2(optnames)2.5 E
+F0(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 458.4 Q F0
+(Restricts the v)180 458.4 Q(alues of)-.25 E F2(optname)2.5 E F0
+(to be those de\214ned for the)2.5 E F1<ad6f>2.5 E F0(option to the)2.5
+E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .625(If either)144 475.2 R F1
+<ad73>3.125 E F0(or)3.124 E F1<ad75>3.124 E F0 .624(is used with no)
+3.124 F F2(optname)3.124 E F0(ar)3.124 E(guments,)-.18 E F1(shopt)3.124
+E F0(sho)3.124 E .624(ws only those options which are)-.25 F 2.233
+(set or unset, respecti)144 487.2 R -.15(ve)-.25 G(ly).15 E 7.234(.U)
+-.65 G 2.234(nless otherwise noted, the)-7.234 F F1(shopt)4.734 E F0
+2.234(options are disabled \(unset\) by)4.734 F(def)144 499.2 Q(ault.)
+-.1 E 1.544(The return status when listing options is zero if all)144
+516 R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)
+4.044 F .696
+(When setting or unsetting options, the return status is zero unless an)
+144 528 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696(alid shell)
+-.25 F(option.)144 540 Q(The list of)144 556.8 Q F1(shopt)2.5 E F0
+(options is:)2.5 E F1(assoc_expand_once)144 574.8 Q F0 1.945
+(If set, the shell suppresses multiple e)184 586.8 R -.25(va)-.25 G
+1.944(luation of associati).25 F 2.244 -.15(ve a)-.25 H 1.944
+(rray subscripts during).15 F 2.556(arithmetic e)184 598.8 R 2.556
+(xpression e)-.15 F -.25(va)-.25 G 2.556(luation, while e).25 F -.15(xe)
+-.15 G 2.557(cuting b).15 F 2.557(uiltins that can perform v)-.2 F
+(ariable)-.25 E(assignments, and while e)184 610.8 Q -.15(xe)-.15 G
+(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E F1
+(autocd)144 622.8 Q F0 .2
+(If set, a command name that is the name of a directory is e)184 622.8 R
+-.15(xe)-.15 G .199(cuted as if it were the ar).15 F(gu-)-.18 E
+(ment to the)184 634.8 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F
+(option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E
+F1(cdable_v)144 646.8 Q(ars)-.1 E F0 .155(If set, an ar)184 658.8 R .155
+(gument to the)-.18 F F1(cd)2.655 E F0 -.2(bu)2.655 G .156
+(iltin command that is not a directory is assumed to be the).2 F
+(name of a v)184 670.8 Q(ariable whose v)-.25 E
+(alue is the directory to change to.)-.25 E F1(cdspell)144 682.8 Q F0
+1.055
+(If set, minor errors in the spelling of a directory component in a)184
+682.8 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987
+(corrected. The)184 694.8 R 1.487(errors check)3.987 F 1.487
+(ed for are transposed characters, a missing character)-.1 F 3.988(,a)
+-.4 G(nd)-3.988 E .77(one character too man)184 706.8 R 4.57 -.65(y. I)
+-.15 H 3.27(fac).65 G .77
+(orrection is found, the corrected \214lename is printed, and)-3.27 F
+(the command proceeds.)184 718.8 Q
+(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.)
+.15 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(72)188.455 E 0 Cg
+EP
+%%Page: 73 73
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(checkhash)144 84 Q F0 .736(If set,)184 96 R F1(bash)3.236 E F0 .736
+(checks that a command found in the hash table e)3.236 F .737
+(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 108
+Q(If a hashed command no longer e)5 E
+(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 120 Q
+F0 .449(If set,)184 132 R F1(bash)2.949 E F0 .449
+(lists the status of an)2.949 F 2.949(ys)-.15 G .448
+(topped and running jobs before e)-2.949 F .448(xiting an interacti)-.15
+F -.15(ve)-.25 G 3.438(shell. If)184 144 R(an)3.438 E 3.438(yj)-.15 G
+.938(obs are running, this causes the e)-3.438 F .938
+(xit to be deferred until a second e)-.15 F .939(xit is)-.15 F 2.203
+(attempted without an interv)184 156 R 2.203(ening command \(see)-.15 F
+/F2 9/Times-Bold@0 SF 2.203(JOB CONTR)4.703 F(OL)-.27 E F0(abo)4.453 E
+-.15(ve)-.15 G 4.703(\). The).15 F(shell)4.703 E(al)184 168 Q -.1(wa)-.1
+G(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G
+(obs are stopped.)-2.5 E F1(checkwinsize)144 180 Q F0 1.09(If set,)184
+192 R F1(bash)3.59 E F0 1.09(checks the windo)3.59 F 3.59(ws)-.25 G 1.09
+(ize after each e)-3.59 F 1.09(xternal \(non-b)-.15 F 1.09
+(uiltin\) command and, if)-.2 F(necessary)184 204 Q 4.694(,u)-.65 G
+2.194(pdates the v)-4.694 F 2.194(alues of)-.25 F F2(LINES)4.694 E F0
+(and)4.444 E F2(COLUMNS)4.693 E/F3 9/Times-Roman@0 SF(.)A F0 2.193
+(This option is enabled by)6.693 F(def)184 216 Q(ault.)-.1 E F1(cmdhist)
+144 228 Q F0 1.202(If set,)184 228 R F1(bash)3.702 E F0 1.202
+(attempts to sa)3.702 F 1.502 -.15(ve a)-.2 H 1.202
+(ll lines of a multiple-line command in the same history).15 F(entry)184
+240 Q 6.133(.T)-.65 G 1.133(his allo)-6.133 F 1.133
+(ws easy re-editing of multi-line commands.)-.25 F 1.132
+(This option is enabled by)6.132 F(def)184 252 Q .613(ault, b)-.1 F .613
+(ut only has an ef)-.2 F .614
+(fect if command history is enabled, as described abo)-.25 F .914 -.15
+(ve u)-.15 H(nder).15 E F2(HIST)184 264 Q(OR)-.162 E(Y)-.315 E F3(.)A F1
+(compat31)144 276 Q F0 .42(If set,)184 288 R F1(bash)2.92 E F0 .42
+(changes its beha)2.92 F .419(vior to that of v)-.2 F .419
+(ersion 3.1 with respect to quoted ar)-.15 F(guments)-.18 E .461(to the)
+184 300 R F1([[)2.961 E F0 .462(conditional command')2.962 F(s)-.55 E F1
+(=~)2.962 E F0 .462
+(operator and locale-speci\214c string comparison when)2.962 F .71
+(using the)184 312 R F1([[)3.21 E F0 .71(conditional command')3.21 F(s)
+-.55 E F1(<)3.21 E F0(and)3.21 E F1(>)3.21 E F0 3.21(operators. Bash)
+3.21 F -.15(ve)3.21 G .71(rsions prior to bash-4.1).15 F .82
+(use ASCII collation and)184 324 R/F4 10/Times-Italic@0 SF(str)3.321 E
+(cmp)-.37 E F0 .821(\(3\); bash-4.1 and later use the current locale')
+.19 F 3.321(sc)-.55 G(ollation)-3.321 E(sequence and)184 336 Q F4(str)
+2.5 E(coll)-.37 E F0(\(3\).).51 E F1(compat32)144 348 Q F0 1.41(If set,)
+184 360 R F1(bash)3.91 E F0 1.41(changes its beha)3.91 F 1.409
+(vior to that of v)-.2 F 1.409
+(ersion 3.2 with respect to locale-speci\214c)-.15 F .422
+(string comparison when using the)184 372 R F1([[)2.922 E F0 .422
+(conditional command')2.922 F(s)-.55 E F1(<)2.922 E F0(and)2.922 E F1(>)
+2.923 E F0 .423(operators \(see pre-)2.923 F .481
+(vious item\) and the ef)184 384 R .481
+(fect of interrupting a command list.)-.25 F .48(Bash v)5.481 F .48
+(ersions 3.2 and earlier)-.15 F(continue with the ne)184 396 Q
+(xt command in the list after one terminates due to an interrupt.)-.15 E
+F1(compat40)144 408 Q F0 1.409(If set,)184 420 R F1(bash)3.909 E F0
+1.409(changes its beha)3.909 F 1.409(vior to that of v)-.2 F 1.41
+(ersion 4.0 with respect to locale-speci\214c)-.15 F 2.008
+(string comparison when using the)184 432 R F1([[)4.508 E F0 2.007
+(conditional command')4.508 F(s)-.55 E F1(<)4.507 E F0(and)4.507 E F1(>)
+4.507 E F0 2.007(operators \(see)4.507 F .769(description of)184 444 R
+F1(compat31)3.269 E F0 3.269(\)a)C .769(nd the ef)-3.269 F .769
+(fect of interrupting a command list.)-.25 F .77(Bash v)5.77 F(ersions)
+-.15 E .087(4.0 and later interrupt the list as if the shell recei)184
+456 R -.15(ve)-.25 G 2.586(dt).15 G .086(he interrupt; pre)-2.586 F .086
+(vious v)-.25 F .086(ersions con-)-.15 F(tinue with the ne)184 468 Q
+(xt command in the list.)-.15 E F1(compat41)144 480 Q F0 1.523(If set,)
+184 492 R F1(bash)4.023 E F0 4.023(,w)C 1.523(hen in)-4.023 F F4 1.523
+(posix mode)4.023 F F0 4.024(,t)C 1.524
+(reats a single quote in a double-quoted parameter)-4.024 F -.15(ex)184
+504 S .959(pansion as a special character).15 F 5.959(.T)-.55 G .958
+(he single quotes must match \(an e)-5.959 F -.15(ve)-.25 G 3.458(nn).15
+G .958(umber\) and)-3.458 F .59
+(the characters between the single quotes are considered quoted.)184 516
+R .59(This is the beha)5.59 F .59(vior of)-.2 F .59
+(posix mode through v)184 528 R .589(ersion 4.1.)-.15 F .589(The def)
+5.589 F .589(ault bash beha)-.1 F .589(vior remains as in pre)-.2 F .589
+(vious v)-.25 F(er)-.15 E(-)-.2 E(sions.)184 540 Q F1(compat42)144 552 Q
+F0 1.796(If set,)184 564 R F1(bash)4.296 E F0 1.796
+(does not process the replacement string in the pattern substitution w)
+4.296 F(ord)-.1 E -.15(ex)184 576 S(pansion using quote remo).15 E -.25
+(va)-.15 G(l.).25 E F1(compat43)144 588 Q F0 .141(If set,)184 600 R F1
+(bash)2.641 E F0 .141(does not print a w)2.641 F .14
+(arning message if an attempt is made to use a quoted com-)-.1 F .912
+(pound array assignment as an ar)184 612 R .912(gument to)-.18 F F1
+(declar)3.413 E(e)-.18 E F0 3.413(,m)C(ak)-3.413 E .913(es w)-.1 F .913
+(ord e)-.1 F .913(xpansion errors non-)-.15 F -.1(fa)184 624 S .353
+(tal errors that cause the current command to f).1 F .353(ail \(the def)
+-.1 F .352(ault beha)-.1 F .352(vior is to mak)-.2 F 2.852(et)-.1 G(hem)
+-2.852 E -.1(fa)184 636 S 1.057(tal errors that cause the shell to e).1
+F 1.058(xit\), and does not reset the loop state when a shell)-.15 F
+.375(function is e)184 648 R -.15(xe)-.15 G .375(cuted \(this allo).15 F
+(ws)-.25 E F1(br)2.875 E(eak)-.18 E F0(or)2.875 E F1(continue)2.875 E F0
+.374(in a shell function to af)2.875 F .374(fect loops in)-.25 F
+(the caller')184 660 Q 2.5(sc)-.55 G(onte)-2.5 E(xt\).)-.15 E F1
+(compat44)144 672 Q F0 .441(If set,)184 684 R F1(bash)2.941 E F0(sa)
+2.942 E -.15(ve)-.2 G 2.942(st).15 G .442(he positional parameters to B)
+-2.942 F .442(ASH_ARGV and B)-.35 F .442(ASH_ARGC before)-.35 F(the)184
+696 Q 2.5(ya)-.15 G(re used, re)-2.5 E -.05(ga)-.15 G
+(rdless of whether or not e).05 E(xtended deb)-.15 E
+(ugging mode is enabled.)-.2 E(GNU Bash 5.0)72 768 Q(2018 December 7)
+139.295 E(73)188.455 E 0 Cg EP
+%%Page: 74 74
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(complete_fullquote)144 84 Q F0 .654(If set,)184 96 R F1(bash)3.153 E
+F0 .653(quotes all shell metacharacters in \214lenames and directory na\
+mes when per)3.153 F(-)-.2 E 1.524(forming completion.)184 108 R 1.524
+(If not set,)6.524 F F1(bash)4.024 E F0(remo)4.024 E -.15(ve)-.15 G
+4.024(sm).15 G 1.524(etacharacters such as the dollar sign)-4.024 F
+2.667(from the set of characters that will be quoted in completed \214l\
+enames when these)184 120 R .028(metacharacters appear in shell v)184
+132 R .028(ariable references in w)-.25 F .029(ords to be completed.)-.1
+F .029(This means)5.029 F 1.073(that dollar signs in v)184 144 R 1.073
+(ariable names that e)-.25 F 1.073
+(xpand to directories will not be quoted; ho)-.15 F(w-)-.25 E -2.15 -.25
+(ev e)184 156 T 1.922 -.4(r, a).25 H 1.422 -.15(ny d).4 H 1.123
+(ollar signs appearing in \214lenames will not be quoted, either).15 F
+6.123(.T)-.55 G 1.123(his is acti)-6.123 F -.15(ve)-.25 G .59
+(only when bash is using backslashes to quote completed \214lenames.)184
+168 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 180 Q
+(ault, which is the def)-.1 E(ault bash beha)-.1 E(vior in v)-.2 E
+(ersions through 4.2.)-.15 E F1(dir)144 192 Q(expand)-.18 E F0 .486
+(If set,)184 204 R F1(bash)2.986 E F0 .486
+(replaces directory names with the results of w)2.986 F .486(ord e)-.1 F
+.487(xpansion when perform-)-.15 F .18(ing \214lename completion.)184
+216 R .179(This changes the contents of the readline editing b)5.18 F
+(uf)-.2 E(fer)-.25 E 5.179(.I)-.55 G 2.679(fn)-5.179 G(ot)-2.679 E(set,)
+184 228 Q F1(bash)2.5 E F0(attempts to preserv)2.5 E 2.5(ew)-.15 G
+(hat the user typed.)-2.5 E F1(dirspell)144 240 Q F0 .858(If set,)184
+240 R F1(bash)3.358 E F0 .858
+(attempts spelling correction on directory names during w)3.358 F .859
+(ord completion if)-.1 F
+(the directory name initially supplied does not e)184 252 Q(xist.)-.15 E
+F1(dotglob)144 264 Q F0 .165(If set,)184 264 R F1(bash)2.665 E F0 .165
+(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665('i)
+-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F
+(xpansion.)-.15 E(The \214lenames)184 276 Q F1 -.63(``)2.5 G -.55(.').63
+G(')-.08 E F0(and)5 E F1 -.63(``)2.5 G(..).63 E -.63('')-.55 G F0
+(must al)5.63 E -.1(wa)-.1 G(ys be matched e).1 E(xplicitly)-.15 E 2.5
+(,e)-.65 G -.15(ve)-2.75 G 2.5(ni).15 G(f)-2.5 E F1(dotglob)2.5 E F0
+(is set.)2.5 E F1(execfail)144 288 Q F0 1.386(If set, a non-interacti)
+184 288 R 1.686 -.15(ve s)-.25 H 1.386(hell will not e).15 F 1.386
+(xit if it cannot e)-.15 F -.15(xe)-.15 G 1.387
+(cute the \214le speci\214ed as an).15 F(ar)184 300 Q(gument to the)-.18
+E F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E(An interacti)5 E .3
+-.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 E F1(exec)2.5 E F0
+-.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 312 Q F0 .717
+(If set, aliases are e)184 324 R .717(xpanded as described abo)-.15 F
+1.017 -.15(ve u)-.15 H(nder).15 E/F2 9/Times-Bold@0 SF(ALIASES)3.217 E
+/F3 9/Times-Roman@0 SF(.)A F0 .716(This option is enabled)5.217 F
+(by def)184 336 Q(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.)
+.15 E F1(extdeb)144 348 Q(ug)-.2 E F0 .671(If set at shell in)184 360 R
+-.2(vo)-.4 G .671(cation, arrange to e).2 F -.15(xe)-.15 G .671
+(cute the deb).15 F .672(ugger pro\214le before the shell starts,)-.2 F
+.221(identical to the)184 372 R F1<adad646562>2.721 E(ugger)-.2 E F0
+2.721(option. If)2.721 F .221(set after in)2.721 F -.2(vo)-.4 G .221
+(cation, beha).2 F .22(vior intended for use by)-.2 F(deb)184 384 Q
+(uggers is enabled:)-.2 E F1(1.)184 396 Q F0(The)220 396 Q F1<ad46>4.25
+E F0 1.75(option to the)4.25 F F1(declar)4.251 E(e)-.18 E F0 -.2(bu)
+4.251 G 1.751(iltin displays the source \214le name and line).2 F
+(number corresponding to each function name supplied as an ar)220 408 Q
+(gument.)-.18 E F1(2.)184 420 Q F0 1.667(If the command run by the)220
+420 R F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167 F
+1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 432
+Q -.15(xe)-.15 G(cuted.).15 E F1(3.)184 444 Q F0 .84
+(If the command run by the)220 444 R F1(DEB)3.34 E(UG)-.1 E F0 .841
+(trap returns a v)3.341 F .841(alue of 2, and the shell is)-.25 F -.15
+(exe)220 456 S .488
+(cuting in a subroutine \(a shell function or a shell script e).15 F
+-.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1
+(sour)220 468 Q(ce)-.18 E F0 -.2(bu)2.5 G
+(iltins\), the shell simulates a call to).2 E F1 -.18(re)2.5 G(tur).18 E
+(n)-.15 E F0(.)A F1(4.)184 480 Q F2 -.27(BA)220 480 S(SH_ARGC).27 E F0
+(and)3.153 E F2 -.27(BA)3.403 G(SH_ARGV).27 E F0 .904
+(are updated as described in their descriptions)3.154 F(abo)220 492 Q
+-.15(ve)-.15 G(.).15 E F1(5.)184 504 Q F0 1.637(Function tracing is ena\
+bled: command substitution, shell functions, and sub-)220 504 R
+(shells in)220 516 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1
+(\()2.5 E/F4 10/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0
+(inherit the)2.5 E F1(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0
+(traps.)2.5 E F1(6.)184 528 Q F0 1.082(Error tracing is enabled: comman\
+d substitution, shell functions, and subshells)220 528 R(in)220 540 Q
+-.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F4(command)
+2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E F0(trap.)2.5 E F1
+(extglob)144 552 Q F0 .4(If set, the e)184 552 R .4
+(xtended pattern matching features described abo)-.15 F .7 -.15(ve u)
+-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 564 Q
+F0(are enabled.)2.5 E F1(extquote)144 576 Q F0 2.473(If set,)184 588 R
+F1($)4.973 E F0<08>A F4(string)A F0 4.973<0861>C(nd)-4.973 E F1($)4.973
+E F0(")A F4(string)A F0 4.973("q)C 2.473(uoting is performed within)
+-4.973 F F1(${)4.973 E F4(par)A(ameter)-.15 E F1(})A F0 -.15(ex)4.973 G
+(pansions).15 E(enclosed in double quotes.)184 600 Q
+(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 612 Q F0
+1.425(If set, patterns which f)184 612 R 1.425
+(ail to match \214lenames during pathname e)-.1 F 1.424
+(xpansion result in an)-.15 F -.15(ex)184 624 S(pansion error).15 E(.)
+-.55 E F1 -.25(fo)144 636 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
+.936(If set, the suf)184 648 R<8c78>-.25 E .936(es speci\214ed by the)
+-.15 F F2(FIGNORE)3.436 E F0 .936(shell v)3.186 F .936(ariable cause w)
+-.25 F .937(ords to be ignored)-.1 F .32(when performing w)184 660 R .32
+(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G .32
+(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 2.947
+(pletions. See)184 672 R F2 .447(SHELL V)2.947 F(ARIABLES)-1.215 E F0
+(abo)2.697 E .747 -.15(ve f)-.15 H .448(or a description of).15 F F2
+(FIGNORE)2.948 E F3(.)A F0 .448(This option is)4.948 F(enabled by def)
+184 684 Q(ault.)-.1 E F1(globasciiranges)144 696 Q F0 2.519
+(If set, range e)184 708 R 2.519
+(xpressions used in pattern matching brack)-.15 F 2.518(et e)-.1 F 2.518
+(xpressions \(see)-.15 F F2 -.09(Pa)5.018 G(tter).09 E(n)-.135 E
+(Matching)184 720 Q F0(abo)2.964 E -.15(ve)-.15 G 3.214(\)b).15 G(eha)
+-3.214 E 1.014 -.15(ve a)-.2 H 3.214(si).15 G 3.214(fi)-3.214 G 3.214
+(nt)-3.214 G .714(he traditional C locale when performing comparisons.)
+-3.214 F(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(74)188.455 E 0
+Cg EP
+%%Page: 75 75
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E 1.02
+(That is, the current locale')184 84 R 3.52(sc)-.55 G 1.02
+(ollating sequence is not tak)-3.52 F 1.02(en into account, so)-.1 F/F1
+10/Times-Bold@0 SF(b)3.52 E F0 1.02(will not)3.52 F .956
+(collate between)184 96 R F1(A)3.456 E F0(and)3.456 E F1(B)3.456 E F0
+3.457(,a)C .957(nd upper)-3.457 F .957(-case and lo)-.2 F(wer)-.25 E
+.957(-case ASCII characters will collate)-.2 F(together)184 108 Q(.)-.55
+E F1(globstar)144 120 Q F0 .519(If set, the pattern)184 120 R F1(**)
+3.019 E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F
+.518(xt will match all \214les and zero)-.15 F .431
+(or more directories and subdirectories.)184 132 R .431
+(If the pattern is follo)5.431 F .432(wed by a)-.25 F F1(/)2.932 E F0
+2.932(,o)C .432(nly directories)-2.932 F(and subdirectories match.)184
+144 Q F1(gnu_errfmt)144 156 Q F0(If set, shell error messages are writt\
+en in the standard GNU error message format.)184 168 Q F1(histappend)144
+180 Q F0 .676
+(If set, the history list is appended to the \214le named by the v)184
+192 R .676(alue of the)-.25 F/F2 9/Times-Bold@0 SF(HISTFILE)3.176 E F0
+-.25(va)2.926 G(ri-).25 E(able when the shell e)184 204 Q
+(xits, rather than o)-.15 E -.15(ve)-.15 G(rwriting the \214le.).15 E F1
+(histr)144 216 Q(eedit)-.18 E F0 .575(If set, and)184 228 R F1 -.18(re)
+3.075 G(adline).18 E F0 .575(is being used, a user is gi)3.075 F -.15
+(ve)-.25 G 3.075(nt).15 G .576(he opportunity to re-edit a f)-3.075 F
+.576(ailed his-)-.1 F(tory substitution.)184 240 Q F1(histv)144 252 Q
+(erify)-.1 E F0 .403(If set, and)184 264 R F1 -.18(re)2.903 G(adline).18
+E F0 .403
+(is being used, the results of history substitution are not immediately)
+2.903 F .661(passed to the shell parser)184 276 R 5.661(.I)-.55 G .662
+(nstead, the resulting line is loaded into the)-5.661 F F1 -.18(re)3.162
+G(adline).18 E F0(editing)3.162 E -.2(bu)184 288 S -.25(ff).2 G(er).25 E
+2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1
+(hostcomplete)144 300 Q F0 1.182(If set, and)184 312 R F1 -.18(re)3.682
+G(adline).18 E F0 1.182(is being used,)3.682 F F1(bash)3.682 E F0 1.181
+(will attempt to perform hostname completion)3.681 F 1.38(when a w)184
+324 R 1.38(ord containing a)-.1 F F1(@)3.881 E F0 1.381
+(is being completed \(see)3.881 F F1(Completing)3.881 E F0(under)3.881 E
+F2(READLINE)3.881 E F0(abo)184 336 Q -.15(ve)-.15 G 2.5(\). This).15 F
+(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 348 Q F0(If set,)
+184 360 Q F1(bash)2.5 E F0(will send)2.5 E F2(SIGHUP)2.5 E F0
+(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e)
+.15 E(xits.)-.15 E F1(inherit_err)144 372 Q(exit)-.18 E F0 .22
+(If set, command substitution inherits the v)184 384 R .219(alue of the)
+-.25 F F1(err)2.719 E(exit)-.18 E F0 .219(option, instead of unsetting)
+2.719 F(it in the subshell en)184 396 Q 2.5(vironment. This)-.4 F
+(option is enabled when)2.5 E/F3 10/Times-Italic@0 SF(posix mode)2.5 E
+F0(is enabled.)2.5 E F1(interacti)144 408 Q -.1(ve)-.1 G(_comments).1 E
+F0 .33(If set, allo)184 420 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33
+(ginning with)-.15 F F1(#)2.83 E F0 .33(to cause that w)2.83 F .33
+(ord and all remaining characters on)-.1 F .967
+(that line to be ignored in an interacti)184 432 R 1.267 -.15(ve s)-.25
+H .967(hell \(see).15 F F2(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve)-.15
+G 3.467(\). This).15 F .967(option is)3.467 F(enabled by def)184 444 Q
+(ault.)-.1 E F1(lastpipe)144 456 Q F0 .066
+(If set, and job control is not acti)184 456 R -.15(ve)-.25 G 2.566(,t)
+.15 G .066(he shell runs the last command of a pipeline not e)-2.566 F
+-.15(xe)-.15 G(-).15 E(cuted in the background in the current shell en)
+184 468 Q(vironment.)-.4 E F1(lithist)144 480 Q F0 .655(If set, and the)
+184 480 R F1(cmdhist)3.155 E F0 .654
+(option is enabled, multi-line commands are sa)3.154 F -.15(ve)-.2 G
+3.154(dt).15 G 3.154(ot)-3.154 G .654(he history)-3.154 F
+(with embedded ne)184 492 Q
+(wlines rather than using semicolon separators where possible.)-.25 E F1
+(localv)144 504 Q(ar_inherit)-.1 E F0 .421(If set, local v)184 516 R
+.422(ariables inherit the v)-.25 F .422(alue and attrib)-.25 F .422
+(utes of a v)-.2 F .422(ariable of the same name that)-.25 F -.15(ex)184
+528 S .174(ists at a pre).15 F .174(vious scope before an)-.25 F 2.673
+(yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .173
+(The nameref attrib)5.173 F .173(ute is not)-.2 F(inherited.)184 540 Q
+F1(localv)144 552 Q(ar_unset)-.1 E F0 .328(If set, calling)184 564 R F1
+(unset)2.828 E F0 .328(on local v)2.828 F .329(ariables in pre)-.25 F
+.329(vious function scopes marks them so subse-)-.25 F .543(quent looku\
+ps \214nd them unset until that function returns. This is identical to \
+the beha)184 576 R(v-)-.2 E(ior of unsetting local v)184 588 Q
+(ariables at the current function scope.)-.25 E F1(login_shell)144 600 Q
+F0 .486
+(The shell sets this option if it is started as a login shell \(see)184
+612 R F2(INV)2.987 E(OCA)-.405 E(TION)-.855 E F0(abo)2.737 E -.15(ve)
+-.15 G 2.987(\). The).15 F -.25(va)184 624 S(lue may not be changed.).25
+E F1(mailwar)144 636 Q(n)-.15 E F0 .815(If set, and a \214le that)184
+648 R F1(bash)3.315 E F0 .814
+(is checking for mail has been accessed since the last time it)3.315 F
+-.1(wa)184 660 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
+(`The mail in)-.74 E F3(mail\214le)2.5 E F0(has been read')2.5 E 2.5('i)
+-.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1(no_empty_cmd_completion)144 672
+Q F0 .324(If set, and)184 684 R F1 -.18(re)2.824 G(adline).18 E F0 .324
+(is being used,)2.824 F F1(bash)2.824 E F0 .324
+(will not attempt to search the)2.824 F F2 -.666(PA)2.825 G(TH)-.189 E
+F0 .325(for possible)2.575 F
+(completions when completion is attempted on an empty line.)184 696 Q
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(75)188.455 E 0 Cg EP
+%%Page: 76 76
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF(nocaseglob)144 84 Q F0 .437(If set,)184 96 R F1(bash)2.937 E F0 .436
+(matches \214lenames in a case\255insensiti)2.937 F .736 -.15(ve f)-.25
+H .436(ashion when performing pathname).05 F -.15(ex)184 108 S
+(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E
+-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 120 Q F0 1.193(If set,)184
+132 R F1(bash)3.693 E F0 1.194(matches patterns in a case\255insensiti)
+3.693 F 1.494 -.15(ve f)-.25 H 1.194(ashion when performing matching).05
+F .551(while e)184 144 R -.15(xe)-.15 G(cuting).15 E F1(case)3.051 E F0
+(or)3.051 E F1([[)3.051 E F0 .551
+(conditional commands, when performing pattern substitution)3.051 F -.1
+(wo)184 156 S .622(rd e).1 F .623(xpansions, or when \214ltering possib\
+le completions as part of programmable com-)-.15 F(pletion.)184 168 Q F1
+(nullglob)144 180 Q F0 .855(If set,)184 192 R F1(bash)3.355 E F0(allo)
+3.355 E .855(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)
+3.354 G .854(thname Expansion).1 F F0(abo)3.354 E -.15(ve)-.15 G 3.354
+(\)t).15 G(o)-3.354 E -.15(ex)184 204 S
+(pand to a null string, rather than themselv).15 E(es.)-.15 E F1(pr)144
+216 Q(ogcomp)-.18 E F0 .676(If set, the programmable completion f)184
+228 R .677(acilities \(see)-.1 F F1(Pr)3.177 E .677
+(ogrammable Completion)-.18 F F0(abo)3.177 E -.15(ve)-.15 G(\)).15 E
+(are enabled.)184 240 Q(This option is enabled by def)5 E(ault.)-.1 E F1
+(pr)144 252 Q(ogcomp_alias)-.18 E F0 2.124
+(If set, and programmable completion is enabled,)184 264 R F1(bash)4.624
+E F0 2.124(treats a command name that)4.624 F(doesn')184 276 Q 3.288(th)
+-.18 G -2.25 -.2(av e)-3.288 H(an)3.488 E 3.288(yc)-.15 G .789
+(ompletions as a possible alias and attempts alias e)-3.288 F .789
+(xpansion. If it has)-.15 F 1.473(an alias,)184 288 R F1(bash)3.973 E F0
+1.473(attempts programmable completion using the command w)3.973 F 1.473
+(ord resulting)-.1 F(from the e)184 300 Q(xpanded alias.)-.15 E F1(pr)
+144 312 Q(omptv)-.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)
+184 324 R 1.448(go parameter e)-.18 F 1.448
+(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184 336 S
+.171(pansion, and quote remo).15 F -.25(va)-.15 G 2.67(la).25 G .17
+(fter being e)-2.67 F .17(xpanded as described in)-.15 F/F2 9
+/Times-Bold@0 SF(PR)2.67 E(OMPTING)-.27 E F0(abo)2.42 E -.15(ve)-.15 G
+(.).15 E(This option is enabled by def)184 348 Q(ault.)-.1 E F1 -.18(re)
+144 360 S(stricted_shell).18 E F0 1.069
+(The shell sets this option if it is started in restricted mode \(see)
+184 372 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 384 Q 2.86
+(w\). The)-.25 F -.25(va)2.86 G .36(lue may not be changed.).25 F .36
+(This is not reset when the startup \214les are e)5.36 F -.15(xe)-.15 G
+(-).15 E(cuted, allo)184 396 Q(wing the startup \214les to disco)-.25 E
+-.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E
+F1(shift_v)144 408 Q(erbose)-.1 E F0 .501(If set, the)184 420 R F1
+(shift)3.001 E F0 -.2(bu)3.001 G .501
+(iltin prints an error message when the shift count e).2 F .502
+(xceeds the number)-.15 F(of positional parameters.)184 432 Q F1(sour)
+144 444 Q(cepath)-.18 E F0 .771(If set, the)184 456 R F1(sour)3.271 E
+(ce)-.18 E F0(\()3.271 E F1(.)A F0 3.271(\)b)C .771(uiltin uses the v)
+-3.471 F .771(alue of)-.25 F F2 -.666(PA)3.27 G(TH)-.189 E F0 .77
+(to \214nd the directory containing the)3.02 F(\214le supplied as an ar)
+184 468 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E(ault.)
+-.1 E F1(xpg_echo)144 480 Q F0(If set, the)184 492 Q F1(echo)2.5 E F0
+-.2(bu)2.5 G(iltin e).2 E(xpands backslash-escape sequences by def)-.15
+E(ault.)-.1 E F1(suspend)108 508.8 Q F0([)2.5 E F1<ad66>A F0(])A 1.001
+(Suspend the e)144 520.8 R -.15(xe)-.15 G 1.001
+(cution of this shell until it recei).15 F -.15(ve)-.25 G 3.501(sa).15 G
+F2(SIGCONT)A F0 3.502(signal. A)3.252 F 1.002(login shell cannot be)
+3.502 F .023(suspended; the)144 532.8 R F1<ad66>2.523 E F0 .023
+(option can be used to o)2.523 F -.15(ve)-.15 G .022
+(rride this and force the suspension.).15 F .022(The return status is)
+5.022 F 2.5(0u)144 544.8 S(nless the shell is a login shell and)-2.5 E
+F1<ad66>2.5 E F0(is not supplied, or if job control is not enabled.)2.5
+E F1(test)108 561.6 Q/F3 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([)
+108 573.6 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .877
+(Return a status of 0 \(true\) or 1 \(f)144 573.6 R .878
+(alse\) depending on the e)-.1 F -.25(va)-.25 G .878
+(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)144 585.6
+S(pr).2 E F0 5.53(.E).73 G .53
+(ach operator and operand must be a separate ar)-5.53 F 3.03
+(gument. Expressions)-.18 F .53(are composed of the)3.03 F 3.079
+(primaries described abo)144 597.6 R 3.379 -.15(ve u)-.15 H(nder).15 E
+F2(CONDITION)5.579 E 3.079(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF
+(.)A F1(test)7.579 E F0 3.08(does not accept an)5.58 F(y)-.15 E
+(options, nor does it accept and ignore an ar)144 609.6 Q(gument of)-.18
+E F1<adad>2.5 E F0(as signifying the end of options.)2.5 E .786
+(Expressions may be combined using the follo)144 627.6 R .785
+(wing operators, listed in decreasing order of prece-)-.25 F 3.411
+(dence. The)144 639.6 R -.25(eva)3.411 G .911
+(luation depends on the number of ar).25 F .912(guments; see belo)-.18 F
+4.712 -.65(w. O)-.25 H .912(perator precedence is).65 F
+(used when there are \214v)144 651.6 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G
+(ore ar)-2.5 E(guments.)-.18 E F1(!)144 663.6 Q F3 -.2(ex)2.5 G(pr).2 E
+F0 -.35(Tr)180 663.6 S(ue if).35 E F3 -.2(ex)2.5 G(pr).2 E F0(is f)3.23
+E(alse.)-.1 E F1(\()144 675.6 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0
+.26(Returns the v)180 675.6 R .26(alue of)-.25 F F3 -.2(ex)2.76 G(pr).2
+E F0 5.26(.T)C .26(his may be used to o)-5.26 F -.15(ve)-.15 G .26
+(rride the normal precedence of opera-).15 F(tors.)180 687.6 Q F3 -.2
+(ex)144 699.6 S(pr1).2 E F0<ad>2.5 E F1(a)A F3 -.2(ex)2.5 G(pr2).2 E F0
+-.35(Tr)180 711.6 S(ue if both).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(and)2.5
+E F3 -.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(76)188.455 E 0 Cg EP
+%%Page: 77 77
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10
+/Times-Italic@0 SF -.2(ex)144 84 S(pr1).2 E F0<ad>2.5 E/F2 10
+/Times-Bold@0 SF(o)A F1 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 96 S
+(ue if either).35 E F1 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F1 -.2(ex)2.5 G
+(pr2).2 E F0(is true.)2.52 E F2(test)144 112.8 Q F0(and)2.5 E F2([)2.5 E
+F0 -.25(eva)2.5 G(luate conditional e).25 E
+(xpressions using a set of rules based on the number of ar)-.15 E
+(guments.)-.18 E 2.5(0a)144 130.8 S -.18(rg)-2.5 G(uments).18 E(The e)
+180 142.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 154.8 S -.18
+(rg)-2.5 G(ument).18 E(The e)180 166.8 Q
+(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18
+E 2.5(2a)144 178.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
+180 190.8 R .37(gument is)-.18 F F2(!)2.87 E F0 2.87(,t)C .37(he e)-2.87
+F .37(xpression is true if and only if the second ar)-.15 F .37
+(gument is null.)-.18 F .38(If the \214rst ar)180 202.8 R .38
+(gument is one of the unary conditional operators listed abo)-.18 F .679
+-.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 SF(CONDI-)2.879 E(TION)180
+214.8 Q .552(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(,)A F0 .552
+(the e)2.802 F .552(xpression is true if the unary test is true.)-.15 F
+.552(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 226.8 Q
+(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E
+(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 238.8 S -.18(rg)-2.5 G
+(uments).18 E .236(The follo)180 250.8 R .236
+(wing conditions are applied in the order listed.)-.25 F .236
+(If the second ar)5.236 F .236(gument is one of)-.18 F .855
+(the binary conditional operators listed abo)180 262.8 R 1.155 -.15
+(ve u)-.15 H(nder).15 E F3(CONDITION)3.355 E .855(AL EXPRESSIONS)-.18 F
+F4(,)A F0(the)3.105 E .579(result of the e)180 274.8 R .578(xpression i\
+s the result of the binary test using the \214rst and third ar)-.15 F
+(guments)-.18 E 1.332(as operands.)180 286.8 R(The)6.332 E F2<ad61>3.832
+E F0(and)3.832 E F2<ad6f>3.832 E F0 1.333
+(operators are considered binary operators when there are)3.832 F .558
+(three ar)180 298.8 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058
+F .558(gument is)-.18 F F2(!)3.058 E F0 3.058(,t)C .558(he v)-3.058 F
+.558(alue is the ne)-.25 F -.05(ga)-.15 G .558(tion of the tw).05 F
+(o-ar)-.1 E(gument)-.18 E .52(test using the second and third ar)180
+310.8 R 3.021(guments. If)-.18 F .521(the \214rst ar)3.021 F .521
+(gument is e)-.18 F(xactly)-.15 E F2(\()3.021 E F0 .521(and the third)
+3.021 F(ar)180 322.8 Q .485(gument is e)-.18 F(xactly)-.15 E F2(\))2.985
+E F0 2.985(,t)C .485(he result is the one-ar)-2.985 F .485
+(gument test of the second ar)-.18 F 2.985(gument. Other)-.18 F(-)-.2 E
+(wise, the e)180 334.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144
+346.8 S -.18(rg)-2.5 G(uments).18 E .384(If the \214rst ar)180 358.8 R
+.384(gument is)-.18 F F2(!)2.884 E F0 2.885(,t)C .385
+(he result is the ne)-2.885 F -.05(ga)-.15 G .385(tion of the three-ar)
+.05 F .385(gument e)-.18 F .385(xpression com-)-.15 F 1.648
+(posed of the remaining ar)180 370.8 R 4.147(guments. Otherwise,)-.18 F
+1.647(the e)4.147 F 1.647(xpression is parsed and e)-.15 F -.25(va)-.25
+G(luated).25 E(according to precedence using the rules listed abo)180
+382.8 Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 394.8 S 2.5(rm)-2.5 G(ore ar)
+-2.5 E(guments)-.18 E 1.635(The e)180 406.8 R 1.635
+(xpression is parsed and e)-.15 F -.25(va)-.25 G 1.635
+(luated according to precedence using the rules listed).25 F(abo)180
+418.8 Q -.15(ve)-.15 G(.).15 E(When used with)144 436.8 Q F2(test)2.5 E
+F0(or)2.5 E F2([)2.5 E F0 2.5(,t)C(he)-2.5 E F2(<)2.5 E F0(and)2.5 E F2
+(>)2.5 E F0(operators sort le)2.5 E
+(xicographically using ASCII ordering.)-.15 E F2(times)108 453.6 Q F0
+1.229(Print the accumulated user and system times for the shell and for\
+ processes run from the shell.)144 453.6 R(The return status is 0.)144
+465.6 Q F2(trap)108 482.4 Q F0([)2.5 E F2(\255lp)A F0 2.5(][)C([)-2.5 E
+F1(ar)A(g)-.37 E F0(])A F1(sigspec)2.5 E F0(...])2.5 E .702(The command)
+144 494.4 R F1(ar)3.532 E(g)-.37 E F0 .702(is to be read and e)3.422 F
+-.15(xe)-.15 G .702(cuted when the shell recei).15 F -.15(ve)-.25 G
+3.203(ss).15 G(ignal\(s\))-3.203 E F1(sigspec)3.203 E F0 5.703(.I).31 G
+(f)-5.703 E F1(ar)3.533 E(g)-.37 E F0(is)3.423 E .609
+(absent \(and there is a single)144 506.4 R F1(sigspec)3.108 E F0 3.108
+(\)o)C(r)-3.108 E F2<ad>3.108 E F0 3.108(,e)C .608
+(ach speci\214ed signal is reset to its original disposition)-3.108 F
+.658(\(the v)144 518.4 R .658(alue it had upon entrance to the shell\).)
+-.25 F(If)5.658 E F1(ar)3.488 E(g)-.37 E F0 .659
+(is the null string the signal speci\214ed by each)3.378 F F1(sigspec)
+144.34 530.4 Q F0 .581
+(is ignored by the shell and by the commands it in)3.391 F -.2(vo)-.4 G
+-.1(ke).2 G 3.08(s. If).1 F F1(ar)3.41 E(g)-.37 E F0 .58
+(is not present and)3.3 F F2<ad70>3.08 E F0(has)3.08 E 1.214
+(been supplied, then the trap commands associated with each)144 542.4 R
+F1(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215
+F(gu-)-.18 E .86(ments are supplied or if only)144 554.4 R F2<ad70>3.36
+E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F2(trap)3.36 E F0 .86
+(prints the list of commands associated with each)3.36 F 2.83
+(signal. The)144 566.4 R F2<ad6c>2.83 E F0 .33(option causes the shell \
+to print a list of signal names and their corresponding num-)2.83 F
+4.311(bers. Each)144 578.4 R F1(sigspec)4.651 E F0 1.811
+(is either a signal name de\214ned in <)4.621 F F1(signal.h)A F0 1.81
+(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E
+(names are case insensiti)144 590.4 Q .3 -.15(ve a)-.25 H(nd the).15 E
+F3(SIG)2.5 E F0(pre\214x is optional.)2.25 E 1.648(If a)144 608.4 R F1
+(sigspec)4.488 E F0(is)4.458 E F3(EXIT)4.148 E F0 1.648
+(\(0\) the command)3.898 F F1(ar)4.479 E(g)-.37 E F0 1.649(is e)4.369 F
+-.15(xe)-.15 G 1.649(cuted on e).15 F 1.649(xit from the shell.)-.15 F
+1.649(If a)6.649 F F1(sigspec)4.489 E F0(is)4.459 E F3(DEB)144 620.4 Q
+(UG)-.09 E F4(,)A F0 1.168(the command)3.418 F F1(ar)3.998 E(g)-.37 E F0
+1.168(is e)3.888 F -.15(xe)-.15 G 1.167(cuted before e).15 F -.15(ve)
+-.25 G(ry).15 E F1 1.167(simple command)3.667 F F0(,)A F1(for)3.667 E F0
+(command,)3.667 E F1(case)3.667 E F0(com-)3.667 E(mand,)144 632.4 Q F1
+(select)2.646 E F0 .146(command, e)2.646 F -.15(ve)-.25 G .146
+(ry arithmetic).15 F F1(for)2.646 E F0 .147
+(command, and before the \214rst command e)2.646 F -.15(xe)-.15 G .147
+(cutes in a).15 F .146(shell function \(see)144 644.4 R F3 .146
+(SHELL GRAMMAR)2.646 F F0(abo)2.396 E -.15(ve)-.15 G 2.646(\). Refer).15
+F .146(to the description of the)2.646 F F2(extdeb)2.645 E(ug)-.2 E F0
+.145(option to)2.645 F(the)144 656.4 Q F2(shopt)3.2 E F0 -.2(bu)3.2 G .7
+(iltin for details of its ef).2 F .7(fect on the)-.25 F F2(DEB)3.2 E(UG)
+-.1 E F0 3.2(trap. If)3.2 F(a)3.2 E F1(sigspec)3.54 E F0(is)3.51 E F3
+(RETURN)3.2 E F4(,)A F0 .701(the com-)2.951 F(mand)144 668.4 Q F1(ar)
+3.474 E(g)-.37 E F0 .644(is e)3.364 F -.15(xe)-.15 G .643
+(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G
+.643(cuted with the).15 F F2(.)3.143 E F0(or)3.143 E F2(sour)3.143 E(ce)
+-.18 E F0 -.2(bu)3.143 G(iltins).2 E(\214nishes e)144 680.4 Q -.15(xe)
+-.15 G(cuting.).15 E .96(If a)144 698.4 R F1(sigspec)3.8 E F0(is)3.77 E
+F3(ERR)3.46 E F4(,)A F0 .96(the command)3.21 F F1(ar)3.791 E(g)-.37 E F0
+.961(is e)3.681 F -.15(xe)-.15 G .961(cuted whene).15 F -.15(ve)-.25 G
+3.461(rap).15 G .961(ipeline \(which may consist of a)-3.461 F .185(sin\
+gle simple command\), a list, or a compound command returns a non\255ze\
+ro e)144 710.4 R .184(xit status, subject to)-.15 F 1.92(the follo)144
+722.4 R 1.92(wing conditions.)-.25 F(The)6.92 E F3(ERR)4.42 E F0 1.92
+(trap is not e)4.17 F -.15(xe)-.15 G 1.92(cuted if the f).15 F 1.92
+(ailed command is part of the)-.1 F(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(77)188.455 E 0 Cg EP
+%%Page: 78 78
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .464
+(command list immediately follo)144 84 R .464(wing a)-.25 F/F1 10
+/Times-Bold@0 SF(while)2.964 E F0(or)2.964 E F1(until)2.964 E F0 -.1(ke)
+2.964 G(yw)-.05 E .464(ord, part of the test in an)-.1 F/F2 10
+/Times-Italic@0 SF(if)2.973 E F0(statement,)4.923 E .711
+(part of a command e)144 96 R -.15(xe)-.15 G .711(cuted in a).15 F F1
+(&&)3.211 E F0(or)3.211 E F1(||)3.212 E F0 .712(list e)3.212 F .712
+(xcept the command follo)-.15 F .712(wing the \214nal)-.25 F F1(&&)3.212
+E F0(or)3.212 E F1(||)3.212 E F0(,)A(an)144 108 Q 2.777(yc)-.15 G .276
+(ommand in a pipeline b)-2.777 F .276(ut the last, or if the command')
+-.2 F 2.776(sr)-.55 G .276(eturn v)-2.776 F .276(alue is being in)-.25 F
+-.15(ve)-.4 G .276(rted using).15 F F1(!)2.776 E F0(.)A
+(These are the same conditions obe)144 120 Q(yed by the)-.15 E F1(err)
+2.5 E(exit)-.18 E F0(\()2.5 E F1<ad65>A F0 2.5(\)o)C(ption.)-2.5 E 1.095
+(Signals ignored upon entry to the shell cannot be trapped or reset.)144
+138 R -.35(Tr)6.095 G 1.095(apped signals that are not).35 F .662
+(being ignored are reset to their original v)144 150 R .662
+(alues in a subshell or subshell en)-.25 F .661(vironment when one is)
+-.4 F 2.5(created. The)144 162 R(return status is f)2.5 E(alse if an)-.1
+E(y)-.15 E F2(sigspec)2.84 E F0(is in)2.81 E -.25(va)-.4 G
+(lid; otherwise).25 E F1(trap)2.5 E F0(returns true.)2.5 E F1(type)108
+178.8 Q F0([)2.5 E F1(\255aftpP)A F0(])A F2(name)2.5 E F0([)2.5 E F2
+(name)A F0(...])2.5 E -.4(Wi)144 190.8 S .173
+(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 E F2(name)
+3.033 E F0 -.1(wo)2.853 G .174
+(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F
+F1<ad74>144 202.8 Q F0 .843(option is used,)3.343 F F1(type)3.343 E F0
+.843(prints a string which is one of)3.343 F F2(alias)3.343 E F0(,).27 E
+F2 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)3.343 E F0
+(,).24 E F2 -.2(bu)3.342 G(iltin).2 E F0 3.342(,o).24 G(r)-3.342 E F2
+(\214le)5.252 E F0(if)3.522 E F2(name)144.36 214.8 Q F0 .086
+(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086
+(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15
+(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F2
+(name)2.947 E F0 .087(is not)2.767 F .119
+(found, then nothing is printed, and an e)144 226.8 R .118
+(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F
+F1<ad70>2.618 E F0 .118(option is used,)2.618 F F1(type)2.618 E F0 .855
+(either returns the name of the disk \214le that w)144 238.8 R .855
+(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F2(name)3.715 E F0
+.855(were speci\214ed as a com-)3.535 F .641(mand name, or nothing if)
+144 250.8 R/F3 10/Courier@0 SF .641(type -t name)3.141 F F0 -.1(wo)3.141
+G .641(uld not return).1 F F2(\214le)3.14 E F0 5.64(.T).18 G(he)-5.64 E
+F1<ad50>3.14 E F0 .64(option forces a)3.14 F/F4 9/Times-Bold@0 SF -.666
+(PA)3.14 G(TH)-.189 E F0 .112(search for each)144 262.8 R F2(name)2.612
+E F0 2.612(,e)C -.15(ve)-2.862 G 2.613(ni).15 G(f)-2.613 E F3 .113
+(type -t name)2.613 F F0 -.1(wo)2.613 G .113(uld not return).1 F F2
+(\214le)2.613 E F0 5.113(.I).18 G 2.613(fac)-5.113 G .113
+(ommand is hashed,)-2.613 F F1<ad70>2.613 E F0(and)144 274.8 Q F1<ad50>
+3.231 E F0 .731(print the hashed v)3.231 F .73
+(alue, which is not necessarily the \214le that appears \214rst in)-.25
+F F4 -.666(PA)3.23 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .73(If the)
+5.23 F F1<ad61>144 286.8 Q F0 1.748(option is used,)4.248 F F1(type)
+4.248 E F0 1.748(prints all of the places that contain an e)4.248 F -.15
+(xe)-.15 G 1.748(cutable named).15 F F2(name)4.249 E F0 6.749(.T).18 G
+(his)-6.749 E .744(includes aliases and functions, if and only if the)
+144 298.8 R F1<ad70>3.244 E F0 .744(option is not also used.)3.244 F
+.743(The table of hashed)5.744 F 1.223
+(commands is not consulted when using)144 310.8 R F1<ad61>3.723 E F0
+6.223(.T)C(he)-6.223 E F1<ad66>3.723 E F0 1.223
+(option suppresses shell function lookup, as)3.723 F .326(with the)144
+322.8 R F1(command)2.826 E F0 -.2(bu)2.826 G(iltin.).2 E F1(type)5.326 E
+F0 .326(returns true if all of the ar)2.826 F .325(guments are found, f)
+-.18 F .325(alse if an)-.1 F 2.825(ya)-.15 G .325(re not)-2.825 F
+(found.)144 334.8 Q F1(ulimit)108 351.6 Q F0([)2.5 E F1
+(\255HSabcde\214klmnpqrstuvxPT)A F0([)2.5 E F2(limit)A F0(]])A(Pro)144
+363.6 Q .243(vides control o)-.15 F -.15(ve)-.15 G 2.743(rt).15 G .243
+(he resources a)-2.743 F -.25(va)-.2 G .244
+(ilable to the shell and to processes started by it, on systems).25 F
+.944(that allo)144 375.6 R 3.444(ws)-.25 G .944(uch control.)-3.444 F
+(The)5.944 E F1<ad48>3.444 E F0(and)3.444 E F1<ad53>3.444 E F0 .943
+(options specify that the hard or soft limit is set for the)3.444 F(gi)
+144 387.6 Q -.15(ve)-.25 G 2.708(nr).15 G 2.708(esource. A)-2.708 F .208
+(hard limit cannot be increased by a non-root user once it is set; a so\
+ft limit may)2.708 F .426(be increased up to the v)144 399.6 R .426
+(alue of the hard limit.)-.25 F .425(If neither)5.426 F F1<ad48>2.925 E
+F0(nor)2.925 E F1<ad53>2.925 E F0 .425
+(is speci\214ed, both the soft and)2.925 F .139(hard limits are set.)144
+411.6 R .139(The v)5.139 F .139(alue of)-.25 F F2(limit)2.729 E F0 .139
+(can be a number in the unit speci\214ed for the resource or one)3.319 F
+.742(of the special v)144 423.6 R(alues)-.25 E F1(hard)3.242 E F0(,)A F1
+(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F1(unlimited)3.241 E F0 3.241(,w)
+C .741(hich stand for the current hard limit, the current)-3.241 F .78
+(soft limit, and no limit, respecti)144 435.6 R -.15(ve)-.25 G(ly).15 E
+5.78(.I)-.65 G(f)-5.78 E F2(limit)3.37 E F0 .78
+(is omitted, the current v)3.96 F .78(alue of the soft limit of the)-.25
+F .499(resource is printed, unless the)144 447.6 R F1<ad48>2.999 E F0
+.499(option is gi)2.999 F -.15(ve)-.25 G 2.999(n. When).15 F .498
+(more than one resource is speci\214ed, the)2.999 F
+(limit name and unit are printed before the v)144 459.6 Q 2.5
+(alue. Other)-.25 F(options are interpreted as follo)2.5 E(ws:)-.25 E F1
+<ad61>144 471.6 Q F0(All current limits are reported)180 471.6 Q F1
+<ad62>144 483.6 Q F0(The maximum sock)180 483.6 Q(et b)-.1 E(uf)-.2 E
+(fer size)-.25 E F1<ad63>144 495.6 Q F0
+(The maximum size of core \214les created)180 495.6 Q F1<ad64>144 507.6
+Q F0(The maximum size of a process')180 507.6 Q 2.5(sd)-.55 G(ata se)
+-2.5 E(gment)-.15 E F1<ad65>144 519.6 Q F0
+(The maximum scheduling priority \("nice"\))180 519.6 Q F1<ad66>144
+531.6 Q F0
+(The maximum size of \214les written by the shell and its children)180
+531.6 Q F1<ad69>144 543.6 Q F0(The maximum number of pending signals)180
+543.6 Q F1<ad6b>144 555.6 Q F0
+(The maximum number of kqueues that may be allocated)180 555.6 Q F1
+<ad6c>144 567.6 Q F0(The maximum size that may be lock)180 567.6 Q
+(ed into memory)-.1 E F1<ad6d>144 579.6 Q F0
+(The maximum resident set size \(man)180 579.6 Q 2.5(ys)-.15 G
+(ystems do not honor this limit\))-2.5 E F1<ad6e>144 591.6 Q F0 .791(Th\
+e maximum number of open \214le descriptors \(most systems do not allo)
+180 591.6 R 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F
+(be set\))180 603.6 Q F1<ad70>144 615.6 Q F0
+(The pipe size in 512-byte blocks \(this may not be set\))180 615.6 Q F1
+<ad71>144 627.6 Q F0
+(The maximum number of bytes in POSIX message queues)180 627.6 Q F1
+<ad72>144 639.6 Q F0(The maximum real-time scheduling priority)180 639.6
+Q F1<ad73>144 651.6 Q F0(The maximum stack size)180 651.6 Q F1<ad74>144
+663.6 Q F0(The maximum amount of cpu time in seconds)180 663.6 Q F1
+<ad75>144 675.6 Q F0(The maximum number of processes a)180 675.6 Q -.25
+(va)-.2 G(ilable to a single user).25 E F1<ad76>144 687.6 Q F0 .47
+(The maximum amount of virtual memory a)180 687.6 R -.25(va)-.2 G .47
+(ilable to the shell and, on some systems, to).25 F(its children)180
+699.6 Q F1<ad78>144 711.6 Q F0(The maximum number of \214le locks)180
+711.6 Q(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(78)188.455 E 0
+Cg EP
+%%Page: 79 79
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
+SF<ad50>144 84 Q F0(The maximum number of pseudoterminals)180 84 Q F1
+<ad54>144 96 Q F0(The maximum number of threads)180 96 Q(If)144 112.8 Q
+/F2 10/Times-Italic@0 SF(limit)3.058 E F0 .468(is gi)3.648 F -.15(ve)
+-.25 G .468(n, and the).15 F F1<ad61>2.968 E F0 .468
+(option is not used,)2.968 F F2(limit)2.968 E F0 .468(is the ne)2.968 F
+2.968(wv)-.25 G .468(alue of the speci\214ed resource.)-3.218 F(If)5.468
+E .045(no option is gi)144 124.8 R -.15(ve)-.25 G .045(n, then).15 F F1
+<ad66>2.545 E F0 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045
+(lues are in 1024-byte increments, e)1.11 F .044(xcept for)-.15 F F1
+<ad74>2.544 E F0 2.544(,w)C .044(hich is)-2.544 F 1.588(in seconds;)144
+136.8 R F1<ad70>4.088 E F0 4.089(,w)C 1.589
+(hich is in units of 512-byte blocks;)-4.089 F F1<ad50>4.089 E F0(,)A F1
+<ad54>4.089 E F0(,)A F1<ad62>4.089 E F0(,)A F1<ad6b>4.089 E F0(,)A F1
+<ad6e>4.089 E F0 4.089(,a)C(nd)-4.089 E F1<ad75>4.089 E F0 4.089(,w)C
+1.589(hich are)-4.089 F 1.476(unscaled v)144 148.8 R 1.476
+(alues; and, when in posix mode,)-.25 F F1<ad63>3.976 E F0(and)3.976 E
+F1<ad66>3.976 E F0 3.976(,w)C 1.476(hich are in 512-byte increments.)
+-3.976 F(The)6.476 E .404(return status is 0 unless an in)144 160.8 R
+-.25(va)-.4 G .404(lid option or ar).25 F .404
+(gument is supplied, or an error occurs while setting)-.18 F 2.5(an)144
+172.8 S .5 -.25(ew l)-2.5 H(imit.).25 E F1(umask)108 189.6 Q F0([)2.5 E
+F1<ad70>A F0 2.5(][)C F1<ad53>-2.5 E F0 2.5(][)C F2(mode)-2.5 E F0(])A
+.2(The user \214le-creation mask is set to)144 201.6 R F2(mode)2.7 E F0
+5.2(.I).18 G(f)-5.2 E F2(mode)3.08 E F0(be)2.88 E .2
+(gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\
+therwise it is interpreted as a symbolic mode mask similar to that acce\
+pted by)144 213.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
+225.6 Q F2(mode)3.263 E F0 .382(is omitted, the current v)3.063 F .382
+(alue of the mask is printed.)-.25 F(The)5.382 E F1<ad53>2.882 E F0 .382
+(option causes the mask to be)2.882 F .547
+(printed in symbolic form; the def)144 237.6 R .547
+(ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G
+(he)-3.047 E F1<ad70>3.047 E F0 .547(option is supplied, and)3.047 F F2
+(mode)144.38 249.6 Q F0 .552
+(is omitted, the output is in a form that may be reused as input.)3.232
+F .551(The return status is 0 if the)5.551 F(mode w)144 261.6 Q
+(as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E
+(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F1
+(unalias)108 278.4 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C F2(name)-2.5 E F0
+(...])2.5 E(Remo)144 290.4 Q 1.955 -.15(ve e)-.15 H(ach).15 E F2(name)
+4.155 E F0 1.655(from the list of de\214ned aliases.)4.155 F(If)6.655 E
+F1<ad61>4.155 E F0 1.655(is supplied, all alias de\214nitions are)4.155
+F(remo)144 302.4 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E
+(alue is true unless a supplied)-.25 E F2(name)2.86 E F0
+(is not a de\214ned alias.)2.68 E F1(unset)108 319.2 Q F0<5bad>2.5 E F1
+(fv)A F0 2.5(][)C<ad>-2.5 E F1(n)A F0 2.5(][)C F2(name)-2.5 E F0(...])
+2.5 E -.15(Fo)144 331.2 S 3.828(re).15 G(ach)-3.828 E F2(name)3.828 E F0
+3.828(,r).18 G(emo)-3.828 E 1.628 -.15(ve t)-.15 H 1.328
+(he corresponding v).15 F 1.327(ariable or function.)-.25 F 1.327
+(If the)6.327 F F1<ad76>3.827 E F0 1.327(option is gi)3.827 F -.15(ve)
+-.25 G 1.327(n, each).15 F F2(name)144.36 343.2 Q F0 1.55
+(refers to a shell v)4.23 F 1.551(ariable, and that v)-.25 F 1.551
+(ariable is remo)-.25 F -.15(ve)-.15 G 4.051(d. Read-only).15 F -.25(va)
+4.051 G 1.551(riables may not be).25 F 4.642(unset. If)144 355.2 R F1
+<ad66>4.642 E F0 2.142(is speci\214ed, each)4.642 F F2(name)5.001 E F0
+2.141(refers to a shell function, and the function de\214nition is)4.821
+F(remo)144 367.2 Q -.15(ve)-.15 G 2.537(d. If).15 F(the)2.537 E F1<ad6e>
+2.537 E F0 .037(option is supplied, and)2.537 F F2(name)2.537 E F0 .037
+(is a v)2.537 F .037(ariable with the)-.25 F F2(namer)2.537 E(ef)-.37 E
+F0(attrib)2.537 E(ute,)-.2 E F2(name)2.537 E F0(will)2.538 E .492
+(be unset rather than the v)144 379.2 R .492(ariable it references.)-.25
+F F1<ad6e>5.492 E F0 .492(has no ef)2.992 F .492(fect if the)-.25 F F1
+<ad66>2.992 E F0 .492(option is supplied.)2.992 F .492(If no)5.492 F .22
+(options are supplied, each)144 391.2 R F2(name)2.72 E F0 .22
+(refers to a v)2.72 F .221(ariable; if there is no v)-.25 F .221
+(ariable by that name, an)-.25 F 2.721(yf)-.15 G(unc-)-2.721 E 1.189
+(tion with that name is unset.)144 403.2 R 1.189(Each unset v)6.189 F
+1.189(ariable or function is remo)-.25 F -.15(ve)-.15 G 3.688(df).15 G
+1.188(rom the en)-3.688 F(vironment)-.4 E 3.205
+(passed to subsequent commands.)144 415.2 R 3.206(If an)8.206 F 5.706
+(yo)-.15 G(f)-5.706 E/F3 9/Times-Bold@0 SF(COMP_W)5.706 E(ORDBREAKS)-.09
+E/F4 9/Times-Roman@0 SF(,)A F3(RANDOM)5.456 E F4(,)A F3(SECONDS)5.456 E
+F4(,)A F3(LINENO)144 427.2 Q F4(,)A F3(HISTCMD)4.348 E F4(,)A F3(FUNCN)
+4.348 E(AME)-.18 E F4(,)A F3(GR)4.348 E(OUPS)-.27 E F4(,)A F0(or)4.348 E
+F3(DIRST)4.598 E -.495(AC)-.81 G(K).495 E F0 2.098(are unset, the)4.348
+F 4.597(yl)-.15 G 2.097(ose their special)-4.597 F(properties, e)144
+439.2 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he)-2.5 E 2.5(ya)-.15
+G(re subsequently reset.)-2.5 E(The e)5 E(xit status is true unless a)
+-.15 E F2(name)2.86 E F0(is readonly)2.68 E(.)-.65 E F1(wait)108 456 Q
+F0([)2.5 E F1(\255fn)A F0 2.5(][)C F2(id ...)-2.5 E F0(])A -.8(Wa)144
+468 S .659(it for each speci\214ed child process and return its termina\
+tion status.).8 F(Each)5.659 E F2(id)3.169 E F0 .659(may be a process)
+3.929 F .009(ID or a job speci\214cation; if a job spec is gi)144 480 R
+-.15(ve)-.25 G .008(n, all processes in that job').15 F 2.508(sp)-.55 G
+.008(ipeline are w)-2.508 F .008(aited for)-.1 F 5.008(.I)-.55 G(f)
+-5.008 E F2(id)144.01 492 Q F0 .521(is not gi)3.791 F -.15(ve)-.25 G
+.521(n, all currently acti).15 F .821 -.15(ve c)-.25 H .521
+(hild processes are w).15 F .521(aited for)-.1 F 3.021(,a)-.4 G .521
+(nd the return status is zero.)-3.021 F(If)5.522 E(the)144 504 Q F1
+<ad6e>3.057 E F0 .557(option is supplied,)3.057 F F1(wait)3.057 E F0 -.1
+(wa)3.057 G .557(its for an).1 F 3.057(yj)-.15 G .557
+(ob to terminate and returns its e)-3.057 F .557(xit status.)-.15 F .556
+(If the)5.556 F F1<ad66>3.056 E F0 .586
+(option is supplied, and job control is enabled,)144 516 R F1(wait)3.086
+E F0(forces)3.086 E F2(id)3.086 E F0 .587
+(to terminate before returning its sta-)3.086 F .756
+(tus, instead of returning when it changes status.)144 528 R(If)5.756 E
+F2(id)3.266 E F0 .755(speci\214es a non-e)4.026 F .755
+(xistent process or job, the)-.15 F .365(return status is 127.)144 540 R
+.365(Otherwise, the return status is the e)5.365 F .365
+(xit status of the last process or job w)-.15 F(aited)-.1 E(for)144 552
+Q(.)-.55 E/F5 10.95/Times-Bold@0 SF(RESTRICTED SHELL)72 568.8 Q F0(If)
+108 580.8 Q F1(bash)4.397 E F0 1.897(is started with the name)4.397 F F1
+(rbash)4.397 E F0 4.397(,o)C 4.397(rt)-4.397 G(he)-4.397 E F1<ad72>4.397
+E F0 1.896(option is supplied at in)4.397 F -.2(vo)-.4 G 1.896
+(cation, the shell becomes).2 F 3.445(restricted. A)108 592.8 R .945
+(restricted shell is used to set up an en)3.445 F .946
+(vironment more controlled than the standard shell.)-.4 F(It)5.946 E
+(beha)108 604.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F1
+(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E
+(wing are disallo)-.25 E(wed or not performed:)-.25 E<83>108 621.6 Q
+(changing directories with)144 621.6 Q F1(cd)2.5 E F0<83>108 638.4 Q
+(setting or unsetting the v)144 638.4 Q(alues of)-.25 E F3(SHELL)2.5 E
+F4(,)A F3 -.666(PA)2.25 G(TH)-.189 E F4(,)A F3(ENV)2.25 E F4(,)A F0(or)
+2.25 E F3 -.27(BA)2.5 G(SH_ENV).27 E F0<83>108 655.2 Q
+(specifying command names containing)144 655.2 Q F1(/)2.5 E F0<83>108
+672 Q(specifying a \214lename containing a)144 672 Q F1(/)2.5 E F0
+(as an ar)2.5 E(gument to the)-.18 E F1(.)2.5 E F0 -.2(bu)5 G
+(iltin command).2 E<83>108 688.8 Q .45
+(specifying a \214lename containing a slash as an ar)144 688.8 R .449
+(gument to the)-.18 F F1<ad70>2.949 E F0 .449(option to the)2.949 F F1
+(hash)2.949 E F0 -.2(bu)2.949 G .449(iltin com-).2 F(mand)144 700.8 Q
+<83>108 717.6 Q(importing function de\214nitions from the shell en)144
+717.6 Q(vironment at startup)-.4 E(GNU Bash 5.0)72 768 Q
+(2018 December 7)139.295 E(79)188.455 E 0 Cg EP
+%%Page: 80 80
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E<83>108 84 Q
+(parsing the v)144 84 Q(alue of)-.25 E/F1 9/Times-Bold@0 SF(SHELLOPTS)
+2.5 E F0(from the shell en)2.25 E(vironment at startup)-.4 E<83>108
+100.8 Q(redirecting output using the >, >|, <>, >&, &>, and >> redirect\
+ion operators)144 100.8 Q<83>108 117.6 Q(using the)144 117.6 Q/F2 10
+/Times-Bold@0 SF(exec)2.5 E F0 -.2(bu)2.5 G
+(iltin command to replace the shell with another command).2 E<83>108
+134.4 Q(adding or deleting b)144 134.4 Q(uiltin commands with the)-.2 E
+F2<ad66>2.5 E F0(and)2.5 E F2<ad64>2.5 E F0(options to the)2.5 E F2
+(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 151.2 Q
+(using the)144 151.2 Q F2(enable)2.5 E F0 -.2(bu)2.5 G
+(iltin command to enable disabled shell b).2 E(uiltins)-.2 E<83>108 168
+Q(specifying the)144 168 Q F2<ad70>2.5 E F0(option to the)2.5 E F2
+(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 184.8 Q
+(turning of)144 184.8 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F2
+(set +r)2.5 E F0(or)2.5 E F2(set +o r)2.5 E(estricted)-.18 E F0(.)A
+(These restrictions are enforced after an)108 201.6 Q 2.5(ys)-.15 G
+(tartup \214les are read.)-2.5 E 1.566
+(When a command that is found to be a shell script is e)108 218.4 R -.15
+(xe)-.15 G 1.567(cuted \(see).15 F F1 1.567(COMMAND EXECUTION)4.067 F F0
+(abo)3.817 E -.15(ve)-.15 G(\),).15 E F2(rbash)108 230.4 Q F0(turns of)
+2.5 E 2.5(fa)-.25 G .3 -.15(ny r)-2.5 H(estrictions in the shell spa).15
+E(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E/F3 10.95
+/Times-Bold@0 SF(SEE ALSO)72 247.2 Q/F4 10/Times-Italic@0 SF(Bash Refer)
+108 259.2 Q(ence Manual)-.37 E F0 2.5(,B)C(rian F)-2.5 E
+(ox and Chet Rame)-.15 E(y)-.15 E F4(The Gnu Readline Libr)108 271.2 Q
+(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E
+F4(The Gnu History Libr)108 283.2 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E
+(ox and Chet Rame)-.15 E(y)-.15 E F4 -.8(Po)108 295.2 S(rtable Oper).8 E
+(ating System Interface \(POSIX\) P)-.15 E(art 2: Shell and Utilities)
+-.8 E F0 2.5(,I)C(EEE --)-2.5 E(http://pubs.opengroup.or)144 307.2 Q
+(g/onlinepubs/9699919799/)-.18 E(http://tiswww)108 319.2 Q
+(.case.edu/~chet/bash/POSIX -- a description of posix mode)-.65 E F4(sh)
+108 331.2 Q F0(\(1\),)A F4(ksh)2.5 E F0(\(1\),)A F4(csh)2.5 E F0(\(1\))A
+F4(emacs)108 343.2 Q F0(\(1\),)A F4(vi)2.5 E F0(\(1\))A F4 -.37(re)108
+355.2 S(adline).37 E F0(\(3\))A F3(FILES)72 372 Q F4(/bin/bash)109.666
+384 Q F0(The)144 396 Q F2(bash)2.5 E F0 -.15(exe)2.5 G(cutable).15 E F4
+(/etc/pr)109.666 408 Q(o\214le)-.45 E F0
+(The systemwide initialization \214le, e)144 420 Q -.15(xe)-.15 G
+(cuted for login shells).15 E F4(~/.bash_pr)109.666 432 Q(o\214le)-.45 E
+F0(The personal initialization \214le, e)144 444 Q -.15(xe)-.15 G
+(cuted for login shells).15 E F4(~/.bashr)109.666 456 Q(c)-.37 E F0
+(The indi)144 468 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G
+(-shell startup \214le).15 E F4(~/.bash_lo)109.666 480 Q(gout)-.1 E F0
+(The indi)144 492 Q(vidual login shell cleanup \214le, e)-.25 E -.15(xe)
+-.15 G(cuted when a login shell e).15 E(xits)-.15 E F4(~/.inputr)109.666
+504 Q(c)-.37 E F0(Indi)144 516 Q(vidual)-.25 E F4 -.37(re)2.5 G(adline)
+.37 E F0(initialization \214le)2.5 E F3 -.548(AU)72 532.8 S(THORS).548 E
+F0(Brian F)108 544.8 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15
+E(bfox@gnu.or)108 556.8 Q(g)-.18 E(Chet Rame)108 573.6 Q 1.3 -.65(y, C)
+-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)
+-.25 G(rsity).15 E(chet.rame)108 585.6 Q(y@case.edu)-.15 E F3 -.11(BU)72
+602.4 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .568
+(If you \214nd a b)108 614.4 R .568(ug in)-.2 F F2(bash,)3.068 E F0 .568
+(you should report it.)3.068 F .568(But \214rst, you should mak)5.568 F
+3.068(es)-.1 G .568(ure that it really is a b)-3.068 F .567(ug, and)-.2
+F 5.625(that it appears in the latest v)108 626.4 R 5.625(ersion of)-.15
+F F2(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.626
+(ersion is al)-.15 F -.1(wa)-.1 G 5.626(ys a).1 F -.25(va)-.2 G 5.626
+(ilable from).25 F F4(ftp://ftp.gnu.or)108 638.4 Q(g/pub/gnu/bash/)-.37
+E F0(.)A .411(Once you ha)108 655.2 R .711 -.15(ve d)-.2 H .411
+(etermined that a b).15 F .411(ug actually e)-.2 F .411(xists, use the)
+-.15 F F4(bashb)3.18 E(ug)-.2 E F0 .41(command to submit a b)3.13 F .41
+(ug report.)-.2 F(If)5.41 E .594(you ha)108 667.2 R .894 -.15(ve a \214)
+-.2 H .595(x, you are encouraged to mail that as well!).15 F .595
+(Suggestions and `philosophical' b)5.595 F .595(ug reports may)-.2 F
+(be mailed to)108 679.2 Q F4 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F0
+(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F2(gnu.bash.b)2.5 E(ug)
+-.2 E F0(.)A(ALL b)108 696 Q(ug reports should include:)-.2 E
+(GNU Bash 5.0)72 768 Q(2018 December 7)139.295 E(80)188.455 E 0 Cg EP
+%%Page: 81 81
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
+(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(The v)108 84 Q
+(ersion number of)-.15 E/F1 10/Times-Bold@0 SF(bash)2.5 E F0(The hardw)
+108 96 Q(are and operating system)-.1 E(The compiler used to compile)108
+108 Q 2.5(Ad)108 120 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)
+-.2 E 2.5(As)108 132 S(hort script or `recipe' which e)-2.5 E -.15(xe)
+-.15 G(rcises the b).15 E(ug)-.2 E/F2 10/Times-Italic@0 SF(bashb)108.27
+148.8 Q(ug)-.2 E F0
+(inserts the \214rst three items automatically into the template it pro)
+2.72 E(vides for \214ling a b)-.15 E(ug report.)-.2 E(Comments and b)108
+165.6 Q(ug reports concerning this manual page should be directed to)-.2
+E F2 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.)
+.25 E/F3 10.95/Times-Bold@0 SF -.11(BU)72 182.4 S(GS).11 E F0(It')108
+194.4 Q 2.5(st)-.55 G(oo big and too slo)-2.5 E -.65(w.)-.25 G 1.869
+(There are some subtle dif)108 211.2 R 1.869(ferences between)-.25 F F1
+(bash)4.369 E F0 1.869(and traditional v)4.369 F 1.869(ersions of)-.15 F
+F1(sh)4.368 E F0 4.368(,m)C 1.868(ostly because of the)-4.368 F/F4 9
+/Times-Bold@0 SF(POSIX)108 223.2 Q F0(speci\214cation.)2.25 E
+(Aliases are confusing in some uses.)108 240 Q(Shell b)108 256.8 Q
+(uiltin commands and functions are not stoppable/restartable.)-.2 E
+1.315(Compound commands and command sequences of the form `a ; b ; c' a\
+re not handled gracefully when)108 273.6 R .39
+(process suspension is attempted.)108 285.6 R .389
+(When a process is stopped, the shell immediately e)5.39 F -.15(xe)-.15
+G .389(cutes the ne).15 F .389(xt com-)-.15 F .192
+(mand in the sequence.)108 297.6 R .192(It suf)5.192 F .192(\214ces to \
+place the sequence of commands between parentheses to force it into a)
+-.25 F(subshell, which may be stopped as a unit.)108 309.6 Q(Array v)108
+326.4 Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E
+(There may be only one acti)108 343.2 Q .3 -.15(ve c)-.25 H
+(oprocess at a time.).15 E(GNU Bash 5.0)72 768 Q(2018 December 7)139.295
+E(81)188.455 E 0 Cg EP
+%%Trailer
+end
+%%EOF
diff --git a/doc/bashbug.0 b/doc/bashbug.0
new file mode 100644
index 0000000..e40eed3
--- /dev/null
+++ b/doc/bashbug.0
@@ -0,0 +1,51 @@
+BASHBUG(1) General Commands Manual BASHBUG(1)
+
+
+
+NNAAMMEE
+ bashbug - report a bug in bash
+
+SSYYNNOOPPSSIISS
+ bbaasshhbbuugg [_-_-_v_e_r_s_i_o_n] [_-_-_h_e_l_p] [_e_m_a_i_l_-_a_d_d_r_e_s_s]
+
+DDEESSCCRRIIPPTTIIOONN
+ bbaasshhbbuugg is a shell script to help the user compose and mail bug reports
+ concerning bash in a standard format. bbaasshhbbuugg invokes the editor spec-
+ ified by the environment variable EEDDIITTOORR on a temporary copy of the bug
+ report format outline. The user must fill in the appropriate fields and
+ exit the editor. bbaasshhbbuugg then mails the completed report to _b_u_g_-
+ _b_a_s_h_@_g_n_u_._o_r_g, or _e_m_a_i_l_-_a_d_d_r_e_s_s. If the report cannot be mailed, it is
+ saved in the file _d_e_a_d_._b_a_s_h_b_u_g in the invoking user's home directory.
+
+ The bug report format outline consists of several sections. The first
+ section provides information about the machine, operating system, the
+ bash version, and the compilation environment. The second section
+ should be filled in with a description of the bug. The third section
+ should be a description of how to reproduce the bug. The optional
+ fourth section is for a proposed fix. Fixes are encouraged.
+
+EENNVVIIRROONNMMEENNTT
+ bbaasshhbbuugg will utilize the following environment variables if they exist:
+
+ EEDDIITTOORR Specifies the preferred editor. If EEDDIITTOORR is not set, bbaasshhbbuugg
+ attempts to locate a number of alternative editors, including
+ eemmaaccss, and defaults to vvii.
+
+ HHOOMMEE Directory in which the failed bug report is saved if the mail
+ fails.
+
+ TTMMPPDDIIRR Directory in which to create temporary files and directories.
+
+SSEEEE AALLSSOO
+ _b_a_s_h(1)
+
+AAUUTTHHOORRSS
+ Brian Fox, Free Software Foundation
+ bfox@gnu.org
+
+ Chet Ramey, Case Western Reserve University
+ chet@po.cwru.edu
+
+
+
+GNU Bash-4.4 2016 February 15 BASHBUG(1)
diff --git a/doc/bashbug.1 b/doc/bashbug.1
new file mode 100644
index 0000000..61d9122
--- /dev/null
+++ b/doc/bashbug.1
@@ -0,0 +1,65 @@
+.\"
+.\" MAN PAGE COMMENTS to
+.\"
+.\" Chet Ramey
+.\" Case Western Reserve University
+.\" chet@po.cwru.edu
+.\"
+.\" Last Change: Mon Feb 15 14:42:40 EST 2016
+.\"
+.TH BASHBUG 1 "2016 February 15" "GNU Bash-4.4"
+.SH NAME
+bashbug \- report a bug in bash
+.SH SYNOPSIS
+\fBbashbug\fP [\fI--version\fP] [\fI--help\fP] [\fIemail-address\fP]
+.SH DESCRIPTION
+.B bashbug
+is a shell script to help the user compose and mail bug reports
+concerning bash in a standard format.
+.B bashbug
+invokes the editor specified by the environment variable
+.SM
+.B EDITOR
+on a temporary copy of the bug report format outline. The user must
+fill in the appropriate fields and exit the editor.
+.B bashbug
+then mails the completed report to \fIbug-bash@gnu.org\fP, or
+\fIemail-address\fP. If the report cannot be mailed, it is saved in the
+file \fIdead.bashbug\fP in the invoking user's home directory.
+.PP
+The bug report format outline consists of several sections. The first
+section provides information about the machine, operating system, the
+bash version, and the compilation environment. The second section
+should be filled in with a description of the bug. The third section
+should be a description of how to reproduce the bug. The optional
+fourth section is for a proposed fix. Fixes are encouraged.
+.SH ENVIRONMENT
+.B bashbug
+will utilize the following environment variables if they exist:
+.TP
+.B EDITOR
+Specifies the preferred editor. If
+.SM
+.B EDITOR
+is not set,
+.B bashbug
+attempts to locate a number of alternative editors, including
+.BR emacs ,
+and defaults to \fBvi\fP.
+.TP
+.B HOME
+Directory in which the failed bug report is saved if the mail fails.
+.TP
+.B TMPDIR
+Directory in which to create temporary files and directories.
+.SH "SEE ALSO"
+.TP
+\fIbash\fP(1)
+.SH AUTHORS
+Brian Fox, Free Software Foundation
+.br
+bfox@gnu.org
+.PP
+Chet Ramey, Case Western Reserve University
+.br
+chet@po.cwru.edu
diff --git a/doc/bashbug.ps b/doc/bashbug.ps
new file mode 100644
index 0000000..a5df73f
--- /dev/null
+++ b/doc/bashbug.ps
@@ -0,0 +1,294 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.22.3
+%%CreationDate: Mon Mar 28 15:34:55 2016
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.22 3
+%%Pages: 1
+%%PageOrder: Ascend
+%%DocumentMedia: Default 612 792 0 () ()
+%%Orientation: Portrait
+%%EndComments
+%%BeginDefaults
+%%PageMedia: Default
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset grops 1.22 3
+%!PS-Adobe-3.0 Resource-ProcSet
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+DEFS/BPhook known{DEFS begin BPhook end}if
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/setcmykcolor where{
+pop
+/Fk{
+setcmykcolor fill
+}bind def
+}if
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/setcmykcolor where{
+pop
+/Ck/setcmykcolor load def
+}if
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne
+2 index/UniqueID ne
+and
+{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+/setpagedevice{}def
+mark
+}bind def
+/PEND{
+cleartomark
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%%BeginFeature: *PageSize Default
+<< /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice
+%%EndFeature
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
+/Times-Roman@0 ENC0/Times-Roman RE
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SHB).35 E 116.13
+(UG\(1\) General)-.1 F(Commands Manual)2.5 E -.35(BA)118.63 G(SHB).35 E
+(UG\(1\))-.1 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0
+(bashb)108 96 Q(ug \255 report a b)-.2 E(ug in bash)-.2 E F1(SYNOPSIS)72
+112.8 Q/F2 10/Times-Bold@0 SF(bashb)108 124.8 Q(ug)-.2 E F0([)2.5 E/F3
+10/Times-Italic@0 SF(--ver)A(sion)-.1 E F0 2.5(][)C F3(--help)-2.5 E F0
+2.5(][)C F3(email-addr)-2.5 E(ess)-.37 E F0(])A F1(DESCRIPTION)72 141.6
+Q F2(bashb)108 153.6 Q(ug)-.2 E F0 .446
+(is a shell script to help the user compose and mail b)2.947 F .446
+(ug reports concerning bash in a standard for)-.2 F(-)-.2 E(mat.)108
+165.6 Q F2(bashb)5.961 E(ug)-.2 E F0(in)3.461 E -.2(vo)-.4 G -.1(ke).2 G
+3.461(st).1 G .962(he editor speci\214ed by the en)-3.461 F .962
+(vironment v)-.4 F(ariable)-.25 E/F4 9/Times-Bold@0 SF(EDIT)3.462 E(OR)
+-.162 E F0 .962(on a temporary cop)3.212 F 3.462(yo)-.1 G(f)-3.462 E
+.374(the b)108 177.6 R .374(ug report format outline. The user must \
+\214ll in the appropriate \214elds and e)-.2 F .374(xit the editor)-.15
+F(.)-.55 E F2(bashb)5.373 E(ug)-.2 E F0(then)2.873 E 1.141
+(mails the completed report to)108 189.6 R F3 -.2(bu)3.641 G
+(g-bash@gnu.or).2 E(g)-.37 E F0 3.641(,o)C(r)-3.641 E F3(email-addr)
+3.641 E(ess)-.37 E F0 6.141(.I)C 3.641(ft)-6.141 G 1.142
+(he report cannot be mailed, it is)-3.641 F(sa)108 201.6 Q -.15(ve)-.2 G
+2.5(di).15 G 2.5(nt)-2.5 G(he \214le)-2.5 E F3(dead.bashb)2.5 E(ug)-.2 E
+F0(in the in)2.5 E -.2(vo)-.4 G(king user').2 E 2.5(sh)-.55 G
+(ome directory)-2.5 E(.)-.65 E .354(The b)108 218.4 R .354
+(ug report format outline consists of se)-.2 F -.15(ve)-.25 G .353
+(ral sections.).15 F .353(The \214rst section pro)5.353 F .353
+(vides information about the)-.15 F .37
+(machine, operating system, the bash v)108 230.4 R .371
+(ersion, and the compilation en)-.15 F 2.871(vironment. The)-.4 F .371
+(second section should)2.871 F .209
+(be \214lled in with a description of the b)108 242.4 R 2.709(ug. The)
+-.2 F .208(third section should be a description of ho)2.709 F 2.708(wt)
+-.25 G 2.708(or)-2.708 G .208(eproduce the)-2.708 F -.2(bu)108 254.4 S
+2.5(g. The).2 F(optional fourth section is for a proposed \214x.)2.5 E
+(Fix)5 E(es are encouraged.)-.15 E F1(ENVIR)72 271.2 Q(ONMENT)-.329 E F2
+(bashb)108 283.2 Q(ug)-.2 E F0(will utilize the follo)2.5 E(wing en)-.25
+E(vironment v)-.4 E(ariables if the)-.25 E 2.5(ye)-.15 G(xist:)-2.65 E
+F2(EDIT)108 300 Q(OR)-.18 E F0 .327(Speci\214es the preferred editor)144
+312 R 2.827(.I)-.55 G(f)-2.827 E F4(EDIT)2.827 E(OR)-.162 E F0 .327
+(is not set,)2.577 F F2(bashb)2.827 E(ug)-.2 E F0 .328
+(attempts to locate a number of alter)2.827 F(-)-.2 E(nati)144 324 Q .3
+-.15(ve e)-.25 H(ditors, including).15 E F2(emacs)2.5 E F0 2.5(,a)C
+(nd def)-2.5 E(aults to)-.1 E F2(vi)2.5 E F0(.)A F2(HOME)108 340.8 Q F0
+(Directory in which the f)144 352.8 Q(ailed b)-.1 E(ug report is sa)-.2
+E -.15(ve)-.2 G 2.5(di).15 G 2.5(ft)-2.5 G(he mail f)-2.5 E(ails.)-.1 E
+F2(TMPDIR)108 369.6 Q F0
+(Directory in which to create temporary \214les and directories.)144
+381.6 Q F1(SEE ALSO)72 398.4 Q F3(bash)108 410.4 Q F0(\(1\))A F1 -.548
+(AU)72 427.2 S(THORS).548 E F0(Brian F)108 439.2 Q(ox, Free Softw)-.15 E
+(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 451.2 Q(g)-.18 E
+(Chet Rame)108 468 Q 1.3 -.65(y, C)-.15 H(ase W).65 E(estern Reserv)-.8
+E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E(chet@po.cwru.edu)
+108 480 Q(GNU Bash-4.4)72 768 Q(2016 February 15)138.46 E(1)193.45 E 0
+Cg EP
+%%Trailer
+end
+%%EOF
diff --git a/doc/bashref.dvi b/doc/bashref.dvi
new file mode 100644
index 0000000..ece4544
--- /dev/null
+++ b/doc/bashref.dvi
Binary files differ
diff --git a/doc/bashref.html b/doc/bashref.html
new file mode 100644
index 0000000..c913de6
--- /dev/null
+++ b/doc/bashref.html
@@ -0,0 +1,15761 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- This text is a brief description of the features that are present in
+the Bash shell (version 5.0, 7 December 2018).
+
+This is Edition 5.0, last updated 7 December 2018,
+of The GNU Bash Reference Manual,
+for Bash, Version 5.0.
+
+Copyright (C) 1988-2018 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+A copy of the license is included in the section entitled
+"GNU Free Documentation License". -->
+<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<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="makeinfo">
+<link href="#Top" rel="start" title="Top">
+<link href="#Indexes" rel="index" title="Indexes">
+<link href="#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="dir.html#Top" rel="up" title="(dir)">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
+blockquote.smallquotation {font-size: smaller}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {margin-left: 3.2em}
+div.smalldisplay {margin-left: 3.2em}
+div.smallexample {margin-left: 3.2em}
+div.smalllisp {margin-left: 3.2em}
+kbd {font-style: oblique}
+pre.display {font-family: inherit}
+pre.format {font-family: inherit}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: inherit; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: inherit; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.nolinebreak {white-space: nowrap}
+span.roman {font-family: initial; font-weight: normal}
+span.sansserif {font-family: sans-serif; font-weight: normal}
+ul.no-bullet {list-style: none}
+-->
+</style>
+
+
+</head>
+
+<body lang="en">
+<h1 class="settitle" align="center">Bash Reference Manual</h1>
+
+
+
+
+
+
+
+
+
+
+<a name="SEC_Contents"></a>
+<h2 class="contents-heading">Table of Contents</h2>
+
+<div class="contents">
+
+<ul class="no-bullet">
+ <li><a name="toc-Introduction-1" href="#Introduction">1 Introduction</a>
+ <ul class="no-bullet">
+ <li><a name="toc-What-is-Bash_003f-1" href="#What-is-Bash_003f">1.1 What is Bash?</a></li>
+ <li><a name="toc-What-is-a-shell_003f-1" href="#What-is-a-shell_003f">1.2 What is a shell?</a></li>
+ </ul></li>
+ <li><a name="toc-Definitions-1" href="#Definitions">2 Definitions</a></li>
+ <li><a name="toc-Basic-Shell-Features-1" href="#Basic-Shell-Features">3 Basic Shell Features</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Shell-Syntax-1" href="#Shell-Syntax">3.1 Shell Syntax</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Shell-Operation-1" href="#Shell-Operation">3.1.1 Shell Operation</a></li>
+ <li><a name="toc-Quoting-1" href="#Quoting">3.1.2 Quoting</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Escape-Character-1" href="#Escape-Character">3.1.2.1 Escape Character</a></li>
+ <li><a name="toc-Single-Quotes-1" href="#Single-Quotes">3.1.2.2 Single Quotes</a></li>
+ <li><a name="toc-Double-Quotes-1" href="#Double-Quotes">3.1.2.3 Double Quotes</a></li>
+ <li><a name="toc-ANSI_002dC-Quoting-1" href="#ANSI_002dC-Quoting">3.1.2.4 ANSI-C Quoting</a></li>
+ <li><a name="toc-Locale_002dSpecific-Translation" href="#Locale-Translation">3.1.2.5 Locale-Specific Translation</a></li>
+ </ul></li>
+ <li><a name="toc-Comments-1" href="#Comments">3.1.3 Comments</a></li>
+ </ul></li>
+ <li><a name="toc-Shell-Commands-1" href="#Shell-Commands">3.2 Shell Commands</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Simple-Commands-1" href="#Simple-Commands">3.2.1 Simple Commands</a></li>
+ <li><a name="toc-Pipelines-1" href="#Pipelines">3.2.2 Pipelines</a></li>
+ <li><a name="toc-Lists-of-Commands" href="#Lists">3.2.3 Lists of Commands</a></li>
+ <li><a name="toc-Compound-Commands-1" href="#Compound-Commands">3.2.4 Compound Commands</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Looping-Constructs-1" href="#Looping-Constructs">3.2.4.1 Looping Constructs</a></li>
+ <li><a name="toc-Conditional-Constructs-1" href="#Conditional-Constructs">3.2.4.2 Conditional Constructs</a></li>
+ <li><a name="toc-Grouping-Commands" href="#Command-Grouping">3.2.4.3 Grouping Commands</a></li>
+ </ul></li>
+ <li><a name="toc-Coprocesses-1" href="#Coprocesses">3.2.5 Coprocesses</a></li>
+ <li><a name="toc-GNU-Parallel-1" href="#GNU-Parallel">3.2.6 GNU Parallel</a></li>
+ </ul></li>
+ <li><a name="toc-Shell-Functions-1" href="#Shell-Functions">3.3 Shell Functions</a></li>
+ <li><a name="toc-Shell-Parameters-1" href="#Shell-Parameters">3.4 Shell Parameters</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Positional-Parameters-1" href="#Positional-Parameters">3.4.1 Positional Parameters</a></li>
+ <li><a name="toc-Special-Parameters-1" href="#Special-Parameters">3.4.2 Special Parameters</a></li>
+ </ul></li>
+ <li><a name="toc-Shell-Expansions-1" href="#Shell-Expansions">3.5 Shell Expansions</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Brace-Expansion-1" href="#Brace-Expansion">3.5.1 Brace Expansion</a></li>
+ <li><a name="toc-Tilde-Expansion-1" href="#Tilde-Expansion">3.5.2 Tilde Expansion</a></li>
+ <li><a name="toc-Shell-Parameter-Expansion-1" href="#Shell-Parameter-Expansion">3.5.3 Shell Parameter Expansion</a></li>
+ <li><a name="toc-Command-Substitution-1" href="#Command-Substitution">3.5.4 Command Substitution</a></li>
+ <li><a name="toc-Arithmetic-Expansion-1" href="#Arithmetic-Expansion">3.5.5 Arithmetic Expansion</a></li>
+ <li><a name="toc-Process-Substitution-1" href="#Process-Substitution">3.5.6 Process Substitution</a></li>
+ <li><a name="toc-Word-Splitting-1" href="#Word-Splitting">3.5.7 Word Splitting</a></li>
+ <li><a name="toc-Filename-Expansion-1" href="#Filename-Expansion">3.5.8 Filename Expansion</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Pattern-Matching-1" href="#Pattern-Matching">3.5.8.1 Pattern Matching</a></li>
+ </ul></li>
+ <li><a name="toc-Quote-Removal-1" href="#Quote-Removal">3.5.9 Quote Removal</a></li>
+ </ul></li>
+ <li><a name="toc-Redirections-1" href="#Redirections">3.6 Redirections</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Redirecting-Input" href="#Redirecting-Input">3.6.1 Redirecting Input</a></li>
+ <li><a name="toc-Redirecting-Output" href="#Redirecting-Output">3.6.2 Redirecting Output</a></li>
+ <li><a name="toc-Appending-Redirected-Output" href="#Appending-Redirected-Output">3.6.3 Appending Redirected Output</a></li>
+ <li><a name="toc-Redirecting-Standard-Output-and-Standard-Error" href="#Redirecting-Standard-Output-and-Standard-Error">3.6.4 Redirecting Standard Output and Standard Error</a></li>
+ <li><a name="toc-Appending-Standard-Output-and-Standard-Error" href="#Appending-Standard-Output-and-Standard-Error">3.6.5 Appending Standard Output and Standard Error</a></li>
+ <li><a name="toc-Here-Documents" href="#Here-Documents">3.6.6 Here Documents</a></li>
+ <li><a name="toc-Here-Strings" href="#Here-Strings">3.6.7 Here Strings</a></li>
+ <li><a name="toc-Duplicating-File-Descriptors" href="#Duplicating-File-Descriptors">3.6.8 Duplicating File Descriptors</a></li>
+ <li><a name="toc-Moving-File-Descriptors" href="#Moving-File-Descriptors">3.6.9 Moving File Descriptors</a></li>
+ <li><a name="toc-Opening-File-Descriptors-for-Reading-and-Writing" href="#Opening-File-Descriptors-for-Reading-and-Writing">3.6.10 Opening File Descriptors for Reading and Writing</a></li>
+ </ul></li>
+ <li><a name="toc-Executing-Commands-1" href="#Executing-Commands">3.7 Executing Commands</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Simple-Command-Expansion-1" href="#Simple-Command-Expansion">3.7.1 Simple Command Expansion</a></li>
+ <li><a name="toc-Command-Search-and-Execution-1" href="#Command-Search-and-Execution">3.7.2 Command Search and Execution</a></li>
+ <li><a name="toc-Command-Execution-Environment-1" href="#Command-Execution-Environment">3.7.3 Command Execution Environment</a></li>
+ <li><a name="toc-Environment-1" href="#Environment">3.7.4 Environment</a></li>
+ <li><a name="toc-Exit-Status-1" href="#Exit-Status">3.7.5 Exit Status</a></li>
+ <li><a name="toc-Signals-1" href="#Signals">3.7.6 Signals</a></li>
+ </ul></li>
+ <li><a name="toc-Shell-Scripts-1" href="#Shell-Scripts">3.8 Shell Scripts</a></li>
+ </ul></li>
+ <li><a name="toc-Shell-Builtin-Commands-1" href="#Shell-Builtin-Commands">4 Shell Builtin Commands</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Bourne-Shell-Builtins-1" href="#Bourne-Shell-Builtins">4.1 Bourne Shell Builtins</a></li>
+ <li><a name="toc-Bash-Builtin-Commands" href="#Bash-Builtins">4.2 Bash Builtin Commands</a></li>
+ <li><a name="toc-Modifying-Shell-Behavior-1" href="#Modifying-Shell-Behavior">4.3 Modifying Shell Behavior</a>
+ <ul class="no-bullet">
+ <li><a name="toc-The-Set-Builtin-1" href="#The-Set-Builtin">4.3.1 The Set Builtin</a></li>
+ <li><a name="toc-The-Shopt-Builtin-1" href="#The-Shopt-Builtin">4.3.2 The Shopt Builtin</a></li>
+ </ul></li>
+ <li><a name="toc-Special-Builtins-1" href="#Special-Builtins">4.4 Special Builtins</a></li>
+ </ul></li>
+ <li><a name="toc-Shell-Variables-1" href="#Shell-Variables">5 Shell Variables</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Bourne-Shell-Variables-1" href="#Bourne-Shell-Variables">5.1 Bourne Shell Variables</a></li>
+ <li><a name="toc-Bash-Variables-1" href="#Bash-Variables">5.2 Bash Variables</a></li>
+ </ul></li>
+ <li><a name="toc-Bash-Features-2" href="#Bash-Features">6 Bash Features</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Invoking-Bash-1" href="#Invoking-Bash">6.1 Invoking Bash</a></li>
+ <li><a name="toc-Bash-Startup-Files-1" href="#Bash-Startup-Files">6.2 Bash Startup Files</a></li>
+ <li><a name="toc-Interactive-Shells-1" href="#Interactive-Shells">6.3 Interactive Shells</a>
+ <ul class="no-bullet">
+ <li><a name="toc-What-is-an-Interactive-Shell_003f-1" href="#What-is-an-Interactive-Shell_003f">6.3.1 What is an Interactive Shell?</a></li>
+ <li><a name="toc-Is-this-Shell-Interactive_003f-1" href="#Is-this-Shell-Interactive_003f">6.3.2 Is this Shell Interactive?</a></li>
+ <li><a name="toc-Interactive-Shell-Behavior-1" href="#Interactive-Shell-Behavior">6.3.3 Interactive Shell Behavior</a></li>
+ </ul></li>
+ <li><a name="toc-Bash-Conditional-Expressions-1" href="#Bash-Conditional-Expressions">6.4 Bash Conditional Expressions</a></li>
+ <li><a name="toc-Shell-Arithmetic-1" href="#Shell-Arithmetic">6.5 Shell Arithmetic</a></li>
+ <li><a name="toc-Aliases-1" href="#Aliases">6.6 Aliases</a></li>
+ <li><a name="toc-Arrays-1" href="#Arrays">6.7 Arrays</a></li>
+ <li><a name="toc-The-Directory-Stack-1" href="#The-Directory-Stack">6.8 The Directory Stack</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Directory-Stack-Builtins-1" href="#Directory-Stack-Builtins">6.8.1 Directory Stack Builtins</a></li>
+ </ul></li>
+ <li><a name="toc-Controlling-the-Prompt-1" href="#Controlling-the-Prompt">6.9 Controlling the Prompt</a></li>
+ <li><a name="toc-The-Restricted-Shell-1" href="#The-Restricted-Shell">6.10 The Restricted Shell</a></li>
+ <li><a name="toc-Bash-POSIX-Mode-1" href="#Bash-POSIX-Mode">6.11 Bash POSIX Mode</a></li>
+ </ul></li>
+ <li><a name="toc-Job-Control-1" href="#Job-Control">7 Job Control</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Job-Control-Basics-1" href="#Job-Control-Basics">7.1 Job Control Basics</a></li>
+ <li><a name="toc-Job-Control-Builtins-1" href="#Job-Control-Builtins">7.2 Job Control Builtins</a></li>
+ <li><a name="toc-Job-Control-Variables-1" href="#Job-Control-Variables">7.3 Job Control Variables</a></li>
+ </ul></li>
+ <li><a name="toc-Command-Line-Editing-1" href="#Command-Line-Editing">8 Command Line Editing</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Introduction-to-Line-Editing" href="#Introduction-and-Notation">8.1 Introduction to Line Editing</a></li>
+ <li><a name="toc-Readline-Interaction-1" href="#Readline-Interaction">8.2 Readline Interaction</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Readline-Bare-Essentials-1" href="#Readline-Bare-Essentials">8.2.1 Readline Bare Essentials</a></li>
+ <li><a name="toc-Readline-Movement-Commands-1" href="#Readline-Movement-Commands">8.2.2 Readline Movement Commands</a></li>
+ <li><a name="toc-Readline-Killing-Commands-1" href="#Readline-Killing-Commands">8.2.3 Readline Killing Commands</a></li>
+ <li><a name="toc-Readline-Arguments-1" href="#Readline-Arguments">8.2.4 Readline Arguments</a></li>
+ <li><a name="toc-Searching-for-Commands-in-the-History" href="#Searching">8.2.5 Searching for Commands in the History</a></li>
+ </ul></li>
+ <li><a name="toc-Readline-Init-File-1" href="#Readline-Init-File">8.3 Readline Init File</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Readline-Init-File-Syntax-1" href="#Readline-Init-File-Syntax">8.3.1 Readline Init File Syntax</a></li>
+ <li><a name="toc-Conditional-Init-Constructs-1" href="#Conditional-Init-Constructs">8.3.2 Conditional Init Constructs</a></li>
+ <li><a name="toc-Sample-Init-File-1" href="#Sample-Init-File">8.3.3 Sample Init File</a></li>
+ </ul></li>
+ <li><a name="toc-Bindable-Readline-Commands-1" href="#Bindable-Readline-Commands">8.4 Bindable Readline Commands</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Commands-For-Moving-1" href="#Commands-For-Moving">8.4.1 Commands For Moving</a></li>
+ <li><a name="toc-Commands-For-Manipulating-The-History" href="#Commands-For-History">8.4.2 Commands For Manipulating The History</a></li>
+ <li><a name="toc-Commands-For-Changing-Text" href="#Commands-For-Text">8.4.3 Commands For Changing Text</a></li>
+ <li><a name="toc-Killing-And-Yanking" href="#Commands-For-Killing">8.4.4 Killing And Yanking</a></li>
+ <li><a name="toc-Specifying-Numeric-Arguments" href="#Numeric-Arguments">8.4.5 Specifying Numeric Arguments</a></li>
+ <li><a name="toc-Letting-Readline-Type-For-You" href="#Commands-For-Completion">8.4.6 Letting Readline Type For You</a></li>
+ <li><a name="toc-Keyboard-Macros-1" href="#Keyboard-Macros">8.4.7 Keyboard Macros</a></li>
+ <li><a name="toc-Some-Miscellaneous-Commands" href="#Miscellaneous-Commands">8.4.8 Some Miscellaneous Commands</a></li>
+ </ul></li>
+ <li><a name="toc-Readline-vi-Mode-1" href="#Readline-vi-Mode">8.5 Readline vi Mode</a></li>
+ <li><a name="toc-Programmable-Completion-1" href="#Programmable-Completion">8.6 Programmable Completion</a></li>
+ <li><a name="toc-Programmable-Completion-Builtins-1" href="#Programmable-Completion-Builtins">8.7 Programmable Completion Builtins</a></li>
+ <li><a name="toc-A-Programmable-Completion-Example-1" href="#A-Programmable-Completion-Example">8.8 A Programmable Completion Example</a></li>
+ </ul></li>
+ <li><a name="toc-Using-History-Interactively-1" href="#Using-History-Interactively">9 Using History Interactively</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Bash-History-Facilities-1" href="#Bash-History-Facilities">9.1 Bash History Facilities</a></li>
+ <li><a name="toc-Bash-History-Builtins-1" href="#Bash-History-Builtins">9.2 Bash History Builtins</a></li>
+ <li><a name="toc-History-Expansion" href="#History-Interaction">9.3 History Expansion</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Event-Designators-1" href="#Event-Designators">9.3.1 Event Designators</a></li>
+ <li><a name="toc-Word-Designators-1" href="#Word-Designators">9.3.2 Word Designators</a></li>
+ <li><a name="toc-Modifiers-1" href="#Modifiers">9.3.3 Modifiers</a></li>
+ </ul></li>
+ </ul></li>
+ <li><a name="toc-Installing-Bash-1" href="#Installing-Bash">10 Installing Bash</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Basic-Installation-1" href="#Basic-Installation">10.1 Basic Installation</a></li>
+ <li><a name="toc-Compilers-and-Options-1" href="#Compilers-and-Options">10.2 Compilers and Options</a></li>
+ <li><a name="toc-Compiling-For-Multiple-Architectures-1" href="#Compiling-For-Multiple-Architectures">10.3 Compiling For Multiple Architectures</a></li>
+ <li><a name="toc-Installation-Names-1" href="#Installation-Names">10.4 Installation Names</a></li>
+ <li><a name="toc-Specifying-the-System-Type-1" href="#Specifying-the-System-Type">10.5 Specifying the System Type</a></li>
+ <li><a name="toc-Sharing-Defaults-1" href="#Sharing-Defaults">10.6 Sharing Defaults</a></li>
+ <li><a name="toc-Operation-Controls-1" href="#Operation-Controls">10.7 Operation Controls</a></li>
+ <li><a name="toc-Optional-Features-1" href="#Optional-Features">10.8 Optional Features</a></li>
+ </ul></li>
+ <li><a name="toc-Reporting-Bugs-1" href="#Reporting-Bugs">Appendix A Reporting Bugs</a></li>
+ <li><a name="toc-Major-Differences-From-The-Bourne-Shell-1" href="#Major-Differences-From-The-Bourne-Shell">Appendix B Major Differences From The Bourne Shell</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Implementation-Differences-From-The-SVR4_002e2-Shell" href="#Implementation-Differences-From-The-SVR4_002e2-Shell">B.1 Implementation Differences From The SVR4.2 Shell</a></li>
+ </ul></li>
+ <li><a name="toc-GNU-Free-Documentation-License-1" href="#GNU-Free-Documentation-License">Appendix C GNU Free Documentation License</a></li>
+ <li><a name="toc-Indexes-1" href="#Indexes">Appendix D Indexes</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Index-of-Shell-Builtin-Commands" href="#Builtin-Index">D.1 Index of Shell Builtin Commands</a></li>
+ <li><a name="toc-Index-of-Shell-Reserved-Words" href="#Reserved-Word-Index">D.2 Index of Shell Reserved Words</a></li>
+ <li><a name="toc-Parameter-and-Variable-Index" href="#Variable-Index">D.3 Parameter and Variable Index</a></li>
+ <li><a name="toc-Function-Index-1" href="#Function-Index">D.4 Function Index</a></li>
+ <li><a name="toc-Concept-Index-1" href="#Concept-Index">D.5 Concept Index</a></li>
+ </ul></li>
+</ul>
+</div>
+
+
+<a name="Top"></a>
+<div class="header">
+<p>
+Next: <a href="#Introduction" accesskey="n" rel="next">Introduction</a>, Previous: <a href="dir.html#Top" accesskey="p" rel="prev">(dir)</a>, Up: <a href="dir.html#Top" accesskey="u" rel="up">(dir)</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-Features-1"></a>
+<h1 class="top">Bash Features</h1>
+
+<p>This text is a brief description of the features that are present in
+the Bash shell (version 5.0, 7 December 2018).
+The Bash home page is <a href="http://www.gnu.org/software/bash/">http://www.gnu.org/software/bash/</a>.
+</p>
+<p>This is Edition 5.0, last updated 7 December 2018,
+of <cite>The GNU Bash Reference Manual</cite>,
+for <code>Bash</code>, Version 5.0.
+</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 (<samp>sh</samp>), the Korn Shell
+(<samp>ksh</samp>), and the C-shell (<samp>csh</samp> and its successor,
+<samp>tcsh</samp>). The following menu breaks the features up into
+categories, noting which features were inspired by other shells and
+which are specific to Bash.
+</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>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Introduction" accesskey="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">&bull; <a href="#Definitions" accesskey="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">&bull; <a href="#Basic-Shell-Features" accesskey="3">Basic Shell Features</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The shell &quot;building blocks&quot;.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Shell-Builtin-Commands" accesskey="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">&bull; <a href="#Shell-Variables" accesskey="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">&bull; <a href="#Bash-Features" accesskey="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">&bull; <a href="#Job-Control" accesskey="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">&bull; <a href="#Command-Line-Editing" accesskey="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">&bull; <a href="#Using-History-Interactively" accesskey="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">&bull; <a href="#Installing-Bash">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">&bull; <a href="#Reporting-Bugs">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">&bull; <a href="#Major-Differences-From-The-Bourne-Shell">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">&bull; <a href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Copying and sharing this documentation.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Indexes">Indexes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Various indexes for this manual.
+</td></tr>
+</table>
+
+<hr>
+<a name="Introduction"></a>
+<div class="header">
+<p>
+Next: <a href="#Definitions" accesskey="n" rel="next">Definitions</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Introduction-1"></a>
+<h2 class="chapter">1 Introduction</h2>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#What-is-Bash_003f" accesskey="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">&bull; <a href="#What-is-a-shell_003f" accesskey="2">What is a shell?</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A brief introduction to shells.
+</td></tr>
+</table>
+
+<hr>
+<a name="What-is-Bash_003f"></a>
+<div class="header">
+<p>
+Next: <a href="#What-is-a-shell_003f" accesskey="n" rel="next">What is a shell?</a>, Up: <a href="#Introduction" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="What-is-Bash_003f-1"></a>
+<h3 class="section">1.1 What is Bash?</h3>
+
+<p>Bash is the shell, or command language interpreter,
+for the <small>GNU</small> operating system.
+The name is an acronym for the &lsquo;<samp>Bourne-Again SHell</samp>&rsquo;,
+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 <small>IEEE</small>
+<small>POSIX</small> Shell and Tools portion of the <small>IEEE</small> <small>POSIX</small>
+specification (<small>IEEE</small> Standard 1003.1).
+It offers functional improvements over <code>sh</code> for both interactive and
+programming use.
+</p>
+<p>While the <small>GNU</small> operating system provides other shells, including
+a version of <code>csh</code>, Bash is the default shell.
+Like other <small>GNU</small> 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 <small>MS-DOS</small>, <small>OS/2</small>,
+and Windows platforms.
+</p>
+<hr>
+<a name="What-is-a-shell_003f"></a>
+<div class="header">
+<p>
+Previous: <a href="#What-is-Bash_003f" accesskey="p" rel="prev">What is Bash?</a>, Up: <a href="#Introduction" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="What-is-a-shell_003f-1"></a>
+<h3 class="section">1.2 What is a shell?</h3>
+
+<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 <small>GNU</small> 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 <samp>/bin</samp>, 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 <small>GNU</small> 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&rsquo;
+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>
+<hr>
+<a name="Definitions"></a>
+<div class="header">
+<p>
+Next: <a href="#Basic-Shell-Features" accesskey="n" rel="next">Basic Shell Features</a>, Previous: <a href="#Introduction" accesskey="p" rel="prev">Introduction</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Definitions-1"></a>
+<h2 class="chapter">2 Definitions</h2>
+<p>These definitions are used throughout the remainder of this manual.
+</p>
+<dl compact="compact">
+<dt><code>POSIX</code></dt>
+<dd><a name="index-POSIX"></a>
+<p>A family of open system standards based on Unix. Bash
+is primarily concerned with the Shell and Utilities portion of the
+<small>POSIX</small> 1003.1 standard.
+</p>
+</dd>
+<dt><code>blank</code></dt>
+<dd><p>A space or tab character.
+</p>
+</dd>
+<dt><code>builtin</code></dt>
+<dd><a name="index-builtin-1"></a>
+<p>A command that is implemented internally by the shell itself, rather
+than by an executable program somewhere in the file system.
+</p>
+</dd>
+<dt><code>control operator</code></dt>
+<dd><a name="index-control-operator"></a>
+<p>A <code>token</code> that performs a control function. It is a <code>newline</code>
+or one of the following:
+&lsquo;<samp>||</samp>&rsquo;, &lsquo;<samp>&amp;&amp;</samp>&rsquo;, &lsquo;<samp>&amp;</samp>&rsquo;, &lsquo;<samp>;</samp>&rsquo;, &lsquo;<samp>;;</samp>&rsquo;, &lsquo;<samp>;&amp;</samp>&rsquo;, &lsquo;<samp>;;&amp;</samp>&rsquo;,
+&lsquo;<samp>|</samp>&rsquo;, &lsquo;<samp>|&amp;</samp>&rsquo;, &lsquo;<samp>(</samp>&rsquo;, or &lsquo;<samp>)</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>exit status</code></dt>
+<dd><a name="index-exit-status"></a>
+<p>The value returned by a command to its caller. The value is restricted
+to eight bits, so the maximum value is 255.
+</p>
+</dd>
+<dt><code>field</code></dt>
+<dd><a name="index-field"></a>
+<p>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>
+</dd>
+<dt><code>filename</code></dt>
+<dd><a name="index-filename"></a>
+<p>A string of characters used to identify a file.
+</p>
+</dd>
+<dt><code>job</code></dt>
+<dd><a name="index-job"></a>
+<p>A set of processes comprising a pipeline, and any processes descended
+from it, that are all in the same process group.
+</p>
+</dd>
+<dt><code>job control</code></dt>
+<dd><a name="index-job-control"></a>
+<p>A mechanism by which users can selectively stop (suspend) and restart
+(resume) execution of processes.
+</p>
+</dd>
+<dt><code>metacharacter</code></dt>
+<dd><a name="index-metacharacter"></a>
+<p>A character that, when unquoted, separates words. A metacharacter is
+a <code>space</code>, <code>tab</code>, <code>newline</code>, or one of the following characters:
+&lsquo;<samp>|</samp>&rsquo;, &lsquo;<samp>&amp;</samp>&rsquo;, &lsquo;<samp>;</samp>&rsquo;, &lsquo;<samp>(</samp>&rsquo;, &lsquo;<samp>)</samp>&rsquo;, &lsquo;<samp>&lt;</samp>&rsquo;, or
+&lsquo;<samp>&gt;</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>name</code></dt>
+<dd><a name="index-name"></a>
+<a name="index-identifier"></a>
+<p>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>
+</dd>
+<dt><code>operator</code></dt>
+<dd><a name="index-operator_002c-shell"></a>
+<p>A <code>control operator</code> or a <code>redirection operator</code>.
+See <a href="#Redirections">Redirections</a>, for a list of redirection operators.
+Operators contain at least one unquoted <code>metacharacter</code>.
+</p>
+</dd>
+<dt><code>process group</code></dt>
+<dd><a name="index-process-group"></a>
+<p>A collection of related processes each having the same process
+group <small>ID</small>.
+</p>
+</dd>
+<dt><code>process group ID</code></dt>
+<dd><a name="index-process-group-ID"></a>
+<p>A unique identifier that represents a <code>process group</code>
+during its lifetime.
+</p>
+</dd>
+<dt><code>reserved word</code></dt>
+<dd><a name="index-reserved-word"></a>
+<p>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>
+</dd>
+<dt><code>return status</code></dt>
+<dd><a name="index-return-status"></a>
+<p>A synonym for <code>exit status</code>.
+</p>
+</dd>
+<dt><code>signal</code></dt>
+<dd><a name="index-signal"></a>
+<p>A mechanism by which a process may be notified by the kernel
+of an event occurring in the system.
+</p>
+</dd>
+<dt><code>special builtin</code></dt>
+<dd><a name="index-special-builtin"></a>
+<p>A shell builtin command that has been classified as special by the
+<small>POSIX</small> standard.
+</p>
+</dd>
+<dt><code>token</code></dt>
+<dd><a name="index-token"></a>
+<p>A sequence of characters considered a single unit by the shell.
+It is either a <code>word</code> or an <code>operator</code>.
+</p>
+</dd>
+<dt><code>word</code></dt>
+<dd><a name="index-word"></a>
+<p>A sequence of characters treated as a unit by the shell.
+Words may not include unquoted <code>metacharacters</code>.
+</p></dd>
+</dl>
+
+<hr>
+<a name="Basic-Shell-Features"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Builtin-Commands" accesskey="n" rel="next">Shell Builtin Commands</a>, Previous: <a href="#Definitions" accesskey="p" rel="prev">Definitions</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Basic-Shell-Features-1"></a>
+<h2 class="chapter">3 Basic Shell Features</h2>
+<a name="index-Bourne-shell"></a>
+
+<p>Bash is an acronym for &lsquo;<samp>Bourne-Again SHell</samp>&rsquo;.
+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 <small>POSIX</small>
+specification for the &lsquo;standard&rsquo; Unix shell.
+</p>
+<p>This chapter briefly summarizes the shell&rsquo;s &lsquo;building blocks&rsquo;:
+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>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Shell-Syntax" accesskey="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">&bull; <a href="#Shell-Commands" accesskey="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">&bull; <a href="#Shell-Functions" accesskey="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">&bull; <a href="#Shell-Parameters" accesskey="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">&bull; <a href="#Shell-Expansions" accesskey="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">&bull; <a href="#Redirections" accesskey="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">&bull; <a href="#Executing-Commands" accesskey="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">&bull; <a href="#Shell-Scripts" accesskey="8">Shell Scripts</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Executing files of shell commands.
+</td></tr>
+</table>
+
+<hr>
+<a name="Shell-Syntax"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Commands" accesskey="n" rel="next">Shell Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Syntax-1"></a>
+<h3 class="section">3.1 Shell Syntax</h3>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Shell-Operation" accesskey="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">&bull; <a href="#Quoting" accesskey="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">&bull; <a href="#Comments" accesskey="3">Comments</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to specify comments.
+</td></tr>
+</table>
+
+<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 (&lsquo;<samp>#</samp>&rsquo;), and the rest
+of that line.
+</p>
+<p>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&rsquo;s exit status, and makes that exit status
+available for further inspection or processing.
+</p>
+<hr>
+<a name="Shell-Operation"></a>
+<div class="header">
+<p>
+Next: <a href="#Quoting" accesskey="n" rel="next">Quoting</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Operation-1"></a>
+<h4 class="subsection">3.1.1 Shell Operation</h4>
+
+<p>The following is a brief description of the shell&rsquo;s operation when it
+reads and executes a command. Basically, the shell does the
+following:
+</p>
+<ol>
+<li> Reads its input from a file (see <a href="#Shell-Scripts">Shell Scripts</a>), from a string
+supplied as an argument to the <samp>-c</samp> invocation option
+(see <a href="#Invoking-Bash">Invoking Bash</a>), or from the user&rsquo;s terminal.
+
+</li><li> Breaks the input into words and operators, obeying the quoting rules
+described in <a href="#Quoting">Quoting</a>. These tokens are separated by
+<code>metacharacters</code>. Alias expansion is performed by this step
+(see <a href="#Aliases">Aliases</a>).
+
+</li><li> Parses the tokens into simple and compound commands
+(see <a href="#Shell-Commands">Shell Commands</a>).
+
+</li><li> Performs the various shell expansions (see <a href="#Shell-Expansions">Shell Expansions</a>), breaking
+the expanded tokens into lists of filenames (see <a href="#Filename-Expansion">Filename Expansion</a>)
+and commands and arguments.
+
+</li><li> Performs any necessary redirections (see <a href="#Redirections">Redirections</a>) and removes
+the redirection operators and their operands from the argument list.
+
+</li><li> Executes the command (see <a href="#Executing-Commands">Executing Commands</a>).
+
+</li><li> Optionally waits for the command to complete and collects its exit
+status (see <a href="#Exit-Status">Exit Status</a>).
+
+</li></ol>
+
+<hr>
+<a name="Quoting"></a>
+<div class="header">
+<p>
+Next: <a href="#Comments" accesskey="n" rel="next">Comments</a>, Previous: <a href="#Shell-Operation" accesskey="p" rel="prev">Shell Operation</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Quoting-1"></a>
+<h4 class="subsection">3.1.2 Quoting</h4>
+<a name="index-quoting"></a>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Escape-Character" accesskey="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">&bull; <a href="#Single-Quotes" accesskey="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">&bull; <a href="#Double-Quotes" accesskey="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">&bull; <a href="#ANSI_002dC-Quoting" accesskey="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">&bull; <a href="#Locale-Translation" accesskey="5">Locale Translation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to translate strings into different languages.
+</td></tr>
+</table>
+
+<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 <a href="#Definitions">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 <a href="#History-Interaction">History Interaction</a>), the
+<var>history expansion</var> character, usually &lsquo;<samp>!</samp>&rsquo;, must be quoted
+to prevent history expansion. See <a href="#Bash-History-Facilities">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>
+<hr>
+<a name="Escape-Character"></a>
+<div class="header">
+<p>
+Next: <a href="#Single-Quotes" accesskey="n" rel="next">Single Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Escape-Character-1"></a>
+<h4 class="subsubsection">3.1.2.1 Escape Character</h4>
+<p>A non-quoted backslash &lsquo;<samp>\</samp>&rsquo; 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>
+<hr>
+<a name="Single-Quotes"></a>
+<div class="header">
+<p>
+Next: <a href="#Double-Quotes" accesskey="n" rel="next">Double Quotes</a>, Previous: <a href="#Escape-Character" accesskey="p" rel="prev">Escape Character</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Single-Quotes-1"></a>
+<h4 class="subsubsection">3.1.2.2 Single Quotes</h4>
+
+<p>Enclosing characters in single quotes (&lsquo;<samp>'</samp>&rsquo;) 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>
+<hr>
+<a name="Double-Quotes"></a>
+<div class="header">
+<p>
+Next: <a href="#ANSI_002dC-Quoting" accesskey="n" rel="next">ANSI-C Quoting</a>, Previous: <a href="#Single-Quotes" accesskey="p" rel="prev">Single Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Double-Quotes-1"></a>
+<h4 class="subsubsection">3.1.2.3 Double Quotes</h4>
+
+<p>Enclosing characters in double quotes (&lsquo;<samp>&quot;</samp>&rsquo;) preserves the literal value
+of all characters within the quotes, with the exception of
+&lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, &lsquo;<samp>\</samp>&rsquo;,
+and, when history expansion is enabled, &lsquo;<samp>!</samp>&rsquo;.
+When the shell is in
+<small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>),
+the &lsquo;<samp>!</samp>&rsquo; has no special meaning
+within double quotes, even when history expansion is enabled.
+The characters &lsquo;<samp>$</samp>&rsquo; and &lsquo;<samp>`</samp>&rsquo;
+retain their special meaning within double quotes (see <a href="#Shell-Expansions">Shell Expansions</a>).
+The backslash retains its special meaning only when followed by one of
+the following characters:
+&lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, &lsquo;<samp>&quot;</samp>&rsquo;, &lsquo;<samp>\</samp>&rsquo;, 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 &lsquo;<samp>!</samp>&rsquo;
+appearing in double quotes is escaped using a backslash.
+The backslash preceding the &lsquo;<samp>!</samp>&rsquo; is not removed.
+</p>
+<p>The special parameters &lsquo;<samp>*</samp>&rsquo; and &lsquo;<samp>@</samp>&rsquo; have special meaning
+when in double quotes (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+</p>
+<hr>
+<a name="ANSI_002dC-Quoting"></a>
+<div class="header">
+<p>
+Next: <a href="#Locale-Translation" accesskey="n" rel="next">Locale Translation</a>, Previous: <a href="#Double-Quotes" accesskey="p" rel="prev">Double Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="ANSI_002dC-Quoting-1"></a>
+<h4 class="subsubsection">3.1.2.4 ANSI-C Quoting</h4>
+<a name="index-quoting_002c-ANSI"></a>
+
+<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>
+<dl compact="compact">
+<dt><code>\a</code></dt>
+<dd><p>alert (bell)
+</p></dd>
+<dt><code>\b</code></dt>
+<dd><p>backspace
+</p></dd>
+<dt><code>\e</code></dt>
+<dt><code>\E</code></dt>
+<dd><p>an escape character (not ANSI C)
+</p></dd>
+<dt><code>\f</code></dt>
+<dd><p>form feed
+</p></dd>
+<dt><code>\n</code></dt>
+<dd><p>newline
+</p></dd>
+<dt><code>\r</code></dt>
+<dd><p>carriage return
+</p></dd>
+<dt><code>\t</code></dt>
+<dd><p>horizontal tab
+</p></dd>
+<dt><code>\v</code></dt>
+<dd><p>vertical tab
+</p></dd>
+<dt><code>\\</code></dt>
+<dd><p>backslash
+</p></dd>
+<dt><code>\'</code></dt>
+<dd><p>single quote
+</p></dd>
+<dt><code>\&quot;</code></dt>
+<dd><p>double quote
+</p></dd>
+<dt><code>\?</code></dt>
+<dd><p>question mark
+</p></dd>
+<dt><code>\<var>nnn</var></code></dt>
+<dd><p>the eight-bit character whose value is the octal value <var>nnn</var>
+(one to three octal digits)
+</p></dd>
+<dt><code>\x<var>HH</var></code></dt>
+<dd><p>the eight-bit character whose value is the hexadecimal value <var>HH</var>
+(one or two hex digits)
+</p></dd>
+<dt><code>\u<var>HHHH</var></code></dt>
+<dd><p>the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+<var>HHHH</var> (one to four hex digits)
+</p></dd>
+<dt><code>\U<var>HHHHHHHH</var></code></dt>
+<dd><p>the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+<var>HHHHHHHH</var> (one to eight hex digits)
+</p></dd>
+<dt><code>\c<var>x</var></code></dt>
+<dd><p>a control-<var>x</var> character
+</p></dd>
+</dl>
+
+<p>The expanded result is single-quoted, as if the dollar sign had not
+been present.
+</p>
+<hr>
+<a name="Locale-Translation"></a>
+<div class="header">
+<p>
+Previous: <a href="#ANSI_002dC-Quoting" accesskey="p" rel="prev">ANSI-C Quoting</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Locale_002dSpecific-Translation"></a>
+<h4 class="subsubsection">3.1.2.5 Locale-Specific Translation</h4>
+<a name="index-localization"></a>
+<a name="index-internationalization"></a>
+<a name="index-native-languages"></a>
+<a name="index-translation_002c-native-languages"></a>
+
+<p>A double-quoted string preceded by a dollar sign (&lsquo;<samp>$</samp>&rsquo;) 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>
+<a name="index-LC_005fMESSAGES"></a>
+<a name="index-TEXTDOMAIN"></a>
+<a name="index-TEXTDOMAINDIR"></a>
+<p>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 &lsquo;<samp>.mo</samp>&rsquo;. 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>
+<hr>
+<a name="Comments"></a>
+<div class="header">
+<p>
+Previous: <a href="#Quoting" accesskey="p" rel="prev">Quoting</a>, Up: <a href="#Shell-Syntax" accesskey="u" rel="up">Shell Syntax</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Comments-1"></a>
+<h4 class="subsection">3.1.3 Comments</h4>
+<a name="index-comments_002c-shell"></a>
+
+<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 <a href="#The-Shopt-Builtin">The Shopt Builtin</a>),
+a word beginning with &lsquo;<samp>#</samp>&rsquo;
+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 <a href="#Interactive-Shells">Interactive Shells</a>, for a description of what makes
+a shell interactive.
+</p>
+<hr>
+<a name="Shell-Commands"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Functions" accesskey="n" rel="next">Shell Functions</a>, Previous: <a href="#Shell-Syntax" accesskey="p" rel="prev">Shell Syntax</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Commands-1"></a>
+<h3 class="section">3.2 Shell Commands</h3>
+<a name="index-commands_002c-shell"></a>
+
+<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>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Simple-Commands" accesskey="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">&bull; <a href="#Pipelines" accesskey="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">&bull; <a href="#Lists" accesskey="3">Lists</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to execute commands sequentially.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Compound-Commands" accesskey="4">Compound Commands</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Shell commands for control flow.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Coprocesses" accesskey="5">Coprocesses</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Two-way communication between commands.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#GNU-Parallel" accesskey="6">GNU Parallel</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Running commands in parallel.
+</td></tr>
+</table>
+
+<hr>
+<a name="Simple-Commands"></a>
+<div class="header">
+<p>
+Next: <a href="#Pipelines" accesskey="n" rel="next">Pipelines</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Simple-Commands-1"></a>
+<h4 class="subsection">3.2.1 Simple Commands</h4>
+<a name="index-commands_002c-simple"></a>
+
+<p>A simple command is the kind of command encountered most often.
+It&rsquo;s just a sequence of words separated by <code>blank</code>s, terminated
+by one of the shell&rsquo;s control operators (see <a href="#Definitions">Definitions</a>). The
+first word generally specifies a command to be executed, with the
+rest of the words being that command&rsquo;s arguments.
+</p>
+<p>The return status (see <a href="#Exit-Status">Exit Status</a>) of a simple command is
+its exit status as provided
+by the <small>POSIX</small> 1003.1 <code>waitpid</code> function, or 128+<var>n</var> if
+the command was terminated by signal <var>n</var>.
+</p>
+<hr>
+<a name="Pipelines"></a>
+<div class="header">
+<p>
+Next: <a href="#Lists" accesskey="n" rel="next">Lists</a>, Previous: <a href="#Simple-Commands" accesskey="p" rel="prev">Simple Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Pipelines-1"></a>
+<h4 class="subsection">3.2.2 Pipelines</h4>
+<a name="index-pipeline"></a>
+<a name="index-commands_002c-pipelines"></a>
+
+<p>A <code>pipeline</code> is a sequence of one or more commands separated by
+one of the control operators &lsquo;<samp>|</samp>&rsquo; or &lsquo;<samp>|&amp;</samp>&rsquo;.
+</p>
+<a name="index-time"></a>
+<a name="index-_0021"></a>
+<a name="index-command-timing"></a>
+<p>The format for a pipeline is
+</p><div class="example">
+<pre class="example">[time [-p]] [!] <var>command1</var> [ | or |&amp; <var>command2</var> ] &hellip;
+</pre></div>
+
+<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&rsquo;s output. This
+connection is performed before any redirections specified by the
+command.
+</p>
+<p>If &lsquo;<samp>|&amp;</samp>&rsquo; is used, <var>command1</var>&rsquo;s standard error, in addition to
+its standard output, is connected to
+<var>command2</var>&rsquo;s standard input through the pipe;
+it is shorthand for <code>2&gt;&amp;1 |</code>.
+This implicit redirection of the standard error to the standard output is
+performed after any redirections specified by the command.
+</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&rsquo;s execution.
+The <samp>-p</samp> option changes the output format to that specified
+by <small>POSIX</small>.
+When the shell is in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>),
+it does not recognize <code>time</code> as a reserved word if the next
+token begins with a &lsquo;<samp>-</samp>&rsquo;.
+The <code>TIMEFORMAT</code> variable may be set to a format string that
+specifies how the timing information should be displayed.
+See <a href="#Bash-Variables">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>When the shell is in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>), <code>time</code>
+may be followed by a newline. In this case, the shell displays the
+total user and system time consumed by the shell and its children.
+The <code>TIMEFORMAT</code> variable may be used to specify the format of
+the time information.
+</p>
+<p>If the pipeline is not executed asynchronously (see <a href="#Lists">Lists</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, which is a
+separate process (see <a href="#Command-Execution-Environment">Command Execution Environment</a>).
+If the <code>lastpipe</code> option is enabled using the <code>shopt</code> builtin
+(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>),
+the last element of a pipeline may be run by the shell process.
+</p>
+<p>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 <a href="#The-Set-Builtin">The Set Builtin</a>).
+If <code>pipefail</code> is enabled, the pipeline&rsquo;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 &lsquo;<samp>!</samp>&rsquo; 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>
+<hr>
+<a name="Lists"></a>
+<div class="header">
+<p>
+Next: <a href="#Compound-Commands" accesskey="n" rel="next">Compound Commands</a>, Previous: <a href="#Pipelines" accesskey="p" rel="prev">Pipelines</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Lists-of-Commands"></a>
+<h4 class="subsection">3.2.3 Lists of Commands</h4>
+<a name="index-commands_002c-lists"></a>
+
+<p>A <code>list</code> is a sequence of one or more pipelines separated by one
+of the operators &lsquo;<samp>;</samp>&rsquo;, &lsquo;<samp>&amp;</samp>&rsquo;, &lsquo;<samp>&amp;&amp;</samp>&rsquo;, or &lsquo;<samp>||</samp>&rsquo;,
+and optionally terminated by one of &lsquo;<samp>;</samp>&rsquo;, &lsquo;<samp>&amp;</samp>&rsquo;, or a
+<code>newline</code>.
+</p>
+<p>Of these list operators, &lsquo;<samp>&amp;&amp;</samp>&rsquo; and &lsquo;<samp>||</samp>&rsquo;
+have equal precedence, followed by &lsquo;<samp>;</samp>&rsquo; and &lsquo;<samp>&amp;</samp>&rsquo;,
+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 &lsquo;<samp>&amp;</samp>&rsquo;,
+the shell executes the command asynchronously in a subshell.
+This is known as executing the command in the <var>background</var>,
+and these are referred to as <var>asynchronous</var> commands.
+The shell does not wait for the command to finish, and the return
+status is 0 (true).
+When job control is not active (see <a href="#Job-Control">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 &lsquo;<samp>;</samp>&rsquo; 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><small>AND</small> and <small>OR</small> lists are sequences of one or more pipelines
+separated by the control operators &lsquo;<samp>&amp;&amp;</samp>&rsquo; and &lsquo;<samp>||</samp>&rsquo;,
+respectively. <small>AND</small> and <small>OR</small> lists are executed with left
+associativity.
+</p>
+<p>An <small>AND</small> list has the form
+</p><div class="example">
+<pre class="example"><var>command1</var> &amp;&amp; <var>command2</var>
+</pre></div>
+
+<p><var>command2</var> is executed if, and only if, <var>command1</var>
+returns an exit status of zero (success).
+</p>
+<p>An <small>OR</small> list has the form
+</p><div class="example">
+<pre class="example"><var>command1</var> || <var>command2</var>
+</pre></div>
+
+<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
+<small>AND</small> and <small>OR</small> lists is the exit status of the last command
+executed in the list.
+</p>
+<hr>
+<a name="Compound-Commands"></a>
+<div class="header">
+<p>
+Next: <a href="#Coprocesses" accesskey="n" rel="next">Coprocesses</a>, Previous: <a href="#Lists" accesskey="p" rel="prev">Lists</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Compound-Commands-1"></a>
+<h4 class="subsection">3.2.4 Compound Commands</h4>
+<a name="index-commands_002c-compound"></a>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Looping-Constructs" accesskey="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">&bull; <a href="#Conditional-Constructs" accesskey="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">&bull; <a href="#Command-Grouping" accesskey="3">Command Grouping</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Ways to group commands.
+</td></tr>
+</table>
+
+<p>Compound commands are the shell programming language constructs.
+Each construct begins with a reserved word or control operator and is
+terminated by a corresponding reserved word or operator.
+Any redirections (see <a href="#Redirections">Redirections</a>) associated with a compound command
+apply to all commands within that compound command unless explicitly overridden.
+</p>
+<p>In most cases a list of commands in a compound command&rsquo;s description may be
+separated from the rest of the command by one or more newlines, and may be
+followed by a newline in place of a semicolon.
+</p>
+<p>Bash provides looping constructs, conditional commands, and mechanisms
+to group commands and execute them as a unit.
+</p>
+<hr>
+<a name="Looping-Constructs"></a>
+<div class="header">
+<p>
+Next: <a href="#Conditional-Constructs" accesskey="n" rel="next">Conditional Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Looping-Constructs-1"></a>
+<h4 class="subsubsection">3.2.4.1 Looping Constructs</h4>
+<a name="index-commands_002c-looping"></a>
+
+<p>Bash supports the following looping constructs.
+</p>
+<p>Note that wherever a &lsquo;<samp>;</samp>&rsquo; appears in the description of a
+command&rsquo;s syntax, it may be replaced with one or more newlines.
+</p>
+<dl compact="compact">
+<dt><code>until</code></dt>
+<dd><a name="index-until"></a>
+<a name="index-do"></a>
+<a name="index-done"></a>
+<p>The syntax of the <code>until</code> command is:
+</p>
+<div class="example">
+<pre class="example">until <var>test-commands</var>; do <var>consequent-commands</var>; done
+</pre></div>
+
+<p>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>
+</dd>
+<dt><code>while</code></dt>
+<dd><a name="index-while"></a>
+<p>The syntax of the <code>while</code> command is:
+</p>
+<div class="example">
+<pre class="example">while <var>test-commands</var>; do <var>consequent-commands</var>; done
+</pre></div>
+
+<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>
+</dd>
+<dt><code>for</code></dt>
+<dd><a name="index-for"></a>
+<p>The syntax of the <code>for</code> command is:
+</p>
+<div class="example">
+<pre class="example">for <var>name</var> [ [in [<var>words</var> &hellip;] ] ; ] do <var>commands</var>; done
+</pre></div>
+
+<p>Expand <var>words</var> (see <a href="#Shell-Expansions">Shell Expansions</a>), and execute <var>commands</var>
+once for each member
+in the resultant list, with <var>name</var> bound to the current member.
+If &lsquo;<samp>in <var>words</var></samp>&rsquo; is not present, the <code>for</code> command
+executes the <var>commands</var> once for each positional parameter that is
+set, as if &lsquo;<samp>in &quot;$@&quot;</samp>&rsquo; had been specified
+(see <a href="#Special-Parameters">Special Parameters</a>).
+</p>
+<p>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>
+<div class="example">
+<pre class="example">for (( <var>expr1</var> ; <var>expr2</var> ; <var>expr3</var> )) ; do <var>commands</var> ; done
+</pre></div>
+
+<p>First, the arithmetic expression <var>expr1</var> is evaluated according
+to the rules described below (see <a href="#Shell-Arithmetic">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>commands</var>
+that is executed, or false if any of the expressions is invalid.
+</p></dd>
+</dl>
+
+<p>The <code>break</code> and <code>continue</code> builtins (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
+may be used to control loop execution.
+</p>
+<hr>
+<a name="Conditional-Constructs"></a>
+<div class="header">
+<p>
+Next: <a href="#Command-Grouping" accesskey="n" rel="next">Command Grouping</a>, Previous: <a href="#Looping-Constructs" accesskey="p" rel="prev">Looping Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Conditional-Constructs-1"></a>
+<h4 class="subsubsection">3.2.4.2 Conditional Constructs</h4>
+<a name="index-commands_002c-conditional"></a>
+
+<dl compact="compact">
+<dt><code>if</code></dt>
+<dd><a name="index-if"></a>
+<a name="index-then"></a>
+<a name="index-else"></a>
+<a name="index-elif"></a>
+<a name="index-fi"></a>
+<p>The syntax of the <code>if</code> command is:
+</p>
+<div class="example">
+<pre class="example">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></div>
+
+<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 &lsquo;<samp>else <var>alternate-consequents</var></samp>&rsquo; 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>
+</dd>
+<dt><code>case</code></dt>
+<dd><a name="index-case"></a>
+<a name="index-in"></a>
+<a name="index-esac"></a>
+<p>The syntax of the <code>case</code> command is:
+</p>
+<div class="example">
+<pre class="example">case <var>word</var> in
+ [ [(] <var>pattern</var> [| <var>pattern</var>]&hellip;) <var>command-list</var> ;;]&hellip;
+esac
+</pre></div>
+
+<p><code>case</code> will selectively execute the <var>command-list</var> corresponding to
+the first <var>pattern</var> that matches <var>word</var>.
+The match is performed according
+to the rules described below in <a href="#Pattern-Matching">Pattern Matching</a>.
+If the <code>nocasematch</code> shell option
+(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+The &lsquo;<samp>|</samp>&rsquo; is used to separate multiple patterns, and the &lsquo;<samp>)</samp>&rsquo;
+operator terminates a pattern list.
+A list of patterns and an associated command-list is known
+as a <var>clause</var>.
+</p>
+<p>Each clause must be terminated with &lsquo;<samp>;;</samp>&rsquo;, &lsquo;<samp>;&amp;</samp>&rsquo;, or &lsquo;<samp>;;&amp;</samp>&rsquo;.
+The <var>word</var> undergoes tilde expansion, parameter expansion, command
+substitution, arithmetic expansion, and quote removal
+(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>)
+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 &lsquo;<samp>;;</samp>&rsquo;, &lsquo;<samp>;&amp;</samp>&rsquo;, or &lsquo;<samp>;;&amp;</samp>&rsquo;.
+The first pattern that matches determines the
+command-list that is executed.
+It&rsquo;s a common idiom to use &lsquo;<samp>*</samp>&rsquo; as the final pattern to define the
+default case, since that pattern will always match.
+</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>
+<div class="example">
+<pre class="example">echo -n &quot;Enter the name of an animal: &quot;
+read ANIMAL
+echo -n &quot;The $ANIMAL has &quot;
+case $ANIMAL in
+ horse | dog | cat) echo -n &quot;four&quot;;;
+ man | kangaroo ) echo -n &quot;two&quot;;;
+ *) echo -n &quot;an unknown number of&quot;;;
+esac
+echo &quot; legs.&quot;
+</pre></div>
+
+
+<p>If the &lsquo;<samp>;;</samp>&rsquo; operator is used, no subsequent matches are attempted after
+the first pattern match.
+Using &lsquo;<samp>;&amp;</samp>&rsquo; in place of &lsquo;<samp>;;</samp>&rsquo; causes execution to continue with
+the <var>command-list</var> associated with the next clause, if any.
+Using &lsquo;<samp>;;&amp;</samp>&rsquo; in place of &lsquo;<samp>;;</samp>&rsquo; causes the shell to test the patterns
+in the next clause, if any, and execute any associated <var>command-list</var>
+on a successful match.
+</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>
+</dd>
+<dt><code>select</code></dt>
+<dd><a name="index-select"></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>
+<div class="example">
+<pre class="example">select <var>name</var> [in <var>words</var> &hellip;]; do <var>commands</var>; done
+</pre></div>
+
+<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
+&lsquo;<samp>in <var>words</var></samp>&rsquo; is omitted, the positional parameters are printed,
+as if &lsquo;<samp>in &quot;$@&quot;</samp>&rsquo; 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>
+<div class="example">
+<pre class="example">select fname in *;
+do
+ echo you picked $fname \($REPLY\)
+ break;
+done
+</pre></div>
+
+</dd>
+<dt><code>((&hellip;))</code></dt>
+<dd><div class="example">
+<pre class="example">(( <var>expression</var> ))
+</pre></div>
+
+<p>The arithmetic <var>expression</var> is evaluated according to the rules
+described below (see <a href="#Shell-Arithmetic">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
+</p><div class="example">
+<pre class="example">let &quot;<var>expression</var>&quot;
+</pre></div>
+<p>See <a href="#Bash-Builtins">Bash Builtins</a>, for a full description of the <code>let</code> builtin.
+</p>
+</dd>
+<dt><code>[[&hellip;]]</code></dt>
+<dd><a name="index-_005b_005b"></a>
+<a name="index-_005d_005d"></a>
+<div class="example">
+<pre class="example">[[ <var>expression</var> ]]
+</pre></div>
+
+<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="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>.
+Word splitting and filename expansion are not performed on the words
+between the <code>[[</code> and <code>]]</code>; tilde expansion, parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal are performed.
+Conditional operators such as &lsquo;<samp>-f</samp>&rsquo; must be unquoted to be recognized
+as primaries.
+</p>
+<p>When used with <code>[[</code>, the &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators sort
+lexicographically using the current locale.
+</p>
+<p>When the &lsquo;<samp>==</samp>&rsquo; and &lsquo;<samp>!=</samp>&rsquo; 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="#Pattern-Matching">Pattern Matching</a>,
+as if the <code>extglob</code> shell option were enabled.
+The &lsquo;<samp>=</samp>&rsquo; operator is identical to &lsquo;<samp>==</samp>&rsquo;.
+If the <code>nocasematch</code> shell option
+(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">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 (&lsquo;<samp>==</samp>&rsquo;) or does not
+match (&lsquo;<samp>!=</samp>&rsquo;) the pattern, and 1 otherwise.
+Any part of the pattern may be quoted to force the quoted portion
+to be matched as a string.
+</p>
+<p>An additional binary operator, &lsquo;<samp>=~</samp>&rsquo;, is available, with the same
+precedence as &lsquo;<samp>==</samp>&rsquo; and &lsquo;<samp>!=</samp>&rsquo;.
+When it is used, the string to the right of the operator is considered
+a <small>POSIX</small> 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&rsquo;s return value is 2.
+If the <code>nocasematch</code> shell option
+(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+Any part of the pattern may be quoted to force the quoted portion
+to be matched as a string.
+Bracket expressions in regular expressions must be treated carefully,
+since normal quoting characters lose their meanings between brackets.
+If the pattern is stored in a shell variable, quoting the variable
+expansion forces the entire pattern to be matched as a string.
+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>For example, the following will match a line
+(stored in the shell variable <var>line</var>)
+if there is a sequence of characters in the value consisting of
+any number, including zero, of
+space characters, zero or one instances of &lsquo;<samp>a</samp>&rsquo;, then a &lsquo;<samp>b</samp>&rsquo;:
+</p><div class="example">
+<pre class="example">[[ $line =~ [[:space:]]*?(a)b ]]
+</pre></div>
+
+<p>That means values like &lsquo;<samp>aab</samp>&rsquo; and &lsquo;<samp> aaaaaab</samp>&rsquo; will match, as
+will a line containing a &lsquo;<samp>b</samp>&rsquo; anywhere in its value.
+</p>
+<p>Storing the regular expression in a shell variable is often a useful
+way to avoid problems with quoting characters that are special to the
+shell.
+It is sometimes difficult to specify a regular expression literally
+without using quotes, or to keep track of the quoting used by regular
+expressions while paying attention to the shell&rsquo;s quote removal.
+Using a shell variable to store the pattern decreases these problems.
+For example, the following is equivalent to the above:
+</p><div class="example">
+<pre class="example">pattern='[[:space:]]*?(a)b'
+[[ $line =~ $pattern ]]
+</pre></div>
+
+<p>If you want to match a character that&rsquo;s special to the regular expression
+grammar, it has to be quoted to remove its special meaning.
+This means that in the pattern &lsquo;<samp>xxx.txt</samp>&rsquo;, the &lsquo;<samp>.</samp>&rsquo; matches any
+character in the string (its usual regular expression meaning), but in the
+pattern &lsquo;<samp>&quot;xxx.txt&quot;</samp>&rsquo; it can only match a literal &lsquo;<samp>.</samp>&rsquo;.
+Shell programmers should take special care with backslashes, since backslashes
+are used both by the shell and regular expressions to remove the special
+meaning from the following character.
+The following two sets of commands are <em>not</em> equivalent:
+</p><div class="example">
+<pre class="example">pattern='\.'
+
+[[ . =~ $pattern ]]
+[[ . =~ \. ]]
+
+[[ . =~ &quot;$pattern&quot; ]]
+[[ . =~ '\.' ]]
+</pre></div>
+
+<p>The first two matches will succeed, but the second two will not, because
+in the second two the backslash will be part of the pattern to be matched.
+In the first two examples, the backslash removes the special meaning from
+&lsquo;<samp>.</samp>&rsquo;, so the literal &lsquo;<samp>.</samp>&rsquo; matches.
+If the string in the first examples were anything other than &lsquo;<samp>.</samp>&rsquo;, say
+&lsquo;<samp>a</samp>&rsquo;, the pattern would not match, because the quoted &lsquo;<samp>.</samp>&rsquo; in the
+pattern loses its special meaning of matching any single character.
+</p>
+<p>Expressions may be combined using the following operators, listed
+in decreasing order of precedence:
+</p>
+<dl compact="compact">
+<dt><code>( <var>expression</var> )</code></dt>
+<dd><p>Returns the value of <var>expression</var>.
+This may be used to override the normal precedence of operators.
+</p>
+</dd>
+<dt><code>! <var>expression</var></code></dt>
+<dd><p>True if <var>expression</var> is false.
+</p>
+</dd>
+<dt><code><var>expression1</var> &amp;&amp; <var>expression2</var></code></dt>
+<dd><p>True if both <var>expression1</var> and <var>expression2</var> are true.
+</p>
+</dd>
+<dt><code><var>expression1</var> || <var>expression2</var></code></dt>
+<dd><p>True if either <var>expression1</var> or <var>expression2</var> is true.
+</p></dd>
+</dl>
+
+<p>The <code>&amp;&amp;</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></dd>
+</dl>
+
+<hr>
+<a name="Command-Grouping"></a>
+<div class="header">
+<p>
+Previous: <a href="#Conditional-Constructs" accesskey="p" rel="prev">Conditional Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Grouping-Commands"></a>
+<h4 class="subsubsection">3.2.4.3 Grouping Commands</h4>
+<a name="index-commands_002c-grouping"></a>
+
+<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>
+<dl compact="compact">
+<dt><code>()</code></dt>
+<dd><div class="example">
+<pre class="example">( <var>list</var> )
+</pre></div>
+
+<p>Placing a list of commands between parentheses causes a subshell
+environment to be created (see <a href="#Command-Execution-Environment">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>
+</dd>
+<dt><code>{}</code></dt>
+<dd><a name="index-_007b"></a>
+<a name="index-_007d"></a>
+<div class="example">
+<pre class="example">{ <var>list</var>; }
+</pre></div>
+
+<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.
+</p></dd>
+</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 or other shell metacharacters.
+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>
+<hr>
+<a name="Coprocesses"></a>
+<div class="header">
+<p>
+Next: <a href="#GNU-Parallel" accesskey="n" rel="next">GNU Parallel</a>, Previous: <a href="#Compound-Commands" accesskey="p" rel="prev">Compound Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Coprocesses-1"></a>
+<h4 class="subsection">3.2.5 Coprocesses</h4>
+<a name="index-coprocess"></a>
+
+<p>A <code>coprocess</code> is a shell command preceded by the <code>coproc</code>
+reserved word.
+A coprocess is executed asynchronously in a subshell, as if the command
+had been terminated with the &lsquo;<samp>&amp;</samp>&rsquo; control operator, with a two-way pipe
+established between the executing shell and the coprocess.
+</p>
+<p>The format for a coprocess is:
+</p><div class="example">
+<pre class="example">coproc [<var>NAME</var>] <var>command</var> [<var>redirections</var>]
+</pre></div>
+
+<p>This creates a coprocess named <var>NAME</var>.
+If <var>NAME</var> is not supplied, the default name is <var>COPROC</var>.
+<var>NAME</var> must not be supplied if <var>command</var> is a simple
+command (see <a href="#Simple-Commands">Simple Commands</a>); otherwise, it is interpreted as
+the first word of the simple command.
+</p>
+<p>When the coprocess is executed, the shell creates an array variable
+(see <a href="#Arrays">Arrays</a>)
+named <code>NAME</code> in the context of the executing shell.
+The standard output of <var>command</var>
+is connected via a pipe to a file descriptor in the executing shell,
+and that file descriptor is assigned to <code>NAME</code>[0].
+The standard input of <var>command</var>
+is connected via a pipe to a file descriptor in the executing shell,
+and that file descriptor is assigned to <code>NAME</code>[1].
+This pipe is established before any redirections specified by the
+command (see <a href="#Redirections">Redirections</a>).
+The file descriptors can be utilized as arguments to shell commands
+and redirections using standard word expansions.
+Other than those created to execute command and process substitutions,
+the file descriptors are not available in subshells.
+</p>
+<p>The process ID of the shell spawned to execute the coprocess is
+available as the value of the variable <code>NAME</code>_PID.
+The <code>wait</code>
+builtin command may be used to wait for the coprocess to terminate.
+</p>
+<p>Since the coprocess is created as an asynchronous command,
+the <code>coproc</code> command always returns success.
+The return status of a coprocess is the exit status of <var>command</var>.
+</p>
+<hr>
+<a name="GNU-Parallel"></a>
+<div class="header">
+<p>
+Previous: <a href="#Coprocesses" accesskey="p" rel="prev">Coprocesses</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="GNU-Parallel-1"></a>
+<h4 class="subsection">3.2.6 GNU Parallel</h4>
+
+<p>There are ways to run commands in parallel that are not built into Bash.
+GNU Parallel is a tool to do just that.
+</p>
+<p>GNU Parallel, as its name suggests, can be used to build and run commands
+in parallel. You may run the same command with different arguments, whether
+they are filenames, usernames, hostnames, or lines read from files. GNU
+Parallel provides shorthand references to many of the most common operations
+(input lines, various portions of the input line, different ways to specify
+the input source, and so on). Parallel can replace <code>xargs</code> or feed
+commands from its input sources to several different instances of Bash.
+</p>
+<p>For a complete description, refer to the GNU Parallel documentation. A few
+examples should provide a brief introduction to its use.
+</p>
+<p>For example, it is easy to replace <code>xargs</code> to gzip all html files in the
+current directory and its subdirectories:
+</p><div class="example">
+<pre class="example">find . -type f -name '*.html' -print | parallel gzip
+</pre></div>
+<p>If you need to protect special characters such as newlines in file names,
+use find&rsquo;s <samp>-print0</samp> option and parallel&rsquo;s <samp>-0</samp> option.
+</p>
+<p>You can use Parallel to move files from the current directory when the
+number of files is too large to process with one <code>mv</code> invocation:
+</p><div class="example">
+<pre class="example">ls | parallel mv {} destdir
+</pre></div>
+
+<p>As you can see, the {} is replaced with each line read from standard input.
+While using <code>ls</code> will work in most instances, it is not sufficient to
+deal with all filenames.
+If you need to accommodate special characters in filenames, you can use
+</p>
+<div class="example">
+<pre class="example">find . -depth 1 \! -name '.*' -print0 | parallel -0 mv {} destdir
+</pre></div>
+
+<p>as alluded to above.
+</p>
+<p>This will run as many <code>mv</code> commands as there are files in the current
+directory.
+You can emulate a parallel <code>xargs</code> by adding the <samp>-X</samp> option:
+</p><div class="example">
+<pre class="example">find . -depth 1 \! -name '.*' -print0 | parallel -0 -X mv {} destdir
+</pre></div>
+
+<p>GNU Parallel can replace certain common idioms that operate on lines read
+from a file (in this case, filenames listed one per line):
+</p><div class="example">
+<pre class="example"> while IFS= read -r x; do
+ do-something1 &quot;$x&quot; &quot;config-$x&quot;
+ do-something2 &lt; &quot;$x&quot;
+ done &lt; file | process-output
+</pre></div>
+
+<p>with a more compact syntax reminiscent of lambdas:
+</p><div class="example">
+<pre class="example">cat list | parallel &quot;do-something1 {} config-{} ; do-something2 &lt; {}&quot; |
+ process-output
+</pre></div>
+
+<p>Parallel provides a built-in mechanism to remove filename extensions, which
+lends itself to batch file transformations or renaming:
+</p><div class="example">
+<pre class="example">ls *.gz | parallel -j+0 &quot;zcat {} | bzip2 &gt;{.}.bz2 &amp;&amp; rm {}&quot;
+</pre></div>
+<p>This will recompress all files in the current directory with names ending
+in .gz using bzip2, running one job per CPU (-j+0) in parallel.
+(We use <code>ls</code> for brevity here; using <code>find</code> as above is more
+robust in the face of filenames containing unexpected characters.)
+Parallel can take arguments from the command line; the above can also be
+written as
+</p>
+<div class="example">
+<pre class="example">parallel &quot;zcat {} | bzip2 &gt;{.}.bz2 &amp;&amp; rm {}&quot; ::: *.gz
+</pre></div>
+
+<p>If a command generates output, you may want to preserve the input order in
+the output. For instance, the following command
+</p><div class="example">
+<pre class="example">{
+ echo foss.org.my ;
+ echo debian.org ;
+ echo freenetproject.org ;
+} | parallel traceroute
+</pre></div>
+<p>will display as output the traceroute invocation that finishes first.
+Adding the <samp>-k</samp> option
+</p><div class="example">
+<pre class="example">{
+ echo foss.org.my ;
+ echo debian.org ;
+ echo freenetproject.org ;
+} | parallel -k traceroute
+</pre></div>
+<p>will ensure that the output of <code>traceroute foss.org.my</code> is displayed first.
+</p>
+<p>Finally, Parallel can be used to run a sequence of shell commands in parallel,
+similar to &lsquo;<samp>cat file | bash</samp>&rsquo;.
+It is not uncommon to take a list of filenames, create a series of shell
+commands to operate on them, and feed that list of commands to a shell.
+Parallel can speed this up. Assuming that <samp>file</samp> contains a list of
+shell commands, one per line,
+</p>
+<div class="example">
+<pre class="example">parallel -j 10 &lt; file
+</pre></div>
+
+<p>will evaluate the commands using the shell (since no explicit command is
+supplied as an argument), in blocks of ten shell jobs at a time.
+</p>
+<hr>
+<a name="Shell-Functions"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Parameters" accesskey="n" rel="next">Shell Parameters</a>, Previous: <a href="#Shell-Commands" accesskey="p" rel="prev">Shell Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Functions-1"></a>
+<h3 class="section">3.3 Shell Functions</h3>
+<a name="index-shell-function"></a>
+<a name="index-functions_002c-shell"></a>
+
+<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 &quot;regular&quot; 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="index-function"></a>
+</p><div class="example">
+<pre class="example"><var>name</var> () <var>compound-command</var> [ <var>redirections</var> ]
+</pre></div>
+
+<p>or
+</p>
+<div class="example">
+<pre class="example">function <var>name</var> [()] <var>compound-command</var> [ <var>redirections</var> ]
+</pre></div>
+
+<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 <a href="#Compound-Commands">Compound Commands</a>).
+That command is usually a <var>list</var> enclosed between { and }, but
+may be any compound command listed above,
+with one exception: If the <code>function</code> reserved word is used, but the
+parentheses are not supplied, the braces are required.
+<var>compound-command</var> is executed whenever <var>name</var> is specified as the
+name of a command.
+When the shell is in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>),
+<var>name</var> may not be the same as one of the special builtins
+(see <a href="#Special-Builtins">Special Builtins</a>).
+Any redirections (see <a href="#Redirections">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 <a href="#Bourne-Shell-Builtins">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 from the command list
+by whitespace or another shell metacharacter.
+Also, when using the braces, the <var>list</var> must be terminated by a semicolon,
+a &lsquo;<samp>&amp;</samp>&rsquo;, or a newline.
+</p>
+<p>When a function is executed, the arguments to the
+function become the positional parameters
+during its execution (see <a href="#Positional-Parameters">Positional Parameters</a>).
+The special parameter &lsquo;<samp>#</samp>&rsquo; 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.
+</p>
+<p>All other aspects of the shell execution
+environment are identical between a function and its caller
+with these exceptions:
+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),
+and the <code>ERR</code> trap is not inherited unless the <code>-o errtrace</code>
+shell option has been enabled.
+See <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>, for the description of the
+<code>trap</code> builtin.
+</p>
+<p>The <code>FUNCNEST</code> variable, if set to a numeric value greater
+than 0, defines a maximum function nesting level. Function
+invocations that exceed the limit cause the entire command to
+abort.
+</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 &lsquo;<samp>#</samp>&rsquo;
+are restored to the values they had prior to the function&rsquo;s
+execution. If a numeric argument is given to <code>return</code>,
+that is the function&rsquo;s return status; otherwise the function&rsquo;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. This is particularly
+important when a shell function calls other functions.
+</p>
+<p>Local variables &quot;shadow&quot; variables with the same name declared at
+previous scopes. For instance, a local variable declared in a function
+hides a global variable of the same name: references and assignments
+refer to the local variable, leaving the global variable unmodified.
+When the function returns, the global variable is once again visible.
+</p>
+<p>The shell uses <var>dynamic scoping</var> to control a variable&rsquo;s visibility
+within functions.
+With dynamic scoping, visible variables and their values
+are a result of the sequence of function calls that caused execution
+to reach the current function.
+The value of a variable that a function sees depends
+on its value within its caller, if any, whether that caller is
+the &quot;global&quot; scope or another shell function.
+This is also the value that a local variable
+declaration &quot;shadows&quot;, and the value that is restored when the function
+returns.
+</p>
+<p>For example, if a variable <var>var</var> is declared as local in function
+<var>func1</var>, and <var>func1</var> calls another function <var>func2</var>,
+references to <var>var</var> made from within <var>func2</var> will resolve to the
+local variable <var>var</var> from <var>func1</var>, shadowing any global variable
+named <var>var</var>.
+</p>
+<p>The following script demonstrates this behavior.
+When executed, the script displays
+</p>
+<div class="example">
+<pre class="example">In func2, var = func1 local
+</pre></div>
+
+<div class="example">
+<pre class="example">func1()
+{
+ local var='func1 local'
+ func2
+}
+
+func2()
+{
+ echo &quot;In func2, var = $var&quot;
+}
+
+var=global
+func1
+</pre></div>
+
+<p>The <code>unset</code> builtin also acts using the same dynamic scope: if a
+variable is local to the current scope, <code>unset</code> will unset it;
+otherwise the unset will refer to the variable found in any calling scope
+as described above.
+If a variable at the current local scope is unset, it will remain so
+until it is reset in that scope or until the function returns.
+Once the function returns, any instance of the variable at a previous
+scope will become visible.
+If the unset acts on a variable at a previous scope, any instance of a
+variable with that name that had been shadowed will become visible.
+</p>
+<p>Function names and definitions may be listed with the
+<samp>-f</samp> option to the <code>declare</code> (<code>typeset</code>)
+builtin command (see <a href="#Bash-Builtins">Bash Builtins</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 <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+</p>
+<p>Functions may be recursive.
+The <code>FUNCNEST</code> variable may be used to limit the depth of the
+function call stack and restrict the number of function invocations.
+By default, no limit is placed on the number of recursive calls.
+</p>
+<hr>
+<a name="Shell-Parameters"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Expansions" accesskey="n" rel="next">Shell Expansions</a>, Previous: <a href="#Shell-Functions" accesskey="p" rel="prev">Shell Functions</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Parameters-1"></a>
+<h3 class="section">3.4 Shell Parameters</h3>
+<a name="index-parameters"></a>
+<a name="index-variable_002c-shell"></a>
+<a name="index-shell-variable"></a>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Positional-Parameters" accesskey="1">Positional Parameters</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The shell&rsquo;s command-line arguments.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Special-Parameters" accesskey="2">Special Parameters</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Parameters denoted by special characters.
+</td></tr>
+</table>
+
+<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="#Bash-Builtins">Bash Builtins</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
+</p><div class="example">
+<pre class="example"><var>name</var>=[<var>value</var>]
+</pre></div>
+<p>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>$((&hellip;))</code>
+expansion is not used (see <a href="#Arithmetic-Expansion">Arithmetic Expansion</a>).
+Word splitting is not performed, with the exception
+of <code>&quot;$@&quot;</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 (<var>declaration</var> commands).
+When in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>), these builtins may appear
+in a command after one or more instances of the <code>command</code> builtin
+and retain these assignment statement properties.
+</p>
+<p>In the context where an assignment statement is assigning a value
+to a shell variable or array index (see <a href="#Arrays">Arrays</a>), the &lsquo;<samp>+=</samp>&rsquo;
+operator can be used to
+append to or add to the variable&rsquo;s previous value.
+This includes arguments to builtin commands such as <code>declare</code> that
+accept assignment statements (<var>declaration</var> commands).
+When &lsquo;<samp>+=</samp>&rsquo; is applied to a variable for which the <var>integer</var> attribute
+has been set, <var>value</var> is evaluated as an arithmetic expression and
+added to the variable&rsquo;s current value, which is also evaluated.
+When &lsquo;<samp>+=</samp>&rsquo; is applied to an array variable using compound assignment
+(see <a href="#Arrays">Arrays</a>), the
+variable&rsquo;s value is not unset (as it is when using &lsquo;<samp>=</samp>&rsquo;), and new
+values are appended to the array beginning at one greater than the array&rsquo;s
+maximum index (for indexed arrays), or added as additional key-value pairs
+in an associative array.
+When applied to a string-valued variable, <var>value</var> is expanded and
+appended to the variable&rsquo;s value.
+</p>
+<p>A variable can be assigned the <var>nameref</var> attribute using the
+<samp>-n</samp> option to the <code>declare</code> or <code>local</code> builtin commands
+(see <a href="#Bash-Builtins">Bash Builtins</a>)
+to create a <var>nameref</var>, or a reference to another variable.
+This allows variables to be manipulated indirectly.
+Whenever the nameref variable is referenced, assigned to, unset, or has
+its attributes modified (other than using or changing the nameref
+attribute itself), the
+operation is actually performed on the variable specified by the nameref
+variable&rsquo;s value.
+A nameref is commonly used within shell functions to refer to a variable
+whose name is passed as an argument to the function.
+For instance, if a variable name is passed to a shell function as its first
+argument, running
+</p><div class="example">
+<pre class="example">declare -n ref=$1
+</pre></div>
+<p>inside the function creates a nameref variable <var>ref</var> whose value is
+the variable name passed as the first argument.
+References and assignments to <var>ref</var>, and changes to its attributes,
+are treated as references, assignments, and attribute modifications
+to the variable whose name was passed as <code>$1</code>.
+</p>
+<p>If the control variable in a <code>for</code> loop has the nameref attribute,
+the list of words can be a list of shell variables, and a name reference
+will be established for each word in the list, in turn, when the loop is
+executed.
+Array variables cannot be given the nameref attribute.
+However, nameref variables can reference array variables and subscripted
+array variables.
+Namerefs can be unset using the <samp>-n</samp> option to the <code>unset</code> builtin
+(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+Otherwise, if <code>unset</code> is executed with the name of a nameref variable
+as an argument, the variable referenced by the nameref variable will be unset.
+</p>
+<hr>
+<a name="Positional-Parameters"></a>
+<div class="header">
+<p>
+Next: <a href="#Special-Parameters" accesskey="n" rel="next">Special Parameters</a>, Up: <a href="#Shell-Parameters" accesskey="u" rel="up">Shell Parameters</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Positional-Parameters-1"></a>
+<h4 class="subsection">3.4.1 Positional Parameters</h4>
+<a name="index-parameters_002c-positional"></a>
+
+<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&rsquo;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 <a href="#Shell-Builtin-Commands">Shell Builtin Commands</a>).
+The positional parameters are
+temporarily replaced when a shell function is executed
+(see <a href="#Shell-Functions">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>
+<hr>
+<a name="Special-Parameters"></a>
+<div class="header">
+<p>
+Previous: <a href="#Positional-Parameters" accesskey="p" rel="prev">Positional Parameters</a>, Up: <a href="#Shell-Parameters" accesskey="u" rel="up">Shell Parameters</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Special-Parameters-1"></a>
+<h4 class="subsection">3.4.2 Special Parameters</h4>
+<a name="index-parameters_002c-special"></a>
+
+<p>The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+</p>
+<dl compact="compact">
+<dt><code>*</code>
+<a name="index-_002a"></a>
+</dt>
+<dd><a name="index-_0024_002a"></a>
+<p>($*) Expands to the positional parameters, starting from one.
+When the expansion is not within double quotes, each positional parameter
+expands to a separate word.
+In contexts where it is performed, those words
+are subject to further word splitting and pathname expansion.
+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>&quot;$*&quot;</code> is equivalent
+to <code>&quot;$1<var>c</var>$2<var>c</var>&hellip;&quot;</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>
+</dd>
+<dt><code>@</code>
+<a name="index-_0040"></a>
+</dt>
+<dd><a name="index-_0024_0040"></a>
+<p>($@) Expands to the positional parameters, starting from one.
+In contexts where word splitting is performed, this expands each
+positional parameter to a separate word; if not within double
+quotes, these words are subject to word splitting.
+In contexts where word splitting is not performed,
+this expands to a single word
+with each positional parameter separated by a space.
+When the
+expansion occurs within double quotes, and word splitting is performed,
+each parameter expands to a
+separate word. That is, <code>&quot;$@&quot;</code> is equivalent to
+<code>&quot;$1&quot; &quot;$2&quot; &hellip;</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>&quot;$@&quot;</code> and
+<code>$@</code>
+expand to nothing (i.e., they are removed).
+</p>
+</dd>
+<dt><code>#</code>
+<a name="index-_0023"></a>
+</dt>
+<dd><a name="index-_0024_0023"></a>
+<p>($#) Expands to the number of positional parameters in decimal.
+</p>
+</dd>
+<dt><code>?</code>
+<a name="index-_003f"></a>
+</dt>
+<dd><a name="index-_0024_003f"></a>
+<p>($?) Expands to the exit status of the most recently executed foreground
+pipeline.
+</p>
+</dd>
+<dt><code>-</code>
+<a name="index-_002d"></a>
+</dt>
+<dd><a name="index-_0024_002d"></a>
+<p>($-, 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>
+</dd>
+<dt><code>$</code>
+<a name="index-_0024"></a>
+</dt>
+<dd><a name="index-_0024_0024"></a>
+<p>($$) Expands to the process <small>ID</small> of the shell. In a <code>()</code> subshell, it
+expands to the process <small>ID</small> of the invoking shell, not the subshell.
+</p>
+</dd>
+<dt><code>!</code>
+<a name="index-_0021-1"></a>
+</dt>
+<dd><a name="index-_0024_0021"></a>
+<p>($!) Expands to the process <small>ID</small> of the job most recently placed into the
+background, whether executed as an asynchronous command or using
+the <code>bg</code> builtin (see <a href="#Job-Control-Builtins">Job Control Builtins</a>).
+</p>
+</dd>
+<dt><code>0</code>
+<a name="index-0"></a>
+</dt>
+<dd><a name="index-_00240"></a>
+<p>($0) 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 <a href="#Shell-Scripts">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 <a href="#Invoking-Bash">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>
+</dd>
+<dt><code>_</code>
+<a name="index-_005f"></a>
+</dt>
+<dd><a name="index-_0024_005f"></a>
+<p>($_, 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 simple
+command executed in the foreground, 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.
+</p></dd>
+</dl>
+
+<hr>
+<a name="Shell-Expansions"></a>
+<div class="header">
+<p>
+Next: <a href="#Redirections" accesskey="n" rel="next">Redirections</a>, Previous: <a href="#Shell-Parameters" accesskey="p" rel="prev">Shell Parameters</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Expansions-1"></a>
+<h3 class="section">3.5 Shell Expansions</h3>
+<a name="index-expansion"></a>
+
+<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:
+</p>
+<ul>
+<li> brace expansion
+</li><li> tilde expansion
+</li><li> parameter and variable expansion
+</li><li> command substitution
+</li><li> arithmetic expansion
+</li><li> word splitting
+</li><li> filename expansion
+</li></ul>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Brace-Expansion" accesskey="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">&bull; <a href="#Tilde-Expansion" accesskey="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">&bull; <a href="#Shell-Parameter-Expansion" accesskey="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">&bull; <a href="#Command-Substitution" accesskey="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">&bull; <a href="#Arithmetic-Expansion" accesskey="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">&bull; <a href="#Process-Substitution" accesskey="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">&bull; <a href="#Word-Splitting" accesskey="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">&bull; <a href="#Filename-Expansion" accesskey="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">&bull; <a href="#Quote-Removal" accesskey="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>
+
+<p>The order of expansions is:
+brace expansion;
+tilde expansion, parameter and variable expansion, 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 tilde, parameter, variable, and arithmetic expansion and
+command substitution.
+</p>
+<p>After these expansions are performed, quote characters present in the
+original word are removed unless they have been quoted themselves
+(<var>quote removal</var>).
+</p>
+<p>Only brace expansion, word splitting, and filename expansion
+can increase 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>&quot;$@&quot;</code> and <code>$*</code> (see <a href="#Special-Parameters">Special Parameters</a>), and
+<code>&quot;${<var>name</var>[@]}&quot;</code> and <code>${<var>name</var>[*]}</code>
+(see <a href="#Arrays">Arrays</a>).
+</p>
+<p>After all expansions, <code>quote removal</code> (see <a href="#Quote-Removal">Quote Removal</a>)
+is performed.
+</p>
+<hr>
+<a name="Brace-Expansion"></a>
+<div class="header">
+<p>
+Next: <a href="#Tilde-Expansion" accesskey="n" rel="next">Tilde Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Brace-Expansion-1"></a>
+<h4 class="subsection">3.5.1 Brace Expansion</h4>
+<a name="index-brace-expansion"></a>
+<a name="index-expansion_002c-brace"></a>
+
+<p>Brace expansion is a mechanism by which arbitrary strings may be generated.
+This mechanism is similar to
+<var>filename expansion</var> (see <a href="#Filename-Expansion">Filename Expansion</a>),
+but the filenames 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 sequence 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,
+</p><div class="example">
+<pre class="example">bash$ echo a{d,c,b}e
+ade ace abe
+</pre></div>
+
+<p>A sequence expression takes the form <code>{<var>x</var>..<var>y</var>[..<var>incr</var>]}</code>,
+where <var>x</var> and <var>y</var> are either integers or single characters,
+and <var>incr</var>, an optional increment, is an integer.
+When integers are supplied, the expression expands to each number between
+<var>x</var> and <var>y</var>, inclusive.
+Supplied integers may be prefixed with &lsquo;<samp>0</samp>&rsquo; to force each term to have the
+same width.
+When either <var>x</var> or <var>y</var> begins with a zero, the shell
+attempts to force all generated terms to contain the same number of digits,
+zero-padding where necessary.
+When characters are supplied, the expression expands to each character
+lexicographically between <var>x</var> and <var>y</var>, inclusive,
+using the default C locale.
+Note that both <var>x</var> and <var>y</var> must be of the same type.
+When the increment is supplied, it is used as the difference between
+each term. The default increment is 1 or -1 as appropriate.
+</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.
+</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 &lsquo;<samp>,</samp>&rsquo; may be quoted with a backslash to prevent its
+being considered part of a brace expression.
+To avoid conflicts with parameter expansion, the string &lsquo;<samp>${</samp>&rsquo;
+is not considered eligible for brace expansion,
+and inhibits brace expansion until the closing &lsquo;<samp>}</samp>&rsquo;..
+</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:
+</p><div class="example">
+<pre class="example">mkdir /usr/local/src/bash/{old,new,dist,bugs}
+</pre></div>
+<p>or
+</p><div class="example">
+<pre class="example">chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+</pre></div>
+
+<hr>
+<a name="Tilde-Expansion"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Parameter-Expansion" accesskey="n" rel="next">Shell Parameter Expansion</a>, Previous: <a href="#Brace-Expansion" accesskey="p" rel="prev">Brace Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Tilde-Expansion-1"></a>
+<h4 class="subsection">3.5.2 Tilde Expansion</h4>
+<a name="index-tilde-expansion"></a>
+<a name="index-expansion_002c-tilde"></a>
+
+<p>If a word begins with an unquoted tilde character (&lsquo;<samp>~</samp>&rsquo;), 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 &lsquo;<samp>~+</samp>&rsquo;, the value of
+the shell variable <code>PWD</code> replaces the tilde-prefix.
+If the tilde-prefix is &lsquo;<samp>~-</samp>&rsquo;, 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 &lsquo;<samp>+</samp>&rsquo; or a &lsquo;<samp>-</samp>&rsquo;,
+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 <a href="#The-Directory-Stack">The Directory Stack</a>).
+If the tilde-prefix, sans the tilde, consists of a number without a
+leading &lsquo;<samp>+</samp>&rsquo; or &lsquo;<samp>-</samp>&rsquo;, &lsquo;<samp>+</samp>&rsquo; 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 &lsquo;<samp>:</samp>&rsquo; or the first &lsquo;<samp>=</samp>&rsquo;.
+In these cases, tilde expansion is also performed.
+Consequently, one may use filenames 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>
+<dl compact="compact">
+<dt><code>~</code></dt>
+<dd><p>The value of <code>$HOME</code>
+</p></dd>
+<dt><code>~/foo</code></dt>
+<dd><p><samp>$HOME/foo</samp>
+</p>
+</dd>
+<dt><code>~fred/foo</code></dt>
+<dd><p>The subdirectory <code>foo</code> of the home directory of the user
+<code>fred</code>
+</p>
+</dd>
+<dt><code>~+/foo</code></dt>
+<dd><p><samp>$PWD/foo</samp>
+</p>
+</dd>
+<dt><code>~-/foo</code></dt>
+<dd><p><samp>${OLDPWD-'~-'}/foo</samp>
+</p>
+</dd>
+<dt><code>~<var>N</var></code></dt>
+<dd><p>The string that would be displayed by &lsquo;<samp>dirs +<var>N</var></samp>&rsquo;
+</p>
+</dd>
+<dt><code>~+<var>N</var></code></dt>
+<dd><p>The string that would be displayed by &lsquo;<samp>dirs +<var>N</var></samp>&rsquo;
+</p>
+</dd>
+<dt><code>~-<var>N</var></code></dt>
+<dd><p>The string that would be displayed by &lsquo;<samp>dirs -<var>N</var></samp>&rsquo;
+</p></dd>
+</dl>
+
+<p>Bash also performs tilde expansion on words satisfying the conditions of
+variable assignments (see <a href="#Shell-Parameters">Shell Parameters</a>)
+when they appear as arguments to simple commands.
+Bash does not do this, except for the <var>declaration</var> commands listed
+above, when in <small>POSIX</small> mode.
+</p>
+<hr>
+<a name="Shell-Parameter-Expansion"></a>
+<div class="header">
+<p>
+Next: <a href="#Command-Substitution" accesskey="n" rel="next">Command Substitution</a>, Previous: <a href="#Tilde-Expansion" accesskey="p" rel="prev">Tilde Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Parameter-Expansion-1"></a>
+<h4 class="subsection">3.5.3 Shell Parameter Expansion</h4>
+<a name="index-parameter-expansion"></a>
+<a name="index-expansion_002c-parameter"></a>
+
+<p>The &lsquo;<samp>$</samp>&rsquo; 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 &lsquo;<samp>}</samp>&rsquo;
+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 <var>parameter</var> is a shell parameter as described above
+(see <a href="#Shell-Parameters">Shell Parameters</a>) or an array reference (see <a href="#Arrays">Arrays</a>).
+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 (!),
+and <var>parameter</var> is not a <var>nameref</var>,
+it introduces a level of indirection.
+Bash uses the value formed by expanding the rest of
+<var>parameter</var> as the new <var>parameter</var>; this is then
+expanded and that value is used in the rest of the expansion, rather
+than the expansion of the original <var>parameter</var>.
+This is known as <code>indirect expansion</code>.
+The value is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+If <var>parameter</var> is a nameref, this expands to the name of the
+variable referenced by <var>parameter</var> instead of performing the
+complete indirect expansion.
+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, using the form described
+below (e.g., &lsquo;<samp>:-</samp>&rsquo;), 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 <var>parameter</var>&rsquo;s existence and that its value
+is not null; if the colon is omitted, the operator tests only for existence.
+</p>
+<dl compact="compact">
+<dt><code>${<var>parameter</var>:-<var>word</var>}</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>${<var>parameter</var>:=<var>word</var>}</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>${<var>parameter</var>:?<var>word</var>}</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>${<var>parameter</var>:+<var>word</var>}</code></dt>
+<dd><p>If <var>parameter</var>
+is null or unset, nothing is substituted, otherwise the expansion of
+<var>word</var> is substituted.
+</p>
+</dd>
+<dt><code>${<var>parameter</var>:<var>offset</var>}</code></dt>
+<dt><code>${<var>parameter</var>:<var>offset</var>:<var>length</var>}</code></dt>
+<dd><p>This is referred to as Substring Expansion.
+It expands to up to <var>length</var> characters of the value of <var>parameter</var>
+starting at the character specified by <var>offset</var>.
+If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo;, an indexed array subscripted by
+&lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, or an associative array name, the results differ as
+described below.
+If <var>length</var> is omitted, it expands to the substring of the value of
+<var>parameter</var> starting at the character specified by <var>offset</var>
+and extending to the end of the value.
+<var>length</var> and <var>offset</var> are arithmetic expressions
+(see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
+</p>
+<p>If <var>offset</var> evaluates to a number less than zero, the value
+is used as an offset in characters
+from the end of the value of <var>parameter</var>.
+If <var>length</var> evaluates to a number less than zero,
+it is interpreted as an offset in characters
+from the end of the value of <var>parameter</var> rather than
+a number of characters, and the expansion is the characters between
+<var>offset</var> and that result.
+Note that a negative offset must be separated from the colon by at least
+one space to avoid being confused with the &lsquo;<samp>:-</samp>&rsquo; expansion.
+</p>
+<p>Here are some examples illustrating substring expansion on parameters and
+subscripted arrays:
+</p>
+<pre class="verbatim">$ string=01234567890abcdefgh
+$ echo ${string:7}
+7890abcdefgh
+$ echo ${string:7:0}
+
+$ echo ${string:7:2}
+78
+$ echo ${string:7:-2}
+7890abcdef
+$ echo ${string: -7}
+bcdefgh
+$ echo ${string: -7:0}
+
+$ echo ${string: -7:2}
+bc
+$ echo ${string: -7:-2}
+bcdef
+$ set -- 01234567890abcdefgh
+$ echo ${1:7}
+7890abcdefgh
+$ echo ${1:7:0}
+
+$ echo ${1:7:2}
+78
+$ echo ${1:7:-2}
+7890abcdef
+$ echo ${1: -7}
+bcdefgh
+$ echo ${1: -7:0}
+
+$ echo ${1: -7:2}
+bc
+$ echo ${1: -7:-2}
+bcdef
+$ array[0]=01234567890abcdefgh
+$ echo ${array[0]:7}
+7890abcdefgh
+$ echo ${array[0]:7:0}
+
+$ echo ${array[0]:7:2}
+78
+$ echo ${array[0]:7:-2}
+7890abcdef
+$ echo ${array[0]: -7}
+bcdefgh
+$ echo ${array[0]: -7:0}
+
+$ echo ${array[0]: -7:2}
+bc
+$ echo ${array[0]: -7:-2}
+bcdef
+</pre>
+<p>If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo;, the result is <var>length</var> positional
+parameters beginning at <var>offset</var>.
+A negative <var>offset</var> is taken relative to one greater than the greatest
+positional parameter, so an offset of -1 evaluates to the last positional
+parameter.
+It is an expansion error if <var>length</var> evaluates to a number less than zero.
+</p>
+<p>The following examples illustrate substring expansion using positional
+parameters:
+</p>
+<pre class="verbatim">$ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+$ echo ${@:7}
+7 8 9 0 a b c d e f g h
+$ echo ${@:7:0}
+
+$ echo ${@:7:2}
+7 8
+$ echo ${@:7:-2}
+bash: -2: substring expression &lt; 0
+$ echo ${@: -7:2}
+b c
+$ echo ${@:0}
+./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+$ echo ${@:0:2}
+./bash 1
+$ echo ${@: -7:0}
+
+</pre>
+<p>If <var>parameter</var> is an indexed array name subscripted
+by &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, 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.
+It is an expansion error if <var>length</var> evaluates to a number less than zero.
+</p>
+<p>These examples show how you can use substring expansion with indexed
+arrays:
+</p>
+<pre class="verbatim">$ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h)
+$ echo ${array[@]:7}
+7 8 9 0 a b c d e f g h
+$ echo ${array[@]:7:2}
+7 8
+$ echo ${array[@]: -7:2}
+b c
+$ echo ${array[@]: -7:-2}
+bash: -2: substring expression &lt; 0
+$ echo ${array[@]:0}
+0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+$ echo ${array[@]:0:2}
+0 1
+$ echo ${array[@]: -7:0}
+
+</pre>
+<p>Substring expansion applied to an associative array produces undefined
+results.
+</p>
+<p>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>
+</dd>
+<dt><code>${!<var>prefix</var>*}</code></dt>
+<dt><code>${!<var>prefix</var>@}</code></dt>
+<dd><p>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 &lsquo;<samp>@</samp>&rsquo; is used and the expansion appears within double quotes, each
+variable name expands to a separate word.
+</p>
+</dd>
+<dt><code>${!<var>name</var>[@]}</code></dt>
+<dt><code>${!<var>name</var>[*]}</code></dt>
+<dd><p>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 &lsquo;<samp>@</samp>&rsquo; is used and the expansion appears within double quotes, each
+key expands to a separate word.
+</p>
+</dd>
+<dt><code>${#<var>parameter</var>}</code></dt>
+<dd><p>The length in characters of the expanded value of <var>parameter</var> is
+substituted.
+If <var>parameter</var> is &lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo;, the value substituted
+is the number of positional parameters.
+If <var>parameter</var> is an array name subscripted by &lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo;,
+the value substituted is the number of elements in the array.
+If <var>parameter</var>
+is an indexed array name subscripted by a negative number, that number is
+interpreted as relative to one greater than the maximum index of
+<var>parameter</var>, so negative indices count back from the end of the
+array, and an index of -1 references the last element.
+</p>
+</dd>
+<dt><code>${<var>parameter</var>#<var>word</var>}</code></dt>
+<dt><code>${<var>parameter</var>##<var>word</var>}</code></dt>
+<dd><p>The <var>word</var>
+is expanded to produce a pattern and matched according to the rules
+described below (see <a href="#Pattern-Matching">Pattern Matching</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 &lsquo;<samp>#</samp>&rsquo; case) or the
+longest matching pattern (the &lsquo;<samp>##</samp>&rsquo; case) deleted.
+If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+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
+&lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+</p>
+</dd>
+<dt><code>${<var>parameter</var>%<var>word</var>}</code></dt>
+<dt><code>${<var>parameter</var>%%<var>word</var>}</code></dt>
+<dd><p>The <var>word</var>
+is expanded to produce a pattern and matched according to the rules
+described below (see <a href="#Pattern-Matching">Pattern Matching</a>). If the pattern matches
+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 &lsquo;<samp>%</samp>&rsquo; case)
+or the longest matching pattern (the &lsquo;<samp>%%</samp>&rsquo; case) deleted.
+If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+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 &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+</p>
+</dd>
+<dt><code>${<var>parameter</var>/<var>pattern</var>/<var>string</var>}</code></dt>
+<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>.
+The match is performed according to the rules described below
+(see <a href="#Pattern-Matching">Pattern Matching</a>).
+If <var>pattern</var> begins with &lsquo;<samp>/</samp>&rsquo;, 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 &lsquo;<samp>#</samp>&rsquo;, it must match at the beginning
+of the expanded value of <var>parameter</var>.
+If <var>pattern</var> begins with &lsquo;<samp>%</samp>&rsquo;, 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 the <code>nocasematch</code> shell option
+(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+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 &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+the substitution operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+</p>
+</dd>
+<dt><code>${<var>parameter</var>^<var>pattern</var>}</code></dt>
+<dt><code>${<var>parameter</var>^^<var>pattern</var>}</code></dt>
+<dt><code>${<var>parameter</var>,<var>pattern</var>}</code></dt>
+<dt><code>${<var>parameter</var>,,<var>pattern</var>}</code></dt>
+<dd><p>This expansion modifies the case of alphabetic characters in <var>parameter</var>.
+The <var>pattern</var> is expanded to produce a pattern just as in
+filename expansion.
+Each character in the expanded value of <var>parameter</var> is tested against
+<var>pattern</var>, and, if it matches the pattern, its case is converted.
+The pattern should not attempt to match more than one character.
+The &lsquo;<samp>^</samp>&rsquo; operator converts lowercase letters matching <var>pattern</var>
+to uppercase; the &lsquo;<samp>,</samp>&rsquo; operator converts matching uppercase letters
+to lowercase.
+The &lsquo;<samp>^^</samp>&rsquo; and &lsquo;<samp>,,</samp>&rsquo; expansions convert each matched character in the
+expanded value; the &lsquo;<samp>^</samp>&rsquo; and &lsquo;<samp>,</samp>&rsquo; expansions match and convert only
+the first character in the expanded value.
+If <var>pattern</var> is omitted, it is treated like a &lsquo;<samp>?</samp>&rsquo;, which matches
+every character.
+If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+the case modification 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 &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+the case modification operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+</p>
+</dd>
+<dt><code>${<var>parameter</var>@<var>operator</var>}</code></dt>
+<dd><p>The expansion is either a transformation of the value of <var>parameter</var>
+or information about <var>parameter</var> itself, depending on the value of
+<var>operator</var>. Each <var>operator</var> is a single letter:
+</p>
+<dl compact="compact">
+<dt><code>Q</code></dt>
+<dd><p>The expansion is a string that is the value of <var>parameter</var> quoted in a
+format that can be reused as input.
+</p></dd>
+<dt><code>E</code></dt>
+<dd><p>The expansion is a string that is the value of <var>parameter</var> with backslash
+escape sequences expanded as with the <code>$'&hellip;'</code> quoting mechanism.
+</p></dd>
+<dt><code>P</code></dt>
+<dd><p>The expansion is a string that is the result of expanding the value of
+<var>parameter</var> as if it were a prompt string (see <a href="#Controlling-the-Prompt">Controlling the Prompt</a>).
+</p></dd>
+<dt><code>A</code></dt>
+<dd><p>The expansion is a string in the form of
+an assignment statement or <code>declare</code> command that, if
+evaluated, will recreate <var>parameter</var> with its attributes and value.
+</p></dd>
+<dt><code>a</code></dt>
+<dd><p>The expansion is a string consisting of flag values representing
+<var>parameter</var>&rsquo;s attributes.
+</p></dd>
+</dl>
+
+<p>If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+the 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 &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+the operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+</p>
+<p>The result of the expansion is subject to word splitting and pathname
+expansion as described below.
+</p></dd>
+</dl>
+
+<hr>
+<a name="Command-Substitution"></a>
+<div class="header">
+<p>
+Next: <a href="#Arithmetic-Expansion" accesskey="n" rel="next">Arithmetic Expansion</a>, Previous: <a href="#Shell-Parameter-Expansion" accesskey="p" rel="prev">Shell Parameter Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Command-Substitution-1"></a>
+<h4 class="subsection">3.5.4 Command Substitution</h4>
+<a name="index-command-substitution"></a>
+
+<p>Command substitution allows the output of a command to replace
+the command itself.
+Command substitution occurs when a command is enclosed as follows:
+</p><div class="example">
+<pre class="example">$(<var>command</var>)
+</pre></div>
+<p>or
+</p><div class="example">
+<pre class="example">`<var>command</var>`
+</pre></div>
+
+<p>Bash performs the expansion by executing <var>command</var> in a subshell environment
+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>$(&lt; <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
+&lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, or &lsquo;<samp>\</samp>&rsquo;.
+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>
+<hr>
+<a name="Arithmetic-Expansion"></a>
+<div class="header">
+<p>
+Next: <a href="#Process-Substitution" accesskey="n" rel="next">Process Substitution</a>, Previous: <a href="#Command-Substitution" accesskey="p" rel="prev">Command Substitution</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Arithmetic-Expansion-1"></a>
+<h4 class="subsection">3.5.5 Arithmetic Expansion</h4>
+<a name="index-expansion_002c-arithmetic"></a>
+<a name="index-arithmetic-expansion"></a>
+
+<p>Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result. The format for arithmetic expansion is:
+</p>
+<div class="example">
+<pre class="example">$(( <var>expression</var> ))
+</pre></div>
+
+<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 and variable expansion,
+command substitution, and quote removal.
+The result is treated as the arithmetic expression to be evaluated.
+Arithmetic expansions may be nested.
+</p>
+<p>The evaluation is performed according to the rules listed below
+(see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
+If the expression is invalid, Bash prints a message indicating
+failure to the standard error and no substitution occurs.
+</p>
+<hr>
+<a name="Process-Substitution"></a>
+<div class="header">
+<p>
+Next: <a href="#Word-Splitting" accesskey="n" rel="next">Word Splitting</a>, Previous: <a href="#Arithmetic-Expansion" accesskey="p" rel="prev">Arithmetic Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Process-Substitution-1"></a>
+<h4 class="subsection">3.5.6 Process Substitution</h4>
+<a name="index-process-substitution"></a>
+
+<p>Process substitution allows a process&rsquo;s input or output to be
+referred to using a filename.
+It takes the form of
+</p><div class="example">
+<pre class="example">&lt;(<var>list</var>)
+</pre></div>
+<p>or
+</p><div class="example">
+<pre class="example">&gt;(<var>list</var>)
+</pre></div>
+<p>The process <var>list</var> is run asynchronously, and its input or output
+appears as a filename.
+This filename is
+passed as an argument to the current command as the result of the
+expansion.
+If the <code>&gt;(<var>list</var>)</code> form is used, writing to
+the file will provide input for <var>list</var>. If the
+<code>&lt;(<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>&lt;</code> or <code>&gt;</code>
+and the left parenthesis, otherwise the construct would be interpreted
+as a redirection.
+Process substitution is supported on systems that support named
+pipes (<small>FIFO</small>s) or the <samp>/dev/fd</samp> method of naming open files.
+</p>
+<p>When available, process substitution is performed simultaneously with
+parameter and variable expansion, command substitution, and arithmetic
+expansion.
+</p>
+<hr>
+<a name="Word-Splitting"></a>
+<div class="header">
+<p>
+Next: <a href="#Filename-Expansion" accesskey="n" rel="next">Filename Expansion</a>, Previous: <a href="#Process-Substitution" accesskey="p" rel="prev">Process Substitution</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Word-Splitting-1"></a>
+<h4 class="subsection">3.5.7 Word Splitting</h4>
+<a name="index-word-splitting"></a>
+
+<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 using these characters
+as field terminators.
+If <code>IFS</code> is unset, or its value is exactly <code>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</code>,
+the default, then sequences of
+<code> &lt;space&gt;</code>, <code>&lt;tab&gt;</code>, and <code>&lt;newline&gt;</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>, <code>tab</code>, and <code>newline</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>&quot;&quot;</code> or <code>''</code>) are retained
+and passed to commands as empty strings.
+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
+and passed to a command as an empty string.
+When a quoted null argument appears as part of a word whose expansion is
+non-null, the null argument is removed.
+That is, the word
+<code>-d''</code> becomes <code>-d</code> after word splitting and
+null argument removal.
+</p>
+<p>Note that if no expansion occurs, no splitting
+is performed.
+</p>
+<hr>
+<a name="Filename-Expansion"></a>
+<div class="header">
+<p>
+Next: <a href="#Quote-Removal" accesskey="n" rel="next">Quote Removal</a>, Previous: <a href="#Word-Splitting" accesskey="p" rel="prev">Word Splitting</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Filename-Expansion-1"></a>
+<h4 class="subsection">3.5.8 Filename Expansion</h4>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Pattern-Matching" accesskey="1">Pattern Matching</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How the shell matches patterns.
+</td></tr>
+</table>
+<a name="index-expansion_002c-filename"></a>
+<a name="index-expansion_002c-pathname"></a>
+<a name="index-filename-expansion"></a>
+<a name="index-pathname-expansion"></a>
+
+<p>After word splitting, unless the <samp>-f</samp> option has been set
+(see <a href="#The-Set-Builtin">The Set Builtin</a>), Bash scans each word for the characters
+&lsquo;<samp>*</samp>&rsquo;, &lsquo;<samp>?</samp>&rsquo;, and &lsquo;<samp>[</samp>&rsquo;.
+If one of these characters appears, then the word is
+regarded as a <var>pattern</var>,
+and replaced with an alphabetically sorted list of
+filenames matching the pattern (see <a href="#Pattern-Matching">Pattern Matching</a>).
+If no matching filenames 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 expansion, the character &lsquo;<samp>.</samp>&rsquo;
+at the start of a filename or immediately following a slash
+must be matched explicitly, unless the shell option <code>dotglob</code> is set.
+The filenames &lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo; must always be matched explicitly,
+even if <code>dotglob</code> is set.
+In other cases, the &lsquo;<samp>.</samp>&rsquo; character is not treated specially.
+</p>
+<p>When matching a filename, the slash character must always be
+matched explicitly by a slash in the pattern, but in other matching
+contexts it can be matched by a special pattern character as described
+below (see <a href="#Pattern-Matching">Pattern Matching</a>).
+</p>
+<p>See the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">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 file names matching a
+pattern. If <code>GLOBIGNORE</code>
+is set, each matching file name that also matches one of the patterns in
+<code>GLOBIGNORE</code> is removed from the list of matches.
+If the <code>nocaseglob</code> option is set, the matching against the patterns in
+<code>GLOBIGNORE</code> is performed without regard to case.
+The filenames
+<samp>.</samp> and <samp>..</samp>
+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
+&lsquo;<samp>.</samp>&rsquo; will match.
+To get the old behavior of ignoring filenames beginning with a
+&lsquo;<samp>.</samp>&rsquo;, make &lsquo;<samp>.*</samp>&rsquo; one of the patterns in <code>GLOBIGNORE</code>.
+The <code>dotglob</code> option is disabled when <code>GLOBIGNORE</code>
+is unset.
+</p>
+<hr>
+<a name="Pattern-Matching"></a>
+<div class="header">
+<p>
+Up: <a href="#Filename-Expansion" accesskey="u" rel="up">Filename Expansion</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Pattern-Matching-1"></a>
+<h4 class="subsubsection">3.5.8.1 Pattern Matching</h4>
+<a name="index-pattern-matching"></a>
+<a name="index-matching_002c-pattern"></a>
+
+<p>Any character that appears in a pattern, other than the special pattern
+characters described below, matches itself.
+The <small>NUL</small> 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:
+</p><dl compact="compact">
+<dt><code>*</code></dt>
+<dd><p>Matches any string, including the null string.
+When the <code>globstar</code> shell option is enabled, and &lsquo;<samp>*</samp>&rsquo; is used in
+a filename expansion context, two adjacent &lsquo;<samp>*</samp>&rsquo;s used as a single
+pattern will match all files and zero or more directories and
+subdirectories.
+If followed by a &lsquo;<samp>/</samp>&rsquo;, two adjacent &lsquo;<samp>*</samp>&rsquo;s will match only
+directories and subdirectories.
+</p></dd>
+<dt><code>?</code></dt>
+<dd><p>Matches any single character.
+</p></dd>
+<dt><code>[&hellip;]</code></dt>
+<dd><p>Matches any one of the enclosed characters. A pair of characters
+separated by a hyphen denotes a <var>range expression</var>;
+any character that falls between those two characters, inclusive,
+using the current locale&rsquo;s collating sequence and character set,
+is matched. If the first character following the
+&lsquo;<samp>[</samp>&rsquo; is a &lsquo;<samp>!</samp>&rsquo; or a &lsquo;<samp>^</samp>&rsquo;
+then any character not enclosed is matched. A &lsquo;<samp>-</samp>&rsquo;
+may be matched by including it as the first or last character
+in the set. A &lsquo;<samp>]</samp>&rsquo; 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 values of the
+<code>LC_COLLATE</code> and <code>LC_ALL</code> shell variables, if set.
+</p>
+<p>For example, in the default C locale, &lsquo;<samp>[a-dx-z]</samp>&rsquo; is equivalent to
+&lsquo;<samp>[abcdxyz]</samp>&rsquo;. Many locales sort characters in dictionary order, and in
+these locales &lsquo;<samp>[a-dx-z]</samp>&rsquo; is typically not equivalent to &lsquo;<samp>[abcdxyz]</samp>&rsquo;;
+it might be equivalent to &lsquo;<samp>[aBbCcDdxXyYz]</samp>&rsquo;, 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 &lsquo;<samp>C</samp>&rsquo;, or enable the
+<code>globasciiranges</code> shell option.
+</p>
+<p>Within &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo;, <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 <small>POSIX</small> standard:
+</p><div class="example">
+<pre class="example">alnum alpha ascii blank cntrl digit graph lower
+print punct space upper word xdigit
+</pre></div>
+<p>A character class matches any character belonging to that class.
+The <code>word</code> character class matches letters, digits, and the character
+&lsquo;<samp>_</samp>&rsquo;.
+</p>
+<p>Within &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo;, 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 &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo;, the syntax <code>[.</code><var>symbol</var><code>.]</code>
+matches the collating symbol <var>symbol</var>.
+</p></dd>
+</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 &lsquo;<samp>|</samp>&rsquo;.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+</p>
+<dl compact="compact">
+<dt><code>?(<var>pattern-list</var>)</code></dt>
+<dd><p>Matches zero or one occurrence of the given patterns.
+</p>
+</dd>
+<dt><code>*(<var>pattern-list</var>)</code></dt>
+<dd><p>Matches zero or more occurrences of the given patterns.
+</p>
+</dd>
+<dt><code>+(<var>pattern-list</var>)</code></dt>
+<dd><p>Matches one or more occurrences of the given patterns.
+</p>
+</dd>
+<dt><code>@(<var>pattern-list</var>)</code></dt>
+<dd><p>Matches one of the given patterns.
+</p>
+</dd>
+<dt><code>!(<var>pattern-list</var>)</code></dt>
+<dd><p>Matches anything except one of the given patterns.
+</p></dd>
+</dl>
+
+<p>Complicated extended pattern matching against long strings is slow,
+especially when the patterns contain alternations and the strings
+contain multiple matches.
+Using separate matches against shorter strings, or using arrays of
+strings instead of a single long string, may be faster.
+</p>
+<hr>
+<a name="Quote-Removal"></a>
+<div class="header">
+<p>
+Previous: <a href="#Filename-Expansion" accesskey="p" rel="prev">Filename Expansion</a>, Up: <a href="#Shell-Expansions" accesskey="u" rel="up">Shell Expansions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Quote-Removal-1"></a>
+<h4 class="subsection">3.5.9 Quote Removal</h4>
+
+<p>After the preceding expansions, all unquoted occurrences of the
+characters &lsquo;<samp>\</samp>&rsquo;, &lsquo;<samp>'</samp>&rsquo;, and &lsquo;<samp>&quot;</samp>&rsquo; that did not
+result from one of the above expansions are removed.
+</p>
+<hr>
+<a name="Redirections"></a>
+<div class="header">
+<p>
+Next: <a href="#Executing-Commands" accesskey="n" rel="next">Executing Commands</a>, Previous: <a href="#Shell-Expansions" accesskey="p" rel="prev">Shell Expansions</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Redirections-1"></a>
+<h3 class="section">3.6 Redirections</h3>
+<a name="index-redirection"></a>
+
+<p>Before a command is executed, its input and output
+may be <var>redirected</var>
+using a special notation interpreted by the shell.
+Redirection allows commands&rsquo; file handles to be
+duplicated, opened, closed,
+made to refer to different files,
+and can change the files the command reads from and writes to.
+Redirection may also be used to modify file handles in 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>Each redirection that may be preceded by a file descriptor number
+may instead be preceded by a word of the form {<var>varname</var>}.
+In this case, for each redirection operator except
+&gt;&amp;- and &lt;&amp;-, the shell will allocate a file descriptor greater
+than 10 and assign it to {<var>varname</var>}. If &gt;&amp;- or &lt;&amp;- is preceded
+by {<var>varname</var>}, the value of <var>varname</var> defines the file
+descriptor to close.
+If {<var>varname</var>} is supplied, the redirection persists beyond
+the scope of the command, allowing the shell programmer to manage
+the file descriptor himself.
+</p>
+<p>In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is
+&lsquo;<samp>&lt;</samp>&rsquo;, the redirection refers to the standard input (file
+descriptor 0). If the first character of the redirection operator
+is &lsquo;<samp>&gt;</samp>&rsquo;, 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
+</p><div class="example">
+<pre class="example">ls &gt; <var>dirlist</var> 2&gt;&amp;1
+</pre></div>
+<p>directs both standard output (file descriptor 1) and standard error
+(file descriptor 2) to the file <var>dirlist</var>, while the command
+</p><div class="example">
+<pre class="example">ls 2&gt;&amp;1 &gt; <var>dirlist</var>
+</pre></div>
+<p>directs only the standard output to file <var>dirlist</var>,
+because the standard error was made a copy of the 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.
+If the operating system on which Bash is running provides these
+special files, bash will use them; otherwise it will emulate them
+internally with the behavior described below.
+</p>
+<dl compact="compact">
+<dt><code>/dev/fd/<var>fd</var></code></dt>
+<dd><p>If <var>fd</var> is a valid integer, file descriptor <var>fd</var> is duplicated.
+</p>
+</dd>
+<dt><code>/dev/stdin</code></dt>
+<dd><p>File descriptor 0 is duplicated.
+</p>
+</dd>
+<dt><code>/dev/stdout</code></dt>
+<dd><p>File descriptor 1 is duplicated.
+</p>
+</dd>
+<dt><code>/dev/stderr</code></dt>
+<dd><p>File descriptor 2 is duplicated.
+</p>
+</dd>
+<dt><code>/dev/tcp/<var>host</var>/<var>port</var></code></dt>
+<dd><p>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
+the corresponding TCP socket.
+</p>
+</dd>
+<dt><code>/dev/udp/<var>host</var>/<var>port</var></code></dt>
+<dd><p>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
+the corresponding UDP socket.
+</p></dd>
+</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>
+<a name="Redirecting-Input"></a>
+<h4 class="subsection">3.6.1 Redirecting Input</h4>
+<p>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>
+<p>The general format for redirecting input is:
+</p><div class="example">
+<pre class="example">[<var>n</var>]&lt;<var>word</var>
+</pre></div>
+
+<a name="Redirecting-Output"></a>
+<h4 class="subsection">3.6.2 Redirecting Output</h4>
+<p>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>
+<p>The general format for redirecting output is:
+</p><div class="example">
+<pre class="example">[<var>n</var>]&gt;[|]<var>word</var>
+</pre></div>
+
+<p>If the redirection operator is &lsquo;<samp>&gt;</samp>&rsquo;, 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 &lsquo;<samp>&gt;|</samp>&rsquo;, or the redirection operator is
+&lsquo;<samp>&gt;</samp>&rsquo; and the <code>noclobber</code> option is not enabled, the redirection
+is attempted even if the file named by <var>word</var> exists.
+</p>
+<a name="Appending-Redirected-Output"></a>
+<h4 class="subsection">3.6.3 Appending Redirected Output</h4>
+<p>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>
+<p>The general format for appending output is:
+</p><div class="example">
+<pre class="example">[<var>n</var>]&gt;&gt;<var>word</var>
+</pre></div>
+
+<a name="Redirecting-Standard-Output-and-Standard-Error"></a>
+<h4 class="subsection">3.6.4 Redirecting Standard Output and Standard Error</h4>
+<p>This construct 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>.
+</p>
+<p>There are two formats for redirecting standard output and
+standard error:
+</p><div class="example">
+<pre class="example">&amp;&gt;<var>word</var>
+</pre></div>
+<p>and
+</p><div class="example">
+<pre class="example">&gt;&amp;<var>word</var>
+</pre></div>
+<p>Of the two forms, the first is preferred.
+This is semantically equivalent to
+</p><div class="example">
+<pre class="example">&gt;<var>word</var> 2&gt;&amp;1
+</pre></div>
+<p>When using the second form, <var>word</var> may not expand to a number or
+&lsquo;<samp>-</samp>&rsquo;. If it does, other redirection operators apply
+(see Duplicating File Descriptors below) for compatibility reasons.
+</p>
+<a name="Appending-Standard-Output-and-Standard-Error"></a>
+<h4 class="subsection">3.6.5 Appending Standard Output and Standard Error</h4>
+<p>This construct allows both the
+standard output (file descriptor 1) and
+the standard error output (file descriptor 2)
+to be appended to the file whose name is the
+expansion of <var>word</var>.
+</p>
+<p>The format for appending standard output and standard error is:
+</p><div class="example">
+<pre class="example">&amp;&gt;&gt;<var>word</var>
+</pre></div>
+<p>This is semantically equivalent to
+</p><div class="example">
+<pre class="example">&gt;&gt;<var>word</var> 2&gt;&amp;1
+</pre></div>
+<p>(see Duplicating File Descriptors below).
+</p>
+<a name="Here-Documents"></a>
+<h4 class="subsection">3.6.6 Here Documents</h4>
+<p>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 (or file descriptor <var>n</var> if <var>n</var> is specified) for a command.
+</p>
+<p>The format of here-documents is:
+</p><div class="example">
+<pre class="example">[<var>n</var>]&lt;&lt;[-]<var>word</var>
+ <var>here-document</var>
+<var>delimiter</var>
+</pre></div>
+
+<p>No parameter and variable expansion, command substitution,
+arithmetic expansion, or filename expansion is performed on
+<var>word</var>. If any part of <var>word</var> is 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,
+the character sequence <code>\newline</code> is ignored, and &lsquo;<samp>\</samp>&rsquo;
+must be used to quote the characters
+&lsquo;<samp>\</samp>&rsquo;, &lsquo;<samp>$</samp>&rsquo;, and &lsquo;<samp>`</samp>&rsquo;.
+</p>
+<p>If the redirection operator is &lsquo;<samp>&lt;&lt;-</samp>&rsquo;,
+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>
+<a name="Here-Strings"></a>
+<h4 class="subsection">3.6.7 Here Strings</h4>
+<p>A variant of here documents, the format is:
+</p><div class="example">
+<pre class="example">[<var>n</var>]&lt;&lt;&lt; <var>word</var>
+</pre></div>
+
+<p>The <var>word</var> undergoes
+tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal.
+Pathname expansion and word splitting are not performed.
+The result is supplied as a single string,
+with a newline appended,
+to the command on its
+standard input (or file descriptor <var>n</var> if <var>n</var> is specified).
+</p>
+<a name="Duplicating-File-Descriptors"></a>
+<h4 class="subsection">3.6.8 Duplicating File Descriptors</h4>
+<p>The redirection operator
+</p><div class="example">
+<pre class="example">[<var>n</var>]&lt;&amp;<var>word</var>
+</pre></div>
+<p>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 &lsquo;<samp>-</samp>&rsquo;, file descriptor <var>n</var> is closed.
+If <var>n</var> is not specified, the standard input (file descriptor 0) is used.
+</p>
+<p>The operator
+</p><div class="example">
+<pre class="example">[<var>n</var>]&gt;&amp;<var>word</var>
+</pre></div>
+<p>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.
+If <var>word</var>
+evaluates to &lsquo;<samp>-</samp>&rsquo;, file descriptor <var>n</var> is closed.
+As a special case, if <var>n</var> is omitted, and <var>word</var> does not
+expand to one or more digits or &lsquo;<samp>-</samp>&rsquo;, the standard output and standard
+error are redirected as described previously.
+</p>
+<a name="Moving-File-Descriptors"></a>
+<h4 class="subsection">3.6.9 Moving File Descriptors</h4>
+<p>The redirection operator
+</p><div class="example">
+<pre class="example">[<var>n</var>]&lt;&amp;<var>digit</var>-
+</pre></div>
+<p>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>
+<p>Similarly, the redirection operator
+</p><div class="example">
+<pre class="example">[<var>n</var>]&gt;&amp;<var>digit</var>-
+</pre></div>
+<p>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>
+<a name="Opening-File-Descriptors-for-Reading-and-Writing"></a>
+<h4 class="subsection">3.6.10 Opening File Descriptors for Reading and Writing</h4>
+<p>The redirection operator
+</p><div class="example">
+<pre class="example">[<var>n</var>]&lt;&gt;<var>word</var>
+</pre></div>
+<p>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>
+<hr>
+<a name="Executing-Commands"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Scripts" accesskey="n" rel="next">Shell Scripts</a>, Previous: <a href="#Redirections" accesskey="p" rel="prev">Redirections</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Executing-Commands-1"></a>
+<h3 class="section">3.7 Executing Commands</h3>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Simple-Command-Expansion" accesskey="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">&bull; <a href="#Command-Search-and-Execution" accesskey="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">&bull; <a href="#Command-Execution-Environment" accesskey="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">&bull; <a href="#Environment" accesskey="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">&bull; <a href="#Exit-Status" accesskey="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">&bull; <a href="#Signals" accesskey="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>
+
+<hr>
+<a name="Simple-Command-Expansion"></a>
+<div class="header">
+<p>
+Next: <a href="#Command-Search-and-Execution" accesskey="n" rel="next">Command Search and Execution</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Simple-Command-Expansion-1"></a>
+<h4 class="subsection">3.7.1 Simple Command Expansion</h4>
+<a name="index-command-expansion"></a>
+
+<p>When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+</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.
+
+</li><li> The words that are not variable assignments or redirections are
+expanded (see <a href="#Shell-Expansions">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.
+
+</li><li> Redirections are performed as described above (see <a href="#Redirections">Redirections</a>).
+
+</li><li> The text after the &lsquo;<samp>=</samp>&rsquo; in each variable assignment undergoes tilde
+expansion, parameter expansion, command substitution, arithmetic expansion,
+and quote removal before being assigned to the variable.
+</li></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>
+<hr>
+<a name="Command-Search-and-Execution"></a>
+<div class="header">
+<p>
+Next: <a href="#Command-Execution-Environment" accesskey="n" rel="next">Command Execution Environment</a>, Previous: <a href="#Simple-Command-Expansion" accesskey="p" rel="prev">Simple Command Expansion</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Command-Search-and-Execution-1"></a>
+<h4 class="subsection">3.7.2 Command Search and Execution</h4>
+<a name="index-command-execution"></a>
+<a name="index-command-search"></a>
+
+<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>
+<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="#Shell-Functions">Shell Functions</a>.
+
+</li><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.
+
+</li><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="#Bourne-Shell-Builtins">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 searches for a defined shell
+function named <code>command_not_found_handle</code>.
+If that function exists, it is invoked in a separate execution environment
+with the original command and
+the original command&rsquo;s arguments as its arguments, and the function&rsquo;s
+exit status becomes the exit status of that subshell.
+If that function is not defined, the shell prints an error
+message and returns an exit status of 127.
+
+</li><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.
+
+</li><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="#Shell-Scripts">Shell Scripts</a>.
+
+</li><li> If the command was not begun asynchronously, the shell waits for
+the command to complete and collects its exit status.
+
+</li></ol>
+
+<hr>
+<a name="Command-Execution-Environment"></a>
+<div class="header">
+<p>
+Next: <a href="#Environment" accesskey="n" rel="next">Environment</a>, Previous: <a href="#Command-Search-and-Execution" accesskey="p" rel="prev">Command Search and Execution</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Command-Execution-Environment-1"></a>
+<h4 class="subsection">3.7.3 Command Execution Environment</h4>
+<a name="index-execution-environment"></a>
+
+<p>The shell has an <var>execution environment</var>, which consists of the
+following:
+</p>
+<ul>
+<li> open files inherited by the shell at invocation, as modified by
+redirections supplied to the <code>exec</code> builtin
+
+</li><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
+
+</li><li> the file creation mode mask as set by <code>umask</code> or inherited from
+the shell&rsquo;s parent
+
+</li><li> current traps set by <code>trap</code>
+
+</li><li> shell parameters that are set by variable assignment or with <code>set</code>
+or inherited from the shell&rsquo;s parent in the environment
+
+</li><li> shell functions defined during execution or inherited from the shell&rsquo;s
+parent in the environment
+
+</li><li> options enabled at invocation (either by default or with command-line
+arguments) or by <code>set</code>
+
+</li><li> options enabled by <code>shopt</code> (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
+
+</li><li> shell aliases defined with <code>alias</code> (see <a href="#Aliases">Aliases</a>)
+
+</li><li> various process <small>ID</small>s, including those of background jobs
+(see <a href="#Lists">Lists</a>), the value of <code>$$</code>, and the value of
+<code>$PPID</code>
+
+</li></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>
+<ul>
+<li> the shell&rsquo;s open files, plus any modifications and additions specified
+by redirections to the command
+
+</li><li> the current working directory
+
+</li><li> the file creation mode mask
+
+</li><li> shell variables and functions marked for export, along with variables
+exported for the command, passed in the environment (see <a href="#Environment">Environment</a>)
+
+</li><li> traps caught by the shell are reset to the values inherited from the
+shell&rsquo;s parent, and traps ignored by the shell are ignored
+
+</li></ul>
+
+<p>A command invoked in this separate environment cannot affect the
+shell&rsquo;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&rsquo;s execution environment.
+</p>
+<p>Subshells spawned to execute command substitutions inherit the value of
+the <samp>-e</samp> option from the parent shell. When not in <small>POSIX</small> mode,
+Bash clears the <samp>-e</samp> option in such subshells.
+</p>
+<p>If a command is followed by a &lsquo;<samp>&amp;</samp>&rsquo; and job control is not active, the
+default standard input for the command is the empty file <samp>/dev/null</samp>.
+Otherwise, the invoked command inherits the file descriptors of the calling
+shell as modified by redirections.
+</p>
+<hr>
+<a name="Environment"></a>
+<div class="header">
+<p>
+Next: <a href="#Exit-Status" accesskey="n" rel="next">Exit Status</a>, Previous: <a href="#Command-Execution-Environment" accesskey="p" rel="prev">Command Execution Environment</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Environment-1"></a>
+<h4 class="subsection">3.7.4 Environment</h4>
+<a name="index-environment"></a>
+
+<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 &lsquo;<samp>declare -x</samp>&rsquo;
+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&rsquo;s
+initial environment, whose values may be modified in the shell,
+less any pairs removed by the <code>unset</code> and &lsquo;<samp>export -n</samp>&rsquo;
+commands, plus any additions via the <code>export</code> and
+&lsquo;<samp>declare -x</samp>&rsquo; 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="#Shell-Parameters">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 <a href="#The-Set-Builtin">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 &lsquo;<samp>$_</samp>&rsquo;
+is set to the full pathname of the command and passed to that
+command in its environment.
+</p>
+<hr>
+<a name="Exit-Status"></a>
+<div class="header">
+<p>
+Next: <a href="#Signals" accesskey="n" rel="next">Signals</a>, Previous: <a href="#Environment" accesskey="p" rel="prev">Environment</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Exit-Status-1"></a>
+<h4 class="subsection">3.7.5 Exit Status</h4>
+<a name="index-exit-status-1"></a>
+
+<p>The exit status of an executed command is the value returned by the
+<var>waitpid</var> system call or equivalent function. Exit statuses
+fall between 0 and 255, though, as explained below, the shell may
+use values above 125 specially. Exit statuses from shell builtins and
+compound commands are also limited to this range. Under certain
+circumstances, the shell will use special values to indicate specific
+failure modes.
+</p>
+<p>For the shell&rsquo;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 <a href="#Conditional-Constructs">Conditional Constructs</a>) and some of the list
+constructs (see <a href="#Lists">Lists</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,
+generally invalid options or missing arguments.
+</p>
+<hr>
+<a name="Signals"></a>
+<div class="header">
+<p>
+Previous: <a href="#Exit-Status" accesskey="p" rel="prev">Exit Status</a>, Up: <a href="#Executing-Commands" accesskey="u" rel="up">Executing Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Signals-1"></a>
+<h4 class="subsection">3.7.6 Signals</h4>
+<a name="index-signal-handling"></a>
+
+<p>When Bash is interactive, in the absence of any traps, it ignores
+<code>SIGTERM</code> (so that &lsquo;<samp>kill 0</samp>&rsquo; 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 <a href="#Job-Control">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 <a href="#Job-Control-Builtins">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 <a href="#The-Shopt-Builtin">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>
+<hr>
+<a name="Shell-Scripts"></a>
+<div class="header">
+<p>
+Previous: <a href="#Executing-Commands" accesskey="p" rel="prev">Executing Commands</a>, Up: <a href="#Basic-Shell-Features" accesskey="u" rel="up">Basic Shell Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Scripts-1"></a>
+<h3 class="section">3.8 Shell Scripts</h3>
+<a name="index-shell-script"></a>
+
+<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 <a href="#Invoking-Bash">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
+</p><div class="example">
+<pre class="example">filename <var>arguments</var>
+</pre></div>
+<p>is equivalent to executing
+</p><div class="example">
+<pre class="example">bash filename <var>arguments</var>
+</pre></div>
+
+<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="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
+are retained by the child.
+</p>
+<p>Most versions of Unix make this a part of the operating system&rsquo;s command
+execution mechanism. If the first line of a script begins with
+the two characters &lsquo;<samp>#!</samp>&rsquo;, 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 <samp>/bin</samp>), since this ensures that
+Bash will be used to interpret the script, even if it is executed
+under another shell.
+</p>
+<hr>
+<a name="Shell-Builtin-Commands"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Variables" accesskey="n" rel="next">Shell Variables</a>, Previous: <a href="#Basic-Shell-Features" accesskey="p" rel="prev">Basic Shell Features</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Builtin-Commands-1"></a>
+<h2 class="chapter">4 Shell Builtin Commands</h2>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Bourne-Shell-Builtins" accesskey="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">&bull; <a href="#Bash-Builtins" accesskey="2">Bash Builtins</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">&bull; <a href="#Modifying-Shell-Behavior" accesskey="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">&bull; <a href="#Special-Builtins" accesskey="4">Special Builtins</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Builtin commands classified specially by
+ POSIX.
+</td></tr>
+</table>
+
+<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 <a href="#Simple-Commands">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 <a href="#Job-Control-Builtins">Job Control Builtins</a>), the directory stack
+(see <a href="#Directory-Stack-Builtins">Directory Stack Builtins</a>), the command history
+(see <a href="#Bash-History-Builtins">Bash History Builtins</a>), and the programmable completion
+facilities (see <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>).
+</p>
+<p>Many of the builtins have been extended by <small>POSIX</small> or Bash.
+</p>
+<p>Unless otherwise noted, each builtin command documented as accepting
+options preceded by &lsquo;<samp>-</samp>&rsquo; accepts &lsquo;<samp>--</samp>&rsquo;
+to signify the end of the options.
+The <code>:</code>, <code>true</code>, <code>false</code>, and <code>test</code>/<code>[</code>
+builtins do not accept options and do not treat &lsquo;<samp>--</samp>&rsquo; specially.
+The <code>exit</code>, <code>logout</code>, <code>return</code>,
+<code>break</code>, <code>continue</code>, <code>let</code>,
+and <code>shift</code> builtins accept and process arguments beginning
+with &lsquo;<samp>-</samp>&rsquo; without requiring &lsquo;<samp>--</samp>&rsquo;.
+Other builtins that accept arguments but are not specified as accepting
+options interpret arguments beginning with &lsquo;<samp>-</samp>&rsquo; as invalid options and
+require &lsquo;<samp>--</samp>&rsquo; to prevent this interpretation.
+</p>
+<hr>
+<a name="Bourne-Shell-Builtins"></a>
+<div class="header">
+<p>
+Next: <a href="#Bash-Builtins" accesskey="n" rel="next">Bash Builtins</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bourne-Shell-Builtins-1"></a>
+<h3 class="section">4.1 Bourne Shell Builtins</h3>
+
+<p>The following shell builtin commands are inherited from the Bourne Shell.
+These commands are implemented as specified by the <small>POSIX</small> standard.
+</p>
+<dl compact="compact">
+<dt><code>: <span class="roman">(a colon)</span></code></dt>
+<dd><a name="index-_003a"></a>
+<div class="example">
+<pre class="example">: [<var>arguments</var>]
+</pre></div>
+
+<p>Do nothing beyond expanding <var>arguments</var> and performing redirections.
+The return status is zero.
+</p>
+</dd>
+<dt><code>. <span class="roman">(a period)</span></code></dt>
+<dd><a name="index-_002e"></a>
+<div class="example">
+<pre class="example">. <var>filename</var> [<var>arguments</var>]
+</pre></div>
+
+<p>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 <small>POSIX</small> 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.
+If the <samp>-T</samp> option is enabled, <code>source</code> inherits any trap on
+<code>DEBUG</code>; if it is not, any <code>DEBUG</code> trap string is saved and
+restored around the call to <code>source</code>, and <code>source</code> unsets the
+<code>DEBUG</code> trap while it executes.
+If <samp>-T</samp> is not set, and the sourced file changes
+the <code>DEBUG</code> trap, the new value is retained when <code>source</code> completes.
+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>
+</dd>
+<dt><code>break</code></dt>
+<dd><a name="index-break"></a>
+<div class="example">
+<pre class="example">break [<var>n</var>]
+</pre></div>
+
+<p>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>
+</dd>
+<dt><code>cd</code></dt>
+<dd><a name="index-cd"></a>
+<div class="example">
+<pre class="example">cd [-L|[-P [-e]] [-@] [<var>directory</var>]
+</pre></div>
+
+<p>Change the current working directory to <var>directory</var>.
+If <var>directory</var> is not supplied, the value of the <code>HOME</code>
+shell variable is used.
+Any additional arguments following <var>directory</var> are ignored.
+If the shell variable
+<code>CDPATH</code> exists, it is used as a search path:
+each directory name in <code>CDPATH</code> is searched for
+<var>directory</var>, with alternative directory names in <code>CDPATH</code>
+separated by a colon (&lsquo;<samp>:</samp>&rsquo;).
+If <var>directory</var> begins with a slash, <code>CDPATH</code> is not used.
+</p>
+<p>The <samp>-P</samp> option means to not follow symbolic links: symbolic links
+are resolved while <code>cd</code> is traversing <var>directory</var> and before
+processing an instance of &lsquo;<samp>..</samp>&rsquo; in <var>directory</var>.
+</p>
+<p>By default, or when the <samp>-L</samp> option is supplied, symbolic links
+in <var>directory</var> are resolved after <code>cd</code> processes an instance
+of &lsquo;<samp>..</samp>&rsquo; in <var>directory</var>.
+</p>
+<p>If &lsquo;<samp>..</samp>&rsquo; appears in <var>directory</var>, it is processed by removing the
+immediately preceding pathname component, back to a slash or the beginning
+of <var>directory</var>.
+</p>
+<p>If the <samp>-e</samp> option is supplied with <samp>-P</samp>
+and the current working directory cannot be successfully determined
+after a successful directory change, <code>cd</code> will return an unsuccessful
+status.
+</p>
+<p>On systems that support it, the <samp>-@</samp> option presents the extended
+attributes associated with a file as a directory.
+</p>
+<p>If <var>directory</var> is &lsquo;<samp>-</samp>&rsquo;, it is converted to <code>$OLDPWD</code>
+before the directory change is attempted.
+</p>
+<p>If a non-empty directory name from <code>CDPATH</code> is used, or if
+&lsquo;<samp>-</samp>&rsquo; 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>
+</dd>
+<dt><code>continue</code></dt>
+<dd><a name="index-continue"></a>
+<div class="example">
+<pre class="example">continue [<var>n</var>]
+</pre></div>
+
+<p>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>
+</dd>
+<dt><code>eval</code></dt>
+<dd><a name="index-eval"></a>
+<div class="example">
+<pre class="example">eval [<var>arguments</var>]
+</pre></div>
+
+<p>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>
+</dd>
+<dt><code>exec</code></dt>
+<dd><a name="index-exec"></a>
+<div class="example">
+<pre class="example">exec [-cl] [-a <var>name</var>] [<var>command</var> [<var>arguments</var>]]
+</pre></div>
+
+<p>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 <var>command</var>
+cannot be executed for some reason, a non-interactive shell exits,
+unless the <code>execfail</code> shell option
+is enabled. In that case, it returns failure.
+An interactive shell returns failure if the file cannot be executed.
+A subshell exits unconditionally if <code>exec</code> fails.
+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>
+</dd>
+<dt><code>exit</code></dt>
+<dd><a name="index-exit"></a>
+<div class="example">
+<pre class="example">exit [<var>n</var>]
+</pre></div>
+
+<p>Exit the shell, returning a status of <var>n</var> to the shell&rsquo;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>
+</dd>
+<dt><code>export</code></dt>
+<dd><a name="index-export"></a>
+<div class="example">
+<pre class="example">export [-fn] [-p] [<var>name</var>[=<var>value</var>]]
+</pre></div>
+
+<p>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 names of all exported variables 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>
+<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>
+</dd>
+<dt><code>getopts</code></dt>
+<dd><a name="index-getopts"></a>
+<div class="example">
+<pre class="example">getopts <var>optstring</var> <var>name</var> [<var>args</var>]
+</pre></div>
+
+<p><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 whitespace.
+The colon (&lsquo;<samp>:</samp>&rsquo;) and question mark (&lsquo;<samp>?</samp>&rsquo;) 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>
+<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 <var>name</var> is set to &lsquo;<samp>?</samp>&rsquo;.
+</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 &lsquo;<samp>?</samp>&rsquo; 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 (&lsquo;<samp>?</samp>&rsquo;) 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 (&lsquo;<samp>:</samp>&rsquo;) is placed in
+<var>name</var> and <code>OPTARG</code> is set to the option character found.
+</p>
+</dd>
+<dt><code>hash</code></dt>
+<dd><a name="index-hash"></a>
+<div class="example">
+<pre class="example">hash [-r] [-p <var>filename</var>] [-dt] [<var>name</var>]
+</pre></div>
+
+<p>Each time <code>hash</code> is invoked, it remembers the full pathnames of the
+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>.
+Any previously-remembered pathname is discarded.
+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>
+</dd>
+<dt><code>pwd</code></dt>
+<dd><a name="index-pwd"></a>
+<div class="example">
+<pre class="example">pwd [-LP]
+</pre></div>
+
+<p>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>
+</dd>
+<dt><code>readonly</code></dt>
+<dd><a name="index-readonly"></a>
+<div class="example">
+<pre class="example">readonly [-aAf] [-p] [<var>name</var>[=<var>value</var>]] &hellip;
+</pre></div>
+
+<p>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 indexed
+array variable; the <samp>-A</samp> option means each <var>name</var> refers
+to an associative array variable.
+If both options are supplied, <samp>-A</samp> takes precedence.
+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 other options may be used to restrict the output to a subset of
+the set of readonly names.
+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>
+</dd>
+<dt><code>return</code></dt>
+<dd><a name="index-return"></a>
+<div class="example">
+<pre class="example">return [<var>n</var>]
+</pre></div>
+
+<p>Cause a shell function to stop executing and return the value <var>n</var>
+to its caller.
+If <var>n</var> is not supplied, the return value is the exit status of the
+last command executed in the function.
+If <code>return</code> is executed by a trap handler, the last command used to
+determine the status is the last command executed before the trap handler.
+If <code>return</code> is executed during a <code>DEBUG</code> trap, the last command
+used to determine the status is the last command executed by the trap
+handler before <code>return</code> was invoked.
+<code>return</code> may also be used to terminate execution of a script
+being executed with the <code>.</code> (<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.
+If <var>n</var> is supplied, the return value is its least significant
+8 bits.
+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 supplied a non-numeric
+argument or is used outside a function
+and not during the execution of a script by <code>.</code> or <code>source</code>.
+</p>
+</dd>
+<dt><code>shift</code></dt>
+<dd><a name="index-shift"></a>
+<div class="example">
+<pre class="example">shift [<var>n</var>]
+</pre></div>
+
+<p>Shift the positional parameters to the left by <var>n</var>.
+The positional parameters from <var>n</var>+1 &hellip; <code>$#</code> are
+renamed to <code>$1</code> &hellip; <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>
+</dd>
+<dt><code>test</code></dt>
+<dt><code>[</code></dt>
+<dd><a name="index-test"></a>
+<a name="index-_005b"></a>
+<div class="example">
+<pre class="example">test <var>expr</var>
+</pre></div>
+
+<p>Evaluate a conditional expression <var>expr</var> and return a status of 0
+(true) or 1 (false).
+Each operator and operand must be a separate argument.
+Expressions are composed of the primaries described below in
+<a href="#Bash-Conditional-Expressions">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>
+<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.
+The evaluation depends on the number of arguments; see below.
+Operator precedence is used when there are five or more arguments.
+</p>
+<dl compact="compact">
+<dt><code>! <var>expr</var></code></dt>
+<dd><p>True if <var>expr</var> is false.
+</p>
+</dd>
+<dt><code>( <var>expr</var> )</code></dt>
+<dd><p>Returns the value of <var>expr</var>.
+This may be used to override the normal precedence of operators.
+</p>
+</dd>
+<dt><code><var>expr1</var> -a <var>expr2</var></code></dt>
+<dd><p>True if both <var>expr1</var> and <var>expr2</var> are true.
+</p>
+</dd>
+<dt><code><var>expr1</var> -o <var>expr2</var></code></dt>
+<dd><p>True if either <var>expr1</var> or <var>expr2</var> is true.
+</p></dd>
+</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>
+<dl compact="compact">
+<dt>0 arguments</dt>
+<dd><p>The expression is false.
+</p>
+</dd>
+<dt>1 argument</dt>
+<dd><p>The expression is true if, and only if, the argument is not null.
+</p>
+</dd>
+<dt>2 arguments</dt>
+<dd><p>If the first argument is &lsquo;<samp>!</samp>&rsquo;, 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 <a href="#Bash-Conditional-Expressions">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>
+</dd>
+<dt>3 arguments</dt>
+<dd><p>The following conditions are applied in the order listed.
+</p>
+<ol>
+<li> If the second argument is one of the binary conditional
+operators (see <a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the
+result of the expression is the result of the binary test using the
+first and third arguments as operands.
+The &lsquo;<samp>-a</samp>&rsquo; and &lsquo;<samp>-o</samp>&rsquo; operators are considered binary operators
+when there are three arguments.
+</li><li> If the first argument is &lsquo;<samp>!</samp>&rsquo;, the value is the negation of
+the two-argument test using the second and third arguments.
+</li><li> If the first argument is exactly &lsquo;<samp>(</samp>&rsquo; and the third argument is
+exactly &lsquo;<samp>)</samp>&rsquo;, the result is the one-argument test of the second
+argument.
+</li><li> Otherwise, the expression is false.
+</li></ol>
+
+</dd>
+<dt>4 arguments</dt>
+<dd><p>If the first argument is &lsquo;<samp>!</samp>&rsquo;, 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>
+</dd>
+<dt>5 or more arguments</dt>
+<dd><p>The expression is parsed and evaluated according to precedence
+using the rules listed above.
+</p></dd>
+</dl>
+
+<p>When used with <code>test</code> or &lsquo;<samp>[</samp>&rsquo;, the &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo;
+operators sort lexicographically using ASCII ordering.
+</p>
+</dd>
+<dt><code>times</code></dt>
+<dd><a name="index-times"></a>
+<div class="example">
+<pre class="example">times
+</pre></div>
+
+<p>Print out the user and system times used by the shell and its children.
+The return status is zero.
+</p>
+</dd>
+<dt><code>trap</code></dt>
+<dd><a name="index-trap"></a>
+<div class="example">
+<pre class="example">trap [-lp] [<var>arg</var>] [<var>sigspec</var> &hellip;]
+</pre></div>
+
+<p>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 &lsquo;<samp>-</samp>&rsquo;, each specified signal&rsquo;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.
+</p>
+<p>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>extdebug</code> option to the
+<code>shopt</code> builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) for details of its
+effect on the <code>DEBUG</code> trap.
+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>
+<p>If a <var>sigspec</var> is <code>ERR</code>, the command <var>arg</var>
+is executed whenever
+a pipeline (which may consist of a single simple
+command), a list, or a compound command returns 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 following the <code>if</code> or <code>elif</code> reserved words,
+part of a command executed in a <code>&amp;&amp;</code> or <code>||</code> list
+except the command following the final <code>&amp;&amp;</code> or <code>||</code>,
+any command in a pipeline but the last,
+or if the command&rsquo;s return
+status is being inverted using <code>!</code>.
+These are the same conditions obeyed by the <code>errexit</code> (<samp>-e</samp>)
+option.
+</p>
+<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 subshell or subshell environment when one is created.
+</p>
+<p>The return status is zero unless a <var>sigspec</var> does not specify a
+valid signal.
+</p>
+</dd>
+<dt><code>umask</code></dt>
+<dd><a name="index-umask"></a>
+<div class="example">
+<pre class="example">umask [-p] [-S] [<var>mode</var>]
+</pre></div>
+
+<p>Set the shell process&rsquo;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>
+<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>
+</dd>
+<dt><code>unset</code></dt>
+<dd><a name="index-unset"></a>
+<div class="example">
+<pre class="example">unset [-fnv] [<var>name</var>]
+</pre></div>
+
+<p>Remove each variable or function <var>name</var>.
+If the <samp>-v</samp> option is given, each
+<var>name</var> refers to a shell variable and that variable is removed.
+If the <samp>-f</samp> option is given, the <var>name</var>s refer to shell
+functions, and the function definition is removed.
+If the <samp>-n</samp> option is supplied, and <var>name</var> is a variable with
+the <var>nameref</var> attribute, <var>name</var> will be unset rather than the
+variable it references.
+<samp>-n</samp> has no effect if the <samp>-f</samp> option is supplied.
+If no options are supplied, each <var>name</var> refers to a variable; if
+there is no variable by that name, any function with that name is
+unset.
+Readonly variables and functions may not be unset.
+The return status is zero unless a <var>name</var> is readonly.
+</p></dd>
+</dl>
+
+<hr>
+<a name="Bash-Builtins"></a>
+<div class="header">
+<p>
+Next: <a href="#Modifying-Shell-Behavior" accesskey="n" rel="next">Modifying Shell Behavior</a>, Previous: <a href="#Bourne-Shell-Builtins" accesskey="p" rel="prev">Bourne Shell Builtins</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-Builtin-Commands"></a>
+<h3 class="section">4.2 Bash Builtin Commands</h3>
+
+<p>This section describes builtin commands which are unique to
+or have been extended in Bash.
+Some of these commands are specified in the <small>POSIX</small> standard.
+</p>
+<dl compact="compact">
+<dt><code>alias</code></dt>
+<dd><a name="index-alias"></a>
+<div class="example">
+<pre class="example">alias [-p] [<var>name</var>[=<var>value</var>] &hellip;]
+</pre></div>
+
+<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="#Aliases">Aliases</a>.
+</p>
+</dd>
+<dt><code>bind</code></dt>
+<dd><a name="index-bind"></a>
+<div class="example">
+<pre class="example">bind [-m <var>keymap</var>] [-lpsvPSVX]
+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 [-m <var>keymap</var>] <var>keyseq:readline-command</var>
+</pre></div>
+
+<p>Display current Readline (see <a href="#Command-Line-Editing">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 <a href="#Readline-Init-File">Readline Init File</a>),
+but each binding or command must be passed as a separate argument; e.g.,
+&lsquo;<samp>&quot;\C-x\C-r&quot;:re-read-init-file</samp>&rsquo;.
+</p>
+<p>Options, if supplied, have the following meanings:
+</p>
+<dl compact="compact">
+<dt><code>-m <var>keymap</var></code></dt>
+<dd><p>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>vi-move</code> is also a
+synonym); <code>emacs</code> is equivalent to <code>emacs-standard</code>.
+</p>
+</dd>
+<dt><code>-l</code></dt>
+<dd><p>List the names of all Readline functions.
+</p>
+</dd>
+<dt><code>-p</code></dt>
+<dd><p>Display Readline function names and bindings in such a way that they
+can be used as input or in a Readline initialization file.
+</p>
+</dd>
+<dt><code>-P</code></dt>
+<dd><p>List current Readline function names and bindings.
+</p>
+</dd>
+<dt><code>-v</code></dt>
+<dd><p>Display Readline variable names and values in such a way that they
+can be used as input or in a Readline initialization file.
+</p>
+</dd>
+<dt><code>-V</code></dt>
+<dd><p>List current Readline variable names and values.
+</p>
+</dd>
+<dt><code>-s</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-S</code></dt>
+<dd><p>Display Readline key sequences bound to macros and the strings they output.
+</p>
+</dd>
+<dt><code>-f <var>filename</var></code></dt>
+<dd><p>Read key bindings from <var>filename</var>.
+</p>
+</dd>
+<dt><code>-q <var>function</var></code></dt>
+<dd><p>Query about which keys invoke the named <var>function</var>.
+</p>
+</dd>
+<dt><code>-u <var>function</var></code></dt>
+<dd><p>Unbind all keys bound to the named <var>function</var>.
+</p>
+</dd>
+<dt><code>-r <var>keyseq</var></code></dt>
+<dd><p>Remove any current binding for <var>keyseq</var>.
+</p>
+</dd>
+<dt><code>-x <var>keyseq:shell-command</var></code></dt>
+<dd><p>Cause <var>shell-command</var> to be executed whenever <var>keyseq</var> is
+entered.
+When <var>shell-command</var> is executed, the shell sets the
+<code>READLINE_LINE</code> variable to the contents of the Readline line
+buffer and the <code>READLINE_POINT</code> variable to the current location
+of the insertion point.
+If the executed command changes the value of <code>READLINE_LINE</code> or
+<code>READLINE_POINT</code>, those new values will be reflected in the
+editing state.
+</p>
+</dd>
+<dt><code>-X</code></dt>
+<dd><p>List all key sequences bound to shell commands and the associated commands
+in a format that can be reused as input.
+</p></dd>
+</dl>
+
+<p>The return status is zero unless an invalid option is supplied or an
+error occurs.
+</p>
+</dd>
+<dt><code>builtin</code></dt>
+<dd><a name="index-builtin"></a>
+<div class="example">
+<pre class="example">builtin [<var>shell-builtin</var> [<var>args</var>]]
+</pre></div>
+
+<p>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>
+</dd>
+<dt><code>caller</code></dt>
+<dd><a name="index-caller"></a>
+<div class="example">
+<pre class="example">caller [<var>expr</var>]
+</pre></div>
+
+<p>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>
+<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>
+</dd>
+<dt><code>command</code></dt>
+<dd><a name="index-command"></a>
+<div class="example">
+<pre class="example">command [-pVv] <var>command</var> [<var>arguments</var> &hellip;]
+</pre></div>
+
+<p>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 &lsquo;<samp>command ls</samp>&rsquo;
+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>
+<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>
+</dd>
+<dt><code>declare</code></dt>
+<dd><a name="index-declare"></a>
+<div class="example">
+<pre class="example">declare [-aAfFgilnrtux] [-p] [<var>name</var>[=<var>value</var>] &hellip;]
+</pre></div>
+
+<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 with <var>name</var> arguments, additional options,
+other than <samp>-f</samp> and <samp>-F</samp>, are ignored.
+</p>
+<p>When <samp>-p</samp> is supplied without <var>name</var> arguments, <code>declare</code>
+will display the attributes and values of all variables having the
+attributes specified by the additional options.
+If no other options are supplied with <samp>-p</samp>, <code>declare</code> will
+display the attributes and values of all shell variables. The <samp>-f</samp>
+option will restrict the display to shell functions.
+</p>
+<p>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 <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), the source file name and line number where
+each <var>name</var> is defined are displayed as well.
+<samp>-F</samp> implies <samp>-f</samp>.
+</p>
+<p>The <samp>-g</samp> option forces variables to be created or modified at
+the global scope, even when <code>declare</code> is executed in a shell function.
+It is ignored in all other cases.
+</p>
+<p>The following options can be used to restrict output to variables with
+the specified attributes or to give variables attributes:
+</p>
+<dl compact="compact">
+<dt><code>-a</code></dt>
+<dd><p>Each <var>name</var> is an indexed array variable (see <a href="#Arrays">Arrays</a>).
+</p>
+</dd>
+<dt><code>-A</code></dt>
+<dd><p>Each <var>name</var> is an associative array variable (see <a href="#Arrays">Arrays</a>).
+</p>
+</dd>
+<dt><code>-f</code></dt>
+<dd><p>Use function names only.
+</p>
+</dd>
+<dt><code>-i</code></dt>
+<dd><p>The variable is to be treated as
+an integer; arithmetic evaluation (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>) is
+performed when the variable is assigned a value.
+</p>
+</dd>
+<dt><code>-l</code></dt>
+<dd><p>When the variable is assigned a value, all upper-case characters are
+converted to lower-case.
+The upper-case attribute is disabled.
+</p>
+</dd>
+<dt><code>-n</code></dt>
+<dd><p>Give each <var>name</var> the <var>nameref</var> attribute, making
+it a name reference to another variable.
+That other variable is defined by the value of <var>name</var>.
+All references, assignments, and attribute modifications
+to <var>name</var>, except for those using or changing the
+<samp>-n</samp> attribute itself, are performed on the variable referenced by
+<var>name</var>&rsquo;s value.
+The nameref attribute cannot be applied to array variables.
+</p>
+</dd>
+<dt><code>-r</code></dt>
+<dd><p>Make <var>name</var>s readonly. These names cannot then be assigned values
+by subsequent assignment statements or unset.
+</p>
+</dd>
+<dt><code>-t</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-u</code></dt>
+<dd><p>When the variable is assigned a value, all lower-case characters are
+converted to upper-case.
+The lower-case attribute is disabled.
+</p>
+</dd>
+<dt><code>-x</code></dt>
+<dd><p>Mark each <var>name</var> for export to subsequent commands via
+the environment.
+</p></dd>
+</dl>
+
+<p>Using &lsquo;<samp>+</samp>&rsquo; instead of &lsquo;<samp>-</samp>&rsquo; turns off the attribute instead,
+with the exceptions that &lsquo;<samp>+a</samp>&rsquo; and &lsquo;<samp>+A</samp>&rsquo;
+may not be used to destroy array variables and &lsquo;<samp>+r</samp>&rsquo; 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, unless the <samp>-g</samp> option is used.
+If a variable name is followed by =<var>value</var>, the value of the variable
+is set to <var>value</var>.
+</p>
+<p>When using <samp>-a</samp> or <samp>-A</samp> and the compound assignment syntax to
+create array variables, additional attributes do not take effect until
+subsequent assignments.
+</p>
+<p>The return status is zero unless an invalid option is encountered,
+an attempt is made to define a function using &lsquo;<samp>-f foo=bar</samp>&rsquo;,
+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 <a href="#Arrays">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>
+</dd>
+<dt><code>echo</code></dt>
+<dd><a name="index-echo"></a>
+<div class="example">
+<pre class="example">echo [-neE] [<var>arg</var> &hellip;]
+</pre></div>
+
+<p>Output the <var>arg</var>s, separated by spaces, terminated with a
+newline.
+The return status is 0 unless a write error occurs.
+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>
+<p><code>echo</code> interprets the following escape sequences:
+</p><dl compact="compact">
+<dt><code>\a</code></dt>
+<dd><p>alert (bell)
+</p></dd>
+<dt><code>\b</code></dt>
+<dd><p>backspace
+</p></dd>
+<dt><code>\c</code></dt>
+<dd><p>suppress further output
+</p></dd>
+<dt><code>\e</code></dt>
+<dt><code>\E</code></dt>
+<dd><p>escape
+</p></dd>
+<dt><code>\f</code></dt>
+<dd><p>form feed
+</p></dd>
+<dt><code>\n</code></dt>
+<dd><p>new line
+</p></dd>
+<dt><code>\r</code></dt>
+<dd><p>carriage return
+</p></dd>
+<dt><code>\t</code></dt>
+<dd><p>horizontal tab
+</p></dd>
+<dt><code>\v</code></dt>
+<dd><p>vertical tab
+</p></dd>
+<dt><code>\\</code></dt>
+<dd><p>backslash
+</p></dd>
+<dt><code>\0<var>nnn</var></code></dt>
+<dd><p>the eight-bit character whose value is the octal value <var>nnn</var>
+(zero to three octal digits)
+</p></dd>
+<dt><code>\x<var>HH</var></code></dt>
+<dd><p>the eight-bit character whose value is the hexadecimal value <var>HH</var>
+(one or two hex digits)
+</p></dd>
+<dt><code>\u<var>HHHH</var></code></dt>
+<dd><p>the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+<var>HHHH</var> (one to four hex digits)
+</p></dd>
+<dt><code>\U<var>HHHHHHHH</var></code></dt>
+<dd><p>the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+<var>HHHHHHHH</var> (one to eight hex digits)
+</p></dd>
+</dl>
+
+</dd>
+<dt><code>enable</code></dt>
+<dd><a name="index-enable"></a>
+<div class="example">
+<pre class="example">enable [-a] [-dnps] [-f <var>filename</var>] [<var>name</var> &hellip;]
+</pre></div>
+
+<p>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
+&lsquo;<samp>enable -n test</samp>&rsquo;.
+</p>
+<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 <small>POSIX</small> special
+builtins. If <samp>-s</samp> is used with <samp>-f</samp>, the new builtin becomes
+a special builtin (see <a href="#Special-Builtins">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>
+</dd>
+<dt><code>help</code></dt>
+<dd><a name="index-help"></a>
+<div class="example">
+<pre class="example">help [-dms] [<var>pattern</var>]
+</pre></div>
+
+<p>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.
+</p>
+<p>Options, if supplied, have the following meanings:
+</p>
+<dl compact="compact">
+<dt><code>-d</code></dt>
+<dd><p>Display a short description of each <var>pattern</var>
+</p></dd>
+<dt><code>-m</code></dt>
+<dd><p>Display the description of each <var>pattern</var> in a manpage-like format
+</p></dd>
+<dt><code>-s</code></dt>
+<dd><p>Display only a short usage synopsis for each <var>pattern</var>
+</p></dd>
+</dl>
+
+<p>The return status is zero unless no command matches <var>pattern</var>.
+</p>
+</dd>
+<dt><code>let</code></dt>
+<dd><a name="index-let"></a>
+<div class="example">
+<pre class="example">let <var>expression</var> [<var>expression</var> &hellip;]
+</pre></div>
+
+<p>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="#Shell-Arithmetic">Shell Arithmetic</a>. If the
+last <var>expression</var> evaluates to 0, <code>let</code> returns 1;
+otherwise 0 is returned.
+</p>
+</dd>
+<dt><code>local</code></dt>
+<dd><a name="index-local"></a>
+<div class="example">
+<pre class="example">local [<var>option</var>] <var>name</var>[=<var>value</var>] &hellip;
+</pre></div>
+
+<p>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.
+If <var>name</var> is &lsquo;<samp>-</samp>&rsquo;, the set of shell options is made local to the
+function in which <code>local</code> is invoked: shell options changed using
+the <code>set</code> builtin inside the function are restored to their original
+values when the function returns.
+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>
+</dd>
+<dt><code>logout</code></dt>
+<dd><a name="index-logout"></a>
+<div class="example">
+<pre class="example">logout [<var>n</var>]
+</pre></div>
+
+<p>Exit a login shell, returning a status of <var>n</var> to the shell&rsquo;s
+parent.
+</p>
+</dd>
+<dt><code>mapfile</code></dt>
+<dd><a name="index-mapfile"></a>
+<div class="example">
+<pre class="example">mapfile [-d <var>delim</var>] [-n <var>count</var>] [-O <var>origin</var>] [-s <var>count</var>]
+ [-t] [-u <var>fd</var>] [-C <var>callback</var>] [-c <var>quantum</var>] [<var>array</var>]
+</pre></div>
+
+<p>Read lines from the standard input into the indexed array variable <var>array</var>,
+or from file descriptor <var>fd</var>
+if the <samp>-u</samp> option is supplied.
+The variable <code>MAPFILE</code> is the default <var>array</var>.
+Options, if supplied, have the following meanings:
+</p>
+<dl compact="compact">
+<dt><code>-d</code></dt>
+<dd><p>The first character of <var>delim</var> is used to terminate each input line,
+rather than newline.
+If <var>delim</var> is the empty string, <code>mapfile</code> will terminate a line
+when it reads a NUL character.
+</p></dd>
+<dt><code>-n</code></dt>
+<dd><p>Copy at most <var>count</var> lines. If <var>count</var> is 0, all lines are copied.
+</p></dd>
+<dt><code>-O</code></dt>
+<dd><p>Begin assigning to <var>array</var> at index <var>origin</var>.
+The default index is 0.
+</p></dd>
+<dt><code>-s</code></dt>
+<dd><p>Discard the first <var>count</var> lines read.
+</p></dd>
+<dt><code>-t</code></dt>
+<dd><p>Remove a trailing <var>delim</var> (default newline) from each line read.
+</p></dd>
+<dt><code>-u</code></dt>
+<dd><p>Read lines from file descriptor <var>fd</var> instead of the standard input.
+</p></dd>
+<dt><code>-C</code></dt>
+<dd><p>Evaluate <var>callback</var> each time <var>quantum</var> lines are read.
+The <samp>-c</samp> option specifies <var>quantum</var>.
+</p></dd>
+<dt><code>-c</code></dt>
+<dd><p>Specify the number of lines read between each call to <var>callback</var>.
+</p></dd>
+</dl>
+
+<p>If <samp>-C</samp> is specified without <samp>-c</samp>,
+the default quantum is 5000.
+When <var>callback</var> is evaluated, it is supplied the index of the next
+array element to be assigned and the line to be assigned to that element
+as additional arguments.
+<var>callback</var> is evaluated after the line is read but before the
+array element is assigned.
+</p>
+<p>If not supplied with an explicit origin, <code>mapfile</code> will clear <var>array</var>
+before assigning to it.
+</p>
+<p><code>mapfile</code> returns successfully unless an invalid option or option
+argument is supplied, <var>array</var> is invalid or unassignable, or <var>array</var>
+is not an indexed array.
+</p>
+</dd>
+<dt><code>printf</code></dt>
+<dd><a name="index-printf"></a>
+<div class="example">
+<pre class="example">printf [-v <var>var</var>] <var>format</var> [<var>arguments</var>]
+</pre></div>
+
+<p>Write the formatted <var>arguments</var> to the standard output under the
+control of the <var>format</var>.
+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 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, <code>printf</code>
+interprets the following extensions:
+</p>
+<dl compact="compact">
+<dt><code>%b</code></dt>
+<dd><p>Causes <code>printf</code> to expand backslash escape sequences in the
+corresponding <var>argument</var> in the same way as <code>echo -e</code>
+(see <a href="#Bash-Builtins">Bash Builtins</a>).
+</p></dd>
+<dt><code>%q</code></dt>
+<dd><p>Causes <code>printf</code> to output the
+corresponding <var>argument</var> in a format that can be reused as shell input.
+</p></dd>
+<dt><code>%(<var>datefmt</var>)T</code></dt>
+<dd><p>Causes <code>printf</code> to output the date-time string resulting from using
+<var>datefmt</var> as a format string for <code>strftime</code>(3).
+The corresponding <var>argument</var> is an integer representing the number of
+seconds since the epoch.
+Two special argument values may be used: -1 represents the current
+time, and -2 represents the time the shell was invoked.
+If no argument is specified, conversion behaves as if -1 had been given.
+This is an exception to the usual <code>printf</code> behavior.
+</p></dd>
+</dl>
+
+<p>Arguments to non-string format specifiers are treated as C language constants,
+except that a leading plus or minus sign is allowed, and if the leading
+character is a single or double quote, the value is the ASCII value of
+the following character.
+</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>
+</dd>
+<dt><code>read</code></dt>
+<dd><a name="index-read"></a>
+<div class="example">
+<pre class="example">read [-ers] [-a <var>aname</var>] [-d <var>delim</var>] [-i <var>text</var>] [-n <var>nchars</var>]
+ [-N <var>nchars</var>] [-p <var>prompt</var>] [-t <var>timeout</var>] [-u <var>fd</var>] [<var>name</var> &hellip;]
+</pre></div>
+
+<p>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,
+split into words as described above in <a href="#Word-Splitting">Word Splitting</a>,
+and the first word
+is assigned to the first <var>name</var>, the second word to the second <var>name</var>,
+and so on.
+If there are more words than names,
+the remaining words and their intervening delimiters are 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 using the same rules the shell
+uses for expansion (described above in <a href="#Word-Splitting">Word Splitting</a>).
+The backslash character &lsquo;<samp>\</samp>&rsquo; 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 exit status is zero, unless end-of-file is encountered, <code>read</code>
+times out (in which case the status is greater than 128),
+a variable assignment error (such as assigning to a readonly variable) occurs,
+or an invalid file descriptor is supplied as the argument to <samp>-u</samp>.
+</p>
+<p>Options, if supplied, have the following meanings:
+</p>
+<dl compact="compact">
+<dt><code>-a <var>aname</var></code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-d <var>delim</var></code></dt>
+<dd><p>The first character of <var>delim</var> is used to terminate the input line,
+rather than newline.
+If <var>delim</var> is the empty string, <code>read</code> will terminate a line
+when it reads a NUL character.
+</p>
+</dd>
+<dt><code>-e</code></dt>
+<dd><p>Readline (see <a href="#Command-Line-Editing">Command Line Editing</a>) is used to obtain the line.
+Readline uses the current (or default, if line editing was not previously
+active) editing settings, but uses Readline&rsquo;s default filename completion.
+</p>
+</dd>
+<dt><code>-i <var>text</var></code></dt>
+<dd><p>If Readline is being used to read the line, <var>text</var> is placed into
+the editing buffer before editing begins.
+</p>
+</dd>
+<dt><code>-n <var>nchars</var></code></dt>
+<dd><p><code>read</code> returns after reading <var>nchars</var> characters rather than
+waiting for a complete line of input, but honors a delimiter if fewer
+than <var>nchars</var> characters are read before the delimiter.
+</p>
+</dd>
+<dt><code>-N <var>nchars</var></code></dt>
+<dd><p><code>read</code> returns after reading exactly <var>nchars</var> characters rather
+than waiting for a complete line of input, unless EOF is encountered or
+<code>read</code> times out.
+Delimiter characters encountered in the input are
+not treated specially and do not cause <code>read</code> to return until
+<var>nchars</var> characters are read.
+The result is not split on the characters in <code>IFS</code>; the intent is
+that the variable is assigned exactly the characters read
+(with the exception of backslash; see the <samp>-r</samp> option below).
+</p>
+</dd>
+<dt><code>-p <var>prompt</var></code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-r</code></dt>
+<dd><p>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 then be used as a line
+continuation.
+</p>
+</dd>
+<dt><code>-s</code></dt>
+<dd><p>Silent mode. If input is coming from a terminal, characters are
+not echoed.
+</p>
+</dd>
+<dt><code>-t <var>timeout</var></code></dt>
+<dd><p>Cause <code>read</code> to time out and return failure if a complete line of
+input (or a specified number of characters)
+is not read within <var>timeout</var> seconds.
+<var>timeout</var> may be a decimal number with a fractional portion following
+the decimal point.
+This option is only effective if <code>read</code> is reading input from a
+terminal, pipe, or other special file; it has no effect when reading
+from regular files.
+If <code>read</code> times out, <code>read</code> saves any partial input read into
+the specified variable <var>name</var>.
+If <var>timeout</var> is 0, <code>read</code> returns immediately, without trying to
+read and data. The exit status is 0 if input is available on
+the specified file descriptor, non-zero otherwise.
+The exit status is greater than 128 if the timeout is exceeded.
+</p>
+</dd>
+<dt><code>-u <var>fd</var></code></dt>
+<dd><p>Read input from file descriptor <var>fd</var>.
+</p></dd>
+</dl>
+
+</dd>
+<dt><code>readarray</code></dt>
+<dd><a name="index-readarray"></a>
+<div class="example">
+<pre class="example">readarray [-d <var>delim</var>] [-n <var>count</var>] [-O <var>origin</var>] [-s <var>count</var>]
+ [-t] [-u <var>fd</var>] [-C <var>callback</var>] [-c <var>quantum</var>] [<var>array</var>]
+</pre></div>
+
+<p>Read lines from the standard input into the indexed array variable <var>array</var>,
+or from file descriptor <var>fd</var>
+if the <samp>-u</samp> option is supplied.
+</p>
+<p>A synonym for <code>mapfile</code>.
+</p>
+</dd>
+<dt><code>source</code></dt>
+<dd><a name="index-source"></a>
+<div class="example">
+<pre class="example">source <var>filename</var>
+</pre></div>
+
+<p>A synonym for <code>.</code> (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+</p>
+</dd>
+<dt><code>type</code></dt>
+<dd><a name="index-type"></a>
+<div class="example">
+<pre class="example">type [-afptP] [<var>name</var> &hellip;]
+</pre></div>
+
+<p>For each <var>name</var>, indicate how it would be interpreted if used as a
+command name.
+</p>
+<p>If the <samp>-t</samp> option is used, <code>type</code> prints a single word
+which is one of &lsquo;<samp>alias</samp>&rsquo;, &lsquo;<samp>function</samp>&rsquo;, &lsquo;<samp>builtin</samp>&rsquo;,
+&lsquo;<samp>file</samp>&rsquo; or &lsquo;<samp>keyword</samp>&rsquo;,
+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 &lsquo;<samp>file</samp>&rsquo;.
+</p>
+<p>The <samp>-P</samp> option forces a path search for each <var>name</var>, even if
+<samp>-t</samp> would not return &lsquo;<samp>file</samp>&rsquo;.
+</p>
+<p>If a command is hashed, <samp>-p</samp> and <samp>-P</samp> print the hashed value,
+which is 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 all of the <var>names</var> are found, non-zero
+if any are not found.
+</p>
+</dd>
+<dt><code>typeset</code></dt>
+<dd><a name="index-typeset"></a>
+<div class="example">
+<pre class="example">typeset [-afFgrxilnrtux] [-p] [<var>name</var>[=<var>value</var>] &hellip;]
+</pre></div>
+
+<p>The <code>typeset</code> command is supplied for compatibility with the Korn
+shell.
+It is a synonym for the <code>declare</code> builtin command.
+</p>
+</dd>
+<dt><code>ulimit</code></dt>
+<dd><a name="index-ulimit"></a>
+<div class="example">
+<pre class="example">ulimit [-HSabcdefiklmnpqrstuvxPT] [<var>limit</var>]
+</pre></div>
+
+<p><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:
+</p>
+<dl compact="compact">
+<dt><code>-S</code></dt>
+<dd><p>Change and report the soft limit associated with a resource.
+</p>
+</dd>
+<dt><code>-H</code></dt>
+<dd><p>Change and report the hard limit associated with a resource.
+</p>
+</dd>
+<dt><code>-a</code></dt>
+<dd><p>All current limits are reported.
+</p>
+</dd>
+<dt><code>-b</code></dt>
+<dd><p>The maximum socket buffer size.
+</p>
+</dd>
+<dt><code>-c</code></dt>
+<dd><p>The maximum size of core files created.
+</p>
+</dd>
+<dt><code>-d</code></dt>
+<dd><p>The maximum size of a process&rsquo;s data segment.
+</p>
+</dd>
+<dt><code>-e</code></dt>
+<dd><p>The maximum scheduling priority (&quot;nice&quot;).
+</p>
+</dd>
+<dt><code>-f</code></dt>
+<dd><p>The maximum size of files written by the shell and its children.
+</p>
+</dd>
+<dt><code>-i</code></dt>
+<dd><p>The maximum number of pending signals.
+</p>
+</dd>
+<dt><code>-k</code></dt>
+<dd><p>The maximum number of kqueues that may be allocated.
+</p>
+</dd>
+<dt><code>-l</code></dt>
+<dd><p>The maximum size that may be locked into memory.
+</p>
+</dd>
+<dt><code>-m</code></dt>
+<dd><p>The maximum resident set size (many systems do not honor this limit).
+</p>
+</dd>
+<dt><code>-n</code></dt>
+<dd><p>The maximum number of open file descriptors (most systems do not
+allow this value to be set).
+</p>
+</dd>
+<dt><code>-p</code></dt>
+<dd><p>The pipe buffer size.
+</p>
+</dd>
+<dt><code>-q</code></dt>
+<dd><p>The maximum number of bytes in POSIX message queues.
+</p>
+</dd>
+<dt><code>-r</code></dt>
+<dd><p>The maximum real-time scheduling priority.
+</p>
+</dd>
+<dt><code>-s</code></dt>
+<dd><p>The maximum stack size.
+</p>
+</dd>
+<dt><code>-t</code></dt>
+<dd><p>The maximum amount of cpu time in seconds.
+</p>
+</dd>
+<dt><code>-u</code></dt>
+<dd><p>The maximum number of processes available to a single user.
+</p>
+</dd>
+<dt><code>-v</code></dt>
+<dd><p>The maximum amount of virtual memory available to the shell, and, on
+some systems, to its children.
+</p>
+</dd>
+<dt><code>-x</code></dt>
+<dd><p>The maximum number of file locks.
+</p>
+</dd>
+<dt><code>-P</code></dt>
+<dd><p>The maximum number of pseudoterminals.
+</p>
+</dd>
+<dt><code>-T</code></dt>
+<dd><p>The maximum number of threads.
+</p></dd>
+</dl>
+
+<p>If <var>limit</var> is given, and the <samp>-a</samp> option is not used,
+<var>limit</var> 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.
+A hard limit cannot be increased by a non-root user once it is set;
+a soft limit may be increased up to the value of the hard limit.
+Otherwise, the current value of the soft limit for the specified resource
+is printed, unless the <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;
+<samp>-P</samp>,
+<samp>-T</samp>,
+<samp>-b</samp>,
+<samp>-k</samp>,
+<samp>-n</samp> and <samp>-u</samp>, which are unscaled values;
+and, when in <small>POSIX</small> Mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>),
+<samp>-c</samp> and <samp>-f</samp>, which are in 512-byte increments.
+</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>
+</dd>
+<dt><code>unalias</code></dt>
+<dd><a name="index-unalias"></a>
+<div class="example">
+<pre class="example">unalias [-a] [<var>name</var> &hellip; ]
+</pre></div>
+
+<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="#Aliases">Aliases</a>.
+</p></dd>
+</dl>
+
+<hr>
+<a name="Modifying-Shell-Behavior"></a>
+<div class="header">
+<p>
+Next: <a href="#Special-Builtins" accesskey="n" rel="next">Special Builtins</a>, Previous: <a href="#Bash-Builtins" accesskey="p" rel="prev">Bash Builtins</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Modifying-Shell-Behavior-1"></a>
+<h3 class="section">4.3 Modifying Shell Behavior</h3>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#The-Set-Builtin" accesskey="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">&bull; <a href="#The-Shopt-Builtin" accesskey="2">The Shopt Builtin</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Modify shell optional behavior.
+</td></tr>
+</table>
+
+<hr>
+<a name="The-Set-Builtin"></a>
+<div class="header">
+<p>
+Next: <a href="#The-Shopt-Builtin" accesskey="n" rel="next">The Shopt Builtin</a>, Up: <a href="#Modifying-Shell-Behavior" accesskey="u" rel="up">Modifying Shell Behavior</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="The-Set-Builtin-1"></a>
+<h4 class="subsection">4.3.1 The Set Builtin</h4>
+
+<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>
+<dl compact="compact">
+<dt><code>set</code></dt>
+<dd><a name="index-set"></a>
+<div class="example">
+<pre class="example">set [--abefhkmnptuvxBCEHPT] [-o <var>option-name</var>] [<var>argument</var> &hellip;]
+set [+abefhkmnptuvxBCEHPT] [+o <var>option-name</var>] [<var>argument</var> &hellip;]
+</pre></div>
+
+<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 <small>POSIX</small> 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>
+<dl compact="compact">
+<dt><code>-a</code></dt>
+<dd><p>Each variable or function that is created or modified is given the
+export attribute and marked for export to the environment of
+subsequent commands.
+</p>
+</dd>
+<dt><code>-b</code></dt>
+<dd><p>Cause the status of terminated background jobs to be reported
+immediately, rather than before printing the next primary prompt.
+</p>
+</dd>
+<dt><code>-e</code></dt>
+<dd><p>Exit immediately if
+a pipeline (see <a href="#Pipelines">Pipelines</a>), which may consist of a single simple command
+(see <a href="#Simple-Commands">Simple Commands</a>),
+a list (see <a href="#Lists">Lists</a>),
+or a compound command (see <a href="#Compound-Commands">Compound Commands</a>)
+returns a non-zero status.
+The shell does not exit if 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 any command executed in a <code>&amp;&amp;</code> or <code>||</code> list except
+the command following the final <code>&amp;&amp;</code> or <code>||</code>,
+any command in a pipeline but the last,
+or if the command&rsquo;s return status is being inverted with <code>!</code>.
+If a compound command other than a subshell
+returns a non-zero status because a command failed
+while <samp>-e</samp> was being ignored, the shell does not exit.
+A trap on <code>ERR</code>, if set, is executed before the shell exits.
+</p>
+<p>This option applies to the shell environment and each subshell environment
+separately (see <a href="#Command-Execution-Environment">Command Execution Environment</a>), and may cause
+subshells to exit before executing all the commands in the subshell.
+</p>
+<p>If a compound command or shell function executes in a context where
+<samp>-e</samp> is being ignored,
+none of the commands executed within the compound command or function body
+will be affected by the <samp>-e</samp> setting, even if <samp>-e</samp> is set
+and a command returns a failure status.
+If a compound command or shell function sets <samp>-e</samp> while executing in
+a context where <samp>-e</samp> is ignored, that setting will not have any
+effect until the compound command or the command containing the function
+call completes.
+</p>
+</dd>
+<dt><code>-f</code></dt>
+<dd><p>Disable filename expansion (globbing).
+</p>
+</dd>
+<dt><code>-h</code></dt>
+<dd><p>Locate and remember (hash) commands as they are looked up for execution.
+This option is enabled by default.
+</p>
+</dd>
+<dt><code>-k</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-m</code></dt>
+<dd><p>Job control is enabled (see <a href="#Job-Control">Job Control</a>).
+All processes run in a separate process group.
+When a background job completes, the shell prints a line
+containing its exit status.
+</p>
+</dd>
+<dt><code>-n</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-o <var>option-name</var></code></dt>
+<dd>
+<p>Set the option corresponding to <var>option-name</var>:
+</p>
+<dl compact="compact">
+<dt><code>allexport</code></dt>
+<dd><p>Same as <code>-a</code>.
+</p>
+</dd>
+<dt><code>braceexpand</code></dt>
+<dd><p>Same as <code>-B</code>.
+</p>
+</dd>
+<dt><code>emacs</code></dt>
+<dd><p>Use an <code>emacs</code>-style line editing interface (see <a href="#Command-Line-Editing">Command Line Editing</a>).
+This also affects the editing interface used for <code>read -e</code>.
+</p>
+</dd>
+<dt><code>errexit</code></dt>
+<dd><p>Same as <code>-e</code>.
+</p>
+</dd>
+<dt><code>errtrace</code></dt>
+<dd><p>Same as <code>-E</code>.
+</p>
+</dd>
+<dt><code>functrace</code></dt>
+<dd><p>Same as <code>-T</code>.
+</p>
+</dd>
+<dt><code>hashall</code></dt>
+<dd><p>Same as <code>-h</code>.
+</p>
+</dd>
+<dt><code>histexpand</code></dt>
+<dd><p>Same as <code>-H</code>.
+</p>
+</dd>
+<dt><code>history</code></dt>
+<dd><p>Enable command history, as described in <a href="#Bash-History-Facilities">Bash History Facilities</a>.
+This option is on by default in interactive shells.
+</p>
+</dd>
+<dt><code>ignoreeof</code></dt>
+<dd><p>An interactive shell will not exit upon reading EOF.
+</p>
+</dd>
+<dt><code>keyword</code></dt>
+<dd><p>Same as <code>-k</code>.
+</p>
+</dd>
+<dt><code>monitor</code></dt>
+<dd><p>Same as <code>-m</code>.
+</p>
+</dd>
+<dt><code>noclobber</code></dt>
+<dd><p>Same as <code>-C</code>.
+</p>
+</dd>
+<dt><code>noexec</code></dt>
+<dd><p>Same as <code>-n</code>.
+</p>
+</dd>
+<dt><code>noglob</code></dt>
+<dd><p>Same as <code>-f</code>.
+</p>
+</dd>
+<dt><code>nolog</code></dt>
+<dd><p>Currently ignored.
+</p>
+</dd>
+<dt><code>notify</code></dt>
+<dd><p>Same as <code>-b</code>.
+</p>
+</dd>
+<dt><code>nounset</code></dt>
+<dd><p>Same as <code>-u</code>.
+</p>
+</dd>
+<dt><code>onecmd</code></dt>
+<dd><p>Same as <code>-t</code>.
+</p>
+</dd>
+<dt><code>physical</code></dt>
+<dd><p>Same as <code>-P</code>.
+</p>
+</dd>
+<dt><code>pipefail</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>posix</code></dt>
+<dd><p>Change the behavior of Bash where the default operation differs
+from the <small>POSIX</small> standard to match the standard
+(see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
+This is intended to make Bash behave as a strict superset of that
+standard.
+</p>
+</dd>
+<dt><code>privileged</code></dt>
+<dd><p>Same as <code>-p</code>.
+</p>
+</dd>
+<dt><code>verbose</code></dt>
+<dd><p>Same as <code>-v</code>.
+</p>
+</dd>
+<dt><code>vi</code></dt>
+<dd><p>Use a <code>vi</code>-style line editing interface.
+This also affects the editing interface used for <code>read -e</code>.
+</p>
+</dd>
+<dt><code>xtrace</code></dt>
+<dd><p>Same as <code>-x</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt><code>-p</code></dt>
+<dd><p>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>, <code>BASHOPTS</code>, <code>CDPATH</code> and <code>GLOBIGNORE</code>
+variables, if they appear in the environment, are ignored.
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the <samp>-p</samp> option is not supplied, these actions
+are taken and the effective user id is set to the real user id.
+If the <samp>-p</samp> 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>
+</dd>
+<dt><code>-t</code></dt>
+<dd><p>Exit after reading and executing one command.
+</p>
+</dd>
+<dt><code>-u</code></dt>
+<dd><p>Treat unset variables and parameters other than the special parameters
+&lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo; 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>
+</dd>
+<dt><code>-v</code></dt>
+<dd><p>Print shell input lines as they are read.
+</p>
+</dd>
+<dt><code>-x</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-B</code></dt>
+<dd><p>The shell will perform brace expansion (see <a href="#Brace-Expansion">Brace Expansion</a>).
+This option is on by default.
+</p>
+</dd>
+<dt><code>-C</code></dt>
+<dd><p>Prevent output redirection using &lsquo;<samp>&gt;</samp>&rsquo;, &lsquo;<samp>&gt;&amp;</samp>&rsquo;, and &lsquo;<samp>&lt;&gt;</samp>&rsquo;
+from overwriting existing files.
+</p>
+</dd>
+<dt><code>-E</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-H</code></dt>
+<dd><p>Enable &lsquo;<samp>!</samp>&rsquo; style history substitution (see <a href="#History-Interaction">History Interaction</a>).
+This option is on by default for interactive shells.
+</p>
+</dd>
+<dt><code>-P</code></dt>
+<dd><p>If set, do not resolve 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>
+<p>For example, if <samp>/usr/sys</samp> is a symbolic link to <samp>/usr/local/sys</samp>
+then:
+</p><div class="example">
+<pre class="example">$ cd /usr/sys; echo $PWD
+/usr/sys
+$ cd ..; pwd
+/usr
+</pre></div>
+
+<p>If <code>set -P</code> is on, then:
+</p><div class="example">
+<pre class="example">$ cd /usr/sys; echo $PWD
+/usr/local/sys
+$ cd ..; pwd
+/usr/local
+</pre></div>
+
+</dd>
+<dt><code>-T</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>--</code></dt>
+<dd><p>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 &lsquo;<samp>-</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>-</code></dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+<p>Using &lsquo;<samp>+</samp>&rsquo; rather than &lsquo;<samp>-</samp>&rsquo; 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>, &hellip; <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.
+</p></dd>
+</dl>
+
+<hr>
+<a name="The-Shopt-Builtin"></a>
+<div class="header">
+<p>
+Previous: <a href="#The-Set-Builtin" accesskey="p" rel="prev">The Set Builtin</a>, Up: <a href="#Modifying-Shell-Behavior" accesskey="u" rel="up">Modifying Shell Behavior</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="The-Shopt-Builtin-1"></a>
+<h4 class="subsection">4.3.2 The Shopt Builtin</h4>
+
+<p>This builtin allows you to change additional shell optional behavior.
+</p>
+<dl compact="compact">
+<dt><code>shopt</code></dt>
+<dd><a name="index-shopt"></a>
+<div class="example">
+<pre class="example">shopt [-pqsu] [-o] [<var>optname</var> &hellip;]
+</pre></div>
+
+<p>Toggle the values of settings controlling optional shell behavior.
+The settings can be either those listed below, or, if the
+<samp>-o</samp> option is used, those available with the <samp>-o</samp>
+option to the <code>set</code> builtin command (see <a href="#The-Set-Builtin">The Set Builtin</a>).
+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;
+if <var>optnames</var> are supplied, the output is restricted to those options.
+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="compact">
+<dt><code>-s</code></dt>
+<dd><p>Enable (set) each <var>optname</var>.
+</p>
+</dd>
+<dt><code>-u</code></dt>
+<dd><p>Disable (unset) each <var>optname</var>.
+</p>
+</dd>
+<dt><code>-q</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-o</code></dt>
+<dd><p>Restricts the values of
+<var>optname</var> to be those defined for the <samp>-o</samp> option to the
+<code>set</code> builtin (see <a href="#The-Set-Builtin">The Set Builtin</a>).
+</p></dd>
+</dl>
+
+<p>If either <samp>-s</samp> or <samp>-u</samp>
+is used with no <var>optname</var> arguments, <code>shopt</code> shows only
+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:
+</p><dl compact="compact">
+<dt><code>assoc_expand_once</code></dt>
+<dd><p>If set, the shell suppresses multiple evaluation of associative array
+subscripts during arithmetic expression evaluation, while executing
+builtins that can perform variable assignments,
+and while executing builtins that perform array dereferencing.
+</p>
+</dd>
+<dt><code>autocd</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>cdable_vars</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>cdspell</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>checkhash</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>checkjobs</code></dt>
+<dd><p>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 <a href="#Job-Control">Job Control</a>).
+The shell always postpones exiting if any jobs are stopped.
+</p>
+</dd>
+<dt><code>checkwinsize</code></dt>
+<dd><p>If set, Bash checks the window size after each external (non-builtin)
+command and, if necessary, updates the values of
+<code>LINES</code> and <code>COLUMNS</code>.
+This option is enabled by default.
+</p>
+</dd>
+<dt><code>cmdhist</code></dt>
+<dd><p>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.
+This option is enabled by default, but only has an effect if command
+history is enabled (see <a href="#Bash-History-Facilities">Bash History Facilities</a>).
+</p>
+</dd>
+<dt><code>compat31</code></dt>
+<dd><p>If set, Bash
+changes its behavior to that of version 3.1 with respect to quoted
+arguments to the conditional command&rsquo;s &lsquo;<samp>=~</samp>&rsquo; operator
+and with respect to locale-specific
+string comparison when using the <code>[[</code>
+conditional command&rsquo;s &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators.
+Bash versions prior to bash-4.1 use ASCII collation and strcmp(3);
+bash-4.1 and later use the current locale&rsquo;s collation sequence and strcoll(3).
+</p>
+</dd>
+<dt><code>compat32</code></dt>
+<dd><p>If set, Bash
+changes its behavior to that of version 3.2 with respect to locale-specific
+string comparison when using the <code>[[</code>
+conditional command&rsquo;s &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators (see previous item)
+and the effect of interrupting a command list.
+Bash versions 3.2 and earlier continue with the next command in the list
+after one terminates due to an interrupt.
+</p>
+</dd>
+<dt><code>compat40</code></dt>
+<dd><p>If set, Bash
+changes its behavior to that of version 4.0 with respect to locale-specific
+string comparison when using the <code>[[</code>
+conditional command&rsquo;s &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators (see description
+of <code>compat31</code>)
+and the effect of interrupting a command list.
+Bash versions 4.0 and later interrupt the list as if the shell received the
+interrupt; previous versions continue with the next command in the list.
+</p>
+</dd>
+<dt><code>compat41</code></dt>
+<dd><p>If set, Bash, when in <small>POSIX</small> mode, treats a single quote in a double-quoted
+parameter expansion as a special character. The single quotes must match
+(an even number) and the characters between the single quotes are considered
+quoted. This is the behavior of <small>POSIX</small> mode through version 4.1.
+The default Bash behavior remains as in previous versions.
+</p>
+</dd>
+<dt><code>compat42</code></dt>
+<dd><p>If set, Bash
+does not process the replacement string in the pattern substitution word
+expansion using quote removal.
+</p>
+</dd>
+<dt><code>compat43</code></dt>
+<dd><p>If set, Bash
+does not print a warning message if an attempt is made to use a quoted compound
+array assignment as an argument to <code>declare</code>,
+makes word expansion errors
+non-fatal errors that cause the current command to fail (the default behavior is
+to make them fatal errors that cause the shell to exit),
+and does not reset the
+loop state when a shell function is executed (this allows <code>break</code> or
+<code>continue</code> in a shell function to affect loops in the caller&rsquo;s context).
+</p>
+</dd>
+<dt><code>compat44</code></dt>
+<dd><p>If set, Bash
+saves the positional parameters to BASH_ARGV and BASH_ARGC before they are
+used, regardless of whether or not extended debugging mode is enabled.
+</p>
+</dd>
+<dt><code>complete_fullquote</code></dt>
+<dd><p>If set, Bash
+quotes all shell metacharacters in filenames and directory names when
+performing completion.
+If not set, Bash
+removes metacharacters such as the dollar sign from the set of
+characters that will be quoted in completed filenames
+when these metacharacters appear in shell variable references in words to be
+completed.
+This means that dollar signs in variable names that expand to directories
+will not be quoted;
+however, any dollar signs appearing in filenames will not be quoted, either.
+This is active only when bash is using backslashes to quote completed
+filenames.
+This variable is set by default, which is the default Bash behavior in
+versions through 4.2.
+</p>
+</dd>
+<dt><code>direxpand</code></dt>
+<dd><p>If set, Bash
+replaces directory names with the results of word expansion when performing
+filename completion. This changes the contents of the readline editing
+buffer.
+If not set, Bash attempts to preserve what the user typed.
+</p>
+</dd>
+<dt><code>dirspell</code></dt>
+<dd><p>If set, Bash
+attempts spelling correction on directory names during word completion
+if the directory name initially supplied does not exist.
+</p>
+</dd>
+<dt><code>dotglob</code></dt>
+<dd><p>If set, Bash includes filenames beginning with a &lsquo;.&rsquo; in
+the results of filename expansion.
+The filenames &lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo; must always be matched explicitly,
+even if <code>dotglob</code> is set.
+</p>
+</dd>
+<dt><code>execfail</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>expand_aliases</code></dt>
+<dd><p>If set, aliases are expanded as described below under Aliases,
+<a href="#Aliases">Aliases</a>.
+This option is enabled by default for interactive shells.
+</p>
+</dd>
+<dt><code>extdebug</code></dt>
+<dd><p>If set at shell invocation, arrange to execute the debugger profile
+before the shell starts, identical to the <samp>--debugger</samp> option.
+If set after invocation, behavior intended for use by debuggers is enabled:
+</p>
+<ol>
+<li> The <samp>-F</samp> option to the <code>declare</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>)
+displays the source file name and line number corresponding to each function
+name supplied as an argument.
+
+</li><li> If the command run by the <code>DEBUG</code> trap returns a non-zero value, the
+next command is skipped and not executed.
+
+</li><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), the shell simulates
+a call to <code>return</code>.
+
+</li><li> <code>BASH_ARGC</code> and <code>BASH_ARGV</code> are updated as described in their
+descriptions (see <a href="#Bash-Variables">Bash Variables</a>).
+
+</li><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.
+
+</li><li> Error tracing is enabled: command substitution, shell functions, and
+subshells invoked with <code>( <var>command</var> )</code> inherit the
+<code>ERR</code> trap.
+</li></ol>
+
+</dd>
+<dt><code>extglob</code></dt>
+<dd><p>If set, the extended pattern matching features described above
+(see <a href="#Pattern-Matching">Pattern Matching</a>) are enabled.
+</p>
+</dd>
+<dt><code>extquote</code></dt>
+<dd><p>If set, <code>$'<var>string</var>'</code> and <code>$&quot;<var>string</var>&quot;</code> quoting is
+performed within <code>${<var>parameter</var>}</code> expansions
+enclosed in double quotes. This option is enabled by default.
+</p>
+</dd>
+<dt><code>failglob</code></dt>
+<dd><p>If set, patterns which fail to match filenames during filename expansion
+result in an expansion error.
+</p>
+</dd>
+<dt><code>force_fignore</code></dt>
+<dd><p>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 <a href="#Bash-Variables">Bash Variables</a>, for a description of <code>FIGNORE</code>.
+This option is enabled by default.
+</p>
+</dd>
+<dt><code>globasciiranges</code></dt>
+<dd><p>If set, range expressions used in pattern matching bracket expressions
+(see <a href="#Pattern-Matching">Pattern Matching</a>)
+behave as if in the traditional C locale when performing
+comparisons. That is, the current locale&rsquo;s collating sequence
+is not taken into account, so
+&lsquo;<samp>b</samp>&rsquo; will not collate between &lsquo;<samp>A</samp>&rsquo; and &lsquo;<samp>B</samp>&rsquo;,
+and upper-case and lower-case ASCII characters will collate together.
+</p>
+</dd>
+<dt><code>globstar</code></dt>
+<dd><p>If set, the pattern &lsquo;<samp>**</samp>&rsquo; used in a filename expansion context will
+match all files and zero or more directories and subdirectories.
+If the pattern is followed by a &lsquo;<samp>/</samp>&rsquo;, only directories and
+subdirectories match.
+</p>
+</dd>
+<dt><code>gnu_errfmt</code></dt>
+<dd><p>If set, shell error messages are written in the standard <small>GNU</small> error
+message format.
+</p>
+</dd>
+<dt><code>histappend</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>histreedit</code></dt>
+<dd><p>If set, and Readline
+is being used, a user is given the opportunity to re-edit a
+failed history substitution.
+</p>
+</dd>
+<dt><code>histverify</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>hostcomplete</code></dt>
+<dd><p>If set, and Readline is being used, Bash will attempt to perform
+hostname completion when a word containing a &lsquo;<samp>@</samp>&rsquo; is being
+completed (see <a href="#Commands-For-Completion">Commands For Completion</a>). This option is enabled
+by default.
+</p>
+</dd>
+<dt><code>huponexit</code></dt>
+<dd><p>If set, Bash will send <code>SIGHUP</code> to all jobs when an interactive
+login shell exits (see <a href="#Signals">Signals</a>).
+</p>
+</dd>
+<dt><code>inherit_errexit</code></dt>
+<dd><p>If set, command substitution inherits the value of the <code>errexit</code> option,
+instead of unsetting it in the subshell environment.
+This option is enabled when <small>POSIX</small> mode is enabled.
+</p>
+</dd>
+<dt><code>interactive_comments</code></dt>
+<dd><p>Allow a word beginning with &lsquo;<samp>#</samp>&rsquo;
+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>
+</dd>
+<dt><code>lastpipe</code></dt>
+<dd><p>If set, and job control is not active, the shell runs the last command of
+a pipeline not executed in the background in the current shell environment.
+</p>
+</dd>
+<dt><code>lithist</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>localvar_inherit</code></dt>
+<dd><p>If set, local variables inherit the value and attributes of a variable of
+the same name that exists at a previous scope before any new value is
+assigned. The <var>nameref</var> attribute is not inherited.
+</p>
+</dd>
+<dt><code>localvar_unset</code></dt>
+<dd><p>If set, calling <code>unset</code> on local variables in previous function scopes
+marks them so subsequent lookups find them unset until that function
+returns. This is identical to the behavior of unsetting local variables
+at the current function scope.
+</p>
+</dd>
+<dt><code>login_shell</code></dt>
+<dd><p>The shell sets this option if it is started as a login shell
+(see <a href="#Invoking-Bash">Invoking Bash</a>).
+The value may not be changed.
+</p>
+</dd>
+<dt><code>mailwarn</code></dt>
+<dd><p>If set, and a file that Bash is checking for mail has been
+accessed since the last time it was checked, the message
+<code>&quot;The mail in <var>mailfile</var> has been read&quot;</code> is displayed.
+</p>
+</dd>
+<dt><code>no_empty_cmd_completion</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>nocaseglob</code></dt>
+<dd><p>If set, Bash matches filenames in a case-insensitive fashion when
+performing filename expansion.
+</p>
+</dd>
+<dt><code>nocasematch</code></dt>
+<dd><p>If set, Bash matches patterns in a case-insensitive fashion when
+performing matching while executing <code>case</code> or <code>[[</code>
+conditional commands,
+when performing pattern substitution word expansions,
+or when filtering possible completions as part of programmable completion.
+</p>
+</dd>
+<dt><code>nullglob</code></dt>
+<dd><p>If set, Bash allows filename patterns which match no
+files to expand to a null string, rather than themselves.
+</p>
+</dd>
+<dt><code>progcomp</code></dt>
+<dd><p>If set, the programmable completion facilities
+(see <a href="#Programmable-Completion">Programmable Completion</a>) are enabled.
+This option is enabled by default.
+</p>
+</dd>
+<dt><code>progcomp_alias</code></dt>
+<dd><p>If set, and programmable completion is enabled, Bash treats a command
+name that doesn&rsquo;t have any completions as a possible alias and attempts
+alias expansion. If it has an alias, Bash attempts programmable
+completion using the command word resulting from the expanded alias.
+</p>
+</dd>
+<dt><code>promptvars</code></dt>
+<dd><p>If set, prompt strings undergo
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal after being expanded
+as described below (see <a href="#Controlling-the-Prompt">Controlling the Prompt</a>).
+This option is enabled by default.
+</p>
+</dd>
+<dt><code>restricted_shell</code></dt>
+<dd><p>The shell sets this option if it is started in restricted mode
+(see <a href="#The-Restricted-Shell">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>
+</dd>
+<dt><code>shift_verbose</code></dt>
+<dd><p>If this is set, the <code>shift</code>
+builtin prints an error message when the shift count exceeds the
+number of positional parameters.
+</p>
+</dd>
+<dt><code>sourcepath</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>xpg_echo</code></dt>
+<dd><p>If set, the <code>echo</code> builtin expands backslash-escape sequences
+by default.
+</p>
+</dd>
+</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></dd>
+</dl>
+
+<hr>
+<a name="Special-Builtins"></a>
+<div class="header">
+<p>
+Previous: <a href="#Modifying-Shell-Behavior" accesskey="p" rel="prev">Modifying Shell Behavior</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Special-Builtins-1"></a>
+<h3 class="section">4.4 Special Builtins</h3>
+<a name="index-special-builtin-1"></a>
+
+<p>For historical reasons, the <small>POSIX</small> standard has classified
+several builtin commands as <em>special</em>.
+When Bash is executing in <small>POSIX</small> mode, the special builtins
+differ from other builtin commands in three respects:
+</p>
+<ol>
+<li> Special builtins are found before shell functions during command lookup.
+
+</li><li> If a special builtin returns an error status, a non-interactive shell exits.
+
+</li><li> Assignment statements preceding the command stay in effect in the shell
+environment after the command completes.
+</li></ol>
+
+<p>When Bash is not executing in <small>POSIX</small> mode, these builtins behave no
+differently than the rest of the Bash builtin commands.
+The Bash <small>POSIX</small> mode is described in <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>.
+</p>
+<p>These are the <small>POSIX</small> special builtins:
+</p><div class="example">
+<pre class="example">break : . continue eval exec exit export readonly return set<!-- /@w -->
+shift trap unset<!-- /@w -->
+</pre></div>
+
+<hr>
+<a name="Shell-Variables"></a>
+<div class="header">
+<p>
+Next: <a href="#Bash-Features" accesskey="n" rel="next">Bash Features</a>, Previous: <a href="#Shell-Builtin-Commands" accesskey="p" rel="prev">Shell Builtin Commands</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Variables-1"></a>
+<h2 class="chapter">5 Shell Variables</h2>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Bourne-Shell-Variables" accesskey="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">&bull; <a href="#Bash-Variables" accesskey="2">Bash Variables</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">List of variables that exist in Bash.
+</td></tr>
+</table>
+
+<p>This chapter describes the shell variables that Bash uses.
+Bash automatically assigns default values to a number of variables.
+</p>
+<hr>
+<a name="Bourne-Shell-Variables"></a>
+<div class="header">
+<p>
+Next: <a href="#Bash-Variables" accesskey="n" rel="next">Bash Variables</a>, Up: <a href="#Shell-Variables" accesskey="u" rel="up">Shell Variables</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bourne-Shell-Variables-1"></a>
+<h3 class="section">5.1 Bourne Shell Variables</h3>
+
+<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>
+<dl compact="compact">
+<dt><code>CDPATH</code>
+<a name="index-CDPATH"></a>
+</dt>
+<dd><p>A colon-separated list of directories used as a search path for
+the <code>cd</code> builtin command.
+</p>
+</dd>
+<dt><code>HOME</code>
+<a name="index-HOME"></a>
+</dt>
+<dd><p>The current user&rsquo;s home directory; the default for the <code>cd</code> builtin
+command.
+The value of this variable is also used by tilde expansion
+(see <a href="#Tilde-Expansion">Tilde Expansion</a>).
+</p>
+</dd>
+<dt><code>IFS</code>
+<a name="index-IFS"></a>
+</dt>
+<dd><p>A list of characters that separate fields; used when the shell splits
+words as part of expansion.
+</p>
+</dd>
+<dt><code>MAIL</code>
+<a name="index-MAIL"></a>
+</dt>
+<dd><p>If this parameter is set to a filename or directory name
+and the <code>MAILPATH</code> variable
+is not set, Bash informs the user of the arrival of mail in
+the specified file or Maildir-format directory.
+</p>
+</dd>
+<dt><code>MAILPATH</code>
+<a name="index-MAILPATH"></a>
+</dt>
+<dd><p>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 filename from the message with
+a &lsquo;<samp>?</samp>&rsquo;.
+When used in the text of the message, <code>$_</code> expands to the name of
+the current mail file.
+</p>
+</dd>
+<dt><code>OPTARG</code>
+<a name="index-OPTARG"></a>
+</dt>
+<dd><p>The value of the last option argument processed by the <code>getopts</code> builtin.
+</p>
+</dd>
+<dt><code>OPTIND</code>
+<a name="index-OPTIND"></a>
+</dt>
+<dd><p>The index of the last option argument processed by the <code>getopts</code> builtin.
+</p>
+</dd>
+<dt><code>PATH</code>
+<a name="index-PATH"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>PS1</code>
+<a name="index-PS1"></a>
+</dt>
+<dd><p>The primary prompt string. The default value is &lsquo;<samp>\s-\v\$ </samp>&rsquo;.
+See <a href="#Controlling-the-Prompt">Controlling the Prompt</a>, for the complete list of escape
+sequences that are expanded before <code>PS1</code> is displayed.
+</p>
+</dd>
+<dt><code>PS2</code>
+<a name="index-PS2"></a>
+</dt>
+<dd><p>The secondary prompt string. The default value is &lsquo;<samp>&gt; </samp>&rsquo;.
+<code>PS2</code> is expanded in the same way as <code>PS1</code> before being
+displayed.
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="Bash-Variables"></a>
+<div class="header">
+<p>
+Previous: <a href="#Bourne-Shell-Variables" accesskey="p" rel="prev">Bourne Shell Variables</a>, Up: <a href="#Shell-Variables" accesskey="u" rel="up">Shell Variables</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-Variables-1"></a>
+<h3 class="section">5.2 Bash Variables</h3>
+
+<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 <a href="#Job-Control-Variables">Job Control Variables</a>).
+</p>
+<dl compact="compact">
+<dt><code>BASH</code>
+<a name="index-BASH"></a>
+</dt>
+<dd><p>The full pathname used to execute the current instance of Bash.
+</p>
+</dd>
+<dt><code>BASHOPTS</code>
+<a name="index-BASHOPTS"></a>
+</dt>
+<dd><p>A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the <samp>-s</samp> option to the
+<code>shopt</code> builtin command (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>).
+The options appearing in <code>BASHOPTS</code> are those reported
+as &lsquo;<samp>on</samp>&rsquo; by &lsquo;<samp>shopt</samp>&rsquo;.
+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>
+</dd>
+<dt><code>BASHPID</code>
+<a name="index-BASHPID"></a>
+</dt>
+<dd><p>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.
+Assignments to <code>BASHPID</code> have no effect.
+If <code>BASHPID</code>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt><code>BASH_ALIASES</code>
+<a name="index-BASH_005fALIASES"></a>
+</dt>
+<dd><p>An associative array variable whose members correspond to the internal
+list of aliases as maintained by the <code>alias</code> builtin.
+(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+Elements added to this array appear in the alias list; however,
+unsetting array elements currently does not cause aliases to be removed
+from the alias list.
+If <code>BASH_ALIASES</code>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt><code>BASH_ARGC</code>
+<a name="index-BASH_005fARGC"></a>
+</dt>
+<dd><p>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="#The-Shopt-Builtin">The Shopt Builtin</a>
+for a description of the <code>extdebug</code> option to the <code>shopt</code>
+builtin).
+Setting <code>extdebug</code> after the shell has started to execute a script,
+or referencing this variable when <code>extdebug</code> is not set,
+may result in inconsistent values.
+</p>
+</dd>
+<dt><code>BASH_ARGV</code>
+<a name="index-BASH_005fARGV"></a>
+</dt>
+<dd><p>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="#The-Shopt-Builtin">The Shopt Builtin</a>
+for a description of the <code>extdebug</code> option to the <code>shopt</code>
+builtin).
+Setting <code>extdebug</code> after the shell has started to execute a script,
+or referencing this variable when <code>extdebug</code> is not set,
+may result in inconsistent values.
+</p>
+</dd>
+<dt><code>BASH_ARGV0</code>
+<a name="index-BASH_005fARGV0"></a>
+</dt>
+<dd><p>When referenced, this variable expands to the name of the shell or shell
+script (identical to <code>$0</code>; See <a href="#Special-Parameters">Special Parameters</a>,
+for the description of special parameter 0).
+Assignment to <code>BASH_ARGV0</code>
+causes the value assigned to also be assigned to <code>$0</code>.
+If <code>BASH_ARGV0</code>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt><code>BASH_CMDS</code>
+<a name="index-BASH_005fCMDS"></a>
+</dt>
+<dd><p>An associative array variable whose members correspond to the internal
+hash table of commands as maintained by the <code>hash</code> builtin
+(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+Elements added to this array appear in the hash table; however,
+unsetting array elements currently does not cause command names to be removed
+from the hash table.
+If <code>BASH_CMDS</code>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt><code>BASH_COMMAND</code>
+<a name="index-BASH_005fCOMMAND"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>BASH_COMPAT</code>
+<a name="index-BASH_005fCOMPAT"></a>
+</dt>
+<dd><p>The value is used to set the shell&rsquo;s compatibility level.
+See <a href="#The-Shopt-Builtin">The Shopt Builtin</a>, for a description of the various compatibility
+levels and their effects.
+The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
+corresponding to the desired compatibility level.
+If <code>BASH_COMPAT</code> is unset or set to the empty string, the compatibility
+level is set to the default for the current version.
+If <code>BASH_COMPAT</code> is set to a value that is not one of the valid
+compatibility levels, the shell prints an error message and sets the
+compatibility level to the default for the current version.
+The valid compatibility levels correspond to the compatibility options
+accepted by the <code>shopt</code> builtin described above (for example,
+<var>compat42</var> means that 4.2 and 42 are valid values).
+The current version is also a valid value.
+</p>
+</dd>
+<dt><code>BASH_ENV</code>
+<a name="index-BASH_005fENV"></a>
+</dt>
+<dd><p>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 <a href="#Bash-Startup-Files">Bash Startup Files</a>.
+</p>
+</dd>
+<dt><code>BASH_EXECUTION_STRING</code>
+<a name="index-BASH_005fEXECUTION_005fSTRING"></a>
+</dt>
+<dd><p>The command argument to the <samp>-c</samp> invocation option.
+</p>
+</dd>
+<dt><code>BASH_LINENO</code>
+<a name="index-BASH_005fLINENO"></a>
+</dt>
+<dd><p>An array variable whose members are the line numbers in source files
+where each corresponding member of <var>FUNCNAME</var> was invoked.
+<code>${BASH_LINENO[$i]}</code> is the line number in the source file
+(<code>${BASH_SOURCE[$i+1]}</code>) where
+<code>${FUNCNAME[$i]}</code> was called (or <code>${BASH_LINENO[$i-1]}</code> if
+referenced within another shell function).
+Use <code>LINENO</code> to obtain the current line number.
+</p>
+</dd>
+<dt><code>BASH_LOADABLES_PATH</code>
+<a name="index-BASH_005fLOADABLES_005fPATH"></a>
+</dt>
+<dd><p>A colon-separated list of directories in which the shell looks for
+dynamically loadable builtins specified by the
+<code>enable</code> command.
+</p>
+</dd>
+<dt><code>BASH_REMATCH</code>
+<a name="index-BASH_005fREMATCH"></a>
+</dt>
+<dd><p>An array variable whose members are assigned by the &lsquo;<samp>=~</samp>&rsquo; binary
+operator to the <code>[[</code> conditional command
+(see <a href="#Conditional-Constructs">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>
+</dd>
+<dt><code>BASH_SOURCE</code>
+<a name="index-BASH_005fSOURCE"></a>
+</dt>
+<dd><p>An array variable whose members are the source filenames where the
+corresponding shell function names in the <code>FUNCNAME</code> array
+variable are defined.
+The shell function <code>${FUNCNAME[$i]}</code> is defined in the file
+<code>${BASH_SOURCE[$i]}</code> and called from <code>${BASH_SOURCE[$i+1]}</code>
+</p>
+</dd>
+<dt><code>BASH_SUBSHELL</code>
+<a name="index-BASH_005fSUBSHELL"></a>
+</dt>
+<dd><p>Incremented by one within each subshell or subshell environment when
+the shell begins executing in that environment.
+The initial value is 0.
+</p>
+</dd>
+<dt><code>BASH_VERSINFO</code>
+<a name="index-BASH_005fVERSINFO"></a>
+</dt>
+<dd><p>A readonly array variable (see <a href="#Arrays">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="compact">
+<dt><code>BASH_VERSINFO[0]</code></dt>
+<dd><p>The major version number (the <var>release</var>).
+</p>
+</dd>
+<dt><code>BASH_VERSINFO[1]</code></dt>
+<dd><p>The minor version number (the <var>version</var>).
+</p>
+</dd>
+<dt><code>BASH_VERSINFO[2]</code></dt>
+<dd><p>The patch level.
+</p>
+</dd>
+<dt><code>BASH_VERSINFO[3]</code></dt>
+<dd><p>The build version.
+</p>
+</dd>
+<dt><code>BASH_VERSINFO[4]</code></dt>
+<dd><p>The release status (e.g., <var>beta1</var>).
+</p>
+</dd>
+<dt><code>BASH_VERSINFO[5]</code></dt>
+<dd><p>The value of <code>MACHTYPE</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt><code>BASH_VERSION</code>
+<a name="index-BASH_005fVERSION"></a>
+</dt>
+<dd><p>The version number of the current instance of Bash.
+</p>
+</dd>
+<dt><code>BASH_XTRACEFD</code>
+<a name="index-BASH_005fXTRACEFD"></a>
+</dt>
+<dd><p>If set to an integer corresponding to a valid file descriptor, Bash
+will write the trace output generated when &lsquo;<samp>set -x</samp>&rsquo;
+is enabled to that file descriptor.
+This allows tracing output to be separated from diagnostic and error
+messages.
+The file descriptor is closed when <code>BASH_XTRACEFD</code> is unset or assigned
+a new value.
+Unsetting <code>BASH_XTRACEFD</code> or assigning it the empty string causes the
+trace output to be sent to the standard error.
+Note that setting <code>BASH_XTRACEFD</code> to 2 (the standard error file
+descriptor) and then unsetting it will result in the standard error
+being closed.
+</p>
+</dd>
+<dt><code>CHILD_MAX</code>
+<a name="index-CHILD_005fMAX"></a>
+</dt>
+<dd><p>Set the number of exited child status values for the shell to remember.
+Bash will not allow this value to be decreased below a <small>POSIX</small>-mandated
+minimum, and there is a maximum value (currently 8192) that this may
+not exceed.
+The minimum value is system-dependent.
+</p>
+</dd>
+<dt><code>COLUMNS</code>
+<a name="index-COLUMNS"></a>
+</dt>
+<dd><p>Used by the <code>select</code> command to determine the terminal width
+when printing selection lists.
+Automatically set if the <code>checkwinsize</code> option is enabled
+(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), or in an interactive shell upon receipt of a
+<code>SIGWINCH</code>.
+</p>
+</dd>
+<dt><code>COMP_CWORD</code>
+<a name="index-COMP_005fCWORD"></a>
+</dt>
+<dd><p>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 <a href="#Programmable-Completion">Programmable Completion</a>).
+</p>
+</dd>
+<dt><code>COMP_LINE</code>
+<a name="index-COMP_005fLINE"></a>
+</dt>
+<dd><p>The current command line.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
+</p>
+</dd>
+<dt><code>COMP_POINT</code>
+<a name="index-COMP_005fPOINT"></a>
+</dt>
+<dd><p>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 <a href="#Programmable-Completion">Programmable Completion</a>).
+</p>
+</dd>
+<dt><code>COMP_TYPE</code>
+<a name="index-COMP_005fTYPE"></a>
+</dt>
+<dd><p>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,
+&lsquo;<samp>?</samp>&rsquo;, for listing completions after successive tabs,
+&lsquo;<samp>!</samp>&rsquo;, for listing alternatives on partial word completion,
+&lsquo;<samp>@</samp>&rsquo;, to list completions if the word is not unmodified,
+or
+&lsquo;<samp>%</samp>&rsquo;, for menu completion.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
+</p>
+</dd>
+<dt><code>COMP_KEY</code>
+<a name="index-COMP_005fKEY"></a>
+</dt>
+<dd><p>The key (or final key of a key sequence) used to invoke the current
+completion function.
+</p>
+</dd>
+<dt><code>COMP_WORDBREAKS</code>
+<a name="index-COMP_005fWORDBREAKS"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>COMP_WORDS</code>
+<a name="index-COMP_005fWORDS"></a>
+</dt>
+<dd><p>An array variable consisting of the individual
+words in the current command line.
+The line is split into words as Readline would split it, using
+<code>COMP_WORDBREAKS</code> as described above.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
+</p>
+</dd>
+<dt><code>COMPREPLY</code>
+<a name="index-COMPREPLY"></a>
+</dt>
+<dd><p>An array variable from which Bash reads the possible completions
+generated by a shell function invoked by the programmable completion
+facility (see <a href="#Programmable-Completion">Programmable Completion</a>).
+Each array element contains one possible completion.
+</p>
+</dd>
+<dt><code>COPROC</code>
+<a name="index-COPROC"></a>
+</dt>
+<dd><p>An array variable created to hold the file descriptors
+for output from and input to an unnamed coprocess (see <a href="#Coprocesses">Coprocesses</a>).
+</p>
+</dd>
+<dt><code>DIRSTACK</code>
+<a name="index-DIRSTACK"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>EMACS</code>
+<a name="index-EMACS"></a>
+</dt>
+<dd><p>If Bash finds this variable in the environment when the shell
+starts with value &lsquo;<samp>t</samp>&rsquo;, it assumes that the shell is running in an
+Emacs shell buffer and disables line editing.
+</p>
+</dd>
+<dt><code>ENV</code>
+<a name="index-ENV"></a>
+</dt>
+<dd><p>Similar to <code>BASH_ENV</code>; used when the shell is invoked in
+<small>POSIX</small> Mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
+</p>
+</dd>
+<dt><code>EPOCHREALTIME</code>
+<a name="index-EPOCHREALTIME"></a>
+</dt>
+<dd><p>Each time this parameter is referenced, it expands to the number of seconds
+since the Unix Epoch as a floating point value with micro-second granularity
+(see the documentation for the C library function <var>time</var> for the
+definition of Epoch).
+Assignments to <code>EPOCHREALTIME</code> are ignored.
+If <code>EPOCHREALTIME</code> is unset, it loses its special properties, even if
+it is subsequently reset.
+</p>
+</dd>
+<dt><code>EPOCHSECONDS</code>
+<a name="index-EPOCHSECONDS"></a>
+</dt>
+<dd><p>Each time this parameter is referenced, it expands to the number of seconds
+since the Unix Epoch (see the documentation for the C library function
+<var>time</var> for the definition of Epoch).
+Assignments to <code>EPOCHSECONDS</code> are ignored.
+If <code>EPOCHSECONDS</code> is unset, it loses its special properties, even if
+it is subsequently reset.
+</p>
+</dd>
+<dt><code>EUID</code>
+<a name="index-EUID"></a>
+</dt>
+<dd><p>The numeric effective user id of the current user. This variable
+is readonly.
+</p>
+</dd>
+<dt><code>EXECIGNORE</code>
+<a name="index-EXECIGNORE"></a>
+</dt>
+<dd><p>A colon-separated list of shell patterns (see <a href="#Pattern-Matching">Pattern Matching</a>)
+defining the list of filenames to be ignored by command search using
+<code>PATH</code>.
+Files whose full pathnames match one of these patterns are not considered
+executable files for the purposes of completion and command execution
+via <code>PATH</code> lookup.
+This does not affect the behavior of the <code>[</code>, <code>test</code>, and <code>[[</code>
+commands.
+Full pathnames in the command hash table are not subject to <code>EXECIGNORE</code>.
+Use this variable to ignore shared library files that have the executable
+bit set, but are not executable files.
+The pattern matching honors the setting of the <code>extglob</code> shell
+option.
+</p>
+</dd>
+<dt><code>FCEDIT</code>
+<a name="index-FCEDIT"></a>
+</dt>
+<dd><p>The editor used as a default by the <samp>-e</samp> option to the <code>fc</code>
+builtin command.
+</p>
+</dd>
+<dt><code>FIGNORE</code>
+<a name="index-FIGNORE"></a>
+</dt>
+<dd><p>A colon-separated list of suffixes to ignore when performing
+filename completion.
+A filename whose suffix matches one of the entries in
+<code>FIGNORE</code>
+is excluded from the list of matched filenames. A sample
+value is &lsquo;<samp>.o:~</samp>&rsquo;
+</p>
+</dd>
+<dt><code>FUNCNAME</code>
+<a name="index-FUNCNAME"></a>
+</dt>
+<dd><p>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 (the one with the highest index)
+is <code>&quot;main&quot;</code>.
+This variable exists only when a shell function is executing.
+Assignments to <code>FUNCNAME</code> have no effect.
+If <code>FUNCNAME</code> is unset, it loses its special properties, even if
+it is subsequently reset.
+</p>
+<p>This variable can be used with <code>BASH_LINENO</code> and <code>BASH_SOURCE</code>.
+Each element of <code>FUNCNAME</code> has corresponding elements in
+<code>BASH_LINENO</code> and <code>BASH_SOURCE</code> to describe the call stack.
+For instance, <code>${FUNCNAME[$i]}</code> was called from the file
+<code>${BASH_SOURCE[$i+1]}</code> at line number <code>${BASH_LINENO[$i]}</code>.
+The <code>caller</code> builtin displays the current call stack using this
+information.
+</p>
+</dd>
+<dt><code>FUNCNEST</code>
+<a name="index-FUNCNEST"></a>
+</dt>
+<dd><p>If set to a numeric value greater than 0, defines a maximum function
+nesting level. Function invocations that exceed this nesting level
+will cause the current command to abort.
+</p>
+</dd>
+<dt><code>GLOBIGNORE</code>
+<a name="index-GLOBIGNORE"></a>
+</dt>
+<dd><p>A colon-separated list of patterns defining the set of file names to
+be ignored by filename expansion.
+If a file name matched by a filename expansion pattern also matches one
+of the patterns in <code>GLOBIGNORE</code>, it is removed from the list
+of matches.
+The pattern matching honors the setting of the <code>extglob</code> shell
+option.
+</p>
+</dd>
+<dt><code>GROUPS</code>
+<a name="index-GROUPS"></a>
+</dt>
+<dd><p>An array variable containing the list of groups of which the current
+user is a member.
+Assignments to <code>GROUPS</code> have no effect.
+If <code>GROUPS</code> is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt><code>histchars</code>
+<a name="index-histchars"></a>
+</dt>
+<dd><p>Up to three characters which control history expansion, quick
+substitution, and tokenization (see <a href="#History-Interaction">History Interaction</a>).
+The first character is the
+<var>history expansion</var> character, that is, the character which signifies the
+start of a history expansion, normally &lsquo;<samp>!</samp>&rsquo;. The second character is the
+character which signifies &lsquo;quick substitution&rsquo; when seen as the first
+character on a line, normally &lsquo;<samp>^</samp>&rsquo;. 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 &lsquo;<samp>#</samp>&rsquo;. 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>
+</dd>
+<dt><code>HISTCMD</code>
+<a name="index-HISTCMD"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>HISTCONTROL</code>
+<a name="index-HISTCONTROL"></a>
+</dt>
+<dd><p>A colon-separated list of values controlling how commands are saved on
+the history list.
+If the list of values includes &lsquo;<samp>ignorespace</samp>&rsquo;, lines which begin
+with a space character are not saved in the history list.
+A value of &lsquo;<samp>ignoredups</samp>&rsquo; causes lines which match the previous
+history entry to not be saved.
+A value of &lsquo;<samp>ignoreboth</samp>&rsquo; is shorthand for
+&lsquo;<samp>ignorespace</samp>&rsquo; and &lsquo;<samp>ignoredups</samp>&rsquo;.
+A value of &lsquo;<samp>erasedups</samp>&rsquo; 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>
+</dd>
+<dt><code>HISTFILE</code>
+<a name="index-HISTFILE"></a>
+</dt>
+<dd><p>The name of the file to which the command history is saved. The
+default value is <samp>~/.bash_history</samp>.
+</p>
+</dd>
+<dt><code>HISTFILESIZE</code>
+<a name="index-HISTFILESIZE"></a>
+</dt>
+<dd><p>The maximum number of lines contained in the history file.
+When this variable is assigned a value, the history file is truncated,
+if necessary, to contain no more than that number of lines
+by removing the oldest entries.
+The history file is also truncated to this size after
+writing it when a shell exits.
+If the value is 0, the history file is truncated to zero size.
+Non-numeric values and numeric values less than zero inhibit truncation.
+The shell sets the default value to the value of <code>HISTSIZE</code>
+after reading any startup files.
+</p>
+</dd>
+<dt><code>HISTIGNORE</code>
+<a name="index-HISTIGNORE"></a>
+</dt>
+<dd><p>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 &lsquo;<samp>*</samp>&rsquo; 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, &lsquo;<samp>&amp;</samp>&rsquo; matches the previous history line. &lsquo;<samp>&amp;</samp>&rsquo;
+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>.
+The pattern matching honors the setting of the <code>extglob</code> shell
+option.
+</p>
+<p><code>HISTIGNORE</code> subsumes the function of <code>HISTCONTROL</code>. A
+pattern of &lsquo;<samp>&amp;</samp>&rsquo; is identical to <code>ignoredups</code>, and a
+pattern of &lsquo;<samp>[ ]*</samp>&rsquo; is identical to <code>ignorespace</code>.
+Combining these two patterns, separating them with a colon,
+provides the functionality of <code>ignoreboth</code>.
+</p>
+</dd>
+<dt><code>HISTSIZE</code>
+<a name="index-HISTSIZE"></a>
+</dt>
+<dd><p>The maximum number of commands to remember on the history list.
+If the value is 0, commands are not saved in the history list.
+Numeric values less than zero result in every command being saved
+on the history list (there is no limit).
+The shell sets the default value to 500 after reading any startup files.
+</p>
+</dd>
+<dt><code>HISTTIMEFORMAT</code>
+<a name="index-HISTTIMEFORMAT"></a>
+</dt>
+<dd><p>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.
+This uses the history comment character to distinguish timestamps from
+other history lines.
+</p>
+</dd>
+<dt><code>HOSTFILE</code>
+<a name="index-HOSTFILE"></a>
+</dt>
+<dd><p>Contains the name of a file in the same format as <samp>/etc/hosts</samp> 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, or does not name a readable file,
+Bash attempts to read
+<samp>/etc/hosts</samp> to obtain the list of possible hostname completions.
+When <code>HOSTFILE</code> is unset, the hostname list is cleared.
+</p>
+</dd>
+<dt><code>HOSTNAME</code>
+<a name="index-HOSTNAME"></a>
+</dt>
+<dd><p>The name of the current host.
+</p>
+</dd>
+<dt><code>HOSTTYPE</code>
+<a name="index-HOSTTYPE"></a>
+</dt>
+<dd><p>A string describing the machine Bash is running on.
+</p>
+</dd>
+<dt><code>IGNOREEOF</code>
+<a name="index-IGNOREEOF"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>INPUTRC</code>
+<a name="index-INPUTRC"></a>
+</dt>
+<dd><p>The name of the Readline initialization file, overriding the default
+of <samp>~/.inputrc</samp>.
+</p>
+</dd>
+<dt><code>INSIDE_EMACS</code>
+<a name="index-INSIDE_005fEMACS"></a>
+</dt>
+<dd><p>If Bash finds this variable in the environment when the shell
+starts, it assumes that the shell is running in an Emacs shell buffer
+and may disable line editing depending on the value of <code>TERM</code>.
+</p>
+</dd>
+<dt><code>LANG</code>
+<a name="index-LANG"></a>
+</dt>
+<dd><p>Used to determine the locale category for any category not specifically
+selected with a variable starting with <code>LC_</code>.
+</p>
+</dd>
+<dt><code>LC_ALL</code>
+<a name="index-LC_005fALL"></a>
+</dt>
+<dd><p>This variable overrides the value of <code>LANG</code> and any other
+<code>LC_</code> variable specifying a locale category.
+</p>
+</dd>
+<dt><code>LC_COLLATE</code>
+<a name="index-LC_005fCOLLATE"></a>
+</dt>
+<dd><p>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 <a href="#Filename-Expansion">Filename Expansion</a>).
+</p>
+</dd>
+<dt><code>LC_CTYPE</code>
+<a name="index-LC_005fCTYPE"></a>
+</dt>
+<dd><p>This variable determines the interpretation of characters and the
+behavior of character classes within filename expansion and pattern
+matching (see <a href="#Filename-Expansion">Filename Expansion</a>).
+</p>
+</dd>
+<dt><code>LC_MESSAGES</code>
+<a name="index-LC_005fMESSAGES-1"></a>
+</dt>
+<dd><p>This variable determines the locale used to translate double-quoted
+strings preceded by a &lsquo;<samp>$</samp>&rsquo; (see <a href="#Locale-Translation">Locale Translation</a>).
+</p>
+</dd>
+<dt><code>LC_NUMERIC</code>
+<a name="index-LC_005fNUMERIC"></a>
+</dt>
+<dd><p>This variable determines the locale category used for number formatting.
+</p>
+</dd>
+<dt><code>LC_TIME</code>
+<a name="index-LC_005fTIME"></a>
+</dt>
+<dd><p>This variable determines the locale category used for data and time
+formatting.
+</p>
+</dd>
+<dt><code>LINENO</code>
+<a name="index-LINENO"></a>
+</dt>
+<dd><p>The line number in the script or shell function currently executing.
+</p>
+</dd>
+<dt><code>LINES</code>
+<a name="index-LINES"></a>
+</dt>
+<dd><p>Used by the <code>select</code> command to determine the column length
+for printing selection lists.
+Automatically set if the <code>checkwinsize</code> option is enabled
+(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), or in an interactive shell upon receipt of a
+<code>SIGWINCH</code>.
+</p>
+</dd>
+<dt><code>MACHTYPE</code>
+<a name="index-MACHTYPE"></a>
+</dt>
+<dd><p>A string that fully describes the system type on which Bash
+is executing, in the standard <small>GNU</small> <var>cpu-company-system</var> format.
+</p>
+</dd>
+<dt><code>MAILCHECK</code>
+<a name="index-MAILCHECK"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>MAPFILE</code>
+<a name="index-MAPFILE"></a>
+</dt>
+<dd><p>An array variable created to hold the text read by the
+<code>mapfile</code> builtin when no variable name is supplied.
+</p>
+</dd>
+<dt><code>OLDPWD</code>
+<a name="index-OLDPWD"></a>
+</dt>
+<dd><p>The previous working directory as set by the <code>cd</code> builtin.
+</p>
+</dd>
+<dt><code>OPTERR</code>
+<a name="index-OPTERR"></a>
+</dt>
+<dd><p>If set to the value 1, Bash displays error messages
+generated by the <code>getopts</code> builtin command.
+</p>
+</dd>
+<dt><code>OSTYPE</code>
+<a name="index-OSTYPE"></a>
+</dt>
+<dd><p>A string describing the operating system Bash is running on.
+</p>
+</dd>
+<dt><code>PIPESTATUS</code>
+<a name="index-PIPESTATUS"></a>
+</dt>
+<dd><p>An array variable (see <a href="#Arrays">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>
+</dd>
+<dt><code>POSIXLY_CORRECT</code>
+<a name="index-POSIXLY_005fCORRECT"></a>
+</dt>
+<dd><p>If this variable is in the environment when Bash starts, the shell
+enters <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">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, Bash enables <small>POSIX</small> mode,
+as if the command
+</p><div class="example">
+<pre class="example"><code>set -o posix</code>
+</pre></div>
+<p>had been executed.
+When the shell enters <small>POSIX</small> mode, it sets this variable if it was
+not already set.
+</p>
+</dd>
+<dt><code>PPID</code>
+<a name="index-PPID"></a>
+</dt>
+<dd><p>The process <small>ID</small> of the shell&rsquo;s parent process. This variable
+is readonly.
+</p>
+</dd>
+<dt><code>PROMPT_COMMAND</code>
+<a name="index-PROMPT_005fCOMMAND"></a>
+</dt>
+<dd><p>If set, the value is interpreted as a command to execute
+before the printing of each primary prompt (<code>$PS1</code>).
+</p>
+</dd>
+<dt><code>PROMPT_DIRTRIM</code>
+<a name="index-PROMPT_005fDIRTRIM"></a>
+</dt>
+<dd><p>If set to a number greater than zero, the value is used as the number of
+trailing directory components to retain when expanding the <code>\w</code> and
+<code>\W</code> prompt string escapes (see <a href="#Controlling-the-Prompt">Controlling the Prompt</a>).
+Characters removed are replaced with an ellipsis.
+</p>
+</dd>
+<dt><code>PS0</code>
+<a name="index-PS0"></a>
+</dt>
+<dd><p>The value of this parameter is expanded like <var>PS1</var>
+and displayed by interactive shells after reading a command
+and before the command is executed.
+</p>
+</dd>
+<dt><code>PS3</code>
+<a name="index-PS3"></a>
+</dt>
+<dd><p>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 &lsquo;<samp>#? </samp>&rsquo;
+</p>
+</dd>
+<dt><code>PS4</code>
+<a name="index-PS4"></a>
+</dt>
+<dd><p>The value of this parameter is expanded like <var>PS1</var>
+and the expanded value is the prompt printed before the command line
+is echoed when the <samp>-x</samp> option is set (see <a href="#The-Set-Builtin">The Set Builtin</a>).
+The first character of the expanded value is replicated multiple times,
+as necessary, to indicate multiple levels of indirection.
+The default is &lsquo;<samp>+ </samp>&rsquo;.
+</p>
+</dd>
+<dt><code>PWD</code>
+<a name="index-PWD"></a>
+</dt>
+<dd><p>The current working directory as set by the <code>cd</code> builtin.
+</p>
+</dd>
+<dt><code>RANDOM</code>
+<a name="index-RANDOM"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>READLINE_LINE</code>
+<a name="index-READLINE_005fLINE"></a>
+</dt>
+<dd><p>The contents of the Readline line buffer, for use
+with &lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtins</a>).
+</p>
+</dd>
+<dt><code>READLINE_POINT</code>
+<a name="index-READLINE_005fPOINT"></a>
+</dt>
+<dd><p>The position of the insertion point in the Readline line buffer, for use
+with &lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtins</a>).
+</p>
+</dd>
+<dt><code>REPLY</code>
+<a name="index-REPLY"></a>
+</dt>
+<dd><p>The default variable for the <code>read</code> builtin.
+</p>
+</dd>
+<dt><code>SECONDS</code>
+<a name="index-SECONDS"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>SHELL</code>
+<a name="index-SHELL"></a>
+</dt>
+<dd><p>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&rsquo;s login shell.
+</p>
+</dd>
+<dt><code>SHELLOPTS</code>
+<a name="index-SHELLOPTS"></a>
+</dt>
+<dd><p>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 <a href="#The-Set-Builtin">The Set Builtin</a>).
+The options appearing in <code>SHELLOPTS</code> are those reported
+as &lsquo;<samp>on</samp>&rsquo; by &lsquo;<samp>set -o</samp>&rsquo;.
+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>
+</dd>
+<dt><code>SHLVL</code>
+<a name="index-SHLVL"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>TIMEFORMAT</code>
+<a name="index-TIMEFORMAT"></a>
+</dt>
+<dd><p>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 &lsquo;<samp>%</samp>&rsquo; 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="compact">
+<dt><code>%%</code></dt>
+<dd><p>A literal &lsquo;<samp>%</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>%[<var>p</var>][l]R</code></dt>
+<dd><p>The elapsed time in seconds.
+</p>
+</dd>
+<dt><code>%[<var>p</var>][l]U</code></dt>
+<dd><p>The number of CPU seconds spent in user mode.
+</p>
+</dd>
+<dt><code>%[<var>p</var>][l]S</code></dt>
+<dd><p>The number of CPU seconds spent in system mode.
+</p>
+</dd>
+<dt><code>%P</code></dt>
+<dd><p>The CPU percentage, computed as (%U + %S) / %R.
+</p></dd>
+</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
+</p><div class="example">
+<pre class="example"><code>$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'</code>
+</pre></div>
+<p>If the value is null, no timing information is displayed.
+A trailing newline is added when the format string is displayed.
+</p>
+</dd>
+<dt><code>TMOUT</code>
+<a name="index-TMOUT"></a>
+</dt>
+<dd><p>If set to a value greater than zero, <code>TMOUT</code> is treated as the
+default timeout for the <code>read</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>).
+The <code>select</code> command (see <a href="#Conditional-Constructs">Conditional Constructs</a>) terminates
+if input does not arrive after <code>TMOUT</code> seconds when input is coming
+from a terminal.
+</p>
+<p>In an interactive shell, the value is interpreted as
+the number of seconds to wait for a line of input after issuing
+the primary prompt.
+Bash
+terminates after waiting for that number of seconds if a complete
+line of input does not arrive.
+</p>
+</dd>
+<dt><code>TMPDIR</code>
+<a name="index-TMPDIR"></a>
+</dt>
+<dd><p>If set, Bash uses its value as the name of a directory in which
+Bash creates temporary files for the shell&rsquo;s use.
+</p>
+</dd>
+<dt><code>UID</code>
+<a name="index-UID"></a>
+</dt>
+<dd><p>The numeric real user id of the current user. This variable is readonly.
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="Bash-Features"></a>
+<div class="header">
+<p>
+Next: <a href="#Job-Control" accesskey="n" rel="next">Job Control</a>, Previous: <a href="#Shell-Variables" accesskey="p" rel="prev">Shell Variables</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-Features-2"></a>
+<h2 class="chapter">6 Bash Features</h2>
+
+<p>This chapter describes features unique to Bash.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Invoking-Bash" accesskey="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">&bull; <a href="#Bash-Startup-Files" accesskey="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">&bull; <a href="#Interactive-Shells" accesskey="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">&bull; <a href="#Bash-Conditional-Expressions" accesskey="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">&bull; <a href="#Shell-Arithmetic" accesskey="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">&bull; <a href="#Aliases" accesskey="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">&bull; <a href="#Arrays" accesskey="7">Arrays</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Array Variables.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#The-Directory-Stack" accesskey="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">&bull; <a href="#Controlling-the-Prompt" accesskey="9">Controlling the Prompt</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Customizing the various prompt strings.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#The-Restricted-Shell">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">&bull; <a href="#Bash-POSIX-Mode">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>
+
+<hr>
+<a name="Invoking-Bash"></a>
+<div class="header">
+<p>
+Next: <a href="#Bash-Startup-Files" accesskey="n" rel="next">Bash Startup Files</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Invoking-Bash-1"></a>
+<h3 class="section">6.1 Invoking Bash</h3>
+
+<div class="example">
+<pre class="example">bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o <var>option</var>]
+ [-O <var>shopt_option</var>] [<var>argument</var> &hellip;]
+bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o <var>option</var>]
+ [-O <var>shopt_option</var>] -c <var>string</var> [<var>argument</var> &hellip;]
+bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o <var>option</var>]
+ [-O <var>shopt_option</var>] [<var>argument</var> &hellip;]
+</pre></div>
+
+<p>All of the single-character options used with the <code>set</code> builtin
+(see <a href="#The-Set-Builtin">The Set Builtin</a>) can be used as options when the shell is invoked.
+In addition, 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>
+<dl compact="compact">
+<dt><code>--debugger</code></dt>
+<dd><p>Arrange for the debugger profile to be executed before the shell
+starts. Turns on extended debugging mode (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>
+for a description of the <code>extdebug</code> option to the <code>shopt</code>
+builtin).
+</p>
+</dd>
+<dt><code>--dump-po-strings</code></dt>
+<dd><p>A list of all double-quoted strings preceded by &lsquo;<samp>$</samp>&rsquo;
+is printed on the standard output
+in the <small>GNU</small> <code>gettext</code> PO (portable object) file format.
+Equivalent to <samp>-D</samp> except for the output format.
+</p>
+</dd>
+<dt><code>--dump-strings</code></dt>
+<dd><p>Equivalent to <samp>-D</samp>.
+</p>
+</dd>
+<dt><code>--help</code></dt>
+<dd><p>Display a usage message on standard output and exit successfully.
+</p>
+</dd>
+<dt><code>--init-file <var>filename</var></code></dt>
+<dt><code>--rcfile <var>filename</var></code></dt>
+<dd><p>Execute commands from <var>filename</var> (instead of <samp>~/.bashrc</samp>)
+in an interactive shell.
+</p>
+</dd>
+<dt><code>--login</code></dt>
+<dd><p>Equivalent to <samp>-l</samp>.
+</p>
+</dd>
+<dt><code>--noediting</code></dt>
+<dd><p>Do not use the <small>GNU</small> Readline library (see <a href="#Command-Line-Editing">Command Line Editing</a>)
+to read command lines when the shell is interactive.
+</p>
+</dd>
+<dt><code>--noprofile</code></dt>
+<dd><p>Don&rsquo;t load the system-wide startup file <samp>/etc/profile</samp>
+or any of the personal initialization files
+<samp>~/.bash_profile</samp>, <samp>~/.bash_login</samp>, or <samp>~/.profile</samp>
+when Bash is invoked as a login shell.
+</p>
+</dd>
+<dt><code>--norc</code></dt>
+<dd><p>Don&rsquo;t read the <samp>~/.bashrc</samp> initialization file in an
+interactive shell. This is on by default if the shell is
+invoked as <code>sh</code>.
+</p>
+</dd>
+<dt><code>--posix</code></dt>
+<dd><p>Change the behavior of Bash where the default operation differs
+from the <small>POSIX</small> standard to match the standard. This
+is intended to make Bash behave as a strict superset of that
+standard. See <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>, for a description of the Bash
+<small>POSIX</small> mode.
+</p>
+</dd>
+<dt><code>--restricted</code></dt>
+<dd><p>Make the shell a restricted shell (see <a href="#The-Restricted-Shell">The Restricted Shell</a>).
+</p>
+</dd>
+<dt><code>--verbose</code></dt>
+<dd><p>Equivalent to <samp>-v</samp>. Print shell input lines as they&rsquo;re read.
+</p>
+</dd>
+<dt><code>--version</code></dt>
+<dd><p>Show version information for this instance of
+Bash on the standard output and exit successfully.
+</p></dd>
+</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>
+<dl compact="compact">
+<dt><code>-c</code></dt>
+<dd><p>Read and execute commands from the first non-option argument
+<var>command_string</var>, then exit.
+If there are arguments after the <var>command_string</var>,
+the first argument is assigned to <code>$0</code>
+and any remaining arguments are assigned to the positional parameters.
+The assignment to <code>$0</code> sets the name of the shell, which is used
+in warning and error messages.
+</p>
+</dd>
+<dt><code>-i</code></dt>
+<dd><p>Force the shell to run interactively. Interactive shells are
+described in <a href="#Interactive-Shells">Interactive Shells</a>.
+</p>
+</dd>
+<dt><code>-l</code></dt>
+<dd><p>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 &lsquo;<samp>exec -l bash</samp>&rsquo;.
+When the shell is not interactive, the login shell startup files will
+be executed.
+&lsquo;<samp>exec bash -l</samp>&rsquo; or &lsquo;<samp>exec bash --login</samp>&rsquo;
+will replace the current shell with a Bash login shell.
+See <a href="#Bash-Startup-Files">Bash Startup Files</a>, for a description of the special behavior
+of a login shell.
+</p>
+</dd>
+<dt><code>-r</code></dt>
+<dd><p>Make the shell a restricted shell (see <a href="#The-Restricted-Shell">The Restricted Shell</a>).
+</p>
+</dd>
+<dt><code>-s</code></dt>
+<dd><p>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 or when reading input
+through a pipe.
+</p>
+</dd>
+<dt><code>-D</code></dt>
+<dd><p>A list of all double-quoted strings preceded by &lsquo;<samp>$</samp>&rsquo;
+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 <a href="#Locale-Translation">Locale Translation</a>).
+This implies the <samp>-n</samp> option; no commands will be executed.
+</p>
+</dd>
+<dt><code>[-+]O [<var>shopt_option</var>]</code></dt>
+<dd><p><var>shopt_option</var> is one of the shell options accepted by the
+<code>shopt</code> builtin (see <a href="#The-Shopt-Builtin">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>
+</dd>
+<dt><code>--</code></dt>
+<dd><p>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></dd>
+</dl>
+
+<a name="index-login-shell"></a>
+<p>A <em>login</em> shell is one whose first character of argument zero is
+&lsquo;<samp>-</samp>&rsquo;, or one invoked with the <samp>--login</samp> option.
+</p>
+<a name="index-interactive-shell"></a>
+<p>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 <a href="#Interactive-Shells">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 <a href="#Shell-Scripts">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&rsquo;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>
+<hr>
+<a name="Bash-Startup-Files"></a>
+<div class="header">
+<p>
+Next: <a href="#Interactive-Shells" accesskey="n" rel="next">Interactive Shells</a>, Previous: <a href="#Invoking-Bash" accesskey="p" rel="prev">Invoking Bash</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-Startup-Files-1"></a>
+<h3 class="section">6.2 Bash Startup Files</h3>
+<a name="index-startup-files"></a>
+
+<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 filenames as described above under
+Tilde Expansion (see <a href="#Tilde-Expansion">Tilde Expansion</a>).
+</p>
+<p>Interactive shells are described in <a href="#Interactive-Shells">Interactive Shells</a>.
+</p>
+<a name="Invoked-as-an-interactive-login-shell_002c-or-with-_002d_002dlogin"></a>
+<h4 class="subsubheading">Invoked as an interactive login shell, or with <samp>--login</samp></h4>
+
+<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 <samp>/etc/profile</samp>, if that file exists.
+After reading that file, it looks for <samp>~/.bash_profile</samp>,
+<samp>~/.bash_login</samp>, and <samp>~/.profile</samp>, 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 an interactive login shell exits,
+or a non-interactive login shell executes the <code>exit</code> builtin command,
+Bash reads and executes commands from
+the file <samp>~/.bash_logout</samp>, if it exists.
+</p>
+<a name="Invoked-as-an-interactive-non_002dlogin-shell"></a>
+<h4 class="subsubheading">Invoked as an interactive non-login shell</h4>
+
+<p>When an interactive shell that is not a login shell is started, Bash
+reads and executes commands from <samp>~/.bashrc</samp>, 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 <samp>~/.bashrc</samp>.
+</p>
+<p>So, typically, your <samp>~/.bash_profile</samp> contains the line
+</p><div class="example">
+<pre class="example"><code>if [ -f ~/.bashrc ]; then . ~/.bashrc; fi</code>
+</pre></div>
+<p>after (or before) any login-specific initializations.
+</p>
+<a name="Invoked-non_002dinteractively"></a>
+<h4 class="subsubheading">Invoked non-interactively</h4>
+
+<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:
+</p><div class="example">
+<pre class="example"><code>if [ -n &quot;$BASH_ENV&quot; ]; then . &quot;$BASH_ENV&quot;; fi</code>
+</pre></div>
+<p>but the value of the <code>PATH</code> variable is not used to search for the
+filename.
+</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>
+<a name="Invoked-with-name-sh"></a>
+<h4 class="subsubheading">Invoked with name <code>sh</code></h4>
+
+<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 <small>POSIX</small> 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 <samp>/etc/profile</samp> and <samp>~/.profile</samp>, 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 <small>POSIX</small> mode after
+the startup files are read.
+</p>
+<a name="Invoked-in-POSIX-mode"></a>
+<h4 class="subsubheading">Invoked in <small>POSIX</small> mode</h4>
+
+<p>When Bash is started in <small>POSIX</small> mode, as with the
+<samp>--posix</samp> command line option, it follows the <small>POSIX</small> 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>
+<a name="Invoked-by-remote-shell-daemon"></a>
+<h4 class="subsubheading">Invoked by remote shell daemon</h4>
+
+<p>Bash attempts to determine when it is being run with its standard input
+connected to a network connection, as when executed by the remote shell
+daemon, usually <code>rshd</code>, or the secure shell daemon <code>sshd</code>.
+If Bash determines it is being run in
+this fashion, it reads and executes commands from <samp>~/.bashrc</samp>, 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
+neither <code>rshd</code> nor <code>sshd</code> generally invoke the shell with those
+options or allow them to be specified.
+</p>
+<a name="Invoked-with-unequal-effective-and-real-UID_002fGIDs"></a>
+<h4 class="subsubheading">Invoked with unequal effective and real <small>UID/GID</small>s</h4>
+
+<p>If Bash is started with the effective user (group) id not equal to the
+real user (group) id, and the <samp>-p</samp> option is not supplied, no startup
+files are read, shell functions are not inherited from the environment,
+the <code>SHELLOPTS</code>, <code>BASHOPTS</code>, <code>CDPATH</code>, and <code>GLOBIGNORE</code>
+variables, if they appear in the environment, are ignored, and the effective
+user id is set to the real user id.
+If the <samp>-p</samp> option is supplied at invocation, the startup behavior is
+the same, but the effective user id is not reset.
+</p>
+<hr>
+<a name="Interactive-Shells"></a>
+<div class="header">
+<p>
+Next: <a href="#Bash-Conditional-Expressions" accesskey="n" rel="next">Bash Conditional Expressions</a>, Previous: <a href="#Bash-Startup-Files" accesskey="p" rel="prev">Bash Startup Files</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Interactive-Shells-1"></a>
+<h3 class="section">6.3 Interactive Shells</h3>
+<a name="index-interactive-shell-1"></a>
+<a name="index-shell_002c-interactive"></a>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#What-is-an-Interactive-Shell_003f" accesskey="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">&bull; <a href="#Is-this-Shell-Interactive_003f" accesskey="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">&bull; <a href="#Interactive-Shell-Behavior" accesskey="3">Interactive Shell Behavior</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What changes in a interactive shell?
+</td></tr>
+</table>
+
+<hr>
+<a name="What-is-an-Interactive-Shell_003f"></a>
+<div class="header">
+<p>
+Next: <a href="#Is-this-Shell-Interactive_003f" accesskey="n" rel="next">Is this Shell Interactive?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="What-is-an-Interactive-Shell_003f-1"></a>
+<h4 class="subsection">6.3.1 What is an Interactive Shell?</h4>
+
+<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&rsquo;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>
+<hr>
+<a name="Is-this-Shell-Interactive_003f"></a>
+<div class="header">
+<p>
+Next: <a href="#Interactive-Shell-Behavior" accesskey="n" rel="next">Interactive Shell Behavior</a>, Previous: <a href="#What-is-an-Interactive-Shell_003f" accesskey="p" rel="prev">What is an Interactive Shell?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Is-this-Shell-Interactive_003f-1"></a>
+<h4 class="subsection">6.3.2 Is this Shell Interactive?</h4>
+
+<p>To determine within a startup script whether or not Bash is
+running interactively,
+test the value of the &lsquo;<samp>-</samp>&rsquo; special parameter.
+It contains <code>i</code> when the shell is interactive. For example:
+</p>
+<div class="example">
+<pre class="example">case &quot;$-&quot; in
+*i*) echo This shell is interactive ;;
+*) echo This shell is not interactive ;;
+esac
+</pre></div>
+
+<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>
+<div class="example">
+<pre class="example">if [ -z &quot;$PS1&quot; ]; then
+ echo This shell is not interactive
+else
+ echo This shell is interactive
+fi
+</pre></div>
+
+<hr>
+<a name="Interactive-Shell-Behavior"></a>
+<div class="header">
+<p>
+Previous: <a href="#Is-this-Shell-Interactive_003f" accesskey="p" rel="prev">Is this Shell Interactive?</a>, Up: <a href="#Interactive-Shells" accesskey="u" rel="up">Interactive Shells</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Interactive-Shell-Behavior-1"></a>
+<h4 class="subsection">6.3.3 Interactive Shell Behavior</h4>
+
+<p>When the shell is running interactively, it changes its behavior in
+several ways.
+</p>
+<ol>
+<li> Startup files are read and executed as described in <a href="#Bash-Startup-Files">Bash Startup Files</a>.
+
+</li><li> Job Control (see <a href="#Job-Control">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>.
+
+</li><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.
+Bash expands and displays <code>PS0</code> after it reads a command but before
+executing it.
+See <a href="#Controlling-the-Prompt">Controlling the Prompt</a>, for a complete list of prompt
+string escape sequences.
+
+</li><li> Bash executes the value of the <code>PROMPT_COMMAND</code> variable as a command
+before printing the primary prompt, <code>$PS1</code>
+(see <a href="#Bash-Variables">Bash Variables</a>).
+
+</li><li> Readline (see <a href="#Command-Line-Editing">Command Line Editing</a>) is used to read commands from
+the user&rsquo;s terminal.
+
+</li><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 <a href="#The-Set-Builtin">The Set Builtin</a>).
+
+</li><li> Command history (see <a href="#Bash-History-Facilities">Bash History Facilities</a>)
+and history expansion (see <a href="#History-Interaction">History Interaction</a>)
+are enabled by default.
+Bash will save the command history to the file named by <code>$HISTFILE</code>
+when a shell with history enabled exits.
+
+</li><li> Alias expansion (see <a href="#Aliases">Aliases</a>) is performed by default.
+
+</li><li> In the absence of any traps, Bash ignores <code>SIGTERM</code>
+(see <a href="#Signals">Signals</a>).
+
+</li><li> In the absence of any traps, <code>SIGINT</code> is caught and handled
+(see <a href="#Signals">Signals</a>).
+<code>SIGINT</code> will interrupt some shell builtins.
+
+</li><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 <a href="#Signals">Signals</a>).
+
+</li><li> The <samp>-n</samp> invocation option is ignored, and &lsquo;<samp>set -n</samp>&rsquo; has
+no effect (see <a href="#The-Set-Builtin">The Set Builtin</a>).
+
+</li><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 <a href="#Bash-Variables">Bash Variables</a>).
+
+</li><li> Expansion errors due to references to unbound shell variables after
+&lsquo;<samp>set -u</samp>&rsquo; has been enabled will not cause the shell to exit
+(see <a href="#The-Set-Builtin">The Set Builtin</a>).
+
+</li><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 <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+
+</li><li> Redirection errors encountered by shell builtins will not cause the
+shell to exit.
+
+</li><li> When running in <small>POSIX</small> mode, a special builtin returning an error
+status will not cause the shell to exit (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
+
+</li><li> A failed <code>exec</code> will not cause the shell to exit
+(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+
+</li><li> Parser syntax errors will not cause the shell to exit.
+
+</li><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="#The-Shopt-Builtin">The Shopt Builtin</a>).
+
+</li><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 <a href="#Bash-Variables">Bash Variables</a>).
+
+</li></ol>
+
+<hr>
+<a name="Bash-Conditional-Expressions"></a>
+<div class="header">
+<p>
+Next: <a href="#Shell-Arithmetic" accesskey="n" rel="next">Shell Arithmetic</a>, Previous: <a href="#Interactive-Shells" accesskey="p" rel="prev">Interactive Shells</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-Conditional-Expressions-1"></a>
+<h3 class="section">6.4 Bash Conditional Expressions</h3>
+<a name="index-expressions_002c-conditional"></a>
+
+<p>Conditional expressions are used by the <code>[[</code> compound command
+and the <code>test</code> and <code>[</code> builtin commands. The <code>test</code>
+and <code>[</code> commands determine their behavior based on the number
+of arguments; see the descriptions of those commands for any other
+command-specific actions.
+</p>
+<p>Expressions may be unary or binary,
+and are formed from the following primaries.
+Unary expressions are often used to examine the status of a file.
+There are string operators and numeric comparison operators as well.
+Bash handles several filenames specially when they are used in
+expressions.
+If the operating system on which Bash is running provides these
+special files, Bash will use them; otherwise it will emulate them
+internally with this behavior:
+If the <var>file</var> argument to one of the primaries is of the form
+<samp>/dev/fd/<var>N</var></samp>, then file descriptor <var>N</var> is checked.
+If the <var>file</var> argument to one of the primaries is one of
+<samp>/dev/stdin</samp>, <samp>/dev/stdout</samp>, or <samp>/dev/stderr</samp>, file
+descriptor 0, 1, or 2, respectively, is checked.
+</p>
+<p>When used with <code>[[</code>, the &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators sort
+lexicographically using the current locale.
+The <code>test</code> command uses ASCII ordering.
+</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>
+<dl compact="compact">
+<dt><code>-a <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists.
+</p>
+</dd>
+<dt><code>-b <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is a block special file.
+</p>
+</dd>
+<dt><code>-c <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is a character special file.
+</p>
+</dd>
+<dt><code>-d <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is a directory.
+</p>
+</dd>
+<dt><code>-e <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists.
+</p>
+</dd>
+<dt><code>-f <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is a regular file.
+</p>
+</dd>
+<dt><code>-g <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and its set-group-id bit is set.
+</p>
+</dd>
+<dt><code>-h <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is a symbolic link.
+</p>
+</dd>
+<dt><code>-k <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and its &quot;sticky&quot; bit is set.
+</p>
+</dd>
+<dt><code>-p <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is a named pipe (FIFO).
+</p>
+</dd>
+<dt><code>-r <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is readable.
+</p>
+</dd>
+<dt><code>-s <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and has a size greater than zero.
+</p>
+</dd>
+<dt><code>-t <var>fd</var></code></dt>
+<dd><p>True if file descriptor <var>fd</var> is open and refers to a terminal.
+</p>
+</dd>
+<dt><code>-u <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and its set-user-id bit is set.
+</p>
+</dd>
+<dt><code>-w <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is writable.
+</p>
+</dd>
+<dt><code>-x <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is executable.
+</p>
+</dd>
+<dt><code>-G <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is owned by the effective group id.
+</p>
+</dd>
+<dt><code>-L <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is a symbolic link.
+</p>
+</dd>
+<dt><code>-N <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and has been modified since it was last read.
+</p>
+</dd>
+<dt><code>-O <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is owned by the effective user id.
+</p>
+</dd>
+<dt><code>-S <var>file</var></code></dt>
+<dd><p>True if <var>file</var> exists and is a socket.
+</p>
+</dd>
+<dt><code><var>file1</var> -ef <var>file2</var></code></dt>
+<dd><p>True if <var>file1</var> and <var>file2</var> refer to the same device and
+inode numbers.
+</p>
+</dd>
+<dt><code><var>file1</var> -nt <var>file2</var></code></dt>
+<dd><p>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>
+</dd>
+<dt><code><var>file1</var> -ot <var>file2</var></code></dt>
+<dd><p>True if <var>file1</var> is older than <var>file2</var>,
+or if <var>file2</var> exists and <var>file1</var> does not.
+</p>
+</dd>
+<dt><code>-o <var>optname</var></code></dt>
+<dd><p>True if the 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 <a href="#The-Set-Builtin">The Set Builtin</a>).
+</p>
+</dd>
+<dt><code>-v <var>varname</var></code></dt>
+<dd><p>True if the shell variable <var>varname</var> is set (has been assigned a value).
+</p>
+</dd>
+<dt><code>-R <var>varname</var></code></dt>
+<dd><p>True if the shell variable <var>varname</var> is set and is a name reference.
+</p>
+</dd>
+<dt><code>-z <var>string</var></code></dt>
+<dd><p>True if the length of <var>string</var> is zero.
+</p>
+</dd>
+<dt><code>-n <var>string</var></code></dt>
+<dt><code><var>string</var></code></dt>
+<dd><p>True if the length of <var>string</var> is non-zero.
+</p>
+</dd>
+<dt><code><var>string1</var> == <var>string2</var></code></dt>
+<dt><code><var>string1</var> = <var>string2</var></code></dt>
+<dd><p>True if the strings are equal.
+When used with the <code>[[</code> command, this performs pattern matching as
+described above (see <a href="#Conditional-Constructs">Conditional Constructs</a>).
+</p>
+<p>&lsquo;<samp>=</samp>&rsquo; should be used with the <code>test</code> command for <small>POSIX</small> conformance.
+</p>
+</dd>
+<dt><code><var>string1</var> != <var>string2</var></code></dt>
+<dd><p>True if the strings are not equal.
+</p>
+</dd>
+<dt><code><var>string1</var> &lt; <var>string2</var></code></dt>
+<dd><p>True if <var>string1</var> sorts before <var>string2</var> lexicographically.
+</p>
+</dd>
+<dt><code><var>string1</var> &gt; <var>string2</var></code></dt>
+<dd><p>True if <var>string1</var> sorts after <var>string2</var> lexicographically.
+</p>
+</dd>
+<dt><code><var>arg1</var> OP <var>arg2</var></code></dt>
+<dd><p><code>OP</code> is one of
+&lsquo;<samp>-eq</samp>&rsquo;, &lsquo;<samp>-ne</samp>&rsquo;, &lsquo;<samp>-lt</samp>&rsquo;, &lsquo;<samp>-le</samp>&rsquo;, &lsquo;<samp>-gt</samp>&rsquo;, or &lsquo;<samp>-ge</samp>&rsquo;.
+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.
+When used with the <code>[[</code> command, <var>Arg1</var> and <var>Arg2</var>
+are evaluated as arithmetic expressions (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
+</p></dd>
+</dl>
+
+<hr>
+<a name="Shell-Arithmetic"></a>
+<div class="header">
+<p>
+Next: <a href="#Aliases" accesskey="n" rel="next">Aliases</a>, Previous: <a href="#Bash-Conditional-Expressions" accesskey="p" rel="prev">Bash Conditional Expressions</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Shell-Arithmetic-1"></a>
+<h3 class="section">6.5 Shell Arithmetic</h3>
+<a name="index-arithmetic_002c-shell"></a>
+<a name="index-shell-arithmetic"></a>
+<a name="index-expressions_002c-arithmetic"></a>
+<a name="index-evaluation_002c-arithmetic"></a>
+<a name="index-arithmetic-evaluation"></a>
+
+<p>The shell allows arithmetic expressions to be evaluated, as one of
+the shell expansions or by using the <code>((</code> compound command, the
+<code>let</code> builtin, or the <samp>-i</samp> option to the <code>declare</code> builtin.
+</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>
+<dl compact="compact">
+<dt><code><var>id</var>++ <var>id</var>--</code></dt>
+<dd><p>variable post-increment and post-decrement
+</p>
+</dd>
+<dt><code>++<var>id</var> --<var>id</var></code></dt>
+<dd><p>variable pre-increment and pre-decrement
+</p>
+</dd>
+<dt><code>- +</code></dt>
+<dd><p>unary minus and plus
+</p>
+</dd>
+<dt><code>! ~</code></dt>
+<dd><p>logical and bitwise negation
+</p>
+</dd>
+<dt><code>**</code></dt>
+<dd><p>exponentiation
+</p>
+</dd>
+<dt><code>* / %</code></dt>
+<dd><p>multiplication, division, remainder
+</p>
+</dd>
+<dt><code>+ -</code></dt>
+<dd><p>addition, subtraction
+</p>
+</dd>
+<dt><code>&lt;&lt; &gt;&gt;</code></dt>
+<dd><p>left and right bitwise shifts
+</p>
+</dd>
+<dt><code>&lt;= &gt;= &lt; &gt;</code></dt>
+<dd><p>comparison
+</p>
+</dd>
+<dt><code>== !=</code></dt>
+<dd><p>equality and inequality
+</p>
+</dd>
+<dt><code>&amp;</code></dt>
+<dd><p>bitwise AND
+</p>
+</dd>
+<dt><code>^</code></dt>
+<dd><p>bitwise exclusive OR
+</p>
+</dd>
+<dt><code>|</code></dt>
+<dd><p>bitwise OR
+</p>
+</dd>
+<dt><code>&amp;&amp;</code></dt>
+<dd><p>logical AND
+</p>
+</dd>
+<dt><code>||</code></dt>
+<dd><p>logical OR
+</p>
+</dd>
+<dt><code>expr ? expr : expr</code></dt>
+<dd><p>conditional operator
+</p>
+</dd>
+<dt><code>= *= /= %= += -= &lt;&lt;= &gt;&gt;= &amp;= ^= |=</code></dt>
+<dd><p>assignment
+</p>
+</dd>
+<dt><code>expr1 , expr2</code></dt>
+<dd><p>comma
+</p></dd>
+</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 &lsquo;<samp>declare -i</samp>&rsquo; is assigned a value.
+A null value evaluates to 0.
+A shell variable need not have its <var>integer</var> attribute turned on
+to be used in an expression.
+</p>
+<p>Constants with a leading 0 are interpreted as octal numbers.
+A leading &lsquo;<samp>0x</samp>&rsquo; or &lsquo;<samp>0X</samp>&rsquo; denotes hexadecimal. Otherwise,
+numbers take the form [<var>base</var><code>#</code>]<var>n</var>, where the optional <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.
+When specifying <var>n</var>,
+the digits greater than 9 are represented by the lowercase letters,
+the uppercase letters, &lsquo;<samp>@</samp>&rsquo;, and &lsquo;<samp>_</samp>&rsquo;, 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>
+<hr>
+<a name="Aliases"></a>
+<div class="header">
+<p>
+Next: <a href="#Arrays" accesskey="n" rel="next">Arrays</a>, Previous: <a href="#Shell-Arithmetic" accesskey="p" rel="prev">Shell Arithmetic</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Aliases-1"></a>
+<h3 class="section">6.6 Aliases</h3>
+<a name="index-alias-expansion"></a>
+
+<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 &lsquo;<samp>/</samp>&rsquo;, &lsquo;<samp>$</samp>&rsquo;, &lsquo;<samp>`</samp>&rsquo;, &lsquo;<samp>=</samp>&rsquo; 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>&quot;ls -F&quot;</code>,
+for instance, and Bash does not try to recursively expand the
+replacement text.
+If the last character of the alias value is a
+<var>blank</var>, 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 <a href="#Shell-Functions">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 <a href="#The-Shopt-Builtin">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,
+and all lines that make up a compound command,
+before executing any of the commands on that line or the compound command.
+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 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>
+<hr>
+<a name="Arrays"></a>
+<div class="header">
+<p>
+Next: <a href="#The-Directory-Stack" accesskey="n" rel="next">The Directory Stack</a>, Previous: <a href="#Aliases" accesskey="p" rel="prev">Aliases</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Arrays-1"></a>
+<h3 class="section">6.7 Arrays</h3>
+<a name="index-arrays"></a>
+
+<p>Bash provides one-dimensional indexed and associative array variables.
+Any variable may be used as an indexed 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.
+Indexed arrays are referenced using integers (including arithmetic
+expressions (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>)) and are zero-based;
+associative arrays use arbitrary strings.
+Unless otherwise noted, indexed array indices must be non-negative integers.
+</p>
+<p>An indexed array is created automatically if any variable is assigned to
+using the syntax
+</p><div class="example">
+<pre class="example"><var>name</var>[<var>subscript</var>]=<var>value</var>
+</pre></div>
+
+<p>The <var>subscript</var>
+is treated as an arithmetic expression that must evaluate to a number.
+To explicitly declare an array, use
+</p><div class="example">
+<pre class="example">declare -a <var>name</var>
+</pre></div>
+<p>The syntax
+</p><div class="example">
+<pre class="example">declare -a <var>name</var>[<var>subscript</var>]
+</pre></div>
+<p>is also accepted; the <var>subscript</var> is ignored.
+</p>
+<p>Associative arrays are created using
+</p><div class="example">
+<pre class="example">declare -A <var>name</var>.
+</pre></div>
+
+<p>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
+</p><div class="example">
+<pre class="example"><var>name</var>=(<var>value1</var> <var>value2</var> &hellip; )
+</pre></div>
+<p>where each
+<var>value</var> is of the form <code>[<var>subscript</var>]=</code><var>string</var>.
+Indexed array assignments do not require anything but <var>string</var>.
+When assigning to indexed arrays, if
+the optional subscript is supplied, that index is assigned to;
+otherwise the index of the element assigned is the last index assigned
+to by the statement plus one. Indexing starts at zero.
+</p>
+<p>When assigning to an associative array, the subscript is required.
+</p>
+<p>This syntax is also accepted by the <code>declare</code>
+builtin. Individual array elements may be assigned to using the
+<code><var>name</var>[<var>subscript</var>]=<var>value</var></code> syntax introduced above.
+</p>
+<p>When assigning to an indexed array, if <var>name</var>
+is subscripted by a negative number, that number is
+interpreted as relative to one greater than the maximum index of
+<var>name</var>, so negative indices count back from the end of the
+array, and an index of -1 references the last element.
+</p>
+<p>Any element of an array may be referenced using
+<code>${<var>name</var>[<var>subscript</var>]}</code>.
+The braces are required to avoid
+conflicts with the shell&rsquo;s filename expansion operators. If the
+<var>subscript</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;, 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>${<var>name</var>[*]}</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>${<var>name</var>[@]}</code> expands each element of
+<var>name</var> to a separate word. When there are no array members,
+<code>${<var>name</var>[@]}</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 &lsquo;<samp>@</samp>&rsquo; and &lsquo;<samp>*</samp>&rsquo;.
+<code>${#<var>name</var>[<var>subscript</var>]}</code> expands to the length of
+<code>${<var>name</var>[<var>subscript</var>]}</code>.
+If <var>subscript</var> is &lsquo;<samp>@</samp>&rsquo; or
+&lsquo;<samp>*</samp>&rsquo;, the expansion is the number of elements in the array.
+If the <var>subscript</var>
+used to reference an element of an indexed array
+evaluates to a number less than zero, it is
+interpreted as relative to one greater than the maximum index of the array,
+so negative indices count back from the end of the array,
+and an index of -1 refers to the last element.
+</p>
+<p>Referencing an array variable without a subscript is equivalent to
+referencing with a subscript of 0.
+Any reference to a variable using a valid subscript is legal, and
+<code>bash</code> will create an array if necessary.
+</p>
+<p>An array variable is considered set if a subscript has been assigned a
+value. The null string is a valid value.
+</p>
+<p>It is possible to obtain the keys (indices) of an array as well as the values.
+${!<var>name</var>[@]} and ${!<var>name</var>[*]} expand to the indices
+assigned in array variable <var>name</var>.
+The treatment when in double quotes is similar to the expansion of the
+special parameters &lsquo;<samp>@</samp>&rsquo; and &lsquo;<samp>*</samp>&rsquo; within double quotes.
+</p>
+<p>The <code>unset</code> builtin is used to destroy arrays.
+<code>unset <var>name</var>[<var>subscript</var>]</code>
+destroys the array element at index <var>subscript</var>.
+Negative subscripts to indexed arrays are interpreted as described above.
+Unsetting the last element of an array variable does not unset the variable.
+<code>unset <var>name</var></code>, where <var>name</var> is an array, removes the
+entire array. A subscript of &lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo; also removes the
+entire array.
+</p>
+<p>When using a variable name with a subscript as an argument to a command,
+such as with <code>unset</code>, without using the word expansion syntax
+described above, the argument is subject to the shell&rsquo;s filename expansion.
+If filename expansion is not desired, the argument should be quoted.
+</p>
+<p>The <code>declare</code>, <code>local</code>, and <code>readonly</code>
+builtins each accept a <samp>-a</samp> option to specify an indexed
+array and a <samp>-A</samp> option to specify an associative array.
+If both options are supplied, <samp>-A</samp> takes precedence.
+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>
+<hr>
+<a name="The-Directory-Stack"></a>
+<div class="header">
+<p>
+Next: <a href="#Controlling-the-Prompt" accesskey="n" rel="next">Controlling the Prompt</a>, Previous: <a href="#Arrays" accesskey="p" rel="prev">Arrays</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="The-Directory-Stack-1"></a>
+<h3 class="section">6.8 The Directory Stack</h3>
+<a name="index-directory-stack"></a>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Directory-Stack-Builtins" accesskey="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>
+
+<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. The current directory is always the &quot;top&quot;
+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>
+<hr>
+<a name="Directory-Stack-Builtins"></a>
+<div class="header">
+<p>
+Up: <a href="#The-Directory-Stack" accesskey="u" rel="up">The Directory Stack</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Directory-Stack-Builtins-1"></a>
+<h4 class="subsection">6.8.1 Directory Stack Builtins</h4>
+
+<dl compact="compact">
+<dt><code>dirs</code></dt>
+<dd><a name="index-dirs"></a>
+<div class="example">
+<pre class="example">dirs [-clpv] [+<var>N</var> | -<var>N</var>]
+</pre></div>
+
+<p>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.
+The current directory is always the first directory in the stack.
+</p>
+<dl compact="compact">
+<dt><code>-c</code></dt>
+<dd><p>Clears the directory stack by deleting all of the elements.
+</p></dd>
+<dt><code>-l</code></dt>
+<dd><p>Produces a listing using full pathnames;
+the default listing format uses a tilde to denote the home directory.
+</p></dd>
+<dt><code>-p</code></dt>
+<dd><p>Causes <code>dirs</code> to print the directory stack with one entry per
+line.
+</p></dd>
+<dt><code>-v</code></dt>
+<dd><p>Causes <code>dirs</code> to print the directory stack with one entry per
+line, prefixing each entry with its index in the stack.
+</p></dd>
+<dt><code>+<var>N</var></code></dt>
+<dd><p>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.
+</p></dd>
+<dt><code>-<var>N</var></code></dt>
+<dd><p>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.
+</p></dd>
+</dl>
+
+</dd>
+<dt><code>popd</code></dt>
+<dd><a name="index-popd"></a>
+<div class="example">
+<pre class="example">popd [-n] [+<var>N</var> | -<var>N</var>]
+</pre></div>
+
+<p>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>; that is, <code>popd</code> is equivalent to <code>popd +0</code>.
+</p>
+<dl compact="compact">
+<dt><code>-n</code></dt>
+<dd><p>Suppresses the normal change of directory when removing directories
+from the stack, so that only the stack is manipulated.
+</p></dd>
+<dt><code>+<var>N</var></code></dt>
+<dd><p>Removes the <var>N</var>th directory (counting from the left of the
+list printed by <code>dirs</code>), starting with zero.
+</p></dd>
+<dt><code>-<var>N</var></code></dt>
+<dd><p>Removes the <var>N</var>th directory (counting from the right of the
+list printed by <code>dirs</code>), starting with zero.
+</p></dd>
+</dl>
+
+<a name="index-pushd"></a>
+</dd>
+<dt><code>pushd</code></dt>
+<dd><div class="example">
+<pre class="example">pushd [-n] [<var>+N</var> | <var>-N</var> | <var>dir</var>]
+</pre></div>
+
+<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
+and makes the new top the current directory.
+</p>
+<dl compact="compact">
+<dt><code>-n</code></dt>
+<dd><p>Suppresses the normal change of directory when rotating or
+adding directories to the stack, so that only the stack is manipulated.
+</p></dd>
+<dt><code>+<var>N</var></code></dt>
+<dd><p>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.
+</p></dd>
+<dt><code>-<var>N</var></code></dt>
+<dd><p>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.
+</p></dd>
+<dt><code><var>dir</var></code></dt>
+<dd><p>Makes <var>dir</var> be the top of the stack, making
+it the new current directory as if it had been supplied as an argument
+to the <code>cd</code> builtin.
+</p></dd>
+</dl>
+</dd>
+</dl>
+
+<hr>
+<a name="Controlling-the-Prompt"></a>
+<div class="header">
+<p>
+Next: <a href="#The-Restricted-Shell" accesskey="n" rel="next">The Restricted Shell</a>, Previous: <a href="#The-Directory-Stack" accesskey="p" rel="prev">The Directory Stack</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Controlling-the-Prompt-1"></a>
+<h3 class="section">6.9 Controlling the Prompt</h3>
+<a name="index-prompting"></a>
+
+<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 <code>PS0</code>, <code>PS1</code>, <code>PS2</code>, and
+<code>PS4</code>:
+</p>
+<dl compact="compact">
+<dt><code>\a</code></dt>
+<dd><p>A bell character.
+</p></dd>
+<dt><code>\d</code></dt>
+<dd><p>The date, in &quot;Weekday Month Date&quot; format (e.g., &quot;Tue May 26&quot;).
+</p></dd>
+<dt><code>\D{<var>format</var>}</code></dt>
+<dd><p>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.
+</p></dd>
+<dt><code>\e</code></dt>
+<dd><p>An escape character.
+</p></dd>
+<dt><code>\h</code></dt>
+<dd><p>The hostname, up to the first &lsquo;.&rsquo;.
+</p></dd>
+<dt><code>\H</code></dt>
+<dd><p>The hostname.
+</p></dd>
+<dt><code>\j</code></dt>
+<dd><p>The number of jobs currently managed by the shell.
+</p></dd>
+<dt><code>\l</code></dt>
+<dd><p>The basename of the shell&rsquo;s terminal device name.
+</p></dd>
+<dt><code>\n</code></dt>
+<dd><p>A newline.
+</p></dd>
+<dt><code>\r</code></dt>
+<dd><p>A carriage return.
+</p></dd>
+<dt><code>\s</code></dt>
+<dd><p>The name of the shell, the basename of <code>$0</code> (the portion
+following the final slash).
+</p></dd>
+<dt><code>\t</code></dt>
+<dd><p>The time, in 24-hour HH:MM:SS format.
+</p></dd>
+<dt><code>\T</code></dt>
+<dd><p>The time, in 12-hour HH:MM:SS format.
+</p></dd>
+<dt><code>\@</code></dt>
+<dd><p>The time, in 12-hour am/pm format.
+</p></dd>
+<dt><code>\A</code></dt>
+<dd><p>The time, in 24-hour HH:MM format.
+</p></dd>
+<dt><code>\u</code></dt>
+<dd><p>The username of the current user.
+</p></dd>
+<dt><code>\v</code></dt>
+<dd><p>The version of Bash (e.g., 2.00)
+</p></dd>
+<dt><code>\V</code></dt>
+<dd><p>The release of Bash, version + patchlevel (e.g., 2.00.0)
+</p></dd>
+<dt><code>\w</code></dt>
+<dd><p>The current working directory, with <code>$HOME</code> abbreviated with a tilde
+(uses the <code>$PROMPT_DIRTRIM</code> variable).
+</p></dd>
+<dt><code>\W</code></dt>
+<dd><p>The basename of <code>$PWD</code>, with <code>$HOME</code> abbreviated with a tilde.
+</p></dd>
+<dt><code>\!</code></dt>
+<dd><p>The history number of this command.
+</p></dd>
+<dt><code>\#</code></dt>
+<dd><p>The command number of this command.
+</p></dd>
+<dt><code>\$</code></dt>
+<dd><p>If the effective uid is 0, <code>#</code>, otherwise <code>$</code>.
+</p></dd>
+<dt><code>\<var>nnn</var></code></dt>
+<dd><p>The character whose ASCII code is the octal value <var>nnn</var>.
+</p></dd>
+<dt><code>\\</code></dt>
+<dd><p>A backslash.
+</p></dd>
+<dt><code>\[</code></dt>
+<dd><p>Begin a sequence of non-printing characters. This could be used to
+embed a terminal control sequence into the prompt.
+</p></dd>
+<dt><code>\]</code></dt>
+<dd><p>End a sequence of non-printing characters.
+</p></dd>
+</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 <a href="#Bash-History-Facilities">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 <a href="#The-Shopt-Builtin">The Shopt Builtin</a>).
+</p>
+<hr>
+<a name="The-Restricted-Shell"></a>
+<div class="header">
+<p>
+Next: <a href="#Bash-POSIX-Mode" accesskey="n" rel="next">Bash POSIX Mode</a>, Previous: <a href="#Controlling-the-Prompt" accesskey="p" rel="prev">Controlling the Prompt</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="The-Restricted-Shell-1"></a>
+<h3 class="section">6.10 The Restricted Shell</h3>
+<a name="index-restricted-shell"></a>
+
+<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>
+<ul>
+<li> Changing directories with the <code>cd</code> builtin.
+</li><li> Setting or unsetting the values of the <code>SHELL</code>, <code>PATH</code>,
+<code>ENV</code>, or <code>BASH_ENV</code> variables.
+</li><li> Specifying command names containing slashes.
+</li><li> Specifying a filename containing a slash as an argument to the <code>.</code>
+builtin command.
+</li><li> Specifying a filename containing a slash as an argument to the <samp>-p</samp>
+option to the <code>hash</code> builtin command.
+</li><li> Importing function definitions from the shell environment at startup.
+</li><li> Parsing the value of <code>SHELLOPTS</code> from the shell environment at startup.
+</li><li> Redirecting output using the &lsquo;<samp>&gt;</samp>&rsquo;, &lsquo;<samp>&gt;|</samp>&rsquo;, &lsquo;<samp>&lt;&gt;</samp>&rsquo;, &lsquo;<samp>&gt;&amp;</samp>&rsquo;,
+&lsquo;<samp>&amp;&gt;</samp>&rsquo;, and &lsquo;<samp>&gt;&gt;</samp>&rsquo; redirection operators.
+</li><li> Using the <code>exec</code> builtin to replace the shell with another command.
+</li><li> Adding or deleting builtin commands with the
+<samp>-f</samp> and <samp>-d</samp> options to the <code>enable</code> builtin.
+</li><li> Using the <code>enable</code> builtin command to enable disabled shell builtins.
+</li><li> Specifying the <samp>-p</samp> option to the <code>command</code> builtin.
+</li><li> Turning off restricted mode with &lsquo;<samp>set +r</samp>&rsquo; or &lsquo;<samp>set +o restricted</samp>&rsquo;.
+</li></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 <a href="#Shell-Scripts">Shell Scripts</a>), <code>rbash</code> turns off any restrictions in
+the shell spawned to execute the script.
+</p>
+<hr>
+<a name="Bash-POSIX-Mode"></a>
+<div class="header">
+<p>
+Previous: <a href="#The-Restricted-Shell" accesskey="p" rel="prev">The Restricted Shell</a>, Up: <a href="#Bash-Features" accesskey="u" rel="up">Bash Features</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-POSIX-Mode-1"></a>
+<h3 class="section">6.11 Bash POSIX Mode</h3>
+<a name="index-POSIX-Mode"></a>
+
+<p>Starting Bash with the <samp>--posix</samp> command-line option or executing
+&lsquo;<samp>set -o posix</samp>&rsquo; while Bash is running will cause Bash to conform more
+closely to the <small>POSIX</small> standard by changing the behavior to
+match that specified by <small>POSIX</small> in areas where the Bash default differs.
+</p>
+<p>When invoked as <code>sh</code>, Bash enters <small>POSIX</small> mode after reading the
+startup files.
+</p>
+<p>The following list is what&rsquo;s changed when &lsquo;<small>POSIX</small> mode&rsquo; is in effect:
+</p>
+<ol>
+<li> Bash ensures that the <code>POSIXLY_CORRECT</code> variable is set.
+
+</li><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
+&lsquo;<samp>shopt -s checkhash</samp>&rsquo;.
+
+</li><li> The message printed by the job control code and builtins when a job
+exits with a non-zero status is &lsquo;Done(status)&rsquo;.
+
+</li><li> The message printed by the job control code and builtins when a job
+is stopped is &lsquo;Stopped(<var>signame</var>)&rsquo;, where <var>signame</var> is, for
+example, <code>SIGTSTP</code>.
+
+</li><li> Alias expansion is always enabled, even in non-interactive shells.
+
+</li><li> Reserved words appearing in a context where reserved words are recognized
+do not undergo alias expansion.
+
+</li><li> The <small>POSIX</small> <code>PS1</code> and <code>PS2</code> expansions of &lsquo;<samp>!</samp>&rsquo; to
+the history number and &lsquo;<samp>!!</samp>&rsquo; to &lsquo;<samp>!</samp>&rsquo; 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.
+
+</li><li> The <small>POSIX</small> startup files are executed (<code>$ENV</code>) rather than
+the normal Bash files.
+
+</li><li> Tilde expansion is only performed on assignments preceding a command
+name, rather than on all assignment statements on the line.
+
+</li><li> The default history file is <samp>~/.sh_history</samp> (this is the
+default value of <code>$HISTFILE</code>).
+
+</li><li> Redirection operators do not perform filename expansion on the word
+in the redirection unless the shell is interactive.
+
+</li><li> Redirection operators do not perform word splitting on the word in the
+redirection.
+
+</li><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.
+
+</li><li> Function names may not be the same as one of the <small>POSIX</small> special
+builtins.
+
+</li><li> <small>POSIX</small> special builtins are found before shell functions
+during command lookup.
+
+</li><li> When printing shell function definitions (e.g., by <code>type</code>), Bash does
+not print the <code>function</code> keyword.
+
+</li><li> Literal tildes that appear as the first character in elements of
+the <code>PATH</code> variable are not expanded as described above
+under <a href="#Tilde-Expansion">Tilde Expansion</a>.
+
+</li><li> The <code>time</code> reserved word may be used by itself as a command. When
+used in this way, it displays timing statistics for the shell and its
+completed children. The <code>TIMEFORMAT</code> variable controls the format
+of the timing information.
+
+</li><li> When parsing and expanding a ${&hellip;} expansion that appears within
+double quotes, single quotes are no longer special and cannot be used to
+quote a closing brace or other special character, unless the operator is
+one of those defined to perform pattern removal. In this case, they do
+not have to appear as matched pairs.
+
+</li><li> The parser does not recognize <code>time</code> as a reserved word if the next
+token begins with a &lsquo;<samp>-</samp>&rsquo;.
+
+</li><li> The &lsquo;<samp>!</samp>&rsquo; character does not introduce history expansion within a
+double-quoted string, even if the <code>histexpand</code> option is enabled.
+
+</li><li> If a <small>POSIX</small> special builtin returns an error status, a
+non-interactive shell exits. The fatal errors are those listed in
+the <small>POSIX</small> standard, and include things like passing incorrect options,
+redirection errors, variable assignment errors for assignments preceding
+the command name, and so on.
+
+</li><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.
+
+</li><li> A non-interactive shell exits with an error status if a variable
+assignment error occurs in an assignment statement preceding a special
+builtin, but not with any other simple command.
+
+</li><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.
+
+</li><li> Non-interactive shells exit if <var>filename</var> in <code>.</code> <var>filename</var>
+is not found.
+
+</li><li> Non-interactive shells exit if a syntax error in an arithmetic expansion
+results in an invalid expression.
+
+</li><li> Non-interactive shells exit if a parameter expansion error occurs.
+
+</li><li> Non-interactive shells exit if there is a syntax error in a script read
+with the <code>.</code> or <code>source</code> builtins, or in a string processed by
+the <code>eval</code> builtin.
+
+</li><li> Process substitution is not available.
+
+</li><li> While variable indirection is available, it may not be applied to the
+&lsquo;<samp>#</samp>&rsquo; and &lsquo;<samp>?</samp>&rsquo; special parameters.
+
+</li><li> When expanding the &lsquo;<samp>*</samp>&rsquo; special parameter in a pattern context where the
+expansion is double-quoted does not treat the <code>$*</code> as if it were
+double-quoted.
+
+</li><li> Assignment statements preceding <small>POSIX</small> special builtins
+persist in the shell environment after the builtin completes.
+
+</li><li> Assignment statements preceding shell function calls persist in the
+shell environment after the function returns, as if a <small>POSIX</small>
+special builtin command had been executed.
+
+</li><li> The <code>command</code> builtin does not prevent builtins that take assignment
+statements as arguments from expanding them as assignment statements;
+when not in <small>POSIX</small> mode, assignment builtins lose their assignment
+statement expansion properties when preceded by <code>command</code>.
+
+</li><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.
+
+</li><li> The output of &lsquo;<samp>kill -l</samp>&rsquo; prints all the signal names on a single line,
+separated by spaces, without the &lsquo;<samp>SIG</samp>&rsquo; prefix.
+
+</li><li> The <code>kill</code> builtin does not accept signal names with a &lsquo;<samp>SIG</samp>&rsquo;
+prefix.
+
+</li><li> The <code>export</code> and <code>readonly</code> builtin commands display their
+output in the format required by <small>POSIX</small>.
+
+</li><li> The <code>trap</code> builtin displays signal names without the leading
+<code>SIG</code>.
+
+</li><li> The <code>trap</code> builtin doesn&rsquo;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 &lsquo;<samp>-</samp>&rsquo; as the
+first argument.
+
+</li><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>.
+
+</li><li> Enabling <small>POSIX</small> mode has the effect of setting the
+<code>inherit_errexit</code> option, so
+subshells spawned to execute command substitutions inherit the value of
+the <samp>-e</samp> option from the parent shell.
+When the <code>inherit_errexit</code> option is not enabled,
+Bash clears the <samp>-e</samp> option in such subshells.
+
+</li><li> Enabling <small>POSIX</small> mode has the effect of setting the
+<code>shift_verbose</code> option, so numeric arguments to <code>shift</code>
+that exceed the number of positional parameters will result in an
+error message.
+
+</li><li> When the <code>alias</code> builtin displays alias definitions, it does not
+display them with a leading &lsquo;<samp>alias </samp>&rsquo; unless the <samp>-p</samp> option
+is supplied.
+
+</li><li> When the <code>set</code> builtin is invoked without options, it does not display
+shell function names and definitions.
+
+</li><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.
+
+</li><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.
+
+</li><li> When the <code>cd</code> builtin cannot change a directory because the
+length of the pathname
+constructed from <code>$PWD</code> and the directory name supplied as an argument
+exceeds <var>PATH_MAX</var> when all symbolic links are expanded, <code>cd</code> will
+fail instead of attempting to use only the supplied directory name.
+
+</li><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.
+
+</li><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.
+
+</li><li> The default editor used by <code>fc</code> is <code>ed</code>.
+
+</li><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>.
+
+</li><li> The <code>vi</code> editing mode will invoke the <code>vi</code> editor directly when
+the &lsquo;<samp>v</samp>&rsquo; command is run, instead of checking <code>$VISUAL</code> and
+<code>$EDITOR</code>.
+
+</li><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.
+
+</li><li> The <code>ulimit</code> builtin uses a block size of 512 bytes for the <samp>-c</samp>
+and <samp>-f</samp> options.
+
+</li><li> The arrival of <code>SIGCHLD</code> when a trap is set on <code>SIGCHLD</code> does
+not interrupt the <code>wait</code> builtin and cause it to return immediately.
+The trap command is run once for each child that exits.
+
+</li><li> The <code>read</code> builtin may be interrupted by a signal for which a trap
+has been set.
+If Bash receives a trapped signal while executing <code>read</code>, the trap
+handler executes and <code>read</code> returns an exit status greater than 128.
+
+</li><li> Bash removes an exited background process&rsquo;s status from the list of such
+statuses after the <code>wait</code> builtin is used to obtain it.
+
+</li></ol>
+
+<p>There is other <small>POSIX</small> behavior that Bash does not implement by
+default even when in <small>POSIX</small> mode.
+Specifically:
+</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.
+
+</li><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.
+
+</li></ol>
+
+<p>Bash can be configured to be <small>POSIX</small>-conformant by default, by specifying
+the <samp>--enable-strict-posix-default</samp> to <code>configure</code> when building
+(see <a href="#Optional-Features">Optional Features</a>).
+</p>
+<hr>
+<a name="Job-Control"></a>
+<div class="header">
+<p>
+Next: <a href="#Command-Line-Editing" accesskey="n" rel="next">Command Line Editing</a>, Previous: <a href="#Bash-Features" accesskey="p" rel="prev">Bash Features</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Job-Control-1"></a>
+<h2 class="chapter">7 Job Control</h2>
+
+<p>This chapter discusses what job control is, how it works, and how
+Bash allows you to access its facilities.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Job-Control-Basics" accesskey="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">&bull; <a href="#Job-Control-Builtins" accesskey="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">&bull; <a href="#Job-Control-Variables" accesskey="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>
+
+<hr>
+<a name="Job-Control-Basics"></a>
+<div class="header">
+<p>
+Next: <a href="#Job-Control-Builtins" accesskey="n" rel="next">Job Control Builtins</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Job-Control-Basics-1"></a>
+<h3 class="section">7.1 Job Control Basics</h3>
+<a name="index-job-control-1"></a>
+<a name="index-foreground"></a>
+<a name="index-background"></a>
+<a name="index-suspending-jobs"></a>
+
+<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 operating system kernel&rsquo;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:
+</p><div class="example">
+<pre class="example">[1] 25647
+</pre></div>
+<p>indicating that this job is job number 1 and that the process <small>ID</small>
+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 <small>ID</small>. Members of this process group (processes whose
+process group <small>ID</small> is equal to the current terminal process group
+<small>ID</small>) 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 <small>ID</small> differs from the
+terminal&rsquo;s; such processes are immune to keyboard-generated
+signals. Only foreground processes are allowed to read from or, if
+the user so specifies with <code>stty tostop</code>, write to the terminal.
+Background processes which attempt to
+read from (write to when <code>stty tostop</code> is in effect) the
+terminal are sent a <code>SIGTTIN</code> (<code>SIGTTOU</code>)
+signal by the kernel&rsquo;s 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 &lsquo;<samp>^Z</samp>&rsquo;, 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 &lsquo;<samp>^Y</samp>&rsquo;, 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 &lsquo;<samp>^Z</samp>&rsquo;
+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 &lsquo;<samp>%</samp>&rsquo; introduces a job specification (<var>jobspec</var>).
+</p>
+<p>Job number <code>n</code> may be referred to as &lsquo;<samp>%n</samp>&rsquo;.
+The symbols &lsquo;<samp>%%</samp>&rsquo; and &lsquo;<samp>%+</samp>&rsquo; refer to the shell&rsquo;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 &lsquo;<samp>%</samp>&rsquo; (with no accompanying job specification) also refers
+to the current job.
+The previous job may be referenced using &lsquo;<samp>%-</samp>&rsquo;.
+If there is only a single job, &lsquo;<samp>%+</samp>&rsquo; and &lsquo;<samp>%-</samp>&rsquo; can both be used
+to refer to that job.
+In output pertaining to jobs (e.g., the output of the <code>jobs</code>
+command), the current job is always flagged with a &lsquo;<samp>+</samp>&rsquo;, and the
+previous job with a &lsquo;<samp>-</samp>&rsquo;.
+</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, &lsquo;<samp>%ce</samp>&rsquo; refers
+to a stopped <code>ce</code> job. Using &lsquo;<samp>%?ce</samp>&rsquo;, on the
+other hand, refers to any job containing the string &lsquo;<samp>ce</samp>&rsquo; 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:
+&lsquo;<samp>%1</samp>&rsquo; is a synonym for &lsquo;<samp>fg %1</samp>&rsquo;, bringing job 1 from the
+background into the foreground. Similarly, &lsquo;<samp>%1 &amp;</samp>&rsquo; resumes
+job 1 in the background, equivalent to &lsquo;<samp>bg %1</samp>&rsquo;
+</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&rsquo;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 <a href="#The-Set-Builtin">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 &ndash; see <a href="#The-Shopt-Builtin">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>When the shell is waiting for a job or process using the <code>wait</code>
+builtin, and job control is enabled, <code>wait</code> will return when the
+job changes state. The <samp>-f</samp> option will force <code>wait</code> to wait
+until the job or process terminates before returning.
+</p>
+<hr>
+<a name="Job-Control-Builtins"></a>
+<div class="header">
+<p>
+Next: <a href="#Job-Control-Variables" accesskey="n" rel="next">Job Control Variables</a>, Previous: <a href="#Job-Control-Basics" accesskey="p" rel="prev">Job Control Basics</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Job-Control-Builtins-1"></a>
+<h3 class="section">7.2 Job Control Builtins</h3>
+
+<dl compact="compact">
+<dt><code>bg</code></dt>
+<dd><a name="index-bg"></a>
+<div class="example">
+<pre class="example">bg [<var>jobspec</var> &hellip;]
+</pre></div>
+
+<p>Resume each suspended job <var>jobspec</var> in the background, as if it
+had been started with &lsquo;<samp>&amp;</samp>&rsquo;.
+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>
+</dd>
+<dt><code>fg</code></dt>
+<dd><a name="index-fg"></a>
+<div class="example">
+<pre class="example">fg [<var>jobspec</var>]
+</pre></div>
+
+<p>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>
+</dd>
+<dt><code>jobs</code></dt>
+<dd><a name="index-jobs"></a>
+<div class="example">
+<pre class="example">jobs [-lnprs] [<var>jobspec</var>]
+jobs -x <var>command</var> [<var>arguments</var>]
+</pre></div>
+
+<p>The first form lists the active jobs. The options have the
+following meanings:
+</p>
+<dl compact="compact">
+<dt><code>-l</code></dt>
+<dd><p>List process <small>ID</small>s in addition to the normal information.
+</p>
+</dd>
+<dt><code>-n</code></dt>
+<dd><p>Display information only about jobs that have changed status since
+the user was last notified of their status.
+</p>
+</dd>
+<dt><code>-p</code></dt>
+<dd><p>List only the process <small>ID</small> of the job&rsquo;s process group leader.
+</p>
+</dd>
+<dt><code>-r</code></dt>
+<dd><p>Display only running jobs.
+</p>
+</dd>
+<dt><code>-s</code></dt>
+<dd><p>Display only stopped jobs.
+</p></dd>
+</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 <small>ID</small>, and executes <var>command</var>,
+passing it <var>argument</var>s, returning its exit status.
+</p>
+</dd>
+<dt><code>kill</code></dt>
+<dd><a name="index-kill"></a>
+<div class="example">
+<pre class="example">kill [-s <var>sigspec</var>] [-n <var>signum</var>] [-<var>sigspec</var>] <var>jobspec</var> or <var>pid</var>
+kill -l|-L [<var>exit_status</var>]
+</pre></div>
+
+<p>Send a signal specified by <var>sigspec</var> or <var>signum</var> to the process
+named by job specification <var>jobspec</var> or process <small>ID</small> <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 <samp>-L</samp> option is equivalent to <samp>-l</samp>.
+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>
+</dd>
+<dt><code>wait</code></dt>
+<dd><a name="index-wait"></a>
+<div class="example">
+<pre class="example">wait [-fn] [<var>jobspec</var> or <var>pid</var> &hellip;]
+</pre></div>
+
+<p>Wait until the child process specified by each process <small>ID</small> <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 the <samp>-n</samp> option is supplied, <code>wait</code> waits for any job to
+terminate and returns its exit status.
+If the <samp>-f</samp> option is supplied, and job control is enabled,
+<code>wait</code> forces each <var>pid</var> or <var>jobspec</var> to terminate before
+returning its status, intead of returning when it changes status.
+If neither <var>jobspec</var> nor <var>pid</var> specifies an active child process
+of the shell, the return status is 127.
+</p>
+</dd>
+<dt><code>disown</code></dt>
+<dd><a name="index-disown"></a>
+<div class="example">
+<pre class="example">disown [-ar] [-h] [<var>jobspec</var> &hellip; | <var>pid</var> &hellip; ]
+</pre></div>
+
+<p>Without options, remove each <var>jobspec</var> 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 the
+<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>
+</dd>
+<dt><code>suspend</code></dt>
+<dd><a name="index-suspend"></a>
+<div class="example">
+<pre class="example">suspend [-f]
+</pre></div>
+
+<p>Suspend the execution of this shell until it receives a
+<code>SIGCONT</code> signal.
+A login shell cannot be suspended; the <samp>-f</samp>
+option can be used to override this and force the suspension.
+</p></dd>
+</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 <small>ID</small>s.
+</p>
+<hr>
+<a name="Job-Control-Variables"></a>
+<div class="header">
+<p>
+Previous: <a href="#Job-Control-Builtins" accesskey="p" rel="prev">Job Control Builtins</a>, Up: <a href="#Job-Control" accesskey="u" rel="up">Job Control</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Job-Control-Variables-1"></a>
+<h3 class="section">7.3 Job Control Variables</h3>
+
+<dl compact="compact">
+<dt><code>auto_resume</code>
+<a name="index-auto_005fresume"></a>
+</dt>
+<dd><p>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 &lsquo;<samp>exact</samp>&rsquo;,
+the string supplied must match the name of a stopped job exactly;
+if set to &lsquo;<samp>substring</samp>&rsquo;,
+the string supplied needs to match a substring of the name of a
+stopped job. The &lsquo;<samp>substring</samp>&rsquo; value provides functionality
+analogous to the &lsquo;<samp>%?</samp>&rsquo; job <small>ID</small> (see <a href="#Job-Control-Basics">Job Control Basics</a>).
+If set to any other value, the supplied string must
+be a prefix of a stopped job&rsquo;s name; this provides functionality
+analogous to the &lsquo;<samp>%</samp>&rsquo; job <small>ID</small>.
+</p>
+</dd>
+</dl>
+
+<a name="index-Readline_002c-how-to-use"></a>
+
+
+
+
+<hr>
+<a name="Command-Line-Editing"></a>
+<div class="header">
+<p>
+Next: <a href="#Using-History-Interactively" accesskey="n" rel="next">Using History Interactively</a>, Previous: <a href="#Job-Control" accesskey="p" rel="prev">Job Control</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Command-Line-Editing-1"></a>
+<h2 class="chapter">8 Command Line Editing</h2>
+
+<p>This chapter describes the basic features of the <small>GNU</small>
+command line editing interface.
+Command line editing is provided by the Readline library, which is
+used by several different programs, including Bash.
+Command line editing is enabled by default when using an interactive shell,
+unless the <samp>--noediting</samp> option is supplied at shell invocation.
+Line editing is also used when using the <samp>-e</samp> option to the
+<code>read</code> builtin command (see <a href="#Bash-Builtins">Bash Builtins</a>).
+By default, the line editing commands are similar to those of Emacs.
+A vi-style line editing interface is also available.
+Line editing can be enabled at any time using the <samp>-o emacs</samp> or
+<samp>-o vi</samp> options to the <code>set</code> builtin command
+(see <a href="#The-Set-Builtin">The Set Builtin</a>), or disabled using the <samp>+o emacs</samp> or
+<samp>+o vi</samp> options to <code>set</code>.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Introduction-and-Notation" accesskey="1">Introduction and Notation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notation used in this text.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Readline-Interaction" accesskey="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">&bull; <a href="#Readline-Init-File" accesskey="3">Readline Init File</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Customizing Readline from a user&rsquo;s view.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Bindable-Readline-Commands" accesskey="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">&bull; <a href="#Readline-vi-Mode" accesskey="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">&bull; <a href="#Programmable-Completion" accesskey="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">&bull; <a href="#Programmable-Completion-Builtins" accesskey="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>
+<tr><td align="left" valign="top">&bull; <a href="#A-Programmable-Completion-Example" accesskey="8">A Programmable Completion Example</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">An example shell function for
+ generating possible completions.
+</td></tr>
+</table>
+
+<hr>
+<a name="Introduction-and-Notation"></a>
+<div class="header">
+<p>
+Next: <a href="#Readline-Interaction" accesskey="n" rel="next">Readline Interaction</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Introduction-to-Line-Editing"></a>
+<h3 class="section">8.1 Introduction to Line Editing</h3>
+
+<p>The following paragraphs describe the notation used to represent
+keystrokes.
+</p>
+<p>The text <kbd>C-k</kbd> is read as &lsquo;Control-K&rsquo; and describes the character
+produced when the <tt class="key">k</tt> key is pressed while the Control key
+is depressed.
+</p>
+<p>The text <kbd>M-k</kbd> is read as &lsquo;Meta-K&rsquo; and describes the character
+produced when the Meta key (if you have one) is depressed, and the <tt class="key">k</tt>
+key is pressed.
+The Meta key is labeled <tt class="key">ALT</tt> on many keyboards.
+On keyboards with two keys labeled <tt class="key">ALT</tt> (usually to either side of
+the space bar), the <tt class="key">ALT</tt> on the left side is generally set to
+work as a Meta key.
+The <tt class="key">ALT</tt> 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 <tt class="key">ALT</tt> key, or another key working as
+a Meta key, the identical keystroke can be generated by typing <tt class="key">ESC</tt>
+<em>first</em>, and then typing <tt class="key">k</tt>.
+Either process is known as <em>metafying</em> the <tt class="key">k</tt> key.
+</p>
+<p>The text <kbd>M-C-k</kbd> is read as &lsquo;Meta-Control-k&rsquo; and describes the
+character produced by <em>metafying</em> <kbd>C-k</kbd>.
+</p>
+<p>In addition, several keys have their own names. Specifically,
+<tt class="key">DEL</tt>, <tt class="key">ESC</tt>, <tt class="key">LFD</tt>, <tt class="key">SPC</tt>, <tt class="key">RET</tt>, and <tt class="key">TAB</tt> all
+stand for themselves when seen in this text, or in an init file
+(see <a href="#Readline-Init-File">Readline Init File</a>).
+If your keyboard lacks a <tt class="key">LFD</tt> key, typing <tt class="key">C-j</tt> will
+produce the desired character.
+The <tt class="key">RET</tt> key may be labeled <tt class="key">Return</tt> or <tt class="key">Enter</tt> on
+some keyboards.
+</p>
+<hr>
+<a name="Readline-Interaction"></a>
+<div class="header">
+<p>
+Next: <a href="#Readline-Init-File" accesskey="n" rel="next">Readline Init File</a>, Previous: <a href="#Introduction-and-Notation" accesskey="p" rel="prev">Introduction and Notation</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Readline-Interaction-1"></a>
+<h3 class="section">8.2 Readline Interaction</h3>
+<a name="index-interaction_002c-readline"></a>
+
+<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 <tt class="key">RET</tt>. You do not have to be at the
+end of the line to press <tt class="key">RET</tt>; the entire line is accepted
+regardless of the location of the cursor within the line.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Readline-Bare-Essentials" accesskey="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">&bull; <a href="#Readline-Movement-Commands" accesskey="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">&bull; <a href="#Readline-Killing-Commands" accesskey="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">&bull; <a href="#Readline-Arguments" accesskey="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">&bull; <a href="#Searching" accesskey="5">Searching</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Searching through previous lines.
+</td></tr>
+</table>
+
+<hr>
+<a name="Readline-Bare-Essentials"></a>
+<div class="header">
+<p>
+Next: <a href="#Readline-Movement-Commands" accesskey="n" rel="next">Readline Movement Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Readline-Bare-Essentials-1"></a>
+<h4 class="subsection">8.2.1 Readline Bare Essentials</h4>
+<a name="index-notation_002c-readline"></a>
+<a name="index-command-editing"></a>
+<a name="index-editing-command-lines"></a>
+
+<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 &lsquo;pushed over&rsquo; 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 &lsquo;pulled back&rsquo; 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>
+<dl compact="compact">
+<dt><kbd>C-b</kbd></dt>
+<dd><p>Move back one character.
+</p></dd>
+<dt><kbd>C-f</kbd></dt>
+<dd><p>Move forward one character.
+</p></dd>
+<dt><tt class="key">DEL</tt> or <tt class="key">Backspace</tt></dt>
+<dd><p>Delete the character to the left of the cursor.
+</p></dd>
+<dt><kbd>C-d</kbd></dt>
+<dd><p>Delete the character underneath the cursor.
+</p></dd>
+<dt>Printing&nbsp;characters<!-- /@w --></dt>
+<dd><p>Insert the character into the line at the cursor.
+</p></dd>
+<dt><kbd>C-_</kbd> or <kbd>C-x C-u</kbd></dt>
+<dd><p>Undo the last editing command. You can undo all the way back to an
+empty line.
+</p></dd>
+</dl>
+
+<p>(Depending on your configuration, the <tt class="key">Backspace</tt> key be set to
+delete the character to the left of the cursor and the <tt class="key">DEL</tt> 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>
+<hr>
+<a name="Readline-Movement-Commands"></a>
+<div class="header">
+<p>
+Next: <a href="#Readline-Killing-Commands" accesskey="n" rel="next">Readline Killing Commands</a>, Previous: <a href="#Readline-Bare-Essentials" accesskey="p" rel="prev">Readline Bare Essentials</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Readline-Movement-Commands-1"></a>
+<h4 class="subsection">8.2.2 Readline Movement Commands</h4>
+
+
+<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 <tt class="key">DEL</tt>. Here are some commands for moving more rapidly
+about the line.
+</p>
+<dl compact="compact">
+<dt><kbd>C-a</kbd></dt>
+<dd><p>Move to the start of the line.
+</p></dd>
+<dt><kbd>C-e</kbd></dt>
+<dd><p>Move to the end of the line.
+</p></dd>
+<dt><kbd>M-f</kbd></dt>
+<dd><p>Move forward a word, where a word is composed of letters and digits.
+</p></dd>
+<dt><kbd>M-b</kbd></dt>
+<dd><p>Move backward a word.
+</p></dd>
+<dt><kbd>C-l</kbd></dt>
+<dd><p>Clear the screen, reprinting the current line at the top.
+</p></dd>
+</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>
+<hr>
+<a name="Readline-Killing-Commands"></a>
+<div class="header">
+<p>
+Next: <a href="#Readline-Arguments" accesskey="n" rel="next">Readline Arguments</a>, Previous: <a href="#Readline-Movement-Commands" accesskey="p" rel="prev">Readline Movement Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Readline-Killing-Commands-1"></a>
+<h4 class="subsection">8.2.3 Readline Killing Commands</h4>
+
+<a name="index-killing-text"></a>
+<a name="index-yanking-text"></a>
+
+<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.
+(&lsquo;Cut&rsquo; and &lsquo;paste&rsquo; are more recent jargon for &lsquo;kill&rsquo; and &lsquo;yank&rsquo;.)
+</p>
+<p>If the description for a command says that it &lsquo;kills&rsquo; 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="index-kill-ring"></a>
+</p>
+<p>Here is the list of commands for killing text.
+</p>
+<dl compact="compact">
+<dt><kbd>C-k</kbd></dt>
+<dd><p>Kill the text from the current cursor position to the end of the line.
+</p>
+</dd>
+<dt><kbd>M-d</kbd></dt>
+<dd><p>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>
+</dd>
+<dt><kbd>M-<span class="key">DEL</span></kbd></dt>
+<dd><p>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>
+</dd>
+<dt><kbd>C-w</kbd></dt>
+<dd><p>Kill from the cursor to the previous whitespace. This is different than
+<kbd>M-<span class="key">DEL</span></kbd> because the word boundaries differ.
+</p>
+</dd>
+</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>
+<dl compact="compact">
+<dt><kbd>C-y</kbd></dt>
+<dd><p>Yank the most recently killed text back into the buffer at the cursor.
+</p>
+</dd>
+<dt><kbd>M-y</kbd></dt>
+<dd><p>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>.
+</p></dd>
+</dl>
+
+<hr>
+<a name="Readline-Arguments"></a>
+<div class="header">
+<p>
+Next: <a href="#Searching" accesskey="n" rel="next">Searching</a>, Previous: <a href="#Readline-Killing-Commands" accesskey="p" rel="prev">Readline Killing Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Readline-Arguments-1"></a>
+<h4 class="subsection">8.2.4 Readline Arguments</h4>
+
+<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 &lsquo;<samp>M-- C-k</samp>&rsquo;.
+</p>
+<p>The general way to pass numeric arguments to a command is to type meta
+digits before the command. If the first &lsquo;digit&rsquo; typed is a minus
+sign (&lsquo;<samp>-</samp>&rsquo;), 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 &lsquo;<samp>M-1 0 C-d</samp>&rsquo;,
+which will delete the next ten characters on the input line.
+</p>
+<hr>
+<a name="Searching"></a>
+<div class="header">
+<p>
+Previous: <a href="#Readline-Arguments" accesskey="p" rel="prev">Readline Arguments</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Searching-for-Commands-in-the-History"></a>
+<h4 class="subsection">8.2.5 Searching for Commands in the History</h4>
+
+<p>Readline provides commands for searching through the command history
+(see <a href="#Bash-History-Facilities">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 <tt class="key">ESC</tt> 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 <tt class="key">RET</tt> 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>
+<hr>
+<a name="Readline-Init-File"></a>
+<div class="header">
+<p>
+Next: <a href="#Bindable-Readline-Commands" accesskey="n" rel="next">Bindable Readline Commands</a>, Previous: <a href="#Readline-Interaction" accesskey="p" rel="prev">Readline Interaction</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Readline-Init-File-1"></a>
+<h3 class="section">8.3 Readline Init File</h3>
+<a name="index-initialization-file_002c-readline"></a>
+
+<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 <samp>~/.inputrc</samp>. If that
+file does not exist or cannot be read, the ultimate default is
+<samp>/etc/inputrc</samp>.
+</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>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Readline-Init-File-Syntax" accesskey="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>
+<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
+
+</pre></th></tr><tr><td align="left" valign="top">&bull; <a href="#Conditional-Init-Constructs" accesskey="2">Conditional Init Constructs</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Conditional key bindings in the inputrc file.
+</td></tr>
+<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
+
+</pre></th></tr><tr><td align="left" valign="top">&bull; <a href="#Sample-Init-File" accesskey="3">Sample Init File</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">An example inputrc file.
+</td></tr>
+</table>
+
+<hr>
+<a name="Readline-Init-File-Syntax"></a>
+<div class="header">
+<p>
+Next: <a href="#Conditional-Init-Constructs" accesskey="n" rel="next">Conditional Init Constructs</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Readline-Init-File-Syntax-1"></a>
+<h4 class="subsection">8.3.1 Readline Init File Syntax</h4>
+
+<p>There are only a few basic constructs allowed in the
+Readline init file. Blank lines are ignored.
+Lines beginning with a &lsquo;<samp>#</samp>&rsquo; are comments.
+Lines beginning with a &lsquo;<samp>$</samp>&rsquo; indicate conditional
+constructs (see <a href="#Conditional-Init-Constructs">Conditional Init Constructs</a>). Other lines
+denote variable settings and key bindings.
+</p>
+<dl compact="compact">
+<dt>Variable Settings</dt>
+<dd><p>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>
+<div class="example">
+<pre class="example">set <var>variable</var> <var>value</var>
+</pre></div>
+
+<p>Here, for example, is how to
+change from the default Emacs-like key binding to use
+<code>vi</code> line editing commands:
+</p>
+<div class="example">
+<pre class="example">set editing-mode vi
+</pre></div>
+
+<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&nbsp;<span class="nolinebreak">-V</span></code><!-- /@w --> command lists the current Readline variable names
+and values. See <a href="#Bash-Builtins">Bash Builtins</a>.
+</p>
+<p>A great deal of run-time behavior is changeable with the following
+variables.
+</p>
+<a name="index-variables_002c-readline"></a>
+<dl compact="compact">
+<dt><code>bell-style</code></dt>
+<dd><a name="index-bell_002dstyle"></a>
+<p>Controls what happens when Readline wants to ring the terminal bell.
+If set to &lsquo;<samp>none</samp>&rsquo;, Readline never rings the bell. If set to
+&lsquo;<samp>visible</samp>&rsquo;, Readline uses a visible bell if one is available.
+If set to &lsquo;<samp>audible</samp>&rsquo; (the default), Readline attempts to ring
+the terminal&rsquo;s bell.
+</p>
+</dd>
+<dt><code>bind-tty-special-chars</code></dt>
+<dd><a name="index-bind_002dtty_002dspecial_002dchars"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo; (the default), Readline attempts to bind the control
+characters treated specially by the kernel&rsquo;s terminal driver to their
+Readline equivalents.
+</p>
+</dd>
+<dt><code>blink-matching-paren</code></dt>
+<dd><a name="index-blink_002dmatching_002dparen"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline attempts to briefly move the cursor to an
+opening parenthesis when a closing parenthesis is inserted. The default
+is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>colored-completion-prefix</code></dt>
+<dd><a name="index-colored_002dcompletion_002dprefix"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, when listing completions, Readline displays the
+common prefix of the set of possible completions using a different color.
+The color definitions are taken from the value of the <code>LS_COLORS</code>
+environment variable.
+The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>colored-stats</code></dt>
+<dd><a name="index-colored_002dstats"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline displays possible completions using different
+colors to indicate their file type.
+The color definitions are taken from the value of the <code>LS_COLORS</code>
+environment variable.
+The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>comment-begin</code></dt>
+<dd><a name="index-comment_002dbegin"></a>
+<p>The string to insert at the beginning of the line when the
+<code>insert-comment</code> command is executed. The default value
+is <code>&quot;#&quot;</code>.
+</p>
+</dd>
+<dt><code>completion-display-width</code></dt>
+<dd><a name="index-completion_002ddisplay_002dwidth"></a>
+<p>The number of screen columns used to display possible matches
+when performing completion.
+The value is ignored if it is less than 0 or greater than the terminal
+screen width.
+A value of 0 will cause matches to be displayed one per line.
+The default value is -1.
+</p>
+</dd>
+<dt><code>completion-ignore-case</code></dt>
+<dd><a name="index-completion_002dignore_002dcase"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline performs filename matching and completion
+in a case-insensitive fashion.
+The default value is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>completion-map-case</code></dt>
+<dd><a name="index-completion_002dmap_002dcase"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, and <var>completion-ignore-case</var> is enabled, Readline
+treats hyphens (&lsquo;<samp>-</samp>&rsquo;) and underscores (&lsquo;<samp>_</samp>&rsquo;) as equivalent when
+performing case-insensitive filename matching and completion.
+The default value is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>completion-prefix-display-length</code></dt>
+<dd><a name="index-completion_002dprefix_002ddisplay_002dlength"></a>
+<p>The length in characters of the common prefix of a list of possible
+completions that is displayed without modification. When set to a
+value greater than zero, common prefixes longer than this value are
+replaced with an ellipsis when displaying possible completions.
+</p>
+</dd>
+<dt><code>completion-query-items</code></dt>
+<dd><a name="index-completion_002dquery_002ditems"></a>
+<p>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>
+</dd>
+<dt><code>convert-meta</code></dt>
+<dd><a name="index-convert_002dmeta"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will convert characters with the
+eighth bit set to an <small>ASCII</small> key sequence by stripping the eighth
+bit and prefixing an <tt class="key">ESC</tt> character, converting them to a
+meta-prefixed key sequence. The default value is &lsquo;<samp>on</samp>&rsquo;, but
+will be set to &lsquo;<samp>off</samp>&rsquo; if the locale is one that contains
+eight-bit characters.
+</p>
+</dd>
+<dt><code>disable-completion</code></dt>
+<dd><a name="index-disable_002dcompletion"></a>
+<p>If set to &lsquo;<samp>On</samp>&rsquo;, 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 &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>echo-control-characters</code></dt>
+<dd><a name="index-echo_002dcontrol_002dcharacters"></a>
+<p>When set to &lsquo;<samp>on</samp>&rsquo;, on operating systems that indicate they support it,
+readline echoes a character corresponding to a signal generated from the
+keyboard. The default is &lsquo;<samp>on</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>editing-mode</code></dt>
+<dd><a name="index-editing_002dmode"></a>
+<p>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 &lsquo;<samp>emacs</samp>&rsquo; or &lsquo;<samp>vi</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>emacs-mode-string</code></dt>
+<dd><a name="index-emacs_002dmode_002dstring"></a>
+<p>If the <var>show-mode-in-prompt</var> variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when emacs editing mode is active. The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the &lsquo;<samp>\1</samp>&rsquo; and &lsquo;<samp>\2</samp>&rsquo; escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+The default is &lsquo;<samp>@</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>enable-bracketed-paste</code></dt>
+<dd><a name="index-enable_002dbracketed_002dpaste"></a>
+<p>When set to &lsquo;<samp>On</samp>&rsquo;, Readline will configure the terminal in a way
+that will enable it to insert each paste into the editing buffer as a
+single string of characters, instead of treating each character as if
+it had been read from the keyboard. This can prevent pasted characters
+from being interpreted as editing commands. The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>enable-keypad</code></dt>
+<dd><a name="index-enable_002dkeypad"></a>
+<p>When set to &lsquo;<samp>on</samp>&rsquo;, Readline will try to enable the application
+keypad when it is called. Some systems need this to enable the
+arrow keys. The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>enable-meta-key</code></dt>
+<dd><p>When set to &lsquo;<samp>on</samp>&rsquo;, Readline will try to enable any meta modifier
+key the terminal claims to support when it is called. On many terminals,
+the meta key is used to send eight-bit characters.
+The default is &lsquo;<samp>on</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>expand-tilde</code></dt>
+<dd><a name="index-expand_002dtilde"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, tilde expansion is performed when Readline
+attempts word completion. The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>history-preserve-point</code></dt>
+<dd><a name="index-history_002dpreserve_002dpoint"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, the history code attempts to place the point (the
+current cursor position) at the
+same location on each history line retrieved with <code>previous-history</code>
+or <code>next-history</code>. The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>history-size</code></dt>
+<dd><a name="index-history_002dsize"></a>
+<p>Set the maximum number of history entries saved in the history list.
+If set to zero, any existing history entries are deleted and no new entries
+are saved.
+If set to a value less than zero, the number of history entries is not
+limited.
+By default, the number of history entries is not limited.
+If an attempt is made to set <var>history-size</var> to a non-numeric value,
+the maximum number of history entries will be set to 500.
+</p>
+</dd>
+<dt><code>horizontal-scroll-mode</code></dt>
+<dd><a name="index-horizontal_002dscroll_002dmode"></a>
+<p>This variable can be set to either &lsquo;<samp>on</samp>&rsquo; or &lsquo;<samp>off</samp>&rsquo;. Setting it
+to &lsquo;<samp>on</samp>&rsquo; 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 &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>input-meta</code></dt>
+<dd><a name="index-input_002dmeta"></a>
+<a name="index-meta_002dflag"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, 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 &lsquo;<samp>off</samp>&rsquo;, but Readline will set it to &lsquo;<samp>on</samp>&rsquo; if the
+locale contains eight-bit characters.
+The name <code>meta-flag</code> is a synonym for this variable.
+</p>
+</dd>
+<dt><code>isearch-terminators</code></dt>
+<dd><a name="index-isearch_002dterminators"></a>
+<p>The string of characters that should terminate an incremental search without
+subsequently executing the character as a command (see <a href="#Searching">Searching</a>).
+If this variable has not been given a value, the characters <tt class="key">ESC</tt> and
+<kbd>C-J</kbd> will terminate an incremental search.
+</p>
+</dd>
+<dt><code>keymap</code></dt>
+<dd><a name="index-keymap"></a>
+<p>Sets Readline&rsquo;s idea of the current keymap for key binding commands.
+Built-in <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>vi-move</code> is also a
+synonym); <code>emacs</code> is equivalent to <code>emacs-standard</code>.
+Applications may add additional names.
+The default value is <code>emacs</code>.
+The value of the <code>editing-mode</code> variable also affects the
+default keymap.
+</p>
+</dd>
+<dt><code>keyseq-timeout</code></dt>
+<dd><p>Specifies the duration Readline will wait for a character when reading an
+ambiguous key sequence (one that can form a complete key sequence using
+the input read so far, or can take additional input to complete a longer
+key sequence).
+If no input is received within the timeout, Readline will use the shorter
+but complete key sequence.
+Readline uses this value to determine whether or not input is
+available on the current input source (<code>rl_instream</code> by default).
+The value is specified in milliseconds, so a value of 1000 means that
+Readline will wait one second for additional input.
+If this variable is set to a value less than or equal to zero, or to a
+non-numeric value, Readline will wait until another key is pressed to
+decide which key sequence to complete.
+The default value is <code>500</code>.
+</p>
+</dd>
+<dt><code>mark-directories</code></dt>
+<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, completed directory names have a slash
+appended. The default is &lsquo;<samp>on</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>mark-modified-lines</code></dt>
+<dd><a name="index-mark_002dmodified_002dlines"></a>
+<p>This variable, when set to &lsquo;<samp>on</samp>&rsquo;, causes Readline to display an
+asterisk (&lsquo;<samp>*</samp>&rsquo;) at the start of history lines which have been modified.
+This variable is &lsquo;<samp>off</samp>&rsquo; by default.
+</p>
+</dd>
+<dt><code>mark-symlinked-directories</code></dt>
+<dd><a name="index-mark_002dsymlinked_002ddirectories"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, completed names which are symbolic links
+to directories have a slash appended (subject to the value of
+<code>mark-directories</code>).
+The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>match-hidden-files</code></dt>
+<dd><a name="index-match_002dhidden_002dfiles"></a>
+<p>This variable, when set to &lsquo;<samp>on</samp>&rsquo;, causes Readline to match files whose
+names begin with a &lsquo;<samp>.</samp>&rsquo; (hidden files) when performing filename
+completion.
+If set to &lsquo;<samp>off</samp>&rsquo;, the leading &lsquo;<samp>.</samp>&rsquo; must be
+supplied by the user in the filename to be completed.
+This variable is &lsquo;<samp>on</samp>&rsquo; by default.
+</p>
+</dd>
+<dt><code>menu-complete-display-prefix</code></dt>
+<dd><a name="index-menu_002dcomplete_002ddisplay_002dprefix"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, menu completion displays the common prefix of the
+list of possible completions (which may be empty) before cycling through
+the list. The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>output-meta</code></dt>
+<dd><a name="index-output_002dmeta"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence.
+The default is &lsquo;<samp>off</samp>&rsquo;, but Readline will set it to &lsquo;<samp>on</samp>&rsquo; if the
+locale contains eight-bit characters.
+</p>
+</dd>
+<dt><code>page-completions</code></dt>
+<dd><a name="index-page_002dcompletions"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline uses an internal <code>more</code>-like pager
+to display a screenful of possible completions at a time.
+This variable is &lsquo;<samp>on</samp>&rsquo; by default.
+</p>
+</dd>
+<dt><code>print-completions-horizontally</code></dt>
+<dd><p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>revert-all-at-newline</code></dt>
+<dd><a name="index-revert_002dall_002dat_002dnewline"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will undo all changes to history lines
+before returning when <code>accept-line</code> is executed. By default,
+history lines may be modified and retain individual undo lists across
+calls to <code>readline</code>. The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>show-all-if-ambiguous</code></dt>
+<dd><a name="index-show_002dall_002dif_002dambiguous"></a>
+<p>This alters the default behavior of the completion functions. If
+set to &lsquo;<samp>on</samp>&rsquo;,
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+The default value is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>show-all-if-unmodified</code></dt>
+<dd><a name="index-show_002dall_002dif_002dunmodified"></a>
+<p>This alters the default behavior of the completion functions in
+a fashion similar to <var>show-all-if-ambiguous</var>.
+If set to &lsquo;<samp>on</samp>&rsquo;,
+words which have more than one possible completion without any
+possible partial completion (the possible completions don&rsquo;t share
+a common prefix) cause the matches to be listed immediately instead
+of ringing the bell.
+The default value is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>show-mode-in-prompt</code></dt>
+<dd><a name="index-show_002dmode_002din_002dprompt"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, add a string to the beginning of the prompt
+indicating the editing mode: emacs, vi command, or vi insertion.
+The mode strings are user-settable (e.g., <var>emacs-mode-string</var>).
+The default value is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>skip-completed-text</code></dt>
+<dd><a name="index-skip_002dcompleted_002dtext"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, this alters the default completion behavior when
+inserting a single match into the line. It&rsquo;s only active when
+performing completion in the middle of a word. If enabled, readline
+does not insert characters from the completion that match characters
+after point in the word being completed, so portions of the word
+following the cursor are not duplicated.
+For instance, if this is enabled, attempting completion when the cursor
+is after the &lsquo;<samp>e</samp>&rsquo; in &lsquo;<samp>Makefile</samp>&rsquo; will result in &lsquo;<samp>Makefile</samp>&rsquo;
+rather than &lsquo;<samp>Makefilefile</samp>&rsquo;, assuming there is a single possible
+completion.
+The default value is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>vi-cmd-mode-string</code></dt>
+<dd><a name="index-vi_002dcmd_002dmode_002dstring"></a>
+<p>If the <var>show-mode-in-prompt</var> variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when vi editing mode is active and in command mode.
+The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the &lsquo;<samp>\1</samp>&rsquo; and &lsquo;<samp>\2</samp>&rsquo; escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+The default is &lsquo;<samp>(cmd)</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>vi-ins-mode-string</code></dt>
+<dd><a name="index-vi_002dins_002dmode_002dstring"></a>
+<p>If the <var>show-mode-in-prompt</var> variable is enabled,
+this string is displayed immediately before the last line of the primary
+prompt when vi editing mode is active and in insertion mode.
+The value is expanded like a
+key binding, so the standard set of meta- and control prefixes and
+backslash escape sequences is available.
+Use the &lsquo;<samp>\1</samp>&rsquo; and &lsquo;<samp>\2</samp>&rsquo; escapes to begin and end sequences of
+non-printing characters, which can be used to embed a terminal control
+sequence into the mode string.
+The default is &lsquo;<samp>(ins)</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>visible-stats</code></dt>
+<dd><a name="index-visible_002dstats"></a>
+<p>If set to &lsquo;<samp>on</samp>&rsquo;, a character denoting a file&rsquo;s type
+is appended to the filename when listing possible
+completions. The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+</dl>
+
+</dd>
+<dt>Key Bindings</dt>
+<dd><p>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>
+<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 &ndash; 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&nbsp;<span class="nolinebreak">-p</span></code><!-- /@w --> command displays Readline function names and
+bindings in a format that can put directly into an initialization file.
+See <a href="#Bash-Builtins">Bash Builtins</a>.
+</p>
+<dl compact="compact">
+<dt><var>keyname</var>:&nbsp;<var><span class="nolinebreak">function-name</span></var>&nbsp;or&nbsp;<var>macro</var><!-- /@w --></dt>
+<dd><p><var>keyname</var> is the name of a key spelled out in English. For example:
+</p><div class="example">
+<pre class="example">Control-u: universal-argument
+Meta-Rubout: backward-kill-word
+Control-o: &quot;&gt; output&quot;
+</pre></div>
+
+<p>In the example above, <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
+&lsquo;<samp>&gt; output</samp>&rsquo; 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>
+</dd>
+<dt>&quot;<var>keyseq</var>&quot;:&nbsp;<var><span class="nolinebreak">function-name</span></var>&nbsp;or&nbsp;<var>macro</var><!-- /@w --></dt>
+<dd><p><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 <small>GNU</small> Emacs style key
+escapes can be used, as in the following example, but the
+special character names are not recognized.
+</p>
+<div class="example">
+<pre class="example">&quot;\C-u&quot;: universal-argument
+&quot;\C-x\C-r&quot;: re-read-init-file
+&quot;\e[11~&quot;: &quot;Function Key 1&quot;
+</pre></div>
+
+<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),
+&lsquo;<samp><kbd>C-x</kbd> <kbd>C-r</kbd></samp>&rsquo; is bound to the function <code>re-read-init-file</code>,
+and &lsquo;<samp><span class="key">ESC</span> <span class="key">[</span> <span class="key">1</span> <span class="key">1</span> <span class="key">~</span></samp>&rsquo; is bound to insert
+the text &lsquo;<samp>Function Key 1</samp>&rsquo;.
+</p>
+</dd>
+</dl>
+
+<p>The following <small>GNU</small> Emacs style escape sequences are available when
+specifying key sequences:
+</p>
+<dl compact="compact">
+<dt><code><kbd>\C-</kbd></code></dt>
+<dd><p>control prefix
+</p></dd>
+<dt><code><kbd>\M-</kbd></code></dt>
+<dd><p>meta prefix
+</p></dd>
+<dt><code><kbd>\e</kbd></code></dt>
+<dd><p>an escape character
+</p></dd>
+<dt><code><kbd>\\</kbd></code></dt>
+<dd><p>backslash
+</p></dd>
+<dt><code><kbd>\&quot;</kbd></code></dt>
+<dd><p><tt class="key">&quot;</tt>, a double quotation mark
+</p></dd>
+<dt><code><kbd>\'</kbd></code></dt>
+<dd><p><tt class="key">'</tt>, a single quote or apostrophe
+</p></dd>
+</dl>
+
+<p>In addition to the <small>GNU</small> Emacs style escape sequences, a second
+set of backslash escapes is available:
+</p>
+<dl compact="compact">
+<dt><code>\a</code></dt>
+<dd><p>alert (bell)
+</p></dd>
+<dt><code>\b</code></dt>
+<dd><p>backspace
+</p></dd>
+<dt><code>\d</code></dt>
+<dd><p>delete
+</p></dd>
+<dt><code>\f</code></dt>
+<dd><p>form feed
+</p></dd>
+<dt><code>\n</code></dt>
+<dd><p>newline
+</p></dd>
+<dt><code>\r</code></dt>
+<dd><p>carriage return
+</p></dd>
+<dt><code>\t</code></dt>
+<dd><p>horizontal tab
+</p></dd>
+<dt><code>\v</code></dt>
+<dd><p>vertical tab
+</p></dd>
+<dt><code>\<var>nnn</var></code></dt>
+<dd><p>the eight-bit character whose value is the octal value <var>nnn</var>
+(one to three digits)
+</p></dd>
+<dt><code>\x<var>HH</var></code></dt>
+<dd><p>the eight-bit character whose value is the hexadecimal value <var>HH</var>
+(one or two hex digits)
+</p></dd>
+</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 &lsquo;<samp>&quot;</samp>&rsquo; and &lsquo;<samp>'</samp>&rsquo;.
+For example, the following binding will make &lsquo;<samp><kbd>C-x</kbd> \</samp>&rsquo;
+insert a single &lsquo;<samp>\</samp>&rsquo; into the line:
+</p><div class="example">
+<pre class="example">&quot;\C-x\\&quot;: &quot;\\&quot;
+</pre></div>
+
+</dd>
+</dl>
+
+<hr>
+<a name="Conditional-Init-Constructs"></a>
+<div class="header">
+<p>
+Next: <a href="#Sample-Init-File" accesskey="n" rel="next">Sample Init File</a>, Previous: <a href="#Readline-Init-File-Syntax" accesskey="p" rel="prev">Readline Init File Syntax</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Conditional-Init-Constructs-1"></a>
+<h4 class="subsection">8.3.2 Conditional Init Constructs</h4>
+
+<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>
+<dl compact="compact">
+<dt><code>$if</code></dt>
+<dd><p>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, after any comparison operator,
+extends to the end of the line;
+unless otherwise noted, no characters are required to isolate it.
+</p>
+<dl compact="compact">
+<dt><code>mode</code></dt>
+<dd><p>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 &lsquo;<samp>set keymap</samp>&rsquo; 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>
+</dd>
+<dt><code>term</code></dt>
+<dd><p>The <code>term=</code> form may be used to include terminal-specific
+key bindings, perhaps to bind the key sequences output by the
+terminal&rsquo;s function keys. The word on the right side of the
+&lsquo;<samp>=</samp>&rsquo; is tested against both the full name of the terminal and
+the portion of the terminal name before the first &lsquo;<samp>-</samp>&rsquo;. This
+allows <code>sun</code> to match both <code>sun</code> and <code>sun-cmd</code>,
+for instance.
+</p>
+</dd>
+<dt><code>version</code></dt>
+<dd><p>The <code>version</code> test may be used to perform comparisons against
+specific Readline versions.
+The <code>version</code> expands to the current Readline version.
+The set of comparison operators includes
+&lsquo;<samp>=</samp>&rsquo; (and &lsquo;<samp>==</samp>&rsquo;), &lsquo;<samp>!=</samp>&rsquo;, &lsquo;<samp>&lt;=</samp>&rsquo;, &lsquo;<samp>&gt;=</samp>&rsquo;, &lsquo;<samp>&lt;</samp>&rsquo;,
+and &lsquo;<samp>&gt;</samp>&rsquo;.
+The version number supplied on the right side of the operator consists
+of a major version number, an optional decimal point, and an optional
+minor version (e.g., &lsquo;<samp>7.1</samp>&rsquo;). If the minor version is omitted, it
+is assumed to be &lsquo;<samp>0</samp>&rsquo;.
+The operator may be separated from the string <code>version</code> and
+from the version number argument by whitespace.
+The following example sets a variable if the Readline version being used
+is 7.0 or newer:
+</p><div class="example">
+<pre class="example">$if version &gt;= 7.0
+set show-mode-in-prompt on
+$endif
+</pre></div>
+
+</dd>
+<dt><code>application</code></dt>
+<dd><p>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:
+</p><div class="example">
+<pre class="example">$if Bash
+# Quote the current or previous word
+&quot;\C-xq&quot;: &quot;\eb\&quot;\ef\&quot;&quot;
+$endif
+</pre></div>
+
+</dd>
+<dt><code>variable</code></dt>
+<dd><p>The <var>variable</var> construct provides simple equality tests for Readline
+variables and values.
+The permitted comparison operators are &lsquo;<samp>=</samp>&rsquo;, &lsquo;<samp>==</samp>&rsquo;, and &lsquo;<samp>!=</samp>&rsquo;.
+The variable name must be separated from the comparison operator by
+whitespace; the operator may be separated from the value on the right hand
+side by whitespace.
+Both string and boolean variables may be tested. Boolean variables must be
+tested against the values <var>on</var> and <var>off</var>.
+The following example is equivalent to the <code>mode=emacs</code> test described
+above:
+</p><div class="example">
+<pre class="example">$if editing-mode == emacs
+set show-mode-in-prompt on
+$endif
+</pre></div>
+</dd>
+</dl>
+
+</dd>
+<dt><code>$endif</code></dt>
+<dd><p>This command, as seen in the previous example, terminates an
+<code>$if</code> command.
+</p>
+</dd>
+<dt><code>$else</code></dt>
+<dd><p>Commands in this branch of the <code>$if</code> directive are executed if
+the test fails.
+</p>
+</dd>
+<dt><code>$include</code></dt>
+<dd><p>This directive takes a single filename as an argument and reads commands
+and bindings from that file.
+For example, the following directive reads from <samp>/etc/inputrc</samp>:
+</p><div class="example">
+<pre class="example">$include /etc/inputrc
+</pre></div>
+</dd>
+</dl>
+
+<hr>
+<a name="Sample-Init-File"></a>
+<div class="header">
+<p>
+Previous: <a href="#Conditional-Init-Constructs" accesskey="p" rel="prev">Conditional Init Constructs</a>, Up: <a href="#Readline-Init-File" accesskey="u" rel="up">Readline Init File</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Sample-Init-File-1"></a>
+<h4 class="subsection">8.3.3 Sample Init File</h4>
+
+<p>Here is an example of an <var>inputrc</var> file. This illustrates key
+binding, variable assignment, and conditional syntax.
+</p>
+<div class="example">
+<pre class="example"># 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 system-wide 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
+#
+#&quot;\M-OD&quot;: backward-char
+#&quot;\M-OC&quot;: forward-char
+#&quot;\M-OA&quot;: previous-history
+#&quot;\M-OB&quot;: next-history
+#
+# Arrow keys in ANSI mode
+#
+&quot;\M-[D&quot;: backward-char
+&quot;\M-[C&quot;: forward-char
+&quot;\M-[A&quot;: previous-history
+&quot;\M-[B&quot;: next-history
+#
+# Arrow keys in 8 bit keypad mode
+#
+#&quot;\M-\C-OD&quot;: backward-char
+#&quot;\M-\C-OC&quot;: forward-char
+#&quot;\M-\C-OA&quot;: previous-history
+#&quot;\M-\C-OB&quot;: next-history
+#
+# Arrow keys in 8 bit ANSI mode
+#
+#&quot;\M-\C-[D&quot;: backward-char
+#&quot;\M-\C-[C&quot;: forward-char
+#&quot;\M-\C-[A&quot;: previous-history
+#&quot;\M-\C-[B&quot;: 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
+&quot;\C-xp&quot;: &quot;PATH=${PATH}\e\C-e\C-a\ef\C-f&quot;
+# prepare to type a quoted word --
+# insert open and close double quotes
+# and move to just after the open quote
+&quot;\C-x\&quot;&quot;: &quot;\&quot;\&quot;\C-b&quot;
+# insert a backslash (testing backslash escapes
+# in sequences and macros)
+&quot;\C-x\\&quot;: &quot;\\&quot;
+# Quote the current or previous word
+&quot;\C-xq&quot;: &quot;\eb\&quot;\ef\&quot;&quot;
+# Add a binding to refresh the line, which is unbound
+&quot;\C-xr&quot;: redraw-current-line
+# Edit variable on current line.
+&quot;\M-\C-v&quot;: &quot;\C-a\C-k$\C-y\M-\C-e\C-a\C-y=&quot;
+$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
+&quot;\C-xg&quot;: &quot;get \M-?&quot;
+&quot;\C-xt&quot;: &quot;put \M-?&quot;
+&quot;\M-.&quot;: yank-last-arg
+$endif
+</pre></div>
+
+<hr>
+<a name="Bindable-Readline-Commands"></a>
+<div class="header">
+<p>
+Next: <a href="#Readline-vi-Mode" accesskey="n" rel="next">Readline vi Mode</a>, Previous: <a href="#Readline-Init-File" accesskey="p" rel="prev">Readline Init File</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bindable-Readline-Commands-1"></a>
+<h3 class="section">8.4 Bindable Readline Commands</h3>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Commands-For-Moving" accesskey="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">&bull; <a href="#Commands-For-History" accesskey="2">Commands For History</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Getting at previous lines.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Commands-For-Text" accesskey="3">Commands For Text</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Commands for changing text.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Commands-For-Killing" accesskey="4">Commands For Killing</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Commands for killing and yanking.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Numeric-Arguments" accesskey="5">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">&bull; <a href="#Commands-For-Completion" accesskey="6">Commands For Completion</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">&bull; <a href="#Keyboard-Macros" accesskey="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">&bull; <a href="#Miscellaneous-Commands" accesskey="8">Miscellaneous Commands</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Other miscellaneous commands.
+</td></tr>
+</table>
+
+<p>This section describes Readline commands that may be bound to key
+sequences.
+You can list your key bindings by executing
+<code>bind&nbsp;<span class="nolinebreak">-P</span></code><!-- /@w --> or, for a more terse format, suitable for an
+<var>inputrc</var> file, <code>bind&nbsp;<span class="nolinebreak">-p</span></code><!-- /@w -->. (See <a href="#Bash-Builtins">Bash Builtins</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>
+<hr>
+<a name="Commands-For-Moving"></a>
+<div class="header">
+<p>
+Next: <a href="#Commands-For-History" accesskey="n" rel="next">Commands For History</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Commands-For-Moving-1"></a>
+<h4 class="subsection">8.4.1 Commands For Moving</h4>
+<dl compact="compact">
+<dt><code>beginning-of-line (C-a)</code>
+<a name="index-beginning_002dof_002dline-_0028C_002da_0029"></a>
+</dt>
+<dd><p>Move to the start of the current line.
+</p>
+</dd>
+<dt><code>end-of-line (C-e)</code>
+<a name="index-end_002dof_002dline-_0028C_002de_0029"></a>
+</dt>
+<dd><p>Move to the end of the line.
+</p>
+</dd>
+<dt><code>forward-char (C-f)</code>
+<a name="index-forward_002dchar-_0028C_002df_0029"></a>
+</dt>
+<dd><p>Move forward a character.
+</p>
+</dd>
+<dt><code>backward-char (C-b)</code>
+<a name="index-backward_002dchar-_0028C_002db_0029"></a>
+</dt>
+<dd><p>Move back a character.
+</p>
+</dd>
+<dt><code>forward-word (M-f)</code>
+<a name="index-forward_002dword-_0028M_002df_0029"></a>
+</dt>
+<dd><p>Move forward to the end of the next word.
+Words are composed of letters and digits.
+</p>
+</dd>
+<dt><code>backward-word (M-b)</code>
+<a name="index-backward_002dword-_0028M_002db_0029"></a>
+</dt>
+<dd><p>Move back to the start of the current or previous word.
+Words are composed of letters and digits.
+</p>
+</dd>
+<dt><code>shell-forward-word ()</code>
+<a name="index-shell_002dforward_002dword-_0028_0029"></a>
+</dt>
+<dd><p>Move forward to the end of the next word.
+Words are delimited by non-quoted shell metacharacters.
+</p>
+</dd>
+<dt><code>shell-backward-word ()</code>
+<a name="index-shell_002dbackward_002dword-_0028_0029"></a>
+</dt>
+<dd><p>Move back to the start of the current or previous word.
+Words are delimited by non-quoted shell metacharacters.
+</p>
+</dd>
+<dt><code>previous-screen-line ()</code>
+<a name="index-previous_002dscreen_002dline-_0028_0029"></a>
+</dt>
+<dd><p>Attempt to move point to the same physical screen column on the previous
+physical screen line. This will not have the desired effect if the current
+Readline line does not take up more than one physical line or if point is not
+greater than the length of the prompt plus the screen width.
+</p>
+</dd>
+<dt><code>next-screen-line ()</code>
+<a name="index-next_002dscreen_002dline-_0028_0029"></a>
+</dt>
+<dd><p>Attempt to move point to the same physical screen column on the next
+physical screen line. This will not have the desired effect if the current
+Readline line does not take up more than one physical line or if the length
+of the current Readline line is not greater than the length of the prompt
+plus the screen width.
+</p>
+</dd>
+<dt><code>clear-screen (C-l)</code>
+<a name="index-clear_002dscreen-_0028C_002dl_0029"></a>
+</dt>
+<dd><p>Clear the screen and redraw the current line,
+leaving the current line at the top of the screen.
+</p>
+</dd>
+<dt><code>redraw-current-line ()</code>
+<a name="index-redraw_002dcurrent_002dline-_0028_0029"></a>
+</dt>
+<dd><p>Refresh the current line. By default, this is unbound.
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="Commands-For-History"></a>
+<div class="header">
+<p>
+Next: <a href="#Commands-For-Text" accesskey="n" rel="next">Commands For Text</a>, Previous: <a href="#Commands-For-Moving" accesskey="p" rel="prev">Commands For Moving</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Commands-For-Manipulating-The-History"></a>
+<h4 class="subsection">8.4.2 Commands For Manipulating The History</h4>
+
+<dl compact="compact">
+<dt><code>accept-line (Newline or Return)</code>
+<a name="index-accept_002dline-_0028Newline-or-Return_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>previous-history (C-p)</code>
+<a name="index-previous_002dhistory-_0028C_002dp_0029"></a>
+</dt>
+<dd><p>Move &lsquo;back&rsquo; through the history list, fetching the previous command.
+</p>
+</dd>
+<dt><code>next-history (C-n)</code>
+<a name="index-next_002dhistory-_0028C_002dn_0029"></a>
+</dt>
+<dd><p>Move &lsquo;forward&rsquo; through the history list, fetching the next command.
+</p>
+</dd>
+<dt><code>beginning-of-history (M-&lt;)</code>
+<a name="index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"></a>
+</dt>
+<dd><p>Move to the first line in the history.
+</p>
+</dd>
+<dt><code>end-of-history (M-&gt;)</code>
+<a name="index-end_002dof_002dhistory-_0028M_002d_003e_0029"></a>
+</dt>
+<dd><p>Move to the end of the input history, i.e., the line currently
+being entered.
+</p>
+</dd>
+<dt><code>reverse-search-history (C-r)</code>
+<a name="index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"></a>
+</dt>
+<dd><p>Search backward starting at the current line and moving &lsquo;up&rsquo; through
+the history as necessary. This is an incremental search.
+</p>
+</dd>
+<dt><code>forward-search-history (C-s)</code>
+<a name="index-forward_002dsearch_002dhistory-_0028C_002ds_0029"></a>
+</dt>
+<dd><p>Search forward starting at the current line and moving &lsquo;down&rsquo; through
+the history as necessary. This is an incremental search.
+</p>
+</dd>
+<dt><code>non-incremental-reverse-search-history (M-p)</code>
+<a name="index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"></a>
+</dt>
+<dd><p>Search backward starting at the current line and moving &lsquo;up&rsquo;
+through the history as necessary using a non-incremental search
+for a string supplied by the user.
+The search string may match anywhere in a history line.
+</p>
+</dd>
+<dt><code>non-incremental-forward-search-history (M-n)</code>
+<a name="index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"></a>
+</dt>
+<dd><p>Search forward starting at the current line and moving &lsquo;down&rsquo;
+through the history as necessary using a non-incremental search
+for a string supplied by the user.
+The search string may match anywhere in a history line.
+</p>
+</dd>
+<dt><code>history-search-forward ()</code>
+<a name="index-history_002dsearch_002dforward-_0028_0029"></a>
+</dt>
+<dd><p>Search forward through the history for the string of characters
+between the start of the current line and the point.
+The search string must match at the beginning of a history line.
+This is a non-incremental search.
+By default, this command is unbound.
+</p>
+</dd>
+<dt><code>history-search-backward ()</code>
+<a name="index-history_002dsearch_002dbackward-_0028_0029"></a>
+</dt>
+<dd><p>Search backward through the history for the string of characters
+between the start of the current line and the point.
+The search string must match at the beginning of a history line.
+This is a non-incremental search.
+By default, this command is unbound.
+</p>
+</dd>
+<dt><code>history-substring-search-forward ()</code>
+<a name="index-history_002dsubstring_002dsearch_002dforward-_0028_0029"></a>
+</dt>
+<dd><p>Search forward through the history for the string of characters
+between the start of the current line and the point.
+The search string may match anywhere in a history line.
+This is a non-incremental search.
+By default, this command is unbound.
+</p>
+</dd>
+<dt><code>history-substring-search-backward ()</code>
+<a name="index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"></a>
+</dt>
+<dd><p>Search backward through the history for the string of characters
+between the start of the current line and the point.
+The search string may match anywhere in a history line.
+This is a non-incremental search.
+By default, this command is unbound.
+</p>
+</dd>
+<dt><code>yank-nth-arg (M-C-y)</code>
+<a name="index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"></a>
+</dt>
+<dd><p>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 &lsquo;<samp>!<var>n</var></samp>&rsquo; history expansion had been specified.
+</p>
+</dd>
+<dt><code>yank-last-arg (M-. or M-_)</code>
+<a name="index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"></a>
+</dt>
+<dd><p>Insert last argument to the previous command (the last word of the
+previous history entry).
+With a numeric 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 word (or the word specified by the argument to
+the first call) of each line in turn.
+Any numeric argument supplied to these successive calls determines
+the direction to move through the history. A negative argument switches
+the direction through the history (back or forward).
+The history expansion facilities are used to extract the last argument,
+as if the &lsquo;<samp>!$</samp>&rsquo; history expansion had been specified.
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="Commands-For-Text"></a>
+<div class="header">
+<p>
+Next: <a href="#Commands-For-Killing" accesskey="n" rel="next">Commands For Killing</a>, Previous: <a href="#Commands-For-History" accesskey="p" rel="prev">Commands For History</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Commands-For-Changing-Text"></a>
+<h4 class="subsection">8.4.3 Commands For Changing Text</h4>
+
+<dl compact="compact">
+<dt><code><i>end-of-file</i> (usually C-d)</code>
+<a name="index-end_002dof_002dfile-_0028usually-C_002dd_0029"></a>
+</dt>
+<dd><p>The character indicating end-of-file as set, for example, by
+<code>stty</code>. If this character is read when there are no characters
+on the line, and point is at the beginning of the line, Readline
+interprets it as the end of input and returns <small>EOF</small>.
+</p>
+</dd>
+<dt><code>delete-char (C-d)</code>
+<a name="index-delete_002dchar-_0028C_002dd_0029"></a>
+</dt>
+<dd><p>Delete the character at point. If this function is bound to the
+same character as the tty <small>EOF</small> character, as <kbd>C-d</kbd>
+commonly is, see above for the effects.
+</p>
+</dd>
+<dt><code>backward-delete-char (Rubout)</code>
+<a name="index-backward_002ddelete_002dchar-_0028Rubout_0029"></a>
+</dt>
+<dd><p>Delete the character behind the cursor. A numeric argument means
+to kill the characters instead of deleting them.
+</p>
+</dd>
+<dt><code>forward-backward-delete-char ()</code>
+<a name="index-forward_002dbackward_002ddelete_002dchar-_0028_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>quoted-insert (C-q or C-v)</code>
+<a name="index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"></a>
+</dt>
+<dd><p>Add the next character typed to the line verbatim. This is
+how to insert key sequences like <kbd>C-q</kbd>, for example.
+</p>
+
+</dd>
+<dt><code>self-insert (a, b, A, 1, !, &hellip;)</code>
+<a name="index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"></a>
+</dt>
+<dd><p>Insert yourself.
+</p>
+</dd>
+<dt><code>bracketed-paste-begin ()</code>
+<a name="index-bracketed_002dpaste_002dbegin-_0028_0029"></a>
+</dt>
+<dd><p>This function is intended to be bound to the &quot;bracketed paste&quot; escape
+sequence sent by some terminals, and such a binding is assigned by default.
+It allows Readline to insert the pasted text as a single unit without treating
+each character as if it had been read from the keyboard. The characters
+are inserted as if each one was bound to <code>self-insert</code> instead of
+executing any editing commands.
+</p>
+</dd>
+<dt><code>transpose-chars (C-t)</code>
+<a name="index-transpose_002dchars-_0028C_002dt_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>transpose-words (M-t)</code>
+<a name="index-transpose_002dwords-_0028M_002dt_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>upcase-word (M-u)</code>
+<a name="index-upcase_002dword-_0028M_002du_0029"></a>
+</dt>
+<dd><p>Uppercase the current (or following) word. With a negative argument,
+uppercase the previous word, but do not move the cursor.
+</p>
+</dd>
+<dt><code>downcase-word (M-l)</code>
+<a name="index-downcase_002dword-_0028M_002dl_0029"></a>
+</dt>
+<dd><p>Lowercase the current (or following) word. With a negative argument,
+lowercase the previous word, but do not move the cursor.
+</p>
+</dd>
+<dt><code>capitalize-word (M-c)</code>
+<a name="index-capitalize_002dword-_0028M_002dc_0029"></a>
+</dt>
+<dd><p>Capitalize the current (or following) word. With a negative argument,
+capitalize the previous word, but do not move the cursor.
+</p>
+</dd>
+<dt><code>overwrite-mode ()</code>
+<a name="index-overwrite_002dmode-_0028_0029"></a>
+</dt>
+<dd><p>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>
+<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>
+</dd>
+</dl>
+
+<hr>
+<a name="Commands-For-Killing"></a>
+<div class="header">
+<p>
+Next: <a href="#Numeric-Arguments" accesskey="n" rel="next">Numeric Arguments</a>, Previous: <a href="#Commands-For-Text" accesskey="p" rel="prev">Commands For Text</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Killing-And-Yanking"></a>
+<h4 class="subsection">8.4.4 Killing And Yanking</h4>
+
+<dl compact="compact">
+<dt><code>kill-line (C-k)</code>
+<a name="index-kill_002dline-_0028C_002dk_0029"></a>
+</dt>
+<dd><p>Kill the text from point to the end of the line.
+</p>
+</dd>
+<dt><code>backward-kill-line (C-x Rubout)</code>
+<a name="index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"></a>
+</dt>
+<dd><p>Kill backward from the cursor to the beginning of the current line.
+</p>
+</dd>
+<dt><code>unix-line-discard (C-u)</code>
+<a name="index-unix_002dline_002ddiscard-_0028C_002du_0029"></a>
+</dt>
+<dd><p>Kill backward from the cursor to the beginning of the current line.
+</p>
+</dd>
+<dt><code>kill-whole-line ()</code>
+<a name="index-kill_002dwhole_002dline-_0028_0029"></a>
+</dt>
+<dd><p>Kill all characters on the current line, no matter where point is.
+By default, this is unbound.
+</p>
+</dd>
+<dt><code>kill-word (M-d)</code>
+<a name="index-kill_002dword-_0028M_002dd_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>backward-kill-word (M-<span class="key">DEL</span>)</code>
+<a name="index-backward_002dkill_002dword-_0028M_002dDEL_0029"></a>
+</dt>
+<dd><p>Kill the word behind point.
+Word boundaries are the same as <code>backward-word</code>.
+</p>
+</dd>
+<dt><code>shell-kill-word ()</code>
+<a name="index-shell_002dkill_002dword-_0028_0029"></a>
+</dt>
+<dd><p>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>shell-forward-word</code>.
+</p>
+</dd>
+<dt><code>shell-backward-kill-word ()</code>
+<a name="index-shell_002dbackward_002dkill_002dword-_0028_0029"></a>
+</dt>
+<dd><p>Kill the word behind point.
+Word boundaries are the same as <code>shell-backward-word</code>.
+</p>
+</dd>
+<dt><code>unix-word-rubout (C-w)</code>
+<a name="index-unix_002dword_002drubout-_0028C_002dw_0029"></a>
+</dt>
+<dd><p>Kill the word behind point, using white space as a word boundary.
+The killed text is saved on the kill-ring.
+</p>
+</dd>
+<dt><code>unix-filename-rubout ()</code>
+<a name="index-unix_002dfilename_002drubout-_0028_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>delete-horizontal-space ()</code>
+<a name="index-delete_002dhorizontal_002dspace-_0028_0029"></a>
+</dt>
+<dd><p>Delete all spaces and tabs around point. By default, this is unbound.
+</p>
+</dd>
+<dt><code>kill-region ()</code>
+<a name="index-kill_002dregion-_0028_0029"></a>
+</dt>
+<dd><p>Kill the text in the current region.
+By default, this command is unbound.
+</p>
+</dd>
+<dt><code>copy-region-as-kill ()</code>
+<a name="index-copy_002dregion_002das_002dkill-_0028_0029"></a>
+</dt>
+<dd><p>Copy the text in the region to the kill buffer, so it can be yanked
+right away. By default, this command is unbound.
+</p>
+</dd>
+<dt><code>copy-backward-word ()</code>
+<a name="index-copy_002dbackward_002dword-_0028_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>copy-forward-word ()</code>
+<a name="index-copy_002dforward_002dword-_0028_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>yank (C-y)</code>
+<a name="index-yank-_0028C_002dy_0029"></a>
+</dt>
+<dd><p>Yank the top of the kill ring into the buffer at point.
+</p>
+</dd>
+<dt><code>yank-pop (M-y)</code>
+<a name="index-yank_002dpop-_0028M_002dy_0029"></a>
+</dt>
+<dd><p>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>.
+</p></dd>
+</dl>
+
+<hr>
+<a name="Numeric-Arguments"></a>
+<div class="header">
+<p>
+Next: <a href="#Commands-For-Completion" accesskey="n" rel="next">Commands For Completion</a>, Previous: <a href="#Commands-For-Killing" accesskey="p" rel="prev">Commands For Killing</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Specifying-Numeric-Arguments"></a>
+<h4 class="subsection">8.4.5 Specifying Numeric Arguments</h4>
+<dl compact="compact">
+<dt><code>digit-argument (<kbd>M-0</kbd>, <kbd>M-1</kbd>, &hellip; <kbd>M--</kbd>)</code>
+<a name="index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"></a>
+</dt>
+<dd><p>Add this digit to the argument already accumulating, or start a new
+argument. <kbd>M--</kbd> starts a negative argument.
+</p>
+</dd>
+<dt><code>universal-argument ()</code>
+<a name="index-universal_002dargument-_0028_0029"></a>
+</dt>
+<dd><p>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 nor 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.
+</p></dd>
+</dl>
+
+<hr>
+<a name="Commands-For-Completion"></a>
+<div class="header">
+<p>
+Next: <a href="#Keyboard-Macros" accesskey="n" rel="next">Keyboard Macros</a>, Previous: <a href="#Numeric-Arguments" accesskey="p" rel="prev">Numeric Arguments</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Letting-Readline-Type-For-You"></a>
+<h4 class="subsection">8.4.6 Letting Readline Type For You</h4>
+
+<dl compact="compact">
+<dt><code>complete (<span class="key">TAB</span>)</code>
+<a name="index-complete-_0028TAB_0029"></a>
+</dt>
+<dd><p>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 &lsquo;<samp>$</samp>&rsquo;), username (if the text begins with
+&lsquo;<samp>~</samp>&rsquo;), hostname (if the text begins with &lsquo;<samp>@</samp>&rsquo;), or
+command (including aliases and functions) in turn. If none
+of these produces a match, filename completion is attempted.
+</p>
+</dd>
+<dt><code>possible-completions (M-?)</code>
+<a name="index-possible_002dcompletions-_0028M_002d_003f_0029"></a>
+</dt>
+<dd><p>List the possible completions of the text before point.
+When displaying completions, Readline sets the number of columns used
+for display to the value of <code>completion-display-width</code>, the value of
+the environment variable <code>COLUMNS</code>, or the screen width, in that order.
+</p>
+</dd>
+<dt><code>insert-completions (M-*)</code>
+<a name="index-insert_002dcompletions-_0028M_002d_002a_0029"></a>
+</dt>
+<dd><p>Insert all completions of the text before point that would have
+been generated by <code>possible-completions</code>.
+</p>
+</dd>
+<dt><code>menu-complete ()</code>
+<a name="index-menu_002dcomplete-_0028_0029"></a>
+</dt>
+<dd><p>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 <tt class="key">TAB</tt>, but is unbound
+by default.
+</p>
+</dd>
+<dt><code>menu-complete-backward ()</code>
+<a name="index-menu_002dcomplete_002dbackward-_0028_0029"></a>
+</dt>
+<dd><p>Identical to <code>menu-complete</code>, but moves backward through the list
+of possible completions, as if <code>menu-complete</code> had been given a
+negative argument.
+</p>
+</dd>
+<dt><code>delete-char-or-list ()</code>
+<a name="index-delete_002dchar_002dor_002dlist-_0028_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>complete-filename (M-/)</code>
+<a name="index-complete_002dfilename-_0028M_002d_002f_0029"></a>
+</dt>
+<dd><p>Attempt filename completion on the text before point.
+</p>
+</dd>
+<dt><code>possible-filename-completions (C-x /)</code>
+<a name="index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"></a>
+</dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a filename.
+</p>
+</dd>
+<dt><code>complete-username (M-~)</code>
+<a name="index-complete_002dusername-_0028M_002d_007e_0029"></a>
+</dt>
+<dd><p>Attempt completion on the text before point, treating
+it as a username.
+</p>
+</dd>
+<dt><code>possible-username-completions (C-x ~)</code>
+<a name="index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"></a>
+</dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a username.
+</p>
+</dd>
+<dt><code>complete-variable (M-$)</code>
+<a name="index-complete_002dvariable-_0028M_002d_0024_0029"></a>
+</dt>
+<dd><p>Attempt completion on the text before point, treating
+it as a shell variable.
+</p>
+</dd>
+<dt><code>possible-variable-completions (C-x $)</code>
+<a name="index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"></a>
+</dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a shell variable.
+</p>
+</dd>
+<dt><code>complete-hostname (M-@)</code>
+<a name="index-complete_002dhostname-_0028M_002d_0040_0029"></a>
+</dt>
+<dd><p>Attempt completion on the text before point, treating
+it as a hostname.
+</p>
+</dd>
+<dt><code>possible-hostname-completions (C-x @)</code>
+<a name="index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"></a>
+</dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a hostname.
+</p>
+</dd>
+<dt><code>complete-command (M-!)</code>
+<a name="index-complete_002dcommand-_0028M_002d_0021_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>possible-command-completions (C-x !)</code>
+<a name="index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"></a>
+</dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a command name.
+</p>
+</dd>
+<dt><code>dynamic-complete-history (M-<span class="key">TAB</span>)</code>
+<a name="index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"></a>
+</dt>
+<dd><p>Attempt completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+</p>
+</dd>
+<dt><code>dabbrev-expand ()</code>
+<a name="index-dabbrev_002dexpand-_0028_0029"></a>
+</dt>
+<dd><p>Attempt menu completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+</p>
+</dd>
+<dt><code>complete-into-braces (M-{)</code>
+<a name="index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"></a>
+</dt>
+<dd><p>Perform filename completion and insert the list of possible completions
+enclosed within braces so the list is available to the shell
+(see <a href="#Brace-Expansion">Brace Expansion</a>).
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="Keyboard-Macros"></a>
+<div class="header">
+<p>
+Next: <a href="#Miscellaneous-Commands" accesskey="n" rel="next">Miscellaneous Commands</a>, Previous: <a href="#Commands-For-Completion" accesskey="p" rel="prev">Commands For Completion</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Keyboard-Macros-1"></a>
+<h4 class="subsection">8.4.7 Keyboard Macros</h4>
+<dl compact="compact">
+<dt><code>start-kbd-macro (C-x ()</code>
+<a name="index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"></a>
+</dt>
+<dd><p>Begin saving the characters typed into the current keyboard macro.
+</p>
+</dd>
+<dt><code>end-kbd-macro (C-x ))</code>
+<a name="index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"></a>
+</dt>
+<dd><p>Stop saving the characters typed into the current keyboard macro
+and save the definition.
+</p>
+</dd>
+<dt><code>call-last-kbd-macro (C-x e)</code>
+<a name="index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"></a>
+</dt>
+<dd><p>Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+</p>
+</dd>
+<dt><code>print-last-kbd-macro ()</code>
+<a name="index-print_002dlast_002dkbd_002dmacro-_0028_0029"></a>
+</dt>
+<dd><p>Print the last keboard macro defined in a format suitable for the
+<var>inputrc</var> file.
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="Miscellaneous-Commands"></a>
+<div class="header">
+<p>
+Previous: <a href="#Keyboard-Macros" accesskey="p" rel="prev">Keyboard Macros</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Some-Miscellaneous-Commands"></a>
+<h4 class="subsection">8.4.8 Some Miscellaneous Commands</h4>
+<dl compact="compact">
+<dt><code>re-read-init-file (C-x C-r)</code>
+<a name="index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"></a>
+</dt>
+<dd><p>Read in the contents of the <var>inputrc</var> file, and incorporate
+any bindings or variable assignments found there.
+</p>
+</dd>
+<dt><code>abort (C-g)</code>
+<a name="index-abort-_0028C_002dg_0029"></a>
+</dt>
+<dd><p>Abort the current editing command and
+ring the terminal&rsquo;s bell (subject to the setting of
+<code>bell-style</code>).
+</p>
+</dd>
+<dt><code>do-lowercase-version (M-A, M-B, M-<var>x</var>, &hellip;)</code>
+<a name="index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"></a>
+</dt>
+<dd><p>If the metafied character <var>x</var> is upper case, run the command
+that is bound to the corresponding metafied lower case character.
+The behavior is undefined if <var>x</var> is already lower case.
+</p>
+</dd>
+<dt><code>prefix-meta (<span class="key">ESC</span>)</code>
+<a name="index-prefix_002dmeta-_0028ESC_0029"></a>
+</dt>
+<dd><p>Metafy the next character typed. This is for keyboards
+without a meta key. Typing &lsquo;<samp><span class="key">ESC</span> f</samp>&rsquo; is equivalent to typing
+<kbd>M-f</kbd>.
+</p>
+</dd>
+<dt><code>undo (C-_ or C-x C-u)</code>
+<a name="index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"></a>
+</dt>
+<dd><p>Incremental undo, separately remembered for each line.
+</p>
+</dd>
+<dt><code>revert-line (M-r)</code>
+<a name="index-revert_002dline-_0028M_002dr_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>tilde-expand (M-&amp;)</code>
+<a name="index-tilde_002dexpand-_0028M_002d_0026_0029"></a>
+</dt>
+<dd><p>Perform tilde expansion on the current word.
+</p>
+</dd>
+<dt><code>set-mark (C-@)</code>
+<a name="index-set_002dmark-_0028C_002d_0040_0029"></a>
+</dt>
+<dd><p>Set the mark to the point. If a
+numeric argument is supplied, the mark is set to that position.
+</p>
+</dd>
+<dt><code>exchange-point-and-mark (C-x C-x)</code>
+<a name="index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>character-search (C-])</code>
+<a name="index-character_002dsearch-_0028C_002d_005d_0029"></a>
+</dt>
+<dd><p>A character is read and point is moved to the next occurrence of that
+character. A negative count searches for previous occurrences.
+</p>
+</dd>
+<dt><code>character-search-backward (M-C-])</code>
+<a name="index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"></a>
+</dt>
+<dd><p>A character is read and point is moved to the previous occurrence
+of that character. A negative count searches for subsequent
+occurrences.
+</p>
+</dd>
+<dt><code>skip-csi-sequence ()</code>
+<a name="index-skip_002dcsi_002dsequence-_0028_0029"></a>
+</dt>
+<dd><p>Read enough characters to consume a multi-key sequence such as those
+defined for keys like Home and End. Such sequences begin with a
+Control Sequence Indicator (CSI), usually ESC-[. If this sequence is
+bound to &quot;\e[&quot;, keys producing such sequences will have no effect
+unless explicitly bound to a readline command, instead of inserting
+stray characters into the editing buffer. This is unbound by default,
+but usually bound to ESC-[.
+</p>
+</dd>
+<dt><code>insert-comment (M-#)</code>
+<a name="index-insert_002dcomment-_0028M_002d_0023_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>dump-functions ()</code>
+<a name="index-dump_002dfunctions-_0028_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>dump-variables ()</code>
+<a name="index-dump_002dvariables-_0028_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>dump-macros ()</code>
+<a name="index-dump_002dmacros-_0028_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>glob-complete-word (M-g)</code>
+<a name="index-glob_002dcomplete_002dword-_0028M_002dg_0029"></a>
+</dt>
+<dd><p>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>
+</dd>
+<dt><code>glob-expand-word (C-x *)</code>
+<a name="index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"></a>
+</dt>
+<dd><p>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 &lsquo;<samp>*</samp>&rsquo; is appended before
+pathname expansion.
+</p>
+</dd>
+<dt><code>glob-list-expansions (C-x g)</code>
+<a name="index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"></a>
+</dt>
+<dd><p>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 &lsquo;<samp>*</samp>&rsquo; is appended before
+pathname expansion.
+</p>
+</dd>
+<dt><code>display-shell-version (C-x C-v)</code>
+<a name="index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"></a>
+</dt>
+<dd><p>Display version information about the current instance of Bash.
+</p>
+</dd>
+<dt><code>shell-expand-line (M-C-e)</code>
+<a name="index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"></a>
+</dt>
+<dd><p>Expand the line as the shell does.
+This performs alias and history expansion as well as all of the shell
+word expansions (see <a href="#Shell-Expansions">Shell Expansions</a>).
+</p>
+</dd>
+<dt><code>history-expand-line (M-^)</code>
+<a name="index-history_002dexpand_002dline-_0028M_002d_005e_0029"></a>
+</dt>
+<dd><p>Perform history expansion on the current line.
+</p>
+</dd>
+<dt><code>magic-space ()</code>
+<a name="index-magic_002dspace-_0028_0029"></a>
+</dt>
+<dd><p>Perform history expansion on the current line and insert a space
+(see <a href="#History-Interaction">History Interaction</a>).
+</p>
+</dd>
+<dt><code>alias-expand-line ()</code>
+<a name="index-alias_002dexpand_002dline-_0028_0029"></a>
+</dt>
+<dd><p>Perform alias expansion on the current line (see <a href="#Aliases">Aliases</a>).
+</p>
+</dd>
+<dt><code>history-and-alias-expand-line ()</code>
+<a name="index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"></a>
+</dt>
+<dd><p>Perform history and alias expansion on the current line.
+</p>
+</dd>
+<dt><code>insert-last-argument (M-. or M-_)</code>
+<a name="index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"></a>
+</dt>
+<dd><p>A synonym for <code>yank-last-arg</code>.
+</p>
+</dd>
+<dt><code>operate-and-get-next (C-o)</code>
+<a name="index-operate_002dand_002dget_002dnext-_0028C_002do_0029"></a>
+</dt>
+<dd><p>Accept the current line for execution and fetch the next line
+relative to the current line from the history for editing.
+A numeric argument, if supplied, specifies the history entry to use instead
+of the current line.
+</p>
+</dd>
+<dt><code>edit-and-execute-command (C-x C-e)</code>
+<a name="index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"></a>
+</dt>
+<dd><p>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>
+
+
+</dd>
+</dl>
+
+<hr>
+<a name="Readline-vi-Mode"></a>
+<div class="header">
+<p>
+Next: <a href="#Programmable-Completion" accesskey="n" rel="next">Programmable Completion</a>, Previous: <a href="#Bindable-Readline-Commands" accesskey="p" rel="prev">Bindable Readline Commands</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Readline-vi-Mode-1"></a>
+<h3 class="section">8.5 Readline vi Mode</h3>
+
+<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 <small>POSIX</small> standard.
+</p>
+<p>In order to switch interactively between <code>emacs</code> and <code>vi</code>
+editing modes, use the &lsquo;<samp>set -o emacs</samp>&rsquo; and &lsquo;<samp>set -o vi</samp>&rsquo;
+commands (see <a href="#The-Set-Builtin">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
+&lsquo;insertion&rsquo; mode, as if you had typed an &lsquo;<samp>i</samp>&rsquo;. Pressing <tt class="key">ESC</tt>
+switches you into &lsquo;command&rsquo; mode, where you can edit the text of the
+line with the standard <code>vi</code> movement keys, move to previous
+history lines with &lsquo;<samp>k</samp>&rsquo; and subsequent lines with &lsquo;<samp>j</samp>&rsquo;, and
+so forth.
+</p>
+<hr>
+<a name="Programmable-Completion"></a>
+<div class="header">
+<p>
+Next: <a href="#Programmable-Completion-Builtins" accesskey="n" rel="next">Programmable Completion Builtins</a>, Previous: <a href="#Readline-vi-Mode" accesskey="p" rel="prev">Readline vi Mode</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Programmable-Completion-1"></a>
+<h3 class="section">8.6 Programmable Completion</h3>
+<a name="index-programmable-completion"></a>
+
+<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 <a href="#Programmable-Completion-Builtins">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 the empty string (completion attempted at the
+beginning of an empty line), any compspec defined with
+the <samp>-E</samp> option to <code>complete</code> is used.
+If the command word is a full pathname, a compspec for the full
+pathname is searched for first.
+If no compspec is found for the full pathname, an attempt is made to
+find a compspec for the portion following the final slash.
+If those searches do not result in a compspec, any compspec defined with
+the <samp>-D</samp> option to <code>complete</code> is used as the default.
+If there is no default compspec, Bash attempts alias expansion
+on the command word as a final resort, and attempts to find a compspec
+for the command word from any successful expansion
+</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 <a href="#Commands-For-Completion">Commands For Completion</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 <a href="#Bash-Variables">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 within the string, in order to provide a
+mechanism for the words to contain shell metacharacters or characters
+in the value of <code>IFS</code>.
+Each word is then expanded using
+brace expansion, tilde expansion, parameter and variable expansion,
+command substitution, and arithmetic expansion,
+as described above (see <a href="#Shell-Expansions">Shell Expansions</a>).
+The results are split using the rules described above
+(see <a href="#Word-Splitting">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 <a href="#Bash-Variables">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 ($1) is the
+name of the command whose arguments are being completed, the
+second argument ($2) is the word being completed, and the third argument
+($3) 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> and <code>compopt</code> builtins described below
+(see <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>), to generate the matches.
+It must put the possible completions in the <code>COMPREPLY</code> array
+variable, one per array element.
+</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 &lsquo;<samp>&amp;</samp>&rsquo;
+in the pattern is replaced with the text of the word being completed.
+A literal &lsquo;<samp>&amp;</samp>&rsquo; 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 &lsquo;<samp>!</samp>&rsquo; negates the pattern; in this case any completion
+not matching the pattern will be removed.
+If the <code>nocasematch</code> shell option
+(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+</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&rsquo;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>There is some support for dynamically modifying completions. This is
+most useful when used in combination with a default completion specified
+with <samp>-D</samp>. It&rsquo;s possible for shell functions executed as completion
+handlers to indicate that completion should be retried by returning an
+exit status of 124. If a shell function returns 124, and changes
+the compspec associated with the command on which completion is being
+attempted (supplied as the first argument when the function is executed),
+programmable completion restarts from the beginning, with an
+attempt to find a new compspec for that command. This allows a set of
+completions to be built dynamically as completion is attempted, rather than
+being loaded all at once.
+</p>
+<p>For instance, assuming that there is a library of compspecs, each kept in a
+file corresponding to the name of the command, the following default
+completion function would load completions dynamically:
+</p>
+<div class="example">
+<pre class="example">_completion_loader()
+{
+ . &quot;/etc/bash_completion.d/$1.sh&quot; &gt;/dev/null 2&gt;&amp;1 &amp;&amp; return 124
+}
+complete -D -F _completion_loader -o bashdefault -o default
+</pre></div>
+
+<hr>
+<a name="Programmable-Completion-Builtins"></a>
+<div class="header">
+<p>
+Next: <a href="#A-Programmable-Completion-Example" accesskey="n" rel="next">A Programmable Completion Example</a>, Previous: <a href="#Programmable-Completion" accesskey="p" rel="prev">Programmable Completion</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Programmable-Completion-Builtins-1"></a>
+<h3 class="section">8.7 Programmable Completion Builtins</h3>
+<a name="index-completion-builtins"></a>
+
+<p>Three builtin commands are available to manipulate the programmable completion
+facilities: one to specify how the arguments to a particular command are to
+be completed, and two to modify the completion as it is happening.
+</p>
+<dl compact="compact">
+<dt><code>compgen</code></dt>
+<dd><a name="index-compgen"></a>
+<div class="example">
+<pre class="example"><code>compgen [<var>option</var>] [<var>word</var>]</code>
+</pre></div>
+
+<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>
+</dd>
+<dt><code>complete</code></dt>
+<dd><a name="index-complete"></a>
+<div class="example">
+<pre class="example"><code>complete [-abcdefgjksuv] [-o <var>comp-option</var>] [-DEI] [-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> &hellip;]</code>
+<code>complete -pr [-DEI] [<var>name</var> &hellip;]</code>
+</pre></div>
+
+<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.
+The <samp>-D</samp> option indicates that other supplied options and actions should
+apply to the &ldquo;default&rdquo; command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The <samp>-E</samp> option indicates that other supplied options and actions should
+apply to &ldquo;empty&rdquo; command completion; that is, completion attempted on a
+blank line.
+The <samp>-I</samp> option indicates that other supplied options and actions should
+apply to completion on the inital non-assignment word on the line, or after a
+command delimiter such as &lsquo;<samp>;</samp>&rsquo; or &lsquo;<samp>|</samp>&rsquo;, which is usually command
+name completion.
+If multiple options are supplied, the <samp>-D</samp> option takes precedence
+over <samp>-E</samp>, and both take precedence over <samp>-I</samp>.
+If any of <samp>-D</samp>, <samp>-E</samp>, or <samp>-I</samp> are supplied, any other
+<var>name</var> arguments are ignored; these completions only apply to the case
+specified by the option.
+</p>
+<p>The process of applying these completion specifications when word completion
+is attempted is described above (see <a href="#Programmable-Completion">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>
+
+<dl compact="compact">
+<dt><code>-o <var>comp-option</var></code></dt>
+<dd><p>The <var>comp-option</var> controls several aspects of the compspec&rsquo;s behavior
+beyond the simple generation of completions.
+<var>comp-option</var> may be one of:
+</p>
+<dl compact="compact">
+<dt><code>bashdefault</code></dt>
+<dd><p>Perform the rest of the default Bash completions if the compspec
+generates no matches.
+</p>
+</dd>
+<dt><code>default</code></dt>
+<dd><p>Use Readline&rsquo;s default filename completion if the compspec generates
+no matches.
+</p>
+</dd>
+<dt><code>dirnames</code></dt>
+<dd><p>Perform directory name completion if the compspec generates no matches.
+</p>
+</dd>
+<dt><code>filenames</code></dt>
+<dd><p>Tell Readline that the compspec generates filenames, so it can perform any
+filename-specific processing (like adding a slash to directory names,
+quoting special characters, or suppressing trailing spaces).
+This option is intended to be used with shell functions specified
+with <samp>-F</samp>.
+</p>
+</dd>
+<dt><code>noquote</code></dt>
+<dd><p>Tell Readline not to quote the completed words if they are filenames
+(quoting filenames is the default).
+</p>
+</dd>
+<dt><code>nosort</code></dt>
+<dd><p>Tell Readline not to sort the list of possible completions alphabetically.
+</p>
+</dd>
+<dt><code>nospace</code></dt>
+<dd><p>Tell Readline not to append a space (the default) to words completed at
+the end of the line.
+</p>
+</dd>
+<dt><code>plusdirs</code></dt>
+<dd><p>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>
+</dd>
+</dl>
+
+</dd>
+<dt><code>-A <var>action</var></code></dt>
+<dd><p>The <var>action</var> may be one of the following to generate a list of possible
+completions:
+</p>
+<dl compact="compact">
+<dt><code>alias</code></dt>
+<dd><p>Alias names. May also be specified as <samp>-a</samp>.
+</p>
+</dd>
+<dt><code>arrayvar</code></dt>
+<dd><p>Array variable names.
+</p>
+</dd>
+<dt><code>binding</code></dt>
+<dd><p>Readline key binding names (see <a href="#Bindable-Readline-Commands">Bindable Readline Commands</a>).
+</p>
+</dd>
+<dt><code>builtin</code></dt>
+<dd><p>Names of shell builtin commands. May also be specified as <samp>-b</samp>.
+</p>
+</dd>
+<dt><code>command</code></dt>
+<dd><p>Command names. May also be specified as <samp>-c</samp>.
+</p>
+</dd>
+<dt><code>directory</code></dt>
+<dd><p>Directory names. May also be specified as <samp>-d</samp>.
+</p>
+</dd>
+<dt><code>disabled</code></dt>
+<dd><p>Names of disabled shell builtins.
+</p>
+</dd>
+<dt><code>enabled</code></dt>
+<dd><p>Names of enabled shell builtins.
+</p>
+</dd>
+<dt><code>export</code></dt>
+<dd><p>Names of exported shell variables. May also be specified as <samp>-e</samp>.
+</p>
+</dd>
+<dt><code>file</code></dt>
+<dd><p>File names. May also be specified as <samp>-f</samp>.
+</p>
+</dd>
+<dt><code>function</code></dt>
+<dd><p>Names of shell functions.
+</p>
+</dd>
+<dt><code>group</code></dt>
+<dd><p>Group names. May also be specified as <samp>-g</samp>.
+</p>
+</dd>
+<dt><code>helptopic</code></dt>
+<dd><p>Help topics as accepted by the <code>help</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>).
+</p>
+</dd>
+<dt><code>hostname</code></dt>
+<dd><p>Hostnames, as taken from the file specified by the
+<code>HOSTFILE</code> shell variable (see <a href="#Bash-Variables">Bash Variables</a>).
+</p>
+</dd>
+<dt><code>job</code></dt>
+<dd><p>Job names, if job control is active. May also be specified as <samp>-j</samp>.
+</p>
+</dd>
+<dt><code>keyword</code></dt>
+<dd><p>Shell reserved words. May also be specified as <samp>-k</samp>.
+</p>
+</dd>
+<dt><code>running</code></dt>
+<dd><p>Names of running jobs, if job control is active.
+</p>
+</dd>
+<dt><code>service</code></dt>
+<dd><p>Service names. May also be specified as <samp>-s</samp>.
+</p>
+</dd>
+<dt><code>setopt</code></dt>
+<dd><p>Valid arguments for the <samp>-o</samp> option to the <code>set</code> builtin
+(see <a href="#The-Set-Builtin">The Set Builtin</a>).
+</p>
+</dd>
+<dt><code>shopt</code></dt>
+<dd><p>Shell option names as accepted by the <code>shopt</code> builtin
+(see <a href="#Bash-Builtins">Bash Builtins</a>).
+</p>
+</dd>
+<dt><code>signal</code></dt>
+<dd><p>Signal names.
+</p>
+</dd>
+<dt><code>stopped</code></dt>
+<dd><p>Names of stopped jobs, if job control is active.
+</p>
+</dd>
+<dt><code>user</code></dt>
+<dd><p>User names. May also be specified as <samp>-u</samp>.
+</p>
+</dd>
+<dt><code>variable</code></dt>
+<dd><p>Names of all shell variables. May also be specified as <samp>-v</samp>.
+</p></dd>
+</dl>
+
+</dd>
+<dt><code>-C <var>command</var></code></dt>
+<dd><p><var>command</var> is executed in a subshell environment, and its output is
+used as the possible completions.
+</p>
+</dd>
+<dt><code>-F <var>function</var></code></dt>
+<dd><p>The shell function <var>function</var> is executed in the current shell
+environment.
+When it is executed, $1 is the name of the command whose arguments are
+being completed, $2 is the word being completed, and $3 is the word
+preceding the word being completed, as described above
+(see <a href="#Programmable-Completion">Programmable Completion</a>).
+When it finishes, the possible completions are retrieved from the value
+of the <code>COMPREPLY</code> array variable.
+</p>
+</dd>
+<dt><code>-G <var>globpat</var></code></dt>
+<dd><p>The filename expansion pattern <var>globpat</var> is expanded to generate
+the possible completions.
+</p>
+</dd>
+<dt><code>-P <var>prefix</var></code></dt>
+<dd><p><var>prefix</var> is added at the beginning of each possible completion
+after all other options have been applied.
+</p>
+</dd>
+<dt><code>-S <var>suffix</var></code></dt>
+<dd><p><var>suffix</var> is appended to each possible completion
+after all other options have been applied.
+</p>
+</dd>
+<dt><code>-W <var>wordlist</var></code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-X <var>filterpat</var></code></dt>
+<dd><p><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 &lsquo;<samp>!</samp>&rsquo; in <var>filterpat</var> negates the pattern; in this
+case, any completion not matching <var>filterpat</var> is removed.
+</p></dd>
+</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>
+</dd>
+<dt><code>compopt</code></dt>
+<dd><a name="index-compopt"></a>
+<div class="example">
+<pre class="example"><code>compopt</code> [-o <var>option</var>] [-DEI] [+o <var>option</var>] [<var>name</var>]
+</pre></div>
+<p>Modify completion options for each <var>name</var> according to the
+<var>option</var>s, or for the currently-executing completion if no <var>name</var>s
+are supplied.
+If no <var>option</var>s are given, display the completion options for each
+<var>name</var> or the current completion.
+The possible values of <var>option</var> are those valid for the <code>complete</code>
+builtin described above.
+The <samp>-D</samp> option indicates that other supplied options should
+apply to the &ldquo;default&rdquo; command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The <samp>-E</samp> option indicates that other supplied options should
+apply to &ldquo;empty&rdquo; command completion; that is, completion attempted on a
+blank line.
+The <samp>-I</samp> option indicates that other supplied options should
+apply to completion on the inital non-assignment word on the line, or after a
+command delimiter such as &lsquo;<samp>;</samp>&rsquo; or &lsquo;<samp>|</samp>&rsquo;, which is usually command
+name completion.
+</p>
+<p>If multiple options are supplied, the <samp>-D</samp> option takes precedence
+over <samp>-E</samp>, and both take precedence over <samp>-I</samp>
+</p>
+<p>The return value is true unless an invalid option is supplied, an attempt
+is made to modify the options for a <var>name</var> for which no completion
+specification exists, or an output error occurs.
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="A-Programmable-Completion-Example"></a>
+<div class="header">
+<p>
+Previous: <a href="#Programmable-Completion-Builtins" accesskey="p" rel="prev">Programmable Completion Builtins</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="A-Programmable-Completion-Example-1"></a>
+<h3 class="section">8.8 A Programmable Completion Example</h3>
+
+<p>The most common way to obtain additional completion functionality beyond
+the default actions <code>complete</code> and <code>compgen</code> provide is to use
+a shell function and bind it to a particular command using <code>complete -F</code>.
+</p>
+<p>The following function provides completions for the <code>cd</code> builtin.
+It is a reasonably good example of what shell functions must do when
+used for completion. This function uses the word passed as <code>$2</code>
+to determine the directory name to complete. You can also use the
+<code>COMP_WORDS</code> array variable; the current word is indexed by the
+<code>COMP_CWORD</code> variable.
+</p>
+<p>The function relies on the <code>complete</code> and <code>compgen</code> builtins
+to do much of the work, adding only the things that the Bash <code>cd</code>
+does beyond accepting basic directory names:
+tilde expansion (see <a href="#Tilde-Expansion">Tilde Expansion</a>),
+searching directories in <var>$CDPATH</var>, which is described above
+(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>),
+and basic support for the <code>cdable_vars</code> shell option
+(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>).
+<code>_comp_cd</code> modifies the value of <var>IFS</var> so that it contains only
+a newline to accommodate file names containing spaces and tabs &ndash;
+<code>compgen</code> prints the possible completions it generates one per line.
+</p>
+<p>Possible completions go into the <var>COMPREPLY</var> array variable, one
+completion per array element. The programmable completion system retrieves
+the completions from there when the function returns.
+</p>
+<div class="example">
+<pre class="example"># A completion function for the cd builtin
+# based on the cd completion function from the bash_completion package
+_comp_cd()
+{
+ local IFS=$' \t\n' # normalize IFS
+ local cur _skipdot _cdpath
+ local i j k
+
+ # Tilde expansion, which also expands tilde to full pathname
+ case &quot;$2&quot; in
+ \~*) eval cur=&quot;$2&quot; ;;
+ *) cur=$2 ;;
+ esac
+
+ # no cdpath or absolute pathname -- straight directory completion
+ if [[ -z &quot;${CDPATH:-}&quot; ]] || [[ &quot;$cur&quot; == @(./*|../*|/*) ]]; then
+ # compgen prints paths one per line; could also use while loop
+ IFS=$'\n'
+ COMPREPLY=( $(compgen -d -- &quot;$cur&quot;) )
+ IFS=$' \t\n'
+ # CDPATH+directories in the current directory if not in CDPATH
+ else
+ IFS=$'\n'
+ _skipdot=false
+ # preprocess CDPATH to convert null directory names to .
+ _cdpath=${CDPATH/#:/.:}
+ _cdpath=${_cdpath//::/:.:}
+ _cdpath=${_cdpath/%:/:.}
+ for i in ${_cdpath//:/$'\n'}; do
+ if [[ $i -ef . ]]; then _skipdot=true; fi
+ k=&quot;${#COMPREPLY[@]}&quot;
+ for j in $( compgen -d -- &quot;$i/$cur&quot; ); do
+ COMPREPLY[k++]=${j#$i/} # cut off directory
+ done
+ done
+ $_skipdot || COMPREPLY+=( $(compgen -d -- &quot;$cur&quot;) )
+ IFS=$' \t\n'
+ fi
+
+ # variable names if appropriate shell option set and no completions
+ if shopt -q cdable_vars &amp;&amp; [[ ${#COMPREPLY[@]} -eq 0 ]]; then
+ COMPREPLY=( $(compgen -v -- &quot;$cur&quot;) )
+ fi
+
+ return 0
+}
+</pre></div>
+
+<p>We install the completion function using the <samp>-F</samp> option to
+<code>complete</code>:
+</p>
+<div class="example">
+<pre class="example"># Tell readline to quote appropriate and append slashes to directories;
+# use the bash default completion for other arguments
+complete -o filenames -o nospace -o bashdefault -F _comp_cd cd
+</pre></div>
+
+<p>Since we&rsquo;d like Bash and Readline to take care of some
+of the other details for us, we use several other options to tell Bash
+and Readline what to do. The <samp>-o filenames</samp> option tells Readline
+that the possible completions should be treated as filenames, and quoted
+appropriately. That option will also cause Readline to append a slash to
+filenames it can determine are directories (which is why we might want to
+extend <code>_comp_cd</code> to append a slash if we&rsquo;re using directories found
+via <var>CDPATH</var>: Readline can&rsquo;t tell those completions are directories).
+The <samp>-o nospace</samp> option tells Readline to not append a space
+character to the directory name, in case we want to append to it.
+The <samp>-o bashdefault</samp> option brings in the rest of the &quot;Bash default&quot;
+completions &ndash; possible completion that Bash adds to the default Readline
+set. These include things like command name completion, variable completion
+for words beginning with &lsquo;<samp>{</samp>&rsquo;, completions containing pathname
+expansion patterns (see <a href="#Filename-Expansion">Filename Expansion</a>), and so on.
+</p>
+<p>Once installed using <code>complete</code>, <code>_comp_cd</code> will be called every
+time we attempt word completion for a <code>cd</code> command.
+</p>
+<p>Many more examples &ndash; an extensive collection of completions for most of
+the common GNU, Unix, and Linux commands &ndash; are available as part of the
+bash_completion project. This is installed by default on many GNU/Linux
+distributions. Originally written by Ian Macdonald, the project now lives
+at <a href="http://bash-completion.alioth.debian.org/">http://bash-completion.alioth.debian.org/</a>. There are ports for
+other systems such as Solaris and Mac OS X.
+</p>
+<p>An older version of the bash_completion package is distributed with bash
+in the <samp>examples/complete</samp> subdirectory.
+</p>
+<a name="index-History_002c-how-to-use"></a>
+
+<hr>
+<a name="Using-History-Interactively"></a>
+<div class="header">
+<p>
+Next: <a href="#Installing-Bash" accesskey="n" rel="next">Installing Bash</a>, Previous: <a href="#Command-Line-Editing" accesskey="p" rel="prev">Command Line Editing</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Using-History-Interactively-1"></a>
+<h2 class="chapter">9 Using History Interactively</h2>
+
+
+<p>This chapter describes how to use the <small>GNU</small> History Library
+interactively, from a user&rsquo;s standpoint.
+It should be considered a user&rsquo;s guide.
+For information on using the <small>GNU</small> History Library in other programs,
+see the <small>GNU</small> Readline Library Manual.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Bash-History-Facilities" accesskey="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">&bull; <a href="#Bash-History-Builtins" accesskey="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">&bull; <a href="#History-Interaction" accesskey="3">History Interaction</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What it feels like using History as a user.
+</td></tr>
+</table>
+
+<hr>
+<a name="Bash-History-Facilities"></a>
+<div class="header">
+<p>
+Next: <a href="#Bash-History-Builtins" accesskey="n" rel="next">Bash History Builtins</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-History-Facilities-1"></a>
+<h3 class="section">9.1 Bash History Facilities</h3>
+<a name="index-command-history"></a>
+<a name="index-history-list"></a>
+
+<p>When the <samp>-o history</samp> option to the <code>set</code> builtin
+is enabled (see <a href="#The-Set-Builtin">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 <samp>~/.bash_history</samp>).
+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 a shell with history enabled 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 <a href="#Bash-Builtins">Bash Builtins</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 unset, or set to null, a non-numeric value, or
+a numeric value less than zero, the history file is not truncated.
+</p>
+<p>If the <code>HISTTIMEFORMAT</code> is set, the time stamp information
+associated with each history entry is written to the history file,
+marked with the history comment character.
+When the history file is read, lines beginning with the history
+comment character followed immediately by a digit are interpreted
+as timestamps for the following history entry.
+</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 <a href="#Commands-For-History">Commands For 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 <a href="#The-Shopt-Builtin">The Shopt Builtin</a>, for a description of <code>shopt</code>.
+</p>
+<hr>
+<a name="Bash-History-Builtins"></a>
+<div class="header">
+<p>
+Next: <a href="#History-Interaction" accesskey="n" rel="next">History Interaction</a>, Previous: <a href="#Bash-History-Facilities" accesskey="p" rel="prev">Bash History Facilities</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Bash-History-Builtins-1"></a>
+<h3 class="section">9.2 Bash History Builtins</h3>
+<a name="index-history-builtins"></a>
+
+<p>Bash provides two builtin commands which manipulate the
+history list and history file.
+</p>
+<dl compact="compact">
+<dt><code>fc</code></dt>
+<dd><a name="index-fc"></a>
+<div class="example">
+<pre class="example"><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></div>
+
+<p>The first form selects a range of commands from <var>first</var> to
+<var>last</var> from the history list and displays or edits and re-executes
+them.
+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>.
+<var>command</var> is intepreted the same as <var>first</var> above.
+</p>
+<p>A useful alias to use with the <code>fc</code> command is <code>r='fc -s'</code>, so
+that typing &lsquo;<samp>r cc</samp>&rsquo; runs the last command beginning with <code>cc</code>
+and typing &lsquo;<samp>r</samp>&rsquo; re-executes the last command (see <a href="#Aliases">Aliases</a>).
+</p>
+</dd>
+<dt><code>history</code></dt>
+<dd><a name="index-history"></a>
+<div class="example">
+<pre class="example">history [<var>n</var>]
+history -c
+history -d <var>offset</var>
+history -d <var>start</var>-<var>end</var>
+history [-anrw] [<var>filename</var>]
+history -ps <var>arg</var>
+</pre></div>
+
+<p>With no options, display the history list with line numbers.
+Lines prefixed with a &lsquo;<samp>*</samp>&rsquo; 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>
+<dl compact="compact">
+<dt><code>-c</code></dt>
+<dd><p>Clear the history list. This may be combined
+with the other options to replace the history list completely.
+</p>
+</dd>
+<dt><code>-d <var>offset</var></code></dt>
+<dd><p>Delete the history entry at position <var>offset</var>.
+If <var>offset</var> is positive, it should be specified as it appears when
+the history is displayed.
+If <var>offset</var> is negative, it is interpreted as relative to one greater
+than the last history position, so negative indices count back from the
+end of the history, and an index of &lsquo;<samp>-1</samp>&rsquo; refers to the current
+<code>history -d</code> command.
+</p>
+</dd>
+<dt><code>-d <var>start</var>-<var>end</var></code></dt>
+<dd><p>Delete the history entries between positions <var>start</var> and <var>end</var>,
+inclusive. Positive and negative values for <var>start</var> and <var>end</var>
+are interpreted as described above.
+</p>
+</dd>
+<dt><code>-a</code></dt>
+<dd><p>Append the new history lines to the history file.
+These are history lines entered since the beginning of the current
+Bash session, but not already appended to the history file.
+</p>
+</dd>
+<dt><code>-n</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-r</code></dt>
+<dd><p>Read the history file and append its contents to
+the history list.
+</p>
+</dd>
+<dt><code>-w</code></dt>
+<dd><p>Write out the current history list to the history file.
+</p>
+</dd>
+<dt><code>-p</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>-s</code></dt>
+<dd><p>The <var>arg</var>s are added to the end of
+the history list as a single entry.
+</p>
+</dd>
+</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>
+</dd>
+</dl>
+
+<hr>
+<a name="History-Interaction"></a>
+<div class="header">
+<p>
+Previous: <a href="#Bash-History-Builtins" accesskey="p" rel="prev">Bash History Builtins</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="History-Expansion"></a>
+<h3 class="section">9.3 History Expansion</h3>
+<a name="index-history-expansion"></a>
+
+<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 is performed immediately after a complete line
+is read, before the shell breaks it into words, and is performed
+on each line individually. Bash attempts to inform the history
+expansion functions about quoting still in effect from previous lines.
+</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 &lsquo;<samp>!</samp>&rsquo; by default.
+</p>
+<p>History expansion implements shell-like quoting conventions:
+a backslash can be used to remove the special handling for the next character;
+single quotes enclose verbatim sequences of characters, and can be used to
+inhibit history expansion;
+and characters enclosed within double quotes may be subject to history
+expansion, since backslash can escape the history expansion character,
+but single quotes may not, since they are not treated specially within
+double quotes.
+</p>
+<p>When using the shell, only &lsquo;<samp>\</samp>&rsquo; and &lsquo;<samp>'</samp>&rsquo; may be used to escape the
+history expansion character, but the history expansion character is
+also treated as quoted if it immediately precedes the closing double quote
+in a double-quoted string.
+</p>
+<p>Several shell options settable with the <code>shopt</code>
+builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</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,
+as explained above (see <a href="#Bash-Variables">Bash Variables</a>). The shell uses
+the history comment character to mark history timestamps when
+writing the history file.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Event-Designators" accesskey="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">&bull; <a href="#Word-Designators" accesskey="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">&bull; <a href="#Modifiers" accesskey="3">Modifiers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Modifying the results of substitution.
+</td></tr>
+</table>
+
+<hr>
+<a name="Event-Designators"></a>
+<div class="header">
+<p>
+Next: <a href="#Word-Designators" accesskey="n" rel="next">Word Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Event-Designators-1"></a>
+<h4 class="subsection">9.3.1 Event Designators</h4>
+<a name="index-event-designators"></a>
+
+<p>An event designator is a reference to a command line entry in the
+history list.
+Unless the reference is absolute, events are relative to the current
+position in the history list.
+<a name="index-history-events"></a>
+</p>
+<dl compact="compact">
+<dt><code>!</code></dt>
+<dd><p>Start a history substitution, except when followed by a space, tab,
+the end of the line, &lsquo;<samp>=</samp>&rsquo; or &lsquo;<samp>(</samp>&rsquo; (when the
+<code>extglob</code> shell option is enabled using the <code>shopt</code> builtin).
+</p>
+</dd>
+<dt><code>!<var>n</var></code></dt>
+<dd><p>Refer to command line <var>n</var>.
+</p>
+</dd>
+<dt><code>!-<var>n</var></code></dt>
+<dd><p>Refer to the command <var>n</var> lines back.
+</p>
+</dd>
+<dt><code>!!</code></dt>
+<dd><p>Refer to the previous command. This is a synonym for &lsquo;<samp>!-1</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>!<var>string</var></code></dt>
+<dd><p>Refer to the most recent command
+preceding the current position in the history list
+starting with <var>string</var>.
+</p>
+</dd>
+<dt><code>!?<var>string</var>[?]</code></dt>
+<dd><p>Refer to the most recent command
+preceding the current position in the history list
+containing <var>string</var>.
+The trailing
+&lsquo;<samp>?</samp>&rsquo; may be omitted if the <var>string</var> is followed immediately by
+a newline.
+</p>
+</dd>
+<dt><code>^<var>string1</var>^<var>string2</var>^</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>!#</code></dt>
+<dd><p>The entire command line typed so far.
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="Word-Designators"></a>
+<div class="header">
+<p>
+Next: <a href="#Modifiers" accesskey="n" rel="next">Modifiers</a>, Previous: <a href="#Event-Designators" accesskey="p" rel="prev">Event Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Word-Designators-1"></a>
+<h4 class="subsection">9.3.2 Word Designators</h4>
+
+<p>Word designators are used to select desired words from the event.
+A &lsquo;<samp>:</samp>&rsquo; separates the event specification from the word designator. It
+may be omitted if the word designator begins with a &lsquo;<samp>^</samp>&rsquo;, &lsquo;<samp>$</samp>&rsquo;,
+&lsquo;<samp>*</samp>&rsquo;, &lsquo;<samp>-</samp>&rsquo;, or &lsquo;<samp>%</samp>&rsquo;. 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>
+<dl compact="compact">
+<dt><code>!!</code></dt>
+<dd><p>designates the preceding command. When you type this, the preceding
+command is repeated in toto.
+</p>
+</dd>
+<dt><code>!!:$</code></dt>
+<dd><p>designates the last argument of the preceding command. This may be
+shortened to <code>!$</code>.
+</p>
+</dd>
+<dt><code>!fi:2</code></dt>
+<dd><p>designates the second argument of the most recent command starting with
+the letters <code>fi</code>.
+</p></dd>
+</dl>
+
+<p>Here are the word designators:
+</p>
+<dl compact="compact">
+<dt><code>0 (zero)</code></dt>
+<dd><p>The <code>0</code>th word. For many applications, this is the command word.
+</p>
+</dd>
+<dt><code><var>n</var></code></dt>
+<dd><p>The <var>n</var>th word.
+</p>
+</dd>
+<dt><code>^</code></dt>
+<dd><p>The first argument; that is, word 1.
+</p>
+</dd>
+<dt><code>$</code></dt>
+<dd><p>The last argument.
+</p>
+</dd>
+<dt><code>%</code></dt>
+<dd><p>The word matched by the most recent &lsquo;<samp>?<var>string</var>?</samp>&rsquo; search.
+</p>
+</dd>
+<dt><code><var>x</var>-<var>y</var></code></dt>
+<dd><p>A range of words; &lsquo;<samp>-<var>y</var></samp>&rsquo; abbreviates &lsquo;<samp>0-<var>y</var></samp>&rsquo;.
+</p>
+</dd>
+<dt><code>*</code></dt>
+<dd><p>All of the words, except the <code>0</code>th. This is a synonym for &lsquo;<samp>1-$</samp>&rsquo;.
+It is not an error to use &lsquo;<samp>*</samp>&rsquo; if there is just one word in the event;
+the empty string is returned in that case.
+</p>
+</dd>
+<dt><code><var>x</var>*</code></dt>
+<dd><p>Abbreviates &lsquo;<samp><var>x</var>-$</samp>&rsquo;
+</p>
+</dd>
+<dt><code><var>x</var>-</code></dt>
+<dd><p>Abbreviates &lsquo;<samp><var>x</var>-$</samp>&rsquo; like &lsquo;<samp><var>x</var>*</samp>&rsquo;, but omits the last word.
+</p>
+</dd>
+</dl>
+
+<p>If a word designator is supplied without an event specification, the
+previous command is used as the event.
+</p>
+<hr>
+<a name="Modifiers"></a>
+<div class="header">
+<p>
+Previous: <a href="#Word-Designators" accesskey="p" rel="prev">Word Designators</a>, Up: <a href="#History-Interaction" accesskey="u" rel="up">History Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Modifiers-1"></a>
+<h4 class="subsection">9.3.3 Modifiers</h4>
+
+<p>After the optional word designator, you can add a sequence of one or more
+of the following modifiers, each preceded by a &lsquo;<samp>:</samp>&rsquo;.
+</p>
+<dl compact="compact">
+<dt><code>h</code></dt>
+<dd><p>Remove a trailing pathname component, leaving only the head.
+</p>
+</dd>
+<dt><code>t</code></dt>
+<dd><p>Remove all leading pathname components, leaving the tail.
+</p>
+</dd>
+<dt><code>r</code></dt>
+<dd><p>Remove a trailing suffix of the form &lsquo;<samp>.<var>suffix</var></samp>&rsquo;, leaving
+the basename.
+</p>
+</dd>
+<dt><code>e</code></dt>
+<dd><p>Remove all but the trailing suffix.
+</p>
+</dd>
+<dt><code>p</code></dt>
+<dd><p>Print the new command but do not execute it.
+</p>
+</dd>
+<dt><code>q</code></dt>
+<dd><p>Quote the substituted words, escaping further substitutions.
+</p>
+</dd>
+<dt><code>x</code></dt>
+<dd><p>Quote the substituted words as with &lsquo;<samp>q</samp>&rsquo;,
+but break into words at spaces, tabs, and newlines.
+</p>
+</dd>
+<dt><code>s/<var>old</var>/<var>new</var>/</code></dt>
+<dd><p>Substitute <var>new</var> for the first occurrence of <var>old</var> in the
+event line. Any delimiter may be used in place of &lsquo;<samp>/</samp>&rsquo;.
+The delimiter may be quoted in <var>old</var> and <var>new</var>
+with a single backslash. If &lsquo;<samp>&amp;</samp>&rsquo; appears in <var>new</var>,
+it is replaced by <var>old</var>. A single backslash will quote
+the &lsquo;<samp>&amp;</samp>&rsquo;. The final delimiter is optional if it is the last
+character on the input line.
+</p>
+</dd>
+<dt><code>&amp;</code></dt>
+<dd><p>Repeat the previous substitution.
+</p>
+</dd>
+<dt><code>g</code></dt>
+<dt><code>a</code></dt>
+<dd><p>Cause changes to be applied over the entire event line. Used in
+conjunction with &lsquo;<samp>s</samp>&rsquo;, as in <code>gs/<var>old</var>/<var>new</var>/</code>,
+or with &lsquo;<samp>&amp;</samp>&rsquo;.
+</p>
+</dd>
+<dt><code>G</code></dt>
+<dd><p>Apply the following &lsquo;<samp>s</samp>&rsquo; modifier once to each word in the event.
+</p>
+</dd>
+</dl>
+
+<hr>
+<a name="Installing-Bash"></a>
+<div class="header">
+<p>
+Next: <a href="#Reporting-Bugs" accesskey="n" rel="next">Reporting Bugs</a>, Previous: <a href="#Using-History-Interactively" accesskey="p" rel="prev">Using History Interactively</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Installing-Bash-1"></a>
+<h2 class="chapter">10 Installing Bash</h2>
+
+<p>This chapter provides basic instructions for installing Bash on
+the various supported platforms. The distribution supports the
+<small>GNU</small> operating systems, nearly every version of Unix, and several
+non-Unix systems such as BeOS and Interix.
+Other independent ports exist for
+<small>MS-DOS</small>, <small>OS/2</small>, and Windows platforms.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Basic-Installation" accesskey="1">Basic Installation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Installation instructions.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Compilers-and-Options" accesskey="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">&bull; <a href="#Compiling-For-Multiple-Architectures" accesskey="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">&bull; <a href="#Installation-Names" accesskey="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">&bull; <a href="#Specifying-the-System-Type" accesskey="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">&bull; <a href="#Sharing-Defaults" accesskey="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">&bull; <a href="#Operation-Controls" accesskey="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">&bull; <a href="#Optional-Features" accesskey="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>
+
+<hr>
+<a name="Basic-Installation"></a>
+<div class="header">
+<p>
+Next: <a href="#Compilers-and-Options" accesskey="n" rel="next">Compilers and Options</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Basic-Installation-1"></a>
+<h3 class="section">10.1 Basic Installation</h3>
+<a name="index-installation"></a>
+<a name="index-configuration"></a>
+<a name="index-Bash-installation"></a>
+<a name="index-Bash-configuration"></a>
+
+<p>These are installation instructions for Bash.
+</p>
+<p>The simplest way to compile Bash is:
+</p>
+<ol>
+<li> <code>cd</code> to the directory containing the source code and type
+&lsquo;<samp>./configure</samp>&rsquo; to configure Bash for your system. If you&rsquo;re
+using <code>csh</code> on an old version of System V, you might need to
+type &lsquo;<samp>sh ./configure</samp>&rsquo; 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>
+</li><li> Type &lsquo;<samp>make</samp>&rsquo; to compile Bash and build the <code>bashbug</code> bug
+reporting script.
+
+</li><li> Optionally, type &lsquo;<samp>make tests</samp>&rsquo; to run the Bash test suite.
+
+</li><li> Type &lsquo;<samp>make install</samp>&rsquo; to install <code>bash</code> and <code>bashbug</code>.
+This will also install the manual pages and Info file.
+
+</li></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 <samp>Makefile</samp> in
+each directory of the package (the top directory, the
+<samp>builtins</samp>, <samp>doc</samp>, and <samp>support</samp> directories,
+each directory under <samp>lib</samp>, and several others). It also creates a
+<samp>config.h</samp> 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 <samp>config.cache</samp> that saves the results of its tests to
+speed up reconfiguring, and a file <samp>config.log</samp> containing
+compiler output (useful mainly for debugging <code>configure</code>).
+If at some point
+<samp>config.cache</samp> contains results you don&rsquo;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>
+<div class="example">
+<pre class="example">bash-4.2$ ./configure --help
+</pre></div>
+
+<p>at the Bash prompt in your Bash source directory.
+</p>
+<p>If you want to build Bash in a directory separate from the source
+directory &ndash; to build for multiple architectures, for example &ndash;
+just use the full path to the configure script. The following commands
+will build bash in a directory under <samp>/usr/local/build</samp> from
+the source code in <samp>/usr/local/src/bash-4.4</samp>:
+</p>
+<div class="example">
+<pre class="example">mkdir /usr/local/build/bash-4.4
+cd /usr/local/build/bash-4.4
+bash /usr/local/src/bash-4.4/configure
+make
+</pre></div>
+
+<p>See <a href="#Compiling-For-Multiple-Architectures">Compiling For Multiple Architectures</a> for more information
+about building in a directory separate from the source.
+</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 <samp>configure.ac</samp> is used to create <code>configure</code>
+by a program called Autoconf. You only need
+<samp>configure.ac</samp> 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 &lsquo;<samp>make clean</samp>&rsquo;. To also remove the
+files that <code>configure</code> created (so you can compile Bash for
+a different kind of computer), type &lsquo;<samp>make distclean</samp>&rsquo;.
+</p>
+<hr>
+<a name="Compilers-and-Options"></a>
+<div class="header">
+<p>
+Next: <a href="#Compiling-For-Multiple-Architectures" accesskey="n" rel="next">Compiling For Multiple Architectures</a>, Previous: <a href="#Basic-Installation" accesskey="p" rel="prev">Basic Installation</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Compilers-and-Options-1"></a>
+<h3 class="section">10.2 Compilers and Options</h3>
+
+<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>
+<div class="example">
+<pre class="example">CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+</pre></div>
+
+<p>On systems that have the <code>env</code> program, you can do it like this:
+</p>
+<div class="example">
+<pre class="example">env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+</pre></div>
+
+<p>The configuration process uses GCC to build Bash if it
+is available.
+</p>
+<hr>
+<a name="Compiling-For-Multiple-Architectures"></a>
+<div class="header">
+<p>
+Next: <a href="#Installation-Names" accesskey="n" rel="next">Installation Names</a>, Previous: <a href="#Compilers-and-Options" accesskey="p" rel="prev">Compilers and Options</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Compiling-For-Multiple-Architectures-1"></a>
+<h3 class="section">10.3 Compiling For Multiple Architectures</h3>
+
+<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
+(see <a href="#Basic-Installation">Basic Installation</a>).
+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 &lsquo;..&rsquo;.
+</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 &lsquo;<samp>make distclean</samp>&rsquo; before
+reconfiguring for another architecture.
+</p>
+<p>Alternatively, if your system supports symbolic links, you can use the
+<samp>support/mkclone</samp> script to create a build tree which has
+symbolic links back to each file in the source directory. Here&rsquo;s an
+example that creates a build directory in the current directory from a
+source directory <samp>/usr/gnu/src/bash-2.0</samp>:
+</p>
+<div class="example">
+<pre class="example">bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+</pre></div>
+
+<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>
+<hr>
+<a name="Installation-Names"></a>
+<div class="header">
+<p>
+Next: <a href="#Specifying-the-System-Type" accesskey="n" rel="next">Specifying the System Type</a>, Previous: <a href="#Compiling-For-Multiple-Architectures" accesskey="p" rel="prev">Compiling For Multiple Architectures</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Installation-Names-1"></a>
+<h3 class="section">10.4 Installation Names</h3>
+
+<p>By default, &lsquo;<samp>make install</samp>&rsquo; will install into
+<samp>/usr/local/bin</samp>, <samp>/usr/local/man</samp>, etc. You can
+specify an installation prefix other than <samp>/usr/local</samp> by
+giving <code>configure</code> the option <samp>--prefix=<var>PATH</var></samp>,
+or by specifying a value for the <code>DESTDIR</code> &lsquo;<samp>make</samp>&rsquo;
+variable when running &lsquo;<samp>make install</samp>&rsquo;.
+</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>, &lsquo;<samp>make install</samp>&rsquo; 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>
+<hr>
+<a name="Specifying-the-System-Type"></a>
+<div class="header">
+<p>
+Next: <a href="#Sharing-Defaults" accesskey="n" rel="next">Sharing Defaults</a>, Previous: <a href="#Installation-Names" accesskey="p" rel="prev">Installation Names</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Specifying-the-System-Type-1"></a>
+<h3 class="section">10.5 Specifying the System Type</h3>
+
+<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. &lsquo;<samp>TYPE</samp>&rsquo; can
+either be a short name for the system type, such as &lsquo;<samp>sun4</samp>&rsquo;,
+or a canonical name with three fields: &lsquo;<samp>CPU-COMPANY-SYSTEM</samp>&rsquo;
+(e.g., &lsquo;<samp>i386-unknown-freebsd4.2</samp>&rsquo;).
+</p>
+<p>See the file <samp>support/config.sub</samp> for the possible
+values of each field.
+</p>
+<hr>
+<a name="Sharing-Defaults"></a>
+<div class="header">
+<p>
+Next: <a href="#Operation-Controls" accesskey="n" rel="next">Operation Controls</a>, Previous: <a href="#Specifying-the-System-Type" accesskey="p" rel="prev">Specifying the System Type</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Sharing-Defaults-1"></a>
+<h3 class="section">10.6 Sharing Defaults</h3>
+
+<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 <samp>PREFIX/share/config.site</samp> if it exists, then
+<samp>PREFIX/etc/config.site</samp> 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>
+<hr>
+<a name="Operation-Controls"></a>
+<div class="header">
+<p>
+Next: <a href="#Optional-Features" accesskey="n" rel="next">Optional Features</a>, Previous: <a href="#Sharing-Defaults" accesskey="p" rel="prev">Sharing Defaults</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Operation-Controls-1"></a>
+<h3 class="section">10.7 Operation Controls</h3>
+
+<p><code>configure</code> recognizes the following options to control how it
+operates.
+</p>
+<dl compact="compact">
+<dt><code>--cache-file=<var>file</var></code></dt>
+<dd><p>Use and save the results of the tests in
+<var>file</var> instead of <samp>./config.cache</samp>. Set <var>file</var> to
+<samp>/dev/null</samp> to disable caching, for debugging
+<code>configure</code>.
+</p>
+</dd>
+<dt><code>--help</code></dt>
+<dd><p>Print a summary of the options to <code>configure</code>, and exit.
+</p>
+</dd>
+<dt><code>--quiet</code></dt>
+<dt><code>--silent</code></dt>
+<dt><code>-q</code></dt>
+<dd><p>Do not print messages saying which checks are being made.
+</p>
+</dd>
+<dt><code>--srcdir=<var>dir</var></code></dt>
+<dd><p>Look for the Bash source code in directory <var>dir</var>. Usually
+<code>configure</code> can determine that directory automatically.
+</p>
+</dd>
+<dt><code>--version</code></dt>
+<dd><p>Print the version of Autoconf used to generate the <code>configure</code>
+script, and exit.
+</p></dd>
+</dl>
+
+<p><code>configure</code> also accepts some other, not widely used, boilerplate
+options. &lsquo;<samp>configure --help</samp>&rsquo; prints the complete list.
+</p>
+<hr>
+<a name="Optional-Features"></a>
+<div class="header">
+<p>
+Previous: <a href="#Operation-Controls" accesskey="p" rel="prev">Operation Controls</a>, Up: <a href="#Installing-Bash" accesskey="u" rel="up">Installing Bash</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Optional-Features-1"></a>
+<h3 class="section">10.8 Optional Features</h3>
+
+<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 &lsquo;<samp>bash-malloc</samp>&rsquo; or &lsquo;<samp>purify</samp>&rsquo;.
+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>
+<dl compact="compact">
+<dt><code>--with-afs</code></dt>
+<dd><p>Define if you are using the Andrew File System from Transarc.
+</p>
+</dd>
+<dt><code>--with-bash-malloc</code></dt>
+<dd><p>Use the Bash version of
+<code>malloc</code> in the directory <samp>lib/malloc</samp>. This is not the same
+<code>malloc</code> that appears in <small>GNU</small> libc, but an older version
+originally derived from the 4.2 <small>BSD</small> <code>malloc</code>. This <code>malloc</code>
+is very fast, but wastes some space on each allocation.
+This option is enabled by default.
+The <samp>NOTES</samp> 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>
+</dd>
+<dt><code>--with-curses</code></dt>
+<dd><p>Use the curses library instead of the termcap library. This should
+be supplied if your system has an inadequate or incomplete termcap
+database.
+</p>
+</dd>
+<dt><code>--with-gnu-malloc</code></dt>
+<dd><p>A synonym for <code>--with-bash-malloc</code>.
+</p>
+</dd>
+<dt><code>--with-installed-readline[=<var>PREFIX</var>]</code></dt>
+<dd><p>Define this to make Bash link with a locally-installed version of Readline
+rather than the version in <samp>lib/readline</samp>. 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
+<samp>lib/readline</samp>.
+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>
+</dd>
+<dt><code>--with-purify</code></dt>
+<dd><p>Define this to use the Purify memory allocation checker from Rational
+Software.
+</p>
+</dd>
+<dt><code>--enable-minimal-config</code></dt>
+<dd><p>This produces a shell with minimal features, close to the historical
+Bourne shell.
+</p></dd>
+</dl>
+
+<p>There are several <samp>--enable-</samp> options that alter how Bash is
+compiled and linked, rather than changing run-time features.
+</p>
+<dl compact="compact">
+<dt><code>--enable-largefile</code></dt>
+<dd><p>Enable support for <a href="http://www.unix.org/version2/whatsnew/lfs20mar.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>
+</dd>
+<dt><code>--enable-profiling</code></dt>
+<dd><p>This builds a Bash binary that produces profiling information to be
+processed by <code>gprof</code> each time it is executed.
+</p>
+</dd>
+<dt><code>--enable-static-link</code></dt>
+<dd><p>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&rsquo;s shell.
+</p></dd>
+</dl>
+
+<p>The &lsquo;<samp>minimal-config</samp>&rsquo; option can be used to disable all of
+the following options, but it is processed first, so individual
+options may be enabled using &lsquo;<samp>enable-<var>feature</var></samp>&rsquo;.
+</p>
+<p>All of the following options except for &lsquo;<samp>disabled-builtins</samp>&rsquo;,
+&lsquo;<samp>direxpand-default</samp>&rsquo;, and
+&lsquo;<samp>xpg-echo-default</samp>&rsquo; are
+enabled by default, unless the operating system does not provide the
+necessary support.
+</p>
+<dl compact="compact">
+<dt><code>--enable-alias</code></dt>
+<dd><p>Allow alias expansion and include the <code>alias</code> and <code>unalias</code>
+builtins (see <a href="#Aliases">Aliases</a>).
+</p>
+</dd>
+<dt><code>--enable-arith-for-command</code></dt>
+<dd><p>Include support for the alternate form of the <code>for</code> command
+that behaves like the C language <code>for</code> statement
+(see <a href="#Looping-Constructs">Looping Constructs</a>).
+</p>
+</dd>
+<dt><code>--enable-array-variables</code></dt>
+<dd><p>Include support for one-dimensional array shell variables
+(see <a href="#Arrays">Arrays</a>).
+</p>
+</dd>
+<dt><code>--enable-bang-history</code></dt>
+<dd><p>Include support for <code>csh</code>-like history substitution
+(see <a href="#History-Interaction">History Interaction</a>).
+</p>
+</dd>
+<dt><code>--enable-brace-expansion</code></dt>
+<dd><p>Include <code>csh</code>-like brace expansion
+( <code>b{a,b}c</code> &rarr; <code>bac bbc</code> ).
+See <a href="#Brace-Expansion">Brace Expansion</a>, for a complete description.
+</p>
+</dd>
+<dt><code>--enable-casemod-attributes</code></dt>
+<dd><p>Include support for case-modifying attributes in the <code>declare</code> builtin
+and assignment statements. Variables with the <var>uppercase</var> attribute,
+for example, will have their values converted to uppercase upon assignment.
+</p>
+</dd>
+<dt><code>--enable-casemod-expansion</code></dt>
+<dd><p>Include support for case-modifying word expansions.
+</p>
+</dd>
+<dt><code>--enable-command-timing</code></dt>
+<dd><p>Include support for recognizing <code>time</code> as a reserved word and for
+displaying timing statistics for the pipeline following <code>time</code>
+(see <a href="#Pipelines">Pipelines</a>).
+This allows pipelines as well as shell builtins and functions to be timed.
+</p>
+</dd>
+<dt><code>--enable-cond-command</code></dt>
+<dd><p>Include support for the <code>[[</code> conditional command.
+(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
+</p>
+</dd>
+<dt><code>--enable-cond-regexp</code></dt>
+<dd><p>Include support for matching <small>POSIX</small> regular expressions using the
+&lsquo;<samp>=~</samp>&rsquo; binary operator in the <code>[[</code> conditional command.
+(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
+</p>
+</dd>
+<dt><code>--enable-coprocesses</code></dt>
+<dd><p>Include support for coprocesses and the <code>coproc</code> reserved word
+(see <a href="#Pipelines">Pipelines</a>).
+</p>
+</dd>
+<dt><code>--enable-debugger</code></dt>
+<dd><p>Include support for the bash debugger (distributed separately).
+</p>
+</dd>
+<dt><code>--enable-dev-fd-stat-broken</code></dt>
+<dd><p>If calling <code>stat</code> on /dev/fd/<var>N</var> returns different results than
+calling <code>fstat</code> on file descriptor <var>N</var>, supply this option to
+enable a workaround.
+This has implications for conditional commands that test file attributes.
+</p>
+</dd>
+<dt><code>--enable-direxpand-default</code></dt>
+<dd><p>Cause the <code>direxpand</code> shell option (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
+to be enabled by default when the shell starts.
+It is normally disabled by default.
+</p>
+</dd>
+<dt><code>--enable-directory-stack</code></dt>
+<dd><p>Include support for a <code>csh</code>-like directory stack and the
+<code>pushd</code>, <code>popd</code>, and <code>dirs</code> builtins
+(see <a href="#The-Directory-Stack">The Directory Stack</a>).
+</p>
+</dd>
+<dt><code>--enable-disabled-builtins</code></dt>
+<dd><p>Allow builtin commands to be invoked via &lsquo;<samp>builtin xxx</samp>&rsquo;
+even after <code>xxx</code> has been disabled using &lsquo;<samp>enable -n xxx</samp>&rsquo;.
+See <a href="#Bash-Builtins">Bash Builtins</a>, for details of the <code>builtin</code> and
+<code>enable</code> builtin commands.
+</p>
+</dd>
+<dt><code>--enable-dparen-arithmetic</code></dt>
+<dd><p>Include support for the <code>((&hellip;))</code> command
+(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
+</p>
+</dd>
+<dt><code>--enable-extended-glob</code></dt>
+<dd><p>Include support for the extended pattern matching features described
+above under <a href="#Pattern-Matching">Pattern Matching</a>.
+</p>
+</dd>
+<dt><code>--enable-extended-glob-default</code></dt>
+<dd><p>Set the default value of the <var>extglob</var> shell option described
+above under <a href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled.
+</p>
+</dd>
+<dt><code>--enable-function-import</code></dt>
+<dd><p>Include support for importing function definitions exported by another
+instance of the shell from the environment. This option is enabled by
+default.
+</p>
+</dd>
+<dt><code>--enable-glob-asciirange-default</code></dt>
+<dd><p>Set the default value of the <var>globasciiranges</var> shell option described
+above under <a href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled.
+This controls the behavior of character ranges when used in pattern matching
+bracket expressions.
+</p>
+</dd>
+<dt><code>--enable-help-builtin</code></dt>
+<dd><p>Include the <code>help</code> builtin, which displays help on shell builtins and
+variables (see <a href="#Bash-Builtins">Bash Builtins</a>).
+</p>
+</dd>
+<dt><code>--enable-history</code></dt>
+<dd><p>Include command history and the <code>fc</code> and <code>history</code>
+builtin commands (see <a href="#Bash-History-Facilities">Bash History Facilities</a>).
+</p>
+</dd>
+<dt><code>--enable-job-control</code></dt>
+<dd><p>This enables the job control features (see <a href="#Job-Control">Job Control</a>),
+if the operating system supports them.
+</p>
+</dd>
+<dt><code>--enable-multibyte</code></dt>
+<dd><p>This enables support for multibyte characters if the operating
+system provides the necessary support.
+</p>
+</dd>
+<dt><code>--enable-net-redirections</code></dt>
+<dd><p>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 <a href="#Redirections">Redirections</a>).
+</p>
+</dd>
+<dt><code>--enable-process-substitution</code></dt>
+<dd><p>This enables process substitution (see <a href="#Process-Substitution">Process Substitution</a>) if
+the operating system provides the necessary support.
+</p>
+</dd>
+<dt><code>--enable-progcomp</code></dt>
+<dd><p>Enable the programmable completion facilities
+(see <a href="#Programmable-Completion">Programmable Completion</a>).
+If Readline is not enabled, this option has no effect.
+</p>
+</dd>
+<dt><code>--enable-prompt-string-decoding</code></dt>
+<dd><p>Turn on the interpretation of a number of backslash-escaped characters
+in the <code>$PS0</code>, <code>$PS1</code>, <code>$PS2</code>, and <code>$PS4</code> prompt
+strings. See <a href="#Controlling-the-Prompt">Controlling the Prompt</a>, for a complete list of prompt
+string escape sequences.
+</p>
+</dd>
+<dt><code>--enable-readline</code></dt>
+<dd><p>Include support for command-line editing and history with the Bash
+version of the Readline library (see <a href="#Command-Line-Editing">Command Line Editing</a>).
+</p>
+</dd>
+<dt><code>--enable-restricted</code></dt>
+<dd><p>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="#The-Restricted-Shell">The Restricted Shell</a>, for a description of restricted mode.
+</p>
+</dd>
+<dt><code>--enable-select</code></dt>
+<dd><p>Include the <code>select</code> compound command, which allows the generation of
+simple menus (see <a href="#Conditional-Constructs">Conditional Constructs</a>).
+</p>
+</dd>
+<dt><code>--enable-separate-helpfiles</code></dt>
+<dd><p>Use external files for the documentation displayed by the <code>help</code> builtin
+instead of storing the text internally.
+</p>
+</dd>
+<dt><code>--enable-single-help-strings</code></dt>
+<dd><p>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>
+</dd>
+<dt><code>--enable-strict-posix-default</code></dt>
+<dd><p>Make Bash <small>POSIX</small>-conformant by default (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
+</p>
+</dd>
+<dt><code>--enable-usg-echo-default</code></dt>
+<dd><p>A synonym for <code>--enable-xpg-echo-default</code>.
+</p>
+</dd>
+<dt><code>--enable-xpg-echo-default</code></dt>
+<dd><p>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 <a href="#Bash-Builtins">Bash Builtins</a>, for a description of the escape sequences that
+<code>echo</code> recognizes.
+</p></dd>
+</dl>
+
+<p>The file <samp>config-top.h</samp> contains C Preprocessor
+&lsquo;<samp>#define</samp>&rsquo; 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>
+<hr>
+<a name="Reporting-Bugs"></a>
+<div class="header">
+<p>
+Next: <a href="#Major-Differences-From-The-Bourne-Shell" accesskey="n" rel="next">Major Differences From The Bourne Shell</a>, Previous: <a href="#Installing-Bash" accesskey="p" rel="prev">Installing Bash</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Reporting-Bugs-1"></a>
+<h2 class="appendix">Appendix A Reporting Bugs</h2>
+
+<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/gnu/bash/">ftp://ftp.gnu.org/pub/gnu/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 &lsquo;philosophical&rsquo; 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:
+</p><ul>
+<li> The version number of Bash.
+</li><li> The hardware and operating system.
+</li><li> The compiler used to compile Bash.
+</li><li> A description of the bug behaviour.
+</li><li> A short script or &lsquo;recipe&rsquo; which exercises the bug and may be used
+to reproduce it.
+</li></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:bug-bash@gnu.org">bug-bash@gnu.org</a>.
+</p>
+<hr>
+<a name="Major-Differences-From-The-Bourne-Shell"></a>
+<div class="header">
+<p>
+Next: <a href="#GNU-Free-Documentation-License" accesskey="n" rel="next">GNU Free Documentation License</a>, Previous: <a href="#Reporting-Bugs" accesskey="p" rel="prev">Reporting Bugs</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Major-Differences-From-The-Bourne-Shell-1"></a>
+<h2 class="appendix">Appendix B Major Differences From The Bourne Shell</h2>
+
+<p>Bash implements essentially the same grammar, parameter and
+variable expansion, redirection, and quoting as the Bourne Shell.
+Bash uses the <small>POSIX</small> 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>
+<ul>
+<li> Bash is <small>POSIX</small>-conformant, even where the <small>POSIX</small> specification
+differs from traditional <code>sh</code> behavior (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
+
+</li><li> Bash has multi-character invocation options (see <a href="#Invoking-Bash">Invoking Bash</a>).
+
+</li><li> Bash has command-line editing (see <a href="#Command-Line-Editing">Command Line Editing</a>) and
+the <code>bind</code> builtin.
+
+</li><li> Bash provides a programmable word completion mechanism
+(see <a href="#Programmable-Completion">Programmable Completion</a>), and builtin commands
+<code>complete</code>, <code>compgen</code>, and <code>compopt</code>, to
+manipulate it.
+
+</li><li> Bash has command history (see <a href="#Bash-History-Facilities">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.
+
+</li><li> Bash implements <code>csh</code>-like history expansion
+(see <a href="#History-Interaction">History Interaction</a>).
+
+</li><li> Bash has one-dimensional array variables (see <a href="#Arrays">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.
+
+</li><li> The <code>$'&hellip;'</code> quoting syntax, which expands ANSI-C
+backslash-escaped characters in the text between the single quotes,
+is supported (see <a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>).
+
+</li><li> Bash supports the <code>$&quot;&hellip;&quot;</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 <a href="#Locale-Translation">Locale Translation</a>).
+
+</li><li> Bash implements the <code>!</code> keyword to negate the return value of
+a pipeline (see <a href="#Pipelines">Pipelines</a>).
+Very useful when an <code>if</code> statement needs to act only if a test fails.
+The Bash &lsquo;<samp>-o pipefail</samp>&rsquo; option to <code>set</code> will cause a pipeline to
+return a failure status if any command fails.
+
+</li><li> Bash has the <code>time</code> reserved word and command timing (see <a href="#Pipelines">Pipelines</a>).
+The display of the timing statistics may be controlled with the
+<code>TIMEFORMAT</code> variable.
+
+</li><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 <a href="#Looping-Constructs">Looping Constructs</a>).
+
+</li><li> Bash includes the <code>select</code> compound command, which allows the
+generation of simple menus (see <a href="#Conditional-Constructs">Conditional Constructs</a>).
+
+</li><li> Bash includes the <code>[[</code> compound command, which makes conditional
+testing part of the shell grammar (see <a href="#Conditional-Constructs">Conditional Constructs</a>), including
+optional regular expression matching.
+
+</li><li> Bash provides optional case-insensitive matching for the <code>case</code> and
+<code>[[</code> constructs.
+
+</li><li> Bash includes brace expansion (see <a href="#Brace-Expansion">Brace Expansion</a>) and tilde
+expansion (see <a href="#Tilde-Expansion">Tilde Expansion</a>).
+
+</li><li> Bash implements command aliases and the <code>alias</code> and <code>unalias</code>
+builtins (see <a href="#Aliases">Aliases</a>).
+
+</li><li> Bash provides shell arithmetic, the <code>((</code> compound command
+(see <a href="#Conditional-Constructs">Conditional Constructs</a>),
+and arithmetic expansion (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
+
+</li><li> Variables present in the shell&rsquo;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.
+
+</li><li> Bash supports the &lsquo;<samp>+=</samp>&rsquo; assignment operator, which appends to the value
+of the variable named on the left hand side.
+
+</li><li> Bash includes the <small>POSIX</small> pattern removal &lsquo;<samp>%</samp>&rsquo;, &lsquo;<samp>#</samp>&rsquo;, &lsquo;<samp>%%</samp>&rsquo;
+and &lsquo;<samp>##</samp>&rsquo; expansions to remove leading or trailing substrings from
+variable values (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+
+</li><li> The expansion <code>${#xx}</code>, which returns the length of <code>${xx}</code>,
+is supported (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+
+</li><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>&rsquo;s value of length
+<var>length</var>, beginning at <var>offset</var>, is present
+(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+
+</li><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 <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+
+</li><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 <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+
+</li><li> Bash has <var>indirect</var> variable expansion using <code>${!word}</code>
+(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+
+</li><li> Bash can expand positional parameters beyond <code>$9</code> using
+<code>${<var>num</var>}</code>.
+
+</li><li> The <small>POSIX</small> <code>$()</code> form of command substitution
+is implemented (see <a href="#Command-Substitution">Command Substitution</a>),
+and preferred to the Bourne shell&rsquo;s <code>``</code> (which
+is also implemented for backwards compatibility).
+
+</li><li> Bash has process substitution (see <a href="#Process-Substitution">Process Substitution</a>).
+
+</li><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 <a href="#Bash-Variables">Bash Variables</a>,
+for details.
+
+</li><li> The <code>IFS</code> variable is used to split only the results of expansion,
+not all words (see <a href="#Word-Splitting">Word Splitting</a>).
+This closes a longstanding shell security hole.
+
+</li><li> The filename expansion bracket expression code uses &lsquo;<samp>!</samp>&rsquo; and &lsquo;<samp>^</samp>&rsquo;
+to negate the set of characters between the brackets.
+The Bourne shell uses only &lsquo;<samp>!</samp>&rsquo;.
+
+</li><li> Bash implements the full set of <small>POSIX</small> filename expansion operators,
+including <var>character classes</var>, <var>equivalence classes</var>, and
+<var>collating symbols</var> (see <a href="#Filename-Expansion">Filename Expansion</a>).
+
+</li><li> Bash implements extended pattern matching features when the <code>extglob</code>
+shell option is enabled (see <a href="#Pattern-Matching">Pattern Matching</a>).
+
+</li><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.
+
+</li><li> Bash functions are permitted to have local variables using the
+<code>local</code> builtin, and thus useful recursive functions may be written
+(see <a href="#Bash-Builtins">Bash Builtins</a>).
+
+</li><li> Variable assignments preceding commands affect only that command, even
+builtins and functions (see <a href="#Environment">Environment</a>).
+In <code>sh</code>, all variable assignments
+preceding commands are global unless the command is executed from the
+file system.
+
+</li><li> Bash performs filename expansion on filenames specified as operands
+to input and output redirection operators (see <a href="#Redirections">Redirections</a>).
+
+</li><li> Bash contains the &lsquo;<samp>&lt;&gt;</samp>&rsquo; redirection operator, allowing a file to be
+opened for both reading and writing, and the &lsquo;<samp>&amp;&gt;</samp>&rsquo; redirection
+operator, for directing standard output and standard error to the same
+file (see <a href="#Redirections">Redirections</a>).
+
+</li><li> Bash includes the &lsquo;<samp>&lt;&lt;&lt;</samp>&rsquo; redirection operator, allowing a string to
+be used as the standard input to a command.
+
+</li><li> Bash implements the &lsquo;<samp>[n]&lt;&amp;<var>word</var></samp>&rsquo; and &lsquo;<samp>[n]&gt;&amp;<var>word</var></samp>&rsquo;
+redirection operators, which move one file descriptor to another.
+
+</li><li> Bash treats a number of filenames specially when they are
+used in redirection operators (see <a href="#Redirections">Redirections</a>).
+
+</li><li> Bash can open network connections to arbitrary machines and services
+with the redirection operators (see <a href="#Redirections">Redirections</a>).
+
+</li><li> The <code>noclobber</code> option is available to avoid overwriting existing
+files with output redirection (see <a href="#The-Set-Builtin">The Set Builtin</a>).
+The &lsquo;<samp>&gt;|</samp>&rsquo; redirection operator may be used to override <code>noclobber</code>.
+
+</li><li> The Bash <code>cd</code> and <code>pwd</code> builtins (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
+each take <samp>-L</samp> and <samp>-P</samp> options to switch between logical and
+physical modes.
+
+</li><li> Bash allows a function to override a builtin with the same name, and provides
+access to that builtin&rsquo;s functionality within the function via the
+<code>builtin</code> and <code>command</code> builtins (see <a href="#Bash-Builtins">Bash Builtins</a>).
+
+</li><li> The <code>command</code> builtin allows selective disabling of functions
+when command lookup is performed (see <a href="#Bash-Builtins">Bash Builtins</a>).
+
+</li><li> Individual builtins may be enabled or disabled using the <code>enable</code>
+builtin (see <a href="#Bash-Builtins">Bash Builtins</a>).
+
+</li><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 <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+
+</li><li> Shell functions may be exported to children via the environment
+using <code>export -f</code> (see <a href="#Shell-Functions">Shell Functions</a>).
+
+</li><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 &lsquo;<samp>name=value</samp>&rsquo; arguments to set variable attributes
+and values simultaneously.
+
+</li><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 &lsquo;<samp>hash -p</samp>&rsquo;
+(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+
+</li><li> Bash includes a <code>help</code> builtin for quick reference to shell
+facilities (see <a href="#Bash-Builtins">Bash Builtins</a>).
+
+</li><li> The <code>printf</code> builtin is available to display formatted output
+(see <a href="#Bash-Builtins">Bash Builtins</a>).
+
+</li><li> The Bash <code>read</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>)
+will read a line ending in &lsquo;<samp>\</samp>&rsquo; 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.
+
+</li><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 <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+
+</li><li> Bash includes the <code>shopt</code> builtin, for finer control of shell
+optional capabilities (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), and allows these options
+to be set and unset at shell invocation (see <a href="#Invoking-Bash">Invoking Bash</a>).
+
+</li><li> Bash has much more optional behavior controllable with the <code>set</code>
+builtin (see <a href="#The-Set-Builtin">The Set Builtin</a>).
+
+</li><li> The &lsquo;<samp>-x</samp>&rsquo; (<samp>xtrace</samp>) option displays commands other than
+simple commands when performing an execution trace
+(see <a href="#The-Set-Builtin">The Set Builtin</a>).
+
+</li><li> The <code>test</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
+is slightly different, as it implements the <small>POSIX</small> algorithm,
+which specifies the behavior based on the number of arguments.
+
+</li><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.
+
+</li><li> The <code>trap</code> builtin (see <a href="#Bourne-Shell-Builtins">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 <a href="#Bourne-Shell-Builtins">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 <a href="#Bourne-Shell-Builtins">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>
+</li><li> The Bash <code>type</code> builtin is more extensive and gives more information
+about the names it finds (see <a href="#Bash-Builtins">Bash Builtins</a>).
+
+</li><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 <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+
+</li><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 <a href="#The-Directory-Stack">The Directory Stack</a>).
+Bash also makes the directory stack visible as the value of the
+<code>DIRSTACK</code> shell variable.
+
+</li><li> Bash interprets special backslash-escaped characters in the prompt
+strings when interactive (see <a href="#Controlling-the-Prompt">Controlling the Prompt</a>).
+
+</li><li> The Bash restricted mode is more useful (see <a href="#The-Restricted-Shell">The Restricted Shell</a>);
+the SVR4.2 shell restricted mode is too limited.
+
+</li><li> The <code>disown</code> builtin can remove a job from the internal shell
+job table (see <a href="#Job-Control-Builtins">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>.
+
+</li><li> Bash includes a number of features to support a separate debugger for
+shell scripts.
+
+</li><li> The SVR4.2 shell has two privilege-related builtins
+(<code>mldmode</code> and <code>priv</code>) not present in Bash.
+
+</li><li> Bash does not have the <code>stop</code> or <code>newgrp</code> builtins.
+
+</li><li> Bash does not use the <code>SHACCT</code> variable or perform shell accounting.
+
+</li><li> The SVR4.2 <code>sh</code> uses a <code>TIMEOUT</code> variable like Bash uses
+<code>TMOUT</code>.
+
+</li></ul>
+
+<p>More features unique to Bash may be found in <a href="#Bash-Features">Bash Features</a>.
+</p>
+
+<a name="Implementation-Differences-From-The-SVR4_002e2-Shell"></a>
+<h3 class="appendixsec">B.1 Implementation Differences From The SVR4.2 Shell</h3>
+
+<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>
+<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.
+
+</li><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.
+
+</li><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.
+
+</li><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 <small>UID</small> and <small>GID</small> if they are less than some
+magic threshold value, commonly 100.
+This can lead to unexpected results.
+
+</li><li> The SVR4.2 shell does not allow users to trap <code>SIGSEGV</code>,
+<code>SIGALRM</code>, or <code>SIGCHLD</code>.
+
+</li><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.
+
+</li><li> The SVR4.2 shell treats &lsquo;<samp>^</samp>&rsquo; as the undocumented equivalent of
+&lsquo;<samp>|</samp>&rsquo;.
+
+</li><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 &lsquo;<samp>-</samp>&rsquo;.
+
+</li><li> The SVR4.2 shell exits a script if any builtin fails; Bash exits
+a script only if one of the <small>POSIX</small> special builtins fails, and
+only for certain failures, as enumerated in the <small>POSIX</small> standard.
+
+</li><li> The SVR4.2 shell behaves differently when invoked as <code>jsh</code>
+(it turns on job control).
+</li></ul>
+
+<hr>
+<a name="GNU-Free-Documentation-License"></a>
+<div class="header">
+<p>
+Next: <a href="#Indexes" accesskey="n" rel="next">Indexes</a>, Previous: <a href="#Major-Differences-From-The-Bourne-Shell" accesskey="p" rel="prev">Major Differences From The Bourne Shell</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="GNU-Free-Documentation-License-1"></a>
+<h2 class="appendix">Appendix C GNU Free Documentation License</h2>
+
+<div align="center">Version 1.3, 3 November 2008
+</div>
+
+<div class="display">
+<pre class="display">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+<a href="http://fsf.org/">http://fsf.org/</a>
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+</pre></div>
+
+<ol start="0">
+<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 &ldquo;copyleft&rdquo;, 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>
+</li><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 &ldquo;Document&rdquo;, below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as &ldquo;you&rdquo;. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+</p>
+<p>A &ldquo;Modified Version&rdquo; 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 &ldquo;Secondary Section&rdquo; 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&rsquo;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 &ldquo;Invariant Sections&rdquo; 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 &ldquo;Cover Texts&rdquo; 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 &ldquo;Transparent&rdquo; 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 &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
+</p>
+<p>Examples of suitable formats for Transparent copies include plain
+<small>ASCII</small> without markup, Texinfo input format, LaTeX input
+format, <acronym>SGML</acronym> or <acronym>XML</acronym> using a publicly available
+<acronym>DTD</acronym>, and standard-conforming simple <acronym>HTML</acronym>,
+PostScript or <acronym>PDF</acronym> designed for human modification. Examples
+of transparent image formats include <acronym>PNG</acronym>, <acronym>XCF</acronym> and
+<acronym>JPG</acronym>. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, <acronym>SGML</acronym> or
+<acronym>XML</acronym> for which the <acronym>DTD</acronym> and/or processing tools are
+not generally available, and the machine-generated <acronym>HTML</acronym>,
+PostScript or <acronym>PDF</acronym> produced by some word processors for
+output purposes only.
+</p>
+<p>The &ldquo;Title Page&rdquo; 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, &ldquo;Title Page&rdquo; means
+the text near the most prominent appearance of the work&rsquo;s title,
+preceding the beginning of the body of the text.
+</p>
+<p>The &ldquo;publisher&rdquo; means any person or entity that distributes copies
+of the Document to the public.
+</p>
+<p>A section &ldquo;Entitled XYZ&rdquo; 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 &ldquo;Acknowledgements&rdquo;,
+&ldquo;Dedications&rdquo;, &ldquo;Endorsements&rdquo;, or &ldquo;History&rdquo;.) To &ldquo;Preserve the Title&rdquo;
+of such a section when you modify the Document means that it remains a
+section &ldquo;Entitled XYZ&rdquo; 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>
+</li><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>
+</li><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&rsquo;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>
+</li><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>
+<ol type="A" start="1">
+<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.
+
+</li><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.
+
+</li><li> State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+</li><li> Preserve all the copyright notices of the Document.
+
+</li><li> Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+</li><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.
+
+</li><li> Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document&rsquo;s license notice.
+
+</li><li> Include an unaltered copy of this License.
+
+</li><li> Preserve the section Entitled &ldquo;History&rdquo;, 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 &ldquo;History&rdquo; 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.
+
+</li><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 &ldquo;History&rdquo; 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.
+
+</li><li> For any section Entitled &ldquo;Acknowledgements&rdquo; or &ldquo;Dedications&rdquo;, 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.
+
+</li><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.
+
+</li><li> Delete any section Entitled &ldquo;Endorsements&rdquo;. Such a section
+may not be included in the Modified Version.
+
+</li><li> Do not retitle any existing section to be Entitled &ldquo;Endorsements&rdquo; or
+to conflict in title with any Invariant Section.
+
+</li><li> Preserve any Warranty Disclaimers.
+</li></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&rsquo;s license notice.
+These titles must be distinct from any other section titles.
+</p>
+<p>You may add a section Entitled &ldquo;Endorsements&rdquo;, provided it contains
+nothing but endorsements of your Modified Version by various
+parties&mdash;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>
+</li><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 &ldquo;History&rdquo;
+in the various original documents, forming one section Entitled
+&ldquo;History&rdquo;; likewise combine any sections Entitled &ldquo;Acknowledgements&rdquo;,
+and any sections Entitled &ldquo;Dedications&rdquo;. You must delete all
+sections Entitled &ldquo;Endorsements.&rdquo;
+</p>
+</li><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>
+</li><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 &ldquo;aggregate&rdquo; if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation&rsquo;s users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+</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&rsquo;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>
+</li><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 &ldquo;Acknowledgements&rdquo;,
+&ldquo;Dedications&rdquo;, or &ldquo;History&rdquo;, the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+</p>
+</li><li> TERMINATION
+
+<p>You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+</p>
+<p>However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+</p>
+<p>Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+</p>
+<p>Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+</p>
+</li><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 &ldquo;or any later version&rdquo; applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy&rsquo;s public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+</p>
+</li><li> RELICENSING
+
+<p>&ldquo;Massive Multiauthor Collaboration Site&rdquo; (or &ldquo;MMC Site&rdquo;) means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+&ldquo;Massive Multiauthor Collaboration&rdquo; (or &ldquo;MMC&rdquo;) contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+</p>
+<p>&ldquo;CC-BY-SA&rdquo; means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+</p>
+<p>&ldquo;Incorporate&rdquo; means to publish or republish a Document, in whole or
+in part, as part of another Document.
+</p>
+<p>An MMC is &ldquo;eligible for relicensing&rdquo; if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+</p>
+<p>The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+</p>
+</li></ol>
+
+<a name="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></a>
+<h3 class="heading">ADDENDUM: How to use this License for your documents</h3>
+
+<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>
+<div class="smallexample">
+<pre class="smallexample"> 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.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+</pre></div>
+
+<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the &ldquo;with&hellip;Texts.&rdquo; line with this:
+</p>
+<div class="smallexample">
+<pre class="smallexample"> 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>.
+</pre></div>
+
+<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>
+
+
+<hr>
+<a name="Indexes"></a>
+<div class="header">
+<p>
+Previous: <a href="#GNU-Free-Documentation-License" accesskey="p" rel="prev">GNU Free Documentation License</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Indexes-1"></a>
+<h2 class="appendix">Appendix D Indexes</h2>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="#Builtin-Index" accesskey="1">Builtin Index</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Index of Bash builtin commands.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Reserved-Word-Index" accesskey="2">Reserved Word Index</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Index of Bash reserved words.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Variable-Index" accesskey="3">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">&bull; <a href="#Function-Index" accesskey="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">&bull; <a href="#Concept-Index" accesskey="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>
+
+<hr>
+<a name="Builtin-Index"></a>
+<div class="header">
+<p>
+Next: <a href="#Reserved-Word-Index" accesskey="n" rel="next">Reserved Word Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Index-of-Shell-Builtin-Commands"></a>
+<h3 class="appendixsec">D.1 Index of Shell Builtin Commands</h3>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Builtin-Index_bt_symbol-1"><b>.</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_symbol-2"><b>:</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_symbol-3"><b>[</b></a>
+ &nbsp;
+<br>
+<a class="summary-letter" href="#Builtin-Index_bt_letter-A"><b>A</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-G"><b>G</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-H"><b>H</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-J"><b>J</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-K"><b>K</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-L"><b>L</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-M"><b>M</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-P"><b>P</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-R"><b>R</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-U"><b>U</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-W"><b>W</b></a>
+ &nbsp;
+</td></tr></table>
+<table class="index-bt" border="0">
+<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_symbol-1">.</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_002e"><code>.</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_symbol-2">:</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_003a"><code>:</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_symbol-3">[</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_005b"><code>[</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-A">A</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-alias"><code>alias</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-B">B</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-bg"><code>bg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-bind"><code>bind</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-break"><code>break</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-builtin"><code>builtin</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-C">C</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-caller"><code>caller</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-cd"><code>cd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-command"><code>command</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-compgen"><code>compgen</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-complete"><code>complete</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-compopt"><code>compopt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-continue"><code>continue</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-D">D</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-declare"><code>declare</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-dirs"><code>dirs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-disown"><code>disown</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-E">E</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-echo"><code>echo</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-enable"><code>enable</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-eval"><code>eval</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-exec"><code>exec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-exit"><code>exit</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-export"><code>export</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-F">F</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-fc"><code>fc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-fg"><code>fg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-G">G</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-getopts"><code>getopts</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-H">H</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-hash"><code>hash</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-help"><code>help</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history"><code>history</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-J">J</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-jobs"><code>jobs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-K">K</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-kill"><code>kill</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-L">L</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-let"><code>let</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-local"><code>local</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-logout"><code>logout</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-M">M</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-mapfile"><code>mapfile</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-P">P</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-popd"><code>popd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-printf"><code>printf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-pushd"><code>pushd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-pwd"><code>pwd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-R">R</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-read"><code>read</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-readarray"><code>readarray</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-readonly"><code>readonly</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-return"><code>return</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-S">S</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-set"><code>set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#The-Set-Builtin">The Set Builtin</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shift"><code>shift</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shopt"><code>shopt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#The-Shopt-Builtin">The Shopt Builtin</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-source"><code>source</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-suspend"><code>suspend</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-T">T</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-test"><code>test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-times"><code>times</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-trap"><code>trap</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-type"><code>type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-typeset"><code>typeset</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-U">U</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-ulimit"><code>ulimit</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-umask"><code>umask</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-unalias"><code>unalias</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Builtins">Bash Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-unset"><code>unset</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Builtin-Index_bt_letter-W">W</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-wait"><code>wait</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Builtins">Job Control Builtins</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+</table>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Builtin-Index_bt_symbol-1"><b>.</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_symbol-2"><b>:</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_symbol-3"><b>[</b></a>
+ &nbsp;
+<br>
+<a class="summary-letter" href="#Builtin-Index_bt_letter-A"><b>A</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-G"><b>G</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-H"><b>H</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-J"><b>J</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-K"><b>K</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-L"><b>L</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-M"><b>M</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-P"><b>P</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-R"><b>R</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-U"><b>U</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Builtin-Index_bt_letter-W"><b>W</b></a>
+ &nbsp;
+</td></tr></table>
+
+<hr>
+<a name="Reserved-Word-Index"></a>
+<div class="header">
+<p>
+Next: <a href="#Variable-Index" accesskey="n" rel="next">Variable Index</a>, Previous: <a href="#Builtin-Index" accesskey="p" rel="prev">Builtin Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Index-of-Shell-Reserved-Words"></a>
+<h3 class="appendixsec">D.2 Index of Shell Reserved Words</h3>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-1"><b>!</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-2"><b>[</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-3"><b>]</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-4"><b>{</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-5"><b>}</b></a>
+ &nbsp;
+<br>
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-I"><b>I</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-U"><b>U</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a>
+ &nbsp;
+</td></tr></table>
+<table class="index-rw" border="0">
+<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_symbol-1">!</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0021"><code>!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_symbol-2">[</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_005b_005b"><code>[[</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_symbol-3">]</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_005d_005d"><code>]]</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_symbol-4">{</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_007b"><code>{</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Grouping">Command Grouping</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_symbol-5">}</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_007d"><code>}</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Grouping">Command Grouping</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-C">C</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-case"><code>case</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-D">D</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-do"><code>do</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-done"><code>done</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-E">E</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-elif"><code>elif</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-else"><code>else</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-esac"><code>esac</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-F">F</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-fi"><code>fi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-for"><code>for</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-function"><code>function</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Functions">Shell Functions</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-I">I</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-if"><code>if</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-in"><code>in</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-S">S</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-select"><code>select</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-T">T</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-then"><code>then</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-time"><code>time</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-U">U</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-until"><code>until</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Reserved-Word-Index_rw_letter-W">W</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-while"><code>while</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+</table>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-1"><b>!</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-2"><b>[</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-3"><b>]</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-4"><b>{</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_symbol-5"><b>}</b></a>
+ &nbsp;
+<br>
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-I"><b>I</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-U"><b>U</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a>
+ &nbsp;
+</td></tr></table>
+
+<hr>
+<a name="Variable-Index"></a>
+<div class="header">
+<p>
+Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Previous: <a href="#Reserved-Word-Index" accesskey="p" rel="prev">Reserved Word Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Parameter-and-Variable-Index"></a>
+<h3 class="appendixsec">D.3 Parameter and Variable Index</h3>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Variable-Index_vr_symbol-1"><b>!</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-2"><b>#</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-3"><b>$</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-4"><b>*</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-5"><b>-</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-6"><b>0</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-7"><b>?</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-8"><b>@</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-9"><b>_</b></a>
+ &nbsp;
+<br>
+<a class="summary-letter" href="#Variable-Index_vr_letter-A"><b>A</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-G"><b>G</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-H"><b>H</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-I"><b>I</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-K"><b>K</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-L"><b>L</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-M"><b>M</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-O"><b>O</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-P"><b>P</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-R"><b>R</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-U"><b>U</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-V"><b>V</b></a>
+ &nbsp;
+</td></tr></table>
+<table class="index-vr" border="0">
+<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-1">!</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0021-1"><code>!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-2">#</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0023"><code>#</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-3">$</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024"><code>$</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024_0021"><code>$!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024_0023"><code>$#</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024_0024"><code>$$</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024_002a"><code>$*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024_002d"><code>$-</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_00240"><code>$0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024_003f"><code>$?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024_0040"><code>$@</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0024_005f"><code>$_</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-4">*</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_002a"><code>*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-5">-</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_002d"><code>-</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-6">0</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-0"><code>0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-7">?</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_003f"><code>?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-8">@</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_0040"><code>@</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_symbol-9">_</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-_005f"><code>_</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-A">A</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-auto_005fresume"><code>auto_resume</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Variables">Job Control Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-B">B</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH"><code>BASH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASHOPTS"><code>BASHOPTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASHPID"><code>BASHPID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fALIASES"><code>BASH_ALIASES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fARGC"><code>BASH_ARGC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fARGV"><code>BASH_ARGV</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fARGV0"><code>BASH_ARGV0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fCMDS"><code>BASH_CMDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fCOMMAND"><code>BASH_COMMAND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fCOMPAT"><code>BASH_COMPAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fENV"><code>BASH_ENV</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fEXECUTION_005fSTRING"><code>BASH_EXECUTION_STRING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fLINENO"><code>BASH_LINENO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fLOADABLES_005fPATH"><code>BASH_LOADABLES_PATH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fREMATCH"><code>BASH_REMATCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fSOURCE"><code>BASH_SOURCE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fSUBSHELL"><code>BASH_SUBSHELL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fVERSINFO"><code>BASH_VERSINFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fVERSION"><code>BASH_VERSION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-BASH_005fXTRACEFD"><code>BASH_XTRACEFD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-bell_002dstyle"><code>bell-style</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-bind_002dtty_002dspecial_002dchars"><code>bind-tty-special-chars</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-blink_002dmatching_002dparen"><code>blink-matching-paren</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-C">C</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-CDPATH"><code>CDPATH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-CHILD_005fMAX"><code>CHILD_MAX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-colored_002dcompletion_002dprefix"><code>colored-completion-prefix</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-colored_002dstats"><code>colored-stats</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COLUMNS"><code>COLUMNS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-comment_002dbegin"><code>comment-begin</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-completion_002ddisplay_002dwidth"><code>completion-display-width</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-completion_002dignore_002dcase"><code>completion-ignore-case</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-completion_002dmap_002dcase"><code>completion-map-case</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-completion_002dprefix_002ddisplay_002dlength"><code>completion-prefix-display-length</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-completion_002dquery_002ditems"><code>completion-query-items</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COMPREPLY"><code>COMPREPLY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COMP_005fCWORD"><code>COMP_CWORD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COMP_005fKEY"><code>COMP_KEY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COMP_005fLINE"><code>COMP_LINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COMP_005fPOINT"><code>COMP_POINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COMP_005fTYPE"><code>COMP_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COMP_005fWORDBREAKS"><code>COMP_WORDBREAKS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COMP_005fWORDS"><code>COMP_WORDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-convert_002dmeta"><code>convert-meta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-COPROC"><code>COPROC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-D">D</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-DIRSTACK"><code>DIRSTACK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-disable_002dcompletion"><code>disable-completion</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-E">E</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-echo_002dcontrol_002dcharacters"><code>echo-control-characters</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-editing_002dmode"><code>editing-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-EMACS"><code>EMACS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-emacs_002dmode_002dstring"><code>emacs-mode-string</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-enable_002dbracketed_002dpaste"><code>enable-bracketed-paste</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-enable_002dkeypad"><code>enable-keypad</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-ENV"><code>ENV</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-EPOCHREALTIME"><code>EPOCHREALTIME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-EPOCHSECONDS"><code>EPOCHSECONDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-EUID"><code>EUID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-EXECIGNORE"><code>EXECIGNORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expand_002dtilde"><code>expand-tilde</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-F">F</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-FCEDIT"><code>FCEDIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-FIGNORE"><code>FIGNORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-FUNCNAME"><code>FUNCNAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-FUNCNEST"><code>FUNCNEST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-G">G</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-GLOBIGNORE"><code>GLOBIGNORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-GROUPS"><code>GROUPS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-H">H</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-histchars"><code>histchars</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HISTCMD"><code>HISTCMD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HISTCONTROL"><code>HISTCONTROL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HISTFILE"><code>HISTFILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HISTFILESIZE"><code>HISTFILESIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HISTIGNORE"><code>HISTIGNORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history_002dpreserve_002dpoint"><code>history-preserve-point</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history_002dsize"><code>history-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HISTSIZE"><code>HISTSIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HISTTIMEFORMAT"><code>HISTTIMEFORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HOME"><code>HOME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-horizontal_002dscroll_002dmode"><code>horizontal-scroll-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HOSTFILE"><code>HOSTFILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HOSTNAME"><code>HOSTNAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HOSTTYPE"><code>HOSTTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-I">I</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-IFS"><code>IFS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-IGNOREEOF"><code>IGNOREEOF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-input_002dmeta"><code>input-meta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-INPUTRC"><code>INPUTRC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-INSIDE_005fEMACS"><code>INSIDE_EMACS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-isearch_002dterminators"><code>isearch-terminators</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-K">K</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-keymap"><code>keymap</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-L">L</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LANG"><code>LANG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LC_005fALL"><code>LC_ALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LC_005fCOLLATE"><code>LC_COLLATE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LC_005fCTYPE"><code>LC_CTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LC_005fMESSAGES"><code>LC_MESSAGES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LC_005fMESSAGES-1"><code>LC_MESSAGES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LC_005fNUMERIC"><code>LC_NUMERIC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LC_005fTIME"><code>LC_TIME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LINENO"><code>LINENO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LINES"><code>LINES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-M">M</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-MACHTYPE"><code>MACHTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-MAIL"><code>MAIL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-MAILCHECK"><code>MAILCHECK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-MAILPATH"><code>MAILPATH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-MAPFILE"><code>MAPFILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-mark_002dmodified_002dlines"><code>mark-modified-lines</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-mark_002dsymlinked_002ddirectories"><code>mark-symlinked-directories</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-match_002dhidden_002dfiles"><code>match-hidden-files</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-menu_002dcomplete_002ddisplay_002dprefix"><code>menu-complete-display-prefix</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-meta_002dflag"><code>meta-flag</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-O">O</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-OLDPWD"><code>OLDPWD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-OPTARG"><code>OPTARG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-OPTERR"><code>OPTERR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-OPTIND"><code>OPTIND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-OSTYPE"><code>OSTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-output_002dmeta"><code>output-meta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-P">P</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-page_002dcompletions"><code>page-completions</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PATH"><code>PATH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PIPESTATUS"><code>PIPESTATUS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-POSIXLY_005fCORRECT"><code>POSIXLY_CORRECT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PPID"><code>PPID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PROMPT_005fCOMMAND"><code>PROMPT_COMMAND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PROMPT_005fDIRTRIM"><code>PROMPT_DIRTRIM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PS0"><code>PS0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PS1"><code>PS1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PS2"><code>PS2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PS3"><code>PS3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PS4"><code>PS4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PWD"><code>PWD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-R">R</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-RANDOM"><code>RANDOM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-READLINE_005fLINE"><code>READLINE_LINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-READLINE_005fPOINT"><code>READLINE_POINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-REPLY"><code>REPLY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-revert_002dall_002dat_002dnewline"><code>revert-all-at-newline</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-S">S</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-SECONDS"><code>SECONDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-SHELL"><code>SHELL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-SHELLOPTS"><code>SHELLOPTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-SHLVL"><code>SHLVL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-show_002dall_002dif_002dambiguous"><code>show-all-if-ambiguous</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-show_002dall_002dif_002dunmodified"><code>show-all-if-unmodified</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-show_002dmode_002din_002dprompt"><code>show-mode-in-prompt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-skip_002dcompleted_002dtext"><code>skip-completed-text</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-T">T</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-TEXTDOMAIN"><code>TEXTDOMAIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-TEXTDOMAINDIR"><code>TEXTDOMAINDIR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-TIMEFORMAT"><code>TIMEFORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-TMOUT"><code>TMOUT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-TMPDIR"><code>TMPDIR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-U">U</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-UID"><code>UID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Variable-Index_vr_letter-V">V</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-vi_002dcmd_002dmode_002dstring"><code>vi-cmd-mode-string</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-vi_002dins_002dmode_002dstring"><code>vi-ins-mode-string</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-visible_002dstats"><code>visible-stats</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+</table>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Variable-Index_vr_symbol-1"><b>!</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-2"><b>#</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-3"><b>$</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-4"><b>*</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-5"><b>-</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-6"><b>0</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-7"><b>?</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-8"><b>@</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_symbol-9"><b>_</b></a>
+ &nbsp;
+<br>
+<a class="summary-letter" href="#Variable-Index_vr_letter-A"><b>A</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-G"><b>G</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-H"><b>H</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-I"><b>I</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-K"><b>K</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-L"><b>L</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-M"><b>M</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-O"><b>O</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-P"><b>P</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-R"><b>R</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-U"><b>U</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Variable-Index_vr_letter-V"><b>V</b></a>
+ &nbsp;
+</td></tr></table>
+
+<hr>
+<a name="Function-Index"></a>
+<div class="header">
+<p>
+Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previous: <a href="#Variable-Index" accesskey="p" rel="prev">Variable Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Function-Index-1"></a>
+<h3 class="appendixsec">D.4 Function Index</h3>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Function-Index_fn_letter-A"><b>A</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-G"><b>G</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-H"><b>H</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-I"><b>I</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-K"><b>K</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-M"><b>M</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-N"><b>N</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-O"><b>O</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-P"><b>P</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-Q"><b>Q</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-R"><b>R</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-U"><b>U</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-Y"><b>Y</b></a>
+ &nbsp;
+</td></tr></table>
+<table class="index-fn" border="0">
+<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-A">A</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-abort-_0028C_002dg_0029"><code>abort (C-g)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-accept_002dline-_0028Newline-or-Return_0029"><code>accept-line (Newline or Return)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-alias_002dexpand_002dline-_0028_0029"><code>alias-expand-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-B">B</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-backward_002dchar-_0028C_002db_0029"><code>backward-char (C-b)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-backward_002ddelete_002dchar-_0028Rubout_0029"><code>backward-delete-char (Rubout)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"><code>backward-kill-line (C-x Rubout)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-backward_002dkill_002dword-_0028M_002dDEL_0029"><code>backward-kill-word (M-<span class="key">DEL</span>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-backward_002dword-_0028M_002db_0029"><code>backward-word (M-b)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"><code>beginning-of-history (M-&lt;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-beginning_002dof_002dline-_0028C_002da_0029"><code>beginning-of-line (C-a)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-bracketed_002dpaste_002dbegin-_0028_0029"><code>bracketed-paste-begin ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-C">C</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"><code>call-last-kbd-macro (C-x e)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-capitalize_002dword-_0028M_002dc_0029"><code>capitalize-word (M-c)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-character_002dsearch-_0028C_002d_005d_0029"><code>character-search (C-])</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"><code>character-search-backward (M-C-])</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-clear_002dscreen-_0028C_002dl_0029"><code>clear-screen (C-l)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-complete-_0028TAB_0029"><code>complete (<span class="key">TAB</span>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-complete_002dcommand-_0028M_002d_0021_0029"><code>complete-command (M-!)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-complete_002dfilename-_0028M_002d_002f_0029"><code>complete-filename (M-/)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-complete_002dhostname-_0028M_002d_0040_0029"><code>complete-hostname (M-@)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"><code>complete-into-braces (M-{)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-complete_002dusername-_0028M_002d_007e_0029"><code>complete-username (M-~)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-complete_002dvariable-_0028M_002d_0024_0029"><code>complete-variable (M-$)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-copy_002dbackward_002dword-_0028_0029"><code>copy-backward-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-copy_002dforward_002dword-_0028_0029"><code>copy-forward-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-copy_002dregion_002das_002dkill-_0028_0029"><code>copy-region-as-kill ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-D">D</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-dabbrev_002dexpand-_0028_0029"><code>dabbrev-expand ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-delete_002dchar-_0028C_002dd_0029"><code>delete-char (C-d)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-delete_002dchar_002dor_002dlist-_0028_0029"><code>delete-char-or-list ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-delete_002dhorizontal_002dspace-_0028_0029"><code>delete-horizontal-space ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"><code>digit-argument (<kbd>M-0</kbd>, <kbd>M-1</kbd>, &hellip; <kbd>M--</kbd>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"><code>display-shell-version (C-x C-v)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"><code>do-lowercase-version (M-A, M-B, M-<var>x</var>, &hellip;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-downcase_002dword-_0028M_002dl_0029"><code>downcase-word (M-l)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-dump_002dfunctions-_0028_0029"><code>dump-functions ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-dump_002dmacros-_0028_0029"><code>dump-macros ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-dump_002dvariables-_0028_0029"><code>dump-variables ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"><code>dynamic-complete-history (M-<span class="key">TAB</span>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-E">E</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"><code>edit-and-execute-command (C-x C-e)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"><code>end-kbd-macro (C-x ))</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-end_002dof_002dfile-_0028usually-C_002dd_0029"><code><i>end-of-file</i> (usually C-d)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-end_002dof_002dhistory-_0028M_002d_003e_0029"><code>end-of-history (M-&gt;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-end_002dof_002dline-_0028C_002de_0029"><code>end-of-line (C-e)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"><code>exchange-point-and-mark (C-x C-x)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-F">F</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-forward_002dbackward_002ddelete_002dchar-_0028_0029"><code>forward-backward-delete-char ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-forward_002dchar-_0028C_002df_0029"><code>forward-char (C-f)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-forward_002dsearch_002dhistory-_0028C_002ds_0029"><code>forward-search-history (C-s)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-forward_002dword-_0028M_002df_0029"><code>forward-word (M-f)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-G">G</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-glob_002dcomplete_002dword-_0028M_002dg_0029"><code>glob-complete-word (M-g)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"><code>glob-expand-word (C-x *)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"><code>glob-list-expansions (C-x g)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-H">H</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"><code>history-and-alias-expand-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history_002dexpand_002dline-_0028M_002d_005e_0029"><code>history-expand-line (M-^)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history_002dsearch_002dbackward-_0028_0029"><code>history-search-backward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history_002dsearch_002dforward-_0028_0029"><code>history-search-forward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"><code>history-substring-search-backward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history_002dsubstring_002dsearch_002dforward-_0028_0029"><code>history-substring-search-forward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-I">I</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-insert_002dcomment-_0028M_002d_0023_0029"><code>insert-comment (M-#)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-insert_002dcompletions-_0028M_002d_002a_0029"><code>insert-completions (M-*)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"><code>insert-last-argument (M-. or M-_)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-K">K</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-kill_002dline-_0028C_002dk_0029"><code>kill-line (C-k)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-kill_002dregion-_0028_0029"><code>kill-region ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-kill_002dwhole_002dline-_0028_0029"><code>kill-whole-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-kill_002dword-_0028M_002dd_0029"><code>kill-word (M-d)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-M">M</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-magic_002dspace-_0028_0029"><code>magic-space ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-menu_002dcomplete-_0028_0029"><code>menu-complete ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-menu_002dcomplete_002dbackward-_0028_0029"><code>menu-complete-backward ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-N">N</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-next_002dhistory-_0028C_002dn_0029"><code>next-history (C-n)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-next_002dscreen_002dline-_0028_0029"><code>next-screen-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"><code>non-incremental-forward-search-history (M-n)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"><code>non-incremental-reverse-search-history (M-p)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-O">O</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-operate_002dand_002dget_002dnext-_0028C_002do_0029"><code>operate-and-get-next (C-o)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-overwrite_002dmode-_0028_0029"><code>overwrite-mode ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-P">P</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"><code>possible-command-completions (C-x !)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-possible_002dcompletions-_0028M_002d_003f_0029"><code>possible-completions (M-?)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"><code>possible-filename-completions (C-x /)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"><code>possible-hostname-completions (C-x @)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"><code>possible-username-completions (C-x ~)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"><code>possible-variable-completions (C-x $)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-prefix_002dmeta-_0028ESC_0029"><code>prefix-meta (<span class="key">ESC</span>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-previous_002dhistory-_0028C_002dp_0029"><code>previous-history (C-p)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-previous_002dscreen_002dline-_0028_0029"><code>previous-screen-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-print_002dlast_002dkbd_002dmacro-_0028_0029"><code>print-last-kbd-macro ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-Q">Q</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"><code>quoted-insert (C-q or C-v)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-R">R</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"><code>re-read-init-file (C-x C-r)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-redraw_002dcurrent_002dline-_0028_0029"><code>redraw-current-line ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"><code>reverse-search-history (C-r)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-revert_002dline-_0028M_002dr_0029"><code>revert-line (M-r)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-S">S</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"><code>self-insert (a, b, A, 1, !, &hellip;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-set_002dmark-_0028C_002d_0040_0029"><code>set-mark (C-@)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell_002dbackward_002dkill_002dword-_0028_0029"><code>shell-backward-kill-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell_002dbackward_002dword-_0028_0029"><code>shell-backward-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"><code>shell-expand-line (M-C-e)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell_002dforward_002dword-_0028_0029"><code>shell-forward-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell_002dkill_002dword-_0028_0029"><code>shell-kill-word ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-skip_002dcsi_002dsequence-_0028_0029"><code>skip-csi-sequence ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"><code>start-kbd-macro (C-x ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-T">T</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-tilde_002dexpand-_0028M_002d_0026_0029"><code>tilde-expand (M-&amp;)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-transpose_002dchars-_0028C_002dt_0029"><code>transpose-chars (C-t)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-transpose_002dwords-_0028M_002dt_0029"><code>transpose-words (M-t)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-U">U</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"><code>undo (C-_ or C-x C-u)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-universal_002dargument-_0028_0029"><code>universal-argument ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-unix_002dfilename_002drubout-_0028_0029"><code>unix-filename-rubout ()</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-unix_002dline_002ddiscard-_0028C_002du_0029"><code>unix-line-discard (C-u)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-unix_002dword_002drubout-_0028C_002dw_0029"><code>unix-word-rubout (C-w)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-upcase_002dword-_0028M_002du_0029"><code>upcase-word (M-u)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Function-Index_fn_letter-Y">Y</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-yank-_0028C_002dy_0029"><code>yank (C-y)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"><code>yank-last-arg (M-. or M-_)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"><code>yank-nth-arg (M-C-y)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-History">Commands For History</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-yank_002dpop-_0028M_002dy_0029"><code>yank-pop (M-y)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+</table>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Function-Index_fn_letter-A"><b>A</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-G"><b>G</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-H"><b>H</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-I"><b>I</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-K"><b>K</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-M"><b>M</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-N"><b>N</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-O"><b>O</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-P"><b>P</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-Q"><b>Q</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-R"><b>R</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-U"><b>U</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Function-Index_fn_letter-Y"><b>Y</b></a>
+ &nbsp;
+</td></tr></table>
+
+<hr>
+<a name="Concept-Index"></a>
+<div class="header">
+<p>
+Previous: <a href="#Function-Index" accesskey="p" rel="prev">Function Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Concept-Index-1"></a>
+<h3 class="appendixsec">D.5 Concept Index</h3>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Concept-Index_cp_letter-A"><b>A</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-H"><b>H</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-I"><b>I</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-J"><b>J</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-K"><b>K</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-L"><b>L</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-M"><b>M</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-N"><b>N</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-O"><b>O</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-Q"><b>Q</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-R"><b>R</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-V"><b>V</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-W"><b>W</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-Y"><b>Y</b></a>
+ &nbsp;
+</td></tr></table>
+<table class="index-cp" border="0">
+<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-A">A</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-alias-expansion">alias expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aliases">Aliases</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-arithmetic-evaluation">arithmetic evaluation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-arithmetic-expansion">arithmetic expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic-Expansion">Arithmetic Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-arithmetic_002c-shell">arithmetic, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-arrays">arrays</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arrays">Arrays</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-B">B</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-background">background</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Bash-configuration">Bash configuration</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Installation">Basic Installation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Bash-installation">Bash installation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Installation">Basic Installation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Bourne-shell">Bourne shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Shell-Features">Basic Shell Features</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-brace-expansion">brace expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Brace-Expansion">Brace Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-builtin-1">builtin</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-C">C</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-command-editing">command editing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-command-execution">command execution</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Search-and-Execution">Command Search and Execution</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-command-expansion">command expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Command-Expansion">Simple Command Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-command-history">command history</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Facilities">Bash History Facilities</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-command-search">command search</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Search-and-Execution">Command Search and Execution</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-command-substitution">command substitution</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Substitution">Command Substitution</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-command-timing">command timing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-commands_002c-compound">commands, compound</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Compound-Commands">Compound Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-commands_002c-conditional">commands, conditional</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Constructs">Conditional Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-commands_002c-grouping">commands, grouping</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Grouping">Command Grouping</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-commands_002c-lists">commands, lists</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Lists">Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-commands_002c-looping">commands, looping</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Constructs">Looping Constructs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-commands_002c-pipelines">commands, pipelines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-commands_002c-shell">commands, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Commands">Shell Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-commands_002c-simple">commands, simple</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Commands">Simple Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-comments_002c-shell">comments, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comments">Comments</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-completion-builtins">completion builtins</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-configuration">configuration</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Installation">Basic Installation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-control-operator">control operator</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-coprocess">coprocess</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Coprocesses">Coprocesses</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-D">D</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-directory-stack">directory stack</a>:</td><td>&nbsp;</td><td valign="top"><a href="#The-Directory-Stack">The Directory Stack</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-E">E</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-editing-command-lines">editing command lines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-environment">environment</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Environment">Environment</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-evaluation_002c-arithmetic">evaluation, arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-event-designators">event designators</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Event-Designators">Event Designators</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-execution-environment">execution environment</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Command-Execution-Environment">Command Execution Environment</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-exit-status">exit status</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-exit-status-1">exit status</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exit-Status">Exit Status</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expansion">expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Expansions">Shell Expansions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expansion_002c-arithmetic">expansion, arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic-Expansion">Arithmetic Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expansion_002c-brace">expansion, brace</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Brace-Expansion">Brace Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expansion_002c-filename">expansion, filename</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filename-Expansion">Filename Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expansion_002c-parameter">expansion, parameter</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expansion_002c-pathname">expansion, pathname</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filename-Expansion">Filename Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expansion_002c-tilde">expansion, tilde</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tilde-Expansion">Tilde Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expressions_002c-arithmetic">expressions, arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-expressions_002c-conditional">expressions, conditional</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-F">F</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-field">field</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-filename">filename</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-filename-expansion">filename expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filename-Expansion">Filename Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-foreground">foreground</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-functions_002c-shell">functions, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Functions">Shell Functions</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-H">H</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history-builtins">history builtins</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Builtins">Bash History Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history-events">history events</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Event-Designators">Event Designators</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history-expansion">history expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#History-Interaction">History Interaction</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-history-list">history list</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-History-Facilities">Bash History Facilities</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-History_002c-how-to-use">History, how to use</a>:</td><td>&nbsp;</td><td valign="top"><a href="#A-Programmable-Completion-Example">A Programmable Completion Example</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-I">I</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-identifier">identifier</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-initialization-file_002c-readline">initialization file, readline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File">Readline Init File</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-installation">installation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Installation">Basic Installation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-interaction_002c-readline">interaction, readline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Interaction">Readline Interaction</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-interactive-shell">interactive shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Invoking-Bash">Invoking Bash</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-interactive-shell-1">interactive shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interactive-Shells">Interactive Shells</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-internationalization">internationalization</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-J">J</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-job">job</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-job-control">job control</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-job-control-1">job control</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-K">K</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-kill-ring">kill ring</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-killing-text">killing text</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-L">L</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-localization">localization</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-login-shell">login shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Invoking-Bash">Invoking Bash</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-M">M</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-matching_002c-pattern">matching, pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pattern-Matching">Pattern Matching</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-metacharacter">metacharacter</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-N">N</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-name">name</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-native-languages">native languages</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-notation_002c-readline">notation, readline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-O">O</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-operator_002c-shell">operator, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-P">P</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-parameter-expansion">parameter expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-parameters">parameters</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameters">Shell Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-parameters_002c-positional">parameters, positional</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Positional-Parameters">Positional Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-parameters_002c-special">parameters, special</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Parameters">Special Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-pathname-expansion">pathname expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filename-Expansion">Filename Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-pattern-matching">pattern matching</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pattern-Matching">Pattern Matching</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-pipeline">pipeline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pipelines">Pipelines</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-POSIX">POSIX</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-POSIX-Mode">POSIX Mode</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-process-group">process group</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-process-group-ID">process group ID</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-process-substitution">process substitution</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Process-Substitution">Process Substitution</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-programmable-completion">programmable completion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Programmable-Completion">Programmable Completion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-prompting">prompting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Controlling-the-Prompt">Controlling the Prompt</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-Q">Q</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-quoting">quoting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Quoting">Quoting</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-quoting_002c-ANSI">quoting, ANSI</a>:</td><td>&nbsp;</td><td valign="top"><a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-R">R</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Readline_002c-how-to-use">Readline, how to use</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Variables">Job Control Variables</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-redirection">redirection</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Redirections">Redirections</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-reserved-word">reserved word</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-restricted-shell">restricted shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#The-Restricted-Shell">The Restricted Shell</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-return-status">return status</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-S">S</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell-arithmetic">shell arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Arithmetic">Shell Arithmetic</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell-function">shell function</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Functions">Shell Functions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell-script">shell script</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Scripts">Shell Scripts</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell-variable">shell variable</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameters">Shell Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell_002c-interactive">shell, interactive</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interactive-Shells">Interactive Shells</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-signal">signal</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-signal-handling">signal handling</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Signals">Signals</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-special-builtin">special builtin</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-special-builtin-1">special builtin</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Builtins">Special Builtins</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-startup-files">startup files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bash-Startup-Files">Bash Startup Files</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-suspending-jobs">suspending jobs</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Job-Control-Basics">Job Control Basics</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-T">T</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-tilde-expansion">tilde expansion</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tilde-Expansion">Tilde Expansion</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-token">token</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-translation_002c-native-languages">translation, native languages</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-V">V</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-variable_002c-shell">variable, shell</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Parameters">Shell Parameters</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-variables_002c-readline">variables, readline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-W">W</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-word">word</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Definitions">Definitions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-word-splitting">word splitting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Word-Splitting">Word Splitting</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Concept-Index_cp_letter-Y">Y</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-yanking-text">yanking text</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Readline-Killing-Commands">Readline Killing Commands</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+</table>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Concept-Index_cp_letter-A"><b>A</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-C"><b>C</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-D"><b>D</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-E"><b>E</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-F"><b>F</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-H"><b>H</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-I"><b>I</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-J"><b>J</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-K"><b>K</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-L"><b>L</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-M"><b>M</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-N"><b>N</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-O"><b>O</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-Q"><b>Q</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-R"><b>R</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-T"><b>T</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-V"><b>V</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-W"><b>W</b></a>
+ &nbsp;
+<a class="summary-letter" href="#Concept-Index_cp_letter-Y"><b>Y</b></a>
+ &nbsp;
+</td></tr></table>
+
+<hr>
+
+
+
+</body>
+</html>
diff --git a/doc/bashref.info b/doc/bashref.info
new file mode 100644
index 0000000..934c9fe
--- /dev/null
+++ b/doc/bashref.info
@@ -0,0 +1,11816 @@
+This is bashref.info, produced by makeinfo version 6.5 from
+bashref.texi.
+
+This text is a brief description of the features that are present in the
+Bash shell (version 5.0, 7 December 2018).
+
+ This is Edition 5.0, last updated 7 December 2018, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.0.
+
+ Copyright (C) 1988-2018 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts, and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License".
+INFO-DIR-SECTION Basics
+START-INFO-DIR-ENTRY
+* Bash: (bash). The GNU Bourne-Again SHell.
+END-INFO-DIR-ENTRY
+
+
+File: bashref.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
+
+Bash Features
+*************
+
+This text is a brief description of the features that are present in the
+Bash shell (version 5.0, 7 December 2018). The Bash home page is
+<http://www.gnu.org/software/bash/>.
+
+ This is Edition 5.0, last updated 7 December 2018, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.0.
+
+ Bash contains features that appear in other popular shells, and some
+features that only appear in Bash. Some of the shells that Bash has
+borrowed concepts from are the Bourne Shell ('sh'), the Korn Shell
+('ksh'), and the C-shell ('csh' and its successor, 'tcsh'). The
+following menu breaks the features up into categories, noting which
+features were inspired by other shells and which are specific to Bash.
+
+ 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.
+
+* Menu:
+
+* Introduction:: An introduction to the shell.
+* Definitions:: Some definitions used in the rest of this
+ manual.
+* Basic Shell Features:: The shell "building blocks".
+* Shell Builtin Commands:: Commands that are a part of the shell.
+* Shell Variables:: Variables used or set by Bash.
+* Bash Features:: Features found only in Bash.
+* Job Control:: What job control is and how Bash allows you
+ to use it.
+* Command Line Editing:: Chapter describing the command line
+ editing features.
+* Using History Interactively:: Command History Expansion
+* Installing Bash:: How to build and install Bash on your system.
+* Reporting Bugs:: How to report bugs in Bash.
+* Major Differences From The Bourne Shell:: A terse list of the differences
+ between Bash and historical
+ versions of /bin/sh.
+* GNU Free Documentation License:: Copying and sharing this documentation.
+* Indexes:: Various indexes for this manual.
+
+
+File: bashref.info, Node: Introduction, Next: Definitions, Up: Top
+
+1 Introduction
+**************
+
+* Menu:
+
+* What is Bash?:: A short description of Bash.
+* What is a shell?:: A brief introduction to shells.
+
+
+File: bashref.info, Node: What is Bash?, Next: What is a shell?, Up: Introduction
+
+1.1 What is Bash?
+=================
+
+Bash is the shell, or command language interpreter, for the GNU
+operating system. The name is an acronym for the 'Bourne-Again SHell',
+a pun on Stephen Bourne, the author of the direct ancestor of the
+current Unix shell 'sh', which appeared in the Seventh Edition Bell Labs
+Research version of Unix.
+
+ Bash is largely compatible with 'sh' and incorporates useful features
+from the Korn shell 'ksh' and the C shell 'csh'. It is intended to be a
+conformant implementation of the IEEE POSIX Shell and Tools portion of
+the IEEE POSIX specification (IEEE Standard 1003.1). It offers
+functional improvements over 'sh' for both interactive and programming
+use.
+
+ While the GNU operating system provides other shells, including a
+version of 'csh', Bash is the default shell. Like other GNU software,
+Bash is quite portable. It currently runs on nearly every version of
+Unix and a few other operating systems - independently-supported ports
+exist for MS-DOS, OS/2, and Windows platforms.
+
+
+File: bashref.info, Node: What is a shell?, Prev: What is Bash?, Up: Introduction
+
+1.2 What is a shell?
+====================
+
+At its base, a shell is simply a macro processor that executes commands.
+The term macro processor means functionality where text and symbols are
+expanded to create larger expressions.
+
+ A Unix shell is both a command interpreter and a programming
+language. As a command interpreter, the shell provides the user
+interface to the rich set of GNU utilities. The programming language
+features allow these utilities to be combined. Files containing
+commands can be created, and become commands themselves. These new
+commands have the same status as system commands in directories such as
+'/bin', allowing users or groups to establish custom environments to
+automate their common tasks.
+
+ Shells may be used interactively or non-interactively. In
+interactive mode, they accept input typed from the keyboard. When
+executing non-interactively, shells execute commands read from a file.
+
+ A shell allows execution of GNU commands, both synchronously and
+asynchronously. The shell waits for synchronous commands to complete
+before accepting more input; asynchronous commands continue to execute
+in parallel with the shell while it reads and executes additional
+commands. The "redirection" constructs permit fine-grained control of
+the input and output of those commands. Moreover, the shell allows
+control over the contents of commands' environments.
+
+ Shells also provide a small set of built-in commands ("builtins")
+implementing functionality impossible or inconvenient to obtain via
+separate utilities. For example, 'cd', 'break', 'continue', and 'exec'
+cannot be implemented outside of the shell because they directly
+manipulate the shell itself. The 'history', 'getopts', 'kill', or 'pwd'
+builtins, among others, could be implemented in separate utilities, but
+they are more convenient to use as builtin commands. All of the shell
+builtins are described in subsequent sections.
+
+ While executing commands is essential, most of the power (and
+complexity) of shells is due to their embedded programming languages.
+Like any high-level language, the shell provides variables, flow control
+constructs, quoting, and functions.
+
+ Shells offer features geared specifically for interactive use rather
+than to augment the programming language. These interactive features
+include job control, command line editing, command history and aliases.
+Each of these features is described in this manual.
+
+
+File: bashref.info, Node: Definitions, Next: Basic Shell Features, Prev: Introduction, Up: Top
+
+2 Definitions
+*************
+
+These definitions are used throughout the remainder of this manual.
+
+'POSIX'
+ 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.
+
+'blank'
+ A space or tab character.
+
+'builtin'
+ A command that is implemented internally by the shell itself,
+ rather than by an executable program somewhere in the file system.
+
+'control operator'
+ A 'token' that performs a control function. It is a 'newline' or
+ one of the following: '||', '&&', '&', ';', ';;', ';&', ';;&', '|',
+ '|&', '(', or ')'.
+
+'exit status'
+ The value returned by a command to its caller. The value is
+ restricted to eight bits, so the maximum value is 255.
+
+'field'
+ 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.
+
+'filename'
+ A string of characters used to identify a file.
+
+'job'
+ A set of processes comprising a pipeline, and any processes
+ descended from it, that are all in the same process group.
+
+'job control'
+ A mechanism by which users can selectively stop (suspend) and
+ restart (resume) execution of processes.
+
+'metacharacter'
+ A character that, when unquoted, separates words. A metacharacter
+ is a 'space', 'tab', 'newline', or one of the following characters:
+ '|', '&', ';', '(', ')', '<', or '>'.
+
+'name'
+ A 'word' consisting solely of letters, numbers, and underscores,
+ and beginning with a letter or underscore. 'Name's are used as
+ shell variable and function names. Also referred to as an
+ 'identifier'.
+
+'operator'
+ A 'control operator' or a 'redirection operator'. *Note
+ Redirections::, for a list of redirection operators. Operators
+ contain at least one unquoted 'metacharacter'.
+
+'process group'
+ A collection of related processes each having the same process
+ group ID.
+
+'process group ID'
+ A unique identifier that represents a 'process group' during its
+ lifetime.
+
+'reserved word'
+ A 'word' that has a special meaning to the shell. Most reserved
+ words introduce shell flow control constructs, such as 'for' and
+ 'while'.
+
+'return status'
+ A synonym for 'exit status'.
+
+'signal'
+ A mechanism by which a process may be notified by the kernel of an
+ event occurring in the system.
+
+'special builtin'
+ A shell builtin command that has been classified as special by the
+ POSIX standard.
+
+'token'
+ A sequence of characters considered a single unit by the shell. It
+ is either a 'word' or an 'operator'.
+
+'word'
+ A sequence of characters treated as a unit by the shell. Words may
+ not include unquoted 'metacharacters'.
+
+
+File: bashref.info, Node: Basic Shell Features, Next: Shell Builtin Commands, Prev: Definitions, Up: Top
+
+3 Basic Shell Features
+**********************
+
+Bash is an acronym for 'Bourne-Again SHell'. The Bourne shell is the
+traditional Unix shell originally written by Stephen Bourne. All of the
+Bourne shell builtin commands are available in Bash, The rules for
+evaluation and quoting are taken from the POSIX specification for the
+'standard' Unix shell.
+
+ This chapter briefly summarizes the shell's 'building blocks':
+commands, control structures, shell functions, shell parameters, shell
+expansions, redirections, which are a way to direct input and output
+from and to named files, and how the shell executes commands.
+
+* Menu:
+
+* Shell Syntax:: What your input means to the shell.
+* Shell Commands:: The types of commands you can use.
+* Shell Functions:: Grouping commands by name.
+* Shell Parameters:: How the shell stores values.
+* Shell Expansions:: How Bash expands parameters and the various
+ expansions available.
+* Redirections:: A way to control where input and output go.
+* Executing Commands:: What happens when you run a command.
+* Shell Scripts:: Executing files of shell commands.
+
+
+File: bashref.info, Node: Shell Syntax, Next: Shell Commands, Up: Basic Shell Features
+
+3.1 Shell Syntax
+================
+
+* Menu:
+
+* Shell Operation:: The basic operation of the shell.
+* Quoting:: How to remove the special meaning from characters.
+* Comments:: How to specify comments.
+
+When the shell reads input, it proceeds through a sequence of
+operations. If the input indicates the beginning of a comment, the
+shell ignores the comment symbol ('#'), and the rest of that line.
+
+ Otherwise, roughly speaking, the shell reads its input and divides
+the input into words and operators, employing the quoting rules to
+select which meanings to assign various words and characters.
+
+ The shell then parses these tokens into commands and other
+constructs, removes the special meaning of certain words or characters,
+expands others, redirects input and output as needed, executes the
+specified command, waits for the command's exit status, and makes that
+exit status available for further inspection or processing.
+
+
+File: bashref.info, Node: Shell Operation, Next: Quoting, Up: Shell Syntax
+
+3.1.1 Shell Operation
+---------------------
+
+The following is a brief description of the shell's operation when it
+reads and executes a command. Basically, the shell does the following:
+
+ 1. Reads its input from a file (*note Shell Scripts::), from a string
+ supplied as an argument to the '-c' invocation option (*note
+ Invoking Bash::), or from the user's terminal.
+
+ 2. Breaks the input into words and operators, obeying the quoting
+ rules described in *note Quoting::. These tokens are separated by
+ 'metacharacters'. Alias expansion is performed by this step (*note
+ Aliases::).
+
+ 3. Parses the tokens into simple and compound commands (*note Shell
+ Commands::).
+
+ 4. Performs the various shell expansions (*note Shell Expansions::),
+ breaking the expanded tokens into lists of filenames (*note
+ Filename Expansion::) and commands and arguments.
+
+ 5. Performs any necessary redirections (*note Redirections::) and
+ removes the redirection operators and their operands from the
+ argument list.
+
+ 6. Executes the command (*note Executing Commands::).
+
+ 7. Optionally waits for the command to complete and collects its exit
+ status (*note Exit Status::).
+
+
+File: bashref.info, Node: Quoting, Next: Comments, Prev: Shell Operation, Up: Shell Syntax
+
+3.1.2 Quoting
+-------------
+
+* Menu:
+
+* Escape Character:: How to remove the special meaning from a single
+ character.
+* Single Quotes:: How to inhibit all interpretation of a sequence
+ of characters.
+* Double Quotes:: How to suppress most of the interpretation of a
+ sequence of characters.
+* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
+* Locale Translation:: How to translate strings into different languages.
+
+Quoting is used to remove the special meaning of certain characters or
+words to the shell. Quoting can be used to disable special treatment
+for special characters, to prevent reserved words from being recognized
+as such, and to prevent parameter expansion.
+
+ Each of the shell metacharacters (*note Definitions::) has special
+meaning to the shell and must be quoted if it is to represent itself.
+When the command history expansion facilities are being used (*note
+History Interaction::), the HISTORY EXPANSION character, usually '!',
+must be quoted to prevent history expansion. *Note Bash History
+Facilities::, for more details concerning history expansion.
+
+ There are three quoting mechanisms: the ESCAPE CHARACTER, single
+quotes, and double quotes.
+
+
+File: bashref.info, Node: Escape Character, Next: Single Quotes, Up: Quoting
+
+3.1.2.1 Escape Character
+........................
+
+A non-quoted backslash '\' is the Bash escape character. It preserves
+the literal value of the next character that follows, with the exception
+of 'newline'. If a '\newline' pair appears, and the backslash itself is
+not quoted, the '\newline' is treated as a line continuation (that is,
+it is removed from the input stream and effectively ignored).
+
+
+File: bashref.info, Node: Single Quotes, Next: Double Quotes, Prev: Escape Character, Up: Quoting
+
+3.1.2.2 Single Quotes
+.....................
+
+Enclosing characters in single quotes (''') preserves the literal value
+of each character within the quotes. A single quote may not occur
+between single quotes, even when preceded by a backslash.
+
+
+File: bashref.info, Node: Double Quotes, Next: ANSI-C Quoting, Prev: Single Quotes, Up: Quoting
+
+3.1.2.3 Double Quotes
+.....................
+
+Enclosing characters in double quotes ('"') preserves the literal value
+of all characters within the quotes, with the exception of '$', '`',
+'\', and, when history expansion is enabled, '!'. When the shell is in
+POSIX mode (*note Bash POSIX Mode::), the '!' has no special meaning
+within double quotes, even when history expansion is enabled. The
+characters '$' and '`' retain their special meaning within double quotes
+(*note Shell Expansions::). The backslash retains its special meaning
+only when followed by one of the following characters: '$', '`', '"',
+'\', or 'newline'. Within double quotes, backslashes that are followed
+by one of these characters are removed. Backslashes preceding
+characters without a special meaning are left unmodified. A double
+quote may be quoted within double quotes by preceding it with a
+backslash. If enabled, history expansion will be performed unless an
+'!' appearing in double quotes is escaped using a backslash. The
+backslash preceding the '!' is not removed.
+
+ The special parameters '*' and '@' have special meaning when in
+double quotes (*note Shell Parameter Expansion::).
+
+
+File: bashref.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double Quotes, Up: Quoting
+
+3.1.2.4 ANSI-C Quoting
+......................
+
+Words of the form '$'STRING'' are treated specially. The word expands
+to STRING, with backslash-escaped characters replaced as specified by
+the ANSI C standard. Backslash escape sequences, if present, are
+decoded as follows:
+
+'\a'
+ alert (bell)
+'\b'
+ backspace
+'\e'
+'\E'
+ an escape character (not ANSI C)
+'\f'
+ form feed
+'\n'
+ newline
+'\r'
+ carriage return
+'\t'
+ horizontal tab
+'\v'
+ vertical tab
+'\\'
+ backslash
+'\''
+ single quote
+'\"'
+ double quote
+'\?'
+ question mark
+'\NNN'
+ the eight-bit character whose value is the octal value NNN (one to
+ three octal digits)
+'\xHH'
+ the eight-bit character whose value is the hexadecimal value HH
+ (one or two hex digits)
+'\uHHHH'
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value HHHH (one to four hex digits)
+'\UHHHHHHHH'
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value HHHHHHHH (one to eight hex digits)
+'\cX'
+ a control-X character
+
+The expanded result is single-quoted, as if the dollar sign had not been
+present.
+
+
+File: bashref.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoting
+
+3.1.2.5 Locale-Specific Translation
+...................................
+
+A double-quoted string preceded by a dollar sign ('$') will cause the
+string to be translated according to the current locale. If the current
+locale is 'C' or 'POSIX', the dollar sign is ignored. If the string is
+translated and replaced, the replacement is double-quoted.
+
+ Some systems use the message catalog selected by the 'LC_MESSAGES'
+shell variable. Others create the name of the message catalog from the
+value of the 'TEXTDOMAIN' shell variable, possibly adding a suffix of
+'.mo'. If you use the 'TEXTDOMAIN' variable, you may need to set the
+'TEXTDOMAINDIR' variable to the location of the message catalog files.
+Still others use both variables in this fashion:
+'TEXTDOMAINDIR'/'LC_MESSAGES'/LC_MESSAGES/'TEXTDOMAIN'.mo.
+
+
+File: bashref.info, Node: Comments, Prev: Quoting, Up: Shell Syntax
+
+3.1.3 Comments
+--------------
+
+In a non-interactive shell, or an interactive shell in which the
+'interactive_comments' option to the 'shopt' builtin is enabled (*note
+The Shopt Builtin::), a word beginning with '#' causes that word and all
+remaining characters on that line to be ignored. An interactive shell
+without the 'interactive_comments' option enabled does not allow
+comments. The 'interactive_comments' option is on by default in
+interactive shells. *Note Interactive Shells::, for a description of
+what makes a shell interactive.
+
+
+File: bashref.info, Node: Shell Commands, Next: Shell Functions, Prev: Shell Syntax, Up: Basic Shell Features
+
+3.2 Shell Commands
+==================
+
+A simple shell command such as 'echo a b c' consists of the command
+itself followed by arguments, separated by spaces.
+
+ More complex shell commands are composed of simple commands arranged
+together in a variety of ways: in a pipeline in which the output of one
+command becomes the input of a second, in a loop or conditional
+construct, or in some other grouping.
+
+* Menu:
+
+* Simple Commands:: The most common type of command.
+* Pipelines:: Connecting the input and output of several
+ commands.
+* Lists:: How to execute commands sequentially.
+* Compound Commands:: Shell commands for control flow.
+* Coprocesses:: Two-way communication between commands.
+* GNU Parallel:: Running commands in parallel.
+
+
+File: bashref.info, Node: Simple Commands, Next: Pipelines, Up: Shell Commands
+
+3.2.1 Simple Commands
+---------------------
+
+A simple command is the kind of command encountered most often. It's
+just a sequence of words separated by 'blank's, terminated by one of the
+shell's control operators (*note Definitions::). The first word
+generally specifies a command to be executed, with the rest of the words
+being that command's arguments.
+
+ The return status (*note Exit Status::) of a simple command is its
+exit status as provided by the POSIX 1003.1 'waitpid' function, or 128+N
+if the command was terminated by signal N.
+
+
+File: bashref.info, Node: Pipelines, Next: Lists, Prev: Simple Commands, Up: Shell Commands
+
+3.2.2 Pipelines
+---------------
+
+A 'pipeline' is a sequence of one or more commands separated by one of
+the control operators '|' or '|&'.
+
+ The format for a pipeline is
+ [time [-p]] [!] COMMAND1 [ | or |& COMMAND2 ] ...
+
+The output of each command in the pipeline is connected via a pipe to
+the input of the next command. That is, each command reads the previous
+command's output. This connection is performed before any redirections
+specified by the command.
+
+ If '|&' is used, COMMAND1's standard error, in addition to its
+standard output, is connected to COMMAND2's standard input through the
+pipe; it is shorthand for '2>&1 |'. This implicit redirection of the
+standard error to the standard output is performed after any
+redirections specified by the command.
+
+ The reserved word 'time' causes timing statistics to be printed for
+the pipeline once it finishes. The statistics currently consist of
+elapsed (wall-clock) time and user and system time consumed by the
+command's execution. The '-p' option changes the output format to that
+specified by POSIX. When the shell is in POSIX mode (*note Bash POSIX
+Mode::), it does not recognize 'time' as a reserved word if the next
+token begins with a '-'. The 'TIMEFORMAT' variable may be set to a
+format string that specifies how the timing information should be
+displayed. *Note Bash Variables::, for a description of the available
+formats. The use of 'time' as a reserved word permits the timing of
+shell builtins, shell functions, and pipelines. An external 'time'
+command cannot time these easily.
+
+ When the shell is in POSIX mode (*note Bash POSIX Mode::), 'time' may
+be followed by a newline. In this case, the shell displays the total
+user and system time consumed by the shell and its children. The
+'TIMEFORMAT' variable may be used to specify the format of the time
+information.
+
+ If the pipeline is not executed asynchronously (*note Lists::), the
+shell waits for all commands in the pipeline to complete.
+
+ Each command in a pipeline is executed in its own subshell, which is
+a separate process (*note Command Execution Environment::). If the
+'lastpipe' option is enabled using the 'shopt' builtin (*note The Shopt
+Builtin::), the last element of a pipeline may be run by the shell
+process.
+
+ The exit status of a pipeline is the exit status of the last command
+in the pipeline, unless the 'pipefail' option is enabled (*note The Set
+Builtin::). If 'pipefail' is enabled, the pipeline's return status is
+the value of the last (rightmost) command to exit with a non-zero
+status, or zero if all commands exit successfully. If the reserved word
+'!' precedes the pipeline, the exit status is the logical negation of
+the exit status as described above. The shell waits for all commands in
+the pipeline to terminate before returning a value.
+
+
+File: bashref.info, Node: Lists, Next: Compound Commands, Prev: Pipelines, Up: Shell Commands
+
+3.2.3 Lists of Commands
+-----------------------
+
+A 'list' is a sequence of one or more pipelines separated by one of the
+operators ';', '&', '&&', or '||', and optionally terminated by one of
+';', '&', or a 'newline'.
+
+ Of these list operators, '&&' and '||' have equal precedence,
+followed by ';' and '&', which have equal precedence.
+
+ A sequence of one or more newlines may appear in a 'list' to delimit
+commands, equivalent to a semicolon.
+
+ If a command is terminated by the control operator '&', the shell
+executes the command asynchronously in a subshell. This is known as
+executing the command in the BACKGROUND, and these are referred to as
+ASYNCHRONOUS commands. The shell does not wait for the command to
+finish, and the return status is 0 (true). When job control is not
+active (*note Job Control::), the standard input for asynchronous
+commands, in the absence of any explicit redirections, is redirected
+from '/dev/null'.
+
+ Commands separated by a ';' are executed sequentially; the shell
+waits for each command to terminate in turn. The return status is the
+exit status of the last command executed.
+
+ AND and OR lists are sequences of one or more pipelines separated by
+the control operators '&&' and '||', respectively. AND and OR lists are
+executed with left associativity.
+
+ An AND list has the form
+ COMMAND1 && COMMAND2
+
+COMMAND2 is executed if, and only if, COMMAND1 returns an exit status of
+zero (success).
+
+ An OR list has the form
+ COMMAND1 || COMMAND2
+
+COMMAND2 is executed if, and only if, COMMAND1 returns a non-zero exit
+status.
+
+ The return status of AND and OR lists is the exit status of the last
+command executed in the list.
+
+
+File: bashref.info, Node: Compound Commands, Next: Coprocesses, Prev: Lists, Up: Shell Commands
+
+3.2.4 Compound Commands
+-----------------------
+
+* Menu:
+
+* Looping Constructs:: Shell commands for iterative action.
+* Conditional Constructs:: Shell commands for conditional execution.
+* Command Grouping:: Ways to group commands.
+
+Compound commands are the shell programming language constructs. Each
+construct begins with a reserved word or control operator and is
+terminated by a corresponding reserved word or operator. Any
+redirections (*note Redirections::) associated with a compound command
+apply to all commands within that compound command unless explicitly
+overridden.
+
+ In most cases a list of commands in a compound command's description
+may be separated from the rest of the command by one or more newlines,
+and may be followed by a newline in place of a semicolon.
+
+ Bash provides looping constructs, conditional commands, and
+mechanisms to group commands and execute them as a unit.
+
+
+File: bashref.info, Node: Looping Constructs, Next: Conditional Constructs, Up: Compound Commands
+
+3.2.4.1 Looping Constructs
+..........................
+
+Bash supports the following looping constructs.
+
+ Note that wherever a ';' appears in the description of a command's
+syntax, it may be replaced with one or more newlines.
+
+'until'
+ The syntax of the 'until' command is:
+
+ until TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
+
+ Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit
+ status which is not zero. The return status is the exit status of
+ the last command executed in CONSEQUENT-COMMANDS, or zero if none
+ was executed.
+
+'while'
+ The syntax of the 'while' command is:
+
+ while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
+
+ Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit
+ status of zero. The return status is the exit status of the last
+ command executed in CONSEQUENT-COMMANDS, or zero if none was
+ executed.
+
+'for'
+ The syntax of the 'for' command is:
+
+ for NAME [ [in [WORDS ...] ] ; ] do COMMANDS; done
+
+ Expand WORDS (*note Shell Expansions::), and execute COMMANDS once
+ for each member in the resultant list, with NAME bound to the
+ current member. If 'in WORDS' is not present, the 'for' command
+ executes the COMMANDS once for each positional parameter that is
+ set, as if 'in "$@"' had been specified (*note Special
+ Parameters::).
+
+ The return status is the exit status of the last command that
+ executes. If there are no items in the expansion of WORDS, no
+ commands are executed, and the return status is zero.
+
+ An alternate form of the 'for' command is also supported:
+
+ for (( EXPR1 ; EXPR2 ; EXPR3 )) ; do COMMANDS ; done
+
+ First, the arithmetic expression EXPR1 is evaluated according to
+ the rules described below (*note Shell Arithmetic::). The
+ arithmetic expression EXPR2 is then evaluated repeatedly until it
+ evaluates to zero. Each time EXPR2 evaluates to a non-zero value,
+ COMMANDS are executed and the arithmetic expression EXPR3 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 COMMANDS that is executed, or false if any of the
+ expressions is invalid.
+
+ The 'break' and 'continue' builtins (*note Bourne Shell Builtins::)
+may be used to control loop execution.
+
+
+File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Prev: Looping Constructs, Up: Compound Commands
+
+3.2.4.2 Conditional Constructs
+..............................
+
+'if'
+ The syntax of the 'if' command is:
+
+ if TEST-COMMANDS; then
+ CONSEQUENT-COMMANDS;
+ [elif MORE-TEST-COMMANDS; then
+ MORE-CONSEQUENTS;]
+ [else ALTERNATE-CONSEQUENTS;]
+ fi
+
+ The TEST-COMMANDS list is executed, and if its return status is
+ zero, the CONSEQUENT-COMMANDS list is executed. If TEST-COMMANDS
+ returns a non-zero status, each 'elif' list is executed in turn,
+ and if its exit status is zero, the corresponding MORE-CONSEQUENTS
+ is executed and the command completes. If 'else
+ ALTERNATE-CONSEQUENTS' is present, and the final command in the
+ final 'if' or 'elif' clause has a non-zero exit status, then
+ ALTERNATE-CONSEQUENTS is executed. The return status is the exit
+ status of the last command executed, or zero if no condition tested
+ true.
+
+'case'
+ The syntax of the 'case' command is:
+
+ case WORD in
+ [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]...
+ esac
+
+ 'case' will selectively execute the COMMAND-LIST corresponding to
+ the first PATTERN that matches WORD. The match is performed
+ according to the rules described below in *note Pattern Matching::.
+ If the 'nocasematch' shell option (see the description of 'shopt'
+ in *note The Shopt Builtin::) is enabled, the match is performed
+ without regard to the case of alphabetic characters. The '|' is
+ used to separate multiple patterns, and the ')' operator terminates
+ a pattern list. A list of patterns and an associated command-list
+ is known as a CLAUSE.
+
+ Each clause must be terminated with ';;', ';&', or ';;&'. The WORD
+ undergoes tilde expansion, parameter expansion, command
+ substitution, arithmetic expansion, and quote removal (*note Shell
+ Parameter Expansion::) before matching is attempted. Each PATTERN
+ undergoes tilde expansion, parameter expansion, command
+ substitution, and arithmetic expansion.
+
+ There may be an arbitrary number of 'case' clauses, each terminated
+ by a ';;', ';&', or ';;&'. The first pattern that matches
+ determines the command-list that is executed. It's a common idiom
+ to use '*' as the final pattern to define the default case, since
+ that pattern will always match.
+
+ Here is an example using 'case' in a script that could be used to
+ describe one interesting feature of an animal:
+
+ echo -n "Enter the name of an animal: "
+ read ANIMAL
+ echo -n "The $ANIMAL has "
+ case $ANIMAL in
+ horse | dog | cat) echo -n "four";;
+ man | kangaroo ) echo -n "two";;
+ *) echo -n "an unknown number of";;
+ esac
+ echo " legs."
+
+
+ If the ';;' operator is used, no subsequent matches are attempted
+ after the first pattern match. Using ';&' in place of ';;' causes
+ execution to continue with the COMMAND-LIST associated with the
+ next clause, if any. Using ';;&' in place of ';;' causes the shell
+ to test the patterns in the next clause, if any, and execute any
+ associated COMMAND-LIST on a successful match.
+
+ The return status is zero if no PATTERN is matched. Otherwise, the
+ return status is the exit status of the COMMAND-LIST executed.
+
+'select'
+
+ The 'select' construct allows the easy generation of menus. It has
+ almost the same syntax as the 'for' command:
+
+ select NAME [in WORDS ...]; do COMMANDS; done
+
+ The list of words following 'in' is expanded, generating a list of
+ items. The set of expanded words is printed on the standard error
+ output stream, each preceded by a number. If the 'in WORDS' is
+ omitted, the positional parameters are printed, as if 'in "$@"' had
+ been specified. The 'PS3' prompt is then displayed and a line is
+ read from the standard input. If the line consists of a number
+ corresponding to one of the displayed words, then the value of NAME
+ is set to that word. If the line is empty, the words and prompt
+ are displayed again. If 'EOF' is read, the 'select' command
+ completes. Any other value read causes NAME to be set to null.
+ The line read is saved in the variable 'REPLY'.
+
+ The COMMANDS are executed after each selection until a 'break'
+ command is executed, at which point the 'select' command completes.
+
+ Here is an example that allows the user to pick a filename from the
+ current directory, and displays the name and index of the file
+ selected.
+
+ select fname in *;
+ do
+ echo you picked $fname \($REPLY\)
+ break;
+ done
+
+'((...))'
+ (( EXPRESSION ))
+
+ The arithmetic EXPRESSION is evaluated according to the rules
+ described below (*note Shell Arithmetic::). If the value of the
+ expression is non-zero, the return status is 0; otherwise the
+ return status is 1. This is exactly equivalent to
+ let "EXPRESSION"
+ *Note Bash Builtins::, for a full description of the 'let' builtin.
+
+'[[...]]'
+ [[ EXPRESSION ]]
+
+ Return a status of 0 or 1 depending on the evaluation of the
+ conditional expression EXPRESSION. Expressions are composed of the
+ primaries described below in *note Bash Conditional Expressions::.
+ Word splitting and filename expansion are not performed on the
+ words between the '[[' and ']]'; tilde expansion, parameter and
+ variable expansion, arithmetic expansion, command substitution,
+ process substitution, and quote removal are performed. Conditional
+ operators such as '-f' must be unquoted to be recognized as
+ primaries.
+
+ When used with '[[', the '<' and '>' operators sort
+ lexicographically using the current locale.
+
+ When the '==' and '!=' operators are used, the string to the right
+ of the operator is considered a pattern and matched according to
+ the rules described below in *note Pattern Matching::, as if the
+ 'extglob' shell option were enabled. The '=' operator is identical
+ to '=='. If the 'nocasematch' shell option (see the description of
+ 'shopt' in *note The Shopt Builtin::) is enabled, the match is
+ performed without regard to the case of alphabetic characters. The
+ return value is 0 if the string matches ('==') or does not match
+ ('!=') the pattern, and 1 otherwise. Any part of the pattern may
+ be quoted to force the quoted portion to be matched as a string.
+
+ An additional binary operator, '=~', is available, with the same
+ precedence as '==' and '!='. When it is used, the string to the
+ right of the operator is considered a POSIX extended regular
+ expression and matched accordingly (as in regex3)). The return
+ value is 0 if the string matches the pattern, and 1 otherwise. If
+ the regular expression is syntactically incorrect, the conditional
+ expression's return value is 2. If the 'nocasematch' shell option
+ (see the description of 'shopt' in *note The Shopt Builtin::) is
+ enabled, the match is performed without regard to the case of
+ alphabetic characters. Any part of the pattern may be quoted to
+ force the quoted portion to be matched as a string. Bracket
+ expressions in regular expressions must be treated carefully, since
+ normal quoting characters lose their meanings between brackets. If
+ the pattern is stored in a shell variable, quoting the variable
+ expansion forces the entire pattern to be matched as a string.
+ Substrings matched by parenthesized subexpressions within the
+ regular expression are saved in the array variable 'BASH_REMATCH'.
+ The element of 'BASH_REMATCH' with index 0 is the portion of the
+ string matching the entire regular expression. The element of
+ 'BASH_REMATCH' with index N is the portion of the string matching
+ the Nth parenthesized subexpression.
+
+ For example, the following will match a line (stored in the shell
+ variable LINE) if there is a sequence of characters in the value
+ consisting of any number, including zero, of space characters, zero
+ or one instances of 'a', then a 'b':
+ [[ $line =~ [[:space:]]*?(a)b ]]
+
+ That means values like 'aab' and ' aaaaaab' will match, as will a
+ line containing a 'b' anywhere in its value.
+
+ Storing the regular expression in a shell variable is often a
+ useful way to avoid problems with quoting characters that are
+ special to the shell. It is sometimes difficult to specify a
+ regular expression literally without using quotes, or to keep track
+ of the quoting used by regular expressions while paying attention
+ to the shell's quote removal. Using a shell variable to store the
+ pattern decreases these problems. For example, the following is
+ equivalent to the above:
+ pattern='[[:space:]]*?(a)b'
+ [[ $line =~ $pattern ]]
+
+ If you want to match a character that's special to the regular
+ expression grammar, it has to be quoted to remove its special
+ meaning. This means that in the pattern 'xxx.txt', the '.' matches
+ any character in the string (its usual regular expression meaning),
+ but in the pattern '"xxx.txt"' it can only match a literal '.'.
+ Shell programmers should take special care with backslashes, since
+ backslashes are used both by the shell and regular expressions to
+ remove the special meaning from the following character. The
+ following two sets of commands are _not_ equivalent:
+ pattern='\.'
+
+ [[ . =~ $pattern ]]
+ [[ . =~ \. ]]
+
+ [[ . =~ "$pattern" ]]
+ [[ . =~ '\.' ]]
+
+ The first two matches will succeed, but the second two will not,
+ because in the second two the backslash will be part of the pattern
+ to be matched. In the first two examples, the backslash removes
+ the special meaning from '.', so the literal '.' matches. If the
+ string in the first examples were anything other than '.', say 'a',
+ the pattern would not match, because the quoted '.' in the pattern
+ loses its special meaning of matching any single character.
+
+ Expressions may be combined using the following operators, listed
+ in decreasing order of precedence:
+
+ '( EXPRESSION )'
+ Returns the value of EXPRESSION. This may be used to override
+ the normal precedence of operators.
+
+ '! EXPRESSION'
+ True if EXPRESSION is false.
+
+ 'EXPRESSION1 && EXPRESSION2'
+ True if both EXPRESSION1 and EXPRESSION2 are true.
+
+ 'EXPRESSION1 || EXPRESSION2'
+ True if either EXPRESSION1 or EXPRESSION2 is true.
+
+ The '&&' and '||' operators do not evaluate EXPRESSION2 if the
+ value of EXPRESSION1 is sufficient to determine the return value of
+ the entire conditional expression.
+
+
+File: bashref.info, Node: Command Grouping, Prev: Conditional Constructs, Up: Compound Commands
+
+3.2.4.3 Grouping Commands
+.........................
+
+Bash provides two ways to group a list of commands to be executed as a
+unit. When commands are grouped, redirections may be applied to the
+entire command list. For example, the output of all the commands in the
+list may be redirected to a single stream.
+
+'()'
+ ( LIST )
+
+ Placing a list of commands between parentheses causes a subshell
+ environment to be created (*note Command Execution Environment::),
+ and each of the commands in LIST to be executed in that subshell.
+ Since the LIST is executed in a subshell, variable assignments do
+ not remain in effect after the subshell completes.
+
+'{}'
+ { LIST; }
+
+ Placing a list of commands between curly braces causes the list to
+ be executed in the current shell context. No subshell is created.
+ The semicolon (or newline) following LIST is required.
+
+ In addition to the creation of a subshell, there is a subtle
+difference between these two constructs due to historical reasons. The
+braces are 'reserved words', so they must be separated from the LIST by
+'blank's or other shell metacharacters. The parentheses are
+'operators', and are recognized as separate tokens by the shell even if
+they are not separated from the LIST by whitespace.
+
+ The exit status of both of these constructs is the exit status of
+LIST.
+
+
+File: bashref.info, Node: Coprocesses, Next: GNU Parallel, Prev: Compound Commands, Up: Shell Commands
+
+3.2.5 Coprocesses
+-----------------
+
+A 'coprocess' is a shell command preceded by the 'coproc' reserved word.
+A coprocess is executed asynchronously in a subshell, as if the command
+had been terminated with the '&' control operator, with a two-way pipe
+established between the executing shell and the coprocess.
+
+ The format for a coprocess is:
+ coproc [NAME] COMMAND [REDIRECTIONS]
+
+This creates a coprocess named NAME. If NAME is not supplied, the
+default name is COPROC. NAME must not be supplied if COMMAND is a
+simple command (*note Simple Commands::); otherwise, it is interpreted
+as the first word of the simple command.
+
+ When the coprocess is executed, the shell creates an array variable
+(*note Arrays::) named 'NAME' in the context of the executing shell.
+The standard output of COMMAND is connected via a pipe to a file
+descriptor in the executing shell, and that file descriptor is assigned
+to 'NAME'[0]. The standard input of COMMAND is connected via a pipe to
+a file descriptor in the executing shell, and that file descriptor is
+assigned to 'NAME'[1]. This pipe is established before any redirections
+specified by the command (*note Redirections::). The file descriptors
+can be utilized as arguments to shell commands and redirections using
+standard word expansions. Other than those created to execute command
+and process substitutions, the file descriptors are not available in
+subshells.
+
+ The process ID of the shell spawned to execute the coprocess is
+available as the value of the variable 'NAME'_PID. The 'wait' builtin
+command may be used to wait for the coprocess to terminate.
+
+ Since the coprocess is created as an asynchronous command, the
+'coproc' command always returns success. The return status of a
+coprocess is the exit status of COMMAND.
+
+
+File: bashref.info, Node: GNU Parallel, Prev: Coprocesses, Up: Shell Commands
+
+3.2.6 GNU Parallel
+------------------
+
+There are ways to run commands in parallel that are not built into Bash.
+GNU Parallel is a tool to do just that.
+
+ GNU Parallel, as its name suggests, can be used to build and run
+commands in parallel. You may run the same command with different
+arguments, whether they are filenames, usernames, hostnames, or lines
+read from files. GNU Parallel provides shorthand references to many of
+the most common operations (input lines, various portions of the input
+line, different ways to specify the input source, and so on). Parallel
+can replace 'xargs' or feed commands from its input sources to several
+different instances of Bash.
+
+ For a complete description, refer to the GNU Parallel documentation.
+A few examples should provide a brief introduction to its use.
+
+ For example, it is easy to replace 'xargs' to gzip all html files in
+the current directory and its subdirectories:
+ find . -type f -name '*.html' -print | parallel gzip
+If you need to protect special characters such as newlines in file
+names, use find's '-print0' option and parallel's '-0' option.
+
+ You can use Parallel to move files from the current directory when
+the number of files is too large to process with one 'mv' invocation:
+ ls | parallel mv {} destdir
+
+ As you can see, the {} is replaced with each line read from standard
+input. While using 'ls' will work in most instances, it is not
+sufficient to deal with all filenames. If you need to accommodate
+special characters in filenames, you can use
+
+ find . -depth 1 \! -name '.*' -print0 | parallel -0 mv {} destdir
+
+as alluded to above.
+
+ This will run as many 'mv' commands as there are files in the current
+directory. You can emulate a parallel 'xargs' by adding the '-X'
+option:
+ find . -depth 1 \! -name '.*' -print0 | parallel -0 -X mv {} destdir
+
+ GNU Parallel can replace certain common idioms that operate on lines
+read from a file (in this case, filenames listed one per line):
+ while IFS= read -r x; do
+ do-something1 "$x" "config-$x"
+ do-something2 < "$x"
+ done < file | process-output
+
+with a more compact syntax reminiscent of lambdas:
+ cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" |
+ process-output
+
+ Parallel provides a built-in mechanism to remove filename extensions,
+which lends itself to batch file transformations or renaming:
+ ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}"
+This will recompress all files in the current directory with names
+ending in .gz using bzip2, running one job per CPU (-j+0) in parallel.
+(We use 'ls' for brevity here; using 'find' as above is more robust in
+the face of filenames containing unexpected characters.) Parallel can
+take arguments from the command line; the above can also be written as
+
+ parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz
+
+ If a command generates output, you may want to preserve the input
+order in the output. For instance, the following command
+ {
+ echo foss.org.my ;
+ echo debian.org ;
+ echo freenetproject.org ;
+ } | parallel traceroute
+will display as output the traceroute invocation that finishes first.
+Adding the '-k' option
+ {
+ echo foss.org.my ;
+ echo debian.org ;
+ echo freenetproject.org ;
+ } | parallel -k traceroute
+will ensure that the output of 'traceroute foss.org.my' is displayed
+first.
+
+ Finally, Parallel can be used to run a sequence of shell commands in
+parallel, similar to 'cat file | bash'. It is not uncommon to take a
+list of filenames, create a series of shell commands to operate on them,
+and feed that list of commands to a shell. Parallel can speed this up.
+Assuming that 'file' contains a list of shell commands, one per line,
+
+ parallel -j 10 < file
+
+will evaluate the commands using the shell (since no explicit command is
+supplied as an argument), in blocks of ten shell jobs at a time.
+
+
+File: bashref.info, Node: Shell Functions, Next: Shell Parameters, Prev: Shell Commands, Up: Basic Shell Features
+
+3.3 Shell Functions
+===================
+
+Shell functions are a way to group commands for later execution using a
+single name for the group. They are executed just like a "regular"
+command. When the name of a shell function is used as a simple command
+name, the list of commands associated with that function name is
+executed. Shell functions are executed in the current shell context; no
+new process is created to interpret them.
+
+ Functions are declared using this syntax:
+ NAME () COMPOUND-COMMAND [ REDIRECTIONS ]
+
+ or
+
+ function NAME [()] COMPOUND-COMMAND [ REDIRECTIONS ]
+
+ This defines a shell function named NAME. The reserved word
+'function' is optional. If the 'function' reserved word is supplied,
+the parentheses are optional. The BODY of the function is the compound
+command COMPOUND-COMMAND (*note Compound Commands::). That command is
+usually a LIST enclosed between { and }, but may be any compound command
+listed above, with one exception: If the 'function' reserved word is
+used, but the parentheses are not supplied, the braces are required.
+COMPOUND-COMMAND is executed whenever NAME is specified as the name of a
+command. When the shell is in POSIX mode (*note Bash POSIX Mode::),
+NAME may not be the same as one of the special builtins (*note Special
+Builtins::). Any redirections (*note Redirections::) associated with
+the shell function are performed when the function is executed.
+
+ A function definition may be deleted using the '-f' option to the
+'unset' builtin (*note Bourne Shell Builtins::).
+
+ The exit status of a function definition is zero unless a syntax
+error occurs or a readonly function with the same name already exists.
+When executed, the exit status of a function is the exit status of the
+last command executed in the body.
+
+ Note that for historical reasons, in the most common usage the curly
+braces that surround the body of the function must be separated from the
+body by 'blank's or newlines. This is because the braces are reserved
+words and are only recognized as such when they are separated from the
+command list by whitespace or another shell metacharacter. Also, when
+using the braces, the LIST must be terminated by a semicolon, a '&', or
+a newline.
+
+ When a function is executed, the arguments to the function become the
+positional parameters during its execution (*note Positional
+Parameters::). The special parameter '#' that expands to the number of
+positional parameters is updated to reflect the change. Special
+parameter '0' is unchanged. The first element of the 'FUNCNAME'
+variable is set to the name of the function while the function is
+executing.
+
+ All other aspects of the shell execution environment are identical
+between a function and its caller with these exceptions: the 'DEBUG' and
+'RETURN' traps are not inherited unless the function has been given the
+'trace' attribute using the 'declare' builtin or the '-o functrace'
+option has been enabled with the 'set' builtin, (in which case all
+functions inherit the 'DEBUG' and 'RETURN' traps), and the 'ERR' trap is
+not inherited unless the '-o errtrace' shell option has been enabled.
+*Note Bourne Shell Builtins::, for the description of the 'trap'
+builtin.
+
+ The 'FUNCNEST' variable, if set to a numeric value greater than 0,
+defines a maximum function nesting level. Function invocations that
+exceed the limit cause the entire command to abort.
+
+ If the builtin command 'return' is executed in a function, the
+function completes and execution resumes with the next command after the
+function call. Any command associated with the 'RETURN' trap is
+executed before execution resumes. When a function completes, the
+values of the positional parameters and the special parameter '#' are
+restored to the values they had prior to the function's execution. If a
+numeric argument is given to 'return', that is the function's return
+status; otherwise the function's return status is the exit status of the
+last command executed before the 'return'.
+
+ Variables local to the function may be declared with the 'local'
+builtin. These variables are visible only to the function and the
+commands it invokes. This is particularly important when a shell
+function calls other functions.
+
+ Local variables "shadow" variables with the same name declared at
+previous scopes. For instance, a local variable declared in a function
+hides a global variable of the same name: references and assignments
+refer to the local variable, leaving the global variable unmodified.
+When the function returns, the global variable is once again visible.
+
+ The shell uses DYNAMIC SCOPING to control a variable's visibility
+within functions. With dynamic scoping, visible variables and their
+values are a result of the sequence of function calls that caused
+execution to reach the current function. The value of a variable that a
+function sees depends on its value within its caller, if any, whether
+that caller is the "global" scope or another shell function. This is
+also the value that a local variable declaration "shadows", and the
+value that is restored when the function returns.
+
+ For example, if a variable VAR is declared as local in function
+FUNC1, and FUNC1 calls another function FUNC2, references to VAR made
+from within FUNC2 will resolve to the local variable VAR from FUNC1,
+shadowing any global variable named VAR.
+
+ The following script demonstrates this behavior. When executed, the
+script displays
+
+ In func2, var = func1 local
+
+ func1()
+ {
+ local var='func1 local'
+ func2
+ }
+
+ func2()
+ {
+ echo "In func2, var = $var"
+ }
+
+ var=global
+ func1
+
+ The 'unset' builtin also acts using the same dynamic scope: if a
+variable is local to the current scope, 'unset' will unset it; otherwise
+the unset will refer to the variable found in any calling scope as
+described above. If a variable at the current local scope is unset, it
+will remain so until it is reset in that scope or until the function
+returns. Once the function returns, any instance of the variable at a
+previous scope will become visible. If the unset acts on a variable at
+a previous scope, any instance of a variable with that name that had
+been shadowed will become visible.
+
+ Function names and definitions may be listed with the '-f' option to
+the 'declare' ('typeset') builtin command (*note Bash Builtins::). The
+'-F' option to 'declare' or 'typeset' will list the function names only
+(and optionally the source file and line number, if the 'extdebug' shell
+option is enabled). Functions may be exported so that subshells
+automatically have them defined with the '-f' option to the 'export'
+builtin (*note Bourne Shell Builtins::).
+
+ Functions may be recursive. The 'FUNCNEST' variable may be used to
+limit the depth of the function call stack and restrict the number of
+function invocations. By default, no limit is placed on the number of
+recursive calls.
+
+
+File: bashref.info, Node: Shell Parameters, Next: Shell Expansions, Prev: Shell Functions, Up: Basic Shell Features
+
+3.4 Shell Parameters
+====================
+
+* Menu:
+
+* Positional Parameters:: The shell's command-line arguments.
+* Special Parameters:: Parameters denoted by special characters.
+
+A PARAMETER is an entity that stores values. It can be a 'name', a
+number, or one of the special characters listed below. A VARIABLE is a
+parameter denoted by a 'name'. A variable has a VALUE and zero or more
+ATTRIBUTES. Attributes are assigned using the 'declare' builtin command
+(see the description of the 'declare' builtin in *note Bash Builtins::).
+
+ A parameter is set if it has been assigned a value. The null string
+is a valid value. Once a variable is set, it may be unset only by using
+the 'unset' builtin command.
+
+ A variable may be assigned to by a statement of the form
+ NAME=[VALUE]
+If VALUE is not given, the variable is assigned the null string. All
+VALUEs undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal (detailed
+below). If the variable has its 'integer' attribute set, then VALUE is
+evaluated as an arithmetic expression even if the '$((...))' expansion
+is not used (*note Arithmetic Expansion::). Word splitting is not
+performed, with the exception of '"$@"' as explained below. Filename
+expansion is not performed. Assignment statements may also appear as
+arguments to the 'alias', 'declare', 'typeset', 'export', 'readonly',
+and 'local' builtin commands (DECLARATION commands). When in POSIX mode
+(*note Bash POSIX Mode::), these builtins may appear in a command after
+one or more instances of the 'command' builtin and retain these
+assignment statement properties.
+
+ In the context where an assignment statement is assigning a value to
+a shell variable or array index (*note Arrays::), the '+=' operator can
+be used to append to or add to the variable's previous value. This
+includes arguments to builtin commands such as 'declare' that accept
+assignment statements (DECLARATION commands). When '+=' is applied to a
+variable for which the INTEGER attribute has been set, VALUE is
+evaluated as an arithmetic expression and added to the variable's
+current value, which is also evaluated. When '+=' is applied to an
+array variable using compound assignment (*note Arrays::), the
+variable's value is not unset (as it is when using '='), and new values
+are appended to the array beginning at one greater than the array's
+maximum index (for indexed arrays), or added as additional key-value
+pairs in an associative array. When applied to a string-valued
+variable, VALUE is expanded and appended to the variable's value.
+
+ A variable can be assigned the NAMEREF attribute using the '-n'
+option to the 'declare' or 'local' builtin commands (*note Bash
+Builtins::) to create a NAMEREF, or a reference to another variable.
+This allows variables to be manipulated indirectly. Whenever the
+nameref variable is referenced, assigned to, unset, or has its
+attributes modified (other than using or changing the nameref attribute
+itself), the operation is actually performed on the variable specified
+by the nameref variable's value. A nameref is commonly used within
+shell functions to refer to a variable whose name is passed as an
+argument to the function. For instance, if a variable name is passed to
+a shell function as its first argument, running
+ declare -n ref=$1
+inside the function creates a nameref variable REF whose value is the
+variable name passed as the first argument. References and assignments
+to REF, and changes to its attributes, are treated as references,
+assignments, and attribute modifications to the variable whose name was
+passed as '$1'.
+
+ If the control variable in a 'for' loop has the nameref attribute,
+the list of words can be a list of shell variables, and a name reference
+will be established for each word in the list, in turn, when the loop is
+executed. Array variables cannot be given the nameref attribute.
+However, nameref variables can reference array variables and subscripted
+array variables. Namerefs can be unset using the '-n' option to the
+'unset' builtin (*note Bourne Shell Builtins::). Otherwise, if 'unset'
+is executed with the name of a nameref variable as an argument, the
+variable referenced by the nameref variable will be unset.
+
+
+File: bashref.info, Node: Positional Parameters, Next: Special Parameters, Up: Shell Parameters
+
+3.4.1 Positional Parameters
+---------------------------
+
+A POSITIONAL PARAMETER is a parameter denoted by one or more digits,
+other than the single digit '0'. Positional parameters are assigned
+from the shell's arguments when it is invoked, and may be reassigned
+using the 'set' builtin command. Positional parameter 'N' may be
+referenced as '${N}', or as '$N' when 'N' consists of a single digit.
+Positional parameters may not be assigned to with assignment statements.
+The 'set' and 'shift' builtins are used to set and unset them (*note
+Shell Builtin Commands::). The positional parameters are temporarily
+replaced when a shell function is executed (*note Shell Functions::).
+
+ When a positional parameter consisting of more than a single digit is
+expanded, it must be enclosed in braces.
+
+
+File: bashref.info, Node: Special Parameters, Prev: Positional Parameters, Up: Shell Parameters
+
+3.4.2 Special Parameters
+------------------------
+
+The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+
+'*'
+ ($*) Expands to the positional parameters, starting from one. When
+ the expansion is not within double quotes, each positional
+ parameter expands to a separate word. In contexts where it is
+ performed, those words are subject to further word splitting and
+ pathname expansion. 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 'IFS' special
+ variable. That is, '"$*"' is equivalent to '"$1C$2C..."', where C
+ is the first character of the value of the 'IFS' variable. If
+ 'IFS' is unset, the parameters are separated by spaces. If 'IFS'
+ is null, the parameters are joined without intervening separators.
+
+'@'
+ ($@) Expands to the positional parameters, starting from one. In
+ contexts where word splitting is performed, this expands each
+ positional parameter to a separate word; if not within double
+ quotes, these words are subject to word splitting. In contexts
+ where word splitting is not performed, this expands to a single
+ word with each positional parameter separated by a space. When the
+ expansion occurs within double quotes, and word splitting is
+ performed, each parameter expands to a separate word. That is,
+ '"$@"' is equivalent to '"$1" "$2" ...'. If the double-quoted
+ expansion occurs within a word, the expansion of the first
+ parameter is joined with the beginning part of the original word,
+ and the expansion of the last parameter is joined with the last
+ part of the original word. When there are no positional
+ parameters, '"$@"' and '$@' expand to nothing (i.e., they are
+ removed).
+
+'#'
+ ($#) Expands to the number of positional parameters in decimal.
+
+'?'
+ ($?) Expands to the exit status of the most recently executed
+ foreground pipeline.
+
+'-'
+ ($-, a hyphen.) Expands to the current option flags as specified
+ upon invocation, by the 'set' builtin command, or those set by the
+ shell itself (such as the '-i' option).
+
+'$'
+ ($$) Expands to the process ID of the shell. In a '()' subshell,
+ it expands to the process ID of the invoking shell, not the
+ subshell.
+
+'!'
+ ($!) Expands to the process ID of the job most recently placed
+ into the background, whether executed as an asynchronous command or
+ using the 'bg' builtin (*note Job Control Builtins::).
+
+'0'
+ ($0) 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 (*note Shell Scripts::), '$0' is set to the name of that
+ file. If Bash is started with the '-c' option (*note Invoking
+ Bash::), then '$0' is set to the first argument after the string to
+ be executed, if one is present. Otherwise, it is set to the
+ filename used to invoke Bash, as given by argument zero.
+
+'_'
+ ($_, 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 simple command executed in the
+ foreground, 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.
+
+
+File: bashref.info, Node: Shell Expansions, Next: Redirections, Prev: Shell Parameters, Up: Basic Shell Features
+
+3.5 Shell Expansions
+====================
+
+Expansion is performed on the command line after it has been split into
+'token's. There are seven kinds of expansion performed:
+
+ * brace expansion
+ * tilde expansion
+ * parameter and variable expansion
+ * command substitution
+ * arithmetic expansion
+ * word splitting
+ * filename expansion
+
+* Menu:
+
+* Brace Expansion:: Expansion of expressions within braces.
+* Tilde Expansion:: Expansion of the ~ character.
+* Shell Parameter Expansion:: How Bash expands variables to their values.
+* Command Substitution:: Using the output of a command as an argument.
+* Arithmetic Expansion:: How to use arithmetic in shell expansions.
+* Process Substitution:: A way to write and read to and from a
+ command.
+* Word Splitting:: How the results of expansion are split into separate
+ arguments.
+* Filename Expansion:: A shorthand for specifying filenames matching patterns.
+* Quote Removal:: How and when quote characters are removed from
+ words.
+
+ The order of expansions is: brace expansion; tilde expansion,
+parameter and variable expansion, arithmetic expansion, and command
+substitution (done in a left-to-right fashion); word splitting; and
+filename expansion.
+
+ On systems that can support it, there is an additional expansion
+available: PROCESS SUBSTITUTION. This is performed at the same time as
+tilde, parameter, variable, and arithmetic expansion and command
+substitution.
+
+ After these expansions are performed, quote characters present in the
+original word are removed unless they have been quoted themselves (QUOTE
+REMOVAL).
+
+ Only brace expansion, word splitting, and filename expansion can
+increase 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 '"$@"' and '$*' (*note Special Parameters::), and
+'"${NAME[@]}"' and '${NAME[*]}' (*note Arrays::).
+
+ After all expansions, 'quote removal' (*note Quote Removal::) is
+performed.
+
+
+File: bashref.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell Expansions
+
+3.5.1 Brace Expansion
+---------------------
+
+Brace expansion is a mechanism by which arbitrary strings may be
+generated. This mechanism is similar to FILENAME EXPANSION (*note
+Filename Expansion::), but the filenames generated need not exist.
+Patterns to be brace expanded take the form of an optional PREAMBLE,
+followed by either a series of comma-separated strings or a sequence
+expression between a pair of braces, followed by an optional POSTSCRIPT.
+The preamble is prefixed to each string contained within the braces, and
+the postscript is then appended to each resulting string, expanding left
+to right.
+
+ Brace expansions may be nested. The results of each expanded string
+are not sorted; left to right order is preserved. For example,
+ bash$ echo a{d,c,b}e
+ ade ace abe
+
+ A sequence expression takes the form '{X..Y[..INCR]}', where X and Y
+are either integers or single characters, and INCR, an optional
+increment, is an integer. When integers are supplied, the expression
+expands to each number between X and Y, inclusive. Supplied integers
+may be prefixed with '0' to force each term to have the same width.
+When either X or Y begins with a zero, the shell attempts to force all
+generated terms to contain the same number of digits, zero-padding where
+necessary. When characters are supplied, the expression expands to each
+character lexicographically between X and Y, inclusive, using the
+default C locale. Note that both X and Y must be of the same type.
+When the increment is supplied, it is used as the difference between
+each term. The default increment is 1 or -1 as appropriate.
+
+ Brace expansion is performed before any other expansions, and any
+characters special to other expansions are preserved in the result. It
+is strictly textual. Bash does not apply any syntactic interpretation
+to the context of the expansion or the text between the braces.
+
+ A correctly-formed brace expansion must contain unquoted opening and
+closing braces, and at least one unquoted comma or a valid sequence
+expression. Any incorrectly formed brace expansion is left unchanged.
+
+ A { or ',' may be quoted with a backslash to prevent its being
+considered part of a brace expression. To avoid conflicts with
+parameter expansion, the string '${' is not considered eligible for
+brace expansion, and inhibits brace expansion until the closing '}'..
+
+ This construct is typically used as shorthand when the common prefix
+of the strings to be generated is longer than in the above example:
+ mkdir /usr/local/src/bash/{old,new,dist,bugs}
+ or
+ chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+
+
+File: bashref.info, Node: Tilde Expansion, Next: Shell Parameter Expansion, Prev: Brace Expansion, Up: Shell Expansions
+
+3.5.2 Tilde Expansion
+---------------------
+
+If a word begins with an unquoted tilde character ('~'), all of the
+characters up to the first unquoted slash (or all characters, if there
+is no unquoted slash) are considered a TILDE-PREFIX. If none of the
+characters in the tilde-prefix are quoted, the characters in the
+tilde-prefix following the tilde are treated as a possible LOGIN NAME.
+If this login name is the null string, the tilde is replaced with the
+value of the 'HOME' shell variable. If 'HOME' is unset, the home
+directory of the user executing the shell is substituted instead.
+Otherwise, the tilde-prefix is replaced with the home directory
+associated with the specified login name.
+
+ If the tilde-prefix is '~+', the value of the shell variable 'PWD'
+replaces the tilde-prefix. If the tilde-prefix is '~-', the value of
+the shell variable 'OLDPWD', if it is set, is substituted.
+
+ If the characters following the tilde in the tilde-prefix consist of
+a number N, optionally prefixed by a '+' or a '-', the tilde-prefix is
+replaced with the corresponding element from the directory stack, as it
+would be displayed by the 'dirs' builtin invoked with the characters
+following tilde in the tilde-prefix as an argument (*note The Directory
+Stack::). If the tilde-prefix, sans the tilde, consists of a number
+without a leading '+' or '-', '+' is assumed.
+
+ If the login name is invalid, or the tilde expansion fails, the word
+is left unchanged.
+
+ Each variable assignment is checked for unquoted tilde-prefixes
+immediately following a ':' or the first '='. In these cases, tilde
+expansion is also performed. Consequently, one may use filenames with
+tildes in assignments to 'PATH', 'MAILPATH', and 'CDPATH', and the shell
+assigns the expanded value.
+
+ The following table shows how Bash treats unquoted tilde-prefixes:
+
+'~'
+ The value of '$HOME'
+'~/foo'
+ '$HOME/foo'
+
+'~fred/foo'
+ The subdirectory 'foo' of the home directory of the user 'fred'
+
+'~+/foo'
+ '$PWD/foo'
+
+'~-/foo'
+ '${OLDPWD-'~-'}/foo'
+
+'~N'
+ The string that would be displayed by 'dirs +N'
+
+'~+N'
+ The string that would be displayed by 'dirs +N'
+
+'~-N'
+ The string that would be displayed by 'dirs -N'
+
+ Bash also performs tilde expansion on words satisfying the conditions
+of variable assignments (*note Shell Parameters::) when they appear as
+arguments to simple commands. Bash does not do this, except for the
+DECLARATION commands listed above, when in POSIX mode.
+
+
+File: bashref.info, Node: Shell Parameter Expansion, Next: Command Substitution, Prev: Tilde Expansion, Up: Shell Expansions
+
+3.5.3 Shell Parameter Expansion
+-------------------------------
+
+The '$' character introduces parameter expansion, command substitution,
+or arithmetic expansion. The parameter name or symbol to be expanded
+may be enclosed in braces, which are optional but serve to protect the
+variable to be expanded from characters immediately following it which
+could be interpreted as part of the name.
+
+ When braces are used, the matching ending brace is the first '}' not
+escaped by a backslash or within a quoted string, and not within an
+embedded arithmetic expansion, command substitution, or parameter
+expansion.
+
+ The basic form of parameter expansion is ${PARAMETER}. The value of
+PARAMETER is substituted. The PARAMETER is a shell parameter as
+described above (*note Shell Parameters::) or an array reference (*note
+Arrays::). The braces are required when PARAMETER is a positional
+parameter with more than one digit, or when PARAMETER is followed by a
+character that is not to be interpreted as part of its name.
+
+ If the first character of PARAMETER is an exclamation point (!), and
+PARAMETER is not a NAMEREF, it introduces a level of indirection. Bash
+uses the value formed by expanding the rest of PARAMETER as the new
+PARAMETER; this is then expanded and that value is used in the rest of
+the expansion, rather than the expansion of the original PARAMETER.
+This is known as 'indirect expansion'. The value is subject to tilde
+expansion, parameter expansion, command substitution, and arithmetic
+expansion. If PARAMETER is a nameref, this expands to the name of the
+variable referenced by PARAMETER instead of performing the complete
+indirect expansion. The exceptions to this are the expansions of
+${!PREFIX*} and ${!NAME[@]} described below. The exclamation point must
+immediately follow the left brace in order to introduce indirection.
+
+ In each of the cases below, WORD is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+
+ When not performing substring expansion, using the form described
+below (e.g., ':-'), Bash tests for a parameter that is unset or null.
+Omitting the colon results in a test only for a parameter that is unset.
+Put another way, if the colon is included, the operator tests for both
+PARAMETER's existence and that its value is not null; if the colon is
+omitted, the operator tests only for existence.
+
+'${PARAMETER:-WORD}'
+ If PARAMETER is unset or null, the expansion of WORD is
+ substituted. Otherwise, the value of PARAMETER is substituted.
+
+'${PARAMETER:=WORD}'
+ If PARAMETER is unset or null, the expansion of WORD is assigned to
+ PARAMETER. The value of PARAMETER is then substituted. Positional
+ parameters and special parameters may not be assigned to in this
+ way.
+
+'${PARAMETER:?WORD}'
+ If PARAMETER is null or unset, the expansion of WORD (or a message
+ to that effect if WORD is not present) is written to the standard
+ error and the shell, if it is not interactive, exits. Otherwise,
+ the value of PARAMETER is substituted.
+
+'${PARAMETER:+WORD}'
+ If PARAMETER is null or unset, nothing is substituted, otherwise
+ the expansion of WORD is substituted.
+
+'${PARAMETER:OFFSET}'
+'${PARAMETER:OFFSET:LENGTH}'
+ This is referred to as Substring Expansion. It expands to up to
+ LENGTH characters of the value of PARAMETER starting at the
+ character specified by OFFSET. If PARAMETER is '@', an indexed
+ array subscripted by '@' or '*', or an associative array name, the
+ results differ as described below. If LENGTH is omitted, it
+ expands to the substring of the value of PARAMETER starting at the
+ character specified by OFFSET and extending to the end of the
+ value. LENGTH and OFFSET are arithmetic expressions (*note Shell
+ Arithmetic::).
+
+ If OFFSET evaluates to a number less than zero, the value is used
+ as an offset in characters from the end of the value of PARAMETER.
+ If LENGTH evaluates to a number less than zero, it is interpreted
+ as an offset in characters from the end of the value of PARAMETER
+ rather than a number of characters, and the expansion is the
+ characters between OFFSET and that result. Note that a negative
+ offset must be separated from the colon by at least one space to
+ avoid being confused with the ':-' expansion.
+
+ Here are some examples illustrating substring expansion on
+ parameters and subscripted arrays:
+
+ $ string=01234567890abcdefgh
+ $ echo ${string:7}
+ 7890abcdefgh
+ $ echo ${string:7:0}
+
+ $ echo ${string:7:2}
+ 78
+ $ echo ${string:7:-2}
+ 7890abcdef
+ $ echo ${string: -7}
+ bcdefgh
+ $ echo ${string: -7:0}
+
+ $ echo ${string: -7:2}
+ bc
+ $ echo ${string: -7:-2}
+ bcdef
+ $ set -- 01234567890abcdefgh
+ $ echo ${1:7}
+ 7890abcdefgh
+ $ echo ${1:7:0}
+
+ $ echo ${1:7:2}
+ 78
+ $ echo ${1:7:-2}
+ 7890abcdef
+ $ echo ${1: -7}
+ bcdefgh
+ $ echo ${1: -7:0}
+
+ $ echo ${1: -7:2}
+ bc
+ $ echo ${1: -7:-2}
+ bcdef
+ $ array[0]=01234567890abcdefgh
+ $ echo ${array[0]:7}
+ 7890abcdefgh
+ $ echo ${array[0]:7:0}
+
+ $ echo ${array[0]:7:2}
+ 78
+ $ echo ${array[0]:7:-2}
+ 7890abcdef
+ $ echo ${array[0]: -7}
+ bcdefgh
+ $ echo ${array[0]: -7:0}
+
+ $ echo ${array[0]: -7:2}
+ bc
+ $ echo ${array[0]: -7:-2}
+ bcdef
+
+ If PARAMETER is '@', the result is LENGTH positional parameters
+ beginning at OFFSET. A negative OFFSET is taken relative to one
+ greater than the greatest positional parameter, so an offset of -1
+ evaluates to the last positional parameter. It is an expansion
+ error if LENGTH evaluates to a number less than zero.
+
+ The following examples illustrate substring expansion using
+ positional parameters:
+
+ $ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+ $ echo ${@:7}
+ 7 8 9 0 a b c d e f g h
+ $ echo ${@:7:0}
+
+ $ echo ${@:7:2}
+ 7 8
+ $ echo ${@:7:-2}
+ bash: -2: substring expression < 0
+ $ echo ${@: -7:2}
+ b c
+ $ echo ${@:0}
+ ./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+ $ echo ${@:0:2}
+ ./bash 1
+ $ echo ${@: -7:0}
+
+
+ If PARAMETER is an indexed array name subscripted by '@' or '*',
+ the result is the LENGTH members of the array beginning with
+ '${PARAMETER[OFFSET]}'. A negative OFFSET is taken relative to one
+ greater than the maximum index of the specified array. It is an
+ expansion error if LENGTH evaluates to a number less than zero.
+
+ These examples show how you can use substring expansion with
+ indexed arrays:
+
+ $ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h)
+ $ echo ${array[@]:7}
+ 7 8 9 0 a b c d e f g h
+ $ echo ${array[@]:7:2}
+ 7 8
+ $ echo ${array[@]: -7:2}
+ b c
+ $ echo ${array[@]: -7:-2}
+ bash: -2: substring expression < 0
+ $ echo ${array[@]:0}
+ 0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+ $ echo ${array[@]:0:2}
+ 0 1
+ $ echo ${array[@]: -7:0}
+
+
+ Substring expansion applied to an associative array produces
+ undefined results.
+
+ Substring indexing is zero-based unless the positional parameters
+ are used, in which case the indexing starts at 1 by default. If
+ OFFSET is 0, and the positional parameters are used, '$@' is
+ prefixed to the list.
+
+'${!PREFIX*}'
+'${!PREFIX@}'
+ Expands to the names of variables whose names begin with PREFIX,
+ separated by the first character of the 'IFS' special variable.
+ When '@' is used and the expansion appears within double quotes,
+ each variable name expands to a separate word.
+
+'${!NAME[@]}'
+'${!NAME[*]}'
+ If NAME is an array variable, expands to the list of array indices
+ (keys) assigned in NAME. If NAME is not an array, expands to 0 if
+ NAME is set and null otherwise. When '@' is used and the expansion
+ appears within double quotes, each key expands to a separate word.
+
+'${#PARAMETER}'
+ The length in characters of the expanded value of PARAMETER is
+ substituted. If PARAMETER is '*' or '@', the value substituted is
+ the number of positional parameters. If PARAMETER is an array name
+ subscripted by '*' or '@', the value substituted is the number of
+ elements in the array. If PARAMETER is an indexed array name
+ subscripted by a negative number, that number is interpreted as
+ relative to one greater than the maximum index of PARAMETER, so
+ negative indices count back from the end of the array, and an index
+ of -1 references the last element.
+
+'${PARAMETER#WORD}'
+'${PARAMETER##WORD}'
+ The WORD is expanded to produce a pattern and matched according to
+ the rules described below (*note Pattern Matching::). If the
+ pattern matches the beginning of the expanded value of PARAMETER,
+ then the result of the expansion is the expanded value of PARAMETER
+ with the shortest matching pattern (the '#' case) or the longest
+ matching pattern (the '##' case) deleted. If PARAMETER is '@' or
+ '*', the pattern removal operation is applied to each positional
+ parameter in turn, and the expansion is the resultant list. If
+ PARAMETER is an array variable subscripted with '@' or '*', the
+ pattern removal operation is applied to each member of the array in
+ turn, and the expansion is the resultant list.
+
+'${PARAMETER%WORD}'
+'${PARAMETER%%WORD}'
+ The WORD is expanded to produce a pattern and matched according to
+ the rules described below (*note Pattern Matching::). If the
+ pattern matches If the pattern matches a trailing portion of the
+ expanded value of PARAMETER, then the result of the expansion is
+ the value of PARAMETER with the shortest matching pattern (the '%'
+ case) or the longest matching pattern (the '%%' case) deleted. If
+ PARAMETER is '@' or '*', the pattern removal operation is applied
+ to each positional parameter in turn, and the expansion is the
+ resultant list. If PARAMETER is an array variable subscripted with
+ '@' or '*', the pattern removal operation is applied to each member
+ of the array in turn, and the expansion is the resultant list.
+
+'${PARAMETER/PATTERN/STRING}'
+
+ The PATTERN is expanded to produce a pattern just as in filename
+ expansion. PARAMETER is expanded and the longest match of PATTERN
+ against its value is replaced with STRING. The match is performed
+ according to the rules described below (*note Pattern Matching::).
+ If PATTERN begins with '/', all matches of PATTERN are replaced
+ with STRING. Normally only the first match is replaced. If
+ PATTERN begins with '#', it must match at the beginning of the
+ expanded value of PARAMETER. If PATTERN begins with '%', it must
+ match at the end of the expanded value of PARAMETER. If STRING is
+ null, matches of PATTERN are deleted and the '/' following PATTERN
+ may be omitted. If the 'nocasematch' shell option (see the
+ description of 'shopt' in *note The Shopt Builtin::) is enabled,
+ the match is performed without regard to the case of alphabetic
+ characters. If PARAMETER is '@' or '*', the substitution operation
+ is applied to each positional parameter in turn, and the expansion
+ is the resultant list. If PARAMETER is an array variable
+ subscripted with '@' or '*', the substitution operation is applied
+ to each member of the array in turn, and the expansion is the
+ resultant list.
+
+'${PARAMETER^PATTERN}'
+'${PARAMETER^^PATTERN}'
+'${PARAMETER,PATTERN}'
+'${PARAMETER,,PATTERN}'
+ This expansion modifies the case of alphabetic characters in
+ PARAMETER. The PATTERN is expanded to produce a pattern just as in
+ filename expansion. Each character in the expanded value of
+ PARAMETER is tested against PATTERN, and, if it matches the
+ pattern, its case is converted. The pattern should not attempt to
+ match more than one character. The '^' operator converts lowercase
+ letters matching PATTERN to uppercase; the ',' operator converts
+ matching uppercase letters to lowercase. The '^^' and ',,'
+ expansions convert each matched character in the expanded value;
+ the '^' and ',' expansions match and convert only the first
+ character in the expanded value. If PATTERN is omitted, it is
+ treated like a '?', which matches every character. If PARAMETER is
+ '@' or '*', the case modification operation is applied to each
+ positional parameter in turn, and the expansion is the resultant
+ list. If PARAMETER is an array variable subscripted with '@' or
+ '*', the case modification operation is applied to each member of
+ the array in turn, and the expansion is the resultant list.
+
+'${PARAMETER@OPERATOR}'
+ The expansion is either a transformation of the value of PARAMETER
+ or information about PARAMETER itself, depending on the value of
+ OPERATOR. Each OPERATOR is a single letter:
+
+ 'Q'
+ The expansion is a string that is the value of PARAMETER
+ quoted in a format that can be reused as input.
+ 'E'
+ The expansion is a string that is the value of PARAMETER with
+ backslash escape sequences expanded as with the '$'...''
+ quoting mechanism.
+ 'P'
+ The expansion is a string that is the result of expanding the
+ value of PARAMETER as if it were a prompt string (*note
+ Controlling the Prompt::).
+ 'A'
+ The expansion is a string in the form of an assignment
+ statement or 'declare' command that, if evaluated, will
+ recreate PARAMETER with its attributes and value.
+ 'a'
+ The expansion is a string consisting of flag values
+ representing PARAMETER's attributes.
+
+ If PARAMETER is '@' or '*', the operation is applied to each
+ positional parameter in turn, and the expansion is the resultant
+ list. If PARAMETER is an array variable subscripted with '@' or
+ '*', the operation is applied to each member of the array in turn,
+ and the expansion is the resultant list.
+
+ The result of the expansion is subject to word splitting and
+ pathname expansion as described below.
+
+
+File: bashref.info, Node: Command Substitution, Next: Arithmetic Expansion, Prev: Shell Parameter Expansion, Up: Shell Expansions
+
+3.5.4 Command Substitution
+--------------------------
+
+Command substitution allows the output of a command to replace the
+command itself. Command substitution occurs when a command is enclosed
+as follows:
+ $(COMMAND)
+or
+ `COMMAND`
+
+Bash performs the expansion by executing COMMAND in a subshell
+environment and replacing the command substitution with the standard
+output of the command, with any trailing newlines deleted. Embedded
+newlines are not deleted, but they may be removed during word splitting.
+The command substitution '$(cat FILE)' can be replaced by the equivalent
+but faster '$(< FILE)'.
+
+ When the old-style backquote form of substitution is used, backslash
+retains its literal meaning except when followed by '$', '`', or '\'.
+The first backquote not preceded by a backslash terminates the command
+substitution. When using the '$(COMMAND)' form, all characters between
+the parentheses make up the command; none are treated specially.
+
+ Command substitutions may be nested. To nest when using the
+backquoted form, escape the inner backquotes with backslashes.
+
+ If the substitution appears within double quotes, word splitting and
+filename expansion are not performed on the results.
+
+
+File: bashref.info, Node: Arithmetic Expansion, Next: Process Substitution, Prev: Command Substitution, Up: Shell Expansions
+
+3.5.5 Arithmetic Expansion
+--------------------------
+
+Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result. The format for arithmetic expansion
+is:
+
+ $(( EXPRESSION ))
+
+ The expression is treated as if it were within double quotes, but a
+double quote inside the parentheses is not treated specially. All
+tokens in the expression undergo parameter and variable expansion,
+command substitution, and quote removal. The result is treated as the
+arithmetic expression to be evaluated. Arithmetic expansions may be
+nested.
+
+ The evaluation is performed according to the rules listed below
+(*note Shell Arithmetic::). If the expression is invalid, Bash prints a
+message indicating failure to the standard error and no substitution
+occurs.
+
+
+File: bashref.info, Node: Process Substitution, Next: Word Splitting, Prev: Arithmetic Expansion, Up: Shell Expansions
+
+3.5.6 Process Substitution
+--------------------------
+
+Process substitution allows a process's input or output to be referred
+to using a filename. It takes the form of
+ <(LIST)
+or
+ >(LIST)
+The process LIST is run asynchronously, and its input or output appears
+as a filename. This filename is passed as an argument to the current
+command as the result of the expansion. If the '>(LIST)' form is used,
+writing to the file will provide input for LIST. If the '<(LIST)' form
+is used, the file passed as an argument should be read to obtain the
+output of LIST. Note that no space may appear between the '<' or '>'
+and the left parenthesis, otherwise the construct would be interpreted
+as a redirection. Process substitution is supported on systems that
+support named pipes (FIFOs) or the '/dev/fd' method of naming open
+files.
+
+ When available, process substitution is performed simultaneously with
+parameter and variable expansion, command substitution, and arithmetic
+expansion.
+
+
+File: bashref.info, Node: Word Splitting, Next: Filename Expansion, Prev: Process Substitution, Up: Shell Expansions
+
+3.5.7 Word Splitting
+--------------------
+
+The shell scans the results of parameter expansion, command
+substitution, and arithmetic expansion that did not occur within double
+quotes for word splitting.
+
+ The shell treats each character of '$IFS' as a delimiter, and splits
+the results of the other expansions into words using these characters as
+field terminators. If 'IFS' is unset, or its value is exactly
+'<space><tab><newline>', the default, then sequences of ' <space>',
+'<tab>', and '<newline>' at the beginning and end of the results of the
+previous expansions are ignored, and any sequence of 'IFS' characters
+not at the beginning or end serves to delimit words. If 'IFS' has a
+value other than the default, then sequences of the whitespace
+characters 'space', 'tab', and 'newline' are ignored at the beginning
+and end of the word, as long as the whitespace character is in the value
+of 'IFS' (an 'IFS' whitespace character). Any character in 'IFS' that
+is not 'IFS' whitespace, along with any adjacent 'IFS' whitespace
+characters, delimits a field. A sequence of 'IFS' whitespace characters
+is also treated as a delimiter. If the value of 'IFS' is null, no word
+splitting occurs.
+
+ Explicit null arguments ('""' or '''') are retained and passed to
+commands as empty strings. 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 and passed to a command as an empty
+string. When a quoted null argument appears as part of a word whose
+expansion is non-null, the null argument is removed. That is, the word
+'-d''' becomes '-d' after word splitting and null argument removal.
+
+ Note that if no expansion occurs, no splitting is performed.
+
+
+File: bashref.info, Node: Filename Expansion, Next: Quote Removal, Prev: Word Splitting, Up: Shell Expansions
+
+3.5.8 Filename Expansion
+------------------------
+
+* Menu:
+
+* Pattern Matching:: How the shell matches patterns.
+
+After word splitting, unless the '-f' option has been set (*note The Set
+Builtin::), Bash scans each word for the characters '*', '?', and '['.
+If one of these characters appears, then the word is regarded as a
+PATTERN, and replaced with an alphabetically sorted list of filenames
+matching the pattern (*note Pattern Matching::). If no matching
+filenames are found, and the shell option 'nullglob' is disabled, the
+word is left unchanged. If the 'nullglob' option is set, and no matches
+are found, the word is removed. If the 'failglob' shell option is set,
+and no matches are found, an error message is printed and the command is
+not executed. If the shell option 'nocaseglob' is enabled, the match is
+performed without regard to the case of alphabetic characters.
+
+ When a pattern is used for filename expansion, the character '.' at
+the start of a filename or immediately following a slash must be matched
+explicitly, unless the shell option 'dotglob' is set. The filenames '.'
+and '..' must always be matched explicitly, even if 'dotglob' is set.
+In other cases, the '.' character is not treated specially.
+
+ When matching a filename, the slash character must always be matched
+explicitly by a slash in the pattern, but in other matching contexts it
+can be matched by a special pattern character as described below (*note
+Pattern Matching::).
+
+ See the description of 'shopt' in *note The Shopt Builtin::, for a
+description of the 'nocaseglob', 'nullglob', 'failglob', and 'dotglob'
+options.
+
+ The 'GLOBIGNORE' shell variable may be used to restrict the set of
+file names matching a pattern. If 'GLOBIGNORE' is set, each matching
+file name that also matches one of the patterns in 'GLOBIGNORE' is
+removed from the list of matches. If the 'nocaseglob' option is set,
+the matching against the patterns in 'GLOBIGNORE' is performed without
+regard to case. The filenames '.' and '..' are always ignored when
+'GLOBIGNORE' is set and not null. However, setting 'GLOBIGNORE' to a
+non-null value has the effect of enabling the 'dotglob' shell option, so
+all other filenames beginning with a '.' will match. To get the old
+behavior of ignoring filenames beginning with a '.', make '.*' one of
+the patterns in 'GLOBIGNORE'. The 'dotglob' option is disabled when
+'GLOBIGNORE' is unset.
+
+
+File: bashref.info, Node: Pattern Matching, Up: Filename Expansion
+
+3.5.8.1 Pattern Matching
+........................
+
+Any character that appears in a pattern, other than the special pattern
+characters described below, matches itself. The NUL character may not
+occur in a pattern. A backslash escapes the following character; the
+escaping backslash is discarded when matching. The special pattern
+characters must be quoted if they are to be matched literally.
+
+ The special pattern characters have the following meanings:
+'*'
+ Matches any string, including the null string. When the 'globstar'
+ shell option is enabled, and '*' is used in a filename expansion
+ context, two adjacent '*'s used as a single pattern will match all
+ files and zero or more directories and subdirectories. If followed
+ by a '/', two adjacent '*'s will match only directories and
+ subdirectories.
+'?'
+ Matches any single character.
+'[...]'
+ Matches any one of the enclosed characters. A pair of characters
+ separated by a hyphen denotes a RANGE EXPRESSION; any character
+ that falls between those two characters, inclusive, using the
+ current locale's collating sequence and character set, is matched.
+ If the first character following the '[' is a '!' or a '^' then any
+ character not enclosed is matched. A '-' may be matched by
+ including it as the first or last character in the set. A ']' 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 values of the 'LC_COLLATE' and 'LC_ALL'
+ shell variables, if set.
+
+ For example, in the default C locale, '[a-dx-z]' is equivalent to
+ '[abcdxyz]'. Many locales sort characters in dictionary order, and
+ in these locales '[a-dx-z]' is typically not equivalent to
+ '[abcdxyz]'; it might be equivalent to '[aBbCcDdxXyYz]', for
+ example. To obtain the traditional interpretation of ranges in
+ bracket expressions, you can force the use of the C locale by
+ setting the 'LC_COLLATE' or 'LC_ALL' environment variable to the
+ value 'C', or enable the 'globasciiranges' shell option.
+
+ Within '[' and ']', CHARACTER CLASSES can be specified using the
+ syntax '[:'CLASS':]', where CLASS is one of the following classes
+ defined in the POSIX standard:
+ alnum alpha ascii blank cntrl digit graph lower
+ print punct space upper word xdigit
+ A character class matches any character belonging to that class.
+ The 'word' character class matches letters, digits, and the
+ character '_'.
+
+ Within '[' and ']', an EQUIVALENCE CLASS can be specified using the
+ syntax '[='C'=]', which matches all characters with the same
+ collation weight (as defined by the current locale) as the
+ character C.
+
+ Within '[' and ']', the syntax '[.'SYMBOL'.]' matches the collating
+ symbol SYMBOL.
+
+ If the 'extglob' shell option is enabled using the 'shopt' builtin,
+several extended pattern matching operators are recognized. In the
+following description, a PATTERN-LIST is a list of one or more patterns
+separated by a '|'. Composite patterns may be formed using one or more
+of the following sub-patterns:
+
+'?(PATTERN-LIST)'
+ Matches zero or one occurrence of the given patterns.
+
+'*(PATTERN-LIST)'
+ Matches zero or more occurrences of the given patterns.
+
+'+(PATTERN-LIST)'
+ Matches one or more occurrences of the given patterns.
+
+'@(PATTERN-LIST)'
+ Matches one of the given patterns.
+
+'!(PATTERN-LIST)'
+ Matches anything except one of the given patterns.
+
+ Complicated extended pattern matching against long strings is slow,
+especially when the patterns contain alternations and the strings
+contain multiple matches. Using separate matches against shorter
+strings, or using arrays of strings instead of a single long string, may
+be faster.
+
+
+File: bashref.info, Node: Quote Removal, Prev: Filename Expansion, Up: Shell Expansions
+
+3.5.9 Quote Removal
+-------------------
+
+After the preceding expansions, all unquoted occurrences of the
+characters '\', ''', and '"' that did not result from one of the above
+expansions are removed.
+
+
+File: bashref.info, Node: Redirections, Next: Executing Commands, Prev: Shell Expansions, Up: Basic Shell Features
+
+3.6 Redirections
+================
+
+Before a command is executed, its input and output may be REDIRECTED
+using a special notation interpreted by the shell. Redirection allows
+commands' file handles to be duplicated, opened, closed, made to refer
+to different files, and can change the files the command reads from and
+writes to. Redirection may also be used to modify file handles in the
+current shell execution environment. The following redirection
+operators may precede or appear anywhere within a simple command or may
+follow a command. Redirections are processed in the order they appear,
+from left to right.
+
+ Each redirection that may be preceded by a file descriptor number may
+instead be preceded by a word of the form {VARNAME}. In this case, for
+each redirection operator except >&- and <&-, the shell will allocate a
+file descriptor greater than 10 and assign it to {VARNAME}. If >&- or
+<&- is preceded by {VARNAME}, the value of VARNAME defines the file
+descriptor to close. If {VARNAME} is supplied, the redirection persists
+beyond the scope of the command, allowing the shell programmer to manage
+the file descriptor himself.
+
+ In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is '<', the
+redirection refers to the standard input (file descriptor 0). If the
+first character of the redirection operator is '>', the redirection
+refers to the standard output (file descriptor 1).
+
+ The word following the redirection operator in the following
+descriptions, unless otherwise noted, is subjected to brace expansion,
+tilde expansion, parameter expansion, command substitution, arithmetic
+expansion, quote removal, filename expansion, and word splitting. If it
+expands to more than one word, Bash reports an error.
+
+ Note that the order of redirections is significant. For example, the
+command
+ ls > DIRLIST 2>&1
+directs both standard output (file descriptor 1) and standard error
+(file descriptor 2) to the file DIRLIST, while the command
+ ls 2>&1 > DIRLIST
+directs only the standard output to file DIRLIST, because the standard
+error was made a copy of the standard output before the standard output
+was redirected to DIRLIST.
+
+ Bash handles several filenames specially when they are used in
+redirections, as described in the following table. If the operating
+system on which Bash is running provides these special files, bash will
+use them; otherwise it will emulate them internally with the behavior
+described below.
+
+'/dev/fd/FD'
+ If FD is a valid integer, file descriptor FD is duplicated.
+
+'/dev/stdin'
+ File descriptor 0 is duplicated.
+
+'/dev/stdout'
+ File descriptor 1 is duplicated.
+
+'/dev/stderr'
+ File descriptor 2 is duplicated.
+
+'/dev/tcp/HOST/PORT'
+ If HOST is a valid hostname or Internet address, and PORT is an
+ integer port number or service name, Bash attempts to open the
+ corresponding TCP socket.
+
+'/dev/udp/HOST/PORT'
+ If HOST is a valid hostname or Internet address, and PORT is an
+ integer port number or service name, Bash attempts to open the
+ corresponding UDP socket.
+
+ A failure to open or create a file causes the redirection to fail.
+
+ Redirections using file descriptors greater than 9 should be used
+with care, as they may conflict with file descriptors the shell uses
+internally.
+
+3.6.1 Redirecting Input
+-----------------------
+
+Redirection of input causes the file whose name results from the
+expansion of WORD to be opened for reading on file descriptor 'n', or
+the standard input (file descriptor 0) if 'n' is not specified.
+
+ The general format for redirecting input is:
+ [N]<WORD
+
+3.6.2 Redirecting Output
+------------------------
+
+Redirection of output causes the file whose name results from the
+expansion of WORD to be opened for writing on file descriptor N, or the
+standard output (file descriptor 1) if N is not specified. If the file
+does not exist it is created; if it does exist it is truncated to zero
+size.
+
+ The general format for redirecting output is:
+ [N]>[|]WORD
+
+ If the redirection operator is '>', and the 'noclobber' option to the
+'set' builtin has been enabled, the redirection will fail if the file
+whose name results from the expansion of WORD exists and is a regular
+file. If the redirection operator is '>|', or the redirection operator
+is '>' and the 'noclobber' option is not enabled, the redirection is
+attempted even if the file named by WORD exists.
+
+3.6.3 Appending Redirected Output
+---------------------------------
+
+Redirection of output in this fashion causes the file whose name results
+from the expansion of WORD to be opened for appending on file descriptor
+N, or the standard output (file descriptor 1) if N is not specified. If
+the file does not exist it is created.
+
+ The general format for appending output is:
+ [N]>>WORD
+
+3.6.4 Redirecting Standard Output and Standard Error
+----------------------------------------------------
+
+This construct 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 WORD.
+
+ There are two formats for redirecting standard output and standard
+error:
+ &>WORD
+and
+ >&WORD
+Of the two forms, the first is preferred. This is semantically
+equivalent to
+ >WORD 2>&1
+ When using the second form, WORD may not expand to a number or '-'.
+If it does, other redirection operators apply (see Duplicating File
+Descriptors below) for compatibility reasons.
+
+3.6.5 Appending Standard Output and Standard Error
+--------------------------------------------------
+
+This construct allows both the standard output (file descriptor 1) and
+the standard error output (file descriptor 2) to be appended to the file
+whose name is the expansion of WORD.
+
+ The format for appending standard output and standard error is:
+ &>>WORD
+This is semantically equivalent to
+ >>WORD 2>&1
+ (see Duplicating File Descriptors below).
+
+3.6.6 Here Documents
+--------------------
+
+This type of redirection instructs the shell to read input from the
+current source until a line containing only WORD (with no trailing
+blanks) is seen. All of the lines read up to that point are then used
+as the standard input (or file descriptor N if N is specified) for a
+command.
+
+ The format of here-documents is:
+ [N]<<[-]WORD
+ HERE-DOCUMENT
+ DELIMITER
+
+ No parameter and variable expansion, command substitution, arithmetic
+expansion, or filename expansion is performed on WORD. If any part of
+WORD is quoted, the DELIMITER is the result of quote removal on WORD,
+and the lines in the here-document are not expanded. If WORD is
+unquoted, all lines of the here-document are subjected to parameter
+expansion, command substitution, and arithmetic expansion, the character
+sequence '\newline' is ignored, and '\' must be used to quote the
+characters '\', '$', and '`'.
+
+ If the redirection operator is '<<-', then all leading tab characters
+are stripped from input lines and the line containing DELIMITER. This
+allows here-documents within shell scripts to be indented in a natural
+fashion.
+
+3.6.7 Here Strings
+------------------
+
+A variant of here documents, the format is:
+ [N]<<< WORD
+
+ The WORD undergoes tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal. Pathname
+expansion and word splitting are not performed. The result is supplied
+as a single string, with a newline appended, to the command on its
+standard input (or file descriptor N if N is specified).
+
+3.6.8 Duplicating File Descriptors
+----------------------------------
+
+The redirection operator
+ [N]<&WORD
+is used to duplicate input file descriptors. If WORD expands to one or
+more digits, the file descriptor denoted by N is made to be a copy of
+that file descriptor. If the digits in WORD do not specify a file
+descriptor open for input, a redirection error occurs. If WORD
+evaluates to '-', file descriptor N is closed. If N is not specified,
+the standard input (file descriptor 0) is used.
+
+ The operator
+ [N]>&WORD
+is used similarly to duplicate output file descriptors. If N is not
+specified, the standard output (file descriptor 1) is used. If the
+digits in WORD do not specify a file descriptor open for output, a
+redirection error occurs. If WORD evaluates to '-', file descriptor N
+is closed. As a special case, if N is omitted, and WORD does not expand
+to one or more digits or '-', the standard output and standard error are
+redirected as described previously.
+
+3.6.9 Moving File Descriptors
+-----------------------------
+
+The redirection operator
+ [N]<&DIGIT-
+moves the file descriptor DIGIT to file descriptor N, or the standard
+input (file descriptor 0) if N is not specified. DIGIT is closed after
+being duplicated to N.
+
+ Similarly, the redirection operator
+ [N]>&DIGIT-
+moves the file descriptor DIGIT to file descriptor N, or the standard
+output (file descriptor 1) if N is not specified.
+
+3.6.10 Opening File Descriptors for Reading and Writing
+-------------------------------------------------------
+
+The redirection operator
+ [N]<>WORD
+causes the file whose name is the expansion of WORD to be opened for
+both reading and writing on file descriptor N, or on file descriptor 0
+if N is not specified. If the file does not exist, it is created.
+
+
+File: bashref.info, Node: Executing Commands, Next: Shell Scripts, Prev: Redirections, Up: Basic Shell Features
+
+3.7 Executing Commands
+======================
+
+* Menu:
+
+* Simple Command Expansion:: How Bash expands simple commands before
+ executing them.
+* Command Search and Execution:: How Bash finds commands and runs them.
+* Command Execution Environment:: The environment in which Bash
+ executes commands that are not
+ shell builtins.
+* Environment:: The environment given to a command.
+* Exit Status:: The status returned by commands and how Bash
+ interprets it.
+* Signals:: What happens when Bash or a command it runs
+ receives a signal.
+
+
+File: bashref.info, Node: Simple Command Expansion, Next: Command Search and Execution, Up: Executing Commands
+
+3.7.1 Simple Command Expansion
+------------------------------
+
+When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+
+ 1. The words that the parser has marked as variable assignments (those
+ preceding the command name) and redirections are saved for later
+ processing.
+
+ 2. The words that are not variable assignments or redirections are
+ expanded (*note Shell Expansions::). 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.
+
+ 3. Redirections are performed as described above (*note
+ Redirections::).
+
+ 4. The text after the '=' in each variable assignment undergoes tilde
+ expansion, parameter expansion, command substitution, arithmetic
+ expansion, and quote removal before being assigned to the variable.
+
+ If no command name results, the variable assignments affect the
+current shell environment. Otherwise, the variables are added to the
+environment of the executed command and do not affect the current shell
+environment. If any of the assignments attempts to assign a value to a
+readonly variable, an error occurs, and the command exits with a
+non-zero status.
+
+ If no command name results, redirections are performed, but do not
+affect the current shell environment. A redirection error causes the
+command to exit with a non-zero status.
+
+ If there is a command name left after expansion, execution proceeds
+as described below. Otherwise, the command exits. If one of the
+expansions contained a command substitution, the exit status of the
+command is the exit status of the last command substitution performed.
+If there were no command substitutions, the command exits with a status
+of zero.
+
+
+File: bashref.info, Node: Command Search and Execution, Next: Command Execution Environment, Prev: Simple Command Expansion, Up: Executing Commands
+
+3.7.2 Command Search and Execution
+----------------------------------
+
+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.
+
+ 1. 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 *note Shell Functions::.
+
+ 2. 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.
+
+ 3. If the name is neither a shell function nor a builtin, and contains
+ no slashes, Bash searches each element of '$PATH' for a directory
+ containing an executable file by that name. Bash uses a hash table
+ to remember the full pathnames of executable files to avoid
+ multiple 'PATH' searches (see the description of 'hash' in *note
+ Bourne Shell Builtins::). A full search of the directories in
+ '$PATH' is performed only if the command is not found in the hash
+ table. If the search is unsuccessful, the shell searches for a
+ defined shell function named 'command_not_found_handle'. If that
+ function exists, it is invoked in a separate execution environment
+ with the original command and the original command's arguments as
+ its arguments, and the function's exit status becomes the exit
+ status of that subshell. If that function is not defined, the
+ shell prints an error message and returns an exit status of 127.
+
+ 4. 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.
+
+ 5. 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
+ SHELL SCRIPT and the shell executes it as described in *note Shell
+ Scripts::.
+
+ 6. If the command was not begun asynchronously, the shell waits for
+ the command to complete and collects its exit status.
+
+
+File: bashref.info, Node: Command Execution Environment, Next: Environment, Prev: Command Search and Execution, Up: Executing Commands
+
+3.7.3 Command Execution Environment
+-----------------------------------
+
+The shell has an EXECUTION ENVIRONMENT, which consists of the following:
+
+ * open files inherited by the shell at invocation, as modified by
+ redirections supplied to the 'exec' builtin
+
+ * the current working directory as set by 'cd', 'pushd', or 'popd',
+ or inherited by the shell at invocation
+
+ * the file creation mode mask as set by 'umask' or inherited from the
+ shell's parent
+
+ * current traps set by 'trap'
+
+ * shell parameters that are set by variable assignment or with 'set'
+ or inherited from the shell's parent in the environment
+
+ * shell functions defined during execution or inherited from the
+ shell's parent in the environment
+
+ * options enabled at invocation (either by default or with
+ command-line arguments) or by 'set'
+
+ * options enabled by 'shopt' (*note The Shopt Builtin::)
+
+ * shell aliases defined with 'alias' (*note Aliases::)
+
+ * various process IDs, including those of background jobs (*note
+ Lists::), the value of '$$', and the value of '$PPID'
+
+ When a simple command other than a builtin or shell function is to be
+executed, it is invoked in a separate execution environment that
+consists of the following. Unless otherwise noted, the values are
+inherited from the shell.
+
+ * the shell's open files, plus any modifications and additions
+ specified by redirections to the command
+
+ * the current working directory
+
+ * the file creation mode mask
+
+ * shell variables and functions marked for export, along with
+ variables exported for the command, passed in the environment
+ (*note Environment::)
+
+ * traps caught by the shell are reset to the values inherited from
+ the shell's parent, and traps ignored by the shell are ignored
+
+ A command invoked in this separate environment cannot affect the
+shell's execution environment.
+
+ Command substitution, commands grouped with parentheses, and
+asynchronous commands are invoked in a subshell environment that is a
+duplicate of the shell environment, except that traps caught by the
+shell are reset to the values that the shell inherited from its parent
+at invocation. Builtin commands that are invoked as part of a pipeline
+are also executed in a subshell environment. Changes made to the
+subshell environment cannot affect the shell's execution environment.
+
+ Subshells spawned to execute command substitutions inherit the value
+of the '-e' option from the parent shell. When not in POSIX mode, Bash
+clears the '-e' option in such subshells.
+
+ If a command is followed by a '&' and job control is not active, the
+default standard input for the command is the empty file '/dev/null'.
+Otherwise, the invoked command inherits the file descriptors of the
+calling shell as modified by redirections.
+
+
+File: bashref.info, Node: Environment, Next: Exit Status, Prev: Command Execution Environment, Up: Executing Commands
+
+3.7.4 Environment
+-----------------
+
+When a program is invoked it is given an array of strings called the
+ENVIRONMENT. This is a list of name-value pairs, of the form
+'name=value'.
+
+ Bash provides several ways to manipulate the environment. On
+invocation, the shell scans its own environment and creates a parameter
+for each name found, automatically marking it for EXPORT to child
+processes. Executed commands inherit the environment. The 'export' and
+'declare -x' commands allow parameters and functions to be added to and
+deleted from the environment. If the value of a parameter in the
+environment is modified, the new value becomes part of the environment,
+replacing the old. The environment inherited by any executed command
+consists of the shell's initial environment, whose values may be
+modified in the shell, less any pairs removed by the 'unset' and 'export
+-n' commands, plus any additions via the 'export' and 'declare -x'
+commands.
+
+ The environment for any simple command or function may be augmented
+temporarily by prefixing it with parameter assignments, as described in
+*note Shell Parameters::. These assignment statements affect only the
+environment seen by that command.
+
+ If the '-k' option is set (*note The Set Builtin::), then all
+parameter assignments are placed in the environment for a command, not
+just those that precede the command name.
+
+ When Bash invokes an external command, the variable '$_' is set to
+the full pathname of the command and passed to that command in its
+environment.
+
+
+File: bashref.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: Executing Commands
+
+3.7.5 Exit Status
+-----------------
+
+The exit status of an executed command is the value returned by the
+WAITPID system call or equivalent function. Exit statuses fall between
+0 and 255, though, as explained below, the shell may use values above
+125 specially. Exit statuses from shell builtins and compound commands
+are also limited to this range. Under certain circumstances, the shell
+will use special values to indicate specific failure modes.
+
+ For the shell's purposes, a command which exits with a zero exit
+status has succeeded. A non-zero exit status indicates failure. This
+seemingly counter-intuitive scheme is used so there is one well-defined
+way to indicate success and a variety of ways to indicate various
+failure modes. When a command terminates on a fatal signal whose number
+is N, Bash uses the value 128+N as the exit status.
+
+ If a command is not found, the child process created to execute it
+returns a status of 127. If a command is found but is not executable,
+the return status is 126.
+
+ If a command fails because of an error during expansion or
+redirection, the exit status is greater than zero.
+
+ The exit status is used by the Bash conditional commands (*note
+Conditional Constructs::) and some of the list constructs (*note
+Lists::).
+
+ 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, generally invalid options or missing
+arguments.
+
+
+File: bashref.info, Node: Signals, Prev: Exit Status, Up: Executing Commands
+
+3.7.6 Signals
+-------------
+
+When Bash is interactive, in the absence of any traps, it ignores
+'SIGTERM' (so that 'kill 0' does not kill an interactive shell), and
+'SIGINT' is caught and handled (so that the 'wait' builtin is
+interruptible). When Bash receives a 'SIGINT', it breaks out of any
+executing loops. In all cases, Bash ignores 'SIGQUIT'. If job control
+is in effect (*note Job Control::), Bash ignores 'SIGTTIN', 'SIGTTOU',
+and 'SIGTSTP'.
+
+ Non-builtin commands started by Bash have signal handlers set to the
+values inherited by the shell from its parent. When job control is not
+in effect, asynchronous commands ignore 'SIGINT' and 'SIGQUIT' in
+addition to these inherited handlers. Commands run as a result of
+command substitution ignore the keyboard-generated job control signals
+'SIGTTIN', 'SIGTTOU', and 'SIGTSTP'.
+
+ The shell exits by default upon receipt of a 'SIGHUP'. Before
+exiting, an interactive shell resends the 'SIGHUP' to all jobs, running
+or stopped. Stopped jobs are sent 'SIGCONT' to ensure that they receive
+the 'SIGHUP'. To prevent the shell from sending the 'SIGHUP' signal to
+a particular job, it should be removed from the jobs table with the
+'disown' builtin (*note Job Control Builtins::) or marked to not receive
+'SIGHUP' using 'disown -h'.
+
+ If the 'huponexit' shell option has been set with 'shopt' (*note The
+Shopt Builtin::), Bash sends a 'SIGHUP' to all jobs when an interactive
+login shell exits.
+
+ If Bash is waiting for a command to complete and receives a signal
+for which a trap has been set, the trap will not be executed until the
+command completes. When Bash is waiting for an asynchronous command via
+the 'wait' builtin, the reception of a signal for which a trap has been
+set will cause the 'wait' builtin to return immediately with an exit
+status greater than 128, immediately after which the trap is executed.
+
+
+File: bashref.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features
+
+3.8 Shell Scripts
+=================
+
+A shell script is a text file containing shell commands. When such a
+file is used as the first non-option argument when invoking Bash, and
+neither the '-c' nor '-s' option is supplied (*note Invoking Bash::),
+Bash reads and executes commands from the file, then exits. This mode
+of operation creates a non-interactive shell. The shell first searches
+for the file in the current directory, and looks in the directories in
+'$PATH' if not found there.
+
+ When Bash runs a shell script, it sets the special parameter '0' to
+the name of the file, rather than the name of the shell, and the
+positional parameters are set to the remaining arguments, if any are
+given. If no additional arguments are supplied, the positional
+parameters are unset.
+
+ A shell script may be made executable by using the 'chmod' command to
+turn on the execute bit. When Bash finds such a file while searching
+the '$PATH' for a command, it spawns a subshell to execute it. In other
+words, executing
+ filename ARGUMENTS
+is equivalent to executing
+ bash filename ARGUMENTS
+
+if 'filename' is an executable shell script. This subshell
+reinitializes itself, so that the effect is as if a new shell had been
+invoked to interpret the script, with the exception that the locations
+of commands remembered by the parent (see the description of 'hash' in
+*note Bourne Shell Builtins::) are retained by the child.
+
+ Most versions of Unix make this a part of the operating system's
+command execution mechanism. If the first line of a script begins with
+the two characters '#!', the remainder of the line specifies an
+interpreter for the program. Thus, you can specify Bash, 'awk', Perl,
+or some other interpreter and write the rest of the script file in that
+language.
+
+ The arguments to the interpreter consist of a single optional
+argument following the interpreter name on the first line of the script
+file, followed by the name of the script file, followed by the rest of
+the arguments. Bash will perform this action on operating systems that
+do not handle it themselves. Note that some older versions of Unix
+limit the interpreter name and argument to a maximum of 32 characters.
+
+ Bash scripts often begin with '#! /bin/bash' (assuming that Bash has
+been installed in '/bin'), since this ensures that Bash will be used to
+interpret the script, even if it is executed under another shell.
+
+
+File: bashref.info, Node: Shell Builtin Commands, Next: Shell Variables, Prev: Basic Shell Features, Up: Top
+
+4 Shell Builtin Commands
+************************
+
+* Menu:
+
+* Bourne Shell Builtins:: Builtin commands inherited from the Bourne
+ Shell.
+* Bash Builtins:: Table of builtins specific to Bash.
+* Modifying Shell Behavior:: Builtins to modify shell attributes and
+ optional behavior.
+* Special Builtins:: Builtin commands classified specially by
+ POSIX.
+
+Builtin commands are contained within the shell itself. When the name
+of a builtin command is used as the first word of a simple command
+(*note Simple Commands::), the shell executes the command directly,
+without invoking another program. Builtin commands are necessary to
+implement functionality impossible or inconvenient to obtain with
+separate utilities.
+
+ This section briefly describes the builtins which Bash inherits from
+the Bourne Shell, as well as the builtin commands which are unique to or
+have been extended in Bash.
+
+ Several builtin commands are described in other chapters: builtin
+commands which provide the Bash interface to the job control facilities
+(*note Job Control Builtins::), the directory stack (*note Directory
+Stack Builtins::), the command history (*note Bash History Builtins::),
+and the programmable completion facilities (*note Programmable
+Completion Builtins::).
+
+ Many of the builtins have been extended by POSIX or Bash.
+
+ Unless otherwise noted, each builtin command documented as accepting
+options preceded by '-' accepts '--' to signify the end of the options.
+The ':', 'true', 'false', and 'test'/'[' builtins do not accept options
+and do not treat '--' specially. The 'exit', 'logout', 'return',
+'break', 'continue', 'let', and 'shift' builtins accept and process
+arguments beginning with '-' without requiring '--'. Other builtins
+that accept arguments but are not specified as accepting options
+interpret arguments beginning with '-' as invalid options and require
+'--' to prevent this interpretation.
+
+
+File: bashref.info, Node: Bourne Shell Builtins, Next: Bash Builtins, Up: Shell Builtin Commands
+
+4.1 Bourne Shell Builtins
+=========================
+
+The following shell builtin commands are inherited from the Bourne
+Shell. These commands are implemented as specified by the POSIX
+standard.
+
+': (a colon)'
+ : [ARGUMENTS]
+
+ Do nothing beyond expanding ARGUMENTS and performing redirections.
+ The return status is zero.
+
+'. (a period)'
+ . FILENAME [ARGUMENTS]
+
+ Read and execute commands from the FILENAME argument in the current
+ shell context. If FILENAME does not contain a slash, the 'PATH'
+ variable is used to find FILENAME. When Bash is not in POSIX mode,
+ the current directory is searched if FILENAME is not found in
+ '$PATH'. If any ARGUMENTS are supplied, they become the positional
+ parameters when FILENAME is executed. Otherwise the positional
+ parameters are unchanged. If the '-T' option is enabled, 'source'
+ inherits any trap on 'DEBUG'; if it is not, any 'DEBUG' trap string
+ is saved and restored around the call to 'source', and 'source'
+ unsets the 'DEBUG' trap while it executes. If '-T' is not set, and
+ the sourced file changes the 'DEBUG' trap, the new value is
+ retained when 'source' completes. The return status is the exit
+ status of the last command executed, or zero if no commands are
+ executed. If FILENAME is not found, or cannot be read, the return
+ status is non-zero. This builtin is equivalent to 'source'.
+
+'break'
+ break [N]
+
+ Exit from a 'for', 'while', 'until', or 'select' loop. If N is
+ supplied, the Nth enclosing loop is exited. N must be greater than
+ or equal to 1. The return status is zero unless N is not greater
+ than or equal to 1.
+
+'cd'
+ cd [-L|[-P [-e]] [-@] [DIRECTORY]
+
+ Change the current working directory to DIRECTORY. If DIRECTORY is
+ not supplied, the value of the 'HOME' shell variable is used. Any
+ additional arguments following DIRECTORY are ignored. If the shell
+ variable 'CDPATH' exists, it is used as a search path: each
+ directory name in 'CDPATH' is searched for DIRECTORY, with
+ alternative directory names in 'CDPATH' separated by a colon (':').
+ If DIRECTORY begins with a slash, 'CDPATH' is not used.
+
+ The '-P' option means to not follow symbolic links: symbolic links
+ are resolved while 'cd' is traversing DIRECTORY and before
+ processing an instance of '..' in DIRECTORY.
+
+ By default, or when the '-L' option is supplied, symbolic links in
+ DIRECTORY are resolved after 'cd' processes an instance of '..' in
+ DIRECTORY.
+
+ If '..' appears in DIRECTORY, it is processed by removing the
+ immediately preceding pathname component, back to a slash or the
+ beginning of DIRECTORY.
+
+ If the '-e' option is supplied with '-P' and the current working
+ directory cannot be successfully determined after a successful
+ directory change, 'cd' will return an unsuccessful status.
+
+ On systems that support it, the '-@' option presents the extended
+ attributes associated with a file as a directory.
+
+ If DIRECTORY is '-', it is converted to '$OLDPWD' before the
+ directory change is attempted.
+
+ If a non-empty directory name from 'CDPATH' is used, or if '-' is
+ the first argument, and the directory change is successful, the
+ absolute pathname of the new working directory is written to the
+ standard output.
+
+ The return status is zero if the directory is successfully changed,
+ non-zero otherwise.
+
+'continue'
+ continue [N]
+
+ Resume the next iteration of an enclosing 'for', 'while', 'until',
+ or 'select' loop. If N is supplied, the execution of the Nth
+ enclosing loop is resumed. N must be greater than or equal to 1.
+ The return status is zero unless N is not greater than or equal to
+ 1.
+
+'eval'
+ eval [ARGUMENTS]
+
+ 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 'eval'. If there are no arguments or only empty
+ arguments, the return status is zero.
+
+'exec'
+ exec [-cl] [-a NAME] [COMMAND [ARGUMENTS]]
+
+ If COMMAND is supplied, it replaces the shell without creating a
+ new process. If the '-l' option is supplied, the shell places a
+ dash at the beginning of the zeroth argument passed to COMMAND.
+ This is what the 'login' program does. The '-c' option causes
+ COMMAND to be executed with an empty environment. If '-a' is
+ supplied, the shell passes NAME as the zeroth argument to COMMAND.
+ If COMMAND cannot be executed for some reason, a non-interactive
+ shell exits, unless the 'execfail' shell option is enabled. In
+ that case, it returns failure. An interactive shell returns
+ failure if the file cannot be executed. A subshell exits
+ unconditionally if 'exec' fails. If no COMMAND is specified,
+ redirections may be used to affect the current shell environment.
+ If there are no redirection errors, the return status is zero;
+ otherwise the return status is non-zero.
+
+'exit'
+ exit [N]
+
+ Exit the shell, returning a status of N to the shell's parent. If
+ N is omitted, the exit status is that of the last command executed.
+ Any trap on 'EXIT' is executed before the shell terminates.
+
+'export'
+ export [-fn] [-p] [NAME[=VALUE]]
+
+ Mark each NAME to be passed to child processes in the environment.
+ If the '-f' option is supplied, the NAMEs refer to shell functions;
+ otherwise the names refer to shell variables. The '-n' option
+ means to no longer mark each NAME for export. If no NAMES are
+ supplied, or if the '-p' option is given, a list of names of all
+ exported variables is displayed. The '-p' option displays output
+ in a form that may be reused as input. If a variable name is
+ followed by =VALUE, the value of the variable is set to VALUE.
+
+ The return status is zero unless an invalid option is supplied, one
+ of the names is not a valid shell variable name, or '-f' is
+ supplied with a name that is not a shell function.
+
+'getopts'
+ getopts OPTSTRING NAME [ARGS]
+
+ 'getopts' is used by shell scripts to parse positional parameters.
+ OPTSTRING contains the option characters to be recognized; if a
+ character is followed by a colon, the option is expected to have an
+ argument, which should be separated from it by whitespace. The
+ colon (':') and question mark ('?') may not be used as option
+ characters. Each time it is invoked, 'getopts' places the next
+ option in the shell variable NAME, initializing NAME if it does not
+ exist, and the index of the next argument to be processed into the
+ variable 'OPTIND'. 'OPTIND' is initialized to 1 each time the
+ shell or a shell script is invoked. When an option requires an
+ argument, 'getopts' places that argument into the variable
+ 'OPTARG'. The shell does not reset 'OPTIND' automatically; it must
+ be manually reset between multiple calls to 'getopts' within the
+ same shell invocation if a new set of parameters is to be used.
+
+ When the end of options is encountered, 'getopts' exits with a
+ return value greater than zero. 'OPTIND' is set to the index of
+ the first non-option argument, and NAME is set to '?'.
+
+ 'getopts' normally parses the positional parameters, but if more
+ arguments are given in ARGS, 'getopts' parses those instead.
+
+ 'getopts' can report errors in two ways. If the first character of
+ OPTSTRING is a colon, SILENT error reporting is used. In normal
+ operation, diagnostic messages are printed when invalid options or
+ missing option arguments are encountered. If the variable 'OPTERR'
+ is set to 0, no error messages will be displayed, even if the first
+ character of 'optstring' is not a colon.
+
+ If an invalid option is seen, 'getopts' places '?' into NAME and,
+ if not silent, prints an error message and unsets 'OPTARG'. If
+ 'getopts' is silent, the option character found is placed in
+ 'OPTARG' and no diagnostic message is printed.
+
+ If a required argument is not found, and 'getopts' is not silent, a
+ question mark ('?') is placed in NAME, 'OPTARG' is unset, and a
+ diagnostic message is printed. If 'getopts' is silent, then a
+ colon (':') is placed in NAME and 'OPTARG' is set to the option
+ character found.
+
+'hash'
+ hash [-r] [-p FILENAME] [-dt] [NAME]
+
+ Each time 'hash' is invoked, it remembers the full pathnames of the
+ commands specified as NAME arguments, so they need not be searched
+ for on subsequent invocations. The commands are found by searching
+ through the directories listed in '$PATH'. Any
+ previously-remembered pathname is discarded. The '-p' option
+ inhibits the path search, and FILENAME is used as the location of
+ NAME. The '-r' option causes the shell to forget all remembered
+ locations. The '-d' option causes the shell to forget the
+ remembered location of each NAME. If the '-t' option is supplied,
+ the full pathname to which each NAME corresponds is printed. If
+ multiple NAME arguments are supplied with '-t', the NAME is printed
+ before the hashed full pathname. The '-l' option causes output to
+ be displayed in a format that may be reused as input. If no
+ arguments are given, or if only '-l' is supplied, information about
+ remembered commands is printed. The return status is zero unless a
+ NAME is not found or an invalid option is supplied.
+
+'pwd'
+ pwd [-LP]
+
+ Print the absolute pathname of the current working directory. If
+ the '-P' option is supplied, the pathname printed will not contain
+ symbolic links. If the '-L' 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.
+
+'readonly'
+ readonly [-aAf] [-p] [NAME[=VALUE]] ...
+
+ Mark each NAME as readonly. The values of these names may not be
+ changed by subsequent assignment. If the '-f' option is supplied,
+ each NAME refers to a shell function. The '-a' option means each
+ NAME refers to an indexed array variable; the '-A' option means
+ each NAME refers to an associative array variable. If both options
+ are supplied, '-A' takes precedence. If no NAME arguments are
+ given, or if the '-p' option is supplied, a list of all readonly
+ names is printed. The other options may be used to restrict the
+ output to a subset of the set of readonly names. The '-p' option
+ causes output to be displayed in a format that may be reused as
+ input. If a variable name is followed by =VALUE, the value of the
+ variable is set to VALUE. The return status is zero unless an
+ invalid option is supplied, one of the NAME arguments is not a
+ valid shell variable or function name, or the '-f' option is
+ supplied with a name that is not a shell function.
+
+'return'
+ return [N]
+
+ Cause a shell function to stop executing and return the value N to
+ its caller. If N is not supplied, the return value is the exit
+ status of the last command executed in the function. If 'return'
+ is executed by a trap handler, the last command used to determine
+ the status is the last command executed before the trap handler.
+ If 'return' is executed during a 'DEBUG' trap, the last command
+ used to determine the status is the last command executed by the
+ trap handler before 'return' was invoked. 'return' may also be
+ used to terminate execution of a script being executed with the '.'
+ ('source') builtin, returning either N or the exit status of the
+ last command executed within the script as the exit status of the
+ script. If N is supplied, the return value is its least
+ significant 8 bits. Any command associated with the 'RETURN' trap
+ is executed before execution resumes after the function or script.
+ The return status is non-zero if 'return' is supplied a non-numeric
+ argument or is used outside a function and not during the execution
+ of a script by '.' or 'source'.
+
+'shift'
+ shift [N]
+
+ Shift the positional parameters to the left by N. The positional
+ parameters from N+1 ... '$#' are renamed to '$1' ... '$#'-N.
+ Parameters represented by the numbers '$#' to '$#'-N+1 are unset.
+ N must be a non-negative number less than or equal to '$#'. If N
+ is zero or greater than '$#', the positional parameters are not
+ changed. If N is not supplied, it is assumed to be 1. The return
+ status is zero unless N is greater than '$#' or less than zero,
+ non-zero otherwise.
+
+'test'
+'['
+ test EXPR
+
+ Evaluate a conditional expression EXPR and return a status of 0
+ (true) or 1 (false). Each operator and operand must be a separate
+ argument. Expressions are composed of the primaries described
+ below in *note Bash Conditional Expressions::. 'test' does not
+ accept any options, nor does it accept and ignore an argument of
+ '--' as signifying the end of options.
+
+ When the '[' form is used, the last argument to the command must be
+ a ']'.
+
+ Expressions may be combined using the following operators, listed
+ in decreasing order of precedence. The evaluation depends on the
+ number of arguments; see below. Operator precedence is used when
+ there are five or more arguments.
+
+ '! EXPR'
+ True if EXPR is false.
+
+ '( EXPR )'
+ Returns the value of EXPR. This may be used to override the
+ normal precedence of operators.
+
+ 'EXPR1 -a EXPR2'
+ True if both EXPR1 and EXPR2 are true.
+
+ 'EXPR1 -o EXPR2'
+ True if either EXPR1 or EXPR2 is true.
+
+ The 'test' and '[' builtins evaluate conditional expressions using
+ a set of rules based on the number of arguments.
+
+ 0 arguments
+ The expression is false.
+
+ 1 argument
+ The expression is true if, and only if, the argument is not
+ null.
+
+ 2 arguments
+ If the first argument is '!', the expression is true if and
+ only if the second argument is null. If the first argument is
+ one of the unary conditional operators (*note Bash Conditional
+ Expressions::), the expression is true if the unary test is
+ true. If the first argument is not a valid unary operator,
+ the expression is false.
+
+ 3 arguments
+ The following conditions are applied in the order listed.
+
+ 1. If the second argument is one of the binary conditional
+ operators (*note Bash Conditional Expressions::), the
+ result of the expression is the result of the binary test
+ using the first and third arguments as operands. The
+ '-a' and '-o' operators are considered binary operators
+ when there are three arguments.
+ 2. If the first argument is '!', the value is the negation
+ of the two-argument test using the second and third
+ arguments.
+ 3. If the first argument is exactly '(' and the third
+ argument is exactly ')', the result is the one-argument
+ test of the second argument.
+ 4. Otherwise, the expression is false.
+
+ 4 arguments
+ If the first argument is '!', 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.
+
+ 5 or more arguments
+ The expression is parsed and evaluated according to precedence
+ using the rules listed above.
+
+ When used with 'test' or '[', the '<' and '>' operators sort
+ lexicographically using ASCII ordering.
+
+'times'
+ times
+
+ Print out the user and system times used by the shell and its
+ children. The return status is zero.
+
+'trap'
+ trap [-lp] [ARG] [SIGSPEC ...]
+
+ The commands in ARG are to be read and executed when the shell
+ receives signal SIGSPEC. If ARG is absent (and there is a single
+ SIGSPEC) or equal to '-', each specified signal's disposition is
+ reset to the value it had when the shell was started. If ARG is
+ the null string, then the signal specified by each SIGSPEC is
+ ignored by the shell and commands it invokes. If ARG is not
+ present and '-p' has been supplied, the shell displays the trap
+ commands associated with each SIGSPEC. If no arguments are
+ supplied, or only '-p' is given, 'trap' prints the list of commands
+ associated with each signal number in a form that may be reused as
+ shell input. The '-l' option causes the shell to print a list of
+ signal names and their corresponding numbers. Each SIGSPEC is
+ either a signal name or a signal number. Signal names are case
+ insensitive and the 'SIG' prefix is optional.
+
+ If a SIGSPEC is '0' or 'EXIT', ARG is executed when the shell
+ exits. If a SIGSPEC is 'DEBUG', the command ARG is executed before
+ every simple command, 'for' command, 'case' command, 'select'
+ command, every arithmetic 'for' command, and before the first
+ command executes in a shell function. Refer to the description of
+ the 'extdebug' option to the 'shopt' builtin (*note The Shopt
+ Builtin::) for details of its effect on the 'DEBUG' trap. If a
+ SIGSPEC is 'RETURN', the command ARG is executed each time a shell
+ function or a script executed with the '.' or 'source' builtins
+ finishes executing.
+
+ If a SIGSPEC is 'ERR', the command ARG is executed whenever a
+ pipeline (which may consist of a single simple command), a list, or
+ a compound command returns a non-zero exit status, subject to the
+ following conditions. The 'ERR' trap is not executed if the failed
+ command is part of the command list immediately following an
+ 'until' or 'while' keyword, part of the test following the 'if' or
+ 'elif' reserved words, part of a command executed in a '&&' or '||'
+ list except the command following the final '&&' or '||', any
+ command in a pipeline but the last, or if the command's return
+ status is being inverted using '!'. These are the same conditions
+ obeyed by the 'errexit' ('-e') option.
+
+ Signals ignored upon entry to the shell cannot be trapped or reset.
+ Trapped signals that are not being ignored are reset to their
+ original values in a subshell or subshell environment when one is
+ created.
+
+ The return status is zero unless a SIGSPEC does not specify a valid
+ signal.
+
+'umask'
+ umask [-p] [-S] [MODE]
+
+ Set the shell process's file creation mask to MODE. If MODE 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
+ 'chmod' command. If MODE is omitted, the current value of the mask
+ is printed. If the '-S' option is supplied without a MODE
+ argument, the mask is printed in a symbolic format. If the '-p'
+ option is supplied, and MODE is omitted, the output is in a form
+ that may be reused as input. The return status is zero if the mode
+ is successfully changed or if no MODE argument is supplied, and
+ non-zero otherwise.
+
+ Note that when the mode is interpreted as an octal number, each
+ number of the umask is subtracted from '7'. Thus, a umask of '022'
+ results in permissions of '755'.
+
+'unset'
+ unset [-fnv] [NAME]
+
+ Remove each variable or function NAME. If the '-v' option is
+ given, each NAME refers to a shell variable and that variable is
+ removed. If the '-f' option is given, the NAMEs refer to shell
+ functions, and the function definition is removed. If the '-n'
+ option is supplied, and NAME is a variable with the NAMEREF
+ attribute, NAME will be unset rather than the variable it
+ references. '-n' has no effect if the '-f' option is supplied. If
+ no options are supplied, each NAME refers to a variable; if there
+ is no variable by that name, any function with that name is unset.
+ Readonly variables and functions may not be unset. The return
+ status is zero unless a NAME is readonly.
+
+
+File: bashref.info, Node: Bash Builtins, Next: Modifying Shell Behavior, Prev: Bourne Shell Builtins, Up: Shell Builtin Commands
+
+4.2 Bash Builtin Commands
+=========================
+
+This section describes builtin commands which are unique to or have been
+extended in Bash. Some of these commands are specified in the POSIX
+standard.
+
+'alias'
+ alias [-p] [NAME[=VALUE] ...]
+
+ Without arguments or with the '-p' option, 'alias' prints the list
+ of aliases on the standard output in a form that allows them to be
+ reused as input. If arguments are supplied, an alias is defined
+ for each NAME whose VALUE is given. If no VALUE is given, the name
+ and value of the alias is printed. Aliases are described in *note
+ Aliases::.
+
+'bind'
+ bind [-m KEYMAP] [-lpsvPSVX]
+ bind [-m KEYMAP] [-q FUNCTION] [-u FUNCTION] [-r KEYSEQ]
+ bind [-m KEYMAP] -f FILENAME
+ bind [-m KEYMAP] -x KEYSEQ:SHELL-COMMAND
+ bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME
+ bind [-m KEYMAP] KEYSEQ:READLINE-COMMAND
+
+ Display current Readline (*note Command Line Editing::) key and
+ function bindings, bind a key sequence to a Readline function or
+ macro, or set a Readline variable. Each non-option argument is a
+ command as it would appear in a Readline initialization file (*note
+ Readline Init File::), but each binding or command must be passed
+ as a separate argument; e.g., '"\C-x\C-r":re-read-init-file'.
+
+ Options, if supplied, have the following meanings:
+
+ '-m KEYMAP'
+ Use KEYMAP as the keymap to be affected by the subsequent
+ bindings. Acceptable KEYMAP names are 'emacs',
+ 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move',
+ 'vi-command', and 'vi-insert'. 'vi' is equivalent to
+ 'vi-command' ('vi-move' is also a synonym); 'emacs' is
+ equivalent to 'emacs-standard'.
+
+ '-l'
+ List the names of all Readline functions.
+
+ '-p'
+ Display Readline function names and bindings in such a way
+ that they can be used as input or in a Readline initialization
+ file.
+
+ '-P'
+ List current Readline function names and bindings.
+
+ '-v'
+ Display Readline variable names and values in such a way that
+ they can be used as input or in a Readline initialization
+ file.
+
+ '-V'
+ List current Readline variable names and values.
+
+ '-s'
+ 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.
+
+ '-S'
+ Display Readline key sequences bound to macros and the strings
+ they output.
+
+ '-f FILENAME'
+ Read key bindings from FILENAME.
+
+ '-q FUNCTION'
+ Query about which keys invoke the named FUNCTION.
+
+ '-u FUNCTION'
+ Unbind all keys bound to the named FUNCTION.
+
+ '-r KEYSEQ'
+ Remove any current binding for KEYSEQ.
+
+ '-x KEYSEQ:SHELL-COMMAND'
+ Cause SHELL-COMMAND to be executed whenever KEYSEQ is entered.
+ When SHELL-COMMAND is executed, the shell sets the
+ 'READLINE_LINE' variable to the contents of the Readline line
+ buffer and the 'READLINE_POINT' variable to the current
+ location of the insertion point. If the executed command
+ changes the value of 'READLINE_LINE' or 'READLINE_POINT',
+ those new values will be reflected in the editing state.
+
+ '-X'
+ List all key sequences bound to shell commands and the
+ associated commands in a format that can be reused as input.
+
+ The return status is zero unless an invalid option is supplied or
+ an error occurs.
+
+'builtin'
+ builtin [SHELL-BUILTIN [ARGS]]
+
+ Run a shell builtin, passing it ARGS, 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 SHELL-BUILTIN is
+ not a shell builtin command.
+
+'caller'
+ caller [EXPR]
+
+ Returns the context of any active subroutine call (a shell function
+ or a script executed with the '.' or 'source' builtins).
+
+ Without EXPR, 'caller' displays the line number and source filename
+ of the current subroutine call. If a non-negative integer is
+ supplied as EXPR, 'caller' displays the line number, subroutine
+ name, and source file corresponding to that position in the current
+ execution call stack. This extra information may be used, for
+ example, to print a stack trace. The current frame is frame 0.
+
+ The return value is 0 unless the shell is not executing a
+ subroutine call or EXPR does not correspond to a valid position in
+ the call stack.
+
+'command'
+ command [-pVv] COMMAND [ARGUMENTS ...]
+
+ Runs COMMAND with ARGUMENTS ignoring any shell function named
+ COMMAND. Only shell builtin commands or commands found by
+ searching the 'PATH' are executed. If there is a shell function
+ named 'ls', running 'command ls' within the function will execute
+ the external command 'ls' instead of calling the function
+ recursively. The '-p' option means to use a default value for
+ 'PATH' that is guaranteed to find all of the standard utilities.
+ The return status in this case is 127 if COMMAND cannot be found or
+ an error occurred, and the exit status of COMMAND otherwise.
+
+ If either the '-V' or '-v' option is supplied, a description of
+ COMMAND is printed. The '-v' option causes a single word
+ indicating the command or file name used to invoke COMMAND to be
+ displayed; the '-V' option produces a more verbose description. In
+ this case, the return status is zero if COMMAND is found, and
+ non-zero if not.
+
+'declare'
+ declare [-aAfFgilnrtux] [-p] [NAME[=VALUE] ...]
+
+ Declare variables and give them attributes. If no NAMEs are given,
+ then display the values of variables instead.
+
+ The '-p' option will display the attributes and values of each
+ NAME. When '-p' is used with NAME arguments, additional options,
+ other than '-f' and '-F', are ignored.
+
+ When '-p' is supplied without NAME arguments, 'declare' will
+ display the attributes and values of all variables having the
+ attributes specified by the additional options. If no other
+ options are supplied with '-p', 'declare' will display the
+ attributes and values of all shell variables. The '-f' option will
+ restrict the display to shell functions.
+
+ The '-F' option inhibits the display of function definitions; only
+ the function name and attributes are printed. If the 'extdebug'
+ shell option is enabled using 'shopt' (*note The Shopt Builtin::),
+ the source file name and line number where each NAME is defined are
+ displayed as well. '-F' implies '-f'.
+
+ The '-g' option forces variables to be created or modified at the
+ global scope, even when 'declare' is executed in a shell function.
+ It is ignored in all other cases.
+
+ The following options can be used to restrict output to variables
+ with the specified attributes or to give variables attributes:
+
+ '-a'
+ Each NAME is an indexed array variable (*note Arrays::).
+
+ '-A'
+ Each NAME is an associative array variable (*note Arrays::).
+
+ '-f'
+ Use function names only.
+
+ '-i'
+ The variable is to be treated as an integer; arithmetic
+ evaluation (*note Shell Arithmetic::) is performed when the
+ variable is assigned a value.
+
+ '-l'
+ When the variable is assigned a value, all upper-case
+ characters are converted to lower-case. The upper-case
+ attribute is disabled.
+
+ '-n'
+ Give each NAME the NAMEREF attribute, making it a name
+ reference to another variable. That other variable is defined
+ by the value of NAME. All references, assignments, and
+ attribute modifications to NAME, except for those using or
+ changing the '-n' attribute itself, are performed on the
+ variable referenced by NAME's value. The nameref attribute
+ cannot be applied to array variables.
+
+ '-r'
+ Make NAMEs readonly. These names cannot then be assigned
+ values by subsequent assignment statements or unset.
+
+ '-t'
+ Give each NAME the 'trace' attribute. Traced functions
+ inherit the 'DEBUG' and 'RETURN' traps from the calling shell.
+ The trace attribute has no special meaning for variables.
+
+ '-u'
+ When the variable is assigned a value, all lower-case
+ characters are converted to upper-case. The lower-case
+ attribute is disabled.
+
+ '-x'
+ Mark each NAME for export to subsequent commands via the
+ environment.
+
+ Using '+' instead of '-' turns off the attribute instead, with the
+ exceptions that '+a' and '+A' may not be used to destroy array
+ variables and '+r' will not remove the readonly attribute. When
+ used in a function, 'declare' makes each NAME local, as with the
+ 'local' command, unless the '-g' option is used. If a variable
+ name is followed by =VALUE, the value of the variable is set to
+ VALUE.
+
+ When using '-a' or '-A' and the compound assignment syntax to
+ create array variables, additional attributes do not take effect
+ until subsequent assignments.
+
+ The return status is zero unless an invalid option is encountered,
+ an attempt is made to define a function using '-f foo=bar', an
+ attempt is made to assign a value to a readonly variable, an
+ attempt is made to assign a value to an array variable without
+ using the compound assignment syntax (*note Arrays::), one of the
+ NAMES is not a valid shell variable name, an attempt is made to
+ turn off readonly status for a readonly variable, an attempt is
+ made to turn off array status for an array variable, or an attempt
+ is made to display a non-existent function with '-f'.
+
+'echo'
+ echo [-neE] [ARG ...]
+
+ Output the ARGs, separated by spaces, terminated with a newline.
+ The return status is 0 unless a write error occurs. If '-n' is
+ specified, the trailing newline is suppressed. If the '-e' option
+ is given, interpretation of the following backslash-escaped
+ characters is enabled. The '-E' option disables the interpretation
+ of these escape characters, even on systems where they are
+ interpreted by default. The 'xpg_echo' shell option may be used to
+ dynamically determine whether or not 'echo' expands these escape
+ characters by default. 'echo' does not interpret '--' to mean the
+ end of options.
+
+ 'echo' interprets the following escape sequences:
+ '\a'
+ alert (bell)
+ '\b'
+ backspace
+ '\c'
+ suppress further output
+ '\e'
+ '\E'
+ escape
+ '\f'
+ form feed
+ '\n'
+ new line
+ '\r'
+ carriage return
+ '\t'
+ horizontal tab
+ '\v'
+ vertical tab
+ '\\'
+ backslash
+ '\0NNN'
+ the eight-bit character whose value is the octal value NNN
+ (zero to three octal digits)
+ '\xHH'
+ the eight-bit character whose value is the hexadecimal value
+ HH (one or two hex digits)
+ '\uHHHH'
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value HHHH (one to four hex digits)
+ '\UHHHHHHHH'
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value HHHHHHHH (one to eight hex digits)
+
+'enable'
+ enable [-a] [-dnps] [-f FILENAME] [NAME ...]
+
+ 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 '-n'
+ is used, the NAMEs become disabled. Otherwise NAMEs are enabled.
+ For example, to use the 'test' binary found via '$PATH' instead of
+ the shell builtin version, type 'enable -n test'.
+
+ If the '-p' option is supplied, or no NAME arguments appear, a list
+ of shell builtins is printed. With no other arguments, the list
+ consists of all enabled shell builtins. The '-a' option means to
+ list each builtin with an indication of whether or not it is
+ enabled.
+
+ The '-f' option means to load the new builtin command NAME from
+ shared object FILENAME, on systems that support dynamic loading.
+ The '-d' option will delete a builtin loaded with '-f'.
+
+ If there are no options, a list of the shell builtins is displayed.
+ The '-s' option restricts 'enable' to the POSIX special builtins.
+ If '-s' is used with '-f', the new builtin becomes a special
+ builtin (*note Special Builtins::).
+
+ The return status is zero unless a NAME is not a shell builtin or
+ there is an error loading a new builtin from a shared object.
+
+'help'
+ help [-dms] [PATTERN]
+
+ Display helpful information about builtin commands. If PATTERN is
+ specified, 'help' gives detailed help on all commands matching
+ PATTERN, otherwise a list of the builtins is printed.
+
+ Options, if supplied, have the following meanings:
+
+ '-d'
+ Display a short description of each PATTERN
+ '-m'
+ Display the description of each PATTERN in a manpage-like
+ format
+ '-s'
+ Display only a short usage synopsis for each PATTERN
+
+ The return status is zero unless no command matches PATTERN.
+
+'let'
+ let EXPRESSION [EXPRESSION ...]
+
+ The 'let' builtin allows arithmetic to be performed on shell
+ variables. Each EXPRESSION is evaluated according to the rules
+ given below in *note Shell Arithmetic::. If the last EXPRESSION
+ evaluates to 0, 'let' returns 1; otherwise 0 is returned.
+
+'local'
+ local [OPTION] NAME[=VALUE] ...
+
+ For each argument, a local variable named NAME is created, and
+ assigned VALUE. The OPTION can be any of the options accepted by
+ 'declare'. 'local' can only be used within a function; it makes
+ the variable NAME have a visible scope restricted to that function
+ and its children. If NAME is '-', the set of shell options is made
+ local to the function in which 'local' is invoked: shell options
+ changed using the 'set' builtin inside the function are restored to
+ their original values when the function returns. The return status
+ is zero unless 'local' is used outside a function, an invalid NAME
+ is supplied, or NAME is a readonly variable.
+
+'logout'
+ logout [N]
+
+ Exit a login shell, returning a status of N to the shell's parent.
+
+'mapfile'
+ mapfile [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT]
+ [-t] [-u FD] [-C CALLBACK] [-c QUANTUM] [ARRAY]
+
+ Read lines from the standard input into the indexed array variable
+ ARRAY, or from file descriptor FD if the '-u' option is supplied.
+ The variable 'MAPFILE' is the default ARRAY. Options, if supplied,
+ have the following meanings:
+
+ '-d'
+ The first character of DELIM is used to terminate each input
+ line, rather than newline. If DELIM is the empty string,
+ 'mapfile' will terminate a line when it reads a NUL character.
+ '-n'
+ Copy at most COUNT lines. If COUNT is 0, all lines are
+ copied.
+ '-O'
+ Begin assigning to ARRAY at index ORIGIN. The default index
+ is 0.
+ '-s'
+ Discard the first COUNT lines read.
+ '-t'
+ Remove a trailing DELIM (default newline) from each line read.
+ '-u'
+ Read lines from file descriptor FD instead of the standard
+ input.
+ '-C'
+ Evaluate CALLBACK each time QUANTUM lines are read. The '-c'
+ option specifies QUANTUM.
+ '-c'
+ Specify the number of lines read between each call to
+ CALLBACK.
+
+ If '-C' is specified without '-c', the default quantum is 5000.
+ When CALLBACK is evaluated, it is supplied the index of the next
+ array element to be assigned and the line to be assigned to that
+ element as additional arguments. CALLBACK is evaluated after the
+ line is read but before the array element is assigned.
+
+ If not supplied with an explicit origin, 'mapfile' will clear ARRAY
+ before assigning to it.
+
+ 'mapfile' returns successfully unless an invalid option or option
+ argument is supplied, ARRAY is invalid or unassignable, or ARRAY is
+ not an indexed array.
+
+'printf'
+ printf [-v VAR] FORMAT [ARGUMENTS]
+
+ Write the formatted ARGUMENTS to the standard output under the
+ control of the FORMAT. The '-v' option causes the output to be
+ assigned to the variable VAR rather than being printed to the
+ standard output.
+
+ The FORMAT 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 ARGUMENT. In addition to
+ the standard 'printf(1)' formats, 'printf' interprets the following
+ extensions:
+
+ '%b'
+ Causes 'printf' to expand backslash escape sequences in the
+ corresponding ARGUMENT in the same way as 'echo -e' (*note
+ Bash Builtins::).
+ '%q'
+ Causes 'printf' to output the corresponding ARGUMENT in a
+ format that can be reused as shell input.
+ '%(DATEFMT)T'
+ Causes 'printf' to output the date-time string resulting from
+ using DATEFMT as a format string for 'strftime'(3). The
+ corresponding ARGUMENT is an integer representing the number
+ of seconds since the epoch. Two special argument values may
+ be used: -1 represents the current time, and -2 represents the
+ time the shell was invoked. If no argument is specified,
+ conversion behaves as if -1 had been given. This is an
+ exception to the usual 'printf' behavior.
+
+ Arguments to non-string format specifiers are treated as C language
+ constants, except that a leading plus or minus sign is allowed, and
+ if the leading character is a single or double quote, the value is
+ the ASCII value of the following character.
+
+ The FORMAT is reused as necessary to consume all of the ARGUMENTS.
+ If the FORMAT requires more ARGUMENTS than are supplied, the extra
+ format specifications behave as if a zero value or null string, as
+ appropriate, had been supplied. The return value is zero on
+ success, non-zero on failure.
+
+'read'
+ read [-ers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS]
+ [-N NCHARS] [-p PROMPT] [-t TIMEOUT] [-u FD] [NAME ...]
+
+ One line is read from the standard input, or from the file
+ descriptor FD supplied as an argument to the '-u' option, split
+ into words as described above in *note Word Splitting::, and the
+ first word is assigned to the first NAME, the second word to the
+ second NAME, and so on. If there are more words than names, the
+ remaining words and their intervening delimiters are assigned to
+ the last NAME. 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 'IFS' variable are used to split the
+ line into words using the same rules the shell uses for expansion
+ (described above in *note Word Splitting::). The backslash
+ character '\' may be used to remove any special meaning for the
+ next character read and for line continuation. If no names are
+ supplied, the line read is assigned to the variable 'REPLY'. The
+ exit status is zero, unless end-of-file is encountered, 'read'
+ times out (in which case the status is greater than 128), a
+ variable assignment error (such as assigning to a readonly
+ variable) occurs, or an invalid file descriptor is supplied as the
+ argument to '-u'.
+
+ Options, if supplied, have the following meanings:
+
+ '-a ANAME'
+ The words are assigned to sequential indices of the array
+ variable ANAME, starting at 0. All elements are removed from
+ ANAME before the assignment. Other NAME arguments are
+ ignored.
+
+ '-d DELIM'
+ The first character of DELIM is used to terminate the input
+ line, rather than newline. If DELIM is the empty string,
+ 'read' will terminate a line when it reads a NUL character.
+
+ '-e'
+ Readline (*note Command Line Editing::) is used to obtain the
+ line. Readline uses the current (or default, if line editing
+ was not previously active) editing settings, but uses
+ Readline's default filename completion.
+
+ '-i TEXT'
+ If Readline is being used to read the line, TEXT is placed
+ into the editing buffer before editing begins.
+
+ '-n NCHARS'
+ 'read' returns after reading NCHARS characters rather than
+ waiting for a complete line of input, but honors a delimiter
+ if fewer than NCHARS characters are read before the delimiter.
+
+ '-N NCHARS'
+ 'read' returns after reading exactly NCHARS characters rather
+ than waiting for a complete line of input, unless EOF is
+ encountered or 'read' times out. Delimiter characters
+ encountered in the input are not treated specially and do not
+ cause 'read' to return until NCHARS characters are read. The
+ result is not split on the characters in 'IFS'; the intent is
+ that the variable is assigned exactly the characters read
+ (with the exception of backslash; see the '-r' option below).
+
+ '-p PROMPT'
+ Display PROMPT, without a trailing newline, before attempting
+ to read any input. The prompt is displayed only if input is
+ coming from a terminal.
+
+ '-r'
+ 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 then be
+ used as a line continuation.
+
+ '-s'
+ Silent mode. If input is coming from a terminal, characters
+ are not echoed.
+
+ '-t TIMEOUT'
+ Cause 'read' to time out and return failure if a complete line
+ of input (or a specified number of characters) is not read
+ within TIMEOUT seconds. TIMEOUT may be a decimal number with
+ a fractional portion following the decimal point. This option
+ is only effective if 'read' is reading input from a terminal,
+ pipe, or other special file; it has no effect when reading
+ from regular files. If 'read' times out, 'read' saves any
+ partial input read into the specified variable NAME. If
+ TIMEOUT is 0, 'read' returns immediately, without trying to
+ read and data. The exit status is 0 if input is available on
+ the specified file descriptor, non-zero otherwise. The exit
+ status is greater than 128 if the timeout is exceeded.
+
+ '-u FD'
+ Read input from file descriptor FD.
+
+'readarray'
+ readarray [-d DELIM] [-n COUNT] [-O ORIGIN] [-s COUNT]
+ [-t] [-u FD] [-C CALLBACK] [-c QUANTUM] [ARRAY]
+
+ Read lines from the standard input into the indexed array variable
+ ARRAY, or from file descriptor FD if the '-u' option is supplied.
+
+ A synonym for 'mapfile'.
+
+'source'
+ source FILENAME
+
+ A synonym for '.' (*note Bourne Shell Builtins::).
+
+'type'
+ type [-afptP] [NAME ...]
+
+ For each NAME, indicate how it would be interpreted if used as a
+ command name.
+
+ If the '-t' option is used, 'type' prints a single word which is
+ one of 'alias', 'function', 'builtin', 'file' or 'keyword', if NAME
+ is an alias, shell function, shell builtin, disk file, or shell
+ reserved word, respectively. If the NAME is not found, then
+ nothing is printed, and 'type' returns a failure status.
+
+ If the '-p' option is used, 'type' either returns the name of the
+ disk file that would be executed, or nothing if '-t' would not
+ return 'file'.
+
+ The '-P' option forces a path search for each NAME, even if '-t'
+ would not return 'file'.
+
+ If a command is hashed, '-p' and '-P' print the hashed value, which
+ is not necessarily the file that appears first in '$PATH'.
+
+ If the '-a' option is used, 'type' returns all of the places that
+ contain an executable named FILE. This includes aliases and
+ functions, if and only if the '-p' option is not also used.
+
+ If the '-f' option is used, 'type' does not attempt to find shell
+ functions, as with the 'command' builtin.
+
+ The return status is zero if all of the NAMES are found, non-zero
+ if any are not found.
+
+'typeset'
+ typeset [-afFgrxilnrtux] [-p] [NAME[=VALUE] ...]
+
+ The 'typeset' command is supplied for compatibility with the Korn
+ shell. It is a synonym for the 'declare' builtin command.
+
+'ulimit'
+ ulimit [-HSabcdefiklmnpqrstuvxPT] [LIMIT]
+
+ 'ulimit' provides control over the resources available to processes
+ started by the shell, on systems that allow such control. If an
+ option is given, it is interpreted as follows:
+
+ '-S'
+ Change and report the soft limit associated with a resource.
+
+ '-H'
+ Change and report the hard limit associated with a resource.
+
+ '-a'
+ All current limits are reported.
+
+ '-b'
+ The maximum socket buffer size.
+
+ '-c'
+ The maximum size of core files created.
+
+ '-d'
+ The maximum size of a process's data segment.
+
+ '-e'
+ The maximum scheduling priority ("nice").
+
+ '-f'
+ The maximum size of files written by the shell and its
+ children.
+
+ '-i'
+ The maximum number of pending signals.
+
+ '-k'
+ The maximum number of kqueues that may be allocated.
+
+ '-l'
+ The maximum size that may be locked into memory.
+
+ '-m'
+ The maximum resident set size (many systems do not honor this
+ limit).
+
+ '-n'
+ The maximum number of open file descriptors (most systems do
+ not allow this value to be set).
+
+ '-p'
+ The pipe buffer size.
+
+ '-q'
+ The maximum number of bytes in POSIX message queues.
+
+ '-r'
+ The maximum real-time scheduling priority.
+
+ '-s'
+ The maximum stack size.
+
+ '-t'
+ The maximum amount of cpu time in seconds.
+
+ '-u'
+ The maximum number of processes available to a single user.
+
+ '-v'
+ The maximum amount of virtual memory available to the shell,
+ and, on some systems, to its children.
+
+ '-x'
+ The maximum number of file locks.
+
+ '-P'
+ The maximum number of pseudoterminals.
+
+ '-T'
+ The maximum number of threads.
+
+ If LIMIT is given, and the '-a' option is not used, LIMIT is the
+ new value of the specified resource. The special LIMIT values
+ 'hard', 'soft', and 'unlimited' stand for the current hard limit,
+ the current soft limit, and no limit, respectively. A hard limit
+ cannot be increased by a non-root user once it is set; a soft limit
+ may be increased up to the value of the hard limit. Otherwise, the
+ current value of the soft limit for the specified resource is
+ printed, unless the '-H' option is supplied. When setting new
+ limits, if neither '-H' nor '-S' is supplied, both the hard and
+ soft limits are set. If no option is given, then '-f' is assumed.
+ Values are in 1024-byte increments, except for '-t', which is in
+ seconds; '-p', which is in units of 512-byte blocks; '-P', '-T',
+ '-b', '-k', '-n' and '-u', which are unscaled values; and, when in
+ POSIX Mode (*note Bash POSIX Mode::), '-c' and '-f', which are in
+ 512-byte increments.
+
+ The return status is zero unless an invalid option or argument is
+ supplied, or an error occurs while setting a new limit.
+
+'unalias'
+ unalias [-a] [NAME ... ]
+
+ Remove each NAME from the list of aliases. If '-a' is supplied,
+ all aliases are removed. Aliases are described in *note Aliases::.
+
+
+File: bashref.info, Node: Modifying Shell Behavior, Next: Special Builtins, Prev: Bash Builtins, Up: Shell Builtin Commands
+
+4.3 Modifying Shell Behavior
+============================
+
+* Menu:
+
+* The Set Builtin:: Change the values of shell attributes and
+ positional parameters.
+* The Shopt Builtin:: Modify shell optional behavior.
+
+
+File: bashref.info, Node: The Set Builtin, Next: The Shopt Builtin, Up: Modifying Shell Behavior
+
+4.3.1 The Set Builtin
+---------------------
+
+This builtin is so complicated that it deserves its own section. 'set'
+allows you to change the values of shell options and set the positional
+parameters, or to display the names and values of shell variables.
+
+'set'
+ set [--abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [ARGUMENT ...]
+ set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [ARGUMENT ...]
+
+ If no options or arguments are supplied, 'set' displays the names
+ and values of all shell variables and functions, sorted according
+ to the current locale, in a format that may be reused as input for
+ setting or resetting the currently-set variables. Read-only
+ variables cannot be reset. In POSIX mode, only shell variables are
+ listed.
+
+ When options are supplied, they set or unset shell attributes.
+ Options, if specified, have the following meanings:
+
+ '-a'
+ Each variable or function that is created or modified is given
+ the export attribute and marked for export to the environment
+ of subsequent commands.
+
+ '-b'
+ Cause the status of terminated background jobs to be reported
+ immediately, rather than before printing the next primary
+ prompt.
+
+ '-e'
+ Exit immediately if a pipeline (*note Pipelines::), which may
+ consist of a single simple command (*note Simple Commands::),
+ a list (*note Lists::), or a compound command (*note Compound
+ Commands::) returns a non-zero status. The shell does not
+ exit if the command that fails is part of the command list
+ immediately following a 'while' or 'until' keyword, part of
+ the test in an 'if' statement, part of any command executed in
+ a '&&' or '||' list except the command following the final
+ '&&' or '||', any command in a pipeline but the last, or if
+ the command's return status is being inverted with '!'. If a
+ compound command other than a subshell returns a non-zero
+ status because a command failed while '-e' was being ignored,
+ the shell does not exit. A trap on 'ERR', if set, is executed
+ before the shell exits.
+
+ This option applies to the shell environment and each subshell
+ environment separately (*note Command Execution
+ Environment::), and may cause subshells to exit before
+ executing all the commands in the subshell.
+
+ If a compound command or shell function executes in a context
+ where '-e' is being ignored, none of the commands executed
+ within the compound command or function body will be affected
+ by the '-e' setting, even if '-e' is set and a command returns
+ a failure status. If a compound command or shell function
+ sets '-e' while executing in a context where '-e' is ignored,
+ that setting will not have any effect until the compound
+ command or the command containing the function call completes.
+
+ '-f'
+ Disable filename expansion (globbing).
+
+ '-h'
+ Locate and remember (hash) commands as they are looked up for
+ execution. This option is enabled by default.
+
+ '-k'
+ All arguments in the form of assignment statements are placed
+ in the environment for a command, not just those that precede
+ the command name.
+
+ '-m'
+ Job control is enabled (*note Job Control::). All processes
+ run in a separate process group. When a background job
+ completes, the shell prints a line containing its exit status.
+
+ '-n'
+ 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.
+
+ '-o OPTION-NAME'
+
+ Set the option corresponding to OPTION-NAME:
+
+ 'allexport'
+ Same as '-a'.
+
+ 'braceexpand'
+ Same as '-B'.
+
+ 'emacs'
+ Use an 'emacs'-style line editing interface (*note
+ Command Line Editing::). This also affects the editing
+ interface used for 'read -e'.
+
+ 'errexit'
+ Same as '-e'.
+
+ 'errtrace'
+ Same as '-E'.
+
+ 'functrace'
+ Same as '-T'.
+
+ 'hashall'
+ Same as '-h'.
+
+ 'histexpand'
+ Same as '-H'.
+
+ 'history'
+ Enable command history, as described in *note Bash
+ History Facilities::. This option is on by default in
+ interactive shells.
+
+ 'ignoreeof'
+ An interactive shell will not exit upon reading EOF.
+
+ 'keyword'
+ Same as '-k'.
+
+ 'monitor'
+ Same as '-m'.
+
+ 'noclobber'
+ Same as '-C'.
+
+ 'noexec'
+ Same as '-n'.
+
+ 'noglob'
+ Same as '-f'.
+
+ 'nolog'
+ Currently ignored.
+
+ 'notify'
+ Same as '-b'.
+
+ 'nounset'
+ Same as '-u'.
+
+ 'onecmd'
+ Same as '-t'.
+
+ 'physical'
+ Same as '-P'.
+
+ 'pipefail'
+ 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.
+
+ 'posix'
+ Change the behavior of Bash where the default operation
+ differs from the POSIX standard to match the standard
+ (*note Bash POSIX Mode::). This is intended to make Bash
+ behave as a strict superset of that standard.
+
+ 'privileged'
+ Same as '-p'.
+
+ 'verbose'
+ Same as '-v'.
+
+ 'vi'
+ Use a 'vi'-style line editing interface. This also
+ affects the editing interface used for 'read -e'.
+
+ 'xtrace'
+ Same as '-x'.
+
+ '-p'
+ Turn on privileged mode. In this mode, the '$BASH_ENV' and
+ '$ENV' files are not processed, shell functions are not
+ inherited from the environment, and the 'SHELLOPTS',
+ 'BASHOPTS', 'CDPATH' and 'GLOBIGNORE' variables, if they
+ appear in the environment, are ignored. If the shell is
+ started with the effective user (group) id not equal to the
+ real user (group) id, and the '-p' option is not supplied,
+ these actions are taken and the effective user id is set to
+ the real user id. If the '-p' option is supplied at startup,
+ the effective user id is not reset. Turning this option off
+ causes the effective user and group ids to be set to the real
+ user and group ids.
+
+ '-t'
+ Exit after reading and executing one command.
+
+ '-u'
+ Treat unset variables and parameters other than the special
+ parameters '@' or '*' as an error when performing parameter
+ expansion. An error message will be written to the standard
+ error, and a non-interactive shell will exit.
+
+ '-v'
+ Print shell input lines as they are read.
+
+ '-x'
+ Print a trace of simple commands, 'for' commands, 'case'
+ commands, 'select' commands, and arithmetic 'for' commands and
+ their arguments or associated word lists after they are
+ expanded and before they are executed. The value of the 'PS4'
+ variable is expanded and the resultant value is printed before
+ the command and its expanded arguments.
+
+ '-B'
+ The shell will perform brace expansion (*note Brace
+ Expansion::). This option is on by default.
+
+ '-C'
+ Prevent output redirection using '>', '>&', and '<>' from
+ overwriting existing files.
+
+ '-E'
+ If set, any trap on 'ERR' is inherited by shell functions,
+ command substitutions, and commands executed in a subshell
+ environment. The 'ERR' trap is normally not inherited in such
+ cases.
+
+ '-H'
+ Enable '!' style history substitution (*note History
+ Interaction::). This option is on by default for interactive
+ shells.
+
+ '-P'
+ If set, do not resolve symbolic links when performing commands
+ such as 'cd' which change the current directory. The physical
+ directory is used instead. By default, Bash follows the
+ logical chain of directories when performing commands which
+ change the current directory.
+
+ For example, if '/usr/sys' is a symbolic link to
+ '/usr/local/sys' then:
+ $ cd /usr/sys; echo $PWD
+ /usr/sys
+ $ cd ..; pwd
+ /usr
+
+ If 'set -P' is on, then:
+ $ cd /usr/sys; echo $PWD
+ /usr/local/sys
+ $ cd ..; pwd
+ /usr/local
+
+ '-T'
+ If set, any trap on 'DEBUG' and 'RETURN' are inherited by
+ shell functions, command substitutions, and commands executed
+ in a subshell environment. The 'DEBUG' and 'RETURN' traps are
+ normally not inherited in such cases.
+
+ '--'
+ If no arguments follow this option, then the positional
+ parameters are unset. Otherwise, the positional parameters
+ are set to the ARGUMENTS, even if some of them begin with a
+ '-'.
+
+ '-'
+ Signal the end of options, cause all remaining ARGUMENTS to be
+ assigned to the positional parameters. The '-x' and '-v'
+ options are turned off. If there are no arguments, the
+ positional parameters remain unchanged.
+
+ Using '+' rather than '-' causes these options to be turned off.
+ The options can also be used upon invocation of the shell. The
+ current set of options may be found in '$-'.
+
+ The remaining N ARGUMENTS are positional parameters and are
+ assigned, in order, to '$1', '$2', ... '$N'. The special parameter
+ '#' is set to N.
+
+ The return status is always zero unless an invalid option is
+ supplied.
+
+
+File: bashref.info, Node: The Shopt Builtin, Prev: The Set Builtin, Up: Modifying Shell Behavior
+
+4.3.2 The Shopt Builtin
+-----------------------
+
+This builtin allows you to change additional shell optional behavior.
+
+'shopt'
+ shopt [-pqsu] [-o] [OPTNAME ...]
+
+ Toggle the values of settings controlling optional shell behavior.
+ The settings can be either those listed below, or, if the '-o'
+ option is used, those available with the '-o' option to the 'set'
+ builtin command (*note The Set Builtin::). With no options, or
+ with the '-p' option, a list of all settable options is displayed,
+ with an indication of whether or not each is set; if OPTNAMES are
+ supplied, the output is restricted to those options. The '-p'
+ option causes output to be displayed in a form that may be reused
+ as input. Other options have the following meanings:
+
+ '-s'
+ Enable (set) each OPTNAME.
+
+ '-u'
+ Disable (unset) each OPTNAME.
+
+ '-q'
+ Suppresses normal output; the return status indicates whether
+ the OPTNAME is set or unset. If multiple OPTNAME arguments
+ are given with '-q', the return status is zero if all OPTNAMES
+ are enabled; non-zero otherwise.
+
+ '-o'
+ Restricts the values of OPTNAME to be those defined for the
+ '-o' option to the 'set' builtin (*note The Set Builtin::).
+
+ If either '-s' or '-u' is used with no OPTNAME arguments, 'shopt'
+ shows only those options which are set or unset, respectively.
+
+ Unless otherwise noted, the 'shopt' options are disabled (off) by
+ default.
+
+ The return status when listing options is zero if all OPTNAMES are
+ enabled, non-zero otherwise. When setting or unsetting options,
+ the return status is zero unless an OPTNAME is not a valid shell
+ option.
+
+ The list of 'shopt' options is:
+
+ 'assoc_expand_once'
+ If set, the shell suppresses multiple evaluation of
+ associative array subscripts during arithmetic expression
+ evaluation, while executing builtins that can perform variable
+ assignments, and while executing builtins that perform array
+ dereferencing.
+
+ 'autocd'
+ If set, a command name that is the name of a directory is
+ executed as if it were the argument to the 'cd' command. This
+ option is only used by interactive shells.
+
+ 'cdable_vars'
+ If this is set, an argument to the 'cd' builtin command that
+ is not a directory is assumed to be the name of a variable
+ whose value is the directory to change to.
+
+ 'cdspell'
+ If set, minor errors in the spelling of a directory component
+ in a 'cd' command will be corrected. The errors checked for
+ are transposed characters, a missing character, and a
+ character too many. If a correction is found, the corrected
+ path is printed, and the command proceeds. This option is
+ only used by interactive shells.
+
+ 'checkhash'
+ 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.
+
+ 'checkjobs'
+ 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 (*note Job
+ Control::). The shell always postpones exiting if any jobs
+ are stopped.
+
+ 'checkwinsize'
+ If set, Bash checks the window size after each external
+ (non-builtin) command and, if necessary, updates the values of
+ 'LINES' and 'COLUMNS'. This option is enabled by default.
+
+ 'cmdhist'
+ 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. This option is enabled by
+ default, but only has an effect if command history is enabled
+ (*note Bash History Facilities::).
+
+ 'compat31'
+ If set, Bash changes its behavior to that of version 3.1 with
+ respect to quoted arguments to the conditional command's '=~'
+ operator and with respect to locale-specific string comparison
+ when using the '[[' conditional command's '<' and '>'
+ operators. Bash versions prior to bash-4.1 use ASCII
+ collation and strcmp(3); bash-4.1 and later use the current
+ locale's collation sequence and strcoll(3).
+
+ 'compat32'
+ If set, Bash changes its behavior to that of version 3.2 with
+ respect to locale-specific string comparison when using the
+ '[[' conditional command's '<' and '>' operators (see previous
+ item) and the effect of interrupting a command list. Bash
+ versions 3.2 and earlier continue with the next command in the
+ list after one terminates due to an interrupt.
+
+ 'compat40'
+ If set, Bash changes its behavior to that of version 4.0 with
+ respect to locale-specific string comparison when using the
+ '[[' conditional command's '<' and '>' operators (see
+ description of 'compat31') and the effect of interrupting a
+ command list. Bash versions 4.0 and later interrupt the list
+ as if the shell received the interrupt; previous versions
+ continue with the next command in the list.
+
+ 'compat41'
+ If set, Bash, when in POSIX mode, treats a single quote in a
+ double-quoted parameter expansion as a special character. The
+ single quotes must match (an even number) and the characters
+ between the single quotes are considered quoted. This is the
+ behavior of POSIX mode through version 4.1. The default Bash
+ behavior remains as in previous versions.
+
+ 'compat42'
+ If set, Bash does not process the replacement string in the
+ pattern substitution word expansion using quote removal.
+
+ 'compat43'
+ If set, Bash does not print a warning message if an attempt is
+ made to use a quoted compound array assignment as an argument
+ to 'declare', makes word expansion errors non-fatal errors
+ that cause the current command to fail (the default behavior
+ is to make them fatal errors that cause the shell to exit),
+ and does not reset the loop state when a shell function is
+ executed (this allows 'break' or 'continue' in a shell
+ function to affect loops in the caller's context).
+
+ 'compat44'
+ If set, Bash saves the positional parameters to BASH_ARGV and
+ BASH_ARGC before they are used, regardless of whether or not
+ extended debugging mode is enabled.
+
+ 'complete_fullquote'
+ If set, Bash quotes all shell metacharacters in filenames and
+ directory names when performing completion. If not set, Bash
+ removes metacharacters such as the dollar sign from the set of
+ characters that will be quoted in completed filenames when
+ these metacharacters appear in shell variable references in
+ words to be completed. This means that dollar signs in
+ variable names that expand to directories will not be quoted;
+ however, any dollar signs appearing in filenames will not be
+ quoted, either. This is active only when bash is using
+ backslashes to quote completed filenames. This variable is
+ set by default, which is the default Bash behavior in versions
+ through 4.2.
+
+ 'direxpand'
+ If set, Bash replaces directory names with the results of word
+ expansion when performing filename completion. This changes
+ the contents of the readline editing buffer. If not set, Bash
+ attempts to preserve what the user typed.
+
+ 'dirspell'
+ If set, Bash attempts spelling correction on directory names
+ during word completion if the directory name initially
+ supplied does not exist.
+
+ 'dotglob'
+ If set, Bash includes filenames beginning with a '.' in the
+ results of filename expansion. The filenames '.' and '..'
+ must always be matched explicitly, even if 'dotglob' is set.
+
+ 'execfail'
+ If this is set, a non-interactive shell will not exit if it
+ cannot execute the file specified as an argument to the 'exec'
+ builtin command. An interactive shell does not exit if 'exec'
+ fails.
+
+ 'expand_aliases'
+ If set, aliases are expanded as described below under Aliases,
+ *note Aliases::. This option is enabled by default for
+ interactive shells.
+
+ 'extdebug'
+ If set at shell invocation, arrange to execute the debugger
+ profile before the shell starts, identical to the '--debugger'
+ option. If set after invocation, behavior intended for use by
+ debuggers is enabled:
+
+ 1. The '-F' option to the 'declare' builtin (*note Bash
+ Builtins::) displays the source file name and line number
+ corresponding to each function name supplied as an
+ argument.
+
+ 2. If the command run by the 'DEBUG' trap returns a non-zero
+ value, the next command is skipped and not executed.
+
+ 3. If the command run by the 'DEBUG' trap returns a value of
+ 2, and the shell is executing in a subroutine (a shell
+ function or a shell script executed by the '.' or
+ 'source' builtins), the shell simulates a call to
+ 'return'.
+
+ 4. 'BASH_ARGC' and 'BASH_ARGV' are updated as described in
+ their descriptions (*note Bash Variables::).
+
+ 5. Function tracing is enabled: command substitution, shell
+ functions, and subshells invoked with '( COMMAND )'
+ inherit the 'DEBUG' and 'RETURN' traps.
+
+ 6. Error tracing is enabled: command substitution, shell
+ functions, and subshells invoked with '( COMMAND )'
+ inherit the 'ERR' trap.
+
+ 'extglob'
+ If set, the extended pattern matching features described above
+ (*note Pattern Matching::) are enabled.
+
+ 'extquote'
+ If set, '$'STRING'' and '$"STRING"' quoting is performed
+ within '${PARAMETER}' expansions enclosed in double quotes.
+ This option is enabled by default.
+
+ 'failglob'
+ If set, patterns which fail to match filenames during filename
+ expansion result in an expansion error.
+
+ 'force_fignore'
+ If set, the suffixes specified by the 'FIGNORE' shell variable
+ cause words to be ignored when performing word completion even
+ if the ignored words are the only possible completions. *Note
+ Bash Variables::, for a description of 'FIGNORE'. This option
+ is enabled by default.
+
+ 'globasciiranges'
+ If set, range expressions used in pattern matching bracket
+ expressions (*note Pattern Matching::) behave as if in the
+ traditional C locale when performing comparisons. That is,
+ the current locale's collating sequence is not taken into
+ account, so 'b' will not collate between 'A' and 'B', and
+ upper-case and lower-case ASCII characters will collate
+ together.
+
+ 'globstar'
+ If set, the pattern '**' used in a filename expansion context
+ will match all files and zero or more directories and
+ subdirectories. If the pattern is followed by a '/', only
+ directories and subdirectories match.
+
+ 'gnu_errfmt'
+ If set, shell error messages are written in the standard GNU
+ error message format.
+
+ 'histappend'
+ If set, the history list is appended to the file named by the
+ value of the 'HISTFILE' variable when the shell exits, rather
+ than overwriting the file.
+
+ 'histreedit'
+ If set, and Readline is being used, a user is given the
+ opportunity to re-edit a failed history substitution.
+
+ 'histverify'
+ 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.
+
+ 'hostcomplete'
+ If set, and Readline is being used, Bash will attempt to
+ perform hostname completion when a word containing a '@' is
+ being completed (*note Commands For Completion::). This
+ option is enabled by default.
+
+ 'huponexit'
+ If set, Bash will send 'SIGHUP' to all jobs when an
+ interactive login shell exits (*note Signals::).
+
+ 'inherit_errexit'
+ If set, command substitution inherits the value of the
+ 'errexit' option, instead of unsetting it in the subshell
+ environment. This option is enabled when POSIX mode is
+ enabled.
+
+ 'interactive_comments'
+ Allow a word beginning with '#' to cause that word and all
+ remaining characters on that line to be ignored in an
+ interactive shell. This option is enabled by default.
+
+ 'lastpipe'
+ If set, and job control is not active, the shell runs the last
+ command of a pipeline not executed in the background in the
+ current shell environment.
+
+ 'lithist'
+ If enabled, and the 'cmdhist' option is enabled, multi-line
+ commands are saved to the history with embedded newlines
+ rather than using semicolon separators where possible.
+
+ 'localvar_inherit'
+ If set, local variables inherit the value and attributes of a
+ variable of the same name that exists at a previous scope
+ before any new value is assigned. The NAMEREF attribute is
+ not inherited.
+
+ 'localvar_unset'
+ If set, calling 'unset' on local variables in previous
+ function scopes marks them so subsequent lookups find them
+ unset until that function returns. This is identical to the
+ behavior of unsetting local variables at the current function
+ scope.
+
+ 'login_shell'
+ The shell sets this option if it is started as a login shell
+ (*note Invoking Bash::). The value may not be changed.
+
+ 'mailwarn'
+ If set, and a file that Bash is checking for mail has been
+ accessed since the last time it was checked, the message '"The
+ mail in MAILFILE has been read"' is displayed.
+
+ 'no_empty_cmd_completion'
+ If set, and Readline is being used, Bash will not attempt to
+ search the 'PATH' for possible completions when completion is
+ attempted on an empty line.
+
+ 'nocaseglob'
+ If set, Bash matches filenames in a case-insensitive fashion
+ when performing filename expansion.
+
+ 'nocasematch'
+ If set, Bash matches patterns in a case-insensitive fashion
+ when performing matching while executing 'case' or '[['
+ conditional commands, when performing pattern substitution
+ word expansions, or when filtering possible completions as
+ part of programmable completion.
+
+ 'nullglob'
+ If set, Bash allows filename patterns which match no files to
+ expand to a null string, rather than themselves.
+
+ 'progcomp'
+ If set, the programmable completion facilities (*note
+ Programmable Completion::) are enabled. This option is
+ enabled by default.
+
+ 'progcomp_alias'
+ If set, and programmable completion is enabled, Bash treats a
+ command name that doesn't have any completions as a possible
+ alias and attempts alias expansion. If it has an alias, Bash
+ attempts programmable completion using the command word
+ resulting from the expanded alias.
+
+ 'promptvars'
+ If set, prompt strings undergo parameter expansion, command
+ substitution, arithmetic expansion, and quote removal after
+ being expanded as described below (*note Controlling the
+ Prompt::). This option is enabled by default.
+
+ 'restricted_shell'
+ The shell sets this option if it is started in restricted mode
+ (*note The Restricted Shell::). 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.
+
+ 'shift_verbose'
+ If this is set, the 'shift' builtin prints an error message
+ when the shift count exceeds the number of positional
+ parameters.
+
+ 'sourcepath'
+ If set, the 'source' builtin uses the value of 'PATH' to find
+ the directory containing the file supplied as an argument.
+ This option is enabled by default.
+
+ 'xpg_echo'
+ If set, the 'echo' builtin expands backslash-escape sequences
+ by default.
+
+ The return status when listing options is zero if all OPTNAMES are
+ enabled, non-zero otherwise. When setting or unsetting options,
+ the return status is zero unless an OPTNAME is not a valid shell
+ option.
+
+
+File: bashref.info, Node: Special Builtins, Prev: Modifying Shell Behavior, Up: Shell Builtin Commands
+
+4.4 Special Builtins
+====================
+
+For historical reasons, the POSIX standard has classified several
+builtin commands as _special_. When Bash is executing in POSIX mode,
+the special builtins differ from other builtin commands in three
+respects:
+
+ 1. Special builtins are found before shell functions during command
+ lookup.
+
+ 2. If a special builtin returns an error status, a non-interactive
+ shell exits.
+
+ 3. Assignment statements preceding the command stay in effect in the
+ shell environment after the command completes.
+
+ 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 *note Bash POSIX Mode::.
+
+ These are the POSIX special builtins:
+ break : . continue eval exec exit export readonly return set
+ shift trap unset
+
+
+File: bashref.info, Node: Shell Variables, Next: Bash Features, Prev: Shell Builtin Commands, Up: Top
+
+5 Shell Variables
+*****************
+
+* Menu:
+
+* Bourne Shell Variables:: Variables which Bash uses in the same way
+ as the Bourne Shell.
+* Bash Variables:: List of variables that exist in Bash.
+
+This chapter describes the shell variables that Bash uses. Bash
+automatically assigns default values to a number of variables.
+
+
+File: bashref.info, Node: Bourne Shell Variables, Next: Bash Variables, Up: Shell Variables
+
+5.1 Bourne Shell Variables
+==========================
+
+Bash uses certain shell variables in the same way as the Bourne shell.
+In some cases, Bash assigns a default value to the variable.
+
+'CDPATH'
+ A colon-separated list of directories used as a search path for the
+ 'cd' builtin command.
+
+'HOME'
+ The current user's home directory; the default for the 'cd' builtin
+ command. The value of this variable is also used by tilde
+ expansion (*note Tilde Expansion::).
+
+'IFS'
+ A list of characters that separate fields; used when the shell
+ splits words as part of expansion.
+
+'MAIL'
+ If this parameter is set to a filename or directory name and the
+ 'MAILPATH' variable is not set, Bash informs the user of the
+ arrival of mail in the specified file or Maildir-format directory.
+
+'MAILPATH'
+ 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
+ filename from the message with a '?'. When used in the text of the
+ message, '$_' expands to the name of the current mail file.
+
+'OPTARG'
+ The value of the last option argument processed by the 'getopts'
+ builtin.
+
+'OPTIND'
+ The index of the last option argument processed by the 'getopts'
+ builtin.
+
+'PATH'
+ A colon-separated list of directories in which the shell looks for
+ commands. A zero-length (null) directory name in the value of
+ 'PATH' indicates the current directory. A null directory name may
+ appear as two adjacent colons, or as an initial or trailing colon.
+
+'PS1'
+ The primary prompt string. The default value is '\s-\v\$ '. *Note
+ Controlling the Prompt::, for the complete list of escape sequences
+ that are expanded before 'PS1' is displayed.
+
+'PS2'
+ The secondary prompt string. The default value is '> '. 'PS2' is
+ expanded in the same way as 'PS1' before being displayed.
+
+
+File: bashref.info, Node: Bash Variables, Prev: Bourne Shell Variables, Up: Shell Variables
+
+5.2 Bash Variables
+==================
+
+These variables are set or used by Bash, but other shells do not
+normally treat them specially.
+
+ A few variables used by Bash are described in different chapters:
+variables for controlling the job control facilities (*note Job Control
+Variables::).
+
+'BASH'
+ The full pathname used to execute the current instance of Bash.
+
+'BASHOPTS'
+ A colon-separated list of enabled shell options. Each word in the
+ list is a valid argument for the '-s' option to the 'shopt' builtin
+ command (*note The Shopt Builtin::). The options appearing in
+ 'BASHOPTS' are those reported as 'on' by 'shopt'. If this variable
+ is in the environment when Bash starts up, each shell option in the
+ list will be enabled before reading any startup files. This
+ variable is readonly.
+
+'BASHPID'
+ Expands to the process ID of the current Bash process. This
+ differs from '$$' under certain circumstances, such as subshells
+ that do not require Bash to be re-initialized. Assignments to
+ 'BASHPID' have no effect. If 'BASHPID' is unset, it loses its
+ special properties, even if it is subsequently reset.
+
+'BASH_ALIASES'
+ An associative array variable whose members correspond to the
+ internal list of aliases as maintained by the 'alias' builtin.
+ (*note Bourne Shell Builtins::). Elements added to this array
+ appear in the alias list; however, unsetting array elements
+ currently does not cause aliases to be removed from the alias list.
+ If 'BASH_ALIASES' is unset, it loses its special properties, even
+ if it is subsequently reset.
+
+'BASH_ARGC'
+ 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 '.' or 'source') is at the top of the stack. When a
+ subroutine is executed, the number of parameters passed is pushed
+ onto 'BASH_ARGC'. The shell sets 'BASH_ARGC' only when in extended
+ debugging mode (see *note The Shopt Builtin:: for a description of
+ the 'extdebug' option to the 'shopt' builtin). Setting 'extdebug'
+ after the shell has started to execute a script, or referencing
+ this variable when 'extdebug' is not set, may result in
+ inconsistent values.
+
+'BASH_ARGV'
+ 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 'BASH_ARGV'. The shell
+ sets 'BASH_ARGV' only when in extended debugging mode (see *note
+ The Shopt Builtin:: for a description of the 'extdebug' option to
+ the 'shopt' builtin). Setting 'extdebug' after the shell has
+ started to execute a script, or referencing this variable when
+ 'extdebug' is not set, may result in inconsistent values.
+
+'BASH_ARGV0'
+ When referenced, this variable expands to the name of the shell or
+ shell script (identical to '$0'; *Note Special Parameters::, for
+ the description of special parameter 0). Assignment to
+ 'BASH_ARGV0' causes the value assigned to also be assigned to '$0'.
+ If 'BASH_ARGV0' is unset, it loses its special properties, even if
+ it is subsequently reset.
+
+'BASH_CMDS'
+ An associative array variable whose members correspond to the
+ internal hash table of commands as maintained by the 'hash' builtin
+ (*note Bourne Shell Builtins::). Elements added to this array
+ appear in the hash table; however, unsetting array elements
+ currently does not cause command names to be removed from the hash
+ table. If 'BASH_CMDS' is unset, it loses its special properties,
+ even if it is subsequently reset.
+
+'BASH_COMMAND'
+ 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.
+
+'BASH_COMPAT'
+ The value is used to set the shell's compatibility level. *Note
+ The Shopt Builtin::, for a description of the various compatibility
+ levels and their effects. The value may be a decimal number (e.g.,
+ 4.2) or an integer (e.g., 42) corresponding to the desired
+ compatibility level. If 'BASH_COMPAT' is unset or set to the empty
+ string, the compatibility level is set to the default for the
+ current version. If 'BASH_COMPAT' is set to a value that is not
+ one of the valid compatibility levels, the shell prints an error
+ message and sets the compatibility level to the default for the
+ current version. The valid compatibility levels correspond to the
+ compatibility options accepted by the 'shopt' builtin described
+ above (for example, COMPAT42 means that 4.2 and 42 are valid
+ values). The current version is also a valid value.
+
+'BASH_ENV'
+ 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. *Note Bash Startup
+ Files::.
+
+'BASH_EXECUTION_STRING'
+ The command argument to the '-c' invocation option.
+
+'BASH_LINENO'
+ An array variable whose members are the line numbers in source
+ files where each corresponding member of FUNCNAME was invoked.
+ '${BASH_LINENO[$i]}' is the line number in the source file
+ ('${BASH_SOURCE[$i+1]}') where '${FUNCNAME[$i]}' was called (or
+ '${BASH_LINENO[$i-1]}' if referenced within another shell
+ function). Use 'LINENO' to obtain the current line number.
+
+'BASH_LOADABLES_PATH'
+ A colon-separated list of directories in which the shell looks for
+ dynamically loadable builtins specified by the 'enable' command.
+
+'BASH_REMATCH'
+ An array variable whose members are assigned by the '=~' binary
+ operator to the '[[' conditional command (*note Conditional
+ Constructs::). The element with index 0 is the portion of the
+ string matching the entire regular expression. The element with
+ index N is the portion of the string matching the Nth parenthesized
+ subexpression. This variable is read-only.
+
+'BASH_SOURCE'
+ An array variable whose members are the source filenames where the
+ corresponding shell function names in the 'FUNCNAME' array variable
+ are defined. The shell function '${FUNCNAME[$i]}' is defined in
+ the file '${BASH_SOURCE[$i]}' and called from
+ '${BASH_SOURCE[$i+1]}'
+
+'BASH_SUBSHELL'
+ Incremented by one within each subshell or subshell environment
+ when the shell begins executing in that environment. The initial
+ value is 0.
+
+'BASH_VERSINFO'
+ A readonly array variable (*note Arrays::) whose members hold
+ version information for this instance of Bash. The values assigned
+ to the array members are as follows:
+
+ 'BASH_VERSINFO[0]'
+ The major version number (the RELEASE).
+
+ 'BASH_VERSINFO[1]'
+ The minor version number (the VERSION).
+
+ 'BASH_VERSINFO[2]'
+ The patch level.
+
+ 'BASH_VERSINFO[3]'
+ The build version.
+
+ 'BASH_VERSINFO[4]'
+ The release status (e.g., BETA1).
+
+ 'BASH_VERSINFO[5]'
+ The value of 'MACHTYPE'.
+
+'BASH_VERSION'
+ The version number of the current instance of Bash.
+
+'BASH_XTRACEFD'
+ If set to an integer corresponding to a valid file descriptor, Bash
+ will write the trace output generated when 'set -x' is enabled to
+ that file descriptor. This allows tracing output to be separated
+ from diagnostic and error messages. The file descriptor is closed
+ when 'BASH_XTRACEFD' is unset or assigned a new value. Unsetting
+ 'BASH_XTRACEFD' or assigning it the empty string causes the trace
+ output to be sent to the standard error. Note that setting
+ 'BASH_XTRACEFD' to 2 (the standard error file descriptor) and then
+ unsetting it will result in the standard error being closed.
+
+'CHILD_MAX'
+ Set the number of exited child status values for the shell to
+ remember. Bash will not allow this value to be decreased below a
+ POSIX-mandated minimum, and there is a maximum value (currently
+ 8192) that this may not exceed. The minimum value is
+ system-dependent.
+
+'COLUMNS'
+ Used by the 'select' command to determine the terminal width when
+ printing selection lists. Automatically set if the 'checkwinsize'
+ option is enabled (*note The Shopt Builtin::), or in an interactive
+ shell upon receipt of a 'SIGWINCH'.
+
+'COMP_CWORD'
+ An index into '${COMP_WORDS}' of the word containing the current
+ cursor position. This variable is available only in shell
+ functions invoked by the programmable completion facilities (*note
+ Programmable Completion::).
+
+'COMP_LINE'
+ The current command line. This variable is available only in shell
+ functions and external commands invoked by the programmable
+ completion facilities (*note Programmable Completion::).
+
+'COMP_POINT'
+ 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
+ '${#COMP_LINE}'. This variable is available only in shell
+ functions and external commands invoked by the programmable
+ completion facilities (*note Programmable Completion::).
+
+'COMP_TYPE'
+ Set to an integer value corresponding to the type of completion
+ attempted that caused a completion function to be called: TAB, for
+ normal completion, '?', for listing completions after successive
+ tabs, '!', for listing alternatives on partial word completion,
+ '@', to list completions if the word is not unmodified, or '%', for
+ menu completion. This variable is available only in shell
+ functions and external commands invoked by the programmable
+ completion facilities (*note Programmable Completion::).
+
+'COMP_KEY'
+ The key (or final key of a key sequence) used to invoke the current
+ completion function.
+
+'COMP_WORDBREAKS'
+ The set of characters that the Readline library treats as word
+ separators when performing word completion. If 'COMP_WORDBREAKS'
+ is unset, it loses its special properties, even if it is
+ subsequently reset.
+
+'COMP_WORDS'
+ An array variable consisting of the individual words in the current
+ command line. The line is split into words as Readline would split
+ it, using 'COMP_WORDBREAKS' as described above. This variable is
+ available only in shell functions invoked by the programmable
+ completion facilities (*note Programmable Completion::).
+
+'COMPREPLY'
+ An array variable from which Bash reads the possible completions
+ generated by a shell function invoked by the programmable
+ completion facility (*note Programmable Completion::). Each array
+ element contains one possible completion.
+
+'COPROC'
+ An array variable created to hold the file descriptors for output
+ from and input to an unnamed coprocess (*note Coprocesses::).
+
+'DIRSTACK'
+ An array variable containing the current contents of the directory
+ stack. Directories appear in the stack in the order they are
+ displayed by the 'dirs' builtin. Assigning to members of this
+ array variable may be used to modify directories already in the
+ stack, but the 'pushd' and 'popd' builtins must be used to add and
+ remove directories. Assignment to this variable will not change
+ the current directory. If 'DIRSTACK' is unset, it loses its
+ special properties, even if it is subsequently reset.
+
+'EMACS'
+ If Bash finds this variable in the environment when the shell
+ starts with value 't', it assumes that the shell is running in an
+ Emacs shell buffer and disables line editing.
+
+'ENV'
+ Similar to 'BASH_ENV'; used when the shell is invoked in POSIX Mode
+ (*note Bash POSIX Mode::).
+
+'EPOCHREALTIME'
+ Each time this parameter is referenced, it expands to the number of
+ seconds since the Unix Epoch as a floating point value with
+ micro-second granularity (see the documentation for the C library
+ function TIME for the definition of Epoch). Assignments to
+ 'EPOCHREALTIME' are ignored. If 'EPOCHREALTIME' is unset, it loses
+ its special properties, even if it is subsequently reset.
+
+'EPOCHSECONDS'
+ Each time this parameter is referenced, it expands to the number of
+ seconds since the Unix Epoch (see the documentation for the C
+ library function TIME for the definition of Epoch). Assignments to
+ 'EPOCHSECONDS' are ignored. If 'EPOCHSECONDS' is unset, it loses
+ its special properties, even if it is subsequently reset.
+
+'EUID'
+ The numeric effective user id of the current user. This variable
+ is readonly.
+
+'EXECIGNORE'
+ A colon-separated list of shell patterns (*note Pattern Matching::)
+ defining the list of filenames to be ignored by command search
+ using 'PATH'. Files whose full pathnames match one of these
+ patterns are not considered executable files for the purposes of
+ completion and command execution via 'PATH' lookup. This does not
+ affect the behavior of the '[', 'test', and '[[' commands. Full
+ pathnames in the command hash table are not subject to
+ 'EXECIGNORE'. Use this variable to ignore shared library files
+ that have the executable bit set, but are not executable files.
+ The pattern matching honors the setting of the 'extglob' shell
+ option.
+
+'FCEDIT'
+ The editor used as a default by the '-e' option to the 'fc' builtin
+ command.
+
+'FIGNORE'
+ A colon-separated list of suffixes to ignore when performing
+ filename completion. A filename whose suffix matches one of the
+ entries in 'FIGNORE' is excluded from the list of matched
+ filenames. A sample value is '.o:~'
+
+'FUNCNAME'
+ 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 (the one with the highest index) is '"main"'.
+ This variable exists only when a shell function is executing.
+ Assignments to 'FUNCNAME' have no effect. If 'FUNCNAME' is unset,
+ it loses its special properties, even if it is subsequently reset.
+
+ This variable can be used with 'BASH_LINENO' and 'BASH_SOURCE'.
+ Each element of 'FUNCNAME' has corresponding elements in
+ 'BASH_LINENO' and 'BASH_SOURCE' to describe the call stack. For
+ instance, '${FUNCNAME[$i]}' was called from the file
+ '${BASH_SOURCE[$i+1]}' at line number '${BASH_LINENO[$i]}'. The
+ 'caller' builtin displays the current call stack using this
+ information.
+
+'FUNCNEST'
+ If set to a numeric value greater than 0, defines a maximum
+ function nesting level. Function invocations that exceed this
+ nesting level will cause the current command to abort.
+
+'GLOBIGNORE'
+ A colon-separated list of patterns defining the set of file names
+ to be ignored by filename expansion. If a file name matched by a
+ filename expansion pattern also matches one of the patterns in
+ 'GLOBIGNORE', it is removed from the list of matches. The pattern
+ matching honors the setting of the 'extglob' shell option.
+
+'GROUPS'
+ An array variable containing the list of groups of which the
+ current user is a member. Assignments to 'GROUPS' have no effect.
+ If 'GROUPS' is unset, it loses its special properties, even if it
+ is subsequently reset.
+
+'histchars'
+ Up to three characters which control history expansion, quick
+ substitution, and tokenization (*note History Interaction::). The
+ first character is the HISTORY EXPANSION character, that is, the
+ character which signifies the start of a history expansion,
+ normally '!'. The second character is the character which
+ signifies 'quick substitution' when seen as the first character on
+ a line, normally '^'. 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 '#'.
+ 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.
+
+'HISTCMD'
+ The history number, or index in the history list, of the current
+ command. If 'HISTCMD' is unset, it loses its special properties,
+ even if it is subsequently reset.
+
+'HISTCONTROL'
+ A colon-separated list of values controlling how commands are saved
+ on the history list. If the list of values includes 'ignorespace',
+ lines which begin with a space character are not saved in the
+ history list. A value of 'ignoredups' causes lines which match the
+ previous history entry to not be saved. A value of 'ignoreboth' is
+ shorthand for 'ignorespace' and 'ignoredups'. A value of
+ 'erasedups' 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 'HISTCONTROL' is unset,
+ or does not include a valid value, all lines read by the shell
+ parser are saved on the history list, subject to the value of
+ 'HISTIGNORE'. The second and subsequent lines of a multi-line
+ compound command are not tested, and are added to the history
+ regardless of the value of 'HISTCONTROL'.
+
+'HISTFILE'
+ The name of the file to which the command history is saved. The
+ default value is '~/.bash_history'.
+
+'HISTFILESIZE'
+ The maximum number of lines contained in the history file. When
+ this variable is assigned a value, the history file is truncated,
+ if necessary, to contain no more than that number of lines by
+ removing the oldest entries. The history file is also truncated to
+ this size after writing it when a shell exits. If the value is 0,
+ the history file is truncated to zero size. Non-numeric values and
+ numeric values less than zero inhibit truncation. The shell sets
+ the default value to the value of 'HISTSIZE' after reading any
+ startup files.
+
+'HISTIGNORE'
+ 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 '*' is appended). Each pattern is tested against
+ the line after the checks specified by 'HISTCONTROL' are applied.
+ In addition to the normal shell pattern matching characters, '&'
+ matches the previous history line. '&' may be escaped using a
+ backslash; the backslash is removed before attempting a match. The
+ second and subsequent lines of a multi-line compound command are
+ not tested, and are added to the history regardless of the value of
+ 'HISTIGNORE'. The pattern matching honors the setting of the
+ 'extglob' shell option.
+
+ 'HISTIGNORE' subsumes the function of 'HISTCONTROL'. A pattern of
+ '&' is identical to 'ignoredups', and a pattern of '[ ]*' is
+ identical to 'ignorespace'. Combining these two patterns,
+ separating them with a colon, provides the functionality of
+ 'ignoreboth'.
+
+'HISTSIZE'
+ The maximum number of commands to remember on the history list. If
+ the value is 0, commands are not saved in the history list.
+ Numeric values less than zero result in every command being saved
+ on the history list (there is no limit). The shell sets the
+ default value to 500 after reading any startup files.
+
+'HISTTIMEFORMAT'
+ If this variable is set and not null, its value is used as a format
+ string for STRFTIME to print the time stamp associated with each
+ history entry displayed by the 'history' builtin. If this variable
+ is set, time stamps are written to the history file so they may be
+ preserved across shell sessions. This uses the history comment
+ character to distinguish timestamps from other history lines.
+
+'HOSTFILE'
+ Contains the name of a file in the same format as '/etc/hosts' 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 'HOSTFILE' is set, but has no value, or
+ does not name a readable file, Bash attempts to read '/etc/hosts'
+ to obtain the list of possible hostname completions. When
+ 'HOSTFILE' is unset, the hostname list is cleared.
+
+'HOSTNAME'
+ The name of the current host.
+
+'HOSTTYPE'
+ A string describing the machine Bash is running on.
+
+'IGNOREEOF'
+ Controls the action of the shell on receipt of an 'EOF' character
+ as the sole input. If set, the value denotes the number of
+ consecutive 'EOF' characters that can be read as the first
+ character on an input line before the shell will exit. If the
+ variable exists but does not have a numeric value, or has no value,
+ then the default is 10. If the variable does not exist, then 'EOF'
+ signifies the end of input to the shell. This is only in effect
+ for interactive shells.
+
+'INPUTRC'
+ The name of the Readline initialization file, overriding the
+ default of '~/.inputrc'.
+
+'INSIDE_EMACS'
+ If Bash finds this variable in the environment when the shell
+ starts, it assumes that the shell is running in an Emacs shell
+ buffer and may disable line editing depending on the value of
+ 'TERM'.
+
+'LANG'
+ Used to determine the locale category for any category not
+ specifically selected with a variable starting with 'LC_'.
+
+'LC_ALL'
+ This variable overrides the value of 'LANG' and any other 'LC_'
+ variable specifying a locale category.
+
+'LC_COLLATE'
+ 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 (*note Filename
+ Expansion::).
+
+'LC_CTYPE'
+ This variable determines the interpretation of characters and the
+ behavior of character classes within filename expansion and pattern
+ matching (*note Filename Expansion::).
+
+'LC_MESSAGES'
+ This variable determines the locale used to translate double-quoted
+ strings preceded by a '$' (*note Locale Translation::).
+
+'LC_NUMERIC'
+ This variable determines the locale category used for number
+ formatting.
+
+'LC_TIME'
+ This variable determines the locale category used for data and time
+ formatting.
+
+'LINENO'
+ The line number in the script or shell function currently
+ executing.
+
+'LINES'
+ Used by the 'select' command to determine the column length for
+ printing selection lists. Automatically set if the 'checkwinsize'
+ option is enabled (*note The Shopt Builtin::), or in an interactive
+ shell upon receipt of a 'SIGWINCH'.
+
+'MACHTYPE'
+ A string that fully describes the system type on which Bash is
+ executing, in the standard GNU CPU-COMPANY-SYSTEM format.
+
+'MAILCHECK'
+ How often (in seconds) that the shell should check for mail in the
+ files specified in the 'MAILPATH' or 'MAIL' variables. The default
+ is 60 seconds. When it is time to check for mail, the shell does
+ so before displaying the primary prompt. If this variable is
+ unset, or set to a value that is not a number greater than or equal
+ to zero, the shell disables mail checking.
+
+'MAPFILE'
+ An array variable created to hold the text read by the 'mapfile'
+ builtin when no variable name is supplied.
+
+'OLDPWD'
+ The previous working directory as set by the 'cd' builtin.
+
+'OPTERR'
+ If set to the value 1, Bash displays error messages generated by
+ the 'getopts' builtin command.
+
+'OSTYPE'
+ A string describing the operating system Bash is running on.
+
+'PIPESTATUS'
+ An array variable (*note Arrays::) containing a list of exit status
+ values from the processes in the most-recently-executed foreground
+ pipeline (which may contain only a single command).
+
+'POSIXLY_CORRECT'
+ If this variable is in the environment when Bash starts, the shell
+ enters POSIX mode (*note Bash POSIX Mode::) before reading the
+ startup files, as if the '--posix' invocation option had been
+ supplied. If it is set while the shell is running, Bash enables
+ POSIX mode, as if the command
+ set -o posix
+ had been executed. When the shell enters POSIX mode, it sets this
+ variable if it was not already set.
+
+'PPID'
+ The process ID of the shell's parent process. This variable is
+ readonly.
+
+'PROMPT_COMMAND'
+ If set, the value is interpreted as a command to execute before the
+ printing of each primary prompt ('$PS1').
+
+'PROMPT_DIRTRIM'
+ If set to a number greater than zero, the value is used as the
+ number of trailing directory components to retain when expanding
+ the '\w' and '\W' prompt string escapes (*note Controlling the
+ Prompt::). Characters removed are replaced with an ellipsis.
+
+'PS0'
+ The value of this parameter is expanded like PS1 and displayed by
+ interactive shells after reading a command and before the command
+ is executed.
+
+'PS3'
+ The value of this variable is used as the prompt for the 'select'
+ command. If this variable is not set, the 'select' command prompts
+ with '#? '
+
+'PS4'
+ The value of this parameter is expanded like PS1 and the expanded
+ value is the prompt printed before the command line is echoed when
+ the '-x' option is set (*note The Set Builtin::). The first
+ character of the expanded value is replicated multiple times, as
+ necessary, to indicate multiple levels of indirection. The default
+ is '+ '.
+
+'PWD'
+ The current working directory as set by the 'cd' builtin.
+
+'RANDOM'
+ 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.
+
+'READLINE_LINE'
+ The contents of the Readline line buffer, for use with 'bind -x'
+ (*note Bash Builtins::).
+
+'READLINE_POINT'
+ The position of the insertion point in the Readline line buffer,
+ for use with 'bind -x' (*note Bash Builtins::).
+
+'REPLY'
+ The default variable for the 'read' builtin.
+
+'SECONDS'
+ 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.
+
+'SHELL'
+ 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.
+
+'SHELLOPTS'
+ A colon-separated list of enabled shell options. Each word in the
+ list is a valid argument for the '-o' option to the 'set' builtin
+ command (*note The Set Builtin::). The options appearing in
+ 'SHELLOPTS' are those reported as 'on' by 'set -o'. If this
+ variable is in the environment when Bash starts up, each shell
+ option in the list will be enabled before reading any startup
+ files. This variable is readonly.
+
+'SHLVL'
+ 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.
+
+'TIMEFORMAT'
+ The value of this parameter is used as a format string specifying
+ how the timing information for pipelines prefixed with the 'time'
+ reserved word should be displayed. The '%' character introduces an
+ escape sequence that is expanded to a time value or other
+ information. The escape sequences and their meanings are as
+ follows; the braces denote optional portions.
+
+ '%%'
+ A literal '%'.
+
+ '%[P][l]R'
+ The elapsed time in seconds.
+
+ '%[P][l]U'
+ The number of CPU seconds spent in user mode.
+
+ '%[P][l]S'
+ The number of CPU seconds spent in system mode.
+
+ '%P'
+ The CPU percentage, computed as (%U + %S) / %R.
+
+ The optional P is a digit specifying the precision, the number of
+ fractional digits after a decimal point. A value of 0 causes no
+ decimal point or fraction to be output. At most three places after
+ the decimal point may be specified; values of P greater than 3 are
+ changed to 3. If P is not specified, the value 3 is used.
+
+ The optional 'l' specifies a longer format, including minutes, of
+ the form MMmSS.FFs. The value of P determines whether or not the
+ fraction is included.
+
+ If this variable is not set, Bash acts as if it had the value
+ $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+ If the value is null, no timing information is displayed. A
+ trailing newline is added when the format string is displayed.
+
+'TMOUT'
+ If set to a value greater than zero, 'TMOUT' is treated as the
+ default timeout for the 'read' builtin (*note Bash Builtins::).
+ The 'select' command (*note Conditional Constructs::) terminates if
+ input does not arrive after 'TMOUT' seconds when input is coming
+ from a terminal.
+
+ In an interactive shell, the value is interpreted as the number of
+ seconds to wait for a line of input after issuing the primary
+ prompt. Bash terminates after waiting for that number of seconds
+ if a complete line of input does not arrive.
+
+'TMPDIR'
+ If set, Bash uses its value as the name of a directory in which
+ Bash creates temporary files for the shell's use.
+
+'UID'
+ The numeric real user id of the current user. This variable is
+ readonly.
+
+
+File: bashref.info, Node: Bash Features, Next: Job Control, Prev: Shell Variables, Up: Top
+
+6 Bash Features
+***************
+
+This chapter describes features unique to Bash.
+
+* Menu:
+
+* Invoking Bash:: Command line options that you can give
+ to Bash.
+* Bash Startup Files:: When and how Bash executes scripts.
+* Interactive Shells:: What an interactive shell is.
+* Bash Conditional Expressions:: Primitives used in composing expressions for
+ the 'test' builtin.
+* Shell Arithmetic:: Arithmetic on shell variables.
+* Aliases:: Substituting one command for another.
+* Arrays:: Array Variables.
+* The Directory Stack:: History of visited directories.
+* Controlling the Prompt:: Customizing the various prompt strings.
+* The Restricted Shell:: A more controlled mode of shell execution.
+* Bash POSIX Mode:: Making Bash behave more closely to what
+ the POSIX standard specifies.
+
+
+File: bashref.info, Node: Invoking Bash, Next: Bash Startup Files, Up: Bash Features
+
+6.1 Invoking Bash
+=================
+
+ bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o OPTION]
+ [-O SHOPT_OPTION] [ARGUMENT ...]
+ bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o OPTION]
+ [-O SHOPT_OPTION] -c STRING [ARGUMENT ...]
+ bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o OPTION]
+ [-O SHOPT_OPTION] [ARGUMENT ...]
+
+ All of the single-character options used with the 'set' builtin
+(*note The Set Builtin::) can be used as options when the shell is
+invoked. In addition, there are several multi-character options that
+you can use. These options must appear on the command line before the
+single-character options to be recognized.
+
+'--debugger'
+ Arrange for the debugger profile to be executed before the shell
+ starts. Turns on extended debugging mode (see *note The Shopt
+ Builtin:: for a description of the 'extdebug' option to the 'shopt'
+ builtin).
+
+'--dump-po-strings'
+ A list of all double-quoted strings preceded by '$' is printed on
+ the standard output in the GNU 'gettext' PO (portable object) file
+ format. Equivalent to '-D' except for the output format.
+
+'--dump-strings'
+ Equivalent to '-D'.
+
+'--help'
+ Display a usage message on standard output and exit successfully.
+
+'--init-file FILENAME'
+'--rcfile FILENAME'
+ Execute commands from FILENAME (instead of '~/.bashrc') in an
+ interactive shell.
+
+'--login'
+ Equivalent to '-l'.
+
+'--noediting'
+ Do not use the GNU Readline library (*note Command Line Editing::)
+ to read command lines when the shell is interactive.
+
+'--noprofile'
+ Don't load the system-wide startup file '/etc/profile' or any of
+ the personal initialization files '~/.bash_profile',
+ '~/.bash_login', or '~/.profile' when Bash is invoked as a login
+ shell.
+
+'--norc'
+ Don't read the '~/.bashrc' initialization file in an interactive
+ shell. This is on by default if the shell is invoked as 'sh'.
+
+'--posix'
+ 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. *Note Bash
+ POSIX Mode::, for a description of the Bash POSIX mode.
+
+'--restricted'
+ Make the shell a restricted shell (*note The Restricted Shell::).
+
+'--verbose'
+ Equivalent to '-v'. Print shell input lines as they're read.
+
+'--version'
+ Show version information for this instance of Bash on the standard
+ output and exit successfully.
+
+ There are several single-character options that may be supplied at
+invocation which are not available with the 'set' builtin.
+
+'-c'
+ Read and execute commands from the first non-option argument
+ COMMAND_STRING, then exit. If there are arguments after the
+ COMMAND_STRING, the first argument is assigned to '$0' and any
+ remaining arguments are assigned to the positional parameters. The
+ assignment to '$0' sets the name of the shell, which is used in
+ warning and error messages.
+
+'-i'
+ Force the shell to run interactively. Interactive shells are
+ described in *note Interactive Shells::.
+
+'-l'
+ 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 'exec -l bash'. When the shell is not
+ interactive, the login shell startup files will be executed. 'exec
+ bash -l' or 'exec bash --login' will replace the current shell with
+ a Bash login shell. *Note Bash Startup Files::, for a description
+ of the special behavior of a login shell.
+
+'-r'
+ Make the shell a restricted shell (*note The Restricted Shell::).
+
+'-s'
+ 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 or when reading input through a pipe.
+
+'-D'
+ A list of all double-quoted strings preceded by '$' is printed on
+ the standard output. These are the strings that are subject to
+ language translation when the current locale is not 'C' or 'POSIX'
+ (*note Locale Translation::). This implies the '-n' option; no
+ commands will be executed.
+
+'[-+]O [SHOPT_OPTION]'
+ SHOPT_OPTION is one of the shell options accepted by the 'shopt'
+ builtin (*note The Shopt Builtin::). If SHOPT_OPTION is present,
+ '-O' sets the value of that option; '+O' unsets it. If
+ SHOPT_OPTION is not supplied, the names and values of the shell
+ options accepted by 'shopt' are printed on the standard output. If
+ the invocation option is '+O', the output is displayed in a format
+ that may be reused as input.
+
+'--'
+ A '--' signals the end of options and disables further option
+ processing. Any arguments after the '--' are treated as filenames
+ and arguments.
+
+ A _login_ shell is one whose first character of argument zero is '-',
+or one invoked with the '--login' option.
+
+ An _interactive_ shell is one started without non-option arguments,
+unless '-s' is specified, without specifying the '-c' option, and whose
+input and output are both connected to terminals (as determined by
+'isatty(3)'), or one started with the '-i' option. *Note Interactive
+Shells::, for more information.
+
+ If arguments remain after option processing, and neither the '-c' nor
+the '-s' option has been supplied, the first argument is assumed to be
+the name of a file containing shell commands (*note Shell Scripts::).
+When Bash is invoked in this fashion, '$0' is set to the name of the
+file, and the positional parameters are set to the remaining arguments.
+Bash reads and executes commands from this file, then exits. Bash's
+exit status is the exit status of the last command executed in the
+script. If no commands are executed, the exit status is 0.
+
+
+File: bashref.info, Node: Bash Startup Files, Next: Interactive Shells, Prev: Invoking Bash, Up: Bash Features
+
+6.2 Bash Startup Files
+======================
+
+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 filenames as described above under Tilde Expansion (*note
+Tilde Expansion::).
+
+ Interactive shells are described in *note Interactive Shells::.
+
+Invoked as an interactive login shell, or with '--login'
+........................................................
+
+When Bash is invoked as an interactive login shell, or as a
+non-interactive shell with the '--login' option, it first reads and
+executes commands from the file '/etc/profile', if that file exists.
+After reading that file, it looks for '~/.bash_profile',
+'~/.bash_login', and '~/.profile', in that order, and reads and executes
+commands from the first one that exists and is readable. The
+'--noprofile' option may be used when the shell is started to inhibit
+this behavior.
+
+ When an interactive login shell exits, or a non-interactive login
+shell executes the 'exit' builtin command, Bash reads and executes
+commands from the file '~/.bash_logout', if it exists.
+
+Invoked as an interactive non-login shell
+.........................................
+
+When an interactive shell that is not a login shell is started, Bash
+reads and executes commands from '~/.bashrc', if that file exists. This
+may be inhibited by using the '--norc' option. The '--rcfile FILE'
+option will force Bash to read and execute commands from FILE instead of
+'~/.bashrc'.
+
+ So, typically, your '~/.bash_profile' contains the line
+ if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
+after (or before) any login-specific initializations.
+
+Invoked non-interactively
+.........................
+
+When Bash is started non-interactively, to run a shell script, for
+example, it looks for the variable 'BASH_ENV' in the environment,
+expands its value if it appears there, and uses the expanded value as
+the name of a file to read and execute. Bash behaves as if the
+following command were executed:
+ if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
+but the value of the 'PATH' variable is not used to search for the
+filename.
+
+ As noted above, if a non-interactive shell is invoked with the
+'--login' option, Bash attempts to read and execute commands from the
+login shell startup files.
+
+Invoked with name 'sh'
+......................
+
+If Bash is invoked with the name 'sh', it tries to mimic the startup
+behavior of historical versions of 'sh' as closely as possible, while
+conforming to the POSIX standard as well.
+
+ When invoked as an interactive login shell, or as a non-interactive
+shell with the '--login' option, it first attempts to read and execute
+commands from '/etc/profile' and '~/.profile', in that order. The
+'--noprofile' option may be used to inhibit this behavior. When invoked
+as an interactive shell with the name 'sh', Bash looks for the variable
+'ENV', expands its value if it is defined, and uses the expanded value
+as the name of a file to read and execute. Since a shell invoked as
+'sh' does not attempt to read and execute commands from any other
+startup files, the '--rcfile' option has no effect. A non-interactive
+shell invoked with the name 'sh' does not attempt to read any other
+startup files.
+
+ When invoked as 'sh', Bash enters POSIX mode after the startup files
+are read.
+
+Invoked in POSIX mode
+.....................
+
+When Bash is started in POSIX mode, as with the '--posix' command line
+option, it follows the POSIX standard for startup files. In this mode,
+interactive shells expand the 'ENV' variable and commands are read and
+executed from the file whose name is the expanded value. No other
+startup files are read.
+
+Invoked by remote shell daemon
+..............................
+
+Bash attempts to determine when it is being run with its standard input
+connected to a network connection, as when executed by the remote shell
+daemon, usually 'rshd', or the secure shell daemon 'sshd'. If Bash
+determines it is being run in this fashion, it reads and executes
+commands from '~/.bashrc', if that file exists and is readable. It will
+not do this if invoked as 'sh'. The '--norc' option may be used to
+inhibit this behavior, and the '--rcfile' option may be used to force
+another file to be read, but neither 'rshd' nor 'sshd' generally invoke
+the shell with those options or allow them to be specified.
+
+Invoked with unequal effective and real UID/GIDs
+................................................
+
+If Bash is started with the effective user (group) id not equal to the
+real user (group) id, and the '-p' option is not supplied, no startup
+files are read, shell functions are not inherited from the environment,
+the 'SHELLOPTS', 'BASHOPTS', 'CDPATH', and 'GLOBIGNORE' variables, if
+they appear in the environment, are ignored, and the effective user id
+is set to the real user id. If the '-p' option is supplied at
+invocation, the startup behavior is the same, but the effective user id
+is not reset.
+
+
+File: bashref.info, Node: Interactive Shells, Next: Bash Conditional Expressions, Prev: Bash Startup Files, Up: Bash Features
+
+6.3 Interactive Shells
+======================
+
+* Menu:
+
+* What is an Interactive Shell?:: What determines whether a shell is Interactive.
+* Is this Shell Interactive?:: How to tell if a shell is interactive.
+* Interactive Shell Behavior:: What changes in a interactive shell?
+
+
+File: bashref.info, Node: What is an Interactive Shell?, Next: Is this Shell Interactive?, Up: Interactive Shells
+
+6.3.1 What is an Interactive Shell?
+-----------------------------------
+
+An interactive shell is one started without non-option arguments, unless
+'-s' is specified, without specifying the '-c' option, and whose input
+and error output are both connected to terminals (as determined by
+'isatty(3)'), or one started with the '-i' option.
+
+ An interactive shell generally reads from and writes to a user's
+terminal.
+
+ The '-s' invocation option may be used to set the positional
+parameters when an interactive shell is started.
+
+
+File: bashref.info, Node: Is this Shell Interactive?, Next: Interactive Shell Behavior, Prev: What is an Interactive Shell?, Up: Interactive Shells
+
+6.3.2 Is this Shell Interactive?
+--------------------------------
+
+To determine within a startup script whether or not Bash is running
+interactively, test the value of the '-' special parameter. It contains
+'i' when the shell is interactive. For example:
+
+ case "$-" in
+ *i*) echo This shell is interactive ;;
+ *) echo This shell is not interactive ;;
+ esac
+
+ Alternatively, startup scripts may examine the variable 'PS1'; it is
+unset in non-interactive shells, and set in interactive shells. Thus:
+
+ if [ -z "$PS1" ]; then
+ echo This shell is not interactive
+ else
+ echo This shell is interactive
+ fi
+
+
+File: bashref.info, Node: Interactive Shell Behavior, Prev: Is this Shell Interactive?, Up: Interactive Shells
+
+6.3.3 Interactive Shell Behavior
+--------------------------------
+
+When the shell is running interactively, it changes its behavior in
+several ways.
+
+ 1. Startup files are read and executed as described in *note Bash
+ Startup Files::.
+
+ 2. Job Control (*note Job Control::) is enabled by default. When job
+ control is in effect, Bash ignores the keyboard-generated job
+ control signals 'SIGTTIN', 'SIGTTOU', and 'SIGTSTP'.
+
+ 3. Bash expands and displays 'PS1' before reading the first line of a
+ command, and expands and displays 'PS2' before reading the second
+ and subsequent lines of a multi-line command. Bash expands and
+ displays 'PS0' after it reads a command but before executing it.
+ See *note Controlling the Prompt::, for a complete list of prompt
+ string escape sequences.
+
+ 4. Bash executes the value of the 'PROMPT_COMMAND' variable as a
+ command before printing the primary prompt, '$PS1' (*note Bash
+ Variables::).
+
+ 5. Readline (*note Command Line Editing::) is used to read commands
+ from the user's terminal.
+
+ 6. Bash inspects the value of the 'ignoreeof' option to 'set -o'
+ instead of exiting immediately when it receives an 'EOF' on its
+ standard input when reading a command (*note The Set Builtin::).
+
+ 7. Command history (*note Bash History Facilities::) and history
+ expansion (*note History Interaction::) are enabled by default.
+ Bash will save the command history to the file named by '$HISTFILE'
+ when a shell with history enabled exits.
+
+ 8. Alias expansion (*note Aliases::) is performed by default.
+
+ 9. In the absence of any traps, Bash ignores 'SIGTERM' (*note
+ Signals::).
+
+ 10. In the absence of any traps, 'SIGINT' is caught and handled (*note
+ Signals::). 'SIGINT' will interrupt some shell builtins.
+
+ 11. An interactive login shell sends a 'SIGHUP' to all jobs on exit if
+ the 'huponexit' shell option has been enabled (*note Signals::).
+
+ 12. The '-n' invocation option is ignored, and 'set -n' has no effect
+ (*note The Set Builtin::).
+
+ 13. Bash will check for mail periodically, depending on the values of
+ the 'MAIL', 'MAILPATH', and 'MAILCHECK' shell variables (*note Bash
+ Variables::).
+
+ 14. Expansion errors due to references to unbound shell variables
+ after 'set -u' has been enabled will not cause the shell to exit
+ (*note The Set Builtin::).
+
+ 15. The shell will not exit on expansion errors caused by VAR being
+ unset or null in '${VAR:?WORD}' expansions (*note Shell Parameter
+ Expansion::).
+
+ 16. Redirection errors encountered by shell builtins will not cause
+ the shell to exit.
+
+ 17. When running in POSIX mode, a special builtin returning an error
+ status will not cause the shell to exit (*note Bash POSIX Mode::).
+
+ 18. A failed 'exec' will not cause the shell to exit (*note Bourne
+ Shell Builtins::).
+
+ 19. Parser syntax errors will not cause the shell to exit.
+
+ 20. Simple spelling correction for directory arguments to the 'cd'
+ builtin is enabled by default (see the description of the 'cdspell'
+ option to the 'shopt' builtin in *note The Shopt Builtin::).
+
+ 21. The shell will check the value of the 'TMOUT' variable and exit if
+ a command is not read within the specified number of seconds after
+ printing '$PS1' (*note Bash Variables::).
+
+
+File: bashref.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic, Prev: Interactive Shells, Up: Bash Features
+
+6.4 Bash Conditional Expressions
+================================
+
+Conditional expressions are used by the '[[' compound command and the
+'test' and '[' builtin commands. The 'test' and '[' commands determine
+their behavior based on the number of arguments; see the descriptions of
+those commands for any other command-specific actions.
+
+ Expressions may be unary or binary, and are formed from the following
+primaries. Unary expressions are often used to examine the status of a
+file. There are string operators and numeric comparison operators as
+well. Bash handles several filenames specially when they are used in
+expressions. If the operating system on which Bash is running provides
+these special files, Bash will use them; otherwise it will emulate them
+internally with this behavior: If the FILE argument to one of the
+primaries is of the form '/dev/fd/N', then file descriptor N is checked.
+If the FILE argument to one of the primaries is one of '/dev/stdin',
+'/dev/stdout', or '/dev/stderr', file descriptor 0, 1, or 2,
+respectively, is checked.
+
+ When used with '[[', the '<' and '>' operators sort lexicographically
+using the current locale. The 'test' command uses ASCII ordering.
+
+ Unless otherwise specified, primaries that operate on files follow
+symbolic links and operate on the target of the link, rather than the
+link itself.
+
+'-a FILE'
+ True if FILE exists.
+
+'-b FILE'
+ True if FILE exists and is a block special file.
+
+'-c FILE'
+ True if FILE exists and is a character special file.
+
+'-d FILE'
+ True if FILE exists and is a directory.
+
+'-e FILE'
+ True if FILE exists.
+
+'-f FILE'
+ True if FILE exists and is a regular file.
+
+'-g FILE'
+ True if FILE exists and its set-group-id bit is set.
+
+'-h FILE'
+ True if FILE exists and is a symbolic link.
+
+'-k FILE'
+ True if FILE exists and its "sticky" bit is set.
+
+'-p FILE'
+ True if FILE exists and is a named pipe (FIFO).
+
+'-r FILE'
+ True if FILE exists and is readable.
+
+'-s FILE'
+ True if FILE exists and has a size greater than zero.
+
+'-t FD'
+ True if file descriptor FD is open and refers to a terminal.
+
+'-u FILE'
+ True if FILE exists and its set-user-id bit is set.
+
+'-w FILE'
+ True if FILE exists and is writable.
+
+'-x FILE'
+ True if FILE exists and is executable.
+
+'-G FILE'
+ True if FILE exists and is owned by the effective group id.
+
+'-L FILE'
+ True if FILE exists and is a symbolic link.
+
+'-N FILE'
+ True if FILE exists and has been modified since it was last read.
+
+'-O FILE'
+ True if FILE exists and is owned by the effective user id.
+
+'-S FILE'
+ True if FILE exists and is a socket.
+
+'FILE1 -ef FILE2'
+ True if FILE1 and FILE2 refer to the same device and inode numbers.
+
+'FILE1 -nt FILE2'
+ True if FILE1 is newer (according to modification date) than FILE2,
+ or if FILE1 exists and FILE2 does not.
+
+'FILE1 -ot FILE2'
+ True if FILE1 is older than FILE2, or if FILE2 exists and FILE1
+ does not.
+
+'-o OPTNAME'
+ True if the shell option OPTNAME is enabled. The list of options
+ appears in the description of the '-o' option to the 'set' builtin
+ (*note The Set Builtin::).
+
+'-v VARNAME'
+ True if the shell variable VARNAME is set (has been assigned a
+ value).
+
+'-R VARNAME'
+ True if the shell variable VARNAME is set and is a name reference.
+
+'-z STRING'
+ True if the length of STRING is zero.
+
+'-n STRING'
+'STRING'
+ True if the length of STRING is non-zero.
+
+'STRING1 == STRING2'
+'STRING1 = STRING2'
+ True if the strings are equal. When used with the '[[' command,
+ this performs pattern matching as described above (*note
+ Conditional Constructs::).
+
+ '=' should be used with the 'test' command for POSIX conformance.
+
+'STRING1 != STRING2'
+ True if the strings are not equal.
+
+'STRING1 < STRING2'
+ True if STRING1 sorts before STRING2 lexicographically.
+
+'STRING1 > STRING2'
+ True if STRING1 sorts after STRING2 lexicographically.
+
+'ARG1 OP ARG2'
+ 'OP' is one of '-eq', '-ne', '-lt', '-le', '-gt', or '-ge'. These
+ arithmetic binary operators return true if ARG1 is equal to, not
+ equal to, less than, less than or equal to, greater than, or
+ greater than or equal to ARG2, respectively. ARG1 and ARG2 may be
+ positive or negative integers. When used with the '[[' command,
+ ARG1 and ARG2 are evaluated as arithmetic expressions (*note Shell
+ Arithmetic::).
+
+
+File: bashref.info, Node: Shell Arithmetic, Next: Aliases, Prev: Bash Conditional Expressions, Up: Bash Features
+
+6.5 Shell Arithmetic
+====================
+
+The shell allows arithmetic expressions to be evaluated, as one of the
+shell expansions or by using the '((' compound command, the 'let'
+builtin, or the '-i' option to the 'declare' builtin.
+
+ Evaluation is done in fixed-width integers with no check for
+overflow, though division by 0 is trapped and flagged as an error. The
+operators and their precedence, associativity, and values are the same
+as in the C language. The following list of operators is grouped into
+levels of equal-precedence operators. The levels are listed in order of
+decreasing precedence.
+
+'ID++ ID--'
+ variable post-increment and post-decrement
+
+'++ID --ID'
+ variable pre-increment and pre-decrement
+
+'- +'
+ unary minus and plus
+
+'! ~'
+ logical and bitwise negation
+
+'**'
+ exponentiation
+
+'* / %'
+ multiplication, division, remainder
+
+'+ -'
+ addition, subtraction
+
+'<< >>'
+ left and right bitwise shifts
+
+'<= >= < >'
+ comparison
+
+'== !='
+ equality and inequality
+
+'&'
+ bitwise AND
+
+'^'
+ bitwise exclusive OR
+
+'|'
+ bitwise OR
+
+'&&'
+ logical AND
+
+'||'
+ logical OR
+
+'expr ? expr : expr'
+ conditional operator
+
+'= *= /= %= += -= <<= >>= &= ^= |='
+ assignment
+
+'expr1 , expr2'
+ comma
+
+ Shell variables are allowed as operands; parameter expansion is
+performed before the expression is evaluated. Within an expression,
+shell variables may also be referenced by name without using the
+parameter expansion syntax. A shell variable that is null or unset
+evaluates to 0 when referenced by name without using the parameter
+expansion syntax. The value of a variable is evaluated as an arithmetic
+expression when it is referenced, or when a variable which has been
+given the INTEGER attribute using 'declare -i' is assigned a value. A
+null value evaluates to 0. A shell variable need not have its INTEGER
+attribute turned on to be used in an expression.
+
+ Constants with a leading 0 are interpreted as octal numbers. A
+leading '0x' or '0X' denotes hexadecimal. Otherwise, numbers take the
+form [BASE'#']N, where the optional BASE is a decimal number between 2
+and 64 representing the arithmetic base, and N is a number in that base.
+If BASE'#' is omitted, then base 10 is used. When specifying N, the
+digits greater than 9 are represented by the lowercase letters, the
+uppercase letters, '@', and '_', in that order. If BASE is less than or
+equal to 36, lowercase and uppercase letters may be used interchangeably
+to represent numbers between 10 and 35.
+
+ Operators are evaluated in order of precedence. Sub-expressions in
+parentheses are evaluated first and may override the precedence rules
+above.
+
+
+File: bashref.info, Node: Aliases, Next: Arrays, Prev: Shell Arithmetic, Up: Bash Features
+
+6.6 Aliases
+===========
+
+ALIASES allow a string to be substituted for a word when it is used as
+the first word of a simple command. The shell maintains a list of
+aliases that may be set and unset with the 'alias' and 'unalias' builtin
+commands.
+
+ The first word of each simple command, if unquoted, is checked to see
+if it has an alias. If so, that word is replaced by the text of the
+alias. The characters '/', '$', '`', '=' and any of the shell
+metacharacters or quoting characters listed above may not appear in an
+alias name. The replacement text may contain any valid shell input,
+including shell metacharacters. The first word of the replacement text
+is tested for aliases, but a word that is identical to an alias being
+expanded is not expanded a second time. This means that one may alias
+'ls' to '"ls -F"', for instance, and Bash does not try to recursively
+expand the replacement text. If the last character of the alias value
+is a BLANK, then the next command word following the alias is also
+checked for alias expansion.
+
+ Aliases are created and listed with the 'alias' command, and removed
+with the 'unalias' command.
+
+ There is no mechanism for using arguments in the replacement text, as
+in 'csh'. If arguments are needed, a shell function should be used
+(*note Shell Functions::).
+
+ Aliases are not expanded when the shell is not interactive, unless
+the 'expand_aliases' shell option is set using 'shopt' (*note The Shopt
+Builtin::).
+
+ The rules concerning the definition and use of aliases are somewhat
+confusing. Bash always reads at least one complete line of input, and
+all lines that make up a compound command, before executing any of the
+commands on that line or the compound command. 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 command. As a
+consequence, aliases defined in a function are not available until after
+that function is executed. To be safe, always put alias definitions on
+a separate line, and do not use 'alias' in compound commands.
+
+ For almost every purpose, shell functions are preferred over aliases.
+
+
+File: bashref.info, Node: Arrays, Next: The Directory Stack, Prev: Aliases, Up: Bash Features
+
+6.7 Arrays
+==========
+
+Bash provides one-dimensional indexed and associative array variables.
+Any variable may be used as an indexed array; the 'declare' builtin will
+explicitly declare an array. There is no maximum limit on the size of
+an array, nor any requirement that members be indexed or assigned
+contiguously. Indexed arrays are referenced using integers (including
+arithmetic expressions (*note Shell Arithmetic::)) and are zero-based;
+associative arrays use arbitrary strings. Unless otherwise noted,
+indexed array indices must be non-negative integers.
+
+ An indexed array is created automatically if any variable is assigned
+to using the syntax
+ NAME[SUBSCRIPT]=VALUE
+
+The SUBSCRIPT is treated as an arithmetic expression that must evaluate
+to a number. To explicitly declare an array, use
+ declare -a NAME
+The syntax
+ declare -a NAME[SUBSCRIPT]
+is also accepted; the SUBSCRIPT is ignored.
+
+Associative arrays are created using
+ declare -A NAME.
+
+ Attributes may be specified for an array variable using the 'declare'
+and 'readonly' builtins. Each attribute applies to all members of an
+array.
+
+ Arrays are assigned to using compound assignments of the form
+ NAME=(VALUE1 VALUE2 ... )
+where each VALUE is of the form '[SUBSCRIPT]='STRING. Indexed array
+assignments do not require anything but STRING. When assigning to
+indexed arrays, if the optional subscript is supplied, that index is
+assigned to; otherwise the index of the element assigned is the last
+index assigned to by the statement plus one. Indexing starts at zero.
+
+ When assigning to an associative array, the subscript is required.
+
+ This syntax is also accepted by the 'declare' builtin. Individual
+array elements may be assigned to using the 'NAME[SUBSCRIPT]=VALUE'
+syntax introduced above.
+
+ When assigning to an indexed array, if NAME is subscripted by a
+negative number, that number is interpreted as relative to one greater
+than the maximum index of NAME, so negative indices count back from the
+end of the array, and an index of -1 references the last element.
+
+ Any element of an array may be referenced using '${NAME[SUBSCRIPT]}'.
+The braces are required to avoid conflicts with the shell's filename
+expansion operators. If the SUBSCRIPT is '@' or '*', the word expands
+to all members of the array NAME. These subscripts differ only when the
+word appears within double quotes. If the word is double-quoted,
+'${NAME[*]}' expands to a single word with the value of each array
+member separated by the first character of the 'IFS' variable, and
+'${NAME[@]}' expands each element of NAME to a separate word. When
+there are no array members, '${NAME[@]}' expands to nothing. If the
+double-quoted expansion occurs within a word, the expansion of the first
+parameter is joined with the beginning part of the original word, and
+the expansion of the last parameter is joined with the last part of the
+original word. This is analogous to the expansion of the special
+parameters '@' and '*'. '${#NAME[SUBSCRIPT]}' expands to the length of
+'${NAME[SUBSCRIPT]}'. If SUBSCRIPT is '@' or '*', the expansion is the
+number of elements in the array. If the SUBSCRIPT used to reference an
+element of an indexed array evaluates to a number less than zero, it is
+interpreted as relative to one greater than the maximum index of the
+array, so negative indices count back from the end of the array, and an
+index of -1 refers to the last element.
+
+ Referencing an array variable without a subscript is equivalent to
+referencing with a subscript of 0. Any reference to a variable using a
+valid subscript is legal, and 'bash' will create an array if necessary.
+
+ An array variable is considered set if a subscript has been assigned
+a value. The null string is a valid value.
+
+ It is possible to obtain the keys (indices) of an array as well as
+the values. ${!NAME[@]} and ${!NAME[*]} expand to the indices assigned
+in array variable NAME. The treatment when in double quotes is similar
+to the expansion of the special parameters '@' and '*' within double
+quotes.
+
+ The 'unset' builtin is used to destroy arrays. 'unset
+NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT.
+Negative subscripts to indexed arrays are interpreted as described
+above. Unsetting the last element of an array variable does not unset
+the variable. 'unset NAME', where NAME is an array, removes the entire
+array. A subscript of '*' or '@' also removes the entire array.
+
+ When using a variable name with a subscript as an argument to a
+command, such as with 'unset', without using the word expansion syntax
+described above, the argument is subject to the shell's filename
+expansion. If filename expansion is not desired, the argument should be
+quoted.
+
+ The 'declare', 'local', and 'readonly' builtins each accept a '-a'
+option to specify an indexed array and a '-A' option to specify an
+associative array. If both options are supplied, '-A' takes precedence.
+The 'read' builtin accepts a '-a' option to assign a list of words read
+from the standard input to an array, and can read values from the
+standard input into individual array elements. The 'set' and 'declare'
+builtins display array values in a way that allows them to be reused as
+input.
+
+
+File: bashref.info, Node: The Directory Stack, Next: Controlling the Prompt, Prev: Arrays, Up: Bash Features
+
+6.8 The Directory Stack
+=======================
+
+* Menu:
+
+* Directory Stack Builtins:: Bash builtin commands to manipulate
+ the directory stack.
+
+The directory stack is a list of recently-visited directories. The
+'pushd' builtin adds directories to the stack as it changes the current
+directory, and the 'popd' builtin removes specified directories from the
+stack and changes the current directory to the directory removed. The
+'dirs' builtin displays the contents of the directory stack. The
+current directory is always the "top" of the directory stack.
+
+ The contents of the directory stack are also visible as the value of
+the 'DIRSTACK' shell variable.
+
+
+File: bashref.info, Node: Directory Stack Builtins, Up: The Directory Stack
+
+6.8.1 Directory Stack Builtins
+------------------------------
+
+'dirs'
+ dirs [-clpv] [+N | -N]
+
+ Display the list of currently remembered directories. Directories
+ are added to the list with the 'pushd' command; the 'popd' command
+ removes directories from the list. The current directory is always
+ the first directory in the stack.
+
+ '-c'
+ Clears the directory stack by deleting all of the elements.
+ '-l'
+ Produces a listing using full pathnames; the default listing
+ format uses a tilde to denote the home directory.
+ '-p'
+ Causes 'dirs' to print the directory stack with one entry per
+ line.
+ '-v'
+ Causes 'dirs' to print the directory stack with one entry per
+ line, prefixing each entry with its index in the stack.
+ '+N'
+ Displays the Nth directory (counting from the left of the list
+ printed by 'dirs' when invoked without options), starting with
+ zero.
+ '-N'
+ Displays the Nth directory (counting from the right of the
+ list printed by 'dirs' when invoked without options), starting
+ with zero.
+
+'popd'
+ popd [-n] [+N | -N]
+
+ When no arguments are given, 'popd' removes the top directory from
+ the stack and performs a 'cd' to the new top directory. The
+ elements are numbered from 0 starting at the first directory listed
+ with 'dirs'; that is, 'popd' is equivalent to 'popd +0'.
+
+ '-n'
+ Suppresses the normal change of directory when removing
+ directories from the stack, so that only the stack is
+ manipulated.
+ '+N'
+ Removes the Nth directory (counting from the left of the list
+ printed by 'dirs'), starting with zero.
+ '-N'
+ Removes the Nth directory (counting from the right of the list
+ printed by 'dirs'), starting with zero.
+
+'pushd'
+ pushd [-n] [+N | -N | DIR]
+
+ Save the current directory on the top of the directory stack and
+ then 'cd' to DIR. With no arguments, 'pushd' exchanges the top two
+ directories and makes the new top the current directory.
+
+ '-n'
+ Suppresses the normal change of directory when rotating or
+ adding directories to the stack, so that only the stack is
+ manipulated.
+ '+N'
+ Brings the Nth directory (counting from the left of the list
+ printed by 'dirs', starting with zero) to the top of the list
+ by rotating the stack.
+ '-N'
+ Brings the Nth directory (counting from the right of the list
+ printed by 'dirs', starting with zero) to the top of the list
+ by rotating the stack.
+ 'DIR'
+ Makes DIR be the top of the stack, making it the new current
+ directory as if it had been supplied as an argument to the
+ 'cd' builtin.
+
+
+File: bashref.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features
+
+6.9 Controlling the Prompt
+==========================
+
+The value of the variable 'PROMPT_COMMAND' is examined just before Bash
+prints each primary prompt. If 'PROMPT_COMMAND' is set and has a
+non-null value, then the value is executed just as if it had been typed
+on the command line.
+
+ In addition, the following table describes the special characters
+which can appear in the prompt variables 'PS0', 'PS1', 'PS2', and 'PS4':
+
+'\a'
+ A bell character.
+'\d'
+ The date, in "Weekday Month Date" format (e.g., "Tue May 26").
+'\D{FORMAT}'
+ The FORMAT is passed to 'strftime'(3) and the result is inserted
+ into the prompt string; an empty FORMAT results in a
+ locale-specific time representation. The braces are required.
+'\e'
+ An escape character.
+'\h'
+ The hostname, up to the first '.'.
+'\H'
+ The hostname.
+'\j'
+ The number of jobs currently managed by the shell.
+'\l'
+ The basename of the shell's terminal device name.
+'\n'
+ A newline.
+'\r'
+ A carriage return.
+'\s'
+ The name of the shell, the basename of '$0' (the portion following
+ the final slash).
+'\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 am/pm format.
+'\A'
+ The time, in 24-hour HH:MM format.
+'\u'
+ The username of the current user.
+'\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, with '$HOME' abbreviated with a
+ tilde (uses the '$PROMPT_DIRTRIM' variable).
+'\W'
+ The basename of '$PWD', with '$HOME' abbreviated with a tilde.
+'\!'
+ The history number of this command.
+'\#'
+ The command number of this command.
+'\$'
+ If the effective uid is 0, '#', otherwise '$'.
+'\NNN'
+ The character whose ASCII code is the octal value NNN.
+'\\'
+ A backslash.
+'\['
+ Begin a sequence of non-printing characters. This could be used to
+ embed a terminal control sequence into the prompt.
+'\]'
+ End a sequence of non-printing characters.
+
+ 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 (*note Bash History
+Facilities::), while the command number is the position in the sequence
+of commands executed during the current shell session.
+
+ After the string is decoded, it is expanded via parameter expansion,
+command substitution, arithmetic expansion, and quote removal, subject
+to the value of the 'promptvars' shell option (*note The Shopt
+Builtin::).
+
+
+File: bashref.info, Node: The Restricted Shell, Next: Bash POSIX Mode, Prev: Controlling the Prompt, Up: Bash Features
+
+6.10 The Restricted Shell
+=========================
+
+If Bash is started with the name 'rbash', or the '--restricted' or '-r'
+option is supplied at invocation, the shell becomes restricted. A
+restricted shell is used to set up an environment more controlled than
+the standard shell. A restricted shell behaves identically to 'bash'
+with the exception that the following are disallowed or not performed:
+
+ * Changing directories with the 'cd' builtin.
+ * Setting or unsetting the values of the 'SHELL', 'PATH', 'ENV', or
+ 'BASH_ENV' variables.
+ * Specifying command names containing slashes.
+ * Specifying a filename containing a slash as an argument to the '.'
+ builtin command.
+ * Specifying a filename containing a slash as an argument to the '-p'
+ option to the 'hash' builtin command.
+ * Importing function definitions from the shell environment at
+ startup.
+ * Parsing the value of 'SHELLOPTS' from the shell environment at
+ startup.
+ * Redirecting output using the '>', '>|', '<>', '>&', '&>', and '>>'
+ redirection operators.
+ * Using the 'exec' builtin to replace the shell with another command.
+ * Adding or deleting builtin commands with the '-f' and '-d' options
+ to the 'enable' builtin.
+ * Using the 'enable' builtin command to enable disabled shell
+ builtins.
+ * Specifying the '-p' option to the 'command' builtin.
+ * Turning off restricted mode with 'set +r' or 'set +o restricted'.
+
+ These restrictions are enforced after any startup files are read.
+
+ When a command that is found to be a shell script is executed (*note
+Shell Scripts::), 'rbash' turns off any restrictions in the shell
+spawned to execute the script.
+
+
+File: bashref.info, Node: Bash POSIX Mode, Prev: The Restricted Shell, Up: Bash Features
+
+6.11 Bash POSIX Mode
+====================
+
+Starting Bash with the '--posix' command-line option or executing 'set
+-o posix' while Bash is running will cause Bash to conform more closely
+to the POSIX standard by changing the behavior to match that specified
+by POSIX in areas where the Bash default differs.
+
+ When invoked as 'sh', Bash enters POSIX mode after reading the
+startup files.
+
+ The following list is what's changed when 'POSIX mode' is in effect:
+
+ 1. Bash ensures that the 'POSIXLY_CORRECT' variable is set.
+
+ 2. When a command in the hash table no longer exists, Bash will
+ re-search '$PATH' to find the new location. This is also available
+ with 'shopt -s checkhash'.
+
+ 3. The message printed by the job control code and builtins when a job
+ exits with a non-zero status is 'Done(status)'.
+
+ 4. The message printed by the job control code and builtins when a job
+ is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example,
+ 'SIGTSTP'.
+
+ 5. Alias expansion is always enabled, even in non-interactive shells.
+
+ 6. Reserved words appearing in a context where reserved words are
+ recognized do not undergo alias expansion.
+
+ 7. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number
+ and '!!' to '!' are enabled, and parameter expansion is performed
+ on the values of 'PS1' and 'PS2' regardless of the setting of the
+ 'promptvars' option.
+
+ 8. The POSIX startup files are executed ('$ENV') rather than the
+ normal Bash files.
+
+ 9. Tilde expansion is only performed on assignments preceding a
+ command name, rather than on all assignment statements on the line.
+
+ 10. The default history file is '~/.sh_history' (this is the default
+ value of '$HISTFILE').
+
+ 11. Redirection operators do not perform filename expansion on the
+ word in the redirection unless the shell is interactive.
+
+ 12. Redirection operators do not perform word splitting on the word in
+ the redirection.
+
+ 13. Function names must be valid shell 'name's. That is, they may not
+ contain characters other than letters, digits, and underscores, and
+ may not start with a digit. Declaring a function with an invalid
+ name causes a fatal syntax error in non-interactive shells.
+
+ 14. Function names may not be the same as one of the POSIX special
+ builtins.
+
+ 15. POSIX special builtins are found before shell functions during
+ command lookup.
+
+ 16. When printing shell function definitions (e.g., by 'type'), Bash
+ does not print the 'function' keyword.
+
+ 17. Literal tildes that appear as the first character in elements of
+ the 'PATH' variable are not expanded as described above under *note
+ Tilde Expansion::.
+
+ 18. The 'time' reserved word may be used by itself as a command. When
+ used in this way, it displays timing statistics for the shell and
+ its completed children. The 'TIMEFORMAT' variable controls the
+ format of the timing information.
+
+ 19. When parsing and expanding a ${...} expansion that appears within
+ double quotes, single quotes are no longer special and cannot be
+ used to quote a closing brace or other special character, unless
+ the operator is one of those defined to perform pattern removal.
+ In this case, they do not have to appear as matched pairs.
+
+ 20. The parser does not recognize 'time' as a reserved word if the
+ next token begins with a '-'.
+
+ 21. The '!' character does not introduce history expansion within a
+ double-quoted string, even if the 'histexpand' option is enabled.
+
+ 22. 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.
+
+ 23. 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.
+
+ 24. A non-interactive shell exits with an error status if a variable
+ assignment error occurs in an assignment statement preceding a
+ special builtin, but not with any other simple command.
+
+ 25. A non-interactive shell exits with an error status if the
+ iteration variable in a 'for' statement or the selection variable
+ in a 'select' statement is a readonly variable.
+
+ 26. Non-interactive shells exit if FILENAME in '.' FILENAME is not
+ found.
+
+ 27. Non-interactive shells exit if a syntax error in an arithmetic
+ expansion results in an invalid expression.
+
+ 28. Non-interactive shells exit if a parameter expansion error occurs.
+
+ 29. Non-interactive shells exit if there is a syntax error in a script
+ read with the '.' or 'source' builtins, or in a string processed by
+ the 'eval' builtin.
+
+ 30. Process substitution is not available.
+
+ 31. While variable indirection is available, it may not be applied to
+ the '#' and '?' special parameters.
+
+ 32. When expanding the '*' special parameter in a pattern context
+ where the expansion is double-quoted does not treat the '$*' as if
+ it were double-quoted.
+
+ 33. Assignment statements preceding POSIX special builtins persist in
+ the shell environment after the builtin completes.
+
+ 34. 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.
+
+ 35. The 'command' builtin does not prevent builtins that take
+ assignment statements as arguments from expanding them as
+ assignment statements; when not in POSIX mode, assignment builtins
+ lose their assignment statement expansion properties when preceded
+ by 'command'.
+
+ 36. The 'bg' builtin uses the required format to describe each job
+ placed in the background, which does not include an indication of
+ whether the job is the current or previous job.
+
+ 37. The output of 'kill -l' prints all the signal names on a single
+ line, separated by spaces, without the 'SIG' prefix.
+
+ 38. The 'kill' builtin does not accept signal names with a 'SIG'
+ prefix.
+
+ 39. The 'export' and 'readonly' builtin commands display their output
+ in the format required by POSIX.
+
+ 40. The 'trap' builtin displays signal names without the leading
+ 'SIG'.
+
+ 41. The 'trap' builtin doesn't check the first argument for a possible
+ signal specification and revert the signal handling to the original
+ disposition if it is, unless that argument consists solely of
+ digits and is a valid signal number. If users want to reset the
+ handler for a given signal to the original disposition, they should
+ use '-' as the first argument.
+
+ 42. The '.' and 'source' builtins do not search the current directory
+ for the filename argument if it is not found by searching 'PATH'.
+
+ 43. Enabling POSIX mode has the effect of setting the
+ 'inherit_errexit' option, so subshells spawned to execute command
+ substitutions inherit the value of the '-e' option from the parent
+ shell. When the 'inherit_errexit' option is not enabled, Bash
+ clears the '-e' option in such subshells.
+
+ 44. Enabling POSIX mode has the effect of setting the 'shift_verbose'
+ option, so numeric arguments to 'shift' that exceed the number of
+ positional parameters will result in an error message.
+
+ 45. When the 'alias' builtin displays alias definitions, it does not
+ display them with a leading 'alias ' unless the '-p' option is
+ supplied.
+
+ 46. When the 'set' builtin is invoked without options, it does not
+ display shell function names and definitions.
+
+ 47. When the 'set' builtin is invoked without options, it displays
+ variable values without quotes, unless they contain shell
+ metacharacters, even if the result contains nonprinting characters.
+
+ 48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname
+ constructed from '$PWD' and the directory name supplied as an
+ argument does not refer to an existing directory, 'cd' will fail
+ instead of falling back to PHYSICAL mode.
+
+ 49. When the 'cd' builtin cannot change a directory because the length
+ of the pathname constructed from '$PWD' and the directory name
+ supplied as an argument exceeds PATH_MAX when all symbolic links
+ are expanded, 'cd' will fail instead of attempting to use only the
+ supplied directory name.
+
+ 50. The 'pwd' builtin verifies that the value it prints is the same as
+ the current directory, even if it is not asked to check the file
+ system with the '-P' option.
+
+ 51. When listing the history, the 'fc' builtin does not include an
+ indication of whether or not a history entry has been modified.
+
+ 52. The default editor used by 'fc' is 'ed'.
+
+ 53. The 'type' and 'command' builtins will not report a non-executable
+ file as having been found, though the shell will attempt to execute
+ such a file if it is the only so-named file found in '$PATH'.
+
+ 54. The 'vi' editing mode will invoke the 'vi' editor directly when
+ the 'v' command is run, instead of checking '$VISUAL' and
+ '$EDITOR'.
+
+ 55. When the 'xpg_echo' option is enabled, Bash does not attempt to
+ interpret any arguments to 'echo' as options. Each argument is
+ displayed, after escape characters are converted.
+
+ 56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
+ and '-f' options.
+
+ 57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not
+ interrupt the 'wait' builtin and cause it to return immediately.
+ The trap command is run once for each child that exits.
+
+ 58. The 'read' builtin may be interrupted by a signal for which a trap
+ has been set. If Bash receives a trapped signal while executing
+ 'read', the trap handler executes and 'read' returns an exit status
+ greater than 128.
+
+ 59. Bash removes an exited background process's status from the list
+ of such statuses after the 'wait' builtin is used to obtain it.
+
+ There is other POSIX behavior that Bash does not implement by default
+even when in POSIX mode. Specifically:
+
+ 1. The 'fc' builtin checks '$EDITOR' as a program to edit history
+ entries if 'FCEDIT' is unset, rather than defaulting directly to
+ 'ed'. 'fc' uses 'ed' if 'EDITOR' is unset.
+
+ 2. As noted above, Bash requires the 'xpg_echo' option to be enabled
+ for the 'echo' builtin to be fully conformant.
+
+ Bash can be configured to be POSIX-conformant by default, by
+specifying the '--enable-strict-posix-default' to 'configure' when
+building (*note Optional Features::).
+
+
+File: bashref.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top
+
+7 Job Control
+*************
+
+This chapter discusses what job control is, how it works, and how Bash
+allows you to access its facilities.
+
+* Menu:
+
+* Job Control Basics:: How job control works.
+* Job Control Builtins:: Bash builtin commands used to interact
+ with job control.
+* Job Control Variables:: Variables Bash uses to customize job
+ control.
+
+
+File: bashref.info, Node: Job Control Basics, Next: Job Control Builtins, Up: Job Control
+
+7.1 Job Control Basics
+======================
+
+Job control refers to the ability to selectively stop (suspend) the
+execution of processes and continue (resume) their execution at a later
+point. A user typically employs this facility via an interactive
+interface supplied jointly by the operating system kernel's terminal
+driver and Bash.
+
+ The shell associates a JOB with each pipeline. It keeps a table of
+currently executing jobs, which may be listed with the 'jobs' command.
+When Bash starts a job asynchronously, it prints a line that looks like:
+ [1] 25647
+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 JOB abstraction as the basis for job control.
+
+ To facilitate the implementation of the user interface to job
+control, the operating system maintains the notion of a current terminal
+process group ID. Members of this process group (processes whose
+process group ID is equal to the current terminal process group ID)
+receive keyboard-generated signals such as 'SIGINT'. These processes
+are said to be in the foreground. Background processes are those whose
+process group ID differs from the terminal's; such processes are immune
+to keyboard-generated signals. Only foreground processes are allowed to
+read from or, if the user so specifies with 'stty tostop', write to the
+terminal. Background processes which attempt to read from (write to
+when 'stty tostop' is in effect) the terminal are sent a 'SIGTTIN'
+('SIGTTOU') signal by the kernel's terminal driver, which, unless
+caught, suspends the process.
+
+ If the operating system on which Bash is running supports job
+control, Bash contains facilities to use it. Typing the SUSPEND
+character (typically '^Z', Control-Z) while a process is running causes
+that process to be stopped and returns control to Bash. Typing the
+DELAYED SUSPEND character (typically '^Y', Control-Y) causes the process
+to be stopped when it attempts to read input from the terminal, and
+control to be returned to Bash. The user then manipulates the state of
+this job, using the 'bg' command to continue it in the background, the
+'fg' command to continue it in the foreground, or the 'kill' command to
+kill it. A '^Z' takes effect immediately, and has the additional side
+effect of causing pending output and typeahead to be discarded.
+
+ There are a number of ways to refer to a job in the shell. The
+character '%' introduces a job specification (JOBSPEC).
+
+ Job number 'n' may be referred to as '%n'. The symbols '%%' and '%+'
+refer to the shell's notion of the current job, which is the last job
+stopped while it was in the foreground or started in the background. A
+single '%' (with no accompanying job specification) also refers to the
+current job. The previous job may be referenced using '%-'. If there
+is only a single job, '%+' and '%-' can both be used to refer to that
+job. In output pertaining to jobs (e.g., the output of the 'jobs'
+command), the current job is always flagged with a '+', and the previous
+job with a '-'.
+
+ A job may also be referred to using a prefix of the name used to
+start it, or using a substring that appears in its command line. For
+example, '%ce' refers to a stopped 'ce' job. Using '%?ce', on the other
+hand, refers to any job containing the string 'ce' in its command line.
+If the prefix or substring matches more than one job, Bash reports an
+error.
+
+ Simply naming a job can be used to bring it into the foreground: '%1'
+is a synonym for 'fg %1', bringing job 1 from the background into the
+foreground. Similarly, '%1 &' resumes job 1 in the background,
+equivalent to 'bg %1'
+
+ The shell learns immediately whenever a job changes state. Normally,
+Bash waits until it is about to print a prompt before reporting changes
+in a job's status so as to not interrupt any other output. If the '-b'
+option to the 'set' builtin is enabled, Bash reports such changes
+immediately (*note The Set Builtin::). Any trap on 'SIGCHLD' is
+executed for each child process that exits.
+
+ If an attempt to exit Bash is made while jobs are stopped, (or
+running, if the 'checkjobs' option is enabled - see *note The Shopt
+Builtin::), the shell prints a warning message, and if the 'checkjobs'
+option is enabled, lists the jobs and their statuses. The 'jobs'
+command may then be used to inspect their status. If a second attempt
+to exit is made without an intervening command, Bash does not print
+another warning, and any stopped jobs are terminated.
+
+ When the shell is waiting for a job or process using the 'wait'
+builtin, and job control is enabled, 'wait' will return when the job
+changes state. The '-f' option will force 'wait' to wait until the job
+or process terminates before returning.
+
+
+File: bashref.info, Node: Job Control Builtins, Next: Job Control Variables, Prev: Job Control Basics, Up: Job Control
+
+7.2 Job Control Builtins
+========================
+
+'bg'
+ bg [JOBSPEC ...]
+
+ Resume each suspended job JOBSPEC in the background, as if it had
+ been started with '&'. If JOBSPEC 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
+ JOBSPEC was not found or specifies a job that was started without
+ job control.
+
+'fg'
+ fg [JOBSPEC]
+
+ Resume the job JOBSPEC in the foreground and make it the current
+ job. If JOBSPEC 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, JOBSPEC does not specify a valid job or JOBSPEC
+ specifies a job that was started without job control.
+
+'jobs'
+ jobs [-lnprs] [JOBSPEC]
+ jobs -x COMMAND [ARGUMENTS]
+
+ The first form lists the active jobs. The options have the
+ following meanings:
+
+ '-l'
+ List process IDs in addition to the normal information.
+
+ '-n'
+ Display information only about jobs that have changed status
+ since the user was last notified of their status.
+
+ '-p'
+ List only the process ID of the job's process group leader.
+
+ '-r'
+ Display only running jobs.
+
+ '-s'
+ Display only stopped jobs.
+
+ If JOBSPEC is given, output is restricted to information about that
+ job. If JOBSPEC is not supplied, the status of all jobs is listed.
+
+ If the '-x' option is supplied, 'jobs' replaces any JOBSPEC found
+ in COMMAND or ARGUMENTS with the corresponding process group ID,
+ and executes COMMAND, passing it ARGUMENTs, returning its exit
+ status.
+
+'kill'
+ kill [-s SIGSPEC] [-n SIGNUM] [-SIGSPEC] JOBSPEC or PID
+ kill -l|-L [EXIT_STATUS]
+
+ Send a signal specified by SIGSPEC or SIGNUM to the process named
+ by job specification JOBSPEC or process ID PID. SIGSPEC is either
+ a case-insensitive signal name such as 'SIGINT' (with or without
+ the 'SIG' prefix) or a signal number; SIGNUM is a signal number.
+ If SIGSPEC and SIGNUM are not present, 'SIGTERM' is used. The '-l'
+ option lists the signal names. If any arguments are supplied when
+ '-l' is given, the names of the signals corresponding to the
+ arguments are listed, and the return status is zero. EXIT_STATUS
+ is a number specifying a signal number or the exit status of a
+ process terminated by a signal. The '-L' option is equivalent to
+ '-l'. The return status is zero if at least one signal was
+ successfully sent, or non-zero if an error occurs or an invalid
+ option is encountered.
+
+'wait'
+ wait [-fn] [JOBSPEC or PID ...]
+
+ Wait until the child process specified by each process ID PID or
+ job specification JOBSPEC 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 the '-n' option is supplied, 'wait' waits for any job to
+ terminate and returns its exit status. If the '-f' option is
+ supplied, and job control is enabled, 'wait' forces each PID or
+ JOBSPEC to terminate before returning its status, intead of
+ returning when it changes status. If neither JOBSPEC nor PID
+ specifies an active child process of the shell, the return status
+ is 127.
+
+'disown'
+ disown [-ar] [-h] [JOBSPEC ... | PID ... ]
+
+ Without options, remove each JOBSPEC from the table of active jobs.
+ If the '-h' option is given, the job is not removed from the table,
+ but is marked so that 'SIGHUP' is not sent to the job if the shell
+ receives a 'SIGHUP'. If JOBSPEC is not present, and neither the
+ '-a' nor the '-r' option is supplied, the current job is used. If
+ no JOBSPEC is supplied, the '-a' option means to remove or mark all
+ jobs; the '-r' option without a JOBSPEC argument restricts
+ operation to running jobs.
+
+'suspend'
+ suspend [-f]
+
+ Suspend the execution of this shell until it receives a 'SIGCONT'
+ signal. A login shell cannot be suspended; the '-f' option can be
+ used to override this and force the suspension.
+
+ When job control is not active, the 'kill' and 'wait' builtins do not
+accept JOBSPEC arguments. They must be supplied process IDs.
+
+
+File: bashref.info, Node: Job Control Variables, Prev: Job Control Builtins, Up: Job Control
+
+7.3 Job Control Variables
+=========================
+
+'auto_resume'
+ 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 'exact', the string supplied
+ must match the name of a stopped job exactly; if set to
+ 'substring', the string supplied needs to match a substring of the
+ name of a stopped job. The 'substring' value provides
+ functionality analogous to the '%?' job ID (*note Job Control
+ Basics::). 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 '%' job ID.
+
+
+File: bashref.info, Node: Command Line Editing, Next: Using History Interactively, Prev: Job Control, Up: Top
+
+8 Command Line Editing
+**********************
+
+This chapter describes the basic features of the GNU command line
+editing interface. Command line editing is provided by the Readline
+library, which is used by several different programs, including Bash.
+Command line editing is enabled by default when using an interactive
+shell, unless the '--noediting' option is supplied at shell invocation.
+Line editing is also used when using the '-e' option to the 'read'
+builtin command (*note Bash Builtins::). By default, the line editing
+commands are similar to those of Emacs. A vi-style line editing
+interface is also available. Line editing can be enabled at any time
+using the '-o emacs' or '-o vi' options to the 'set' builtin command
+(*note The Set Builtin::), or disabled using the '+o emacs' or '+o vi'
+options to 'set'.
+
+* Menu:
+
+* Introduction and Notation:: Notation used in this text.
+* Readline Interaction:: The minimum set of commands for editing a line.
+* Readline Init File:: Customizing Readline from a user's view.
+* Bindable Readline Commands:: A description of most of the Readline commands
+ available for binding
+* Readline vi Mode:: A short description of how to make Readline
+ behave like the vi editor.
+* Programmable Completion:: How to specify the possible completions for
+ a specific command.
+* Programmable Completion Builtins:: Builtin commands to specify how to
+ complete arguments for a particular command.
+* A Programmable Completion Example:: An example shell function for
+ generating possible completions.
+
+
+File: bashref.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing
+
+8.1 Introduction to Line Editing
+================================
+
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+ The text 'C-k' is read as 'Control-K' and describes the character
+produced when the <k> key is pressed while the Control key is depressed.
+
+ The text 'M-k' is read as 'Meta-K' and describes the character
+produced when the Meta key (if you have one) is depressed, and the <k>
+key is pressed. The Meta key is labeled <ALT> on many keyboards. On
+keyboards with two keys labeled <ALT> (usually to either side of the
+space bar), the <ALT> on the left side is generally set to work as a
+Meta key. The <ALT> key on the right may also be configured to work as
+a Meta key or may be configured as some other modifier, such as a
+Compose key for typing accented characters.
+
+ If you do not have a Meta or <ALT> key, or another key working as a
+Meta key, the identical keystroke can be generated by typing <ESC>
+_first_, and then typing <k>. Either process is known as "metafying"
+the <k> key.
+
+ The text 'M-C-k' is read as 'Meta-Control-k' and describes the
+character produced by "metafying" 'C-k'.
+
+ In addition, several keys have their own names. Specifically, <DEL>,
+<ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves when seen
+in this text, or in an init file (*note Readline Init File::). If your
+keyboard lacks a <LFD> key, typing <C-j> will produce the desired
+character. The <RET> key may be labeled <Return> or <Enter> on some
+keyboards.
+
+
+File: bashref.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
+
+8.2 Readline Interaction
+========================
+
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled. The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line. Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections. Then, when you are satisfied with
+the line, you simply press <RET>. You do not have to be at the end of
+the line to press <RET>; the entire line is accepted regardless of the
+location of the cursor within the line.
+
+* Menu:
+
+* Readline Bare Essentials:: The least you need to know about Readline.
+* Readline Movement Commands:: Moving about the input line.
+* Readline Killing Commands:: How to delete text, and how to get it back!
+* Readline Arguments:: Giving numeric arguments to commands.
+* Searching:: Searching through previous lines.
+
+
+File: bashref.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction
+
+8.2.1 Readline Bare Essentials
+------------------------------
+
+In order to enter characters into the line, simply type them. The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right. If you mistype a character, you can use your erase
+character to back up and delete the mistyped character.
+
+ Sometimes you may mistype a character, and not notice the error until
+you have typed several other characters. In that case, you can type
+'C-b' to move the cursor to the left, and then correct your mistake.
+Afterwards, you can move the cursor to the right with 'C-f'.
+
+ When you add text in the middle of a line, you will notice that
+characters to the right of the cursor are 'pushed over' to make room for
+the text that you have inserted. Likewise, when you delete text behind
+the cursor, characters to the right of the cursor are 'pulled back' to
+fill in the blank space created by the removal of the text. A list of
+the bare essentials for editing the text of an input line follows.
+
+'C-b'
+ Move back one character.
+'C-f'
+ Move forward one character.
+<DEL> or <Backspace>
+ Delete the character to the left of the cursor.
+'C-d'
+ Delete the character underneath the cursor.
+Printing characters
+ Insert the character into the line at the cursor.
+'C-_' or 'C-x C-u'
+ Undo the last editing command. You can undo all the way back to an
+ empty line.
+
+(Depending on your configuration, the <Backspace> key be set to delete
+the character to the left of the cursor and the <DEL> key set to delete
+the character underneath the cursor, like 'C-d', rather than the
+character to the left of the cursor.)
+
+
+File: bashref.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
+
+8.2.2 Readline Movement Commands
+--------------------------------
+
+The above table describes the most basic keystrokes that you need in
+order to do editing of the input line. For your convenience, many other
+commands have been added in addition to 'C-b', 'C-f', 'C-d', and <DEL>.
+Here are some commands for moving more rapidly about the line.
+
+'C-a'
+ Move to the start of the line.
+'C-e'
+ Move to the end of the line.
+'M-f'
+ Move forward a word, where a word is composed of letters and
+ digits.
+'M-b'
+ Move backward a word.
+'C-l'
+ Clear the screen, reprinting the current line at the top.
+
+ Notice how 'C-f' moves forward a character, while 'M-f' moves forward
+a word. It is a loose convention that control keystrokes operate on
+characters while meta keystrokes operate on words.
+
+
+File: bashref.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction
+
+8.2.3 Readline Killing Commands
+-------------------------------
+
+"Killing" text means to delete the text from the line, but to save it
+away for later use, usually by "yanking" (re-inserting) it back into the
+line. ('Cut' and 'paste' are more recent jargon for 'kill' and 'yank'.)
+
+ If the description for a command says that it 'kills' text, then you
+can be sure that you can get the text back in a different (or the same)
+place later.
+
+ When you use a kill command, the text is saved in a "kill-ring". Any
+number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all. The kill ring is not line
+specific; the text that you killed on a previously typed line is
+available to be yanked back later, when you are typing another line.
+
+ Here is the list of commands for killing text.
+
+'C-k'
+ Kill the text from the current cursor position to the end of the
+ line.
+
+'M-d'
+ 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 'M-f'.
+
+'M-<DEL>'
+ 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 'M-b'.
+
+'C-w'
+ Kill from the cursor to the previous whitespace. This is different
+ than 'M-<DEL>' because the word boundaries differ.
+
+ Here is how to "yank" the text back into the line. Yanking means to
+copy the most-recently-killed text from the kill buffer.
+
+'C-y'
+ Yank the most recently killed text back into the buffer at the
+ cursor.
+
+'M-y'
+ Rotate the kill-ring, and yank the new top. You can only do this
+ if the prior command is 'C-y' or 'M-y'.
+
+
+File: bashref.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction
+
+8.2.4 Readline Arguments
+------------------------
+
+You can pass numeric arguments to Readline commands. Sometimes the
+argument acts as a repeat count, other times it is the sign of the
+argument that is significant. If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction. For example, to kill text back to the
+start of the line, you might type 'M-- C-k'.
+
+ The general way to pass numeric arguments to a command is to type
+meta digits before the command. If the first 'digit' typed is a minus
+sign ('-'), then the sign of the argument will be negative. Once you
+have typed one meta digit to get the argument started, you can type the
+remainder of the digits, and then the command. For example, to give the
+'C-d' command an argument of 10, you could type 'M-1 0 C-d', which will
+delete the next ten characters on the input line.
+
+
+File: bashref.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction
+
+8.2.5 Searching for Commands in the History
+-------------------------------------------
+
+Readline provides commands for searching through the command history
+(*note Bash History Facilities::) for lines containing a specified
+string. There are two search modes: "incremental" and
+"non-incremental".
+
+ Incremental searches begin before the user has finished typing the
+search string. As each character of the search string is typed,
+Readline displays the next entry from the history matching the string
+typed so far. An incremental search requires only as many characters as
+needed to find the desired history entry. To search backward in the
+history for a particular string, type 'C-r'. Typing 'C-s' searches
+forward through the history. The characters present in the value of the
+'isearch-terminators' variable are used to terminate an incremental
+search. If that variable has not been assigned a value, the <ESC> and
+'C-J' characters will terminate an incremental search. 'C-g' will abort
+an incremental search and restore the original line. When the search is
+terminated, the history entry containing the search string becomes the
+current line.
+
+ To find other matching entries in the history list, type 'C-r' or
+'C-s' as appropriate. This will search backward or forward in the
+history for the next entry matching the search string typed so far. Any
+other key sequence bound to a Readline command will terminate the search
+and execute that command. For instance, a <RET> will terminate the
+search and accept the line, thereby executing the command from the
+history list. A movement command will terminate the search, make the
+last line found the current line, and begin editing.
+
+ Readline remembers the last incremental search string. If two 'C-r's
+are typed without any intervening characters defining a new search
+string, any remembered search string is used.
+
+ Non-incremental searches read the entire search string before
+starting to search for matching history lines. The search string may be
+typed by the user or be part of the contents of the current line.
+
+
+File: bashref.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing
+
+8.3 Readline Init File
+======================
+
+Although the Readline library comes with a set of Emacs-like keybindings
+installed by default, it is possible to use a different set of
+keybindings. Any user can customize programs that use Readline by
+putting commands in an "inputrc" file, conventionally in his home
+directory. The name of this file is taken from the value of the shell
+variable 'INPUTRC'. If that variable is unset, the default is
+'~/.inputrc'. If that file does not exist or cannot be read, the
+ultimate default is '/etc/inputrc'.
+
+ When a program which uses the Readline library starts up, the init
+file is read, and the key bindings are set.
+
+ In addition, the 'C-x C-r' command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+* Menu:
+
+* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
+
+* Sample Init File:: An example inputrc file.
+
+
+File: bashref.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File
+
+8.3.1 Readline Init File Syntax
+-------------------------------
+
+There are only a few basic constructs allowed in the Readline init file.
+Blank lines are ignored. Lines beginning with a '#' are comments.
+Lines beginning with a '$' indicate conditional constructs (*note
+Conditional Init Constructs::). Other lines denote variable settings
+and key bindings.
+
+Variable Settings
+ You can modify the run-time behavior of Readline by altering the
+ values of variables in Readline using the 'set' command within the
+ init file. The syntax is simple:
+
+ set VARIABLE VALUE
+
+ Here, for example, is how to change from the default Emacs-like key
+ binding to use 'vi' line editing commands:
+
+ set editing-mode vi
+
+ Variable names and values, where appropriate, are recognized
+ without regard to case. Unrecognized variable names are ignored.
+
+ Boolean variables (those that can be set to on or off) are set to
+ on if the value is null or empty, ON (case-insensitive), or 1. Any
+ other value results in the variable being set to off.
+
+ The 'bind -V' command lists the current Readline variable names and
+ values. *Note Bash Builtins::.
+
+ A great deal of run-time behavior is changeable with the following
+ variables.
+
+ 'bell-style'
+ Controls what happens when Readline wants to ring the terminal
+ bell. If set to 'none', Readline never rings the bell. If
+ set to 'visible', Readline uses a visible bell if one is
+ available. If set to 'audible' (the default), Readline
+ attempts to ring the terminal's bell.
+
+ 'bind-tty-special-chars'
+ If set to 'on' (the default), Readline attempts to bind the
+ control characters treated specially by the kernel's terminal
+ driver to their Readline equivalents.
+
+ 'blink-matching-paren'
+ If set to 'on', Readline attempts to briefly move the cursor
+ to an opening parenthesis when a closing parenthesis is
+ inserted. The default is 'off'.
+
+ 'colored-completion-prefix'
+ If set to 'on', when listing completions, Readline displays
+ the common prefix of the set of possible completions using a
+ different color. The color definitions are taken from the
+ value of the 'LS_COLORS' environment variable. The default is
+ 'off'.
+
+ 'colored-stats'
+ If set to 'on', Readline displays possible completions using
+ different colors to indicate their file type. The color
+ definitions are taken from the value of the 'LS_COLORS'
+ environment variable. The default is 'off'.
+
+ 'comment-begin'
+ The string to insert at the beginning of the line when the
+ 'insert-comment' command is executed. The default value is
+ '"#"'.
+
+ 'completion-display-width'
+ The number of screen columns used to display possible matches
+ when performing completion. The value is ignored if it is
+ less than 0 or greater than the terminal screen width. A
+ value of 0 will cause matches to be displayed one per line.
+ The default value is -1.
+
+ 'completion-ignore-case'
+ If set to 'on', Readline performs filename matching and
+ completion in a case-insensitive fashion. The default value
+ is 'off'.
+
+ 'completion-map-case'
+ If set to 'on', and COMPLETION-IGNORE-CASE is enabled,
+ Readline treats hyphens ('-') and underscores ('_') as
+ equivalent when performing case-insensitive filename matching
+ and completion. The default value is 'off'.
+
+ 'completion-prefix-display-length'
+ The length in characters of the common prefix of a list of
+ possible completions that is displayed without modification.
+ When set to a value greater than zero, common prefixes longer
+ than this value are replaced with an ellipsis when displaying
+ possible completions.
+
+ 'completion-query-items'
+ 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 '100'.
+
+ 'convert-meta'
+ If set to 'on', Readline will convert characters with the
+ eighth bit set to an ASCII key sequence by stripping the
+ eighth bit and prefixing an <ESC> character, converting them
+ to a meta-prefixed key sequence. The default value is 'on',
+ but will be set to 'off' if the locale is one that contains
+ eight-bit characters.
+
+ 'disable-completion'
+ If set to 'On', Readline will inhibit word completion.
+ Completion characters will be inserted into the line as if
+ they had been mapped to 'self-insert'. The default is 'off'.
+
+ 'echo-control-characters'
+ When set to 'on', on operating systems that indicate they
+ support it, readline echoes a character corresponding to a
+ signal generated from the keyboard. The default is 'on'.
+
+ 'editing-mode'
+ The 'editing-mode' variable controls which default set of key
+ bindings is used. By default, Readline starts up in Emacs
+ editing mode, where the keystrokes are most similar to Emacs.
+ This variable can be set to either 'emacs' or 'vi'.
+
+ 'emacs-mode-string'
+ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is
+ displayed immediately before the last line of the primary
+ prompt when emacs editing mode is active. The value is
+ expanded like a key binding, so the standard set of meta- and
+ control prefixes and backslash escape sequences is available.
+ Use the '\1' and '\2' escapes to begin and end sequences of
+ non-printing characters, which can be used to embed a terminal
+ control sequence into the mode string. The default is '@'.
+
+ 'enable-bracketed-paste'
+ When set to 'On', Readline will configure the terminal in a
+ way that will enable it to insert each paste into the editing
+ buffer as a single string of characters, instead of treating
+ each character as if it had been read from the keyboard. This
+ can prevent pasted characters from being interpreted as
+ editing commands. The default is 'off'.
+
+ 'enable-keypad'
+ When set to 'on', Readline will try to enable the application
+ keypad when it is called. Some systems need this to enable
+ the arrow keys. The default is 'off'.
+
+ 'enable-meta-key'
+ When set to 'on', Readline will try to enable any meta
+ modifier key the terminal claims to support when it is called.
+ On many terminals, the meta key is used to send eight-bit
+ characters. The default is 'on'.
+
+ 'expand-tilde'
+ If set to 'on', tilde expansion is performed when Readline
+ attempts word completion. The default is 'off'.
+
+ 'history-preserve-point'
+ If set to 'on', the history code attempts to place the point
+ (the current cursor position) at the same location on each
+ history line retrieved with 'previous-history' or
+ 'next-history'. The default is 'off'.
+
+ 'history-size'
+ Set the maximum number of history entries saved in the history
+ list. If set to zero, any existing history entries are
+ deleted and no new entries are saved. If set to a value less
+ than zero, the number of history entries is not limited. By
+ default, the number of history entries is not limited. If an
+ attempt is made to set HISTORY-SIZE to a non-numeric value,
+ the maximum number of history entries will be set to 500.
+
+ 'horizontal-scroll-mode'
+ This variable can be set to either 'on' or 'off'. Setting it
+ to 'on' 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 'off'.
+
+ 'input-meta'
+ If set to 'on', 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 'off', but Readline will set it to 'on' if
+ the locale contains eight-bit characters. The name
+ 'meta-flag' is a synonym for this variable.
+
+ 'isearch-terminators'
+ The string of characters that should terminate an incremental
+ search without subsequently executing the character as a
+ command (*note Searching::). If this variable has not been
+ given a value, the characters <ESC> and 'C-J' will terminate
+ an incremental search.
+
+ 'keymap'
+ Sets Readline's idea of the current keymap for key binding
+ commands. Built-in 'keymap' names are 'emacs',
+ 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move',
+ 'vi-command', and 'vi-insert'. 'vi' is equivalent to
+ 'vi-command' ('vi-move' is also a synonym); 'emacs' is
+ equivalent to 'emacs-standard'. Applications may add
+ additional names. The default value is 'emacs'. The value of
+ the 'editing-mode' variable also affects the default keymap.
+
+ 'keyseq-timeout'
+ Specifies the duration Readline will wait for a character when
+ reading an ambiguous key sequence (one that can form a
+ complete key sequence using the input read so far, or can take
+ additional input to complete a longer key sequence). If no
+ input is received within the timeout, Readline will use the
+ shorter but complete key sequence. Readline uses this value
+ to determine whether or not input is available on the current
+ input source ('rl_instream' by default). The value is
+ specified in milliseconds, so a value of 1000 means that
+ Readline will wait one second for additional input. If this
+ variable is set to a value less than or equal to zero, or to a
+ non-numeric value, Readline will wait until another key is
+ pressed to decide which key sequence to complete. The default
+ value is '500'.
+
+ 'mark-directories'
+ If set to 'on', completed directory names have a slash
+ appended. The default is 'on'.
+
+ 'mark-modified-lines'
+ This variable, when set to 'on', causes Readline to display an
+ asterisk ('*') at the start of history lines which have been
+ modified. This variable is 'off' by default.
+
+ 'mark-symlinked-directories'
+ If set to 'on', completed names which are symbolic links to
+ directories have a slash appended (subject to the value of
+ 'mark-directories'). The default is 'off'.
+
+ 'match-hidden-files'
+ This variable, when set to 'on', causes Readline to match
+ files whose names begin with a '.' (hidden files) when
+ performing filename completion. If set to 'off', the leading
+ '.' must be supplied by the user in the filename to be
+ completed. This variable is 'on' by default.
+
+ 'menu-complete-display-prefix'
+ If set to 'on', menu completion displays the common prefix of
+ the list of possible completions (which may be empty) before
+ cycling through the list. The default is 'off'.
+
+ 'output-meta'
+ If set to 'on', Readline will display characters with the
+ eighth bit set directly rather than as a meta-prefixed escape
+ sequence. The default is 'off', but Readline will set it to
+ 'on' if the locale contains eight-bit characters.
+
+ 'page-completions'
+ If set to 'on', Readline uses an internal 'more'-like pager to
+ display a screenful of possible completions at a time. This
+ variable is 'on' by default.
+
+ 'print-completions-horizontally'
+ If set to 'on', Readline will display completions with matches
+ sorted horizontally in alphabetical order, rather than down
+ the screen. The default is 'off'.
+
+ 'revert-all-at-newline'
+ If set to 'on', Readline will undo all changes to history
+ lines before returning when 'accept-line' is executed. By
+ default, history lines may be modified and retain individual
+ undo lists across calls to 'readline'. The default is 'off'.
+
+ 'show-all-if-ambiguous'
+ This alters the default behavior of the completion functions.
+ If set to 'on', words which have more than one possible
+ completion cause the matches to be listed immediately instead
+ of ringing the bell. The default value is 'off'.
+
+ 'show-all-if-unmodified'
+ This alters the default behavior of the completion functions
+ in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to
+ 'on', 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 'off'.
+
+ 'show-mode-in-prompt'
+ If set to 'on', add a string to the beginning of the prompt
+ indicating the editing mode: emacs, vi command, or vi
+ insertion. The mode strings are user-settable (e.g.,
+ EMACS-MODE-STRING). The default value is 'off'.
+
+ 'skip-completed-text'
+ If set to 'on', this alters the default completion behavior
+ when inserting a single match into the line. It's only active
+ when performing completion in the middle of a word. If
+ enabled, readline does not insert characters from the
+ completion that match characters after point in the word being
+ completed, so portions of the word following the cursor are
+ not duplicated. For instance, if this is enabled, attempting
+ completion when the cursor is after the 'e' in 'Makefile' will
+ result in 'Makefile' rather than 'Makefilefile', assuming
+ there is a single possible completion. The default value is
+ 'off'.
+
+ 'vi-cmd-mode-string'
+ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is
+ displayed immediately before the last line of the primary
+ prompt when vi editing mode is active and in command mode.
+ The value is expanded like a key binding, so the standard set
+ of meta- and control prefixes and backslash escape sequences
+ is available. Use the '\1' and '\2' escapes to begin and end
+ sequences of non-printing characters, which can be used to
+ embed a terminal control sequence into the mode string. The
+ default is '(cmd)'.
+
+ 'vi-ins-mode-string'
+ If the SHOW-MODE-IN-PROMPT variable is enabled, this string is
+ displayed immediately before the last line of the primary
+ prompt when vi editing mode is active and in insertion mode.
+ The value is expanded like a key binding, so the standard set
+ of meta- and control prefixes and backslash escape sequences
+ is available. Use the '\1' and '\2' escapes to begin and end
+ sequences of non-printing characters, which can be used to
+ embed a terminal control sequence into the mode string. The
+ default is '(ins)'.
+
+ 'visible-stats'
+ If set to 'on', a character denoting a file's type is appended
+ to the filename when listing possible completions. The
+ default is 'off'.
+
+Key Bindings
+ 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.
+
+ Once you know the name of the command, simply place on a line in
+ the init file the name of the key you wish to bind the command to,
+ a colon, and then the name of the command. There can be no space
+ between the key name and the colon - that will be interpreted as
+ part of the key name. The name of the key can be expressed in
+ different ways, depending on what you find most comfortable.
+
+ In addition to command names, readline allows keys to be bound to a
+ string that is inserted when the key is pressed (a MACRO).
+
+ The 'bind -p' command displays Readline function names and bindings
+ in a format that can put directly into an initialization file.
+ *Note Bash Builtins::.
+
+ KEYNAME: FUNCTION-NAME or MACRO
+ KEYNAME is the name of a key spelled out in English. For
+ example:
+ Control-u: universal-argument
+ Meta-Rubout: backward-kill-word
+ Control-o: "> output"
+
+ In the example above, 'C-u' is bound to the function
+ 'universal-argument', 'M-DEL' is bound to the function
+ 'backward-kill-word', and 'C-o' is bound to run the macro
+ expressed on the right hand side (that is, to insert the text
+ '> output' into the line).
+
+ A number of symbolic character names are recognized while
+ processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
+ NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
+
+ "KEYSEQ": FUNCTION-NAME or MACRO
+ KEYSEQ differs from KEYNAME 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.
+
+ "\C-u": universal-argument
+ "\C-x\C-r": re-read-init-file
+ "\e[11~": "Function Key 1"
+
+ In the above example, 'C-u' is again bound to the function
+ 'universal-argument' (just as it was in the first example),
+ ''C-x' 'C-r'' is bound to the function 're-read-init-file',
+ and '<ESC> <[> <1> <1> <~>' is bound to insert the text
+ 'Function Key 1'.
+
+ The following GNU Emacs style escape sequences are available when
+ specifying key sequences:
+
+ '\C-'
+ control prefix
+ '\M-'
+ meta prefix
+ '\e'
+ an escape character
+ '\\'
+ backslash
+ '\"'
+ <">, a double quotation mark
+ '\''
+ <'>, a single quote or apostrophe
+
+ In addition to the GNU Emacs style escape sequences, a second set
+ of backslash escapes is available:
+
+ '\a'
+ alert (bell)
+ '\b'
+ backspace
+ '\d'
+ delete
+ '\f'
+ form feed
+ '\n'
+ newline
+ '\r'
+ carriage return
+ '\t'
+ horizontal tab
+ '\v'
+ vertical tab
+ '\NNN'
+ the eight-bit character whose value is the octal value NNN
+ (one to three digits)
+ '\xHH'
+ the eight-bit character whose value is the hexadecimal value
+ HH (one or two hex digits)
+
+ When entering the text of a macro, single or double quotes must be
+ used to indicate a macro definition. Unquoted text is assumed to
+ be a function name. In the macro body, the backslash escapes
+ described above are expanded. Backslash will quote any other
+ character in the macro text, including '"' and '''. For example,
+ the following binding will make ''C-x' \' insert a single '\' into
+ the line:
+ "\C-x\\": "\\"
+
+
+File: bashref.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File
+
+8.3.2 Conditional Init Constructs
+---------------------------------
+
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key bindings and
+variable settings to be performed as the result of tests. There are
+four parser directives used.
+
+'$if'
+ The '$if' construct allows bindings to be made based on the editing
+ mode, the terminal being used, or the application using Readline.
+ The text of the test, after any comparison operator, extends to the
+ end of the line; unless otherwise noted, no characters are required
+ to isolate it.
+
+ 'mode'
+ The 'mode=' form of the '$if' directive is used to test
+ whether Readline is in 'emacs' or 'vi' mode. This may be used
+ in conjunction with the 'set keymap' command, for instance, to
+ set bindings in the 'emacs-standard' and 'emacs-ctlx' keymaps
+ only if Readline is starting out in 'emacs' mode.
+
+ 'term'
+ The 'term=' form may be used to include terminal-specific key
+ bindings, perhaps to bind the key sequences output by the
+ terminal's function keys. The word on the right side of the
+ '=' is tested against both the full name of the terminal and
+ the portion of the terminal name before the first '-'. This
+ allows 'sun' to match both 'sun' and 'sun-cmd', for instance.
+
+ 'version'
+ The 'version' test may be used to perform comparisons against
+ specific Readline versions. The 'version' expands to the
+ current Readline version. The set of comparison operators
+ includes '=' (and '=='), '!=', '<=', '>=', '<', and '>'. The
+ version number supplied on the right side of the operator
+ consists of a major version number, an optional decimal point,
+ and an optional minor version (e.g., '7.1'). If the minor
+ version is omitted, it is assumed to be '0'. The operator may
+ be separated from the string 'version' and from the version
+ number argument by whitespace. The following example sets a
+ variable if the Readline version being used is 7.0 or newer:
+ $if version >= 7.0
+ set show-mode-in-prompt on
+ $endif
+
+ 'application'
+ The APPLICATION construct is used to include
+ application-specific settings. Each program using the
+ Readline library sets the APPLICATION NAME, 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:
+ $if Bash
+ # Quote the current or previous word
+ "\C-xq": "\eb\"\ef\""
+ $endif
+
+ 'variable'
+ The VARIABLE construct provides simple equality tests for
+ Readline variables and values. The permitted comparison
+ operators are '=', '==', and '!='. The variable name must be
+ separated from the comparison operator by whitespace; the
+ operator may be separated from the value on the right hand
+ side by whitespace. Both string and boolean variables may be
+ tested. Boolean variables must be tested against the values
+ ON and OFF. The following example is equivalent to the
+ 'mode=emacs' test described above:
+ $if editing-mode == emacs
+ set show-mode-in-prompt on
+ $endif
+
+'$endif'
+ This command, as seen in the previous example, terminates an '$if'
+ command.
+
+'$else'
+ Commands in this branch of the '$if' directive are executed if the
+ test fails.
+
+'$include'
+ This directive takes a single filename as an argument and reads
+ commands and bindings from that file. For example, the following
+ directive reads from '/etc/inputrc':
+ $include /etc/inputrc
+
+
+File: bashref.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File
+
+8.3.3 Sample Init File
+----------------------
+
+Here is an example of an INPUTRC file. This illustrates key binding,
+variable assignment, and conditional syntax.
+
+ # This file controls the behaviour of line input editing for
+ # programs that use the GNU Readline library. Existing
+ # programs include FTP, Bash, and GDB.
+ #
+ # You can re-read the inputrc file with C-x C-r.
+ # Lines beginning with '#' are comments.
+ #
+ # First, include any system-wide 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
+
+
+File: bashref.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing
+
+8.4 Bindable Readline Commands
+==============================
+
+* Menu:
+
+* Commands For Moving:: Moving about the line.
+* Commands For History:: Getting at previous lines.
+* Commands For Text:: Commands for changing text.
+* Commands For Killing:: Commands for killing and yanking.
+* Numeric Arguments:: Specifying numeric arguments, repeat counts.
+* Commands For Completion:: Getting Readline to do the typing for you.
+* Keyboard Macros:: Saving and re-executing typed characters
+* Miscellaneous Commands:: Other miscellaneous commands.
+
+This section describes Readline commands that may be bound to key
+sequences. You can list your key bindings by executing 'bind -P' or,
+for a more terse format, suitable for an INPUTRC file, 'bind -p'.
+(*Note Bash Builtins::.) Command names without an accompanying key
+sequence are unbound by default.
+
+ In the following descriptions, "point" refers to the current cursor
+position, and "mark" refers to a cursor position saved by the 'set-mark'
+command. The text between the point and mark is referred to as the
+"region".
+
+
+File: bashref.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
+
+8.4.1 Commands For Moving
+-------------------------
+
+'beginning-of-line (C-a)'
+ Move to the start of the current line.
+
+'end-of-line (C-e)'
+ Move to the end of the line.
+
+'forward-char (C-f)'
+ Move forward a character.
+
+'backward-char (C-b)'
+ Move back a character.
+
+'forward-word (M-f)'
+ Move forward to the end of the next word. Words are composed of
+ letters and digits.
+
+'backward-word (M-b)'
+ Move back to the start of the current or previous word. Words are
+ composed of letters and digits.
+
+'shell-forward-word ()'
+ Move forward to the end of the next word. Words are delimited by
+ non-quoted shell metacharacters.
+
+'shell-backward-word ()'
+ Move back to the start of the current or previous word. Words are
+ delimited by non-quoted shell metacharacters.
+
+'previous-screen-line ()'
+ Attempt to move point to the same physical screen column on the
+ previous physical screen line. This will not have the desired
+ effect if the current Readline line does not take up more than one
+ physical line or if point is not greater than the length of the
+ prompt plus the screen width.
+
+'next-screen-line ()'
+ Attempt to move point to the same physical screen column on the
+ next physical screen line. This will not have the desired effect
+ if the current Readline line does not take up more than one
+ physical line or if the length of the current Readline line is not
+ greater than the length of the prompt plus the screen width.
+
+'clear-screen (C-l)'
+ Clear the screen and redraw the current line, leaving the current
+ line at the top of the screen.
+
+'redraw-current-line ()'
+ Refresh the current line. By default, this is unbound.
+
+
+File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands
+
+8.4.2 Commands For Manipulating The History
+-------------------------------------------
+
+'accept-line (Newline or Return)'
+ 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 'HISTCONTROL' and 'HISTIGNORE' variables. If this line is a
+ modified history line, then restore the history line to its
+ original state.
+
+'previous-history (C-p)'
+ Move 'back' through the history list, fetching the previous
+ command.
+
+'next-history (C-n)'
+ Move 'forward' through the history list, fetching the next command.
+
+'beginning-of-history (M-<)'
+ Move to the first line in the history.
+
+'end-of-history (M->)'
+ Move to the end of the input history, i.e., the line currently
+ being entered.
+
+'reverse-search-history (C-r)'
+ Search backward starting at the current line and moving 'up'
+ through the history as necessary. This is an incremental search.
+
+'forward-search-history (C-s)'
+ Search forward starting at the current line and moving 'down'
+ through the history as necessary. This is an incremental search.
+
+'non-incremental-reverse-search-history (M-p)'
+ 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. The search string may match
+ anywhere in a history line.
+
+'non-incremental-forward-search-history (M-n)'
+ Search forward starting at the current line and moving 'down'
+ through the history as necessary using a non-incremental search for
+ a string supplied by the user. The search string may match
+ anywhere in a history line.
+
+'history-search-forward ()'
+ Search forward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string must match at the beginning of a history line. This is a
+ non-incremental search. By default, this command is unbound.
+
+'history-search-backward ()'
+ Search backward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string must match at the beginning of a history line. This is a
+ non-incremental search. By default, this command is unbound.
+
+'history-substring-search-forward ()'
+ Search forward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string may match anywhere in a history line. This is a
+ non-incremental search. By default, this command is unbound.
+
+'history-substring-search-backward ()'
+ Search backward through the history for the string of characters
+ between the start of the current line and the point. The search
+ string may match anywhere in a history line. This is a
+ non-incremental search. By default, this command is unbound.
+
+'yank-nth-arg (M-C-y)'
+ Insert the first argument to the previous command (usually the
+ second word on the previous line) at point. With an argument N,
+ insert the Nth word from the previous command (the words in the
+ previous command begin with word 0). A negative argument inserts
+ the Nth word from the end of the previous command. Once the
+ argument N is computed, the argument is extracted as if the '!N'
+ history expansion had been specified.
+
+'yank-last-arg (M-. or M-_)'
+ Insert last argument to the previous command (the last word of the
+ previous history entry). With a numeric argument, behave exactly
+ like 'yank-nth-arg'. Successive calls to 'yank-last-arg' move back
+ through the history list, inserting the last word (or the word
+ specified by the argument to the first call) of each line in turn.
+ Any numeric argument supplied to these successive calls determines
+ the direction to move through the history. A negative argument
+ switches the direction through the history (back or forward). The
+ history expansion facilities are used to extract the last argument,
+ as if the '!$' history expansion had been specified.
+
+
+File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
+
+8.4.3 Commands For Changing Text
+--------------------------------
+
+'end-of-file (usually C-d)'
+ The character indicating end-of-file as set, for example, by
+ 'stty'. If this character is read when there are no characters on
+ the line, and point is at the beginning of the line, Readline
+ interprets it as the end of input and returns EOF.
+
+'delete-char (C-d)'
+ Delete the character at point. If this function is bound to the
+ same character as the tty EOF character, as 'C-d' commonly is, see
+ above for the effects.
+
+'backward-delete-char (Rubout)'
+ Delete the character behind the cursor. A numeric argument means
+ to kill the characters instead of deleting them.
+
+'forward-backward-delete-char ()'
+ 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.
+
+'quoted-insert (C-q or C-v)'
+ Add the next character typed to the line verbatim. This is how to
+ insert key sequences like 'C-q', for example.
+
+'self-insert (a, b, A, 1, !, ...)'
+ Insert yourself.
+
+'bracketed-paste-begin ()'
+ This function is intended to be bound to the "bracketed paste"
+ escape sequence sent by some terminals, and such a binding is
+ assigned by default. It allows Readline to insert the pasted text
+ as a single unit without treating each character as if it had been
+ read from the keyboard. The characters are inserted as if each one
+ was bound to 'self-insert' instead of executing any editing
+ commands.
+
+'transpose-chars (C-t)'
+ 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.
+
+'transpose-words (M-t)'
+ 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.
+
+'upcase-word (M-u)'
+ Uppercase the current (or following) word. With a negative
+ argument, uppercase the previous word, but do not move the cursor.
+
+'downcase-word (M-l)'
+ Lowercase the current (or following) word. With a negative
+ argument, lowercase the previous word, but do not move the cursor.
+
+'capitalize-word (M-c)'
+ Capitalize the current (or following) word. With a negative
+ argument, capitalize the previous word, but do not move the cursor.
+
+'overwrite-mode ()'
+ 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
+ 'emacs' mode; 'vi' mode does overwrite differently. Each call to
+ 'readline()' starts in insert mode.
+
+ In overwrite mode, characters bound to 'self-insert' replace the
+ text at point rather than pushing the text to the right.
+ Characters bound to 'backward-delete-char' replace the character
+ before point with a space.
+
+ By default, this command is unbound.
+
+
+File: bashref.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
+
+8.4.4 Killing And Yanking
+-------------------------
+
+'kill-line (C-k)'
+ Kill the text from point to the end of the line.
+
+'backward-kill-line (C-x Rubout)'
+ Kill backward from the cursor to the beginning of the current line.
+
+'unix-line-discard (C-u)'
+ Kill backward from the cursor to the beginning of the current line.
+
+'kill-whole-line ()'
+ Kill all characters on the current line, no matter where point is.
+ By default, this is unbound.
+
+'kill-word (M-d)'
+ 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 'forward-word'.
+
+'backward-kill-word (M-<DEL>)'
+ Kill the word behind point. Word boundaries are the same as
+ 'backward-word'.
+
+'shell-kill-word ()'
+ 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 'shell-forward-word'.
+
+'shell-backward-kill-word ()'
+ Kill the word behind point. Word boundaries are the same as
+ 'shell-backward-word'.
+
+'unix-word-rubout (C-w)'
+ Kill the word behind point, using white space as a word boundary.
+ The killed text is saved on the kill-ring.
+
+'unix-filename-rubout ()'
+ 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.
+
+'delete-horizontal-space ()'
+ Delete all spaces and tabs around point. By default, this is
+ unbound.
+
+'kill-region ()'
+ Kill the text in the current region. By default, this command is
+ unbound.
+
+'copy-region-as-kill ()'
+ Copy the text in the region to the kill buffer, so it can be yanked
+ right away. By default, this command is unbound.
+
+'copy-backward-word ()'
+ Copy the word before point to the kill buffer. The word boundaries
+ are the same as 'backward-word'. By default, this command is
+ unbound.
+
+'copy-forward-word ()'
+ Copy the word following point to the kill buffer. The word
+ boundaries are the same as 'forward-word'. By default, this
+ command is unbound.
+
+'yank (C-y)'
+ Yank the top of the kill ring into the buffer at point.
+
+'yank-pop (M-y)'
+ Rotate the kill-ring, and yank the new top. You can only do this
+ if the prior command is 'yank' or 'yank-pop'.
+
+
+File: bashref.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands
+
+8.4.5 Specifying Numeric Arguments
+----------------------------------
+
+'digit-argument (M-0, M-1, ... M--)'
+ Add this digit to the argument already accumulating, or start a new
+ argument. 'M--' starts a negative argument.
+
+'universal-argument ()'
+ 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 'universal-argument' again ends the numeric
+ argument, but is otherwise ignored. As a special case, if this
+ command is immediately followed by a character that is neither a
+ digit nor 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.
+
+
+File: bashref.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands
+
+8.4.6 Letting Readline Type For You
+-----------------------------------
+
+'complete (<TAB>)'
+ 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
+ '$'), username (if the text begins with '~'), hostname (if the text
+ begins with '@'), or command (including aliases and functions) in
+ turn. If none of these produces a match, filename completion is
+ attempted.
+
+'possible-completions (M-?)'
+ List the possible completions of the text before point. When
+ displaying completions, Readline sets the number of columns used
+ for display to the value of 'completion-display-width', the value
+ of the environment variable 'COLUMNS', or the screen width, in that
+ order.
+
+'insert-completions (M-*)'
+ Insert all completions of the text before point that would have
+ been generated by 'possible-completions'.
+
+'menu-complete ()'
+ Similar to 'complete', but replaces the word to be completed with a
+ single match from the list of possible completions. Repeated
+ execution of 'menu-complete' steps through the list of possible
+ completions, inserting each match in turn. At the end of the list
+ of completions, the bell is rung (subject to the setting of
+ 'bell-style') and the original text is restored. An argument of N
+ moves N positions forward in the list of matches; a negative
+ argument may be used to move backward through the list. This
+ command is intended to be bound to <TAB>, but is unbound by
+ default.
+
+'menu-complete-backward ()'
+ Identical to 'menu-complete', but moves backward through the list
+ of possible completions, as if 'menu-complete' had been given a
+ negative argument.
+
+'delete-char-or-list ()'
+ Deletes the character under the cursor if not at the beginning or
+ end of the line (like 'delete-char'). If at the end of the line,
+ behaves identically to 'possible-completions'. This command is
+ unbound by default.
+
+'complete-filename (M-/)'
+ Attempt filename completion on the text before point.
+
+'possible-filename-completions (C-x /)'
+ List the possible completions of the text before point, treating it
+ as a filename.
+
+'complete-username (M-~)'
+ Attempt completion on the text before point, treating it as a
+ username.
+
+'possible-username-completions (C-x ~)'
+ List the possible completions of the text before point, treating it
+ as a username.
+
+'complete-variable (M-$)'
+ Attempt completion on the text before point, treating it as a shell
+ variable.
+
+'possible-variable-completions (C-x $)'
+ List the possible completions of the text before point, treating it
+ as a shell variable.
+
+'complete-hostname (M-@)'
+ Attempt completion on the text before point, treating it as a
+ hostname.
+
+'possible-hostname-completions (C-x @)'
+ List the possible completions of the text before point, treating it
+ as a hostname.
+
+'complete-command (M-!)'
+ 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.
+
+'possible-command-completions (C-x !)'
+ List the possible completions of the text before point, treating it
+ as a command name.
+
+'dynamic-complete-history (M-<TAB>)'
+ Attempt completion on the text before point, comparing the text
+ against lines from the history list for possible completion
+ matches.
+
+'dabbrev-expand ()'
+ Attempt menu completion on the text before point, comparing the
+ text against lines from the history list for possible completion
+ matches.
+
+'complete-into-braces (M-{)'
+ Perform filename completion and insert the list of possible
+ completions enclosed within braces so the list is available to the
+ shell (*note Brace Expansion::).
+
+
+File: bashref.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands
+
+8.4.7 Keyboard Macros
+---------------------
+
+'start-kbd-macro (C-x ()'
+ Begin saving the characters typed into the current keyboard macro.
+
+'end-kbd-macro (C-x ))'
+ Stop saving the characters typed into the current keyboard macro
+ and save the definition.
+
+'call-last-kbd-macro (C-x e)'
+ Re-execute the last keyboard macro defined, by making the
+ characters in the macro appear as if typed at the keyboard.
+
+'print-last-kbd-macro ()'
+ Print the last keboard macro defined in a format suitable for the
+ INPUTRC file.
+
+
+File: bashref.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands
+
+8.4.8 Some Miscellaneous Commands
+---------------------------------
+
+'re-read-init-file (C-x C-r)'
+ Read in the contents of the INPUTRC file, and incorporate any
+ bindings or variable assignments found there.
+
+'abort (C-g)'
+ Abort the current editing command and ring the terminal's bell
+ (subject to the setting of 'bell-style').
+
+'do-lowercase-version (M-A, M-B, M-X, ...)'
+ If the metafied character X is upper case, run the command that is
+ bound to the corresponding metafied lower case character. The
+ behavior is undefined if X is already lower case.
+
+'prefix-meta (<ESC>)'
+ Metafy the next character typed. This is for keyboards without a
+ meta key. Typing '<ESC> f' is equivalent to typing 'M-f'.
+
+'undo (C-_ or C-x C-u)'
+ Incremental undo, separately remembered for each line.
+
+'revert-line (M-r)'
+ Undo all changes made to this line. This is like executing the
+ 'undo' command enough times to get back to the beginning.
+
+'tilde-expand (M-&)'
+ Perform tilde expansion on the current word.
+
+'set-mark (C-@)'
+ Set the mark to the point. If a numeric argument is supplied, the
+ mark is set to that position.
+
+'exchange-point-and-mark (C-x C-x)'
+ 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.
+
+'character-search (C-])'
+ A character is read and point is moved to the next occurrence of
+ that character. A negative count searches for previous
+ occurrences.
+
+'character-search-backward (M-C-])'
+ A character is read and point is moved to the previous occurrence
+ of that character. A negative count searches for subsequent
+ occurrences.
+
+'skip-csi-sequence ()'
+ Read enough characters to consume a multi-key sequence such as
+ those defined for keys like Home and End. Such sequences begin
+ with a Control Sequence Indicator (CSI), usually ESC-[. If this
+ sequence is bound to "\e[", keys producing such sequences will have
+ no effect unless explicitly bound to a readline command, instead of
+ inserting stray characters into the editing buffer. This is
+ unbound by default, but usually bound to ESC-[.
+
+'insert-comment (M-#)'
+ Without a numeric argument, the value of the 'comment-begin'
+ variable is inserted at the beginning of the current line. If a
+ numeric argument is supplied, this command acts as a toggle: if the
+ characters at the beginning of the line do not match the value of
+ 'comment-begin', the value is inserted, otherwise the characters in
+ 'comment-begin' are deleted from the beginning of the line. In
+ either case, the line is accepted as if a newline had been typed.
+ The default value of 'comment-begin' causes this command to make
+ the current line a shell comment. If a numeric argument causes the
+ comment character to be removed, the line will be executed by the
+ shell.
+
+'dump-functions ()'
+ 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 INPUTRC
+ file. This command is unbound by default.
+
+'dump-variables ()'
+ 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
+ INPUTRC file. This command is unbound by default.
+
+'dump-macros ()'
+ 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 INPUTRC
+ file. This command is unbound by default.
+
+'glob-complete-word (M-g)'
+ 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.
+
+'glob-expand-word (C-x *)'
+ 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 '*' is
+ appended before pathname expansion.
+
+'glob-list-expansions (C-x g)'
+ The list of expansions that would have been generated by
+ 'glob-expand-word' is displayed, and the line is redrawn. If a
+ numeric argument is supplied, a '*' is appended before pathname
+ expansion.
+
+'display-shell-version (C-x C-v)'
+ Display version information about the current instance of Bash.
+
+'shell-expand-line (M-C-e)'
+ Expand the line as the shell does. This performs alias and history
+ expansion as well as all of the shell word expansions (*note Shell
+ Expansions::).
+
+'history-expand-line (M-^)'
+ Perform history expansion on the current line.
+
+'magic-space ()'
+ Perform history expansion on the current line and insert a space
+ (*note History Interaction::).
+
+'alias-expand-line ()'
+ Perform alias expansion on the current line (*note Aliases::).
+
+'history-and-alias-expand-line ()'
+ Perform history and alias expansion on the current line.
+
+'insert-last-argument (M-. or M-_)'
+ A synonym for 'yank-last-arg'.
+
+'operate-and-get-next (C-o)'
+ Accept the current line for execution and fetch the next line
+ relative to the current line from the history for editing. A
+ numeric argument, if supplied, specifies the history entry to use
+ instead of the current line.
+
+'edit-and-execute-command (C-x C-e)'
+ Invoke an editor on the current command line, and execute the
+ result as shell commands. Bash attempts to invoke '$VISUAL',
+ '$EDITOR', and 'emacs' as the editor, in that order.
+
+
+File: bashref.info, Node: Readline vi Mode, Next: Programmable Completion, Prev: Bindable Readline Commands, Up: Command Line Editing
+
+8.5 Readline vi Mode
+====================
+
+While the Readline library does not have a full set of 'vi' editing
+functions, it does contain enough to allow simple editing of the line.
+The Readline 'vi' mode behaves as specified in the POSIX standard.
+
+ In order to switch interactively between 'emacs' and 'vi' editing
+modes, use the 'set -o emacs' and 'set -o vi' commands (*note The Set
+Builtin::). The Readline default is 'emacs' mode.
+
+ When you enter a line in 'vi' mode, you are already placed in
+'insertion' mode, as if you had typed an 'i'. Pressing <ESC> switches
+you into 'command' mode, where you can edit the text of the line with
+the standard 'vi' movement keys, move to previous history lines with 'k'
+and subsequent lines with 'j', and so forth.
+
+
+File: bashref.info, Node: Programmable Completion, Next: Programmable Completion Builtins, Prev: Readline vi Mode, Up: Command Line Editing
+
+8.6 Programmable Completion
+===========================
+
+When word completion is attempted for an argument to a command for which
+a completion specification (a COMPSPEC) has been defined using the
+'complete' builtin (*note Programmable Completion Builtins::), the
+programmable completion facilities are invoked.
+
+ First, the command name is identified. If a compspec has been
+defined for that command, the compspec is used to generate the list of
+possible completions for the word. If the command word is the empty
+string (completion attempted at the beginning of an empty line), any
+compspec defined with the '-E' option to 'complete' is used. If the
+command word is a full pathname, a compspec for the full pathname is
+searched for first. If no compspec is found for the full pathname, an
+attempt is made to find a compspec for the portion following the final
+slash. If those searches do not result in a compspec, any compspec
+defined with the '-D' option to 'complete' is used as the default. If
+there is no default compspec, Bash attempts alias expansion on the
+command word as a final resort, and attempts to find a compspec for the
+command word from any successful expansion
+
+ 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 (*note Commands For Completion::) is performed.
+
+ First, the actions specified by the compspec are used. Only matches
+which are prefixed by the word being completed are returned. When the
+'-f' or '-d' option is used for filename or directory name completion,
+the shell variable 'FIGNORE' is used to filter the matches. *Note Bash
+Variables::, for a description of 'FIGNORE'.
+
+ Any completions specified by a filename expansion pattern to the '-G'
+option are generated next. The words generated by the pattern need not
+match the word being completed. The 'GLOBIGNORE' shell variable is not
+used to filter the matches, but the 'FIGNORE' shell variable is used.
+
+ Next, the string specified as the argument to the '-W' option is
+considered. The string is first split using the characters in the 'IFS'
+special variable as delimiters. Shell quoting is honored within the
+string, in order to provide a mechanism for the words to contain shell
+metacharacters or characters in the value of 'IFS'. Each word is then
+expanded using brace expansion, tilde expansion, parameter and variable
+expansion, command substitution, and arithmetic expansion, as described
+above (*note Shell Expansions::). The results are split using the rules
+described above (*note Word Splitting::). The results of the expansion
+are prefix-matched against the word being completed, and the matching
+words become the possible completions.
+
+ After these matches have been generated, any shell function or
+command specified with the '-F' and '-C' options is invoked. When the
+command or function is invoked, the 'COMP_LINE', 'COMP_POINT',
+'COMP_KEY', and 'COMP_TYPE' variables are assigned values as described
+above (*note Bash Variables::). If a shell function is being invoked,
+the 'COMP_WORDS' and 'COMP_CWORD' variables are also set. When the
+function or command is invoked, the first argument ($1) is the name of
+the command whose arguments are being completed, the second argument
+($2) is the word being completed, and the third argument ($3) is the
+word preceding the word being completed on the current command line. No
+filtering of the generated completions against the word being completed
+is performed; the function or command has complete freedom in generating
+the matches.
+
+ Any function specified with '-F' is invoked first. The function may
+use any of the shell facilities, including the 'compgen' and 'compopt'
+builtins described below (*note Programmable Completion Builtins::), to
+generate the matches. It must put the possible completions in the
+'COMPREPLY' array variable, one per array element.
+
+ Next, any command specified with the '-C' option is invoked in an
+environment equivalent to command substitution. It should print a list
+of completions, one per line, to the standard output. Backslash may be
+used to escape a newline, if necessary.
+
+ After all of the possible completions are generated, any filter
+specified with the '-X' option is applied to the list. The filter is a
+pattern as used for pathname expansion; a '&' in the pattern is replaced
+with the text of the word being completed. A literal '&' may be escaped
+with a backslash; the backslash is removed before attempting a match.
+Any completion that matches the pattern will be removed from the list.
+A leading '!' negates the pattern; in this case any completion not
+matching the pattern will be removed. If the 'nocasematch' shell option
+(see the description of 'shopt' in *note The Shopt Builtin::) is
+enabled, the match is performed without regard to the case of alphabetic
+characters.
+
+ Finally, any prefix and suffix specified with the '-P' and '-S'
+options are added to each member of the completion list, and the result
+is returned to the Readline completion code as the list of possible
+completions.
+
+ If the previously-applied actions do not generate any matches, and
+the '-o dirnames' option was supplied to 'complete' when the compspec
+was defined, directory name completion is attempted.
+
+ If the '-o plusdirs' option was supplied to 'complete' when the
+compspec was defined, directory name completion is attempted and any
+matches are added to the results of the other actions.
+
+ By default, if a compspec is found, whatever it generates is returned
+to the completion code as the full set of possible completions. The
+default Bash completions are not attempted, and the Readline default of
+filename completion is disabled. If the '-o bashdefault' option was
+supplied to 'complete' when the compspec was defined, the default Bash
+completions are attempted if the compspec generates no matches. If the
+'-o default' option was supplied to 'complete' when the compspec was
+defined, Readline's default completion will be performed if the compspec
+(and, if attempted, the default Bash completions) generate no matches.
+
+ When a compspec indicates that directory name completion is desired,
+the programmable completion functions force Readline to append a slash
+to completed names which are symbolic links to directories, subject to
+the value of the MARK-DIRECTORIES Readline variable, regardless of the
+setting of the MARK-SYMLINKED-DIRECTORIES Readline variable.
+
+ There is some support for dynamically modifying completions. This is
+most useful when used in combination with a default completion specified
+with '-D'. It's possible for shell functions executed as completion
+handlers to indicate that completion should be retried by returning an
+exit status of 124. If a shell function returns 124, and changes the
+compspec associated with the command on which completion is being
+attempted (supplied as the first argument when the function is
+executed), programmable completion restarts from the beginning, with an
+attempt to find a new compspec for that command. This allows a set of
+completions to be built dynamically as completion is attempted, rather
+than being loaded all at once.
+
+ For instance, assuming that there is a library of compspecs, each
+kept in a file corresponding to the name of the command, the following
+default completion function would load completions dynamically:
+
+ _completion_loader()
+ {
+ . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
+ }
+ complete -D -F _completion_loader -o bashdefault -o default
+
+
+File: bashref.info, Node: Programmable Completion Builtins, Next: A Programmable Completion Example, Prev: Programmable Completion, Up: Command Line Editing
+
+8.7 Programmable Completion Builtins
+====================================
+
+Three builtin commands are available to manipulate the programmable
+completion facilities: one to specify how the arguments to a particular
+command are to be completed, and two to modify the completion as it is
+happening.
+
+'compgen'
+ compgen [OPTION] [WORD]
+
+ Generate possible completion matches for WORD according to the
+ OPTIONs, which may be any option accepted by the 'complete' builtin
+ with the exception of '-p' and '-r', and write the matches to the
+ standard output. When using the '-F' or '-C' options, the various
+ shell variables set by the programmable completion facilities,
+ while available, will not have useful values.
+
+ The matches will be generated in the same way as if the
+ programmable completion code had generated them directly from a
+ completion specification with the same flags. If WORD is
+ specified, only those completions matching WORD will be displayed.
+
+ The return value is true unless an invalid option is supplied, or
+ no matches were generated.
+
+'complete'
+ complete [-abcdefgjksuv] [-o COMP-OPTION] [-DEI] [-A ACTION] [-G GLOBPAT]
+ [-W WORDLIST] [-F FUNCTION] [-C COMMAND] [-X FILTERPAT]
+ [-P PREFIX] [-S SUFFIX] NAME [NAME ...]
+ complete -pr [-DEI] [NAME ...]
+
+ Specify how arguments to each NAME should be completed. If the
+ '-p' option is supplied, or if no options are supplied, existing
+ completion specifications are printed in a way that allows them to
+ be reused as input. The '-r' option removes a completion
+ specification for each NAME, or, if no NAMEs are supplied, all
+ completion specifications. The '-D' option indicates that other
+ supplied options and actions should apply to the "default" command
+ completion; that is, completion attempted on a command for which no
+ completion has previously been defined. The '-E' option indicates
+ that other supplied options and actions should apply to "empty"
+ command completion; that is, completion attempted on a blank line.
+ The '-I' option indicates that other supplied options and actions
+ should apply to completion on the inital non-assignment word on the
+ line, or after a command delimiter such as ';' or '|', which is
+ usually command name completion. If multiple options are supplied,
+ the '-D' option takes precedence over '-E', and both take
+ precedence over '-I'. If any of '-D', '-E', or '-I' are supplied,
+ any other NAME arguments are ignored; these completions only apply
+ to the case specified by the option.
+
+ The process of applying these completion specifications when word
+ completion is attempted is described above (*note Programmable
+ Completion::).
+
+ Other options, if specified, have the following meanings. The
+ arguments to the '-G', '-W', and '-X' options (and, if necessary,
+ the '-P' and '-S' options) should be quoted to protect them from
+ expansion before the 'complete' builtin is invoked.
+
+ '-o COMP-OPTION'
+ The COMP-OPTION controls several aspects of the compspec's
+ behavior beyond the simple generation of completions.
+ COMP-OPTION may be one of:
+
+ 'bashdefault'
+ Perform the rest of the default Bash completions if the
+ compspec generates no matches.
+
+ 'default'
+ Use Readline's default filename completion if the
+ compspec generates no matches.
+
+ 'dirnames'
+ Perform directory name completion if the compspec
+ generates no matches.
+
+ 'filenames'
+ Tell Readline that the compspec generates filenames, so
+ it can perform any filename-specific processing (like
+ adding a slash to directory names, quoting special
+ characters, or suppressing trailing spaces). This option
+ is intended to be used with shell functions specified
+ with '-F'.
+
+ 'noquote'
+ Tell Readline not to quote the completed words if they
+ are filenames (quoting filenames is the default).
+
+ 'nosort'
+ Tell Readline not to sort the list of possible
+ completions alphabetically.
+
+ 'nospace'
+ Tell Readline not to append a space (the default) to
+ words completed at the end of the line.
+
+ 'plusdirs'
+ 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.
+
+ '-A ACTION'
+ The ACTION may be one of the following to generate a list of
+ possible completions:
+
+ 'alias'
+ Alias names. May also be specified as '-a'.
+
+ 'arrayvar'
+ Array variable names.
+
+ 'binding'
+ Readline key binding names (*note Bindable Readline
+ Commands::).
+
+ 'builtin'
+ Names of shell builtin commands. May also be specified
+ as '-b'.
+
+ 'command'
+ Command names. May also be specified as '-c'.
+
+ 'directory'
+ Directory names. May also be specified as '-d'.
+
+ 'disabled'
+ Names of disabled shell builtins.
+
+ 'enabled'
+ Names of enabled shell builtins.
+
+ 'export'
+ Names of exported shell variables. May also be specified
+ as '-e'.
+
+ 'file'
+ File names. May also be specified as '-f'.
+
+ 'function'
+ Names of shell functions.
+
+ 'group'
+ Group names. May also be specified as '-g'.
+
+ 'helptopic'
+ Help topics as accepted by the 'help' builtin (*note Bash
+ Builtins::).
+
+ 'hostname'
+ Hostnames, as taken from the file specified by the
+ 'HOSTFILE' shell variable (*note Bash Variables::).
+
+ 'job'
+ Job names, if job control is active. May also be
+ specified as '-j'.
+
+ 'keyword'
+ Shell reserved words. May also be specified as '-k'.
+
+ 'running'
+ Names of running jobs, if job control is active.
+
+ 'service'
+ Service names. May also be specified as '-s'.
+
+ 'setopt'
+ Valid arguments for the '-o' option to the 'set' builtin
+ (*note The Set Builtin::).
+
+ 'shopt'
+ Shell option names as accepted by the 'shopt' builtin
+ (*note Bash Builtins::).
+
+ 'signal'
+ Signal names.
+
+ 'stopped'
+ Names of stopped jobs, if job control is active.
+
+ 'user'
+ User names. May also be specified as '-u'.
+
+ 'variable'
+ Names of all shell variables. May also be specified as
+ '-v'.
+
+ '-C COMMAND'
+ COMMAND is executed in a subshell environment, and its output
+ is used as the possible completions.
+
+ '-F FUNCTION'
+ The shell function FUNCTION is executed in the current shell
+ environment. When it is executed, $1 is the name of the
+ command whose arguments are being completed, $2 is the word
+ being completed, and $3 is the word preceding the word being
+ completed, as described above (*note Programmable
+ Completion::). When it finishes, the possible completions are
+ retrieved from the value of the 'COMPREPLY' array variable.
+
+ '-G GLOBPAT'
+ The filename expansion pattern GLOBPAT is expanded to generate
+ the possible completions.
+
+ '-P PREFIX'
+ PREFIX is added at the beginning of each possible completion
+ after all other options have been applied.
+
+ '-S SUFFIX'
+ SUFFIX is appended to each possible completion after all other
+ options have been applied.
+
+ '-W WORDLIST'
+ The WORDLIST is split using the characters in the 'IFS'
+ special variable as delimiters, and each resultant word is
+ expanded. The possible completions are the members of the
+ resultant list which match the word being completed.
+
+ '-X FILTERPAT'
+ FILTERPAT 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
+ FILTERPAT is removed from the list. A leading '!' in
+ FILTERPAT negates the pattern; in this case, any completion
+ not matching FILTERPAT is removed.
+
+ The return value is true unless an invalid option is supplied, an
+ option other than '-p' or '-r' is supplied without a NAME argument,
+ an attempt is made to remove a completion specification for a NAME
+ for which no specification exists, or an error occurs adding a
+ completion specification.
+
+'compopt'
+ compopt [-o OPTION] [-DEI] [+o OPTION] [NAME]
+ Modify completion options for each NAME according to the OPTIONs,
+ or for the currently-executing completion if no NAMEs are supplied.
+ If no OPTIONs are given, display the completion options for each
+ NAME or the current completion. The possible values of OPTION are
+ those valid for the 'complete' builtin described above. The '-D'
+ option indicates that other supplied options should apply to the
+ "default" command completion; that is, completion attempted on a
+ command for which no completion has previously been defined. The
+ '-E' option indicates that other supplied options should apply to
+ "empty" command completion; that is, completion attempted on a
+ blank line. The '-I' option indicates that other supplied options
+ should apply to completion on the inital non-assignment word on the
+ line, or after a command delimiter such as ';' or '|', which is
+ usually command name completion.
+
+ If multiple options are supplied, the '-D' option takes precedence
+ over '-E', and both take precedence over '-I'
+
+ The return value is true unless an invalid option is supplied, an
+ attempt is made to modify the options for a NAME for which no
+ completion specification exists, or an output error occurs.
+
+
+File: bashref.info, Node: A Programmable Completion Example, Prev: Programmable Completion Builtins, Up: Command Line Editing
+
+8.8 A Programmable Completion Example
+=====================================
+
+The most common way to obtain additional completion functionality beyond
+the default actions 'complete' and 'compgen' provide is to use a shell
+function and bind it to a particular command using 'complete -F'.
+
+ The following function provides completions for the 'cd' builtin. It
+is a reasonably good example of what shell functions must do when used
+for completion. This function uses the word passed as '$2' to determine
+the directory name to complete. You can also use the 'COMP_WORDS' array
+variable; the current word is indexed by the 'COMP_CWORD' variable.
+
+ The function relies on the 'complete' and 'compgen' builtins to do
+much of the work, adding only the things that the Bash 'cd' does beyond
+accepting basic directory names: tilde expansion (*note Tilde
+Expansion::), searching directories in $CDPATH, which is described above
+(*note Bourne Shell Builtins::), and basic support for the 'cdable_vars'
+shell option (*note The Shopt Builtin::). '_comp_cd' modifies the value
+of IFS so that it contains only a newline to accommodate file names
+containing spaces and tabs - 'compgen' prints the possible completions
+it generates one per line.
+
+ Possible completions go into the COMPREPLY array variable, one
+completion per array element. The programmable completion system
+retrieves the completions from there when the function returns.
+
+ # A completion function for the cd builtin
+ # based on the cd completion function from the bash_completion package
+ _comp_cd()
+ {
+ local IFS=$' \t\n' # normalize IFS
+ local cur _skipdot _cdpath
+ local i j k
+
+ # Tilde expansion, which also expands tilde to full pathname
+ case "$2" in
+ \~*) eval cur="$2" ;;
+ *) cur=$2 ;;
+ esac
+
+ # no cdpath or absolute pathname -- straight directory completion
+ if [[ -z "${CDPATH:-}" ]] || [[ "$cur" == @(./*|../*|/*) ]]; then
+ # compgen prints paths one per line; could also use while loop
+ IFS=$'\n'
+ COMPREPLY=( $(compgen -d -- "$cur") )
+ IFS=$' \t\n'
+ # CDPATH+directories in the current directory if not in CDPATH
+ else
+ IFS=$'\n'
+ _skipdot=false
+ # preprocess CDPATH to convert null directory names to .
+ _cdpath=${CDPATH/#:/.:}
+ _cdpath=${_cdpath//::/:.:}
+ _cdpath=${_cdpath/%:/:.}
+ for i in ${_cdpath//:/$'\n'}; do
+ if [[ $i -ef . ]]; then _skipdot=true; fi
+ k="${#COMPREPLY[@]}"
+ for j in $( compgen -d -- "$i/$cur" ); do
+ COMPREPLY[k++]=${j#$i/} # cut off directory
+ done
+ done
+ $_skipdot || COMPREPLY+=( $(compgen -d -- "$cur") )
+ IFS=$' \t\n'
+ fi
+
+ # variable names if appropriate shell option set and no completions
+ if shopt -q cdable_vars && [[ ${#COMPREPLY[@]} -eq 0 ]]; then
+ COMPREPLY=( $(compgen -v -- "$cur") )
+ fi
+
+ return 0
+ }
+
+ We install the completion function using the '-F' option to
+'complete':
+
+ # Tell readline to quote appropriate and append slashes to directories;
+ # use the bash default completion for other arguments
+ complete -o filenames -o nospace -o bashdefault -F _comp_cd cd
+
+Since we'd like Bash and Readline to take care of some of the other
+details for us, we use several other options to tell Bash and Readline
+what to do. The '-o filenames' option tells Readline that the possible
+completions should be treated as filenames, and quoted appropriately.
+That option will also cause Readline to append a slash to filenames it
+can determine are directories (which is why we might want to extend
+'_comp_cd' to append a slash if we're using directories found via
+CDPATH: Readline can't tell those completions are directories). The '-o
+nospace' option tells Readline to not append a space character to the
+directory name, in case we want to append to it. The '-o bashdefault'
+option brings in the rest of the "Bash default" completions - possible
+completion that Bash adds to the default Readline set. These include
+things like command name completion, variable completion for words
+beginning with '{', completions containing pathname expansion patterns
+(*note Filename Expansion::), and so on.
+
+ Once installed using 'complete', '_comp_cd' will be called every time
+we attempt word completion for a 'cd' command.
+
+ Many more examples - an extensive collection of completions for most
+of the common GNU, Unix, and Linux commands - are available as part of
+the bash_completion project. This is installed by default on many
+GNU/Linux distributions. Originally written by Ian Macdonald, the
+project now lives at <http://bash-completion.alioth.debian.org/>. There
+are ports for other systems such as Solaris and Mac OS X.
+
+ An older version of the bash_completion package is distributed with
+bash in the 'examples/complete' subdirectory.
+
+
+File: bashref.info, Node: Using History Interactively, Next: Installing Bash, Prev: Command Line Editing, Up: Top
+
+9 Using History Interactively
+*****************************
+
+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.
+
+* Menu:
+
+* Bash History Facilities:: How Bash lets you manipulate your command
+ history.
+* Bash History Builtins:: The Bash builtin commands that manipulate
+ the command history.
+* History Interaction:: What it feels like using History as a user.
+
+
+File: bashref.info, Node: Bash History Facilities, Next: Bash History Builtins, Up: Using History Interactively
+
+9.1 Bash History Facilities
+===========================
+
+When the '-o history' option to the 'set' builtin is enabled (*note The
+Set Builtin::), the shell provides access to the "command history", the
+list of commands previously typed. The value of the 'HISTSIZE' shell
+variable is used as the number of commands to save in a history list.
+The text of the last '$HISTSIZE' commands (default 500) is saved. The
+shell stores each command in the history list prior to parameter and
+variable expansion but after history expansion is performed, subject to
+the values of the shell variables 'HISTIGNORE' and 'HISTCONTROL'.
+
+ When the shell starts up, the history is initialized from the file
+named by the 'HISTFILE' variable (default '~/.bash_history'). The file
+named by the value of 'HISTFILE' is truncated, if necessary, to contain
+no more than the number of lines specified by the value of the
+'HISTFILESIZE' variable. When a shell with history enabled exits, the
+last '$HISTSIZE' lines are copied from the history list to the file
+named by '$HISTFILE'. If the 'histappend' shell option is set (*note
+Bash Builtins::), the lines are appended to the history file, otherwise
+the history file is overwritten. If 'HISTFILE' is unset, or if the
+history file is unwritable, the history is not saved. After saving the
+history, the history file is truncated to contain no more than
+'$HISTFILESIZE' lines. If 'HISTFILESIZE' is unset, or set to null, a
+non-numeric value, or a numeric value less than zero, the history file
+is not truncated.
+
+ If the 'HISTTIMEFORMAT' is set, the time stamp information associated
+with each history entry is written to the history file, marked with the
+history comment character. When the history file is read, lines
+beginning with the history comment character followed immediately by a
+digit are interpreted as timestamps for the following history entry.
+
+ The builtin command 'fc' may be used to list or edit and re-execute a
+portion of the history list. The 'history' builtin may be used to
+display or modify the history list and manipulate the history file.
+When using command-line editing, search commands are available in each
+editing mode that provide access to the history list (*note Commands For
+History::).
+
+ The shell allows control over which commands are saved on the history
+list. The 'HISTCONTROL' and 'HISTIGNORE' variables may be set to cause
+the shell to save only a subset of the commands entered. The 'cmdhist'
+shell option, if enabled, causes the shell to attempt to save each line
+of a multi-line command in the same history entry, adding semicolons
+where necessary to preserve syntactic correctness. The 'lithist' shell
+option causes the shell to save the command with embedded newlines
+instead of semicolons. The 'shopt' builtin is used to set these
+options. *Note The Shopt Builtin::, for a description of 'shopt'.
+
+
+File: bashref.info, Node: Bash History Builtins, Next: History Interaction, Prev: Bash History Facilities, Up: Using History Interactively
+
+9.2 Bash History Builtins
+=========================
+
+Bash provides two builtin commands which manipulate the history list and
+history file.
+
+'fc'
+ fc [-e ENAME] [-lnr] [FIRST] [LAST]
+ fc -s [PAT=REP] [COMMAND]
+
+ The first form selects a range of commands from FIRST to LAST from
+ the history list and displays or edits and re-executes them. Both
+ FIRST and LAST may be specified as a string (to locate the most
+ recent command beginning with that string) or as a number (an index
+ into the history list, where a negative number is used as an offset
+ from the current command number). If LAST is not specified, it is
+ set to FIRST. If FIRST is not specified, it is set to the previous
+ command for editing and -16 for listing. If the '-l' flag is
+ given, the commands are listed on standard output. The '-n' flag
+ suppresses the command numbers when listing. The '-r' flag
+ reverses the order of the listing. Otherwise, the editor given by
+ ENAME is invoked on a file containing those commands. If ENAME is
+ not given, the value of the following variable expansion is used:
+ '${FCEDIT:-${EDITOR:-vi}}'. This says to use the value of the
+ 'FCEDIT' variable if set, or the value of the 'EDITOR' variable if
+ that is set, or 'vi' if neither is set. When editing is complete,
+ the edited commands are echoed and executed.
+
+ In the second form, COMMAND is re-executed after each instance of
+ PAT in the selected command is replaced by REP. COMMAND is
+ intepreted the same as FIRST above.
+
+ A useful alias to use with the 'fc' command is 'r='fc -s'', so that
+ typing 'r cc' runs the last command beginning with 'cc' and typing
+ 'r' re-executes the last command (*note Aliases::).
+
+'history'
+ history [N]
+ history -c
+ history -d OFFSET
+ history -d START-END
+ history [-anrw] [FILENAME]
+ history -ps ARG
+
+ With no options, display the history list with line numbers. Lines
+ prefixed with a '*' have been modified. An argument of N lists
+ only the last N lines. If the shell variable 'HISTTIMEFORMAT' is
+ set and not null, it is used as a format string for STRFTIME to
+ display the time stamp associated with each displayed history
+ entry. No intervening blank is printed between the formatted time
+ stamp and the history line.
+
+ Options, if supplied, have the following meanings:
+
+ '-c'
+ Clear the history list. This may be combined with the other
+ options to replace the history list completely.
+
+ '-d OFFSET'
+ Delete the history entry at position OFFSET. If OFFSET is
+ positive, it should be specified as it appears when the
+ history is displayed. If OFFSET is negative, it is
+ interpreted as relative to one greater than the last history
+ position, so negative indices count back from the end of the
+ history, and an index of '-1' refers to the current 'history
+ -d' command.
+
+ '-d START-END'
+ Delete the history entries between positions START and END,
+ inclusive. Positive and negative values for START and END are
+ interpreted as described above.
+
+ '-a'
+ Append the new history lines to the history file. These are
+ history lines entered since the beginning of the current Bash
+ session, but not already appended to the history file.
+
+ '-n'
+ 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.
+
+ '-r'
+ Read the history file and append its contents to the history
+ list.
+
+ '-w'
+ Write out the current history list to the history file.
+
+ '-p'
+ Perform history substitution on the ARGs and display the
+ result on the standard output, without storing the results in
+ the history list.
+
+ '-s'
+ The ARGs are added to the end of the history list as a single
+ entry.
+
+ When any of the '-w', '-r', '-a', or '-n' options is used, if
+ FILENAME is given, then it is used as the history file. If not,
+ then the value of the 'HISTFILE' variable is used.
+
+
+File: bashref.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively
+
+9.3 History Expansion
+=====================
+
+The History library provides a history expansion feature that is similar
+to the history expansion provided by 'csh'. This section describes the
+syntax used to manipulate the history information.
+
+ History expansions introduce words from the history list into the
+input stream, making it easy to repeat commands, insert the arguments to
+a previous command into the current input line, or fix errors in
+previous commands quickly.
+
+ History expansion is performed immediately after a complete line is
+read, before the shell breaks it into words, and is performed on each
+line individually. Bash attempts to inform the history expansion
+functions about quoting still in effect from previous lines.
+
+ History expansion takes place in two parts. The first is to
+determine which line from the history list should be used during
+substitution. The second is to select portions of that line for
+inclusion into the current one. The line selected from the history is
+called the "event", and the portions of that line that are acted upon
+are called "words". Various "modifiers" are available to manipulate the
+selected words. The line is broken into words in the same fashion that
+Bash does, so that several words surrounded by quotes are considered one
+word. History expansions are introduced by the appearance of the
+history expansion character, which is '!' by default.
+
+ History expansion implements shell-like quoting conventions: a
+backslash can be used to remove the special handling for the next
+character; single quotes enclose verbatim sequences of characters, and
+can be used to inhibit history expansion; and characters enclosed within
+double quotes may be subject to history expansion, since backslash can
+escape the history expansion character, but single quotes may not, since
+they are not treated specially within double quotes.
+
+ When using the shell, only '\' and ''' may be used to escape the
+history expansion character, but the history expansion character is also
+treated as quoted if it immediately precedes the closing double quote in
+a double-quoted string.
+
+ Several shell options settable with the 'shopt' builtin (*note The
+Shopt Builtin::) may be used to tailor the behavior of history
+expansion. If the 'histverify' shell option is enabled, and Readline is
+being used, history substitutions are not immediately passed to the
+shell parser. Instead, the expanded line is reloaded into the Readline
+editing buffer for further modification. If Readline is being used, and
+the 'histreedit' shell option is enabled, a failed history expansion
+will be reloaded into the Readline editing buffer for correction. The
+'-p' option to the 'history' builtin command may be used to see what a
+history expansion will do before using it. The '-s' option to the
+'history' builtin may be used to add commands to the end of the history
+list without actually executing them, so that they are available for
+subsequent recall. This is most useful in conjunction with Readline.
+
+ The shell allows control of the various characters used by the
+history expansion mechanism with the 'histchars' variable, as explained
+above (*note Bash Variables::). The shell uses the history comment
+character to mark history timestamps when writing the history file.
+
+* Menu:
+
+* Event Designators:: How to specify which history line to use.
+* Word Designators:: Specifying which words are of interest.
+* Modifiers:: Modifying the results of substitution.
+
+
+File: bashref.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
+
+9.3.1 Event Designators
+-----------------------
+
+An event designator is a reference to a command line entry in the
+history list. Unless the reference is absolute, events are relative to
+the current position in the history list.
+
+'!'
+ Start a history substitution, except when followed by a space, tab,
+ the end of the line, '=' or '(' (when the 'extglob' shell option is
+ enabled using the 'shopt' builtin).
+
+'!N'
+ Refer to command line N.
+
+'!-N'
+ Refer to the command N lines back.
+
+'!!'
+ Refer to the previous command. This is a synonym for '!-1'.
+
+'!STRING'
+ Refer to the most recent command preceding the current position in
+ the history list starting with STRING.
+
+'!?STRING[?]'
+ Refer to the most recent command preceding the current position in
+ the history list containing STRING. The trailing '?' may be
+ omitted if the STRING is followed immediately by a newline.
+
+'^STRING1^STRING2^'
+ Quick Substitution. Repeat the last command, replacing STRING1
+ with STRING2. Equivalent to '!!:s/STRING1/STRING2/'.
+
+'!#'
+ The entire command line typed so far.
+
+
+File: bashref.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
+
+9.3.2 Word Designators
+----------------------
+
+Word designators are used to select desired words from the event. A ':'
+separates the event specification from the word designator. It may be
+omitted if the word designator begins with a '^', '$', '*', '-', or '%'.
+Words are numbered from the beginning of the line, with the first word
+being denoted by 0 (zero). Words are inserted into the current line
+separated by single spaces.
+
+ For example,
+
+'!!'
+ designates the preceding command. When you type this, the
+ preceding command is repeated in toto.
+
+'!!:$'
+ designates the last argument of the preceding command. This may be
+ shortened to '!$'.
+
+'!fi:2'
+ designates the second argument of the most recent command starting
+ with the letters 'fi'.
+
+ Here are the word designators:
+
+'0 (zero)'
+ The '0'th word. For many applications, this is the command word.
+
+'N'
+ The Nth word.
+
+'^'
+ The first argument; that is, word 1.
+
+'$'
+ The last argument.
+
+'%'
+ The word matched by the most recent '?STRING?' search.
+
+'X-Y'
+ A range of words; '-Y' abbreviates '0-Y'.
+
+'*'
+ All of the words, except the '0'th. This is a synonym for '1-$'.
+ It is not an error to use '*' if there is just one word in the
+ event; the empty string is returned in that case.
+
+'X*'
+ Abbreviates 'X-$'
+
+'X-'
+ Abbreviates 'X-$' like 'X*', but omits the last word.
+
+ If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+
+File: bashref.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
+
+9.3.3 Modifiers
+---------------
+
+After the optional word designator, you can add a sequence of one or
+more of the following modifiers, each preceded by a ':'.
+
+'h'
+ Remove a trailing pathname component, leaving only the head.
+
+'t'
+ Remove all leading pathname components, leaving the tail.
+
+'r'
+ Remove a trailing suffix of the form '.SUFFIX', leaving the
+ basename.
+
+'e'
+ Remove all but the trailing suffix.
+
+'p'
+ Print the new command but do not execute it.
+
+'q'
+ Quote the substituted words, escaping further substitutions.
+
+'x'
+ Quote the substituted words as with 'q', but break into words at
+ spaces, tabs, and newlines.
+
+'s/OLD/NEW/'
+ Substitute NEW for the first occurrence of OLD in the event line.
+ Any delimiter may be used in place of '/'. The delimiter may be
+ quoted in OLD and NEW with a single backslash. If '&' appears in
+ NEW, it is replaced by OLD. A single backslash will quote the '&'.
+ The final delimiter is optional if it is the last character on the
+ input line.
+
+'&'
+ Repeat the previous substitution.
+
+'g'
+'a'
+ Cause changes to be applied over the entire event line. Used in
+ conjunction with 's', as in 'gs/OLD/NEW/', or with '&'.
+
+'G'
+ Apply the following 's' modifier once to each word in the event.
+
+
+File: bashref.info, Node: Installing Bash, Next: Reporting Bugs, Prev: Using History Interactively, Up: Top
+
+10 Installing Bash
+******************
+
+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.
+
+* Menu:
+
+* Basic Installation:: Installation instructions.
+* Compilers and Options:: How to set special options for various
+ systems.
+* Compiling For Multiple Architectures:: How to compile Bash for more
+ than one kind of system from
+ the same source tree.
+* Installation Names:: How to set the various paths used by the installation.
+* Specifying the System Type:: How to configure Bash for a particular system.
+* Sharing Defaults:: How to share default configuration values among GNU
+ programs.
+* Operation Controls:: Options recognized by the configuration program.
+* Optional Features:: How to enable and disable optional features when
+ building Bash.
+
+
+File: bashref.info, Node: Basic Installation, Next: Compilers and Options, Up: Installing Bash
+
+10.1 Basic Installation
+=======================
+
+These are installation instructions for Bash.
+
+ The simplest way to compile Bash is:
+
+ 1. 'cd' to the directory containing the source code and type
+ './configure' to configure Bash for your system. If you're using
+ 'csh' on an old version of System V, you might need to type 'sh
+ ./configure' instead to prevent 'csh' from trying to execute
+ 'configure' itself.
+
+ Running 'configure' takes some time. While running, it prints
+ messages telling which features it is checking for.
+
+ 2. Type 'make' to compile Bash and build the 'bashbug' bug reporting
+ script.
+
+ 3. Optionally, type 'make tests' to run the Bash test suite.
+
+ 4. Type 'make install' to install 'bash' and 'bashbug'. This will
+ also install the manual pages and Info file.
+
+ The 'configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a 'Makefile' in each directory of the package
+(the top directory, the 'builtins', 'doc', and 'support' directories,
+each directory under 'lib', and several others). It also creates a
+'config.h' file containing system-dependent definitions. Finally, it
+creates a shell script named 'config.status' that you can run in the
+future to recreate the current configuration, a file 'config.cache' that
+saves the results of its tests to speed up reconfiguring, and a file
+'config.log' containing compiler output (useful mainly for debugging
+'configure'). If at some point 'config.cache' contains results you
+don't want to keep, you may remove or edit it.
+
+ To find out more about the options and arguments that the 'configure'
+script understands, type
+
+ bash-4.2$ ./configure --help
+
+at the Bash prompt in your Bash source directory.
+
+ If you want to build Bash in a directory separate from the source
+directory - to build for multiple architectures, for example - just use
+the full path to the configure script. The following commands will
+build bash in a directory under '/usr/local/build' from the source code
+in '/usr/local/src/bash-4.4':
+
+ mkdir /usr/local/build/bash-4.4
+ cd /usr/local/build/bash-4.4
+ bash /usr/local/src/bash-4.4/configure
+ make
+
+ See *note Compiling For Multiple Architectures:: for more information
+about building in a directory separate from the source.
+
+ If you need to do unusual things to compile Bash, please try to
+figure out how 'configure' could check whether or not to do them, and
+mail diffs or instructions to <bash-maintainers@gnu.org> so they can be
+considered for the next release.
+
+ The file 'configure.ac' is used to create 'configure' by a program
+called Autoconf. You only need 'configure.ac' if you want to change it
+or regenerate 'configure' using a newer version of Autoconf. If you do
+this, make sure you are using Autoconf version 2.50 or newer.
+
+ You can remove the program binaries and object files from the source
+code directory by typing 'make clean'. To also remove the files that
+'configure' created (so you can compile Bash for a different kind of
+computer), type 'make distclean'.
+
+
+File: bashref.info, Node: Compilers and Options, Next: Compiling For Multiple Architectures, Prev: Basic Installation, Up: Installing Bash
+
+10.2 Compilers and Options
+==========================
+
+Some systems require unusual options for compilation or linking that the
+'configure' script does not know about. You can give 'configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+ On systems that have the 'env' program, you can do it like this:
+
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+ The configuration process uses GCC to build Bash if it is available.
+
+
+File: bashref.info, Node: Compiling For Multiple Architectures, Next: Installation Names, Prev: Compilers and Options, Up: Installing Bash
+
+10.3 Compiling For Multiple Architectures
+=========================================
+
+You can compile Bash for more than one kind of computer at the same
+time, by placing the object files for each architecture in their own
+directory. To do this, you must use a version of 'make' that supports
+the 'VPATH' variable, such as GNU 'make'. 'cd' to the directory where
+you want the object files and executables to go and run the 'configure'
+script from the source directory (*note Basic Installation::). You may
+need to supply the '--srcdir=PATH' argument to tell 'configure' where
+the source files are. 'configure' automatically checks for the source
+code in the directory that 'configure' is in and in '..'.
+
+ If you have to use a 'make' that does not supports the 'VPATH'
+variable, you can compile Bash for one architecture at a time in the
+source code directory. After you have installed Bash for one
+architecture, use 'make distclean' before reconfiguring for another
+architecture.
+
+ Alternatively, if your system supports symbolic links, you can use
+the 'support/mkclone' script to create a build tree which has symbolic
+links back to each file in the source directory. Here's an example that
+creates a build directory in the current directory from a source
+directory '/usr/gnu/src/bash-2.0':
+
+ bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+
+The 'mkclone' script requires Bash, so you must have already built Bash
+for at least one architecture before you can create build directories
+for other architectures.
+
+
+File: bashref.info, Node: Installation Names, Next: Specifying the System Type, Prev: Compiling For Multiple Architectures, Up: Installing Bash
+
+10.4 Installation Names
+=======================
+
+By default, 'make install' will install into '/usr/local/bin',
+'/usr/local/man', etc. You can specify an installation prefix other
+than '/usr/local' by giving 'configure' the option '--prefix=PATH', or
+by specifying a value for the 'DESTDIR' 'make' variable when running
+'make install'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give 'configure' the option '--exec-prefix=PATH', 'make install' will
+use PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+
+File: bashref.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash
+
+10.5 Specifying the System Type
+===============================
+
+There may be some features 'configure' can not figure out automatically,
+but need to determine by the type of host Bash will run on. Usually
+'configure' can figure that out, but if it prints a message saying it
+can not guess the host type, give it the '--host=TYPE' option. 'TYPE'
+can either be a short name for the system type, such as 'sun4', or a
+canonical name with three fields: 'CPU-COMPANY-SYSTEM' (e.g.,
+'i386-unknown-freebsd4.2').
+
+ See the file 'support/config.sub' for the possible values of each
+field.
+
+
+File: bashref.info, Node: Sharing Defaults, Next: Operation Controls, Prev: Specifying the System Type, Up: Installing Bash
+
+10.6 Sharing Defaults
+=====================
+
+If you want to set default values for 'configure' scripts to share, you
+can create a site shell script called 'config.site' that gives default
+values for variables like 'CC', 'cache_file', and 'prefix'. 'configure'
+looks for 'PREFIX/share/config.site' if it exists, then
+'PREFIX/etc/config.site' if it exists. Or, you can set the
+'CONFIG_SITE' environment variable to the location of the site script.
+A warning: the Bash 'configure' looks for a site script, but not all
+'configure' scripts do.
+
+
+File: bashref.info, Node: Operation Controls, Next: Optional Features, Prev: Sharing Defaults, Up: Installing Bash
+
+10.7 Operation Controls
+=======================
+
+'configure' recognizes the following options to control how it operates.
+
+'--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ './config.cache'. Set FILE to '/dev/null' to disable caching, for
+ debugging 'configure'.
+
+'--help'
+ Print a summary of the options to 'configure', and exit.
+
+'--quiet'
+'--silent'
+'-q'
+ Do not print messages saying which checks are being made.
+
+'--srcdir=DIR'
+ Look for the Bash source code in directory DIR. Usually
+ 'configure' can determine that directory automatically.
+
+'--version'
+ Print the version of Autoconf used to generate the 'configure'
+ script, and exit.
+
+ 'configure' also accepts some other, not widely used, boilerplate
+options. 'configure --help' prints the complete list.
+
+
+File: bashref.info, Node: Optional Features, Prev: Operation Controls, Up: Installing Bash
+
+10.8 Optional Features
+======================
+
+The Bash 'configure' has a number of '--enable-FEATURE' options, where
+FEATURE indicates an optional part of Bash. There are also several
+'--with-PACKAGE' options, where PACKAGE is something like 'bash-malloc'
+or 'purify'. To turn off the default use of a package, use
+'--without-PACKAGE'. To configure Bash without a feature that is
+enabled by default, use '--disable-FEATURE'.
+
+ Here is a complete list of the '--enable-' and '--with-' options that
+the Bash 'configure' recognizes.
+
+'--with-afs'
+ Define if you are using the Andrew File System from Transarc.
+
+'--with-bash-malloc'
+ Use the Bash version of 'malloc' in the directory 'lib/malloc'.
+ This is not the same 'malloc' that appears in GNU libc, but an
+ older version originally derived from the 4.2 BSD 'malloc'. This
+ 'malloc' is very fast, but wastes some space on each allocation.
+ This option is enabled by default. The 'NOTES' file contains a
+ list of systems for which this should be turned off, and
+ 'configure' disables this option automatically for a number of
+ systems.
+
+'--with-curses'
+ Use the curses library instead of the termcap library. This should
+ be supplied if your system has an inadequate or incomplete termcap
+ database.
+
+'--with-gnu-malloc'
+ A synonym for '--with-bash-malloc'.
+
+'--with-installed-readline[=PREFIX]'
+ Define this to make Bash link with a locally-installed version of
+ Readline rather than the version in 'lib/readline'. This works
+ only with Readline 5.0 and later versions. If PREFIX is 'yes' or
+ not supplied, 'configure' uses the values of the make variables
+ 'includedir' and 'libdir', which are subdirectories of 'prefix' by
+ default, to find the installed version of Readline if it is not in
+ the standard system include and library directories. If PREFIX is
+ 'no', Bash links with the version in 'lib/readline'. If PREFIX is
+ set to any other value, 'configure' treats it as a directory
+ pathname and looks for the installed version of Readline in
+ subdirectories of that directory (include files in PREFIX/'include'
+ and the library in PREFIX/'lib').
+
+'--with-purify'
+ Define this to use the Purify memory allocation checker from
+ Rational Software.
+
+'--enable-minimal-config'
+ This produces a shell with minimal features, close to the
+ historical Bourne shell.
+
+ There are several '--enable-' options that alter how Bash is compiled
+and linked, rather than changing run-time features.
+
+'--enable-largefile'
+ Enable support for large files
+ (http://www.unix.org/version2/whatsnew/lfs20mar.html) 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.
+
+'--enable-profiling'
+ This builds a Bash binary that produces profiling information to be
+ processed by 'gprof' each time it is executed.
+
+'--enable-static-link'
+ This causes Bash to be linked statically, if 'gcc' is being used.
+ This could be used to build a version to use as root's shell.
+
+ The 'minimal-config' option can be used to disable all of the
+following options, but it is processed first, so individual options may
+be enabled using 'enable-FEATURE'.
+
+ All of the following options except for 'disabled-builtins',
+'direxpand-default', and 'xpg-echo-default' are enabled by default,
+unless the operating system does not provide the necessary support.
+
+'--enable-alias'
+ Allow alias expansion and include the 'alias' and 'unalias'
+ builtins (*note Aliases::).
+
+'--enable-arith-for-command'
+ Include support for the alternate form of the 'for' command that
+ behaves like the C language 'for' statement (*note Looping
+ Constructs::).
+
+'--enable-array-variables'
+ Include support for one-dimensional array shell variables (*note
+ Arrays::).
+
+'--enable-bang-history'
+ Include support for 'csh'-like history substitution (*note History
+ Interaction::).
+
+'--enable-brace-expansion'
+ Include 'csh'-like brace expansion ( 'b{a,b}c' ==> 'bac bbc' ).
+ See *note Brace Expansion::, for a complete description.
+
+'--enable-casemod-attributes'
+ Include support for case-modifying attributes in the 'declare'
+ builtin and assignment statements. Variables with the UPPERCASE
+ attribute, for example, will have their values converted to
+ uppercase upon assignment.
+
+'--enable-casemod-expansion'
+ Include support for case-modifying word expansions.
+
+'--enable-command-timing'
+ Include support for recognizing 'time' as a reserved word and for
+ displaying timing statistics for the pipeline following 'time'
+ (*note Pipelines::). This allows pipelines as well as shell
+ builtins and functions to be timed.
+
+'--enable-cond-command'
+ Include support for the '[[' conditional command. (*note
+ Conditional Constructs::).
+
+'--enable-cond-regexp'
+ Include support for matching POSIX regular expressions using the
+ '=~' binary operator in the '[[' conditional command. (*note
+ Conditional Constructs::).
+
+'--enable-coprocesses'
+ Include support for coprocesses and the 'coproc' reserved word
+ (*note Pipelines::).
+
+'--enable-debugger'
+ Include support for the bash debugger (distributed separately).
+
+'--enable-dev-fd-stat-broken'
+ If calling 'stat' on /dev/fd/N returns different results than
+ calling 'fstat' on file descriptor N, supply this option to enable
+ a workaround. This has implications for conditional commands that
+ test file attributes.
+
+'--enable-direxpand-default'
+ Cause the 'direxpand' shell option (*note The Shopt Builtin::) to
+ be enabled by default when the shell starts. It is normally
+ disabled by default.
+
+'--enable-directory-stack'
+ Include support for a 'csh'-like directory stack and the 'pushd',
+ 'popd', and 'dirs' builtins (*note The Directory Stack::).
+
+'--enable-disabled-builtins'
+ Allow builtin commands to be invoked via 'builtin xxx' even after
+ 'xxx' has been disabled using 'enable -n xxx'. See *note Bash
+ Builtins::, for details of the 'builtin' and 'enable' builtin
+ commands.
+
+'--enable-dparen-arithmetic'
+ Include support for the '((...))' command (*note Conditional
+ Constructs::).
+
+'--enable-extended-glob'
+ Include support for the extended pattern matching features
+ described above under *note Pattern Matching::.
+
+'--enable-extended-glob-default'
+ Set the default value of the EXTGLOB shell option described above
+ under *note The Shopt Builtin:: to be enabled.
+
+'--enable-function-import'
+ Include support for importing function definitions exported by
+ another instance of the shell from the environment. This option is
+ enabled by default.
+
+'--enable-glob-asciirange-default'
+ Set the default value of the GLOBASCIIRANGES shell option described
+ above under *note The Shopt Builtin:: to be enabled. This controls
+ the behavior of character ranges when used in pattern matching
+ bracket expressions.
+
+'--enable-help-builtin'
+ Include the 'help' builtin, which displays help on shell builtins
+ and variables (*note Bash Builtins::).
+
+'--enable-history'
+ Include command history and the 'fc' and 'history' builtin commands
+ (*note Bash History Facilities::).
+
+'--enable-job-control'
+ This enables the job control features (*note Job Control::), if the
+ operating system supports them.
+
+'--enable-multibyte'
+ This enables support for multibyte characters if the operating
+ system provides the necessary support.
+
+'--enable-net-redirections'
+ This enables the special handling of filenames of the form
+ '/dev/tcp/HOST/PORT' and '/dev/udp/HOST/PORT' when used in
+ redirections (*note Redirections::).
+
+'--enable-process-substitution'
+ This enables process substitution (*note Process Substitution::) if
+ the operating system provides the necessary support.
+
+'--enable-progcomp'
+ Enable the programmable completion facilities (*note Programmable
+ Completion::). If Readline is not enabled, this option has no
+ effect.
+
+'--enable-prompt-string-decoding'
+ Turn on the interpretation of a number of backslash-escaped
+ characters in the '$PS0', '$PS1', '$PS2', and '$PS4' prompt
+ strings. See *note Controlling the Prompt::, for a complete list
+ of prompt string escape sequences.
+
+'--enable-readline'
+ Include support for command-line editing and history with the Bash
+ version of the Readline library (*note Command Line Editing::).
+
+'--enable-restricted'
+ Include support for a "restricted shell". If this is enabled,
+ Bash, when called as 'rbash', enters a restricted mode. See *note
+ The Restricted Shell::, for a description of restricted mode.
+
+'--enable-select'
+ Include the 'select' compound command, which allows the generation
+ of simple menus (*note Conditional Constructs::).
+
+'--enable-separate-helpfiles'
+ Use external files for the documentation displayed by the 'help'
+ builtin instead of storing the text internally.
+
+'--enable-single-help-strings'
+ Store the text displayed by the 'help' builtin as a single string
+ for each help topic. This aids in translating the text to
+ different languages. You may need to disable this if your compiler
+ cannot handle very long string literals.
+
+'--enable-strict-posix-default'
+ Make Bash POSIX-conformant by default (*note Bash POSIX Mode::).
+
+'--enable-usg-echo-default'
+ A synonym for '--enable-xpg-echo-default'.
+
+'--enable-xpg-echo-default'
+ Make the 'echo' builtin expand backslash-escaped characters by
+ default, without requiring the '-e' option. This sets the default
+ value of the 'xpg_echo' shell option to 'on', which makes the Bash
+ 'echo' behave more like the version specified in the Single Unix
+ Specification, version 3. *Note Bash Builtins::, for a description
+ of the escape sequences that 'echo' recognizes.
+
+ The file 'config-top.h' contains C Preprocessor '#define' statements
+for options which are not settable from 'configure'. Some of these are
+not meant to be changed; beware of the consequences if you do. Read the
+comments associated with each definition for more information about its
+effect.
+
+
+File: bashref.info, Node: Reporting Bugs, Next: Major Differences From The Bourne Shell, Prev: Installing Bash, Up: Top
+
+Appendix A Reporting Bugs
+*************************
+
+Please report all bugs you find in Bash. But first, you should make
+sure that it really is a bug, and that it appears in the latest version
+of Bash. The latest version of Bash is always available for FTP from
+<ftp://ftp.gnu.org/pub/gnu/bash/>.
+
+ Once you have determined that a bug actually exists, use the
+'bashbug' command to submit a bug report. If you have a fix, you are
+encouraged to mail that as well! Suggestions and 'philosophical' bug
+reports may be mailed to <bug-bash@gnu.org> or posted to the Usenet
+newsgroup 'gnu.bash.bug'.
+
+ All bug reports should include:
+ * The version number of Bash.
+ * The hardware and operating system.
+ * The compiler used to compile Bash.
+ * A description of the bug behaviour.
+ * A short script or 'recipe' which exercises the bug and may be used
+ to reproduce it.
+
+'bashbug' inserts the first three items automatically into the template
+it provides for filing a bug report.
+
+ Please send all reports concerning this manual to <bug-bash@gnu.org>.
+
+
+File: bashref.info, Node: Major Differences From The Bourne Shell, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
+
+Appendix B Major Differences From The Bourne Shell
+**************************************************
+
+Bash implements essentially the same grammar, parameter and variable
+expansion, redirection, and quoting as the Bourne Shell. Bash uses the
+POSIX standard as the specification of how these features are to be
+implemented. There are some differences between the traditional Bourne
+shell and Bash; this section quickly details the differences of
+significance. A number of these differences are explained in greater
+depth in previous sections. This section uses the version of 'sh'
+included in SVR4.2 (the last version of the historical Bourne shell) as
+the baseline reference.
+
+ * Bash is POSIX-conformant, even where the POSIX specification
+ differs from traditional 'sh' behavior (*note Bash POSIX Mode::).
+
+ * Bash has multi-character invocation options (*note Invoking
+ Bash::).
+
+ * Bash has command-line editing (*note Command Line Editing::) and
+ the 'bind' builtin.
+
+ * Bash provides a programmable word completion mechanism (*note
+ Programmable Completion::), and builtin commands 'complete',
+ 'compgen', and 'compopt', to manipulate it.
+
+ * Bash has command history (*note Bash History Facilities::) and the
+ 'history' and 'fc' builtins to manipulate it. The Bash history
+ list maintains timestamp information and uses the value of the
+ 'HISTTIMEFORMAT' variable to display it.
+
+ * Bash implements 'csh'-like history expansion (*note History
+ Interaction::).
+
+ * Bash has one-dimensional array variables (*note Arrays::), 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.
+
+ * The '$'...'' quoting syntax, which expands ANSI-C backslash-escaped
+ characters in the text between the single quotes, is supported
+ (*note ANSI-C Quoting::).
+
+ * Bash supports the '$"..."' quoting syntax to do locale-specific
+ translation of the characters between the double quotes. The '-D',
+ '--dump-strings', and '--dump-po-strings' invocation options list
+ the translatable strings found in a script (*note Locale
+ Translation::).
+
+ * Bash implements the '!' keyword to negate the return value of a
+ pipeline (*note Pipelines::). Very useful when an 'if' statement
+ needs to act only if a test fails. The Bash '-o pipefail' option
+ to 'set' will cause a pipeline to return a failure status if any
+ command fails.
+
+ * Bash has the 'time' reserved word and command timing (*note
+ Pipelines::). The display of the timing statistics may be
+ controlled with the 'TIMEFORMAT' variable.
+
+ * Bash implements the 'for (( EXPR1 ; EXPR2 ; EXPR3 ))' arithmetic
+ for command, similar to the C language (*note Looping
+ Constructs::).
+
+ * Bash includes the 'select' compound command, which allows the
+ generation of simple menus (*note Conditional Constructs::).
+
+ * Bash includes the '[[' compound command, which makes conditional
+ testing part of the shell grammar (*note Conditional Constructs::),
+ including optional regular expression matching.
+
+ * Bash provides optional case-insensitive matching for the 'case' and
+ '[[' constructs.
+
+ * Bash includes brace expansion (*note Brace Expansion::) and tilde
+ expansion (*note Tilde Expansion::).
+
+ * Bash implements command aliases and the 'alias' and 'unalias'
+ builtins (*note Aliases::).
+
+ * Bash provides shell arithmetic, the '((' compound command (*note
+ Conditional Constructs::), and arithmetic expansion (*note Shell
+ Arithmetic::).
+
+ * 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 'export' command.
+
+ * Bash supports the '+=' assignment operator, which appends to the
+ value of the variable named on the left hand side.
+
+ * Bash includes the POSIX pattern removal '%', '#', '%%' and '##'
+ expansions to remove leading or trailing substrings from variable
+ values (*note Shell Parameter Expansion::).
+
+ * The expansion '${#xx}', which returns the length of '${xx}', is
+ supported (*note Shell Parameter Expansion::).
+
+ * The expansion '${var:'OFFSET'[:'LENGTH']}', which expands to the
+ substring of 'var''s value of length LENGTH, beginning at OFFSET,
+ is present (*note Shell Parameter Expansion::).
+
+ * The expansion '${var/[/]'PATTERN'[/'REPLACEMENT']}', which matches
+ PATTERN and replaces it with REPLACEMENT in the value of 'var', is
+ available (*note Shell Parameter Expansion::).
+
+ * The expansion '${!PREFIX*}' expansion, which expands to the names
+ of all shell variables whose names begin with PREFIX, is available
+ (*note Shell Parameter Expansion::).
+
+ * Bash has INDIRECT variable expansion using '${!word}' (*note Shell
+ Parameter Expansion::).
+
+ * Bash can expand positional parameters beyond '$9' using '${NUM}'.
+
+ * The POSIX '$()' form of command substitution is implemented (*note
+ Command Substitution::), and preferred to the Bourne shell's '``'
+ (which is also implemented for backwards compatibility).
+
+ * Bash has process substitution (*note Process Substitution::).
+
+ * Bash automatically assigns variables that provide information about
+ the current user ('UID', 'EUID', and 'GROUPS'), the current host
+ ('HOSTTYPE', 'OSTYPE', 'MACHTYPE', and 'HOSTNAME'), and the
+ instance of Bash that is running ('BASH', 'BASH_VERSION', and
+ 'BASH_VERSINFO'). *Note Bash Variables::, for details.
+
+ * The 'IFS' variable is used to split only the results of expansion,
+ not all words (*note Word Splitting::). This closes a longstanding
+ shell security hole.
+
+ * The filename expansion bracket expression code uses '!' and '^' to
+ negate the set of characters between the brackets. The Bourne
+ shell uses only '!'.
+
+ * Bash implements the full set of POSIX filename expansion operators,
+ including CHARACTER CLASSES, EQUIVALENCE CLASSES, and COLLATING
+ SYMBOLS (*note Filename Expansion::).
+
+ * Bash implements extended pattern matching features when the
+ 'extglob' shell option is enabled (*note Pattern Matching::).
+
+ * It is possible to have a variable and a function with the same
+ name; 'sh' does not separate the two name spaces.
+
+ * Bash functions are permitted to have local variables using the
+ 'local' builtin, and thus useful recursive functions may be written
+ (*note Bash Builtins::).
+
+ * Variable assignments preceding commands affect only that command,
+ even builtins and functions (*note Environment::). In 'sh', all
+ variable assignments preceding commands are global unless the
+ command is executed from the file system.
+
+ * Bash performs filename expansion on filenames specified as operands
+ to input and output redirection operators (*note Redirections::).
+
+ * Bash contains the '<>' redirection operator, allowing a file to be
+ opened for both reading and writing, and the '&>' redirection
+ operator, for directing standard output and standard error to the
+ same file (*note Redirections::).
+
+ * Bash includes the '<<<' redirection operator, allowing a string to
+ be used as the standard input to a command.
+
+ * Bash implements the '[n]<&WORD' and '[n]>&WORD' redirection
+ operators, which move one file descriptor to another.
+
+ * Bash treats a number of filenames specially when they are used in
+ redirection operators (*note Redirections::).
+
+ * Bash can open network connections to arbitrary machines and
+ services with the redirection operators (*note Redirections::).
+
+ * The 'noclobber' option is available to avoid overwriting existing
+ files with output redirection (*note The Set Builtin::). The '>|'
+ redirection operator may be used to override 'noclobber'.
+
+ * The Bash 'cd' and 'pwd' builtins (*note Bourne Shell Builtins::)
+ each take '-L' and '-P' options to switch between logical and
+ physical modes.
+
+ * 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 'builtin' and 'command' builtins (*note Bash
+ Builtins::).
+
+ * The 'command' builtin allows selective disabling of functions when
+ command lookup is performed (*note Bash Builtins::).
+
+ * Individual builtins may be enabled or disabled using the 'enable'
+ builtin (*note Bash Builtins::).
+
+ * The Bash 'exec' builtin takes additional options that allow users
+ to control the contents of the environment passed to the executed
+ command, and what the zeroth argument to the command is to be
+ (*note Bourne Shell Builtins::).
+
+ * Shell functions may be exported to children via the environment
+ using 'export -f' (*note Shell Functions::).
+
+ * The Bash 'export', 'readonly', and 'declare' builtins can take a
+ '-f' option to act on shell functions, a '-p' option to display
+ variables with various attributes set in a format that can be used
+ as shell input, a '-n' option to remove various variable
+ attributes, and 'name=value' arguments to set variable attributes
+ and values simultaneously.
+
+ * The Bash 'hash' builtin allows a name to be associated with an
+ arbitrary filename, even when that filename cannot be found by
+ searching the '$PATH', using 'hash -p' (*note Bourne Shell
+ Builtins::).
+
+ * Bash includes a 'help' builtin for quick reference to shell
+ facilities (*note Bash Builtins::).
+
+ * The 'printf' builtin is available to display formatted output
+ (*note Bash Builtins::).
+
+ * The Bash 'read' builtin (*note Bash Builtins::) will read a line
+ ending in '\' with the '-r' option, and will use the 'REPLY'
+ variable as a default if no non-option arguments are supplied. The
+ Bash 'read' builtin also accepts a prompt string with the '-p'
+ option and will use Readline to obtain the line when given the '-e'
+ option. The 'read' builtin also has additional options to control
+ input: the '-s' option will turn off echoing of input characters as
+ they are read, the '-t' option will allow 'read' to time out if
+ input does not arrive within a specified number of seconds, the
+ '-n' option will allow reading only a specified number of
+ characters rather than a full line, and the '-d' option will read
+ until a particular character rather than newline.
+
+ * The 'return' builtin may be used to abort execution of scripts
+ executed with the '.' or 'source' builtins (*note Bourne Shell
+ Builtins::).
+
+ * Bash includes the 'shopt' builtin, for finer control of shell
+ optional capabilities (*note The Shopt Builtin::), and allows these
+ options to be set and unset at shell invocation (*note Invoking
+ Bash::).
+
+ * Bash has much more optional behavior controllable with the 'set'
+ builtin (*note The Set Builtin::).
+
+ * The '-x' ('xtrace') option displays commands other than simple
+ commands when performing an execution trace (*note The Set
+ Builtin::).
+
+ * The 'test' builtin (*note Bourne Shell Builtins::) is slightly
+ different, as it implements the POSIX algorithm, which specifies
+ the behavior based on the number of arguments.
+
+ * Bash includes the 'caller' builtin, which displays the context of
+ any active subroutine call (a shell function or a script executed
+ with the '.' or 'source' builtins). This supports the bash
+ debugger.
+
+ * The 'trap' builtin (*note Bourne Shell Builtins::) allows a 'DEBUG'
+ pseudo-signal specification, similar to 'EXIT'. Commands specified
+ with a 'DEBUG' trap are executed before every simple command, 'for'
+ command, 'case' command, 'select' command, every arithmetic 'for'
+ command, and before the first command executes in a shell function.
+ The 'DEBUG' trap is not inherited by shell functions unless the
+ function has been given the 'trace' attribute or the 'functrace'
+ option has been enabled using the 'shopt' builtin. The 'extdebug'
+ shell option has additional effects on the 'DEBUG' trap.
+
+ The 'trap' builtin (*note Bourne Shell Builtins::) allows an 'ERR'
+ pseudo-signal specification, similar to 'EXIT' and 'DEBUG'.
+ Commands specified with an 'ERR' trap are executed after a simple
+ command fails, with a few exceptions. The 'ERR' trap is not
+ inherited by shell functions unless the '-o errtrace' option to the
+ 'set' builtin is enabled.
+
+ The 'trap' builtin (*note Bourne Shell Builtins::) allows a
+ 'RETURN' pseudo-signal specification, similar to 'EXIT' and
+ 'DEBUG'. Commands specified with an 'RETURN' trap are executed
+ before execution resumes after a shell function or a shell script
+ executed with '.' or 'source' returns. The 'RETURN' trap is not
+ inherited by shell functions unless the function has been given the
+ 'trace' attribute or the 'functrace' option has been enabled using
+ the 'shopt' builtin.
+
+ * The Bash 'type' builtin is more extensive and gives more
+ information about the names it finds (*note Bash Builtins::).
+
+ * The Bash 'umask' builtin permits a '-p' option to cause the output
+ to be displayed in the form of a 'umask' command that may be reused
+ as input (*note Bourne Shell Builtins::).
+
+ * Bash implements a 'csh'-like directory stack, and provides the
+ 'pushd', 'popd', and 'dirs' builtins to manipulate it (*note The
+ Directory Stack::). Bash also makes the directory stack visible as
+ the value of the 'DIRSTACK' shell variable.
+
+ * Bash interprets special backslash-escaped characters in the prompt
+ strings when interactive (*note Controlling the Prompt::).
+
+ * The Bash restricted mode is more useful (*note The Restricted
+ Shell::); the SVR4.2 shell restricted mode is too limited.
+
+ * The 'disown' builtin can remove a job from the internal shell job
+ table (*note Job Control Builtins::) or suppress the sending of
+ 'SIGHUP' to a job when the shell exits as the result of a 'SIGHUP'.
+
+ * Bash includes a number of features to support a separate debugger
+ for shell scripts.
+
+ * The SVR4.2 shell has two privilege-related builtins ('mldmode' and
+ 'priv') not present in Bash.
+
+ * Bash does not have the 'stop' or 'newgrp' builtins.
+
+ * Bash does not use the 'SHACCT' variable or perform shell
+ accounting.
+
+ * The SVR4.2 'sh' uses a 'TIMEOUT' variable like Bash uses 'TMOUT'.
+
+More features unique to Bash may be found in *note Bash Features::.
+
+B.1 Implementation Differences From The SVR4.2 Shell
+====================================================
+
+Since Bash is a completely new implementation, it does not suffer from
+many of the limitations of the SVR4.2 shell. For instance:
+
+ * Bash does not fork a subshell when redirecting into or out of a
+ shell control structure such as an 'if' or 'while' statement.
+
+ * Bash does not allow unbalanced quotes. The SVR4.2 shell will
+ silently insert a needed closing quote at 'EOF' under certain
+ circumstances. This can be the cause of some hard-to-find errors.
+
+ * The SVR4.2 shell uses a baroque memory management scheme based on
+ trapping 'SIGSEGV'. If the shell is started from a process with
+ 'SIGSEGV' blocked (e.g., by using the 'system()' C library function
+ call), it misbehaves badly.
+
+ * In a questionable attempt at security, the SVR4.2 shell, when
+ invoked without the '-p' 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.
+
+ * The SVR4.2 shell does not allow users to trap 'SIGSEGV', 'SIGALRM',
+ or 'SIGCHLD'.
+
+ * The SVR4.2 shell does not allow the 'IFS', 'MAILCHECK', 'PATH',
+ 'PS1', or 'PS2' variables to be unset.
+
+ * The SVR4.2 shell treats '^' as the undocumented equivalent of '|'.
+
+ * Bash allows multiple option arguments when it is invoked ('-x -v');
+ the SVR4.2 shell allows only one option argument ('-xv'). In fact,
+ some versions of the shell dump core if the second argument begins
+ with a '-'.
+
+ * 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.
+
+ * The SVR4.2 shell behaves differently when invoked as 'jsh' (it
+ turns on job control).
+
+
+File: bashref.info, Node: GNU Free Documentation License, Next: Indexes, Prev: Major Differences From The Bourne Shell, Up: Top
+
+Appendix C GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ 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:
+
+ A. 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.
+
+ B. 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.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. 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.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. 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.
+
+ J. 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.
+
+ K. 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.
+
+ L. 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.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <http://www.gnu.org/copyleft/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: bashref.info, Node: Indexes, Prev: GNU Free Documentation License, Up: Top
+
+Appendix D Indexes
+******************
+
+* Menu:
+
+* Builtin Index:: Index of Bash builtin commands.
+* Reserved Word Index:: Index of Bash reserved words.
+* Variable Index:: Quick reference helps you find the
+ variable you want.
+* Function Index:: Index of bindable Readline functions.
+* Concept Index:: General index for concepts described in
+ this manual.
+
+
+File: bashref.info, Node: Builtin Index, Next: Reserved Word Index, Up: Indexes
+
+D.1 Index of Shell Builtin Commands
+===================================
+
+
+* Menu:
+
+* .: Bourne Shell Builtins.
+ (line 17)
+* :: Bourne Shell Builtins.
+ (line 11)
+* [: Bourne Shell Builtins.
+ (line 269)
+* alias: Bash Builtins. (line 11)
+* bg: Job Control Builtins.
+ (line 7)
+* bind: Bash Builtins. (line 21)
+* break: Bourne Shell Builtins.
+ (line 36)
+* builtin: Bash Builtins. (line 102)
+* caller: Bash Builtins. (line 111)
+* cd: Bourne Shell Builtins.
+ (line 44)
+* command: Bash Builtins. (line 128)
+* compgen: Programmable Completion Builtins.
+ (line 12)
+* complete: Programmable Completion Builtins.
+ (line 30)
+* compopt: Programmable Completion Builtins.
+ (line 237)
+* continue: Bourne Shell Builtins.
+ (line 85)
+* declare: Bash Builtins. (line 148)
+* dirs: Directory Stack Builtins.
+ (line 7)
+* disown: Job Control Builtins.
+ (line 92)
+* echo: Bash Builtins. (line 246)
+* enable: Bash Builtins. (line 295)
+* eval: Bourne Shell Builtins.
+ (line 94)
+* exec: Bourne Shell Builtins.
+ (line 102)
+* exit: Bourne Shell Builtins.
+ (line 120)
+* export: Bourne Shell Builtins.
+ (line 127)
+* fc: Bash History Builtins.
+ (line 10)
+* fg: Job Control Builtins.
+ (line 17)
+* getopts: Bourne Shell Builtins.
+ (line 143)
+* hash: Bourne Shell Builtins.
+ (line 186)
+* help: Bash Builtins. (line 324)
+* history: Bash History Builtins.
+ (line 40)
+* jobs: Job Control Builtins.
+ (line 27)
+* kill: Job Control Builtins.
+ (line 58)
+* let: Bash Builtins. (line 343)
+* local: Bash Builtins. (line 351)
+* logout: Bash Builtins. (line 365)
+* mapfile: Bash Builtins. (line 370)
+* popd: Directory Stack Builtins.
+ (line 35)
+* printf: Bash Builtins. (line 416)
+* pushd: Directory Stack Builtins.
+ (line 53)
+* pwd: Bourne Shell Builtins.
+ (line 206)
+* read: Bash Builtins. (line 460)
+* readarray: Bash Builtins. (line 554)
+* readonly: Bourne Shell Builtins.
+ (line 216)
+* return: Bourne Shell Builtins.
+ (line 235)
+* set: The Set Builtin. (line 11)
+* shift: Bourne Shell Builtins.
+ (line 256)
+* shopt: The Shopt Builtin. (line 9)
+* source: Bash Builtins. (line 563)
+* suspend: Job Control Builtins.
+ (line 104)
+* test: Bourne Shell Builtins.
+ (line 269)
+* times: Bourne Shell Builtins.
+ (line 348)
+* trap: Bourne Shell Builtins.
+ (line 354)
+* type: Bash Builtins. (line 568)
+* typeset: Bash Builtins. (line 600)
+* ulimit: Bash Builtins. (line 606)
+* umask: Bourne Shell Builtins.
+ (line 403)
+* unalias: Bash Builtins. (line 705)
+* unset: Bourne Shell Builtins.
+ (line 421)
+* wait: Job Control Builtins.
+ (line 76)
+
+
+File: bashref.info, Node: Reserved Word Index, Next: Variable Index, Prev: Builtin Index, Up: Indexes
+
+D.2 Index of Shell Reserved Words
+=================================
+
+
+* Menu:
+
+* !: Pipelines. (line 9)
+* [[: Conditional Constructs.
+ (line 124)
+* ]]: Conditional Constructs.
+ (line 124)
+* {: Command Grouping. (line 21)
+* }: Command Grouping. (line 21)
+* case: Conditional Constructs.
+ (line 28)
+* do: Looping Constructs. (line 12)
+* done: Looping Constructs. (line 12)
+* elif: Conditional Constructs.
+ (line 7)
+* else: Conditional Constructs.
+ (line 7)
+* esac: Conditional Constructs.
+ (line 28)
+* fi: Conditional Constructs.
+ (line 7)
+* for: Looping Constructs. (line 32)
+* function: Shell Functions. (line 13)
+* if: Conditional Constructs.
+ (line 7)
+* in: Conditional Constructs.
+ (line 28)
+* select: Conditional Constructs.
+ (line 82)
+* then: Conditional Constructs.
+ (line 7)
+* time: Pipelines. (line 9)
+* until: Looping Constructs. (line 12)
+* while: Looping Constructs. (line 22)
+
+
+File: bashref.info, Node: Variable Index, Next: Function Index, Prev: Reserved Word Index, Up: Indexes
+
+D.3 Parameter and Variable Index
+================================
+
+
+* Menu:
+
+* !: Special Parameters. (line 56)
+* #: Special Parameters. (line 39)
+* $: Special Parameters. (line 51)
+* $!: Special Parameters. (line 57)
+* $#: Special Parameters. (line 40)
+* $$: Special Parameters. (line 52)
+* $*: Special Parameters. (line 10)
+* $-: Special Parameters. (line 47)
+* $0: Special Parameters. (line 62)
+* $?: Special Parameters. (line 43)
+* $@: Special Parameters. (line 23)
+* $_: Special Parameters. (line 71)
+* *: Special Parameters. (line 9)
+* -: Special Parameters. (line 46)
+* 0: Special Parameters. (line 61)
+* ?: Special Parameters. (line 42)
+* @: Special Parameters. (line 22)
+* _: Special Parameters. (line 70)
+* auto_resume: Job Control Variables.
+ (line 6)
+* BASH: Bash Variables. (line 13)
+* BASHOPTS: Bash Variables. (line 16)
+* BASHPID: Bash Variables. (line 25)
+* BASH_ALIASES: Bash Variables. (line 32)
+* BASH_ARGC: Bash Variables. (line 41)
+* BASH_ARGV: Bash Variables. (line 54)
+* BASH_ARGV0: Bash Variables. (line 66)
+* BASH_CMDS: Bash Variables. (line 74)
+* BASH_COMMAND: Bash Variables. (line 83)
+* BASH_COMPAT: Bash Variables. (line 88)
+* BASH_ENV: Bash Variables. (line 103)
+* BASH_EXECUTION_STRING: Bash Variables. (line 109)
+* BASH_LINENO: Bash Variables. (line 112)
+* BASH_LOADABLES_PATH: Bash Variables. (line 120)
+* BASH_REMATCH: Bash Variables. (line 124)
+* BASH_SOURCE: Bash Variables. (line 132)
+* BASH_SUBSHELL: Bash Variables. (line 139)
+* BASH_VERSINFO: Bash Variables. (line 144)
+* BASH_VERSION: Bash Variables. (line 167)
+* BASH_XTRACEFD: Bash Variables. (line 170)
+* bell-style: Readline Init File Syntax.
+ (line 38)
+* bind-tty-special-chars: Readline Init File Syntax.
+ (line 45)
+* blink-matching-paren: Readline Init File Syntax.
+ (line 50)
+* CDPATH: Bourne Shell Variables.
+ (line 9)
+* CHILD_MAX: Bash Variables. (line 181)
+* colored-completion-prefix: Readline Init File Syntax.
+ (line 55)
+* colored-stats: Readline Init File Syntax.
+ (line 62)
+* COLUMNS: Bash Variables. (line 188)
+* comment-begin: Readline Init File Syntax.
+ (line 68)
+* completion-display-width: Readline Init File Syntax.
+ (line 73)
+* completion-ignore-case: Readline Init File Syntax.
+ (line 80)
+* completion-map-case: Readline Init File Syntax.
+ (line 85)
+* completion-prefix-display-length: Readline Init File Syntax.
+ (line 91)
+* completion-query-items: Readline Init File Syntax.
+ (line 98)
+* COMPREPLY: Bash Variables. (line 240)
+* COMP_CWORD: Bash Variables. (line 194)
+* COMP_KEY: Bash Variables. (line 223)
+* COMP_LINE: Bash Variables. (line 200)
+* COMP_POINT: Bash Variables. (line 205)
+* COMP_TYPE: Bash Variables. (line 213)
+* COMP_WORDBREAKS: Bash Variables. (line 227)
+* COMP_WORDS: Bash Variables. (line 233)
+* convert-meta: Readline Init File Syntax.
+ (line 108)
+* COPROC: Bash Variables. (line 246)
+* DIRSTACK: Bash Variables. (line 250)
+* disable-completion: Readline Init File Syntax.
+ (line 116)
+* echo-control-characters: Readline Init File Syntax.
+ (line 121)
+* editing-mode: Readline Init File Syntax.
+ (line 126)
+* EMACS: Bash Variables. (line 260)
+* emacs-mode-string: Readline Init File Syntax.
+ (line 132)
+* enable-bracketed-paste: Readline Init File Syntax.
+ (line 142)
+* enable-keypad: Readline Init File Syntax.
+ (line 150)
+* ENV: Bash Variables. (line 265)
+* EPOCHREALTIME: Bash Variables. (line 269)
+* EPOCHSECONDS: Bash Variables. (line 277)
+* EUID: Bash Variables. (line 284)
+* EXECIGNORE: Bash Variables. (line 288)
+* expand-tilde: Readline Init File Syntax.
+ (line 161)
+* FCEDIT: Bash Variables. (line 301)
+* FIGNORE: Bash Variables. (line 305)
+* FUNCNAME: Bash Variables. (line 311)
+* FUNCNEST: Bash Variables. (line 328)
+* GLOBIGNORE: Bash Variables. (line 333)
+* GROUPS: Bash Variables. (line 340)
+* histchars: Bash Variables. (line 346)
+* HISTCMD: Bash Variables. (line 361)
+* HISTCONTROL: Bash Variables. (line 366)
+* HISTFILE: Bash Variables. (line 382)
+* HISTFILESIZE: Bash Variables. (line 386)
+* HISTIGNORE: Bash Variables. (line 397)
+* history-preserve-point: Readline Init File Syntax.
+ (line 165)
+* history-size: Readline Init File Syntax.
+ (line 171)
+* HISTSIZE: Bash Variables. (line 417)
+* HISTTIMEFORMAT: Bash Variables. (line 424)
+* HOME: Bourne Shell Variables.
+ (line 13)
+* horizontal-scroll-mode: Readline Init File Syntax.
+ (line 180)
+* HOSTFILE: Bash Variables. (line 432)
+* HOSTNAME: Bash Variables. (line 443)
+* HOSTTYPE: Bash Variables. (line 446)
+* IFS: Bourne Shell Variables.
+ (line 18)
+* IGNOREEOF: Bash Variables. (line 449)
+* input-meta: Readline Init File Syntax.
+ (line 187)
+* INPUTRC: Bash Variables. (line 459)
+* INSIDE_EMACS: Bash Variables. (line 463)
+* isearch-terminators: Readline Init File Syntax.
+ (line 195)
+* keymap: Readline Init File Syntax.
+ (line 202)
+* LANG: Bash Variables. (line 469)
+* LC_ALL: Bash Variables. (line 473)
+* LC_COLLATE: Bash Variables. (line 477)
+* LC_CTYPE: Bash Variables. (line 484)
+* LC_MESSAGES: Locale Translation. (line 11)
+* LC_MESSAGES <1>: Bash Variables. (line 489)
+* LC_NUMERIC: Bash Variables. (line 493)
+* LC_TIME: Bash Variables. (line 497)
+* LINENO: Bash Variables. (line 501)
+* LINES: Bash Variables. (line 505)
+* MACHTYPE: Bash Variables. (line 511)
+* MAIL: Bourne Shell Variables.
+ (line 22)
+* MAILCHECK: Bash Variables. (line 515)
+* MAILPATH: Bourne Shell Variables.
+ (line 27)
+* MAPFILE: Bash Variables. (line 523)
+* mark-modified-lines: Readline Init File Syntax.
+ (line 232)
+* mark-symlinked-directories: Readline Init File Syntax.
+ (line 237)
+* match-hidden-files: Readline Init File Syntax.
+ (line 242)
+* menu-complete-display-prefix: Readline Init File Syntax.
+ (line 249)
+* meta-flag: Readline Init File Syntax.
+ (line 187)
+* OLDPWD: Bash Variables. (line 527)
+* OPTARG: Bourne Shell Variables.
+ (line 34)
+* OPTERR: Bash Variables. (line 530)
+* OPTIND: Bourne Shell Variables.
+ (line 38)
+* OSTYPE: Bash Variables. (line 534)
+* output-meta: Readline Init File Syntax.
+ (line 254)
+* page-completions: Readline Init File Syntax.
+ (line 260)
+* PATH: Bourne Shell Variables.
+ (line 42)
+* PIPESTATUS: Bash Variables. (line 537)
+* POSIXLY_CORRECT: Bash Variables. (line 542)
+* PPID: Bash Variables. (line 552)
+* PROMPT_COMMAND: Bash Variables. (line 556)
+* PROMPT_DIRTRIM: Bash Variables. (line 560)
+* PS0: Bash Variables. (line 566)
+* PS1: Bourne Shell Variables.
+ (line 48)
+* PS2: Bourne Shell Variables.
+ (line 53)
+* PS3: Bash Variables. (line 571)
+* PS4: Bash Variables. (line 576)
+* PWD: Bash Variables. (line 584)
+* RANDOM: Bash Variables. (line 587)
+* READLINE_LINE: Bash Variables. (line 592)
+* READLINE_POINT: Bash Variables. (line 596)
+* REPLY: Bash Variables. (line 600)
+* revert-all-at-newline: Readline Init File Syntax.
+ (line 270)
+* SECONDS: Bash Variables. (line 603)
+* SHELL: Bash Variables. (line 609)
+* SHELLOPTS: Bash Variables. (line 614)
+* SHLVL: Bash Variables. (line 623)
+* show-all-if-ambiguous: Readline Init File Syntax.
+ (line 276)
+* show-all-if-unmodified: Readline Init File Syntax.
+ (line 282)
+* show-mode-in-prompt: Readline Init File Syntax.
+ (line 291)
+* skip-completed-text: Readline Init File Syntax.
+ (line 297)
+* TEXTDOMAIN: Locale Translation. (line 11)
+* TEXTDOMAINDIR: Locale Translation. (line 11)
+* TIMEFORMAT: Bash Variables. (line 628)
+* TMOUT: Bash Variables. (line 666)
+* TMPDIR: Bash Variables. (line 678)
+* UID: Bash Variables. (line 682)
+* vi-cmd-mode-string: Readline Init File Syntax.
+ (line 310)
+* vi-ins-mode-string: Readline Init File Syntax.
+ (line 321)
+* visible-stats: Readline Init File Syntax.
+ (line 332)
+
+
+File: bashref.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes
+
+D.4 Function Index
+==================
+
+
+* Menu:
+
+* abort (C-g): Miscellaneous Commands.
+ (line 10)
+* accept-line (Newline or Return): Commands For History.
+ (line 6)
+* alias-expand-line (): Miscellaneous Commands.
+ (line 125)
+* backward-char (C-b): Commands For Moving. (line 15)
+* backward-delete-char (Rubout): Commands For Text. (line 17)
+* backward-kill-line (C-x Rubout): Commands For Killing.
+ (line 9)
+* backward-kill-word (M-<DEL>): Commands For Killing.
+ (line 24)
+* backward-word (M-b): Commands For Moving. (line 22)
+* beginning-of-history (M-<): Commands For History.
+ (line 20)
+* beginning-of-line (C-a): Commands For Moving. (line 6)
+* bracketed-paste-begin (): Commands For Text. (line 33)
+* call-last-kbd-macro (C-x e): Keyboard Macros. (line 13)
+* capitalize-word (M-c): Commands For Text. (line 61)
+* character-search (C-]): Miscellaneous Commands.
+ (line 42)
+* character-search-backward (M-C-]): Miscellaneous Commands.
+ (line 47)
+* clear-screen (C-l): Commands For Moving. (line 48)
+* complete (<TAB>): Commands For Completion.
+ (line 6)
+* complete-command (M-!): Commands For Completion.
+ (line 80)
+* complete-filename (M-/): Commands For Completion.
+ (line 49)
+* complete-hostname (M-@): Commands For Completion.
+ (line 72)
+* complete-into-braces (M-{): Commands For Completion.
+ (line 100)
+* complete-username (M-~): Commands For Completion.
+ (line 56)
+* complete-variable (M-$): Commands For Completion.
+ (line 64)
+* copy-backward-word (): Commands For Killing.
+ (line 58)
+* copy-forward-word (): Commands For Killing.
+ (line 63)
+* copy-region-as-kill (): Commands For Killing.
+ (line 54)
+* dabbrev-expand (): Commands For Completion.
+ (line 95)
+* delete-char (C-d): Commands For Text. (line 12)
+* delete-char-or-list (): Commands For Completion.
+ (line 43)
+* delete-horizontal-space (): Commands For Killing.
+ (line 46)
+* digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6)
+* display-shell-version (C-x C-v): Miscellaneous Commands.
+ (line 110)
+* do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands.
+ (line 14)
+* downcase-word (M-l): Commands For Text. (line 57)
+* dump-functions (): Miscellaneous Commands.
+ (line 74)
+* dump-macros (): Miscellaneous Commands.
+ (line 86)
+* dump-variables (): Miscellaneous Commands.
+ (line 80)
+* dynamic-complete-history (M-<TAB>): Commands For Completion.
+ (line 90)
+* edit-and-execute-command (C-x C-e): Miscellaneous Commands.
+ (line 140)
+* end-kbd-macro (C-x )): Keyboard Macros. (line 9)
+* end-of-file (usually C-d): Commands For Text. (line 6)
+* end-of-history (M->): Commands For History.
+ (line 23)
+* end-of-line (C-e): Commands For Moving. (line 9)
+* exchange-point-and-mark (C-x C-x): Miscellaneous Commands.
+ (line 37)
+* forward-backward-delete-char (): Commands For Text. (line 21)
+* forward-char (C-f): Commands For Moving. (line 12)
+* forward-search-history (C-s): Commands For History.
+ (line 31)
+* forward-word (M-f): Commands For Moving. (line 18)
+* glob-complete-word (M-g): Miscellaneous Commands.
+ (line 92)
+* glob-expand-word (C-x *): Miscellaneous Commands.
+ (line 98)
+* glob-list-expansions (C-x g): Miscellaneous Commands.
+ (line 104)
+* history-and-alias-expand-line (): Miscellaneous Commands.
+ (line 128)
+* history-expand-line (M-^): Miscellaneous Commands.
+ (line 118)
+* history-search-backward (): Commands For History.
+ (line 53)
+* history-search-forward (): Commands For History.
+ (line 47)
+* history-substring-search-backward (): Commands For History.
+ (line 65)
+* history-substring-search-forward (): Commands For History.
+ (line 59)
+* insert-comment (M-#): Miscellaneous Commands.
+ (line 61)
+* insert-completions (M-*): Commands For Completion.
+ (line 22)
+* insert-last-argument (M-. or M-_): Miscellaneous Commands.
+ (line 131)
+* kill-line (C-k): Commands For Killing.
+ (line 6)
+* kill-region (): Commands For Killing.
+ (line 50)
+* kill-whole-line (): Commands For Killing.
+ (line 15)
+* kill-word (M-d): Commands For Killing.
+ (line 19)
+* magic-space (): Miscellaneous Commands.
+ (line 121)
+* menu-complete (): Commands For Completion.
+ (line 26)
+* menu-complete-backward (): Commands For Completion.
+ (line 38)
+* next-history (C-n): Commands For History.
+ (line 17)
+* next-screen-line (): Commands For Moving. (line 41)
+* non-incremental-forward-search-history (M-n): Commands For History.
+ (line 41)
+* non-incremental-reverse-search-history (M-p): Commands For History.
+ (line 35)
+* operate-and-get-next (C-o): Miscellaneous Commands.
+ (line 134)
+* overwrite-mode (): Commands For Text. (line 65)
+* possible-command-completions (C-x !): Commands For Completion.
+ (line 86)
+* possible-completions (M-?): Commands For Completion.
+ (line 15)
+* possible-filename-completions (C-x /): Commands For Completion.
+ (line 52)
+* possible-hostname-completions (C-x @): Commands For Completion.
+ (line 76)
+* possible-username-completions (C-x ~): Commands For Completion.
+ (line 60)
+* possible-variable-completions (C-x $): Commands For Completion.
+ (line 68)
+* prefix-meta (<ESC>): Miscellaneous Commands.
+ (line 19)
+* previous-history (C-p): Commands For History.
+ (line 13)
+* previous-screen-line (): Commands For Moving. (line 34)
+* print-last-kbd-macro (): Keyboard Macros. (line 17)
+* quoted-insert (C-q or C-v): Commands For Text. (line 26)
+* re-read-init-file (C-x C-r): Miscellaneous Commands.
+ (line 6)
+* redraw-current-line (): Commands For Moving. (line 52)
+* reverse-search-history (C-r): Commands For History.
+ (line 27)
+* revert-line (M-r): Miscellaneous Commands.
+ (line 26)
+* self-insert (a, b, A, 1, !, ...): Commands For Text. (line 30)
+* set-mark (C-@): Miscellaneous Commands.
+ (line 33)
+* shell-backward-kill-word (): Commands For Killing.
+ (line 33)
+* shell-backward-word (): Commands For Moving. (line 30)
+* shell-expand-line (M-C-e): Miscellaneous Commands.
+ (line 113)
+* shell-forward-word (): Commands For Moving. (line 26)
+* shell-kill-word (): Commands For Killing.
+ (line 28)
+* skip-csi-sequence (): Miscellaneous Commands.
+ (line 52)
+* start-kbd-macro (C-x (): Keyboard Macros. (line 6)
+* tilde-expand (M-&): Miscellaneous Commands.
+ (line 30)
+* transpose-chars (C-t): Commands For Text. (line 42)
+* transpose-words (M-t): Commands For Text. (line 48)
+* undo (C-_ or C-x C-u): Miscellaneous Commands.
+ (line 23)
+* universal-argument (): Numeric Arguments. (line 10)
+* unix-filename-rubout (): Commands For Killing.
+ (line 41)
+* unix-line-discard (C-u): Commands For Killing.
+ (line 12)
+* unix-word-rubout (C-w): Commands For Killing.
+ (line 37)
+* upcase-word (M-u): Commands For Text. (line 53)
+* yank (C-y): Commands For Killing.
+ (line 68)
+* yank-last-arg (M-. or M-_): Commands For History.
+ (line 80)
+* yank-nth-arg (M-C-y): Commands For History.
+ (line 71)
+* yank-pop (M-y): Commands For Killing.
+ (line 71)
+
+
+File: bashref.info, Node: Concept Index, Prev: Function Index, Up: Indexes
+
+D.5 Concept Index
+=================
+
+
+* Menu:
+
+* alias expansion: Aliases. (line 6)
+* arithmetic evaluation: Shell Arithmetic. (line 6)
+* arithmetic expansion: Arithmetic Expansion.
+ (line 6)
+* arithmetic, shell: Shell Arithmetic. (line 6)
+* arrays: Arrays. (line 6)
+* background: Job Control Basics. (line 6)
+* Bash configuration: Basic Installation. (line 6)
+* Bash installation: Basic Installation. (line 6)
+* Bourne shell: Basic Shell Features.
+ (line 6)
+* brace expansion: Brace Expansion. (line 6)
+* builtin: Definitions. (line 17)
+* command editing: Readline Bare Essentials.
+ (line 6)
+* command execution: Command Search and Execution.
+ (line 6)
+* command expansion: Simple Command Expansion.
+ (line 6)
+* command history: Bash History Facilities.
+ (line 6)
+* command search: Command Search and Execution.
+ (line 6)
+* command substitution: Command Substitution.
+ (line 6)
+* command timing: Pipelines. (line 9)
+* commands, compound: Compound Commands. (line 6)
+* commands, conditional: Conditional Constructs.
+ (line 6)
+* commands, grouping: Command Grouping. (line 6)
+* commands, lists: Lists. (line 6)
+* commands, looping: Looping Constructs. (line 6)
+* commands, pipelines: Pipelines. (line 6)
+* commands, shell: Shell Commands. (line 6)
+* commands, simple: Simple Commands. (line 6)
+* comments, shell: Comments. (line 6)
+* completion builtins: Programmable Completion Builtins.
+ (line 6)
+* configuration: Basic Installation. (line 6)
+* control operator: Definitions. (line 21)
+* coprocess: Coprocesses. (line 6)
+* directory stack: The Directory Stack. (line 6)
+* editing command lines: Readline Bare Essentials.
+ (line 6)
+* environment: Environment. (line 6)
+* evaluation, arithmetic: Shell Arithmetic. (line 6)
+* event designators: Event Designators. (line 6)
+* execution environment: Command Execution Environment.
+ (line 6)
+* exit status: Definitions. (line 26)
+* exit status <1>: Exit Status. (line 6)
+* expansion: Shell Expansions. (line 6)
+* expansion, arithmetic: Arithmetic Expansion.
+ (line 6)
+* expansion, brace: Brace Expansion. (line 6)
+* expansion, filename: Filename Expansion. (line 9)
+* expansion, parameter: Shell Parameter Expansion.
+ (line 6)
+* expansion, pathname: Filename Expansion. (line 9)
+* expansion, tilde: Tilde Expansion. (line 6)
+* expressions, arithmetic: Shell Arithmetic. (line 6)
+* expressions, conditional: Bash Conditional Expressions.
+ (line 6)
+* field: Definitions. (line 30)
+* filename: Definitions. (line 35)
+* filename expansion: Filename Expansion. (line 9)
+* foreground: Job Control Basics. (line 6)
+* functions, shell: Shell Functions. (line 6)
+* history builtins: Bash History Builtins.
+ (line 6)
+* history events: Event Designators. (line 8)
+* history expansion: History Interaction. (line 6)
+* history list: Bash History Facilities.
+ (line 6)
+* History, how to use: A Programmable Completion Example.
+ (line 113)
+* identifier: Definitions. (line 51)
+* initialization file, readline: Readline Init File. (line 6)
+* installation: Basic Installation. (line 6)
+* interaction, readline: Readline Interaction.
+ (line 6)
+* interactive shell: Invoking Bash. (line 131)
+* interactive shell <1>: Interactive Shells. (line 6)
+* internationalization: Locale Translation. (line 6)
+* job: Definitions. (line 38)
+* job control: Definitions. (line 42)
+* job control <1>: Job Control Basics. (line 6)
+* kill ring: Readline Killing Commands.
+ (line 18)
+* killing text: Readline Killing Commands.
+ (line 6)
+* localization: Locale Translation. (line 6)
+* login shell: Invoking Bash. (line 128)
+* matching, pattern: Pattern Matching. (line 6)
+* metacharacter: Definitions. (line 46)
+* name: Definitions. (line 51)
+* native languages: Locale Translation. (line 6)
+* notation, readline: Readline Bare Essentials.
+ (line 6)
+* operator, shell: Definitions. (line 57)
+* parameter expansion: Shell Parameter Expansion.
+ (line 6)
+* parameters: Shell Parameters. (line 6)
+* parameters, positional: Positional Parameters.
+ (line 6)
+* parameters, special: Special Parameters. (line 6)
+* pathname expansion: Filename Expansion. (line 9)
+* pattern matching: Pattern Matching. (line 6)
+* pipeline: Pipelines. (line 6)
+* POSIX: Definitions. (line 9)
+* POSIX Mode: Bash POSIX Mode. (line 6)
+* process group: Definitions. (line 62)
+* process group ID: Definitions. (line 66)
+* process substitution: Process Substitution.
+ (line 6)
+* programmable completion: Programmable Completion.
+ (line 6)
+* prompting: Controlling the Prompt.
+ (line 6)
+* quoting: Quoting. (line 6)
+* quoting, ANSI: ANSI-C Quoting. (line 6)
+* Readline, how to use: Job Control Variables.
+ (line 23)
+* redirection: Redirections. (line 6)
+* reserved word: Definitions. (line 70)
+* restricted shell: The Restricted Shell.
+ (line 6)
+* return status: Definitions. (line 75)
+* shell arithmetic: Shell Arithmetic. (line 6)
+* shell function: Shell Functions. (line 6)
+* shell script: Shell Scripts. (line 6)
+* shell variable: Shell Parameters. (line 6)
+* shell, interactive: Interactive Shells. (line 6)
+* signal: Definitions. (line 78)
+* signal handling: Signals. (line 6)
+* special builtin: Definitions. (line 82)
+* special builtin <1>: Special Builtins. (line 6)
+* startup files: Bash Startup Files. (line 6)
+* suspending jobs: Job Control Basics. (line 6)
+* tilde expansion: Tilde Expansion. (line 6)
+* token: Definitions. (line 86)
+* translation, native languages: Locale Translation. (line 6)
+* variable, shell: Shell Parameters. (line 6)
+* variables, readline: Readline Init File Syntax.
+ (line 37)
+* word: Definitions. (line 90)
+* word splitting: Word Splitting. (line 6)
+* yanking text: Readline Killing Commands.
+ (line 6)
+
+
+
+Tag Table:
+Node: Top895
+Node: Introduction2813
+Node: What is Bash?3029
+Node: What is a shell?4143
+Node: Definitions6681
+Node: Basic Shell Features9632
+Node: Shell Syntax10851
+Node: Shell Operation11877
+Node: Quoting13170
+Node: Escape Character14470
+Node: Single Quotes14955
+Node: Double Quotes15303
+Node: ANSI-C Quoting16581
+Node: Locale Translation17840
+Node: Comments18736
+Node: Shell Commands19354
+Node: Simple Commands20226
+Node: Pipelines20857
+Node: Lists23789
+Node: Compound Commands25580
+Node: Looping Constructs26592
+Node: Conditional Constructs29087
+Node: Command Grouping40170
+Node: Coprocesses41649
+Node: GNU Parallel43552
+Node: Shell Functions47610
+Node: Shell Parameters54693
+Node: Positional Parameters59106
+Node: Special Parameters60006
+Node: Shell Expansions63760
+Node: Brace Expansion65883
+Node: Tilde Expansion68607
+Node: Shell Parameter Expansion71224
+Node: Command Substitution85680
+Node: Arithmetic Expansion87035
+Node: Process Substitution87967
+Node: Word Splitting89087
+Node: Filename Expansion91031
+Node: Pattern Matching93561
+Node: Quote Removal97547
+Node: Redirections97842
+Node: Executing Commands107400
+Node: Simple Command Expansion108070
+Node: Command Search and Execution110000
+Node: Command Execution Environment112376
+Node: Environment115360
+Node: Exit Status117019
+Node: Signals118689
+Node: Shell Scripts120656
+Node: Shell Builtin Commands123171
+Node: Bourne Shell Builtins125209
+Node: Bash Builtins145959
+Node: Modifying Shell Behavior174884
+Node: The Set Builtin175229
+Node: The Shopt Builtin185642
+Node: Special Builtins203284
+Node: Shell Variables204263
+Node: Bourne Shell Variables204700
+Node: Bash Variables206804
+Node: Bash Features237264
+Node: Invoking Bash238163
+Node: Bash Startup Files244176
+Node: Interactive Shells249279
+Node: What is an Interactive Shell?249689
+Node: Is this Shell Interactive?250338
+Node: Interactive Shell Behavior251153
+Node: Bash Conditional Expressions254640
+Node: Shell Arithmetic259217
+Node: Aliases262034
+Node: Arrays264654
+Node: The Directory Stack270020
+Node: Directory Stack Builtins270804
+Node: Controlling the Prompt273772
+Node: The Restricted Shell276538
+Node: Bash POSIX Mode278363
+Node: Job Control289296
+Node: Job Control Basics289756
+Node: Job Control Builtins294724
+Node: Job Control Variables299451
+Node: Command Line Editing300607
+Node: Introduction and Notation302278
+Node: Readline Interaction303901
+Node: Readline Bare Essentials305092
+Node: Readline Movement Commands306875
+Node: Readline Killing Commands307835
+Node: Readline Arguments309753
+Node: Searching310797
+Node: Readline Init File312983
+Node: Readline Init File Syntax314130
+Node: Conditional Init Constructs334569
+Node: Sample Init File338765
+Node: Bindable Readline Commands341882
+Node: Commands For Moving343086
+Node: Commands For History344935
+Node: Commands For Text349230
+Node: Commands For Killing352618
+Node: Numeric Arguments355099
+Node: Commands For Completion356238
+Node: Keyboard Macros360429
+Node: Miscellaneous Commands361116
+Node: Readline vi Mode367069
+Node: Programmable Completion367976
+Node: Programmable Completion Builtins375756
+Node: A Programmable Completion Example386449
+Node: Using History Interactively391689
+Node: Bash History Facilities392373
+Node: Bash History Builtins395378
+Node: History Interaction399909
+Node: Event Designators403529
+Node: Word Designators404748
+Node: Modifiers406385
+Node: Installing Bash407787
+Node: Basic Installation408924
+Node: Compilers and Options412182
+Node: Compiling For Multiple Architectures412923
+Node: Installation Names414616
+Node: Specifying the System Type415434
+Node: Sharing Defaults416150
+Node: Operation Controls416823
+Node: Optional Features417781
+Node: Reporting Bugs428299
+Node: Major Differences From The Bourne Shell429493
+Node: GNU Free Documentation License446345
+Node: Indexes471522
+Node: Builtin Index471976
+Node: Reserved Word Index478803
+Node: Variable Index481251
+Node: Function Index497002
+Node: Concept Index510305
+
+End Tag Table
diff --git a/doc/bashref.pdf b/doc/bashref.pdf
new file mode 100644
index 0000000..0864d8b
--- /dev/null
+++ b/doc/bashref.pdf
Binary files differ
diff --git a/doc/bashref.ps b/doc/bashref.ps
new file mode 100644
index 0000000..d981765
--- /dev/null
+++ b/doc/bashref.ps
@@ -0,0 +1,21558 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.998 Copyright 2018 Radical Eye Software
+%%Title: bashref.dvi
+%%CreationDate: Wed Jan 2 14:14:45 2019
+%%Pages: 184
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: CMBX12 CMR10 CMTT10 CMSL10 CMSY10 CMMI12 CMMI10 CMCSC10
+%%+ CMTI10 CMSLTT10 SFRM1095 CMTT12 CMTT9 CMMI9 CMR9 SFRM1440
+%%DocumentPaperSizes: Letter
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2019.01.02:0914
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3
+def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90
+rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0
+N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop
+false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A
+length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
+forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{
+BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat
+{BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch
+round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0
+rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B
+/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}
+B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p
+-3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{
+0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: cm-super-t1.enc 0 0
+% This file is generated from `T1uni.map' and `glyphlist.txt', `gl-other.txt'
+%
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ;
+% LIGKERN greater greater =: guillemotright ;
+% LIGKERN f f =: ff ; f i =: fi ; f l =: fl ; ff i =: ffi ; ff l =: ffl ;
+%
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+%
+/T1Encoding [
+% 0x00
+/grave
+/acute
+/circumflex
+/tilde
+/dieresis
+/hungarumlaut
+/ring
+/caron
+/breve
+/macron
+/dotaccent
+/cedilla
+/ogonek
+/quotesinglbase
+/guilsinglleft
+/guilsinglright
+% 0x10
+/quotedblleft
+/quotedblright
+/quotedblbase
+/guillemotleft
+/guillemotright
+/endash
+/emdash
+/afii61664
+/perthousandzero % PERTHOUSAND ZERO
+/dotlessi
+/dotlessj
+/ff
+/fi
+/fl
+/ffi
+/ffl
+% 0x20
+/uni2423
+/exclam
+/quotedbl
+/numbersign
+/dollar
+/percent
+/ampersand
+/quoteright
+/parenleft
+/parenright
+/asterisk
+/plus
+/comma
+/hyphen
+/period
+/slash
+% 0x30
+/zero
+/one
+/two
+/three
+/four
+/five
+/six
+/seven
+/eight
+/nine
+/colon
+/semicolon
+/less
+/equal
+/greater
+/question
+% 0x40
+/at
+/A
+/B
+/C
+/D
+/E
+/F
+/G
+/H
+/I
+/J
+/K
+/L
+/M
+/N
+/O
+% 0x50
+/P
+/Q
+/R
+/S
+/T
+/U
+/V
+/W
+/X
+/Y
+/Z
+/bracketleft
+/backslash
+/bracketright
+/asciicircum
+/underscore
+% 0x60
+/quoteleft
+/a
+/b
+/c
+/d
+/e
+/f
+/g
+/h
+/i
+/j
+/k
+/l
+/m
+/n
+/o
+% 0x70
+/p
+/q
+/r
+/s
+/t
+/u
+/v
+/w
+/x
+/y
+/z
+/braceleft
+/bar
+/braceright
+/asciitilde
+/hyphen.alt % HANGING HYPHEN
+% 0x80
+/Abreve
+/Aogonek
+/Cacute
+/Ccaron
+/Dcaron
+/Ecaron
+/Eogonek
+/Gbreve
+/Lacute
+/Lcaron
+/Lslash
+/Nacute
+/Ncaron
+/Eng
+/Ohungarumlaut
+/Racute
+% 0x90
+/Rcaron
+/Sacute
+/Scaron
+/Scedilla
+/Tcaron
+/Tcommaaccent
+/Uhungarumlaut
+/Uring
+/Ydieresis
+/Zacute
+/Zcaron
+/Zdotaccent
+/IJ
+/Idotaccent
+/dcroat
+/section
+% 0xA0
+/abreve
+/aogonek
+/cacute
+/ccaron
+/dcaron
+/ecaron
+/eogonek
+/gbreve
+/lacute
+/lcaron
+/lslash
+/nacute
+/ncaron
+/eng
+/ohungarumlaut
+/racute
+% 0xB0
+/rcaron
+/sacute
+/scaron
+/scedilla
+/tcaron
+/tcommaaccent
+/uhungarumlaut
+/uring
+/ydieresis
+/zacute
+/zcaron
+/zdotaccent
+/ij
+/exclamdown
+/questiondown
+/sterling
+% 0xC0
+/Agrave
+/Aacute
+/Acircumflex
+/Atilde
+/Adieresis
+/Aring
+/AE
+/Ccedilla
+/Egrave
+/Eacute
+/Ecircumflex
+/Edieresis
+/Igrave
+/Iacute
+/Icircumflex
+/Idieresis
+% 0xD0
+/Eth
+/Ntilde
+/Ograve
+/Oacute
+/Ocircumflex
+/Otilde
+/Odieresis
+/OE
+/Oslash
+/Ugrave
+/Uacute
+/Ucircumflex
+/Udieresis
+/Yacute
+/Thorn
+/SS % Germandbls
+% 0xE0
+/agrave
+/aacute
+/acircumflex
+/atilde
+/adieresis
+/aring
+/ae
+/ccedilla
+/egrave
+/eacute
+/ecircumflex
+/edieresis
+/igrave
+/iacute
+/icircumflex
+/idieresis
+% 0xF0
+/eth
+/ntilde
+/ograve
+/oacute
+/ocircumflex
+/otilde
+/odieresis
+/oe
+/oslash
+/ugrave
+/uacute
+/ucircumflex
+/udieresis
+/yacute
+/thorn
+/germandbls % or /germandbls.alt
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginFont: SFRM1440
+%!FontType1-1.0: SFRM1440 0.3
+%%CreationDate: Wed Sep 12 2001
+% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>.
+% See the file COPYING (GNU General Public License) for license conditions.
+% Converted from METAFONT EC/TC and LH fonts:
+% ecrm1440, tcrm1440, larm1440, lbrm1440, lcrm1440, rxrm1440.
+11 dict begin
+/FontInfo 6 dict dup begin
+/version (0.3) def
+/FullName (Computer Modern Roman) def
+/FamilyName (Computer Modern) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/Weight (Medium) def
+end readonly def
+/FontName /SFRM1440 def
+/Encoding StandardEncoding def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/FontBBox{-178 -319 1370 944}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11
+69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB
+CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89
+F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3
+F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C
+EF25195F68A2A98170E4875AA6B96583CD5632BAD9EB3D511DF934CD36447A31
+D420FA313B5721C37085F478B27E13191957AD30B8B082BCE733AF8402AA3B7D
+EC69807BBAA8142AF1CE151D99F5A59AD18798F94781EFAD48BEC8C62C05C56A
+336D71AB584F6DF014C56523108606FADE931125496247870E980A65AB33C0C6
+D5B074864D0F58CBE333EFA1201AF335FBDBFB1CC8B1294856C250F222BFB8BE
+5DE74F808904F7678552F213C674497F829E96812D340939F73737731D289801
+54E5A8F7F5067ACD9D768F4649B51E54513F2F7878141FC719627C23FC5FBBB6
+3F663343D902E95C56C559B588088227B22378FAAB29392FA62933283D2FB2EA
+FDAEC6C1A94ABA0B5BEFA1E728A2052434BFBF6D9759D02A2C6092D4EF794241
+CC28BC939A424AFA193F96530985EE89E2731F6A99BC84C6551A3FEA1342509D
+D389F786C8EAF972B8C98B79003B6C71E6696518BE4CAD2A317C5D29621031B4
+00A035445D8CFB67D6C136B3F6D82396E11A3679BC82498519C27601236F1FCA
+073DA7817B529424CAF49A0AEE8FF7520C0F204A3B1725F46C2C6953C20E93B6
+2F3EED0EEDF87A350CB841516107D9571503A3D62A2F81840070D43392160783
+D111F3463760EBE634515DA1A1B6C3A5D14FC475F277BAC792FB69B4219E9BF5
+E6F8520584096A7B7BFE439A1604C2BBBB9140A4F4728B4B553A27E1AF52181D
+701E90C4FBB16EA8DB39B562E5A2932D45893081D52E020A1FCBC44DC204F4A5
+BEE47F9D25876644CC856B1FC225B61124B89B896C39CDAB0ACCA8277F827382
+6F58A0C8456DC41217219D894B42968FB2EC75D5518B6C4413BAC889532F0B0B
+A8D728949CEA00D4A1FD757B3A2336D472842ACF8EB9869044947C67D9AC7BBF
+7386DDE209A8DC9F18085952818F67FDC6088D9C8BC51BA6DC0FA37A0F81EDB8
+6F259FA8C0FA3D55BC44529889E72E407C89ACF658631A0508FD7991088644B4
+C958031B52421F9CE73A0479A3175231EFD9E0F7A7B08380E9BAF015730B175B
+93C380D1D0F3EB929B7182691BE7E2116CE295CA4331ABD7ECAD7D2DD46FE3E0
+5D3893ED100135901FD42B4E11BEB2689A13E86F1E68635DD81E5A720082E802
+89B440A111B2CDC6BFE79E5B2EB0C528FA0E958F0E981EC29C3B02A9186D7907
+A0CC29251E567958BA95DE609A421581433DD50AF96A82A5ADEFD1C9540D87A8
+D74A7709AF84AD36753784ED8267D3C2521A32C7A9D5BE01E0AF3B349200639C
+90C8BF2E26920AC410A9C5D1EB85C0ADD16BAA83B6C0BFE82483D3B719DC19AC
+89155140691E3E37F861C53A6F39441B5F229828B198DF5BF6286060DCB64433
+F43499E4AB973F84655311A644ED0921B41B9AE7A8060CB1F45E824FB3497C63
+0A13CB5902294E66186E4496A825447734DF4AB581803488B912E7DCD6007527
+B4CFDC5AD5D1DB430007AE929F969EE332CCF235DAF977D387E47BE0EE337118
+8CFAAC0907E16B0BEAECC3B39221867AE6464BE9AB4CE591B2E24B45AD2C70E2
+A183065810D6AC3DE8EA9F66615113F1E683A4475CE5817491ECBDD4A4818AED
+EAFEAB8B93FBDB335D02FAF9276958EFAEE1057C45D313419D195068076D77B2
+C0FF6EA8D6F3F0A899D17E04B8B2141EE335
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR9
+%!PS-AdobeFont-1.0: CMR9 003.002
+%%Title: CMR9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup
+/UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR9 def
+/FontBBox {-39 -250 1036 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR9.) readonly def
+/FullName (CMR9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 44 /comma put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 65 /A put
+dup 66 /B put
+dup 68 /D put
+dup 72 /H put
+dup 73 /I put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340
+15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E
+ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4
+B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029
+85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C
+DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955
+F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D
+2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5
+B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7
+78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7
+E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3
+41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277
+B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072
+55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA
+700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9
+8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A
+F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4
+FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4
+3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15
+B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2
+AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013
+461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC
+CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85
+CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C
+4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F
+291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223
+D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181
+C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115
+D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9
+9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405
+2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380
+A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB
+2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E
+2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6
+AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577
+9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB
+B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67
+0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D
+9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B
+42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0
+C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35
+623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6
+B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4
+E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97
+CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D
+07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7
+53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350
+EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9
+52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88
+F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC
+D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3
+81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D
+B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6
+B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A
+31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF
+E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293
+846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733
+46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E
+44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08
+A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A
+BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5
+1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4
+D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344
+6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A
+E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E
+24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E
+75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D
+EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51
+C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0
+5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034
+099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281
+7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE
+53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84
+7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F
+7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C
+D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933
+CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD
+866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B
+B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826
+ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B
+B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64
+FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B
+40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643
+D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8
+2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787
+39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2
+1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4
+F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9
+253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B
+14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085
+6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E
+E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B
+9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E
+EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339
+FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F
+289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3
+A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5
+5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46
+5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652
+152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE
+67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3
+BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59
+3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88
+713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF
+2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5
+D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143
+6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB
+A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9
+F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95
+26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A
+C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970
+350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700
+70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5
+F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95
+F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8
+9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2
+DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473
+F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D
+064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF
+1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325
+A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E
+E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF
+01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C
+40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C
+72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645
+24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1
+EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775
+D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311
+83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483
+5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448
+1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69
+AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC
+4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3
+7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9
+65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063
+B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6
+FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6
+4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490
+8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6
+1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3
+10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B
+C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4
+8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A
+C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0
+7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F
+852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C
+3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997
+648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD
+855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE
+1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C
+1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0
+B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7
+D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99
+24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C
+552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733
+6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0
+800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8
+6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659
+E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4
+5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2
+00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F
+E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4
+82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7
+6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3
+128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D
+744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507
+84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF
+AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86
+5C7018E5F1DFB86B739C4749DDCFB2F40529E1F15174DF4AE9833958B66ED869
+920CFB9524F05AB2FA84A4AC41A02490699F277A3B4ECC3C31ACF79E884B979C
+AEFF660A8EEF118C79F8DA266F89F32078B1C333DFA5264D6B64371276ED4DBD
+5A2DF213D85A56B1CA85DEA53ED0299C1FA48D463B11FC9A0751C986CAABB184
+829B1133CA8422DC11C6CEAAD463FEB468FC7AA2DDBE2E708D27D89164B12BD8
+B9A71A1D06D2FA9ED0B02168B32F6CC0FE765F2AF8A19C7196EE55648E642184
+BDF993C99EF7C10AD2A7962DB9B7851E6EE24A0C53475186BB44083AE18254B9
+F1CEA0B66A6581C81DE19DA8EEC9330A030F3384C1DF8216E5A25FB38C1B94F3
+403C3541593A016CB5FD306F41F40E82D4561EBCBF76153BDFCF338284348755
+0208360C5842FCD6B2D614387575B6E49F4B5A4DA281A352ABE8B76CFCD94A00
+1C586D19B68D965BD8D7EF0DC87271478CB4D0D1633676A2FC51B36876002A9B
+F5D632ED778BA9EA1C3741FFCC15AEEC11C8E1544DA7358473325812E50C2135
+84ECE7DCE281956681179C09C0E8DBAC5E4424AAD00FDA269BCD6412F1D6DCE0
+2BC7CABF85AE803D620F5140C63DAC4B0E5F7896343973FBB99486B93B6DB58F
+38ACBE8868CC58B3918C1AB4406FBCC7BE8496C78C9D628716BF1E306AA802D4
+5FAC522B1EE90448387DB8E85235FFAAF3754E2317B693D567A488753993B8C5
+DA3C8FA50A35202958FD0BF2900A6CE175920C2EC7CD449D4DB189A50958BF17
+644345CC38250088A694CF0F482ECC55ADCD02E17B3CCE66213A6163B8B44C9A
+89068E3B5301D2364F85BF9DF7C77342796363A7B6B294CE26DBB9179DC15756
+E1B32CE919AF44BC79A3AA8FDF6118345B2AE03F3B11D57D9AF50EBCF7152E37
+15510FBF60F16756FC674E2BF58E88CAB2CA2E8B47F50096C51179684331FD61
+8B34520C9C7D01E1511C924FA76B3CAF79501E0AA2C6E1EC6F00CB6CE24B4123
+F493B149B5A5147EF6BF1EF3CD21A76945B95082E1FB3C5A150D8AF793348E8C
+A988354FA46E3775486A6999E022EBE293E8396C8F9416929607730606CFA772
+BC8388BA5D64B79E52DD2048ABF21661121A001E6A75731B5DC43CE040396BD7
+B85603C8A0F37E522FD0CBA63C454B12960451CE65A69F98FB2FDBAE725C0999
+05FB68B4C1D320F5F3D61FA8446BE6F8BC46AD9CFA5674A3EC73B8F3419AF9EF
+7A1A3C9EDE3BD6359902D4B5F3AB4E3FF9CB2E1937937AFA182C651985703F20
+FB70E37AADED6345EF4E83CB140FF92310BACFBDA11F2CD5AD93AA7563D7426B
+0D4B6CF9B669F9A702956CA845E3814E4B5491E58F8C89714229942165A6E8E6
+58982D89C4FA7BC557214BF9ACE2C63AD88F2D1B18A04F510211687C35AA1F7F
+D2003D4E60400B95E70422024A7111D926F1B5A77074910710594B95680CFC4D
+911FC16B928D9644340A9D2382767FE6AD453E8E4CBF19F77D3DA2934B11FC95
+A6900C3CA3F2B6AE4290A005F908305CB37700680D76C4999AFE509B18305D28
+88C36292D6DA208A8D42F8B81FDEA7E93EE59D6AF3F1A3522EE91BE71BC655B9
+79C49B033A036E1FCD94FC581AE732A224F055503CFC69FBCDEA39CB00DC8A0B
+4BEFED99CFC4E44ED51DEDF9EA825FF6BB97D316726531CB4BA083B033C0B69B
+8068D5D3E3E31DED5F6267439F149549A6E12B00BA85818AEB491978364D9F7D
+7375CBD6C5511CC846D0058BD2CE5467EBCEACE5CBEB2D33AC8E12A84CA620EA
+99A0ED916B7770A056F6A9C361CD5118B5DDB10A5A4E643FFB8FC5DCBACDCB28
+696E26D030C5918548AD8B87E21E1B4BAA91AF23663CDE350A21C2CEEFD28947
+BC07BB49404FA39F251E36B95B7338EF03F2E63FBE0E023452097F21931A2599
+4EBA7BFA669EBEDC0F5B33375DFE6DB1638D19D4B5112B5338B14C93F707D340
+056B2B75AFE418EAF9CD57ED842F7B5FFF037B3A4B369C63E4DF9F0BDB4E39C6
+C5BE8EDA628F1C6FEEBC9D9886DBE502CCAA86092646094118069757DAC25C38
+2CA53CBA27577BAF2C57196489CBA54B96C650A1C130184A4444CDE2D0CB1A49
+FADCAF1FE3A66334F85FAFB00F142F28AF2D8FEFC29FE8E0FDA448F181040BF1
+62EA7AE75100BA46B49EF30F596CD9091164AF70666E254938BF6A44F01BBD2C
+4160164FD89FCD358E48908BEFBAAC4411B52390CEED6B46D729698CCA8E164C
+F77CEBB50C5254F81570E414B1E9E79269D3B2575E161620CC732C0405A29ED7
+1E5A6597D35B11EE08DC09FC9C27F0126C22C73A0EED657D7F91790777E7D8B1
+EBAFB0EC9ADAEFEF7F6A91A1028E46D76289EB1BC15D3597CFCD78D88B633759
+93CB4477596E28A1E413BE25D513BA611757C994AE812C5A6D9AD3F770499252
+C7F53E585E03B2FF056EECFB7ABAC474A981D757AB3B6F281744F01713782887
+9BE48307BC5516A067743C054A3927E015AB0B2AD2D80D229BA32FDAB660C3C2
+40DE8C83E1E4941B8D765B879222847F855960604EFF94E9D99E4AD0FF2E887D
+54DB39B984A9E9F69ABDDBB2A452661703841BE79200EDF24C4172D736B461E9
+8BC314AC1CE1650083B18B2AD809B5F2DCB314651433E357042A8AA73A184D38
+290AFF0443C4A293CA6F04643EA3C313FC6070D76400B0BCCEDD20B5F0A67200
+01584F0062794AD3D82C83FCE4380E28312815EE20DF3DD21D381046940A8C96
+4DFCB07E5A558DBF1DE489FF4FCD1C851A597B0EA58604BD16DC8FD89B9E70CC
+36F99E8327E9112D98C1AA1C355FEC942E879C3CF8C358FE955B1E2518C81270
+9BBB3F4BDDB57D04685FC0D90AD3566A81086B3BF196B2CDD42BD1455F588342
+C817CB9E0E75A0A24BE751B46DE8DC974554DF975D02864773F2EE856A0CF595
+0D614F71A1AAF4A72DB4E5896AE9C2B33F993C006DD7F644DD1B3AEBBF34AF8F
+A809C51EEF38E3912E82F7F15F4DBB9D6E5D7974B1B871AB3F3A48B72F0356DF
+CAD862D11273580D1BEC9E88931B7B9C74B8AC3DB5F3B3FA05213D3CE48C0F2B
+237A7DDC33D850D1B2B5B8CB7CC1A1A2221451FFF0AF88175EEF18EB932F47FA
+9A8A97F92B6E2A01CF8BDDCEED9E1776A1A3D4328FB7F8537689CCE7F145A8A6
+2DAD7C9C23C0DBA934E4803FCF9E7C292E67D748F972415E62E56B60DE016930
+B82AD792313A7D1CE655B0E08076AEE57E1BA5FB00FA2B264771507126FDEDBC
+688FA19EF5A87B5958A952A2CE751BF57B84FF314D5A005C32D5E7B63A56F336
+BE5C5BEDAC69462C93252A6C5CFA9C3AF6C40C8A2D13A738DBC1730D665FA91C
+60280FBCCF36E3EDEDA845C74817706474551248130533880FCB0B81C5BD0340
+B85157690619844D18A13AF540F18DA0AA3B172636B1FFB5380D937F11BB8F48
+E14384548CD17D33133B624733533E20C1C7A68F32C814E73C790EE009EE9721
+FE6B3C0503A45BF0D1747BD8D5E55E0021A12F97D8A913EC9AC33856CE65D0C6
+4BECD978E7B1C5A22FB51800C9B554341C40C619DE8053C50A3828E2B2AD44BB
+54F2D6AD9B0EF34235533491A2C369324D5045A6A72041FC486D20370D571D6E
+8ED76A32C6F4CB552933AE68B1E71945F9316C6F5DB23CF258A27C358D8F207A
+0B19A734F426D447CD45F2ECA02BE75BE30DAF9FE2F84DBB35DAF6663F34D0FC
+C25F317EBD33FCFAA24848D0F56B54009C105B42BF5CD900AD2C1393D57EE2E0
+6438DD0ACD28B342F813A7C9C0D1CF42E459589F5D7A102F8551158611E14AE4
+9033B687C0D41927D592D79F14FF0467EF256DD23FBFD7AAB6D514C0A7204009
+A1B8BB21323997EFFBE265D369AFF7093B13E98A26AE4B55F9F5F5B5EB77D844
+7F1ED62F1A030DA13046FB40C94080BA76C9C7F25AEBFBDF76997DAD76884D80
+854959216CF55D0A4F13E559B9382617523947D1E5BCA59E7CE7BE0EAF7C269F
+4887C747072D7C96115B9C1145CAB6BEE769A4CAD44518413FA7BBEA3DA15BBC
+E07087389695E766B103DDE55D1F8C1D04F9FB3334A36942CB754F89EBF3EFF0
+679DF5BE6C3E6616B77FE1DC41B111A8029140BF783F2F27268E54CBCAABF4BA
+FD116E27995957C0CC70B58A501847218F77F84AD941E244D1A72A50F537720A
+4BFFD96C7FCFE7B4A79A0BC31377D462371E4024166CDFE5186AEDFA642EABF2
+9FD28CC8CC0C57B2C883B10357C5446D501D0803338FA9F50816D17F6FEB077D
+5DCCC960972610D8AD90DCED3B00F6FBF110FCA7E929E7D393C508DBE61CC834
+EF0AA977EA93C2A3C9CDF7E5C608F838B1B3CB734DD982A1AC623ADB79254851
+474E0E1C2AED4B35A9A18010451F2D7482A9DAC24942F38E8B1AF5D2AD6AA0D1
+BEA5DB0D318A434EBE068EA54431DCC06FA6F926172B8E50CF99A61745EE3372
+49520D7C1B343AAF52BF71F3905BB01CC894D8DE06AA256BBA16F57EDC72094C
+5AF15066607143AFA5878C3090E58FFCA4723DFC356BE32A4F3CDFB06D012A67
+892C6A003A3882F41F09AB778C8E8E10C1AF7C458194706535EA8D4072A61E70
+9176ED028D863C9E5A0AD6949F439A1FF4FADBF40E5E928CEA8777FC00DDB0D1
+E822AEC89BB6B4B336070F0D2BC30AA4AD2A11DBC1F8B9B0549D50949CD3F47C
+C71FCB5081AF3D9E311A28E18E7FD6289B11D1A39EFF0497D9795B85E260F970
+799696C14BA5D5B9151C72DB327CCE9AC8AF75125DA580A2ABBD51E4F6CB72D9
+9ACDCDBA1CD5C9B03898D71294D500F3FB5CDAD4397430A86D6B3977CA15A2CE
+1A87CFE80A49CE46988BEBBD8A7860937AD2DF3DC11005ABB4773ECF0007BD95
+BBF8837949DAA8988D6BB30E422E9DAA401D4FFD63015B094F0A457FCF9AAE88
+3F3E024679830D4150E525BCA3498B184EAF19AD2867770F1F03469433077651
+0094B6581D5B0E54EDD40111A97E60E73C0B9330C9CF68A003D9749902BC0ABD
+8474348A4869B6FD17F55C705C12C31A028151848C6737F72698D1BE9C7088A6
+29E22CB19BF8E3042249D0C2583101AF3ACC511A810D47A473FBF542EC8209F2
+A3D16F24E2DCABAE3CCCF382BA30E258AB884479532DD04A6DA6604DF2B32625
+B3CC54C079281BA50EDDA55B30154547E9A8761659AADB488A018AEEAF68F80E
+0C7034F74267EB98E471E5BA1A9BEE783C32BE433A46FB39D161210FFB2D862B
+B62B8EB2B3C4A5C51A5214B96FB4FA1E040BDA70507B5B20071E401C23CFC0D7
+702EEEDFE1CE5419628C804607362866A89FC32212EC9A32400E65ACF2AAF06D
+2211C1013BB3178BD882E77D1781AF39374641925FDDCAD306E8C03E28FE4104
+750D9AF95BFA667F3A2992A1DD79560AF95D3B5398CD3BECF601C7A42B9B0D30
+943B26DB414F1661C0EF2A1E8D8191E649AF2A33D3F1A4F340F7CE44B95C923C
+EE17F390D1A6480F1C10D55EF9B8007BD1FED5ED6123F9998225BE27A8E6E2B3
+5843A30AAC796EEB9C47F143C965AD99DBF3AFDB7B491C465DB02CD8DE18D62F
+9E3201C95B045490043DA9DACDF9DAD3E79492DF5B2B33A85B2610A1CF604F98
+913BB447E6FA6834AF454BA5D841B7D8EFD9733FA010ADEF81A2E4C2D6874D8E
+80811743BB114A07DC96A66E8520A4054BC1AF6C080147BF8C0B55678194467F
+909043328297E38C777DA2104B14C0E7C7F0D6AAFBD5CE82531DA83DAFAB4059
+70DC981AF4E6A75187B499A13D918600D4D68CB073BFEB8F4EC1E48451E10236
+ACEDF95B93467357C7028C6BC1AFE878E1988B39DA06C2123727AA6549815BD4
+E88BE89E04CD0D9226C8FC0118CB9DE223ED54684A86284D3F6E0192DD8EC04B
+F1E5ADC9B5001C6A5D57605EAE071648045C256B743E02DDE3729D4A2E82BD0B
+A448C6153732FBA2B507607517E0E8F4B3A44A4BA58D546C5A446100B9D94033
+B68D986182DBE076AA0BF2BA88B85A1EB27A1F4F48C77987A84E9FC3F2BD19CE
+F0359FB3C2C0E4A1908D209F78C64A1B6C4F6F9DFA036B764F87715B7AB94E4C
+153F2640F2BBF27A088F1BD64455648CC448B808F15FF1A1209EBC6C6FAEC16A
+B2D161F097766B771C80593A0225256080B651B0BC64B5D07A04DC34C767A796
+B371F1974633D579A7BBE8F5CF1152AE55F7F0766A316CEBBF79D7C59F11DDFB
+6A89E19FF51BFB7DF15FDB6045892B586B6BD1C86C85E01BED07F0E60270B4D9
+2302E6572419FCF662763ED382EAC4FD445BCFC78F62C1CD65F9D12A35EA2D97
+22B818CE6C8CED2C7EEDFABC2F54E043A9DD67645050C2A715093A7EAEAB21DC
+99D14DD19FA2A6A268171AA569A86E6F879F4EBDA7A992F2F6F4ABEA25C489F0
+E4123EE182BD059A8515708BCA74846920202EE2ABBE9D53DC2CC16BBDAF02C5
+BD46600A6E80BD3A477AA960A4A2906651A7338419529F30755BFB064ACF916E
+9F4D354C309DBDB3479EC7F9F5EFA0058E10742DB647B0C45EB886A2F997DE9F
+534C01676E9EE0CC91DAE378111A7B0359978A43F1CE9EA98AF86FB5C59A894A
+B418CB112B4BA5BF017A7AC5D2D1F003FB274715A1D35B4BCCE309FDB9EE0DD1
+AF8567E3F5002155C6413A31D8970CB1A42A6D6E16B67CB24D1609EF671DBF2F
+B1085E1505CB05BEF96770B176A19F521D60B2F9AC46A5464A2401E2945F4559
+1D0603255DCA93B1F958381D3DB4A5FED62548BDEE0CBD9977AED1F17A00F19E
+1CF565C08EC5B4DE3C108B15615285BDB402A4480EFA1AD102846B3E543EDE5A
+5E6F7D37743479426F267415347E4C356B92F7D5D4A0632F333E5CFF2870FE19
+6C398FD66A952EFD26CD6C3BBC23041CD57D0860BC421D710D06E2FEA071080B
+56212A069CDDED701398CD9185BEEF08FA0AB16C97C7FE79FE16D6A6B11B7AF1
+A8816DEA4F99D2EE29A357913C51D569700D5C84A52ADD60F9E75562567E9AB5
+E35A1A1F656D12D0EEBD2AAB9846FAB4F7DE2699CF6D100E973DD0E5373289A9
+570A364A562306BF8501CACA8DB84C63F1EDE6BED1432B138EE201635897586E
+912EDC76BACE7047C529617C42582643BACEA3DE8B895B2AE895F77B140C4E15
+69E8ED61B57223B2BBC5C9E5A9A4475A2FB97BCE4DBF40280469FB1C685884ED
+C5974BE43BEB2A20AC947BEB1CB5CAC0A35E0D7671702AC28BCC4A999E57DA38
+194210379106144B965CDC4F246D0CACA7CD201A72007CE0C5FFCC37EBCF76E9
+45A77F7FCF51C434A9A89A020CA63A27A65972C05887FBE1BBC42B4F4F73957F
+7D33819A42CE80975F3034FB97366691F43273B5B93E472B51D792AC8BC7ADD1
+3519A5AD82C8A0087853DBEA22DFAD4B8534D21B8FC56316AE951E53F81EDC7B
+CADBDEECE84759DA9C23073B64561BA02B8DF0C2459165AF170FB95B316201BE
+D38F5982A2609E1BD8FBD493573F4E52843A2CD17B30B715DBCD82146AD366A6
+DCFF854DEFE6B59491BB56B0632C28D29AA90C76DB5FA0C1F9B128B9B12D53E2
+DA7BF86CDBB5E9432751AC5476690DCDA8F8F8CCF639FDBA2DEF0CA00BCB5011
+CECD240F45B271B6015EB7B7654CFB5DA4A2E8F320FB1E9234B98626D9D8D8F4
+057FDFAD9811182BD620CFF4DE2864AE715AFAD34840D128A30AFD1307FBFB6C
+876DDE39C2796C1718ED8A2DA7D9EB4D4341DF3F534419618FE709DF8BABAF3F
+3FE8288D735493B788668B75845CCBAC3F8C00CFE5E1552DC7107782512C509C
+A20C301A0DB7BCC34CB41D75A104E27B6059B0C3A6C504DF208CC3BF011D04F1
+2AE2716010DDF5AE6133701AC7058B43118C84B41CCC0DC299B6606912276854
+4B83958032CB8EBA71753D1BEBED53D2EEA20CF31FBC5072B2EAB23AEBE5248A
+FA27968481E19EB28B98414B7D31C7F26BB1924B291C366EBB48C571B3A7926F
+749B80FA339E44259F0119A5BD8B57E08DA3D0742043E5BC1C19A346B4895AC1
+3A04F9343956FF300493843F4E4B099F729BD3FD908A6DBBCFFA5ED0215A0BE3
+35ABF720CF166B5BCDD246BF0FDCBE949150BEF341C9E69E05FCC71E0C3E16ED
+4CF58BA615D931F318A071CDDC95EE4F7C5115AEA57B7858628F8E13DE33E771
+1F57861F42DB53EBBC4332DD5D3F96098E01BD1D66EB13144C2CE6A0558279EA
+51742CD7208D1C1E65A283D1CA73556856863CD47D78D1FC79CCE077BC2E5D14
+F10606DA0FEBF17CF8401A6CA37CFFD262A87432223A80BB1ABADED4261D46EC
+A83D208F90699DE6C9A389BB96F6C3F4E02777D308C2E3F508A14E21B1446E2A
+33BD47CA44355E7E128C73B9B3CCF46F50760248270603260C40BD9FCA63C01A
+F3270E80DC263E0B5BEEADFB0AD0EA48ACE0023AA6EBD736AAD1E999C492C674
+167E3746D71B4F58E6CD01B59C73A1E3AC18CEF0891FE511EAC8444133133AB4
+DC7CB359F92E7C53DE1E022B448E7E4E566D4FBD0096F4583EDC6756797D8635
+523B99ABBA63EAA2F25F1AB5F7C687D41B933897E1F8B27A6952E46381EF63BF
+FBA20918503CE2EC45C1A17E29CB5E462DFB547958356E2FF656C3A7C600F28A
+888A1B5DEE4D72CE606CD61AAC7E426BAC6119584F552F04B3D7EC96ED1EF048
+0FFC3B36569070BF4FCD2E46B3792E3A365D695CBB7E4826B4C83B1BFA88FDD2
+133A119122B249CACAA06EDF17D451B21136D01E343A78F365A0116510CB5C2B
+E947F1ECF2A62A32330D778525EA0D577B8F84FF34C27E30FC3C650697B96139
+C54204EA3DBFD74E6C42281A27C121F757FECCE281DB11740E3A56F380C79471
+294ACA3D94D03F62AC700C4B9E53C55AA423C5E0E7581192DF9CBBE60753DD4D
+181FBE50213D9D0705DA4CECF039B959308EDBFE219BE4E0541D30175E448717
+8496143152423969B755D9CDA8B1329836CC618BC0994B93DD83578BA6FDBD21
+AF4923DC8E1075B8BEF515738F2E681DB3D6E9AF5F7AA7BA32FEA6C6C10DA83B
+E1E01A0359A25C564AA1739D56FB040C56018CA5E8F69EDDD735BCE0EAF3EFCF
+7E9E6696C48AE1FA14D4CEBAA680170D300027C1329DFC81CB6C2349EE9789C0
+D15F7F2E1490447870E09FD26D40F18E5DE32E945996FDA4E8A9F77995C9AEEF
+24E82B7F26D107251EFEFD92A62FDC3E46E357EABF76D4B7D3543F02A33941C3
+0EA0A9E1691533C2E2EF79E02E0C4579794418496499C47C1E01C03D30616371
+B14C9850A0FF427FAD4F21FC84777EBB8B0CA14F7526C37779D1ED6ED2526E29
+1072467F0AC8079F509C634445322A859FF846F437D6455A0AC702D59B0F932F
+0EF41B329F42F83566FBA693B87C45E95D743F6523DE11DFA2CF7144CC329060
+BE3C24F17A584998B4EFA6E48CB65ADC840D6554793A9647E3BFEA0B865832D0
+9657A13D20641ADE20DDAC86D26583F5DA14101DA5C971CB385FAB7F4848CB1D
+8800CC239CB3A9E79FD1CCB5A667DE7184EF65A459FFCE472240A803D0ADB5C5
+7FD08B11C77EE7BB13B787DF3E01B99D57D101D8B209B6F7A274299E1EC57BDE
+0D385104C7C0D5F0F835EADB865073C334B74BFD2F5F34705E07334855658D49
+4A1FDE32645FA4DE91CDA7B17B941D0B23F104BB3377E983099AB3B61F794956
+F4854DF574FDA0B4C356C90ACBA0963F98390FA630BFEE1E2D9F995FC82BCD6F
+8C658B842D9574AF472082B60E52CC67070DA5AB29A7C973C9399749018CB904
+88A6FA21224F8DE7EF9F8069B12CC04622CBB7A0C55BA8AEA0523C6D4A64B089
+27E52BBA3B44E98569DBB50ECE9C48B2DDBE9502680E5B618A30C4B95DBEBC91
+9BA2355A940F6304770E70DED7453EC77B3C9C732C9DB9567E4193FB23C89592
+7BB60137EDFC52DF7B06F1262DA52F926E48CD5A750F71FDFC573EB8462845A0
+4EA8E0DAAC302A0EF2A156444F8703D5702EB6C9B58DC70F7F154C0F22A6B53F
+573FBE610D2A2DA232B21DC38D37D56D147670ECCA5DD005B990257691E5548F
+4095517F9FDB1EA0670BB3C325092635CD1207F565B27A6F901AD91484855A71
+A8683156ACB1A795255E8EB09D32F598E9475C97BA191469642FC49C81EE721F
+77B6363572A188885DBD798057AFF88DDF08724DF475B00BB73F681D975E9CF1
+1BFC142990DD34F2E1726FCC8D9F10BD9FDFA8A7BC92212709F00855B547E630
+C26BE4D5488927E8992AD160D8B55FC68C0F1D6A54C0679D275E58A3CAE51977
+B8048A8C2455D58F200DE978859A7D1FC44304C7EA735EFE591E28EC3DD083A9
+9E53D4EA808E10F4B9F3866643E2A0D1CC177FDB0F2CEC6C3DF9B1A92A6ACFAC
+08BE08436F708C3D13DB49DF09EEB57866CDD598B663F10AB42CD229E6325317
+F55716A44C75E7CD8D2B292DF39DE5040DB9F3563CFD2C186065730A0712D446
+501BAED4FD53A9D8F521624E270FA7F932294726E4B84A3FBB7659AD1C5A9240
+DAFC17654ECCDC38A9FAF28F301F10E5923F33DDB0B9AE116143218BB22BC3CE
+402633B164D6E4E3B3788216DE8E9B38677C71AEF5DD109C63641AA99C2B2DCA
+EB99606BC079F386CE077B9647CF93B400D50D11162AABEB08F42A19C52F9D68
+80FF02F006874D2AA3F41BA095DECE25CB7E021C91D25EFC992390C1ACB76357
+9225F06096DDD549FB855CD9F8FDEEFD1375D702E2E806760529475ABA67EE50
+B70FC8860FBBAD5745459DCB1B8AB9F1EAA5084080C2FF89141FF10B459DFB93
+2C35A171AE9219ED5FE507CE7E3813C94F346E924792B1130E9355628980A18C
+6F808F28C396EC813617EBFF922F73BBC8651438A1614C9F24043D110A589B89
+3FFB6F4E99C0AB4EA4E50A6284644137F093D527AB9490A7EBF6140D9DC1FB98
+5090CA16E9F08BE79B49912963719B3B35A442FCA493EE5198F9916F8655005A
+9EE372FC4404CB4168F82F810A58371ACF7AFD46CA46F2F94B194429255A9BC9
+4185CEC1C929945451968B0817842B3BAA28A1CE1E10B6CCC328E0487CFE90BC
+3BD9EECF5F8FF1C99C8805A4970CD486F4DC9BAB0129E86B1F67F08070F04A46
+B0910BA9E173FD4DCB568B08BBECFCF6695414662DE690BF32A90237C8B0E72C
+206D09A580DC92A135179A5E3F1E611A3B05DBB05E4A8D51BA3D0A165D3C40A6
+AE013DEBDF26FA757F6CBC881BE672BB467C1920C067A0B2A49A532A391A8E87
+F2C6E50D247AB108A1740D4D82F955A91D49E95259A3DF9715F34CB45ED5DC9A
+77631A4A1553EDB8D4ABD93869FF52D3CF0017CF887B408C02E8509DFCECDD27
+A295ECFE0332BDA5678C4393ADDD5D171B5FBD360CCA5810F79F5F879939DAE7
+892D53FF5F505CC0501BD40590420A291BFE8E67F09AB7A3E0665F6AA8FD04F9
+67C4B0084C48F9DE8F7E0785F3261844E45C9F5D4A45855BC5B7E00CBB865B31
+2BDBC1B1292DC374B6190D12246DB97BCF04F679DE3605E532451B3E9D7F5997
+E1F353BD1E35CB11C850C9CD5ECBC40C9685DCEAAD279E315FCF85855D6B40C5
+D0FEE8692D4108B04338A70A50BC6E2C04F4472E294A182B88C9021AD8C0ADA8
+0C7A752F764548A51DFECA58D6E39AB4F78BE0A83DF6D60D25CB0F328D8FFD49
+16427FFF198D1FC3F574B3271688A31DA28952EF065C884BC0FFEB547360A372
+7C39E5F2FC458831B9C42128CA69A8198FA0545CFB207856D6BA97E113FF7E26
+DC46395E649205C83DC7565F4130CD6BDD44ED8D4D383D0F37B34C6F2DC98CC7
+4F96BA2722C996879329A4B27089F0A68FD6355D26946039F25D013AAD2F22FF
+12FD7F617282C6F005A6EB12554C47FEE2A5B1D0FC7C595B9DAF268084C91B37
+5FE0ED62A934EB511362D1F14BCAC4950EBFBB2A3D1F45C1E34498871CB4C346
+54B7349577D54D26385D784C5E3C2D869A7336159724FAE151FAEB10E231F3C3
+A17B959192186081556463C3F5EE6FFDB06E82B8B9BD08C0443D8CD84BD6EA7B
+1C2BDB46327CA21FCF002B3E8EF4DECE86077AFE6BB5A941B9E068CA023D54C2
+8E91E503F48B0B4B96ABB07F084C2EADE9B2F41415EB312B9EE0612E69F51177
+654AD20A2D93D457E2FC3C66C3705F9B48A947329BE59DC7B871C055C590FFC3
+F6B5FD8212255D25EB7787E637D5CCAE0E1EA386BF0B911F414BA45E30F36CCD
+6F5A17D0A887B5BEC58B8E8D228E12C9568F820A7F820B6C9B6631EA8C2340EB
+377CEB0A490166FC33AE1F38D3629C090606D3E8AE8662A98D6C63793B1077CF
+092624F46AE4548DB4B22FB602C39EA2E74B5A26DCCCD210E043D508849703E1
+451C8A9061514DC7312755EF16C2165DC1DDE554A29C8AB6F9ABC9A5127041F9
+FC22CD3BF15A4A23DFC8FD5661DCDB1E1E1EA65E77DE4A8D60A2E564F467F071
+5C8EB4509C3F9A97D0371EBBD4584430AC8EF155084B63B9848FD4CE2B5C6DB2
+C3A1946B4BEFA7B088587F912D20F0A2E15A580584441A4742312DD4B34503FD
+338BFA7BFEB94379353CE264541D33433C4E996BECF418A2E3295B9961FBDF28
+77EB608CC870B97D9EB43FC3AF2DBAFEF337BE2F108DDFBFA090190158A244F0
+8A757A95FF8E25B6FBCE09A1DD6FC5C8897456E12AE7A9AAAF0E42FC632D35AD
+EA2C00D7C61E047CB071163F05FB5ADAE82D0E177BB7E6C9492C2FC9F511F75C
+0FCBF74F06E057F6B66D3F72873559C5C983DA7D7E75EEF7B783EA44E4AEDAFB
+2FD8C3779D38EFEFEE5BD565C3A73D307D81EC6C45C2F02B7B342DFBE2356484
+BE59EF6527E956D8E1C48C80395F34CF4AE1B8B5C2A06072DE5C59255ABA30B4
+3B5039CE2524141C0BA73CF79209B0B5AF17C59BA0EAB437802A22A2E2D6407C
+C861A71EA547220134412109DFA1F6D78BB0C34F6FD36003850FD3D9EDF39741
+2EBB9AA349BB5801C9FCFBAB69E1D3BD5F4752663E616A8E1FE486545F3F1BA3
+8F8A11E4C13B2CF97A497C2333A22C696B499647DD7439D3D7B636FBEED2D32C
+86FF745763413B53E064B16E5BF157C9DF7313FB9D46C752B52E963BFAFCB392
+531F4E46194A3BE24E2F51EC9BD57FD5E82668E2AA9D72DFDF7F4500C1B81526
+C09DEF71CA6D3A3A7ABB1BEF21E99DDDB82D307BAE2B6FB28FEFA5160E18304D
+25B1665A7375FFACA6C843A0E8BCBBF59FBE24068A79ED68A6F45AEB7201BB6F
+06EF67DD19243E68DB34025209E851DE3AB65D10E108316E733DFD25B0F8CC8C
+056740761BCF195AA6E1C2857BDE85983408D400A96EDB887889F7CCFF403606
+F9C01F7CA76C9CEFFFC9AB7D3ADCA36A0269283F5A65594ED68F43DC1BFC6117
+1D113760B0F469C34CF089EAEC99C5F7448BF6285DB05D35CE182CD80491D88E
+3CF21FDB249EC96516EA42BA9A716283C7C60A1D9E7EB9E217B2B4EE5F316110
+2DECF4D895423D64B87B776883FA49225B6061E820C9425129736754184CDEC0
+67B63E5D07A455BE0B9AE382FC997195AE0AC4C07FB761EA5002C3943008F7A4
+BC04588165242A9F4C31E811EBF1E145C2D102D1D7C9331EE6660E054E74CD7D
+8FA19BEBD2F89BDEA0DD0B54B0E1B5EBE3E9CB1E5A1F477CCAE0955BFE9950E0
+01211AC8F3430F958A4DFC6E74502D9E2EDF5E2CE261DE00D8DA75BCDB83293A
+0802B7D5F14BE14380DC1013877AE4624853F3FA041F944D19185862A8DCE73F
+5F0181BD84C3E65AD11B2F0A2FE36B1803084E82274CF4BE3B0151D309C3F104
+771C6DC985D7DDDC77BA40D844173A9486B539DCE051DC82FF6D6831F99B9891
+48D6B027B8B6B6279E6CEC7D0606DAAB1A86F2309F1A4842A1DFDD5116FBFEA5
+0AB6C354CB65782464770B72B39DDBA2565CDE941D68ED928151E23675B541EF
+33B070ACC0ED70A3A18D0833CE7A90C911840E06577872FD4C3A67E7C195F73C
+2418EF0889AB1AEA93269CB1B98CEF136DD38DDEEC2450F7C5FAA9775973E178
+1182455E0321C4DF13B1EC1466D8F5BBBFC38A2A054B57FED2E429ADD7CD3EB3
+425F266AD5F0B37576EF54143D42D675E895EF20F54E1CAFE0F2A2D2075B28FB
+EC034601A147177976623733D6FC00CBE2DDB1E9DC5DD9E7D12AF9E589843FD3
+607AFD7DCC3AC648862C559B98790640A78E112B757B15FA513A76E1C3AC4074
+DD520E94998D5DB08C1D3E822FEC4ECBFD1E398B480AE01690B14BF92948135B
+4C042F70CDF3B988BD02CD54CDCACF912AF09C0C59CF23F84094E5C976E6392D
+D7D5ABC68E9EE23C080B564096A30F67241987999244686137175D8570DE9AE4
+57EF670B5576BBC1C0AD4E26D7817B202674F70CA62A5EEB882C2ED1C6272C00
+5598595DF2AC7F82FD1C9606183157EAE7575B07828BC2C0B2D171F86BF3900E
+43FFD4F6463FB5C6A1201D26A8B58677F7CB00C5CBDE1FABE2641CC2172775C6
+3F9FB0496CE71E179D70333A628091B47A3100A5B4CE624EC9CE5E4D740CE3E0
+0F03450F95138A0437BD3A7C4F6FAFD1B8B2A0EE07FDF76E427A8ADEE7CBED56
+B57F9522F8CBDC3236224E6E3FADB549018E757E090E1CEEE91C45C032CF1F25
+67FE17978B998DEE1635236EAAE953623BE263D2C444327E91C4EF9740B768F8
+70A6CFEC3511252D7432C96E5B11B7AA80BF620B63B82AA4777823F7D0266A75
+6DDBBC79CB7EF862FC8AA67C07B87C40EAFC0C81C122AC0348F7702E95760F93
+33508D7852E4A494F5C6CCEB7CF67F1AFD391977AE0D85397BC85BA02C0C02ED
+51C9489230B568BDBB8485087350E140611053373E46EDE979AF4C1D1047925E
+9F67E9708D11BC71659DD61D3166B156670D67046AC2EBA08A25FCF2B84E7BB9
+56FAA25B67004C1D6DF8D12D4E9F1E3793CC1667EA7DFD6D67243DCFAB276AC4
+DA755EC98D63C11D5D10E59D74A4CF627F699F1A018B2AD652584A810B2DC519
+549B2CE246622CB20DB69F25399315A33B244BE0C05FEBAE53D00E4E266DEEDB
+D1912D49E6699105767FE996B0CE64AF777E5D559D36BB141456339447216362
+59721641A762F6F6A54CEB3D0D2D3F75927E362D6A6A99CA6A8BF739681A60C3
+232E952935AE9B34DD4FD3D15385F5A30B045F3670D517BFB924BCAB0371F3D3
+CE9C5161D8C634BCCCD3134F8AE366D3D7B2C7B32EA89FD61231E30DD3DC1BD7
+FD295D5E49051F6C35DD7AEF31CA904FC20F36F19E0B9B838750868D69A752BC
+64398CF36B006D8313D0A349C9D93AF56F0E01274D9AB369309B9F4E4BD0B8F9
+C6B3C66F38C3027CD1AF8802BC82904F3A619F89D5CA5BB78150A8D39B9A92A8
+9B5F5BD2674CBA06F7819C0C9261EA9671810A804C1C14CD6A1D7116F9491BBE
+269653566173D334F26E76CB8AC3C345D47220D777449AC0E82B435A2817AF7A
+711A664519CFC16804C966D8AC088DA2AAAAC79AE21E7B538F3554B65CF29AC1
+57B646E6BA127A7A0B169EC680ECF5C230CAA91A9ED6AB2A54B8EB7E8C94DA78
+67C22B180ED661264EB2004EEDF1923FC5EE30E0A6F87DDC414B7507887F8411
+9B999F25ECBDCF8FC3D9AF99AB8AC08736091CA28D78E77354F3205CD56F9221
+B6CB6D81A34E3C954F73BB23BC73D4E4E6B961EB4589E5C2E21E426D78E71958
+3782FAA65DC184CB4944FCBAD6ED0A882F8767E2E8A8CF272683BBCA8A4657FF
+8E856DB3188939D424341DD0D9B8074461D8F15FBFCFA7AD63C81C4F51396640
+9FF1B14685624376BD753D186F75C695CFF5BF63EC9B20D2CE365BD0A4822069
+686C8737732EA874127D96CE11F889A71071771D8356A5BCE475F98D79C8CA22
+E98F5175D0016913B0C927616AEC836578F02024E3D4FAE49F428F68A026C592
+37870C5DE3A1833AE1C24D461FEA
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMMI9
+%!PS-AdobeFont-1.0: CMMI9 003.002
+%%Title: CMMI9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup
+/UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMMI9 def
+/FontBBox {-29 -250 1075 750 }readonly def
+/PaintType 0 def
+/FontInfo 10 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI9.) readonly def
+/FullName (CMMI9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/ascent 750 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 58 /period put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5
+45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4
+7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7
+72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E
+BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89
+974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674
+11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB
+7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67
+7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8
+BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365
+82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC
+E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74
+91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E
+540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112
+7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8
+93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D
+EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756
+972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A
+6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149
+796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94
+DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B
+D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80
+E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D
+0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83
+F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9
+ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97
+72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F
+F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9
+4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1
+692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C
+BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109
+4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1
+CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59
+41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A
+9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20
+5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292
+2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5
+8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B
+33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28
+03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1
+749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE
+CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE
+3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F
+64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F
+90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05
+DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8
+F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D
+4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF
+49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4
+E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117
+58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE
+88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3
+B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE
+7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776
+01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46
+19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41
+194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55
+53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3
+F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4
+412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6
+C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC
+C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108
+4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831
+E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81
+AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF
+00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A
+E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91
+C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC
+B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8
+2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980
+F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50
+0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023
+28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4
+E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A
+C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42
+20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B
+7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE
+5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4
+74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4
+90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55
+3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621
+98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066
+54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7
+93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC
+19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A
+9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD
+E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84
+A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB
+107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA
+5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08
+22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95
+B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D
+403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789
+D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6
+20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6
+943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33
+AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F
+A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70
+B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA
+2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84
+2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F
+E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D
+E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F
+8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642
+87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4
+2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842
+D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC
+512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4
+4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559
+6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9
+9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A
+0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040
+9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B
+FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1
+430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8
+56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE
+718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3
+F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE
+95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B
+EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE
+6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7
+6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867
+630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111
+6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA
+89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475
+3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2
+90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47
+38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34
+EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9
+B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376
+9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9
+1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF
+1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C
+62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5
+84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2
+AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618
+D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196
+BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6
+4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6
+531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24
+FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2
+43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256
+D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6
+0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4
+E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53
+DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358
+99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD
+8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1
+8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73
+A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5
+362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3
+C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79
+E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2
+07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F
+0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6
+190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4
+5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D
+F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50
+005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8
+6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C
+D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9
+F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087
+F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE
+2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752
+F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0
+0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD
+73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2
+62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79
+5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98
+F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F
+6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7
+DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109
+EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222
+E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107
+536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18
+36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF
+B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3
+F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0
+431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900
+5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C
+074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78
+E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77
+2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600
+324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F
+FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMSLTT10
+%!PS-AdobeFont-1.0: CMSLTT10 003.002
+%%Title: CMSLTT10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSLTT10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup
+/UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSLTT10 def
+/FontBBox {-20 -233 617 696 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSLTT10.) readonly def
+/FullName (CMSLTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -9.46 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 39 /quoteright put
+dup 45 /hyphen put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 58 /colon put
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 80 /P put
+dup 82 /R put
+dup 84 /T put
+dup 88 /X put
+dup 92 /backslash put
+dup 95 /underscore put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3
+2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777
+6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18
+979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E
+ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF
+B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59
+A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA
+3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F
+D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC
+6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F
+3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C
+4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90
+DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2
+753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131
+54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D
+107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3
+7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231
+328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9
+85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C
+2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7
+308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450
+CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195
+739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93
+FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6
+F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312
+3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A
+A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F
+55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC
+A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB
+69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50
+82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0
+8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8
+0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6
+0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8
+1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1
+D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F
+B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737
+170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863
+767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D
+EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F
+AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3
+826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235
+8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048
+345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE
+67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD
+802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E
+20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127
+5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07
+0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36
+22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC
+4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF
+CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B
+4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880
+0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5
+220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403
+7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005
+27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE
+B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300
+7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07
+A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D
+45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10
+F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7
+C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65
+AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012
+DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781
+FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA
+997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4
+3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A
+2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605
+31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22
+A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891
+43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D
+4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5
+94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E
+425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616
+FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5
+51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9
+859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852
+E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F
+2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910
+82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA
+22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D
+200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5
+892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32
+0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140
+437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3
+BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9
+E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402
+DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1
+CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551
+80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F
+FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA
+9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41
+031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90
+9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3
+9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891
+4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB
+57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B
+2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39
+0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9
+03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067
+22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79
+06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC
+39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD
+E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163
+A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6
+9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6
+B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F
+79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553
+2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5
+8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA
+1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA
+0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2
+BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3
+312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3
+B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F
+9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16
+A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6
+91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F
+7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D
+78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC
+7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09
+766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11
+016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D
+C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3
+8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278
+E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC
+6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8
+B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959
+44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB
+C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE
+5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB
+42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A
+F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57
+CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009
+9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2
+82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72
+0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5
+F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9
+EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA
+E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD
+D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD
+F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F
+14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8
+BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2
+9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5
+6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A
+6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116
+4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE
+C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B
+A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C
+9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780
+42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE
+7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024
+1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D
+4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540
+CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4
+D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81
+CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1
+0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9
+92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0
+57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4
+5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4
+57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158
+8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0
+C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3
+7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7
+B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674
+EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521
+D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9
+DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074
+F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D
+D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0
+56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8
+46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40
+52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA
+19477F075ACF64D424279612DA5AE02B2A140048386D01B1F30EADF2050B71A7
+993773D5B68C6FE65EAC53411AC6E7E26E49BE5FE1079A8BC565D2CEB7E3B896
+593D720DBF66CDB26DA5D8E533A346845E31374A7C85FB6B06C3D54FE3408013
+864CB0954A2FFC00ED17CC167AF714716376B789A71059DF2032E0E907761E81
+F0C887810337F52662AF43FA1A7528923B0A30A217FA184ACB73207EB3018D5C
+09EA88CA0873AE690E94D43B360D9C1070D7CBAE9BBA72E82EF9914D3AED6D1A
+5539585EA969F0A1407C8FEDAB69BA3EEE3097D5B123C5770D5ACBCB0882F35A
+E8A3E3B1FE3903A941EA2090266B60D218407AB99EEF38F18C9FA307D73E2F5C
+42F8C37E2F668BA6B0779791D8404E2B2CA52E28F0B34C85250B0D6AAF9D2DCA
+A12133B5B601D971345EB6D892B85FB971DB8C4A4188ADA6575DC6DC42D2F0C8
+4EB946AB47F487B6B4C4C59B2FCEB1291C386805C5B62B61FD7310A13B4620BA
+650DDF28FC1AF21FA124C16EE8ABB98904F03E7F49E54348B1AF2211A1768768
+D62E35EA2EF7F2756B58168F9FFB5785DAEAB324C90FDF6207E670DF277D6AB5
+F0924B26BCF52CDA2980680320314F41244B73DA6367C434B5DCDB96B6F0F454
+89BE7553B58CB230BE71B2C7A7F1D63C3B1E80C159DD941027EA44D54767355C
+6EB30D38D407FA1189474C2F9D3FD92F5CC6CECC63CF6CA6B33D77F08D274A1B
+0AD7C2DCEE55F1B425BCB98F24D0BD431A5BAF6F42BF897BDE9198E6BB331C81
+6B5B63F3604235FB733A882BA5464A3E5415341C8E9A2E79A5896C8C334CCBB8
+A2047CB4E6BB167BD586FFC4A1409B4C13DA0B84608126D10754D562A9812A79
+F2B3078B7CD1D0A37A192E1D58623331B582E62291B6EF6FE3C92E8EC9A40C37
+B251270944393FCF133426FBCE86A318E16141654DD7BB12AD46B60A05E86D3F
+14BDDE12FE3B17F9E2443E057FD0A25677D1F17C2BD87F84BA7D6AE3E7EF3EF9
+3DEB268B580A7823253430FF8D80FEFA0F9E4F66D0733E251E7F680B8B23B7B5
+A614F4FAEFAB880843451E4D9840AF7B8BBB6333E010A169528748AFBAE9A6D9
+499E221149C0AA19D536F3F121DF1AE056D3D0FF5C6D837BD8061153501F0209
+79076B4E0C63738C54BB31156F2273A327D3B6D0DDB5039D27D1C4020E90C94E
+4A4B156B32F28DD132D2AB4D9CFE18B7851A65BA965382B23CCC0915EB6847A0
+B14492B0405395BDDAB36C2205F229891D989196608455629CB3CD67E07DEDB6
+A09E68BE431182D6CE52CE41B8531FF111ECECA60A68E7E7BDB6B91C7B694688
+47786E04588AE7D21DC6F2309D492FC9795DD054C150ED94110A7F89CF3E92F7
+4649D3F4C778FBF02ADA9E577C5EBA24A1F0278E9D9DC5556A60EADEC068AC57
+5359E9FD0D2E3E7B0006127F95F333D2BE77C70EBB163EA9679207C76C999903
+50D76BDAB2DF0D6A506EEA9C952A3D28D419FB78CC64078CD91C39A5D4FCD9B9
+D135A4E24E373E24047EF1180D3BF51DE4167F3945825B7124198FCDF7432E20
+C35BE9B0C7C0CC194867C4CE9BCD27860826C14749B811E8FEE29015CD65E7F5
+307300B316054B7914CB7464E6AA37DFF4BD0AFC04C0E8BFD1269E2D4CB5A201
+785C32B6B5656A7F6CA6AD8F7C77DF8F70B8F99C88BD8D548E78986096C917F1
+C0C195F4CE7972F1354B95D1BD84934D80CFD09FA14F3DF37300B5E8C208C66B
+C544BFBF9B18AA7E27AC4E8567CB7188C20B1807BE56BB2B348C551767F40A07
+022EBCBE0749DE0D8FF1E2792A0BF2B84C940A127203E2216EA4F8689C84C739
+58D5693082E057B67C9BD80FBCA6463D9EFBA2B9F4D3C8F239C1A70D8A4A824C
+B045489E1C6BCD28DA4F1BEA2BD80D424722479D0E8A1A99A8B2FE26822D3198
+722E2D276A123A95128EB6C5C6AF9AAD213D088EE92917E0870179888296F4D1
+0FFB87A340D7F052B07C6274027559A8B3843F2422C3640848CD8BF664645EA7
+20EBCB14E9B15F552E9E793B2F5D7BFE849817CCDD9BAF7DBA26BEED536DF80B
+E250F831A12EC703AEE5ED6F5C688849B00C85AF124451A29CB67398FD3D4015
+C5D8824B7EC81F85CE9170560BEACD43ABF5EB5329A4E38431F243099B8F88F6
+58E8F6A7DF8AED9153CA90F9C941320750E5C26262BD14CE3CDBA9AED2270546
+24917E378761B5A96F0689511C12A0E598E7BD54A6ABD40AA4FE651AAB9DE733
+88677F863423C714476E797F4A22B94AF646819D91F9612E6E5CCFD9F7D11AB2
+DBDD3C8ED9D257E5A8BE4B7DF9997EB2ED23EBF4BFCBA1993796E34AD93C8CAD
+DDEE75EC199BF642C34BA24E323A7099C4B7D232328ED3C7A3BD476FC0B3D921
+8E773970ED221BFD47FC656BD14FEE47F06834C55C0EF960DF0265E847EA4421
+CF81FDFB40A4C997B1EDA3556FCD8BB4EB141EAF4DF853FD353120BBD37D4B44
+2CA1C1D5D8A5626870AAFD925B461A65FA0E2924A197F27B224E53A7140A83C3
+10A7F3868E4801C216EBFC5F8391A1576C69537686DB1CF7F2AE299FB03CF222
+6A38A57466A9C0DC13E9A8200649DA837A6C40E002C25114F0CFB3D2C0A9AF20
+C7B387856AEEE008AD60FA1B26179D95B3486DD3E5BBD096D4B105117418F60B
+26AEFDF53A815F712956AFAE0585B243D5A2B4AF5B517023867F57ECE2D538D3
+89804EFA77C0D9CE905A3303F19A9AB3B228A03B88CB26631814A36C27D09E56
+E965514293048ACF6BBAC80329F0422591F06637A274F2582A6BC59ECE5DBB7B
+7CB5056822A2426E4359DE632F89734AEB6F783952B007EA1D2EBB7CFB1C1D78
+7EADDF28CA76CE34F78E568B11AA69FAB64D8B0FC933FAD372B9EF19D5F31A25
+35BAF075193980F69141538B7E7586E8DB534762CBD9E95442AD17C8C2F438D4
+DAC23C5F5D772D1809ECEB13809662C6C8B97DCFA5AFD46C6CF3FC6F07BDD604
+5A4C473C7FF3ED34462A79487EB47D5BD4580E98BD44CFF016DCC942E831F7BC
+759A345622F5C65C067C83F7474EBEEF62E63F5B49519E0E1A7BA279784977DB
+C646DFE8D0AC7D78CD27B8F9D8E18A3A1C1AD427A85401543B0CE4F4469FE14F
+BFD02FEBB2050BD06558FEBA3F61D35AE7A0E49639DF68910174F41A20F5C839
+79545CB64FA870FA9AAB20B80CE7D85DB8A0F64915E1742E5835B5152BCD4B89
+4E7BC34E8D8CC93F5DE675090B7BDAD2728022F29D6A7D0F5508A189B8E0CCBB
+87AB29B9680978381252A9A37AD5CEBA8E4F8CA2C06D7A2133FF94B3AF05EA7B
+0C1497955A4E04183092871E66A7386E063B58764B62C33B6997F2E0D7F4AB76
+6093F606DF3C4E5F8A06E9D602E36F2DF4CA2E8C59EA6F8537A8269EEE427271
+E1FFFFEC053811328AB1FC60821F4C13D277EC66F56F27E0208726C915CBF178
+D2DFBEB767FE08AF1DEF4219F6C97BA5505DA3CF06BCE02E8E5013872DDB0E9B
+01103E8F7213F1A00C473349820BA7F202C9F8632B9D7AC4FCC98287175CB2EC
+7800B05D4A7617335D1CCC2094F70BA6556A99F2B9365409971DA4BA1913B7E8
+D6D84BBF1CB40FFCBC9B1C6306E9A148F39874A1E2A8FC677EB621FB46304D59
+B982A381886E99BE387640FAEFCE8182A2CC9AC76C1078D9E03CEAFA0747AACE
+16F9A95F5A97265A208ABD10C3BF49C1856461B710A29887CB6D57B61D24DDC1
+5DBBFEE1DD43EA93F9B0B70276253A89546A4E3918B5C93A991AD372606F091F
+EC35362E95CAAC00280DB8BA15DFA28F9AF7A6F9EC51FB2ADE3D15599AF01627
+B4D96F3D35FC4995EB18DA916FB6D24B56D60084E0CD8A32AB934845FF24B689
+67883D3EAB40BAB8FEBC3C17F6145CE0B96BA50A9ABEC6F1FF955C9FF80DF500
+BEEC7AEEA8C2FAA50968A57FFA5E9AFBAFF08451A63625918621B8FE9A46255C
+86B9E145C2526E4D27F974D74221FC90BC691454D7CC6413AEE3321D64E57F58
+81DF5C5954C794492D4135F130855678C8BB7C4A3E3551D2E89F3DF6B049D857
+9115B3697E07024C34985FDAF5EF24210B2864F9471879835FBFED10D7535002
+E806CE05BEC90ACF31E49AA6C62D9E169196A7C358E1AA5C886C1E1544568C2B
+500F208319AFCB37CBE4A568136B1791844DB5B627F66C75DBB7FCAAC4EA4620
+323DD1FC501727D74CEEA2C3D1B4D63779120AE0B0843FC978E1EAA6FE4FC337
+46F12F90D6168313CA077B85990EF9C6EB27F71D3B8C262FDBB297B1B88625E4
+62143BD515F6FEFEBAAF35ADF8B57486A14DC57614488C332E2B81B946397168
+1069CE21C21E8F44B2DB9EFC2F4160F17ADC55DA7218DBE64FBD5BABCA4C5718
+9748B61B8F7F9573847E7BB62DCA710100AD39FA555C2C3B3800BCE7C78BA404
+3DBEE48BA6328F47B1E72A507432BE4A7EA3F0AF034B2E29A4CFFAE8B30AF806
+F71936B5FE86F73F9C4B81123E1AE017B60EB2EB108EAC9579F3EF142CEEC861
+EAECCABA38C637306D8379C02548B4B33FB5D8A6169B3899A2D0499899946371
+BCD7D8D37924B66E4DFDF25ECD17408AA78A9A1D1C8A3615E428EDAE3E56017A
+0C2CD79A0D92E6DDC54746E5095B4659D73A251F3B7FD7625CE7EAC3EFB61409
+C1463D4015619BA3746F278188E2F30F997D477491D39625C2B829845D4EA97E
+56D7F3883CDD5938BF1BDCA2DF5BBD0E3D495554A01840E7E7A081A736DF6D7E
+6BDD580F717261F6A3953157DA05AA3B57FBB1E977C6A43555F7BDFCB35C8B8E
+B6356A4F1B01317B029918AB1C0400CD32A41515CA55E59CDC9C4641A570DA65
+96FA304094735B8B070FCDBA01DABC55C493A390F3A0B60D31C6EE3176BD5257
+F6CFCD17682833155B9DE734CE94A232BF9FD8AA45C35DCC0B16FEE6EC241BC1
+E944B183ACFFCBA57219D6BD9132E9610780D4AB07FB2F77428114E800CB5855
+0C26502E4B09AD0EC8A4B342DA732E24CBCBC7BEB15322BC3A4B004CB9652D27
+B85525C0E59DF15D972EE00D5D6DCDDE1A141DEDF0BF9309463C7D5D0D95077C
+F41EACAFA40CBA65004AC680983DB2CC892C1089A58514051E2C0FC16D74056B
+34151DCA72FADD08765BF73139A2A15A46067064490DAC5AB5039C545DE452F7
+35416482DD79C77BD0256D6BE9005C80902D9BE36F06FA4431F1DFBA7C982C66
+E141DA88A07902D83D1A83C0538DF2F8F8719409259196EC46B9D7815E17F836
+4F06E024C1A05A594BCC8C7489B3DE9E9C3B9D2D15B8149F6D09A35A8444CE1C
+704E2B8F273FAD8128A6033E871F1A36B95969EF3EA5EE8DE9B2720FED92D43A
+B894DFB54E6F3E4D92E18AFD7B4D72FD675AB7447729F4F618FAC4938ABBE9BF
+29045FD578CFEDE3BAFA55419C564CE39F324592304FF7B339DC2D889C157BE3
+A182E42DBCB6BEA7773CE2A058EE2076C77CC98F0C37CE8128E1671D8BD8AEB3
+1E724BE5297AEF6F8F90719D75E2218470034C970C7C3BC4CE46234CF25F3092
+526AD39838F4DD2399A4DE9BE341EA932FC616B02FBFE7EC68AD6E98F5AB3040
+C00C615ED7C7D427387D5AA99594EAFD54D3CE88DEEAB0A408C14B48217D73B7
+AAFF60D219FC71262E05BF9D15DA7739FAB52683D27A3E094B40D84E3C272D26
+F9CC125000AADA491137363EEBDE57EF302943F26E7DE08EC71707B62E717F92
+BE14CB7F5D4FF8A802030B10FA8AB4D93286AC064E0547032E2AAFA3E353F4A2
+4B3EA80EF4221C81BA5698D58A460C0412B1C1BF143E547DCA6CCA584011B55F
+526742925DBE8300564D621015796CD280DE573A0A733C5F6B2D4AD811EE4778
+FE60F46ACF6B6943B07B0EB0E4636823430A301B06BE688CC24785A8896BCD42
+39B97D9963BB74BD8BF05217B615983E27994FBEDB0577010E46BCAA04DB1A72
+77F4ED8257D145EC44B2B65B408BC71239F1C2E8434C1C2FEE4642BEA1C60C7A
+F02BF44140D0DA3E94D7658312A212FABFC0AA74F3512D513E82248BACD86A15
+B5A2C71F3692C8D702FA11B262ECE33B382C681D54BC275FBAB326D928A6A327
+AB2ABFF6C4A65339D945A671AD839DEACA7412ACA3253B399BA17E363B213FCC
+962725E0BD8CCE55985438700204353C507E4DB96C1B57DD7A071124476A5095
+BDA4C678F514AA63CADCF7003C73F0C505590526C0D1BCD7DAC0236243AEE48A
+5F351E12194DE6754336416227A63FE6C37D472EA1688AFD88FC94922094E799
+930F9952B2B1B86D1436C843A90AA230139B82449E16EA8B29108AA624933D1F
+5BB7E1EC1E7F570BD1DC0D2A9C338F4590D590AFE417D289B103E11156D66DEF
+F9E1F1F3A68DF07D69FB9CF4D09F2E2D47C2168E0BCECB8BA1CF856826B51D23
+D440D7EE177DC922BA367BC69871D037A508B80E75F43C331F7BB5FC96493932
+0B3CA39DB05BB29C08348C3F0FAC71ADA5C07BCFD160FE677A8A030BDE2C4A6C
+A866D89CAFBFE647B36F7931664F82997CBFDECB6F88C795609D1C94DC80F09A
+87221FDA3A699D0748F97E682B5B8C7B1EBA75BD44070DDBECB03824F9EA4E1B
+BC66A08A1A0F8AA3DC482D408C83B469315A2ABA685726CEA99BC3D15799D28D
+F81E0BB958E34A1670C23FCEE68A0DADD2BE3CFCC1914A9FA1B1A661693ADFC6
+378969C2E400E5D4AB0CB7DC0FA364893D2484DA98264CB50205B7B9A2532492
+81A2697B7FA4FC77E71D3117608ED7C474AA2FFEE8B3F1DD942CB16A1FF06C6F
+3741AF6972D09A5EDA91B4EDE291A7B3E3D481005BB578DC5AF13C88EEE51380
+78E57D8E073FA46B89A1DD73D51AB11B44048CE2F031031018697B2DA15BB05E
+B69E9E54F85E09EE3EBCFF390A9CF28B6F0932A46C9306911F2F36B8CA3ABC14
+022697A6BC560C0A688BD1E49AA9F9CF4917130ECF08F8C500E0096A8BE65E01
+EE5A2618E3C9DDD1D227EB584EB0763C6294B91DADC65AA8F1DB42BA25E77B9B
+AAAABEC083135CC61C18987128961505D602E409C3DB90F301CE2C792AB7ABD8
+1B7442AB1C8D5B1FB5AB30444752254A530B227A1E7CBC615B045031FB07468D
+DADBE63C9D1AC6F9742738FCF2896ECE73C131063E6FB3B954A77D1CD1F5764E
+3D65A43B627E8E7E10C5966C93E9794A3211D8B349D7F82427A65DA39B4AD1AE
+A98733594453F400B9841AD3207DF9A908372B8B7F8EAC363D0DDFB90411A468
+1F3F0E7A8DE83F3CEC745BF43D341A20F53BD0667B70613FDB9B1379FA61BC9E
+516118F7B1DC7A7B049E116A7A254F0A363694920EA156DF045038B14C229E6D
+19417309B6DFF125580B5279D6CAE9AACA31A1D21AAEA8DE32180F3456AF61E8
+AE8011BFA62D7B5A8123A02131D2F622211D74F104CD729CBE44EBC70672C064
+6D8CE2956C78B8CAF172B77E78F715DDA875A492CDD8357CB3AA3ED817043631
+0D278C6AB079AEC3C765D5E0267BD01C1D3F7AAACD0CF34EF8DD2FC5FF8FE85D
+E410CBDCE53C792C0ED5092162DB85E6465C058D95816008077E22EB8A98B8D2
+5A4069933FD3F3DE33926152C7DC712807784C17863EC78F9FD11A335BF8C700
+F4963F7C1A72505DB453012507A3EE51F7F2E814CB77769356C7654B9569B68D
+36C1EBCFACDF5C8D91D664820758BA73A83EA9660E33D4589C6950CC5C612710
+E9E97BEB5CB43F4109FC0F9E5EA126C1A9F2C4617CA146013F01E810EED40041
+5D09159A5B53FAF73B151499CF4BA3B79A19034CE461298D1B805E161CE837C1
+AE9A7298DB9DD9E54C347E64772AF100A5C736173D5D9EF4C45B8FF6B0ECA17D
+C1ED7FA96FAC530778D72CAB4D9920BC6C137EB3187B1DEE669419753B6472C4
+D29CF8ECD1D43AC03DB1413FE6D4A883857E2574C68AEC9AC7F7D3173E9EA7AD
+1A8762EB2841D29BA98B8C59BF52ADB41A1C06A50FA66C169605BF950AFFFED3
+6CF7FEE0126C0AF7DD7A85796BE7D93A124581EF530AA62DF4CB06A15A17D5E3
+F6B6B72CD7481D238B2EF97123EE55872A43599ADCD48443DD9DFBFD469C71D2
+624FE39A15FB5CC331E29B20DD1994FDBADF7E2843ADFEFFB38AF6E727638848
+4BB02352C312A363C3920604853550205484499FE4B1D8A29A4913F440E37CBA
+9CFE762651749B33BA532DDFEBA257869BE4585699ED7E918FF72D25F3EC0C71
+FC49EF6C38DD1105AE50D5DC13F6F1AE2FC3264C549FB4D8D1A959F25DFE913C
+1ABC41ECBB5B538BA1C4870E73599BA518FF41B6445D40C9B9BDAC2D552E4533
+670DE0C40C155E46AEDF4B74BD44A521815B69981F4F33EBB774391320D8B6DB
+AD9C9545557E21A90EA55CFA69B967F3E136CCA7A1E4C9D312D9D08940DECDC9
+1CF646FB7704DFDF783BBB1739DA1D2EF502B7B3A1FBEAD958DC99F086E6B623
+F33ADC3A758138E47EA3DE1FEC42EBC6D675C658B9AAA4C4054B1F81CCC4D216
+9559BDFD542140F2A101095F2B3FFEA124F407A8B650032265A48F065C3C5BD9
+66D843E3A2BA4CD7BF56A6A10D90345B51969A03DF45C91EBC2F3023A3E71B4A
+B6A7DADD9E3EC5C70207F743157A9A0ECE23A7A95798C2174281A7900919878D
+955EBCA90D02F07876BC3F5EB1252A82D891FB3E0FB9FC032080E6F700981030
+0E81FC3E75AC8623405CCAFA66161D5D471EA952F0FD4021754CB61A7B1445AC
+0547EBD4D78F141651A5DEA6262F0A05559DEFD434C5485FFBEEE7DA647AFECD
+6468D4D3905576FC4F670BA39F9956149CC371A31ACA929CAF0668B667DC2CF1
+8810C6CF9EA23CD5576C110183155DBF15F24CF0973532800274127C6C5C9C79
+EB121C5F0B74D824DDFA3EC4BD7BBB8799875B8A4776B60F840AE96A8F65724F
+AAC3BB862EA6F8697D935C60C2DF962F042521BB1D3EB9C064F2CBFD84208D94
+0E9DD9242157F4D3DB05194E82FAD5EF8C09092055463620D1B4ACE3BF9CFDC4
+989840A2CE7BF62D69BBC387D0184EBD87755E4DCEB8296D1005E79779A19B14
+354345A8A0324F1E61D88A22BC423D3DB4686ACB6CCA3CC515B6A5CCA6C888FD
+EC2CCB767778AE3FFD7ECBD8BF1828E5BDDF119247F11B299D5272C475C67113
+8F124D25A87AD26E8B7713A5189FDD920EAFC2D9069664744B6E7DE1AB20E798
+8BF9B8885BED5CBAB904032F6245AC752F392524C2FE09F636B59B17ACCE1E56
+ECDE4533FEE75C6ACA81D3FD7F6032B865D8B6F34DF1A99E01FB6534659921FB
+81631346B4530CC2E6B15389D7D494A4851C5F7CB502B394E840ECB67D359B77
+E940F25E96B3AA4DBFB0689C0C8D41EBFB5A9ABF7B817AC487093BA1013E345F
+B42647E031C22B77A319062324A7BBFDC9DAB8D5B1E0FA4FBF8036AD46E554F9
+6B925144323B7A79B103E808A43954DB3A03120EE5BF48438C0ED2807DE82FF1
+6800AA8EEEA5C70DE747B76246A437B09F402C8E1B545636E0860F670D10E42D
+9A579DEFDAFC447917E0AE0AD49F49EFEEAD72A83149A22A82F909670FDF4A9A
+B106147A6CD6D9CA4FD64191B7883E89C30FFC30D3262B9B09CD7D2440D85F28
+983B191CEDBCDBC06375195625EB247DAF10FC3F01259E59184F462B79592181
+DF37D70E698785E55E0810FC9A5094CA115B2067FBEE8ECB004856C68A18AE7C
+9BB1186342D173068A4BD0020FC703BC1AE0D6C8EF419288D7D0F09042C5CAC3
+6DDFFAF9A79B811C55F41AC87F93DF99604165A6D6E5938016C155EC65393512
+EF633ED422AD5BF8C66AD82B3B2B0FC59F40ACA8B62B2195D84478F920C39EFC
+328C9EEAB999D28CB365ABA1A99475D57D5BE151E107BCA6C65D535D8E83EF91
+35EC4BBDC0C5A124CE24ED6438F2103FA03BC103F899CC0E12428A807763DDC6
+CD11E4E11749145810B387906A7B3065BCF1E29A1815ED266DB7A429C3FB2860
+AF3305E4FE74E02626385FAB8833954B803CFF6231810CA8CE55EDB2DC2B1548
+82CFD8F105CC916B0A55E3955BEF60680B544501937E9A6FBDFF46E12B114967
+2066512D019B1D727D3759A708E5D8D8FCD99AEB82B3F660602F8BAF091A7AE9
+ECBF15E7720F671E85C5FE0F2871CE1EC0A7B8E923EDD845F6C8F8CEACC70DDD
+B2F87D25890FF1DB39BFF89A3A35B8B14742B4571F412CDF868177E406C9D07D
+B759D6D32A7CE22D9E9FD13802A170F20E9FD757B9DA76B12712FF6DD0E8F4E7
+4A296ED2795FFA5A0C3CE468C7A9CCA440C599C207BB084B1DEE83817A7F23EA
+1A4ECF72B3786D72D12FE3123D33559793046B7773C9E93AC1172026014A1917
+4B66A90C5AF50072C231F0B633F00EFED86156FF0FBD451C161DD06EDF438A38
+91FA7FFBA022A4468296A7132A3D88AC243B69C70F21B7AEB32BB5AA21800620
+BE6C8116466BB843FEBE361D1DE93F7C38033C95EBFA922FCC45E812B48B1A23
+C33DE814EE885A2354B37C05E405D27A0D3870E19CC718284FDD45F7926758DC
+62D79AC3C0EAF56B6812049148970442ABD34E0C0F49A6711A134C5568004C24
+F92B455E8085D77F48ECE5FE9F27FA91379C939919E78B60A54E235B0936B3F0
+E1300BB4CBFD05A18DBBBD76524B4084D54D990F5EA51E5670906E358B4977C1
+83A7124F6BC09AEC282DB90C2FCCD9D909B57959E6E68D2E50344100EB1B6BD0
+1A1FF2C2F0B250AC9B1FFB4A4EF3F28C022F7F873C7B3AF76E1830C9B039154F
+B3C3BD97DB32958B718D53B552A7A0B033E84EE515B42184A22A10D77FFE32EC
+0E1CD1708021D7931DC73448FB098A61C93B7D03F98465BA42D4B927AB115C49
+C0CB10C0BD55B16E6BA017306506D3D610ABECFA480D8840DAAF23CA03AFD9CF
+1075C8E9B821499DE23D4882C081D51649E5C9BBFF1431057D95D61351287B03
+0C9A6BD89F33C02555E1D3DA7F03CC395C1E3633FC902F060DF903FC96C19719
+A5B6A39E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT9
+%!PS-AdobeFont-1.0: CMTT9 003.002
+%%Title: CMTT9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup
+/UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT9 def
+/FontBBox {-6 -233 542 698 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT9.) readonly def
+/FullName (CMTT9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 33 /exclam put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 38 /ampersand put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 62 /greater put
+dup 63 /question put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 94 /asciicircum put
+dup 95 /underscore put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /braceleft put
+dup 125 /braceright put
+dup 126 /asciitilde put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0
+42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259
+4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457
+689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521
+0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA
+610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8
+3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735
+C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933
+995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE
+EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723
+2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0
+4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC
+B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014
+D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE
+510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5
+BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF
+93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC
+F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385
+45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757
+4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47
+088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8
+9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A
+09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988
+E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C
+0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A
+FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C
+94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741
+03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF
+409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71
+45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95
+39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971
+58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85
+84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A
+0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F
+F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD
+B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD
+D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B
+3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B
+7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D
+8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737
+712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E
+C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3
+E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA
+A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC
+2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467
+757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C
+54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981
+DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9
+08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD
+6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2
+A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5
+336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D
+E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB
+3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A
+E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627
+1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903
+FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72
+A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6
+465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0
+3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32
+CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF
+573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA
+9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D
+15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D
+D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5
+15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1
+64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789
+D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C
+D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8
+576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540
+ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135
+EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC
+9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099
+3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A
+1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD
+FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598
+C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA
+4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0
+CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7
+3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D
+D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9
+BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6
+1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D
+4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442
+C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D
+80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C
+AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6
+59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647
+3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6
+14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59
+B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34
+F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8
+54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588
+34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191
+825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439
+BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54
+4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F
+66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E
+2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF
+F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A
+1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416
+37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6
+741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1
+39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC
+887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49
+B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD
+15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526
+5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1
+80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839
+A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404
+BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048
+2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B
+B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598
+F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B
+9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483
+CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91
+DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62
+6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B
+7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7
+D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B
+9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9
+EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12
+0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2
+1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10
+85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0
+EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F
+D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518
+E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0
+88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842
+E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8
+01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68
+54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A
+97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78
+B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2
+D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9
+18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE
+A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13
+1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62
+31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5
+408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF
+1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E
+29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33
+BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B
+AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8
+0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D
+99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE
+480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC
+D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481
+FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB
+587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51
+A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C
+C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C
+AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D
+AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4
+48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367
+385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56
+8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38
+4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C
+839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C
+320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63
+7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E
+DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D
+DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F
+461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A
+BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449
+1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A
+3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500
+0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77
+EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA
+AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8
+F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4
+097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA
+53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7
+39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78
+77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0
+1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A2073F
+9BAB479A3F9DA76CCD65629CCEF78015ADBC2D0D124B3BB2D322FC4D209E417D
+84BC3C758B6AB64A01E25C9C7B71D741AF90A19A339F99A0BE9FC39622F04C6F
+737474CFEC19C890A657BCE192B9DCD8F273CDC5294875DD4507DC5723EBB357
+73DB0933927DC21081E67E5DCF4E41FAA6E00E8DF04128F86348FB0718068FA9
+918319C4EE9D090CDF348153B6CC48648C55E889B4FFD3D75466F1B50C437546
+7DD9CF20980B148F60BB146402DC0732A27F255DCB859CFB6F9D329C12FB14A6
+7824D6DE27B03FF85BC59703A5D6C5B7D1CEBCF3C3FCD71D6D6F0311E41BF8BF
+0609D23C84720FA9EAC961C9D49C2E962D9618C32BAFBAA8CAB0B2F616E57DA6
+8CB44C5595A22377B28599F7D34A3BEA4173E1D31A2A6C5670D1F026EE2092A1
+DD0D2BBACAB46E5B0A7113B1BC379709C5870981E482E01EE3D16AF9ACF1A5D8
+7ABDB4BA5C3B13AF047826F360C8892642B482C3C61FAC97F332888AE156B35C
+5C8415A75B4F0F25F8E95BC4102FEB4A8287C544C99778EB0C163C22481F615B
+0004F764FB7CCB01AE01A614AFC9650D3934F748E8785416BBC89F66C696AF5B
+B5F6F125F115241728D85E7159FCDBB10B64598249BB0E6FF1AF845B0A2370AE
+E6A973023FCAC4BB6158D48B0C928ABC4E29A0DD611D0F5266AAC8239064C266
+82D4D33B032418967406BC98156CFCE1F091F733D8BAB9523690B4D6765DBADC
+210E814DB8715A269474EC0501CF66FA0D8FD224EDDE93AF243032E73714F730
+FB382372C0F9B9372450FA6F13689C9429EDE1A105F234B216263A7D0A917A15
+D1FC128580A16B5572436E398C353A0EC62539CAA188901FC30DF7511C1BF6E3
+B462203AE937653C4562FFFF03078EE7A184F554E6F01932AFD07722A00E50BB
+2D2BB785961F76273A16CEEB0EE833DFE14BBA539CC7E48F67A9D20C94283137
+BE84025E86C714DC9C6FD7CE4D1D0C50B6EDC79E066521FDFAB6285C83A68B4E
+B1A119875B4E45BF5403950A25286214CB4183C345173F72E6ACFEA5C13B4D2D
+FD12BD235193EE6BB66519B553CD963EDD68E7EF9439DF0411C8193ACB183C09
+4143657304B1BE2AB8D2D0203E677FA1DD01152D2ECF9D987B16C3FE0B3F5F12
+5C920243E1CB5FDCBE97DF55102EDED12811F3F7165F4FE1F6FD5A6BA809824C
+041FF9441529509EF4442EA873E8E7FF507607D526DD27315859B31D0AC11475
+53C573EBF9DC37A4667133E99D8AA608ACB729F90B736395211043CCA3272AD1
+470F1EB485629AA8B9DCB56479F734703D859F1E4EE8789FD6F739D0122348F5
+1D487FAF1F24EF7A14CF69ADE7A87550F55F394506BC7627A5E319B30F362528
+8AB497EC03B69B58736A5EE0AD63743E7F22125536104674EA63F9AC5286A746
+47C73EE8E0320E7DC098CF43F23EDEF32D213523125110140F46202435EA8E79
+E285C7F3AA0C5877F75FE0F16BDF478A00A6F380C7B677BE479FE900ED3C4A0C
+832966F634C63211B58E9AAC3A3346ACACBD040164B491287B45E0131479046F
+B430EDCF59B0DB6B0594775AA57CE029EE8DC445463169EA976945A5765AC390
+CA615933FD05173C47D30DD5CCBD56D89B4557C7192C31D7B500B779D7DD3707
+BD4B64980767B6C9A1BC9A948DFB8518AEF581A1D888C6F767F3315EE99F57E8
+4EAA54D04A3A9E34B100024AA7C49DFE273231E3DF17073CCAF5B0EF20566755
+6831F85C57454D1B0A5A8438EFC7F4E396F09CC200643564BADECD2208915FEC
+78E94025CEC8ED965EEE5F6B8BA081478231547355F93491915CFC4DBD619862
+0F99133CE7F44756C593C8DF1874E973237ACB17F9614B79D45672CF62AFE009
+EC61B395BD96B0081DE750421A41E9D474F0E030C6B8591D364F29A6D7246EF1
+6B4CF9B931A9A474011C62D504F408651692921AE83116CA0E4E6F41AF877FC3
+CE77764197719291E68B01570AB7038D91B8B81EA501DCB5ECB6083B6764BE3D
+DF21B4B3A1E1A5C917F324A1CE5AF92BE3B2F8634A140637425F9BDFBD21FF33
+CBA42069981B230D211602FEF410EFDC199B6DF283343FA5E6B4FF2804DE56A1
+61DDC684579F82C65DAC3A4F92B34FFB6273EF4F4591317B8D2250850BBA236B
+C1E36185BC3C8C7A7654B24D7A10A489BDF675F6EFE7B4253F14CB3B5ECD1756
+1882F3D139EB5EC7860D70A176D1536F5119A6C23EE9AE9AB21B586DA19B483C
+6BEBA87C457B9DE3D7C71DD7F97E352B642D84455E44EFC54417ADBE7E190F7B
+7ABF6FA0EA84A394C8316BF420D6E2DE5B867E6D602365925C3ACFC69ED653A1
+DA30FF3B49D407237196B9401B1EDB7EF2260E582D02B18EDD38AC0016F28896
+0A61CA720216012D0FE2B58D5D675D25A679B1D70FAC10A4EB38060C0BB1AD1D
+D1C59BD5F44FDD8768EFBE75B6795543533C02198E21A4B8A5430C2C432E45AA
+0C0937D6CED532EE6714C58ADFE2B15B117E9AEDFFC1E172716C756260BA9931
+23AB837CCC7C36BD6B86B628BAA7D6002720AF00411E9D039E435EE479D5015E
+23DC9F3993546E50A442CD9D0429F7AF22D9F14064CADF2A3062F218582CA520
+3FD8E0F30B224408594EC426C8DEA57ED60FAB24461611E86302C421BA600CDF
+D4EDBF4044F0E2893143D4BABF0A6AA09F28FB4190B779B82A61C65264A199D7
+C2F50BD82837F08970F630E1CC74B4EF421B1032967FEF552DF3C1C83ED995BC
+CB9192ED8AAA906CD9708A4882150B27B1E75FFC0D1383C50BB3E6C36F5CBF28
+C0572BD2F01AFFEE5927EBE3B6CB8FE778ED2B524E252F59AF00A3F8F880116B
+8EA655D9C6A68CAA28DB7A75003D0C3B653C7587BD1A7D93BE73CA6219024EA1
+07C31E7F7BC9B874183C9337538C925226CDC48FA25D51A6A0677A2BFF699AE1
+E28D9E58369BD6AD73ABA706531DE565E1984A9C89D0C1EC6FC030A93D3D863F
+C45EA66F195CFEFF9A03A1673BC544FB4F491AE5E50ECFF7F34B095DA96288F4
+31C02347DCB6792ABE9DE684A1A92318A2BDA38C2D8DDEF29B8FED450DCDCC7A
+5C5D124FF0DA047D37E8874370D5537AEE869E771835EA607E1634BC0707C0FF
+75D5764B867BEDD8FA075F0CBBA7191B3CBAFC9EF8DFE79E9D7FD5A58916101A
+A920F37BC5EC845621EFE3A953C19853C2989FD31952FC4876A8F7C58C4F21C1
+31E6ECE0389BFDC8D6E391B04D443EDEFAEB77985808C398583BC4D8C9979A38
+9842C4FCB7A4E84BD67BE72551A43B2B330293D8655A3D6655A2358E014F5686
+613D19B474AE0A92A80E6E701F4B63EDAF59C3E12DD961A5B413FD1CB5400743
+91F673B3502C6FD90A1349D649EBA4F5D8A6E5AA41F1A4DE1C387E22C9CC2733
+D542291D5B2E5CCD0E1FC1835BD6A74F5DB97FC174730AF33CFE5E68349BEFB6
+F2C76171C578412F075F9730567BE7A2644B17012DDA04D681018CBE09BDFCA6
+1BB460699CBD6006C031A02634BE0B16375FDB9C582EBE6683B60768BC3901E7
+4388A7E058B61713E3046F28F5ABF58417DA878E1870787C472FA08C2FAC7517
+4CE71727BB69D19BB40AEB50F1BD66704EA37D2A0B82F60D72E15440BD27064C
+E67CA41D97349309151DA28E1A7850587569A794E9FE46848A4611066291973C
+A6CD19857B92F0E36B271F24D54ED663A7C64DE3534B0989D41E21E01469AD69
+916AE35C5177C6BA8CEDA45C92694077DF3EBB0377269619F9925876919A472D
+14751E6515118EF9B84A5DD8C92695818BA4C959485EE1EDB6C6D3553B6FBD27
+A0FC42DDF20BB335F7D46F0951C51E9BB69FA6E7C76A8C960FB6A4305FDD2A30
+234A5EFA64C34948422255C14C2A0D8A57174AFB7DF3DB2F520EBB401CA2DD79
+FDF6C624654DFFCEA8FCF5B34C34CAA7C6EAEBA6DC98E8557042126E49E51C3E
+BB7C91497A44A69E4EBCBDC0656AA5A7F419D0443576F530C8136AE8612589CE
+781205654730006F3A39B4F3E5301784F164A2C87C2F86C894EAFB5E79D7231B
+E410219BED0210BADEFCF27EEF683A01FE01DAB70AC8DC4E82ACCF6B5BFB4DAC
+A42AEF344755A06DE8A6BF6F2786435E2EB1D103C8FA4306573BE699571880DA
+53548A1FC1F24E50B3C2BACE9261C0245F671694A0FBFB4ADAD535AB9949C020
+DEFE36F7EA12B3F8D80E3E3D7B3CBBD8B6EB0AD2573DD5DD0B4FABBC790C9F28
+428B33CA533D5A6348D1A64D868863F4385A3F19D9F4766B6B81CF634981090D
+AF0D763F09A2919A9DABC0DC4602D72F8747176F947A92077956FF59FD0D88CF
+FE224B9B16C5DD710E6DE3B94D47DED695BCE5414A3794E4CEB7845915272ECF
+E4A657C7B53DE7DE96A8C901DA24D54A467EE083181CEE606E5917FED2C97728
+57887C7D19EEA950AADF6E8A99798789757BA126D925E330BB7D931FDF4EE14A
+04F58858CE09DCB1F57B8F780DABEDD1C26D72C9A5287C9DD30365693C5DD06D
+7365B309AF1C97BD3443B393309929F6D1AE27A1CB55C2F5085EE81928E138F4
+4FA21E90C89F0397C9CDB4D707780F2418B38D8A8D76793C868D4BBF10AFBCD2
+9BBB8202DCC02C37BE63D3CD22208A23743025921A54307A72037E6356EF807F
+B2E7DF2B94C51F19895C3C059DB4C42C2DBF4E08E27E31A294B580E2367D2F63
+0C074F03DB73EEC7293AB98DEF387B3C18761C716EE02C95315A36D42BC5334D
+984E6E35587BC0711D1B7F8EA8656C8059683C49CA41B0520D6FE1952A1991DC
+659D83269307EAAF5A9CA8000FA086B55587FCD0C798FD93905B1CD88A9AA33E
+9DBC2FE2A89CC800565567422052BCF5BAA443EB441E3B7B6AF0322014458764
+7AAEF162D0E03F28F1D0A0EEED8714442E9DC41FD4B90436DB8A7E3A9431E726
+FAC0CB7151B6236B2438DCE9EE814A358DC10699244FAFB932C928E0E878D91E
+36E840135A9F372A0DC2EECA730E8490F4D42DE218150497C5EE87A5FF5C2282
+3AA9D4B71996F86F8BDA700EBC01E3054459AA3F87CAB9C3A230551D4534C3AD
+18F6C76C41E10DB9DD67D19614A516BDD39C432005676C78B36C53BDB3646934
+3AE6BC84D339851BD4D07CEC26129467C7181760DE58D0A288FF1F0DEE52D68A
+8423FEA92D3D9331F75E3B062BDB37BEE45D5C338BFC462612D1CA5CFF432D7D
+89D34ABEB9F42CB40A63BBECECACC033538136B3F9B81F1230453A52549B648F
+E8AA9EE2B0AE82A1904FB78A6237247DD96B906B82945AAA772DA058B85494B5
+DBF53ADE76C1013C1DCC7A19AA3ADD198E3EEDE3269C4F3A6DFE54CBD17C7608
+3BF7513E37D9C8D688087E2A09B863882D46454A5B99CBFF538C008FA9BADC2C
+004ED4ECE65C4301862323B134BA11C6D4E691AA899C0E83CEA6A625AED13F65
+78D330A389A6D6EC23CD82D70D53D4F571C9D872E1A09679444FE686A12647B1
+6BB67C8AA4D500F6DACCB2E0C682C835D24C646A51259A72ED3E281C93743832
+A51B3B89D38E575B8521A39D87F8105F892AE9BE53FD758B8DBE2021716ACFB7
+350D5408C621CDEDC04E63DC4468C301435C2C2D61F3B2C24117F9ACBCD9E3A6
+BEA36A9A4227287DCACA0EBB1C6267F23BC0C3E0F28A89184FACFB919D49843B
+AEA30EDC40944FFE38FFBD7B33B6B05F5AE1D0E168E924AC698B7200D2E86C14
+E79E6768E27E848768A75DD694B48FE4839058824A9F5C472081962020B96FE8
+45DBD7153E2086C2DECB97B99850286211660573EB090E315BD727C989B8FE41
+D25635F195218A2F15FE8A5C5FAD2857F75969D1257158EE5C52055C1E11D18A
+8770E2DE895D7118B3886FD549441424F56DCB3820D5709B9D838435AAE4D64B
+6F49CB37B640BD905D6C3FC1E53C8304B0EB694269D6C48D81300DD537373040
+65B95EF64F81AEE581FFAFFF8B32DBFC16B4F1F7FF9DDCE9CF5D6A8A6D79E4C4
+209E47E16C32343B7D8B65D863F33717FC01CEF14A0F012805FAA46552535809
+14126B88CCC2F0E276F5EB42E0C7628CB2397645DD951E31566B9D80F4379A57
+8D10288DD980E93AD47F7F5EB41C4E0DE8AFC5118CFE87A804F309C6A9D1E126
+C0912E55D9B1FA95611FE7FD22C722610746316AA8703953AEE8D52F4B67F0E8
+1C12A3A1A38B3AFC87E78B29AB79174E1CB09880DED63F5EE28AE6916E9BDF2D
+3DBBF6F8A09A229BCFE45B37D0E28A3A519DD20CD8B7AFAABCF0EEE058EC5BEC
+98CA3FF46CDB8324A5CFD9985AFD545B1425BA1B1F8A3209D159925194C2C7B4
+F353F587F1CEC839996FB9761DA1343F24A17BBE4206324041E9DB6DC5CFB21E
+789DCC82093269E3D2894773C8BCD25DB0D6B3DBF7A799276936132C262C2F0C
+980D6689EBC8459C62E19C91EF5169439185F8DB0946D7156108A689F9B0A52D
+10E02422207CDF2CEF1C2B5D3D50E4D458B4A6C936CE9E6A6C4975AFD8790E5D
+057FACE7B96263BAE67A549B42F8CA016C5EF42B55C2FDF20D3A25A68B13FA44
+99D57478B9FFB6BACF69CABEA3C64B559A0D0897176CE2BE218396DD2CB25D70
+59BB599060F97D2CA6422F46D28D3FED8AA36FE161A91DADE4B621EC24BEB0DB
+31FAB9F4B67209C5DA12F4AC49B8BADD510C8226962D4657A80DD7DD49104E88
+A0287F75C8784516C98BD7BD15D91F4513384B46BB097291EF6D6229A529BF62
+0A5F4AF3C21150A058B08D0B47DAF540DB98EAAFC88E117BC9DBA9AC19DDD756
+9A90C45BA3E8C37368C7E44BD6BDFD96619ED819CB067ECBC13BE325409987C6
+CB804C705C040AE82EEA129A1A7AD4B7B362E799F2CE5C0390722A16FC60B1E8
+44B0B85D097AE0D5E08DEC18C3E576E22268D7F0CDA46D9469019C20EAE9BA74
+7B49EA6166F5AC94672063D25C4C0E8FCE359712939ACEDFFF9AB5E7442A2A00
+A7E7A05E9E10A209672155C03EB12CD5E80155A5DEE3D503BA08D71E423C472B
+A74CD26E15A200FBAB8E94086928E73860E50BB7389B3A8E0E833ABAC5FF8C62
+B894E007E5C220FAE6D53ADE85C747BD84D88BD0F40132A0D1FE51ECDCE1BE9B
+BD89734A56C3577515520025A7743F45B01D74588DAED6FCC209CC819CE0DC65
+B590337F93D92D71615422728C6A8AA4D357A4E350BF6CE2480D4E1A818EFD9C
+E6243B96F72EF5C5E88645A73189D9772E97911A0713A03201A69D78A98F743C
+C0C8562CD876F8DE0A488CCAA3EC11142190BC32B2D8FFBEE6E155EFD20BB003
+055C74D843F2AB34D9552E5620FACE9E40C04DD84E29A602151B7C3352798963
+94674A8246B77CECFCC9A896B64F296EBD891E669A538343C0394E6634D9BDB7
+AB6D9C584DC7DEDF6AEB695FF83953653CED9E2B7F6E5D2A965B60F1FD3DC752
+3FE4EBD010AD47E0A9FD989B15559783B429F50B3A70A1D8CFCBC150A492A8C6
+4F570111E78A66DB463BB2EA226890FC25BD5CCFAEDAB7DEB2D081480821426B
+45EDFD5C048A41F295415C43E86930C53961D954B54F6886044A1C5F6D2526EF
+F6521BFA9BCEA510AB3E1731719DA2E83729BD08AA2814663532756B1AC5E199
+329025C143B47106919977514AC51B681FBBF5B115AB82A15E24C7315091DFD4
+CD11E813DCFB89355F4CFAFBBD54822018E7EA7ACB3A06DE7B571267E0C66BD5
+6DEFA8A8AED615B9A7F40B138841D094D5BEB32197BF5213BA572AED3C87AC6F
+6ED6356BA2A2B9A3E26E43B3E6780BB66CC93A1A2CE94C90D48ADCA2BE608B64
+7C0C0410A9134B81EF24CCDC7426E5096CAE44EE96D666A4F3F72774105AB03E
+320FC752F294CA8A537BE8EB6FA85F069E6809553D3A9CB3384E132275D2028A
+DC6CE52E75DE9142E8D19C656F7A74D985BEC5367F151A151E5D41346AF70ED3
+14D68F0C83E4EC225E6F60A48200AAA0FAC3725551B8859AF513FFBE2AB3C205
+DCD56B1177021C5D819DC38BA8A042DB92A0A34224E37250AA0F65707C2786C6
+189F518C2E635D327D999949C4358402F4EFB6237C8A0A8BBC01E9B01F58A83E
+3BF161E39EF504F2E31BB62F27B4830EAE9B05977DA47EF338817109E0BA1059
+6DFFC6426DBBCE33297E6D36D3492B098C1691DEA31FDF967BE80808199760C8
+46E9D075B01F433DD5A43A2AD872061B3852B74BB421B3564E57C44ED0DE500B
+D976E02B51C656974673846B1B5E31F7F9EB5FAB81F92F62ED34EA0715950780
+6F5674E2D6120A4B9B89F749120921EE65043A66F0272B75C05BDDD09217A10F
+E9E93E647617CA513F52252556D23F34248D0EBDB3FFCA6BD7C31E3369CB1F0C
+20BF53BDF7C4F7A1C37BAD112254C227FACDFD40CA33EDF4688600E16586A5B1
+D53C2AFEEAA2416B29948B4FA677FC1EAC94B4A7A2AA4EFFA901F90B56BC2F04
+921AAC33FA46982497BD267EC185F64A2C6F51C48691908568A4F9814175AC6B
+E1B34565EF12D99AD27B74481FCBA29E4C58C8D031DAC1E58E24AE5E432C74E4
+CFDA7278C66FE60C11D9501EE25CFB8F816F06D1427D8A8A119F7E9A66471847
+90BEA16129627D6E12463C9DB6E4CBF9AC20F51EEFC808ED48D41F334115616C
+FC0F037AAEAB996F754FA6A8653B8912BA0A9BD0D0EA381B3A54A86155156D1E
+BF1BFF694F9EEA20EBE388D4F01CE5117C0EA6E061B807AD4B53270006E6CC45
+5016272BB7FE8540070D51A260A018E09D9A1C7CB3E3C6409BC1993E59667A42
+049F2393C872D0E8EC41FBC2671D0F5E4B99BDC5AD13F7B0930B881CC049FC39
+938DD4D270BA8FD68DFF2ADCC21C7C24ABD1391C947142F1C7CC6E7EE5D31252
+F84B92C304757C0B8394E9E2C2D4DCEBD7709FA645B883D8A5F9657FE6116F2C
+891F3DB3BD7DEA5922EE488678297C5A043720DDD777451AB916FA664519A6A8
+9BE9214DC67D68FAF516E19E1F65F162C246B6C010911220978C2FAEEA7023CD
+E2C2A175D2C79817AD4E4364090B9C6B95CE86840857599448EA77982CDEE30D
+F4E739DE78F7C1831B2FAD322EB48FCA0ED8FE56A0BE9E26E6921171C31F8E79
+D5A59BC6225A0AA217FEB684D1CCF1B12E21DBEF1F1315C920EB46163B5C2F46
+80669943D09CD519256D5A4DE9144FD5103B52774A530D2A4318E9ABFFEF15A0
+24F0590F23BA7612351FC0BD9E5F9A5A8D6ECB677978C4E2AFC4560986B7A8DD
+0CC30A82C2CBD2707A18D988C164F2B8CED74B1C12991E705F005E3A8D10BB25
+F5A45974096ED5C5F8A09ADA293175C763CDF9C3484C4B9ABA9839BB9028425F
+DD34E700820CA4B2BAF969C1DEEE659A6FF568EDE7B58400C07BDA06310B92EE
+17FEF247A7FAFBB56044FAD23EB2933D8F313A161767FE211FC103F392A9A1E8
+B633A259920A15D19A4F5780C09071ED04C83FBAB9ABF344A1B0F1FBD2A96A87
+E03F2785DD00CFD5B3B95736CFE6315E86E8A5E838F4C02B36859AB4CA203FED
+4AB0D43E2964FEF26993ACA619F1CF12D3DCFBD8E50AD02A72A6593EB876E244
+D5CDFEE1128408A5C10B5E70D680299E8A33489E1179FA0F753B7FABBB826BD1
+39D7F7A8E7C15C359E24B6569640123700FF628B2D76E2B7B2DE7C2F098A7A46
+8309CCDEA49CD277E96366EF221C4DBCCF17882C4565340EA41EBE83998AC89F
+D66825F75F751395FACA772DFCEDA5E3368094CF378C31DF2B405D92690F2546
+AA982FE7F32660E0FB33BF253F632FE978DDAFEECCF840997558C607ECF0CD57
+5CDB3EE71642ADAC37D462F7A23541F850382BC1140C8437FC62C34CD9BE7002
+0C136657F2ED4AF914AD3AEC860B2E873A77C818E491440EEE98075FBD7EE393
+B68FAB94C574EC914FAE259B065C8666CBB2D3604F9FFAA52DEB5F157079D53D
+3FBBCC93C598FD83769A8C039EFA0C7BDC027A34721E437E548F120137EC099B
+15D65CF68B5F2E5ACBD11A46A6E2168F6E38DACB52D0AF949B8BFC8AA92A6C1B
+E5A362B1B05A46F3E58921F6A1CD4C97730B14D31F0C1E2C132D25B2A63D631D
+C65813C00332FB695789D21D9903B3CD1425CC36C25C18C7D49014F85BB771C8
+D0D18204492ECCBF69D97B2342457C95A7CBD46C489690CE6B4A4363653B9D46
+A5A03BB8BC675B56A1CDFC8E0C3BC7DD7E4804E61DD27EB6D25119887EEF49DE
+905543AEA98A60471A3D512D63CFA12F8768CBDCF8F9EDD9AF084027DBF313DD
+059EC75136FC08C22D280B76F1A4AE628CF21DB9A6E567085DCEF55E68812A8D
+F72DFBF59786430216884E02416419FEC67428E36B62093250EE61EDA4E9FDC9
+08F01063F9841E1A5FC54F34A65F738A9E330E8074930BD9E85F05AB0E9DDCF1
+2CCC343C8BA7619FA512292B53F37BC95635A3EE07C3E4E91B123E2CC34EA9F9
+123C38F41B1DF9C2A7034BD05D83CFC2B86D69639B8C34940F53F44D5F549305
+F196464989975EF35F33B2B4B52CA9EDC6B32033B63BB03462CC58BBED662365
+2F36F7A46A371A60B245D53F9A7DAA64428EECD40A8F4C93D460490B092558CB
+647E53E34771DC04DEEB2C285965F4DCF2CCB8669ADB238CC12897F7DF46E6DB
+FD9D5BFBEA1DD262C4CC1B24E681643FAB80B34D057BC920ABAED5B39D2ACFE7
+4CA3A1999ACF8C9AD0F99B12922D37C03D06B77985EF38B3FBCBD6AFD21572BF
+84A7BB8C4ED5C3BE657673F8E9F3A1655C0179A4CA565D3B6F0949B2CBBEC189
+B0B46D5727EA5EDB274B66C9FD872C00969B9C6B7CDC3A8CEC053A443CB847F2
+540FAE81CBE3F6B306D1B8B913919D1B9FC029CD5D414DB2E16C7EC97F0BC73C
+1BDCD5F3FB0695EB84873FA73629005D7CE48A9A1374CD2A0DAC7F507D3F04EA
+A8F71F37B65C4D5F5928C7A59BDB73E1702D4E9508519508DF62DD29AE1209FA
+8766D6311A78B12C830AC0D870CB02DAC0D6434801CB48972C196E0CC92BDDEA
+398622BAA5B384FB8A0396777CF517A08F646774EFD5C6CAB81C37ED7AF68276
+C86AD81C3C41476A6398A6A22D65421526EEC405F6CC9F2520FAD97FFDDBA3EF
+9E8DD5295CE2390650C5B19930B45A410083442196A24413ED58BC3994D003EE
+F13DA0A43E7D99C70365FE768AADD61628BDF66FFC0D4195AE0CB7FF33EE475E
+2B0EB97F66B2FE63D3436568729519B2639BF5AD17F7061BF9F8A2EADDC7F806
+50C1EBC0AF0BAB233868B10EC7711A0C2FFAACDCE3C49D3A0301C49B82A2DD78
+92BD6740EC601CBD20D460B90EED562B2AE48E55A7C28C8643B4DACAE95AD33F
+27F2CB34AC65A0E62BE71CDC3D05361D1F07584945E4E89514C40D8A3132C707
+A4D56B054572CAF5F12E40406C26E5077C9E255516000F1733B136CA5C58961D
+A9B22F6FEE7B57DA278A3F8F2B8A2B52B5E2E1FED54F14AFC9F13B18734E42C5
+C04846F7CEE4700920DAC45D381100CF7D5DF4E601D3B933998D86D5FDFDF666
+CC4ECF675477D74327EAB256DC1727A44C3F7A6A970D9598EB46A5C38E81F3C5
+10D8307C19D849BBEB0C962BFBB37409195756E505278D619A73140B2C661235
+2091B4C6A3C81A3F532B8168E69EB1DA998C84834C2C87A910A2A65B264A20AD
+50F7B5B8DDA82DC3F45F394BAAE1BAAF5FE217BB95A30E2164C3193083013EDB
+950B9F2F8559B483BD35507E77A8C59CE5E6571EF07AA5ADFC51C4E54346AE1E
+6E22EE5A58C7B31687B936299B29547E214971677A0D5FDC566E61EA08E86BC6
+976077F73FBC8EA0CFCA796D37DDF0977130FF25C4791DC6CD5B7450A594BD1B
+291A8650DFFFAB3154F4129AEBE08C3A0F76A61F23A6662795F20B096772DA49
+FDC818E8F431C8D7488139A55443B81474F5D80D63E1CC6B1AA2241C0AEE0169
+9077ED92D2CB61C71F765AEB0A26665F2677D214B6C5EF0111171B165531D3E4
+7E9E43F1659A4F3E96BFE53F74D902BCCB2557013D900D19B86DBEE27F12CE31
+A94697D4DA12D98DF2F197BF7B7F6380E1CD7D1F9E13B65D5841A990642DE6F8
+0F86E9C087D82FD2A903B7C5191D7D87CB2797C3B24432F7D29BB50DE05D37A5
+B9090F2D26B1AF1EF3DF11645E317BBAD8136611F64885A3D635C3C1F1F42995
+83BB3D6719766FE2D016B42753A30887C1D57DF9CB860FAC2F95BF993EB7DC4B
+F61EA29CCCA247F2728D4504648A8EE0B7FA0A766282E63511F89CAD7B612348
+7E83A9D8F233757716321B251D122D9793FCC20090AB7BE19B1575A3AD6CB93B
+9FED5A9A6CDD855A1F09FCBE5C9DD97F93C49FAD92D3DAB4B32DFAE82E36165D
+5A6BFCE2AEA0F568A481C480D75C1F32ABA8FB904CCBF3FA6AAF58C02B501A62
+4D6C1F8F690BB4B7325A31B13A712549AFA18174BDFDA6010BBFECCCDFDB06B9
+406732F56AA41EFBC80266EBF0B9852EE08E76EEB14A276935114FAD24214CB5
+D177262C90AB93798A00D55A152D635C96846D70395C7EAC49F7A750027F9024
+3781BEE23D56131397B4B241BC6976A4F2B04C8C64EFD55E801D833664019765
+7A22B810889C096B55AD2B4D8963CE240D5DF0FDAB71E9091A167A80F5A3418F
+DF87AA78FFB1EFEBD8A2C97E8E7667B289BC23CFC16F0B138CE179402015CC4D
+F36912CAE318490F6A050B56B778DCEDA7AD335FBB6F3F05C526C8B5EF0B7BD2
+DFBCF5FD5C40F39B6A3455B86B34E89060AB0E6AB96C3914019CEE49EED033F2
+EE547725E1EDD60358DDF57F9EC734134515949C482D52079316D9A2481A1547
+94B4CA6724EFABBE3DE13F07951329A119D84A07CA8CDB199704694F4B3AF26B
+95DABE0B18F99025A88898EDE46BB3C314FDDA77018279B5DC8C854096F3C7F5
+4DE88F3BE84881A03C5E19A77B769EC57B4F6E5BB885485CF242A23C6E5FC322
+04511A00F27AB274232A97A2E5C45188538013667C552E804283C579F1700DD8
+B3C70F6D22FE133C15FA6D5095582333F9B4495282BAD0537B90BC6548427F7E
+12C9D744869A3F5F133CB2CA078C83B80F95AAEE5D64203110CA1AF12E5E0273
+298B2EB72DBB5FBC3F6A6D7004FAA17AEFB086870C83E8D742EE560DEAA5F727
+CD7BA16A4D6FAB7ED191AB92BA39300BFB73EE31B7820D85DAE74DE35B2E3FF5
+8879D9D02B251D7903CA30DA07E2B5694F23631CFB5EB08656AECE21A93DA6B9
+EB6CE1A290631B795A55CA75A5EFBC99BD1E21C40D7374181C96B43B696F9079
+E7BC8BCC96044E09E48EAA625B9D5C53CAF79C84E8032A0F976EC2FEEA9583AC
+25DCC02DEC8D4798E0C145CC523E5EEE82A1A73AE0EFBB08876278A7983FFF86
+527052AC0100CB273390888702DA5C62889808C3DC427BCC5B0A8D787102E641
+2ABFCA74C325F26A74AE2CC7637C9996547B34F33CE355165910F2C0E6445E7E
+70DE25D7D187EF97902D4D535956A4ADA1F1FA0CE9881399477A0B72CFB5F841
+1893157F662F071419B5AAB14EE66E1D478AA9DDA4E4DCDAFB7060EC629ADFAF
+5C779DE9AB8A65A65722109954599B931C42DE431F5A988459BE94F48F7D2539
+1A8D09133020EA37FA9C7CF8A32C9C1BAE51E112CFCF59CD7FA6E9676BAFD4D8
+093CBF4FCC3BB2E468ED55E28D75DF47CCF621662632E2087A8227945723823C
+02629CCDF94D5168A3810B815522588487CD8AD69EDE6D7FA593E638F603D808
+0E2DC9278B63534E63D22876BDEE3A7CAB88C637DC55C9D1C4F3309C01DF68F0
+3919523B2CE7CA52961AA3C2E618EFE1BBCD2C8DC65EC648CD380E3421F287C7
+6F7308C13F6D857C74522BE6A0B09E15420CFAAE8DE28CFE6350217DA9DB5083
+D15B0CA455D343119E3C1D25F1CA143D5568D63CE32856F21328D5AAD69236BD
+208BEC83099D6652E91253440A613155EBE7F2D902CAC765F5049FB5433AD361
+7C7EF2BF062877DB1981B9481F961A097D0402CD89E0BFA180027E29B990C2EF
+138AACF0D146CE117990CB9561FA6C0A8D1929D5B8BA4C4D9168D6A744ED4B4F
+457EFD4B36189371E60DCE4D2D97EDE139145241DFB26394A142D4457AFC0E04
+990DBBF7E40FF9CC5B0624E9B898CEED3A63865690D1CA256330F472EFA9059E
+81920A9D365AD4CF9618E64AF8FE19DEFEFAAABF8B878C42C07490AA600C0E56
+76E6C97F5B0038169395855E4338C84108D1ACB59E5482AF5FA034769A116EF2
+F408FDFAF2205DAD5AE5324EE9F1AC7192E070EA40EF350817F8A69D680DCEE2
+1B30277FDCE432D5541D27536E9086C2C74B2B0D5AB976C3E188EBED10777172
+76F7D7F73E38D15D03809B350C2F55E80AB7EB7D4C4C9B7DD97179F36DB5E4F0
+1140662023CA3C389A8B168A68303117179A4AF84A64B2C2A56ACCBECD6A98AA
+14CD43B8CD3FB79202D957E0D5BFFB49967E5421426205FE24C9608E5F591854
+DF895083505CD0A4F53DA06D931AFE3BB68F3FC3DCEC7059D3FF5218BF5F1082
+CDEA29587E7E9E357EC1329411FCCA0C3078E9787A12EA78D59B2E8CF2AF09C8
+DA12B2B0EA4A43283C8FC9AC945EB0E63CCFE272BE758B0F8B2C9BAC46F3BA97
+D05C0E720C584E805589D2804EFEFEDA9962B4CD5B145FF7305FA959B660FC9B
+37C79503EBC2D1639D2593B0A9F24EE3CC07352614C0B6C531585F27CFB6EFCF
+044F2F2A261B0C2D79FF78899DB6B1F2FB06BFAFEB488504D2FD579F55980DFE
+9D15DBCCC176E41EA7AD6364D40D931CE561E0AB57F5FEA21549290E539A3C7F
+DCE12F4ED93538385B2D30DFA578BAC6DC92A144A72D1C2CEA334ACA6F6C2133
+D1996B97AE8B102EC56426ED5D59DBBA11BA7D6FD39A8692F0931B64538975F5
+61B79F8640773407E873FB4714516037A5C6FFA8C796A9B01898CDFDC2A3F2A1
+5D3BD4C09165F6AFA9EEA3E0C84DB1D058A4C54EC0673860170038CC318DCCF7
+1F3960F12AA2C9447090D91B0EF8A320E933FC8E89FDA5D5897266A4D156BDB4
+077745CC076FB9A12F9D3BE989E2F8ABF44F4BF842DF548111DE129B36B535ED
+E5ECF8AB96D94EDB9E0484E00BF942491ED250EA8E062FC59F223A85F26649CC
+AB1AF18824045625756CE044529471B253B1F3B5FA2BBC3DCEDC457C0A42E29D
+7A152AE14C8D60122C5AEAF5D4360E51BE81A84F3A6CB164181DD1B62AB204E2
+3F078794D9FE570D6115B1C9DEA193996CEBDC5A32D8EF3EA3C309B9F87C726C
+5F2957494663A92639A418C450D42D027053DE7342921EEFD3CCF162DBD32E16
+9C8FF39084FE1117958230EF168E6FA9B48590EDC108D7FDCEBD76BAAAFFBD0A
+4EBBA485DEA8C89778456A1A36F420FE78B0A8F854CFDE7E26E76CDC2270C983
+1D5D914F3EEEC7E4105228ADD1646013CAE11C03108C6971EAD9C13524537A4C
+2CC3D193CE5CF0FED9939AF23E241FF6C82FCBE73CACA6B4B6F88C17A18CE4D3
+4F49BEFCF830777A1B26CF228DA61EA5177A826645B18F21C10E06C748E113C9
+03402DFE318270EAA54F518FF635C340FF581055C1529CD6976951F6819D5A45
+A4DD081C55E7597D257DB9E2E3DBD46B0878895155DB0C4D859B1E61291EAFFA
+7F2816E365A5D6AF6EACFD49362833DE3ECA447871D071BEACE9EB8591F31EC7
+CBCE3C2EA428301FCEB42ED2E082F89476F39F7EB993044B8DC23832B25DD3AB
+FD6E0A199A3CF03A79F323FF826682C8FEC47BB2B74C22A92D01F0E0CD8CEBB5
+C59ECEE83A7B02E949225EDEE26D5D11521DB381A26E30CEAC4D8E2FFB87E0F1
+44ED94C0E3C022D4B2DC2922321EEF1BB71DE6C221535B0EB6A9837C8A775440
+BDC58FAA05C859F05A654242BBB4620D92E5E8B3C5A937B98064BF97549E68B8
+8FD29B4E57EE27055217C910A199900E2A465051AE0573E3D46E5CD541BBBA59
+5062CF9444E95536CAB30FDCD35A56AF4F5038E65690633DA9890CE8229F6EB9
+E5BAA68E54F9AF6590B4FDAD42B7BC0A6708A1C2E809B743A5767ED46FCB9847
+8274E288E9B2A49803D238ED5FAEFBDE3863B29D55118E3ADC937E4B02287439
+B452DD41CE8298B10AE99AE275D45C5E0EB5680DDDE9F449855FF97B28AD1A9B
+BE728BC56C8B4632938A4337D794EFDB56050F5459C031DCCBB1CFAEBBA79348
+F5514685F1F16FADF390B55DB5B671D0E020C03C8D301683FDA4BE8CDB3C7948
+2F5648A2E049A495608CE414857236A70AAEF5EBAABAF1A0950A2B0B814AFD0D
+443CD6D2E0365332CEBFD557DD16FE1E3342A85057C5C8337ECEE5466406A324
+B7A5F881BBB2E442C9775A1C33B5321887E3A8E8001ABAA65B1B2BD1191D6659
+3BBD32F2B01A37BBFE2A3964BF37646262E4D667BEBCAF970226BE5AFFB86A1A
+21CC0D74E7376B9634EC8BCC46D551FAA67603D4B707DCBF6C65D932FC76C2B4
+8B2D03F5E29C4E2327F5791CCE1E42395319739422607AFC0B6962680A04A5CE
+B9FCA10C3EA7F9B1CFEA675F44029F68E3C9C0B90CD7751040239137508E1E3F
+1FFCA19DA7B0933ACEB8239703097AFA4DBEC0FD8F94AA7854F83DF191A44326
+EA23CB5F18E342A9110D30A1D9427492564E7CA82FA80CDE8B7ADD8787B3FCDF
+A5D52B14B6147262461F3563101CD20A457672F78F9BCB7F996D7699975C018C
+07ABAE4E0987AEB32A45577BA6157B51E9BBC37839FCBB886B8987389D8C82C2
+0281A89F98874003140328866916A547FF0B47F24982E346FEC11458EF35C95B
+033F35334E2956A631F7192A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.0: CMR10 003.002
+%%Title: CMR10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup
+/UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR10 def
+/FontBBox {-40 -250 1009 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR10.) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 11 /ff put
+dup 12 /fi put
+dup 13 /fl put
+dup 14 /ffi put
+dup 33 /exclam put
+dup 34 /quotedblright put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 37 /percent put
+dup 38 /ampersand put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 63 /question put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 92 /quotedblleft put
+dup 93 /bracketright put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /endash put
+dup 124 /emdash put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8
+569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079
+24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A
+2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944
+8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E
+3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26
+D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24
+D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B
+03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685
+767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A
+8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B
+DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E
+94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004
+22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7
+72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C
+8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491
+344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A
+64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B
+07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC
+1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8
+78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51
+CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120
+7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782
+BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462
+4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A
+5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D
+EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE
+EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622
+4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE
+0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5
+C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904
+314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E
+DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029
+EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13
+DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E
+DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084
+7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91
+1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155
+69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE
+EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5
+7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67
+CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D
+38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3
+22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C
+0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1
+BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D
+4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F
+3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD
+B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE
+15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9
+849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3
+FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84
+4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76
+1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798
+84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF
+7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122
+CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA
+4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B
+3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394
+F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D
+F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140
+DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7
+D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886
+56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4
+8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53
+59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED
+49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86
+87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B
+8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60
+C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342
+D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64
+D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1
+F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178
+0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B
+5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448
+229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC
+17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4
+01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616
+F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662
+3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0
+689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20
+4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F
+A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03
+DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D
+364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F
+7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F
+26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1
+43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD
+8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7
+C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08
+94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5
+C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1
+B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56
+4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5
+7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01
+204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE
+B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56
+7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6
+279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB
+E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346
+CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A
+65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78
+BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285
+6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7
+B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3
+63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89
+4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A
+A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6
+67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C
+DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A
+5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9
+C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C
+9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D
+B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51
+963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0
+D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB
+B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B
+72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE
+B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358
+8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB
+3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0
+668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152
+ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5
+69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118
+C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754
+3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13
+407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01
+11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF
+2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87
+4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40
+2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF
+9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889
+CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8
+DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973
+0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362
+5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7
+9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A
+EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2
+09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A
+2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2
+AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420
+324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786
+486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A
+EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660
+52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5
+9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3
+4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D
+B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7
+BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14
+6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0
+B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359
+16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED
+E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6
+546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED
+6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507
+559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B
+C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A
+ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354
+04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B
+7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A
+8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B
+A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02
+94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB
+C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC
+41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654
+7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5
+18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76
+9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD
+E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947
+5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F
+4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F
+E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF
+9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9
+89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87
+7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3
+AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3
+3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E
+61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B
+F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F
+D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6
+652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA
+07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11
+6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB
+EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2
+BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77
+2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDC250E2AC3
+9A160EC8C9654FCEB36AC2B586E978D54744FC8A0E963D8EF6E228ADD22D093B
+B889C940206F504F14DD921D909BE06EC9BACBC23EB9E9D137FBC983570FFD2E
+CC5D2EB5D2A4A8604A4AD418B800EDC6B89809E0009760E9470F037FDD15E649
+93E9C8FCD9436AF02447C7F5AC380FBE69D1405189E8DBFDACF0E7DAECFA095F
+E6AE1A2E9ACFC032BA9A5DEDE9DDEE22A88D9A1F1E0FD9BAE2D88FA168386D43
+4B93EFF3AD84A9C05A80462BB3A940B2F7311CF7054F501BDD4F1347213C9327
+5653B73E9D78866901235C66B0C49CBDE3A1BA3A11991E6B8443117745D96020
+38F4A74D9676E4E99291D4420C57ADE4A8D5214D07B14916D83DF15114393048
+FBE0DB83223F609ABE120AB877FEF549B6E2389487BB7ECF1979BCB0785DAD1A
+2916961A1DA60AB491FC90BCD6578571226B4DFD204E75FF18FB5E72DFE8A028
+C66F8576254930567A877DBD22F8372E7BA4F23F9497ED653906F5F67A66A1B2
+51957AEB8D443550161075E5523F3D2AFF386E2640B276C3EC5EDAB74AC0DC94
+7D975D7F5781A652BD13AA7F97ADDBE68847167997ACDD038E74E930D8248F0C
+2CCBC094031C7147BD8D4DD664184695CF8C474845692540FE2B8A72CDF9DB62
+BE05E15A05F59D56E5EDBE7C371BE5CB3B276FC7A03B5942057EC3136591A1B9
+15E504DC497B663A9DD1729EFD1478C233B9317351D000DC0982F061BFF25A3A
+8983E560AE31E321DFB137C77C0AEC704F8DA99024232F26AA6920D58CB17DE3
+C1BC8E20988FBC4705E594569BEFC3F6666785B2FFA49367E3CC695F2A1EB846
+DEB37E120B0F4C0783C0D54655C143C4F74DA0690C6D08D07ED225F361BC0F86
+572D79540730791DCAC15823991FD5DF1AB8F25F84EF40C085B17C9070C59EE6
+31DCE45AFA78440BDE4C69A4D954C2006070A2C310179851F2D39B1B5D3EDBAA
+289570BE80F25D75116BBDA61F002B832F9EF2C32B53258B15A1174225168B28
+EC3324C6EC61E5711811E658A1BA65C8D2D47CEC6071CD88DBCDE9CFD2BC34DF
+1ECD2226AD588B50AF2399D171E99D8086DDE33E24640A767F249797B1B742CC
+F4E95A64E1AF8D88FB128194673CDEFD6A1672DD1D03B6749E729587C0CB7C6D
+13BFC785759F35578D611E924CD89FF87DFBC5C93FA7BE150624825F7D137CBB
+FBFB1238C1A397826B8D1DF0A39EBDABA5F10B37FE8C27568E1C088F279A0E28
+020DFD377694024FA154AB5C06EDC3CAAC3CB5A69297E1079F5C2F351D81614C
+D73ED708907A96F6F8FB0994D3247045E8D41028432E91C7ADB2F22066D6F8D2
+701298CC9FDA7928F99CA135B69808AF6FA1E0A3CCE1BFDE234E9218A565FE28
+96541CB9381E887182873FD7866F5F8415EBE92E51E7FF064D6CEB7BDBEE4DF9
+97633E53488AB11EE93137AA185AA7E4AA043BC73DF1739C92B4D3A8C46BA689
+B9F8FA73BE010D7C4F9007937AD0EE3EE4E3041C72A2C4DB92C6C5433DF33A10
+700F9E891885DAFDA44A00781BD019A9FFFDB6FDF9361520D50AA5037E654C8A
+ACD179511AF61BA10DB29A0535972DDE8B838091B5EC3F6C3408E02B8CBB3FD1
+E213E2C53DB7AB14D465CB0E4FE2A2CAFA20E74BF4601CC23687FA7921CB1B86
+6DB57E04C99BF7F56FED75A052362016840676DE91888490B4A1DFE0C079C88D
+C8C3BD3527F7C006E1403DABB47C3F9174208A379C221931724F06270985BDE6
+A53263227EDB00124C5677613BEA94BA029F9D6F8BD1F7B87C4426210AE554C0
+7BC707199BF6DB673E40D55741CE1F0853504A414099BA8E0BC7F5EBA5392684
+79552A5D4F7C0CD3A6D80B18014008AB011C8C66C74D32AAD748EF30C1AD484D
+B56BFB090C5BB937E81189912665F332911E11E83CCE75A79DEC2838E811D5B7
+DA85AD6ACB7D8A98D15DEC66504CF2131FF06AC9A8A4FBC4CF34EFB8455C231D
+0F73A50052AC8FCFB2B2ACB95033AF04078E9CB99551FBB1C46EE6C413D86C90
+AE8BD7FBDB7BA6E9087658C79C4758E242256C0546DB76A3857BC89F26A4DD9A
+F4A848104BF1ADB2DCDA25C79BBBDB66CE1C1A45C7427FE7CE5BDDA7CB599B4D
+B5D346B15414DC9688A9D00F0372DB98FD33E6164E5D78D6CCEEF0FEA60A7F5A
+9873AA7E2A7F98893AC5A9598B71BD06D13D2766489248190A262E5EAA459888
+6D0A38261697EBFA55180F3D416C2190B36C309202D1619A405764612BAA3506
+7D157F49FA1E0A7F252FCB0B8459A30975E02748AE1A891FD6BB288E0D7C144A
+1D348F1DDD145912678DAE1906796591E35012373AE01E18515F5CC3BB29A629
+F8B28B54376A9E10D0CFB29B81981E66F27B6AF44DDE0A3621B9ADADA9588201
+11A0362FEF840B200C84480177C9E3F0777350BE92707BA916A90AA81160D498
+6417DB6C7E15766EC5C9058CD51879041BDF2D2514B0D6B968CA0A300EE2E30B
+6AE41238D76DF324B0502BF79D58C2DA1FF7E384891182AA59918DC8EDF92299
+BA162134FC3DADB6FA5CEABB94D1CA9BE1635F769EAA88377AD96510A4DA8F8C
+5319E0C06CDBDA1BA9845302F716DECFF7B965BE413A7BCFF3C4EADC91626070
+9A5776EC64C67DDBDBBC66F16962306631D70E62616DE4997ECFE39DC6BC9A75
+D2297C2159066195F43B7002138456AE7EF69220925877C87405D06144D250E3
+55EEF1575DE8564BF98E2ED403591F2EA4F6AD71A126A9B1F5D350819058FE4A
+949B8C3A7907A725B463B752EB3B44B090C731EBB86FAFE24340D1A89D3FC0A6
+B89E64C3FA480C91DFCCE4922C000B0533A052FB9305EA3B58A38A3AC2688715
+A7C7418637C393439725F0509B3B08E07DE5E0350A005E4C5DB815CD317EDACF
+6460DADCF9281BC6523DC8FFFFE18CFFB2EC61884E7B324806851A91F7E0336C
+F86AF2C88F1EA1EAF0F87013AFC7DAB6F6BE426D92A406437E38C75614AAC461
+4EDBD8F129D985A1385B0F9F1A4E6D9936FEC600F4E431C653DFD1D56F694471
+FABDCEC7BAAA0C266D35D7380AEE587F61DA5CD1229D99F82BFA7B1A45A165FB
+658A4E7A741E11931D6E5C1358CF76056CC0DCF4B623C2A8CCED91694E46661F
+BCBA0225541BA9A58EA1F2E2B2402299EF2B691C39A87AB3D5C722DB2738EDC6
+8ADEB09750D714286EB392D198A55784AD908470517724B92849D539ACAE89E7
+A8E37CF20CA87635FF92F1140DDBAA76CD52BFC0B40FBFCA768F837D0AFBC7E9
+BBC89422CBD6429B284F67AD2DF917AF69346A5BFE8DA3DA8F9597C2265F3BC5
+A90CCE79572DB45176AED6E1A5FBADC98816F0E29BF58DBCEF62EF76A8D8C845
+4C7E9AB94A0EA43D2FA271BEA800890613D8247171938596CE4948BCBC7960AD
+5B2BA3E0A4384749A7D88F3DD515CC1DA7292EE9775B67F621E156020419D0D2
+1A6AF5B51E64D3EA7D182AA65AD1F663FB28739B86F9EE5880A5A96C3AE1C563
+7A002FD0ECE3AEE80AF18A0FBCA3EDD496C18C8974E856BA39226C382CF8541F
+F7E2C35B3CEB1DEE3BA8F346199944BE2F350E4C3DC89D789250C3C5192236AC
+513D1A3058230470BBA11E0B39141F48065B808B6FC459A897C304B749B5A656
+38B55950D6F379A535CE2816498DE36D03747FD07514C2DA1764217BF2DE17BF
+C8FB2F06382136D301953DC42EA0B429489275571F6B86AAF496E6A2EB196547
+B76BD6DFF6054DAFC9CDC11FBC541426DF0351ED027FE76128411F6F62DAD159
+C116B43AC59C885B3308B158EB74405541F2BD247BEED5D3B35554EABCC133F1
+B71EA3C7C7876661EEDC141818A3E8A9C519E7054E26DC023320A0166FED1C19
+DB1C3044D23E5BA7F039D86ACFBCB5F881A6FF9135E1F5DCF910A873E6F7DF8F
+11372C039D09A875DDACA3FFADB73504C1749932C3792CA80D78979CE0269AD7
+47CBE7CA39E26FCE1E71DB711D176644423FB964CF8CCDF16FBB686877B1B99B
+FC570BBEE55DC7F2AED8E81FF38DFD61322F1FB69E5CD6EEB8135128A35FC23A
+5ADD95D4F873B2EFD14A1FF76CD20454BD3BD2752C9A5F0C21F1E5F39C5865C6
+D4874580E6224B22FAB9240E0346C843AF0C495E7FD5B3310D90A6308D47E882
+EAF80772C87D3F7FB9DDA52F253FE4E3D1E56EBFCBDB9BB9A977DC7E9772428C
+47EDCE4D4F793F4DB9C66E65827109E83723E50424A87B36D6E74DD05B327128
+E407252F937ABE315B18312C8BE965E84ED9C895D275A331EBA6E872DBCEE1BB
+C6254960940B95F46CAB4F8469E7412F546E62683AA356366F454308367A789E
+B1E6F3A07B87829111DD17856727E948E0FAECA4EB00192F125C2331011AABA8
+F4067FD01D56853FA445ADEAE5901242DF460ED8AEF939332F87D81DBE9A30A4
+18884AFF8A7F00530BC7DDD3A1E6C40549BE3E567B225E7C8844F0AF3E19A4A7
+E61F818A5F1BC836012FBB9AC4A5AE737FFA908EBFC88B2EAA62877B05B1B1BB
+65062420B89BC4C3C4B7CFAD1148C6A373F26ABA9A8DDC74DBFE47937035DB49
+20F0B8E788C0AD02381732BEB2B9587D6B50E6F7B4E9DAD171B8C64B60A04776
+F70BDD9C6C8831AE39561701FB54D68810E4C3249C32E4D39BB40C500C8A735D
+F316A68985E3A0338D8CF730881326E2B76D75BD2566D7387C0DD8C5724592D5
+1FEE9798B269DE09387D3A1EDAB20063BA852726BC7EF07CED98E2DD1957F94F
+7E336F6047A935E128444DA8F525FF1E458ADBCB1B6D910B68955DCC59512591
+2F1228007F9524A0AA6113FC6805AC4ED806D5CE6E03AC9EB6830EA9A7AE975D
+99A4FDA50B92FB6977BCE8BCBE2D8EA44BCE9B39718584A452205C4349561CBC
+7B1E281C058D0BE636CDDE883E1C1AE3802A35C5426443AEB6FF705EC26AF94A
+2A7BC536F373C0EBAB41C780E56F5BD1CA645DCED5090CF32D4F0E5A780651A0
+477CB27558B2D0E2AE3D0A02565EE38D5F437D01308A6BEF55E80422F5B5B56F
+6DD11ED717B034083F9BB1536D76E321255A137E618B398875B5BB8F5AF02B6E
+B4DFFB173C424B24BCAF3C9271A54166A65927519C9770B0DC44CE276ED0C20C
+8EF41AC3AEBEB0996DEE664E8F872023710D0BA81DD3A3EBF79BC24717BA1280
+9E9CEE362F5BBADAF6D8200835311B1063FAE4D6EC8325A694EC516AFD24FF99
+EEE758AC14E76FA1573462BCAA75D246AC363C412185D20CDF1539011C35D1C9
+B3B3717F6A37DE522943CF9B3D8CF284B4C0068A1ABD9B58FDFC20CFDC45BCA3
+DD054AF00C18CD7EAF8DFFD45C28A82C7B417AB7188BDB49A5871320B2EFE0B0
+25CE25F3BEFB53856689A44D365C55218190B407B7BF9855ADCBEC5C0094CA63
+11E014EAFA0D1BB324D3B1D94DA4A7AAE9D29C71E2D5F122F1C79726731FD066
+6545816A5E05DE1F8DEF865DDAE0D80E9AD0120A0C81384AFA5BCAED3F8FF80B
+B9F8C8A7517A3863034C312BE64AEABAD77A5269253883D460DCB2F0A3B28700
+255BB96397D1D613A14C3368C9F27F3E42B887108793F4B12E2233E5A3620BC4
+F886F124503FE64421C1A40C37B25127094476713D39EB73004CB56E877935BF
+BA0C7B095414A1FD59CA11573B86EA32E297BA38B907938B3A25992F0563022D
+CF54FD863B8792EFB58A27DC2CA6C4DF48B9388F5676CD462C1AC745488F6BA4
+2B923427A7D29935417E010099FEB69B16BE5A2AF7B4883BBA80815A09693AD3
+2B78D3A939FF18798043F7C88A76BDD527B554BEBAEF922FDC9B381D72C7CD3C
+49698A1444FC33E276D3B9263CAFA375F1E64C8B39C89D4A65FC42A7183E41F4
+1C3F0CF7EBBE5260F862EBBA059765497817B8597DECFCDDDA5C1D15AFD3C3D1
+6F1A8E43709540948B1E3B41E32AC13B469222867483B0E765FB427300AE9BB5
+4CED17DE5C45EC8391687036EF43D57835CFE689B99FA0B860E3FAA6471417AB
+BD505F23013DBD726BB5645F3006BDAFFD5ED0CAA7428EAFB448E0A30F8B7858
+311E3FC16FAF9FAC5E86998E4954AC4C9E32FBE6E9DF280B457BE80DDA2959A4
+0A874282A7F9AE5236843298C26D5D4160A4554ADBD3EF0254C4F2D108D49DAD
+E1D1B996D5147560D574FC238DD005D18CB32A6CD73C265F05E0AEA17C73E3F7
+2FAA00290D1A6361CF67EEAA68800D9212BB5B8F0259FC8D133A21E6BD375FF0
+4BB0FB1E78F065E51298E97164C1FF241336428932D1AB97E1D0ADEE93BA8903
+A8124A3169AE0B905465D7E8DF132D903C9B4C64074147F2BDB1F722BC261E10
+D366C246E8D664CB57A92883CD7174218655BA68D9919D0C8678DC4E7A7E66B5
+DD7DA4E011769991DA9D93311A06A623B680DDCA32B287104A1D7BBD05AA061E
+019BE06684F9BF987FA635B9764DCEC3A3286340A7D50355663D5556103267CF
+8CD9DDB4DAF109C47176A1E9443F3E2703788B85B6FDC8951783D08F02DF72AB
+DB5F8739B2B9B38CC813796F48FCC21B0CFEBC8F074E464989AE5EDDEE5CC3EA
+69C281CC4CC295360FC11F67AF3746CE3598A215FA109709A4B193BFEA270261
+8ACB9B7081A9D60CC49AB3F25B0B6F922672E58708BD707AF7DF35E32E7CB939
+CC25BE8392B3DF687FB67F25342671FA831264230CA39D189AB6267095B7CBE5
+09DDBFD5512A8831DFDCF53CDA45E3F0C097C0C4DA1F12589F7AB3D83178E9FB
+2E9B5236ABD35A872EB9A37ED9545C6ADAF8FF2000E67AA8C8A8E61C9829F29C
+5555FA19BF6949AE81487EBA68E8ACB6244ED2EE8CD537155B68BD1305FCE20D
+710147B9AB3CCF6BBC0F2C3D8D77D783ADFA68B208829F05522211E28432729E
+AE8A8C09C04174BAEF8D560D62733BBAF506D2EBA030AA77F18A38EA8E98B38B
+C03B5A3C33A7B36EBFD1D55D503FC06F19056EEF9D1D01CE279D2BF23B04E880
+D6873E16AAA583ABBEF1EA8E5D6C3D038738573081E264C01DFBEEEF02B8844B
+19BB8D27BAD7354AD310ED720DE2D4240F3106275AEF6F7ED61735D799306DB6
+4A3BECE20525769A0D99EB90D957297D5913CC48A98EEE84FEE5D02B30651CA3
+B7573DE50F1B9D8D50E5746394DA8C5BA5D71CF1647F80BC9337F00EC31476E3
+1019B41BD01DE7FD55886402565F688D1E09810DD8AF982032B048548D87AEBF
+B20C6B938C6D8F96C2D7B42A1E69DBFE6AC28D166804E03AC698B180A48503D0
+0549D2DD2EBA5C601841A711DBE9D7019E5DE56CF78457F412E42CEEC248DC5A
+C0F349903F745E40897D0331124749D0F9F9C71B704E4CB0898AC7120A880215
+236800020AC60B1E5682656534F3332C2DB06A7510AEA061D9206B4C033A80F8
+77DC8EAF7D32A7B791FA3930647CB1A29228DE62A9733C6AE072144BEFF15651
+791C8F99508DA1E3F8B451985DC68251044FEF9F91C7578A2F3956D97D544D3D
+0E6A3F7719F9561B47D76612D833BDB64780728A6456E8CF273BB708FFFEF743
+CF069E55B1A871718E02778CA80A5D21597D597246C260AD390E5F4A285A5CCD
+E55AE1C37589EE307C6D2E1DEFC605C9BC33511968CC8AA7E61F5390951087AC
+F4376C5BC48DCB22D8F0CA6CABF25383616DADD012FAD655FF4198245209E305
+274D18A98D760203C8AB09F7204A967D07B75E7650BE0A0595742F821F74193D
+CA0AF1A4875F50D1F3F2786C5532EA3913B3589215386E78157D6F38C4860698
+7DC51E51908A7AA304DF1233ABAE2B3C9B03F2496B320DCA5B7DE98FFBFD6FF6
+EFD2FFECDCEA32D0A7F799382366C6325B89C94B37CED9A1A1BC88602AC5D9BD
+1BEDB8D5CD2D38FD1FA33703C41F979BC24F1609B3B35295CF756551F9F2D770
+ADC3D23C5B7C6A777CB33A06791EE8481BF577A94016A061D8AF8882466F7499
+E66E7E93F104E599C79CB6F76D42608B9BC1171A9AFAAD93E846008330DC3C0B
+6E8BC7623E8693C1E7E8B5B8BC426B1EF8EE705D2E806486775BAC15660BDB75
+66BD708939D23762BFB8628A863C4F9978F83733049F63709066CD4203476CF4
+575DB5CA5B5F01D8E4DF345D78C2A938B5EEEE618507B2AC9EB9C4BC9B64CFBD
+AECF052FA5D93B306C075AA8A645E5B93D1005C252F0DAB540243C7E3C3EE52C
+0886A5D89A30DAAB4ED8F38ECE11217F0198347E62BDA7A1BEB6D46482BE3726
+33CFBB23A78756BA63741693D764467273078167DA48362985CCEA2889133C7F
+A5B0BA827E92333BB02221F6757E4ACB8C2198BD7A976A29387CFB9B7F51C65C
+2E151D1D1F73470B14587A6F11AAD77465975961CB77306E7793EDAC65EA7AD5
+E562F2673FBE78794C9D38659647EF5189F6ADD9B4250085A59F84C0448EE47A
+A073B712B6B1CE984DDE3125960C16AC77098424004666BA6116A042551B48E7
+507FA464B21209D31C506D1DAFB628FC2AB30279E6148F3A2DFDD183FD770551
+0CD3FE854FD619E7D2B62A8888C300838E41744BA759EA4E4F19AD5CD249E8DF
+74E81BFBFBEE42B2F67370B748B1B3FD5C6201866D8CFFF8D9ED127F43F4009A
+CB5D9651587B54ACB8C6D410128362A74EB358437D0CEBB9E0FEA7FFC27A5509
+E799762B27F30B5FAA4ED3B492752B04702E48B1D0C55155157FD7B4E578A560
+5C0343A472546826E9B9B80E91867D2D4C3EEC02133BC338954AC6B58499AA9D
+24CC3CBD2023E962D147618C08BBDDCDF36E91EC2D51D6DEB97A1477D8156707
+9C1B858385FBA45CF0FE74563A5D5A51ACCC3EFE991429A8CE57131AD56F352C
+E95401BEE11B310C96E9C3CFACACA00114625BA7B4400FFBC5947574317E8699
+90BD8678107AAFFE1516A59027E9907359B61C6B8A97B4F99A338BEFDA2C25DC
+D6413A0CAC46051E76BF732CFFCCD0FF1408DD26C76DFFB54F7745C79F3A7ED3
+1D9F8BED7C6977067E6C8E46EFEC63AE0D3953175A6E51DA38EFA2DEF475DD93
+1C34376F5C6C6218DF78EB84773361B9339FA58A88E96C646F291CEEF398D281
+E0DEB2EE21C3EDE0996427EDA0CA0A44247B1A0E03BD9366E75F763C9B1D2BD8
+00D2066BEF933DC6AB3586EEBD04E6D750A22978ABE902200200B468135B690F
+B840BEAD5EF80E068F6F87442D93848684A127EA79F4A8A24DE737A373ECCA3B
+B405847430C138E51DC18C367702E868CBAAEF6890FEE68A75C5781F32B96D86
+BF5A0C99F04DF2B7FE968B6566BD816C96D7EE35A863C0D4635047FF09F68302
+EF62B9293BBB8BADCFA64C6CD9024C4F739C8C730BD62F2B613C6E1923F04BD5
+62C556E3927411C2655045B9744C9DCB7F1DA9C1B5C70A145E9A35DACF1B68A8
+B5DAE1C62DF9220483F1DC721D559B87D7CD802AB539AF1BF3E434EBCB796A8E
+378B1139CB3DD3134DE8F40C716BA87185D3E406E3C941D336A1436D891803E3
+D2C8E627204A343811FA82FD1A232FFD6915501C1B158E890C534CB94FCD9ABA
+F64EAF649056C1198F0F58F56D3E1C91C167D4D9B4481D48A12CE297D5DCD0BB
+8BE16BF18DE1D58F7D2587B70FF5734EF8391DC5F709BC39E729713CDCFC2EC4
+5E7AA863CBEE1CE8185E657E7FA6565EBD6868F478554E96FA808A708B48E463
+AACC817DF43EB9A5233606A402F3A83FCE99F73B8DD819A4D014FB435BA7F23D
+F2AC40C473A34FEAF0A5DE457AB5A18A6CEEE95A55FF604AB5225C5C1DB6C6C7
+0C7647F075E5FD3CBA9F3B316887B4A01F1C2FE09719B4BD09A84C5A3DCB82BF
+F5EE9FD0133F987FCF77098E0CB919CA7FB8468059FD35088B97705F180D5A19
+CDEFA29A02C5D3EC4893985A2478B0BE83B18FABD32654040A2F2A9BF7BB4F7B
+5781D2A6B5E416BA14BDBB481B3D619B0C885CB392111E32B2AD6C8BA13E9F93
+49CC4B5A35B1F93B68A5ACCA4823DE44BA8979181E50A3804E43D6245488A15A
+BD51999A729A20B9DE927F728E59312ABCF89176C35BDED4BEBEC14636B19989
+CB8BF2927C1BDF5460BBB09BA81FB83020BE4D4B69179C8E3B838D6763946166
+B328ED82B448CAB5EC2331CE7601EE8B39B334BCE11038B0EBD8437E5463C640
+73C5FACEA06A219AE83515674CEF03AA2F5FEACF656ADBAB944CBB237813CDC5
+06C303EA518CC59486410D65F5E5395DE84D0EBF8EA37633BECF5A08851B4758
+1BAE6460B2B67D29A8F88FBE52A26DE7A6E6D859CA00BF437837DC123C459B9E
+43FB6DA6B79DC16C60F9035EE3B10E2CCEA9F7ED4FE29667E0559A3A34F6B550
+E4184ED8E953247B104DE7D912C5BF66F3259214FF091096DAD710C9F4EF531B
+B4C6B3BFBB4715F3654587A5EAC63C917E100F37862B03EC240E762F2DF72CCC
+9CBF233ED204EB966F6A34519C0A169EA6130D18CB8E53EE96B7A63C828CFB28
+45CDBBF7FD775137119B7C7BB2A665074691199B387ECF452A3DC5F859D4248F
+3A02D4D65167A9E6C92E0A16D293ACE234C049D98E961D14D070DF2A7F55C232
+B2CBF0378ED83686DF80E05DD417153A3FB34A7B2F0DEFA69A34E19CBFF56D1F
+14EB4CEFE99DE9CABC5F0FDDEDED79A50F29151294E2576CE97CA00F734702C7
+B94243299D8080957B7102AB370D5448226870CBB5DEA5A295D3D5C8F7D1B5C9
+44E6F16F703E4CD3F74B37AD19BB53635CC4801A317C953F2A131F82DBF39694
+FE552FC18B94EEFC490A579F263DCF470D2AF1336C166F0FC69D84800CB1765D
+85937598431461E7B5DB95839BFA81D51ADE49E4242E2DEA4560DF41D27C7733
+2D1F036614FA1AB505537197F419E6722D4EBAF5DB087FCFF838E782D239BE68
+43AB130B26003747C36CFFE7A96CF8522F3F369E1E6443C923C4EF6616241DC2
+5366259FA9FB2559B5B797ECFA474D491E96F2CF07DFCB0765A1A7B0FA8EB181
+0A82708A93C8C8C2EC711CEB46D4A4D51ED42E6D023932F6C29F7E4D9735A5D5
+269481F9A92673E88970CD15DD2F532A2D96C48150C10854F3A98B200612EED5
+C2074848780E53C5E086AB78EBD0444A064C5377945680900997D1739E93EABB
+520519269E2516C7757FFACF312E6725805BB2261552C760CB68A7BCDDA0438E
+0BD4E6DD87C204039396684FDFC4398421E1D94B110F2831AC0DA589822357AD
+A78CEF72FAB2EFCC848DE7C5486AC56D56DBD0BCB39D608F40E0981572B9FB0E
+51F11778CDE7A9DCE029ACD63D61C22135CA5AC9DA490C29FF12165AE20F3127
+9D57AF7441F31659BDA2872A720100F3F63D9CBEB596FCC23FE1BDC7DAB26FD8
+00182A4EB8C9ED92B3BB9971AD01063CA67ABE06F51F66232545EA42AC145113
+1BB165ED65DCC3A1C0E288FED14706BD7FA08D3D4F143B8B3BA68BEABE09225D
+2D0524B51E2D7ECDFAC0F8D66C7D96D885D0D87B7657F6134B3E7D0493E4BA5A
+6DD7591027A957EF7E04AD08B10D93205A5F268E65B30242AD7D07C2EF59238F
+F5B6FB46BAFB04D0E354072DD934FC5C63A4FD47541A4BA4B68E531E4614BEF5
+15AC43BEB87A1204B9BC873E9E79BAE958F4622077B7F7C2EBC0FFB7F7B6EA39
+C9D47152C26BC4A41188B367569A22762B8800E715416B7B396BB3B5ABC11A19
+C427DA9CC6EFAB2450C54030DC95A775422AF14156388FC0DB8901D3D13CB248
+B774DC8E8E36C7FEB216ECD93288F0520FDA6FCAC443C62347D680CFE38039F4
+1D15F56B06632BB1E91AA8E098EF73D8A054AF1A8E327BC6E7D37EF19166633D
+1714371B2E916869E420A69BFC9AF4CCD3F1DA4569D3542AA43722748E5079E6
+EBDAD7306314586BB17C9C7FF0825D865AF14F0FB03EA08F5E2D22A97B9702A4
+8A169602A94B3F08ED7A0CF6B9288E35FD989F2D0020411EE777702C408920E2
+7A7F37E36734BA4937FEC3B14FB1FCC92BE0944C9D893929A63DEA8030DFD9BF
+86C40A4E5421C663BEE7F2C29248B4839E441AD9D04F051AA0991A6D6EC47280
+10CEF96A41D329CB263A566A2D0C993FB918C6356C1249BC14BBE3B39596F7FE
+DF719A7A9175B271E37F0C3B46B6F1A53ED40E6C3EA4313A7C90B65997EBD308
+E2F08EA3B7038E0694294BE05E9583BC74306255DE19846A692C0D0D64506C30
+F1E7B83EE2090F0B0C9A1DE01474DF9DC7D618193149E95DB2F6BD8C0DDE48C9
+625313BC0C265A6A4BF5FC9598EF8E16477DD19068CD1AB4C52777E9CBD2EF5F
+99E28F5A2CE31E2924C196492A8E3319B1024C84CBD4FC175BE286F1F0829E3C
+7628AA9FFFB1810C93336E3749A818E46206A3E415139064C9C7D004D0CEC1F1
+FAB611B672C0EB951AB9CEFE67BEB2817BE9248F887836DB614BD26A59CCA79F
+04CA82700DDD8D792E89EA14D0B90FB3F8D6648090A39C99894C8CB638EADAEB
+D9BC62555D36EBED36A39AD7601BCE938D26C84EB1A6302CA1111B0C362C7718
+3791067E2B506460D1BE71A13D02451036C4FAD7B917CC9CB347E8FC30EDE59E
+8BF9874561A4B0E4235BBA799471EFBAAA64DC644958D1695526A86D56DAA3B6
+8AFA3A1AA7B66C840DDA7860072BF4C937B37FDA41922388FF8B4E3C305335BB
+ED114714115CFE1385261C6EF0EC27CE200A0B2434BE519CF064FD5860CB7395
+C934A9D7B06DAA01F039DCF3318F393E22AA8CCEA80F58094F5129B06A5856C6
+9DB2EEB9B377135ACDD04876012CFCE0CAEFA831CDDE6B3ABF574573EB6D72D6
+F03D294CE59A42D5348781C90D1F0D8BDCF770E6989A939E3FD42A68D34E6B0E
+A0AE88E2B52577B1BAA36EEA23071FCFB8FC4C41A8FCB9F8871F265D78B274B2
+D0D8F92D55011A124E037B5254162E7956465E96DC76D0CD96643AF172BD33A9
+DD48C30161EF717BA3AE6C7231F05DC4E330964C01F6BE6EE652AEE0AA41086A
+B2FB3DEE6697965BF24EFDEB87D49BB4D617A10480CC29C978C953A0B826E470
+BC73AB39F4A8A94306CAC840DE844C60F650537E695C6323991AB9038DB838DC
+0264EDB30E27E3F38B9073C8F7FAEEEF4B8285FDFEFF1C7CB16E43C712D78345
+813848FC335ACBA0768BCA0A9D57E99026CF04808F002FD842AF9DDD4E72BC61
+4997B2B39E28E971F60F8D96B66D8EB5911B8856287E3CC2D24D662312C238F3
+777745B73A30CF91BCAF4C6205808A2286285462580052DE31EC1EDB0BBDE46E
+5DBA461A815EEDCA60F8D64F7A2A84613DEB4C4745EBD6C04DAE969BF4681B5A
+F95ABFAFD2E9FB49A8504348551E67EB6EED4F87362FF9A5CC9BF06478E815E9
+EB946FBAC21430CF51569E331E0060BABFC7B21535D987B480FE1264A3738EB9
+F67197E54D9C2B032A06AAACD80FEEE298763DF5CFD00E2814F58A69A8643AB3
+3902057079A36C46D8ABE38C48ECCC6F7491D4D4A581A452C48CFC961DD8E85A
+5929131DD9543262E81C96631C7FD7B94C724102DE9C365AD97D6ABAF44AEFEC
+BFFCB5DB96D395117A665FD30A70E8090C3883FCF7ABE76954BFC07E4467E5D6
+262D9C949ADA532E94F9676D15DE90911D34BA384081A789D304584C688025BA
+4F6EABB4ABBD427CD00FF823773B11F283241BAA9B9719808D7FC5E77FCFFFA4
+F95DAA339D4843AD99133A1DE37103F386B4092343814923FCC22A87D8A91F98
+3E72139EA419D61789C36D99A207600C188477278887467F15D6A6635BC18D38
+53FC280A6AF75015E003E2C80F312FC1D967203234583FF829FF13890D62FDAD
+69DBF4D1AA69AB22A11A64662AFA11952042294C55F890EC1805936402B7C229
+F0A33C29453754544D92CB1E338AB7F3337BAFDC535CC93DCA0A049368B91FB7
+07670DEC8F84592CA1B4B8CF94E0D6A64A0DF9C0C239382D283AB166206B1893
+510E6320866A16450FBC2B0F82A38E460689EB07AD663A0785971D53E42EDD4A
+4BA81BAECF10B93B346B20FBAA70E4D15AFEFBE7CCA040D982A92E7853D055E2
+065A09DEBCFA1B2ECAE26C38F8DBD378E976FF597397C27828EE0E6791B8641A
+95CEAAEE1849027B06DA878994B70F94C835444F6B69A2DFBD6E4FECA5160C53
+7F12F395CBB410A6C92DFF74F8CDDAF64EFCF4F8ED9B832AD75E48B3F01DBFA8
+86D7ABCC22CA3C13603580C64B639948E2B74654FC8AF03B4F56BC8302645BB3
+B682950933DF6086F8641FEA62CC01F451312D22F4CC5804EDCDF981F6DEE997
+BB777110A8E8ACADFAF6428096108F535472D856AF4165C255A1B43342202F3B
+A72C931CD8A966D1898B78B12B14DBC0D3663983A9E2153CBC23184A4FDA6A0F
+779AF83DB6FA36FF6258473B17FB452EA4AB02F0D34C0B8C8E1FBBB35B680D94
+0201AB0D0F0637DDE7031FDD239BCD083FF5A28AC9AAB7271D9179A8AE589B26
+A897659AA8E9CA50ADCECF5D5F4D21C7142D4A85678466CBF033D883ADF819FD
+CD27E3A6046F3EAEF987DD9171440DE702ECFD3AA51C12AEAB971FB8E3128291
+592A3619A00A4DDE933F960CF460C31AB712D12AE4A37357E42CAA235672926B
+00FF510B7686F013ED7841FD01805D2496293CC262F80E730D2FB94EF320314B
+2E9BFC65A17A0BCC2233F53ACCC3ADFFAE00F19277AFABBBE4D2E377BE54EC2D
+82038A9D3A35D7B13744E468A1AB3D0231D394EBEFF06BC1D52F18430F7F77E8
+DB47FE2A958D86452CB7FB6FAB65198AC7507BAC92FF4F46B97A265BB80E99EE
+B2211B9989BBF73B1753B4BD6730271DB7679FAF4D3B223839094C1C980C15D3
+2C9E74DC9DCE7CE0D48B1E2A8E2E3DEBE2DCF6FF7B8407FA88F59A8D572E818F
+0C6AEF5B4A99F83398F97B162429D82A62E2377361853F630E7D0A7D728DFEC6
+EE39A9DAD89967BF1579C57AB99CD78DE820C407CAE52C2D7E65C97A594FCE3D
+378AC8FF6F8867E8953FBE91D2D8131AF97821F28D6EAA5A9F025DF790FA0967
+2C0A1339E953EEE5FC75F76FEEEE780F332A1C0C08DD80EEF52F1CB7E02DFE52
+86F148A998753B27CB823FA9B4907B37007A5FDB8395AB3FEE7CCD947D1F6CFE
+E81CD88BC9690E2F89F7CB130C9A2834F938B3D562A42CEFDC45A38E6BF62ADA
+1517974E61F6D35267795C7A9E945856824329B14E70EB350C997756A8FC0A8F
+7CBABC48C4AAF0A5D6A8F58AC190AC3F980C00D93FEFF1539D417AF2DFBE1021
+2882782C625D2BD323B9E0D53F1494F8CEF84ABEE30CA90C251887075A697386
+89F38001C3B2FDA9991D9A5EDA186C37DFBD0A77D47E24204981DC0A45B3AC66
+DD14D43A8A9826A0BBD96FE2279638F5AF12F010474075C381BE0243E3217199
+ABF00214D7D13F66411A6AB4FDBFDDF295163DEF72E788302F63FA8225F08ECE
+1F32D71BDBCC1ECBBC067187C9713C686E3EDF304BD3C58981C76B6943E66F34
+2BE57CB3145FE9A286F570074DC259CDAB2A415DCFDCAF46FA3E195FD43C38F5
+A612D653E3F178E16D9FCCB637CAC9AFEA648AF52B945B9BFE37F241DF9DDD61
+5425B37F903B079F337E8E15B70CCDB8920F15AF89538608A573E7C9008BE814
+FFAD305F0B94C7AE5F3DB35D34C04C1A250E89C252759581AD933896B468547F
+BF0AFC136FEC40C7436120A944979C9DB4D492A52B0FD658E8083E0EACBC60DE
+67DCC01E3F87F04754223A34732D211B43248A5A5BDB19992CAF481A564DC9DE
+B16CABD3BBF40BB4F84D67015773F7261FB175806DBA97597A0A8AF8920596A1
+3C77C728F23CDA310161CC8573ADE490419AE08CEB622DB6883CF0B75D43F0B8
+B37715EB9AFD9CBA33DEC10BD2D78E541499738D77A6450B93B795EBAD5F44C7
+311134D264B1881069ED3422281C15D1822DE565FF7768B80B58096D5B03D168
+0158B52A52B7B5B94609793DB02F8EA785A2E0A039FE4F8CBA3CD0C2A934F2D0
+A2F862F75093FFB2743748EAE9947B5D9F56CA0D67ABCC01E4432BE67E22DE05
+39664D8D7E9D732A897F03DF889A0D3C09E60C4F3A3996AED7293B8743353739
+DE1D41C5FEDC2BBF6662BFC35660CF8EA4F2C0DA06AE90AE91A9E0A8BC94D43A
+B79F3778BB68BB937032EE09062E1C4611EF8E86CB7007F2AA7DD3E46A31AC00
+8CC36771023DE9E9BB5483C051FFEF412A14A65F30DF95C91990408BBB8A1E6E
+FE801BA15666D3C270F045A8178BE9E424998653471706D0D86D49967771961C
+3F62F1B6F36652DE97526AD89E748221893C9B6E5915C1504FF46B6CD09D85F5
+57F881284D70C35BEA64731C99C0D865E2E9C9FFBD50806164157CE198DF009F
+B560FA76FD75CF742308B01F8ABF13E7F9DF82298FE454C1F709387B6F23C306
+61FD8651CA2F51C5F28786D6766B4339928115601BB265F6895712C39D4EB75E
+1E1EBE9BD2E808299CAD5092397B7AFC8B386E992AF8A47FB618101925514570
+2CF7F3D9418ECDF120DE0D9B14BA35A19312BB4C87C9A1862E7AC946AAF7E0DB
+9126282D6813095178325D6F7510550788D387CC3F7936E5BDFC55543FC2AD73
+0A47BF75CB6B625FE8F087C3E53330DA3EDA69BEB3601FE3223BF111C6235FC6
+8ACA71E69693779A68F93DB849000C3915225B007E9F1A64211A66634F67247D
+CB39A389107705AD40B0EE4D1E1AFB6B6F6E7F1D59D12847F748BAA026367172
+61FB9E0FF8EAD4609047340623E92C4954683F777B761B09A1B6E06E13977B66
+B7D5B557C9E0682A0E4EB4B04EC5191E68ED14DB179A9E167389023CEBD2F046
+05B7B10F352B91FBC1D499BC63A8B63A782692732DD2C49C0532E0D98BF9B5B9
+F1EDF5A5E00EA42DF50F9FF5700FA06DE26B5EFDBD15375BFB87068ABFD6101E
+4DCFB11A4F6CE0A126B1AF08A0DD21B487FCE447DB919FB215BF614D5027E67C
+CBDD8B631B0755EF9B2F6E261D4EE7D892285D1579F3027F9B04BCB1DB28A8E3
+BB0E83592AB3BF25CB92A3BA038A91C5854402DD5C47E1F535750D1090DEE1BB
+A5AB0785C67806FE7A4D1C7DA3A8D40E5F8EECD2DB7F5221ECC3AAE50BC607A5
+6B91C718E2092102B2958EEE11B3FAA96868D425513142D1C374886E63A705EE
+6D996AE31AC5F89456AD296DD490CA6E63BA98B78E4E9FC2AB540F27D47BAA6D
+C8BA9D2F10FB380F3C37575FDCAFC69F42E83301FCFA1DC31DEE29087614B306
+F158970D92374D7435EF08EFB3B32BECBC3C6C9FBD42951801B86C715A7FB306
+65B90CFF9FDE5AA20F20BC8DA696E5FE7214E98F39D2EE60185F926027A6CD5B
+960579744D143C1A7BC8BDF10C70003858B2A6EE72F854CD35ECCEC8E92BD664
+F9734FEBD981C41DAA2A42AE83697E3B030C9E2C6C3969293D324A7D68274044
+487004C3F6FAC5B64BA149DF711EDF2F17881864AEDE3E1E4C3147BB3DDB4ED0
+2F79305B402E76F974CD56CB04A4B562DFF36B40DBED2F35D38DBCA5CE8DDD12
+70C28A19C891D126927DAAECF16B2DF41802882956716BDBB442E9F062DAF65F
+6E3808CF58F9A4912209644195F04B4A5B209314017E96A700903AF6F4A8E8EA
+6CE36F67EA9139F816CC75A806C3585BBFD882F14028770670FEA22F34358E0D
+CD9626705BEDEB3A0965697647220C1962FCE67D0D3E2B9FC5DA3C3861F84209
+C56B90CC792B95076CD73D35974433DF6567FCE72A24162B434208A79117055E
+53BE3CDCA527E33638F940BED805EE57A3526186F80ADC5B6ACAEE25E2081A63
+3E6D985A8A6256F923B971E34BDA04D21EA99D34095AB201BF44B62258B19ECC
+45149754F896F64FBBBA939E41A11082C307165C5EA32F7C8CDEB80851B5219B
+7A680F7A8D02C9BAB72FE3B941E324F554E34F5DD5E4936250A82DB846F5966B
+779F29A9A4E53BCEA49CB4C6CC7D0034515E9F7B357B6AFC0FCC6FCDA1A34B5B
+103062647367EB77762F6B47773264536E40536C5DB2985C3048969F9D6C698A
+EEB959112EC964BDB8DC3C6F307477C2615BB536C03E9C9B346A7916D1C69C0E
+116DD955FEE0B8F6A0B476DDF245B7C901473A96C2C53DFB5BF4833F984F4D42
+C06B6751BFA6D96E9493139AEE7BE7839B8CB2290735C80542C40D266283CF68
+4DE60FABB54F29A930357CD2AAA60F5E85D1E674610F2E7C280401061AD47B55
+5A1EA0B0196423DD4DC994CD41094818332B99FC9218B2D628E86983DBC5B842
+AEDB7362D479C940452A947973C8BCCD46588808F0F9FFC55EF2D75C1C075BF7
+FE6C21DF51E5F6B00D807B033ACD1C7C6A8B3CCB7332E5ADC93433422095C0C3
+8CBDC619DC8EAC0382428C88443B16ED0DF49CD042D38082CDA4DFB035CE50C3
+9271344F46D3765ACA3E1B2942215F559EF1E308DBC2AF0659DC980F5DCEC6DA
+B33D596CB3F26EDD5A11D6647DB7AC5AC4FD41B62BC353356CD12DA5FC6EC2ED
+86DB312ED5C8323E1C766A0108ECE43C11D2BA0A63F1BE2B0A9D40EB995647C1
+82D5C9FC55169F50121ECA94D1953CFBF9F38B1FE0C7DD8B786902A841F24A23
+B8762B929FB5AF021414A5321C7288BCA19A240EE15D106043DA19354C4EE1B2
+434A967968C29B9125BE84A907D22B0BC2A2CD09AED00F3CC3C5C7C9AE7C906A
+7050756D4E67E11F2F2C14DE59A92C013849CAD0A1B6CD32C0CEAD2A4B20AD3E
+ACF8CE2AA125F1EE154B79690659E1B90563E3884B47699AE1F7A71579C3C4CD
+B66E6FA9BF98769452C5A2BD8B54112351F05BB77D3D3E3EE9250953BBA94EC9
+C0DAF20B0606C3CFCE4815A876F9CAB8A9A2E5662F7764050A0F5A7852B9AE4B
+5799C95B8718D481452AB4262A843E01CCE943DBB8377B7052FB397600962A01
+25E5FA112149DF197FD9C8F16BE5819096B87CB3555969026B8A5F4FCDBF3171
+BB1D5F36E7CF89D94457F4CFFFECFD8BB3E009655D799C4F262FBEF937E5107A
+511677585FE4D4560C34F03183E6293EC2BDECF5DB400CD1A29BA1678083CBDF
+EAFE8D078B72B42BC1CEF9FB5FAB5B2EAA044F5E98D99D9B907A3FE4E1BD4E0A
+2B845C58D7D0119C323AAC85463968D97A651A087DF3B6866EE0D09BA5583D8A
+8DB9837B487DF5FA27624BE3C7F17E6C734D294A1D200D971EAECF983A0A2378
+BC2FF6B206A5121EC01229C14E0C22CFE7371AE1007ED8F556B54347ED545D05
+EB488D7DBD5F668F45986703122FFF97A19523731B7D3CDFF8FE45ECCF2B91A2
+0907AB03E8698E0E3F6D846A4417B9F66703DEC16AB8DE158431D3424BF6462A
+70085CD88F8BD3DF2023F0738FA6E3F36E752DBE7590F6BBFE1BA8092CB69B54
+BA30D871F6200BB9CEAAD3D6A5AD721FD4A48D002BDFD8E339483D6E32ABE379
+914BE6B673F6FF3CC20BB2A971184433A714E802CBAFE2C85DD5F0E29B5F9459
+16AFA7D594B373139006786FB5B8594D50C91217D49ECE8E684C292946D79658
+A9BC010ACED5F757796BB9C32F98409ECA6511351E340C2C9E3CE2AC1007A52E
+95E6DA9F56E11D4B0586F88A149FA8A2BE78DD25F89BF504A99140A7453E4C3B
+EC9F94B300E4F6AB24C4528E029DBC0C61E116BDA8F0AE3108E3269A76927509
+95B41AAF17DB3759D04E9F0E7CA4863A9A771A49293B1EE6CB38E33A125342D0
+6C63AB27F308D08F60F4DEB8C0A335B115D25683F8AFF549598A3B1E88BBCBFB
+7C418723054B346E748DB987ADF0EB40FD0B8FAAFE5871EDDF9D68821C8C9643
+7A3EF4FD3BDE591022C83EECE829BE8189C6D819708103BB96A29CD107F416FE
+3230C3E7E358722AFD9469FFF2C7FD9DEC35BE527B99BAFF00C799B99080BE0E
+C88272197BFDEE472E29D1A197083F1BF10324E834C9D76190223E095487AB37
+50BB4FC92179754DD1138F9A55269137543FDE3173BB57BF3E5A2C42F5C58536
+BF4FE748D9033B0E319E3061A7044883A795BFF107E9C12F2449197FD29A2BD4
+C5B7DBC42C28596D43CA57E4184250213D3EE5D447A0D8023E2BDCA6B095DAB2
+3094B07797FA4AD49A4BC874F462D46F9DB4A21773BA0181B3482CF9235D9C78
+B967B280FF82EF3938F51211D5822F527127A5B4D7D643A443581EC8599C62A9
+A91D57B358D8787A39DFC4AD363869F6002E1EE878EC3573521ABBA11B6FAA80
+2F73E889DE675B42463A8488C72AF383482D6509F49786ADA521F76D93C4A91B
+7A5B23417305F5F89FB34261C2FF16B3BF983B19DBAB9BB6B1A2EBA3C2AF80C7
+450248EFADA22E1F8D18CBEE599C8D210498432C47CA067449143710A73DA7C1
+38C859665D0D88FF0E4ACB573E954655B5DD4B8C7DBE9B8A3B2C4526872CEB80
+45CB40C3D53F89ACEF33BF54BA05439AB4137D9F6A5F7CC983CC0344216AEE0E
+2BCED1790BF4506A8908E1D7AC441366E9938551A962C6AF4BF5E2E6B706CB0D
+8572EC4AC8CA0714A5EF6D4861932F42509F217477AC1547A3F96CCD15787A6B
+B7DFFA17B0F44E83A08486E779A1E36B7748B17F2D09FE6D7717E1CD3E306004
+F69F2EE47DD0A9FEDA1D43558C8217FC810C109B8E55446B6F151D44C08FC996
+63530C24C7F0B8A59AE9FB7ECD212902BD8E4115A6F6411266A57CA3F7532E2F
+C631F18FAAEE1F1B7224B598AC585A4279155501B1BE29E06893A8C56DE80D66
+4D5586C74C54B88D1B61602D44CAC618E21F447A3A17123F9032AE7B7854C08E
+E63B5335540A7F4B36DCD11A47FC8E672E8EDBD9BE813702927FA8B0E0715943
+E1AD81AFDA2350A8D9C05295A208EAB36592672ED05E16C4D9392B3CDC1EAC2C
+526F600BACC7C2F6E0AD1283259B1388E83880DF85DC9790DCED3EE2CB06245C
+3FA795567CF8F6E63059D974D5E2DA8B5262CBEAE15984ED2D6FBE0C5580CD20
+05640AC7C4D28C5692D3F814A1A90A7BA2633A68A7A9752AE74761AD428B19DB
+79133438C8E0CACA1624A5780A14DF07A74003E6EF75F75662EF6E817223BACB
+0B0B47C05B22016F6EC2E518EA8AF4DA0BDC4B02EBBA5D746CCD8F698E5F25CC
+47184CA13E1670BC214C44C27A70CE6DFBFA31B6C82B015C1A4F64F2C767960D
+E2E40BC61F84B19C6F874381488053602966F43AE5058C0FAD7FCD563D01DC11
+09C7252BD1FC94D7975F72047395F685A7FABA083130F64B8DEA9029F14C6AC6
+874B97B05248E3D6A435711263526F395BA49D30A21D4AE548141E399FBAB5B1
+6EE081015FE3C5663CCC484B8B4183EFB92E69EFFDD7F01F518569E03A72C4FB
+6772A0644FA922FC56B0B99B1F35832A11D929CAEC8280793D062109E3BC57B9
+43E01331FCA8548A573FEB914F916BE1D06D2561296972C28F6AB92BD7C739FB
+B1D5251FC46E2ACA742585DA6C13ABF373F66B51B45B44DB1471220A3C5AC33D
+B1CBEA5B541B8C1AAEE38ED30735CB1C12D02DF0F6770979AE08BA566887CFF7
+54C4AF9ACC382793D4BF251D09A088691EDF51E72BD9BF9F2455A8380D40723B
+1D90B78C210ED9972BA6BEAD25A7B240219C012E3757353802DA6183C365F51D
+D94C2C57373A44EC5C422D3959C140BD87F1271405B33BB9747A78E5460A96DE
+2C1E98D4B4FD3A15E10989FAFBBA5C57644D6206CDB81493667B3E4FD684F3F5
+8FAEC6F36B47625DAC46AF37D9A04536EB5D64B84D17FA194BA862BADF76E107
+548B078BD5DEAFEC764E789E6CC8E78039801CC4716FFF5E7857B0FA3BC31CA7
+E1AB37C519A9EFC58DD1D3926226A3AB147EEDF10D63CBCDAF2DE66E4356711D
+EFB9601764562A81D21D943A01AAA3D814DA167531C164BDE763F6E3D619FE40
+4705A2A03672929945500B4D11F01ECB2B09CED1927029D49A9ABC19B23463EB
+0FAB85297CE11F97C1D560C5CFD27691E39FAAA95B468A502988BA484664EF88
+2630187E829EAFC67146942DAFE5DD566A72FD6BF32B33F27B383ABF99F9E438
+C30F7CF8513F209A6B4E76F16BEA603005E8F71C817BA98D25B415B930988A1D
+4EFC4CC7BA7801869D53863261CCAF234BBC398FFC8D7F736F231E77DC9C0EA3
+1AA359D0A1962649825F59DBBA3B5975D70B2D6FBEE024FEBB2908E47858568D
+4BF000D59D21F549FBC46726878B0123BC5F2450F60B092AB46065DDC9BB7D41
+8E3CDB9982369E2CED9B88B58D47A94A108324E6BC009395CB656230FD9C5EC3
+8631D1F70F5B29CBABA91706687A4EC238AADFD7BC3B43166134AC044E72007B
+8BB28A578560F256B2C9F818D948CD3CB57E351BA8F34834C164F3AF6F544B64
+0DA5FF8D23E70669BE37DDD66EDD81132EE4AC92607D6309C5CDFC6D800FA012
+BEDEF9E53F5F3DE3B0955FF6D7F6AFAF7C5026F2B989F8103E4FD2E39176E5C7
+A50333B89EC266B1C39E2534EA4AB75B62B90962065D26D8958DE43A879FB0A6
+316D86559080C6048BF798AAB878E578673FF67A92741F60CADD40265C658184
+A42E9B85997CC8BB4696F50CB08AA5F0F1A658041F6C32A0859B99E9B41A0141
+E9EC90FDA5A358995A7FE0F8E7D5B74F1CEE7C6EE8272B35BD242B5219AC103B
+CDD20FB4F83F7BC30E2D0DC150B036CEB93C92908D53C6FD6D2D5BE1A1EB1596
+CD9374A4F388507EB1624048C79366F13C1319E410B9EEF4F33C5BC5BA7392CE
+852B8F2F649AF0781AD969BA91CE623BAAE3A45626D4A6D98F210C30C60DFB30
+72C19559C54ECD9FBE406551B0B3C8B1833A8834E1BFECD87A20D90B25F4859A
+3A7A21054BD82BD20A3E2112F447ADAD7BDE83EE87ED04683DAB283627AEC13E
+450DA15C25855BC4ADA345C1D92CB5880AD4466DDA84568FF703A824A8EE8E29
+F0E221661D6BCF20BF046F80C044A860A2925E96063CCE02D044DAA35923E5FF
+6DAEFA7845ECDA7EB4D3145F0436EB4850AB3A65120C32BD2AFAFF65518A7529
+AF8B2E8F5DB78B7F789ED6144D3EE5588A64DC1709E64C69B3907A8B4872AAC2
+896172C0119889060CFC265751C8A781208282157BA8F925BFDFE72E4AE0BB4C
+D472F838F9FD40E229A3B36F18D96C99FE8D88CA44BD2702C5723D7BD75CA5E7
+E606909DC6EF9550DC7866C54E6F08F6993E6AC0E78CA0FDB60DB16AFE9149D9
+CE9E29E6461C1FDCAC59B0CA7814F7CB663BD335998F2B946407D92791AB32CA
+BC3FAF02A19178205981B654FBC761D3316337936BB9C02F4435E9FF33A93228
+CDCB3DBD347E15779CEB58473E78A5AF2F234F2FF350FF5F2589FD2A3F38EA2A
+0411507AE1ED51B550AD45D561344D3A6470C9449E25522F261E9F861A87F272
+250144D4A7FF42EFE2F53F262B4D50A9296958A5FCCAB2A72192C87AA4D7163E
+F5C23005FB2BFDDBB7696A39A987822C4D71A1BCFFF58FCE32435CE6580DC9FF
+F02B40A04772837D1C090B31D98E73E79D6E63D973AF32C762643D50575E99B2
+D2944583F89A5C23DB7BC78F34E2A23079DFE9CE9E9AD70C5EA9AC910B721861
+9CD2CF56C2E9F92311D2F4319C4E55411BCE3D593188E4324A653B730C2435DA
+3D2839B68C3919AF4DFE343C1F1BE951985F50F264253552CC514B6962EA363D
+CA92F7AFF2A2F64B14194F69137D3EE3E4854B0BE9E9D9400EF10A9F1B40A01F
+0AB88A7542A3F40A29B012ACD52C644EBE181CD24FBAA9A2687A182BDC142695
+6013E51C2A8E561A067760B4696EC55E2DF1D6A04CEE65E74A11F712BCB2F8A6
+9994358EC86660EC04F7DA6C7A133CAB415B034B567F36DC71EDD3DEF8F0802D
+437DC1488532EDEC290E147FC9279F4821F0EA2F5BA6E2A43B64CAF0B1942F33
+215C18ED620C928F1EA7D0452613927FE3A78377C01542FBA8A397D0C6D6D26B
+AEE8F0A3C15AE5CC927CA38E4C0CD2AB9C71B6780E5EE878523177130C291C70
+75D865FD73B3A875F450331C332ED0205F74355A07C528AA047568789CE16005
+A3CDB32578707DFABCA888B476BDB2FBC69425F9157AE29C0E807B4D996DA7E0
+75C8F714F2EF2803C456E2EE318F6111C286CC7305D2C1E270643BAD7587DC7D
+4030E32069D4CB84C8F07D0DF1E492E4F4C9AC6C71ADC174925CECA25FE6878C
+4C2BD2D4E3A3CFF16E0FCD8C308B759C2A4FEEDF484BEB0F5BB9B7895DC641D2
+922631FD2E23257128523B31B369AEC4D3A63E3AB3DBE2F649BA1C2E4BB4F8FA
+7CC579D3C6FBF2B045EAEC3E5522802DF1E107179B98CDB9F0A9D400CC5DC89C
+561A93455644ECF841E34C28FD690062504AEF2D5E09E9E84230E93B56B741D1
+1AC88BDB4E77B90D49DAFF1333758F9E72CC153F4F1823407E9EA929067E180B
+989D5B459D867D3B242CECABDA3439BA08BE3F96155B62E3323FFD874DB7897B
+CC139739546D83739C5C1665F6CCD89F74CB7C07138891E23DACABD4B67AD04A
+1DA2D547378B8E77D1D6CF3A89295BC499F383FEE55EA8359544EF60ACF1F750
+1C607FFAA1AA10A361DDDE23B2858E77C71F0FD2D47ECDE5E77CEE1DA878A8B1
+40211679D7691011B81246ACFF2B487F106FEFF52E79B7B7B05442D846FA7381
+98E1EE04940FD3446A516B47C815943870C9CA9C1B1BDA2894AD89DEA6E1B96E
+60C94BE49C89A0FC4B009AEAA8B9E658798B79AB404EB06515D23D0C83465473
+4833AFB6B56761858EDBC5E125891D58DE477CD512943AEFCFCCA741D39CFA02
+E0CBD9045ED5FAF2580C39A1102196A85E1CBC67A1C56A7CDFA12BE2AD351D9F
+37D4783CD6A8B0EA717B5FE28D7B39000712E37E622A821D040AC927726402E3
+63345131FE928E3147B83D619DA8F212E144B19EDA829C7F6CBDE636F76ABEB7
+82658AE7276C2F8BEFD02188598DC592E05666984DA2BC8C9F3549E96DF45D44
+9FC713AF972127020E99F95AF3904EAA898F4B67D19BA296AA36FBC14C4DC5AB
+C88DCCE567002214C7518098D015FA37AF02BEA5D9F5845FE3FF9037C15EBC79
+4CDCB7D79129ACBFD2573A884EDEAF3939E2D3D6967F1A0117A0DC6C8597FD47
+01813A0B01D60D7709BC55D5DDFCB08F53B441D7EEC6544FF96638CF1ED431EC
+794A0E716F63233C0D80E8B4123F30E632AD427857EF57A6CF6A106F5382EF74
+F9088615AF05E3362609E86DC9CB58CD2F709F8196FB61FB4F82F9B1F0792B09
+D6AD2F194A9353F60EDE331B84B7704F0C797415FAC6F5DBD56D39B44A45D1DE
+B6A2319784AF1B2A9573DB75B573926AFC074627FAA9E8B4BF773A802896CC96
+65B535DDA172851A2F052934E7D7D593D3E2644444F7C635179D00536099420E
+CC56526A9FBCA1B2DDFC48D479DD9A928197AE138735926D72737FE8EF7D1B21
+6425B94AF20B5EE8BC00FD87705DB8DF11ADF16715177FE917C2AAE6DC1CE5EC
+EBFA2BBC044398B8F85DF05D50BA8A53E97F44D6CCE9690F901A50B844416408
+91F0DA30C55BC25008122D9A08EE92A8C84F6CEACF40591E4320A114E2B62F15
+92971E5DD0613D6D323245F1DE0C5397802E88C79D9C8C7719F4A13902828BDB
+34D6E8D8B68BEEF5A4AB6A4DFCD93AF6ACE8C60A16A593474CB17982F611D6B1
+3294A28699B8E8E73C27C68910AB90B2CC147944323A5F339A5844B674AD75EE
+7BA8094D3BFA4FBE6D1EFBBF7603607E38B920BF9CE43E418452E4D61A6D28C1
+F91CC04699210332A1555931106ECB43AC1FE2D08882F0E9180E5924C0335693
+AA13697E9F7F1091D71360D373661CBAA631992B3B2627DA5340DC655F712572
+FD675340127A1CBEFE3656AB4009BCD1BAE64048275146C32E79F031EEC428A2
+0B786601B1B44D5BF9E464CAF224E5636B0D2D83EF07E81A545EE9A5F9A531D2
+064EC94A90714E13760440450A6ACF3DD244C32A9ED0A65C546BA46C27FD7801
+C94F5C0735A1E9E6934D30AD680799FB3A761896C9E1F1BC0422CEEDDE021770
+1837B9A79B0F8775340CE0C2A18E260F6C471E98A3C6E4AC73A148CAB6EFAB3C
+E50F14240785645FEE335349C9B8D59B99FD884EA4A1C878A5AB6934511DA544
+7D009675FD5B62F999ED528C3B70D337A7D93D4D14522D1270B5C345B5ADE5ED
+518AB80590221630B0E66A85B1DC67A6CDC6B3694F8EE53BF90223FD68ACF7D9
+A4106D543E16EA756EC3CF9C96FAD7E45A8966B8BBBD5B1E5E9509F2DDA57EC1
+AB2B457D495F9C8452376C11C649FE4015844D876967666AF9824AE5E3ED033C
+D3DE8808897B223FB36CC42BF7867775B8B97610CAD61760B48C7F3F2DE23908
+035EA9A89551B4AC734DEFF55D121AA9D365BFE4C621AC78344A11360E042213
+EE8F7EB0EEC8BEC6C9294D22467B5D6DB1A0B0E03F371E1AE162C5DD46DD127F
+F8F75142EA07F5F5E3B4848E9F4B884F0257D4FCBA87797839A716CAAF03EE52
+FF4479EB9FA912146C609AD0784C7EBC41CD480FB7B3CBA7D5BB91BEBA43B5BC
+AA5E4A9CEDB68B34B4EF7A15AE58EEBD677D7D2ACB6570A569F79AA9F8C08334
+2575F0AD37AD980DECA14BD61D6D0F38DA4C8F5E4350778BE866AB63AA8260F0
+3D9105FD3738B1C5417EBC9BE27027718016DAB611E3D06529A5F9C2C0A05371
+3A7B87144805AE4E317F26B518FAC096F5A9BAA8EA45D77BE19CDD1E352FC955
+1ADDD93B080C6E95DE94CE3CC6AE60E797B09EB9FF1EA0B5C60822953F8612A5
+93923E7D7FA07A86AD52B23D3D0B88630B88D6E8C62D009DEF41CC7D95EAC8EB
+B26AC8E3DCF0929016378EC4841E1C4F951059105BB7F4D9D827ABA155102A09
+0242EDC57D050CBB9A0B6C5302B1534EC041093CF0C05C0E30F0B3513F3F5356
+75E913640AE066B795197E009D880CF19ED6C92FBE4D9CD3C96C88A59F2097E3
+D9F0F923CF7537FC69D5C714DA5E53CBEF307D8BA7FEB8CAF2DC63B9B07D4556
+CF751C7AA7CB1268BEE3591838C5DA625BDD22B4748A2118B7073C7AC7A885A1
+4996A7900CE4F42B19383E12F0BFBF0862E3A539F952038E1149B57D3B92DD18
+FC33B2AEFF202D53D5212300869B57A104AD5640DDE1A5E3F1240482EA9CC7DD
+A63BE8B6DB82A2FBB5DFD31E72A6CED413ABA65C6DD3674A76E547A4CC9C1C5A
+504992A649C7F2AC469A9BCA5E9C84333AA74C686A863A05FB73110E466A34C1
+3E3AE5E21B912282BEDAE14864E420B05F9E2EE8B1C523B362A4237929BF2D06
+A0D398D91ADCFD021113D4489736B4D8E703D77F2BB92973874EE461E76ECFE3
+D114EEB3F611531FF20CE6310C338C6C426F2CDE535C69E3F14CBFE16F48C7E7
+7420777D9A175710174DD5E23B2BA6FFEC521907939AD66488857BE8021B385B
+D6E1162BFD8BB36174E0D5C238BFD778BA5817BF31B2624429080A5B93AC98E3
+B6C5E9C792F9B1CBA7BBDF63277A28B6891DDCD36D0CF656C4F510C77AA08991
+0545717C76D2289D77C79DB34F2FF22E29AFB3F5E9B6313A2F582E4DDD2373CE
+6064843D24FBC35B1A08AAD4A9B408541301166DBE585317FF2A8E15C25DA94F
+5A5B9D11F5F0B1A658648C529717151A96623F590FD41908A5CA20CDC0D75D84
+6DBFD25E5D4739177AF9
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMCSC10
+%!PS-AdobeFont-1.0: CMCSC10 003.002
+%%Title: CMCSC10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMCSC10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup
+/UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMCSC10 def
+/FontBBox {14 -250 1077 750 }readonly def
+/PaintType 0 def
+/FontInfo 10 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMCSC10.) readonly def
+/FullName (CMCSC10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/ascent 750 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 45 /hyphen put
+dup 47 /slash put
+dup 50 /two put
+dup 73 /I put
+dup 79 /O put
+dup 80 /P put
+dup 83 /S put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 117 /u put
+dup 120 /x put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5
+45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4
+7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7
+72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E
+BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89
+974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674
+11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2
+048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31
+CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2
+0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3
+D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D
+567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3
+DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF
+435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E
+2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148
+D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1
+DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70
+8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F
+DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C
+9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E
+1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49
+59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402
+A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA
+90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E
+3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB
+3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41
+736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198
+E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94
+17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D
+FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E
+1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085
+35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367
+3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1
+5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245
+658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD
+8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F
+CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9
+D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7
+606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C
+64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8
+F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00
+C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7
+072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3
+7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317
+1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B
+5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3
+2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06
+491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C
+B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07
+8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F
+9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568
+4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781
+AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E
+36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA
+88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85
+5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3
+5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8
+AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152
+7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0
+CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8
+E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF
+53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9
+FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A
+94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4
+E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC
+4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B
+D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428
+F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4
+5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460
+7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2
+361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579
+5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7
+83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F
+8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3
+F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC
+F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327
+EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15
+B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D
+F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4
+8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE
+07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE
+8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4
+12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B
+E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA
+EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B
+EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207
+A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29
+0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F
+AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24
+3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128
+2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037
+215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE
+E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720
+70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5
+37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE
+BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A
+EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F
+AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A
+0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F
+7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8
+9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5
+28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A
+962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E
+F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3
+3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC
+3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5
+15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8
+DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF
+72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512
+D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588
+462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026
+465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607
+6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7
+8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A
+AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20
+53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34
+E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF
+E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605
+8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395
+CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064
+46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C
+AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7
+391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015
+55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643
+0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1
+0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8
+3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A
+22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384
+5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0
+20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3
+B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E
+AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED
+CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B
+7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9
+B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED
+A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201
+213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B
+57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE
+DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082
+9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271
+C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC
+F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F
+54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E
+C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051
+1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90
+7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287
+72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A
+DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC
+5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2
+7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901
+EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4
+62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1
+0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A
+94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6
+5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED
+D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E
+74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88
+159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5
+2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD
+D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143
+40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E
+DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977
+CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F
+C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A
+1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A
+7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5
+D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614
+37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874
+357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68
+6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435
+6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53
+686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F
+D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8
+EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6
+3088F8D19CF2364A329162D39E166AC728B15800222E54C40FDA8B73C48CE82B
+B2B3E7EF15157FB4510BCDD7EEBBE3FDDF708EA08540D94827AF3EA1B210446C
+DEA9EE0EE9B4758863AA33FC296740F0DD9B42A45861516AAE6208F189D8CB8E
+BBBDDBCC34B65A7D17B8BE932148C39084A9C71516582BCE25EBF7C1E0D84314
+45B273AF903055D53313DBD159BB698038A397AEF418B4446739318E8D273642
+095B1E04CC60718A2DC2BCD99B34202878786A58AE7C2F43D985874AB8A3F204
+4DBD4B9240EE96F0487CB687830972BF302F262C6381B2C79773EEB152B712E9
+34E8229E0B59788EB9B9FC1AC1E123751D1FF032610410F0847E6B9B9A575306
+53FC00ED82D0BDA8EB008F2380FDBA06D2F8C0210A261508BBB19DFBEC179B30
+7096FFA89BF7951FBACEF0966A91BD315A7E26E57749072B3F38583C06A5F183
+08BFF3CDCD59AC365E3B4C4F34AC30366CF2BD15F19CBCE5F93259A6C4A8CAD5
+0B9186BF146124C758FAEDA8362FE97F209BA5C9FCC5C2A7FC3981F26D28B3A6
+7F1D6C440909613246CF1D25767D45EDC8FE21582D6C4C2C678BB9E98974E303
+402F0394B17CF3F4CCF6940D3ED7668AB6C9DAD83D75B11DD3BBF2619239BED9
+A82B053CDB66086058524A379BA308D5043498471B6B043923A40F6C1BB0B71B
+20D261D529E3FCCE19871D097C7A434CE18673A6BE20C67AFA21F48213B6342E
+4E069367C51173364B697E890FB9E4FA1E8FE0EE6A8E8176F6ECC5DE736D4272
+3B640EBD341D5DA2B2F64F46339F7612D1CD04D5598F2286A87F83220DB31878
+F7E83F90D003AFE46B3B9103BE3E344FA1025DA3F45D309641C3FDFCB8815C36
+A563F017E5EFE9E9F15262C5F676C8602EF3F7AF6F4EFD60CA78847679729FD1
+C3837760E538338DA5F0EB8B24758E4FCDC922904A2740D145935233DDE03DFD
+17610BEE7050CAEEE6C705A22C3BA7FA1EB44D82ECCE837422363147ACE218F2
+DE186AA197D71524186FEB923E2AD093B00AF017AED4BBF997093F5ED44FF286
+124A6256DAB404B36D596739F883F7465E6C0DDDD8970909777818CD73650C3D
+8CE623AD60CF2CDAEEEF25B6FE0C7ACA99C3AEC768A4544E0FC120821BA349C1
+986ECB6F6D69ED8B6B3F77465665BA74AD091397F6BBF6F48A1E0974377D4586
+5C3DA4BE5F33CB86CDFDBF253C4D08382BD6D9D92945136DD376CF76ECA37560
+67729573F060DE73497A3B48229E45E17852459096FE82AAEBCF5DDBE92A7F9D
+8D1B7F8813106BEB2DEDD4E220717F25FCEA468F8E5B975813C48B30734139D7
+F7D65F4ABF157C7E13C16BF304CECBE2367511BF14030602BFDED6D2D0F40AB9
+5FD1EADCB2FF72F2BA0BA7E726E7C21FB9B4E0B094FDD6FD7912BC389C9C3C62
+57616605E5B8064E1DB19FF9805D872840C9B3F7873FD61951E87BB298B525A7
+30F4E7883EFC51B92A60AA1E5D6565E4F2D349E6083500BB8867977E2BBB0CD5
+7FB86FB5FE38E8A066E102E5326502EF581C9CA461E6A75170AD698EC27839F0
+ECA5AC6ACEB4AA6EF4DD71A0FE4154A1043E38D1923036D998A064082C293B41
+3D2440FB88F1CC166DA6BEE7B0BE62441F3D21BAB31CD80788DD1713D4F7D87F
+F130A1DF211A3795A903FEE48EDD3E34F6AB66413AF77418D222B3DC62EC4E9F
+B53937B944ADC8E5A90176FBC7EA949E02FE996A8B2F6879F0B4193A47B6FA15
+6A23805F40ACB43D778A4ECA2529054A2EE6D95495F280DE27D04505A5F3ED46
+3F9B87B8F8F4EBE0FB5A36F3038E16F5773181E6FFDF3230B26B41279BC3E29E
+02B0A4C6671381E680629DD54FA396BEB597E90CC554F3715D599185F787683A
+0C1C1BC30F40205C90398240DF656D5E8E79A4FB9E53ED69E6CCE72A43D675C5
+86EA8939F02CC6359A78314B3662A30F8F48DF1823CD44CB569D3CB9E8F0924B
+15B682E9787827EB92F340E548961011152520DF15CEE47994555961414D80FD
+6FF51E7F4AD38A7FA670CE31210F1D57FC3B06953D2E098B711B0D354793A804
+61D7ABDD46872F370D14F8EEDE07E9DA2F2F6F5A0B6017FC62D6AE57A5C61D2C
+EE55183B80853D1D4D8C08572E9A15F753DBC75A000CFBA6D7B1C04A2FC07E69
+EBF9833C6C76E8DF9345B1C7FB73DA67CF85757621D36EF0D33F392103DE58F3
+C0D7ED8003E2EFDC8383FA42FD054AF7E3025B6CE9A21D7FF94D9E2653498186
+81621CCCF53F7D922007692CFC3E88AADFF7CDDFD85B3A3DF27721B89D0F26CB
+34F987919D2B3F1FDF2400528A426010FD67481F336BFED8C546104CFE0DA536
+7E2056AB878E59CEB3D7B836AA794E98F7DC6B3F00B8B803F1D62E8837A27A9F
+CDEBB3D8C50E71E146FD39D15071674D0D4A1CC2F7D8E050DDEAA9CDE1A60CC8
+BA54B64C6AB7760439573412C781F04CB5E4C143AD7440819B35AD3872E8A07E
+687F96086AB326022E120AE62242CC62982612AF4C7E99C991AF793A24A36E3A
+21D30A9E9C475E97645A9141417FB632EE51258A3F7C52C12A5656C7B3BF2D64
+E6887418B020A6FCEA184FE311DD77F8CAAC3E1E8BCA9473E52236582A3AD1EB
+6DC2725757EB9E348AF2E31AE4035D0B3A17852673C97EA8E105D2426A28D367
+1BFB95DD775FA2E70E571BDDE80AFC982D9AD1F5E6E2671087262D565C0E3BC0
+EE89D0FF1CBFF7095238CB4A031FCEAE085F0BD31CD2B90DED17D8CBCE81FFF4
+4E77C1848E10BBE71B25B5D323139308D7499C0532F956866B8F056C3BF893E3
+9F029CA58F0B7A029FE944F791C0D644FDA80F1497E9FC7319ABBBDE8B47E9DB
+CF6F71E7AB2C8C0AAB6140A5F165F462DB2CF40060DDFF908A52760C9EE72286
+09161743C5F8C342C97CF14F67ED86F2D723FB605BCFC43760B3ABE9C88A549A
+8BB4B01D73821FA191D028E44FB2938417485BF4037170D45D2ED840A3838D6A
+4C514FD4BFC2818EC64C4725E4F1C7D72CC8D3982BC50C5A4ED5995E17DB6E20
+9350D86CC8FAF93F854ADBCC42E26B85CB15343CEA1AA2DC43E40AA823418D1D
+92DD7EBBF041EC62DA9764840D46A414B7EB95B5505147BDC31D40A157FE2B7B
+4C641B398A6039F9EFE1E929301E38805C26D1FB0E32212505B1B954C9CAF259
+E440C327D8239B1FE0BD976DE222C38AF2F3FDFB5DEA74954199CBEAC621D611
+30C13591B9C183BAF93DE896C497E461F4CA33455D4B41FD4C77BE7E7A8968B9
+7602BD7B2989667EB31D56C3169BAD6D48D1CC5DBA8819E88A7339CC92D3DD26
+EC81ED5155345321B9DD8BBC25B3A53D95531098CCAEA8617EED83815AE6DB19
+A2E97160B2226B11665020D19F419A851AF73C19785433AE958B68D48D3EAFA3
+77DD833E47592E39F6C5C159595C32CD08DF326BDEAA4BEBA3587F017AFEA9A3
+A3473BD086862E87B5AFEBF06A4419878BDEC99686D125EE11E76AD881E10D0A
+F5C18041C26CF62F07B89E7DE6D6691127CCF83F7BC7E7AB501324C2D44C05CB
+D0B2754F2AA37FE707C3D2979648BE7FB3C85813E0389FBAB87810BECB5438E2
+9082705FB9BCCC4CC31DACAA5CC95B4876601D8617BC0B0E8F006638DA8545AF
+DA33E5D59C056AACE716466544DC0CFDAD5E5EE60F2A68723FB9DD7C107E6C2F
+4DD97E89BE2EC827052011B1042C724CEB4968ED5DFA9EAAAF88A4C4160143E9
+0EFADC700B31D030E52609ACCD3F5BF346F642B702C298E11DD837B5FF0615E0
+F5E1239C6A6C8964A575533F9B939C17FC99EB384DC725B2CE842C9331A90D31
+3344936CEEFAD1CF2281FFA21110457F21705DAB57B28C24995C73542396D5C3
+927D082DD0B4C220E0680B547A5E3220A6F506A2A94267B32B26004FEFB5AD1D
+7519969EFFDD0540D5BB3F499CBA8ACF8BA23BF054D51271F958CCB03A3E5B46
+E8CA77CE6835B84071916CA149B8BADD510C8226825F3915BE719F1BF30D7640
+4B86BCA2ED6E43CF3DC32861A475B5C555DA7C34B1ACBB71DA16F1D9AC1AC459
+C0A217197561A827F2E625FDE90BE83B718583CB018BAD5A49DFC6FBC573129D
+28B466BF5A889FDCE2F5DE2B413BED566E49CA2374BF587F9B6C87F79A286B0C
+A13A7770DEF8E0CBDB53F20731E870162E3913581AD2F2893D8D4BD1C3AC473F
+66C20BCF90DE4C711D051B6A2D3A5A57C0DE38BC0ABC739E4ACD1E91E156246E
+6776B3EA66C3418144EA76297793E67D7C4A75605F612F832CBDCCBE60279236
+7E5E8D59A9C390D31764FBD10A8671BE3628DD9FA203C90B000D8867D56C13D0
+5123366778DFD71829A064EA9CC3CBE9C7E0493307129F99702BC522211BE363
+F9A19038EC98672E3B467BFCCEDCFE7C89865C832E4A0939CD1701D6B2E7D88E
+0211CB61AF49A4A7142F3C4142489D11CAC418AEC20A706080B7B81425783794
+A68040FD847CC21F70D67A07867AD6384380DB4021AE764EDD2CB3F963399A4A
+81DCBB3488D16096631DC2CB4F419E9049D9A79B4ABD73A8E774A7255B69885E
+47D0CE20B65E837CF0EEAD9D373058A6B2569C55BB949C4C566D4607F01D8428
+FFE577130A2F9D401898847307E445D60B8BD6AEB7ED7385108036FF1F4EAE5D
+52CDA197065FBD2F70749E38E5A90E313F059B24776F9A749F846788C2AD1439
+CACDC874C20C9BF9A6615C7C897600F2E3BF821E1799E40445E29AA9BD63B91F
+61B9AFF3B82634D1454696315961BC8E2D7AE1BE4E5080E721E8DEA53F44B690
+5704CF886FCFC26E2838BE675D1014723E4D56189B5A7E65A3C20A0AC3A0134A
+A44CE1A7441BE18660C783BE5813723D0AACD76CF8F076B58CA069FFB73AD779
+47ED97053C750072022CCA6655BD40FD8C55299505F4185CFB01C7C31761A75C
+3CDC009FDD666D82C15897007321F13C88D316CC39A262A30DF71F417035A0A6
+691BB4CC99ABA64602D8175999CF835AD999550F90699BC6B8195E5C5DFBF12E
+CA83FB05CACA501A66F49E65F5283883EC4827914CB72B9FEF723B010CD58192
+5528BDAA88B52B362B02FB31F32AECF4CBBBD6719187339F8F5A199663F56A26
+A90574A586FEA95BF0A3ED3B4DAA223F5D5FEC7B4782E6DBE7ED76E2575CEE2A
+49FFD60D976E6069F98F933F6CCB517220D05C9343AD7E6153EBFB31FC84D40D
+582274C484B16742CC4EC64E63A8B8D6E9372FC62976456B78F16184086BD180
+08FBCBCFDF94C777F3905BAE198090AB09C85130C07160FD111DCDA5E095247D
+A647ED88D7B75A2265F819D82FDA474FB08C08DB58B6B6B821382BC9A6D5FDF6
+1EFF0CA350A463EF9B651CBF84EDBFE2AC986AF8636D1D9A9963D401CEEEFEBE
+BFEBAD3B9DFE073BDC21933323E704182AC95D3D5C85E6E47800AF01B244267F
+2B5BC626B5CB796D2EC7A0A9C8878C1FE14ECC924D1E791561073DED0F14F7C3
+B64AC2D28F396A4C9B93DACF026619D3F8BDB54FD04BD9CC183FE4CC7474976A
+60320C568E9F3850C21FD2240914E4262B370E6D47367E2B15EC09F377FF2F4C
+D46518B529835A89A8FE1A70E24DB827D7BBBD756A50603099BE248B318E8D32
+96CFD61B9710B3A2D60B5027020807951138ECC206C626C3691589935F681851
+779ACB632AC58641E5B59ED49B72A5B3B3CDB2E5D88FBB113C6C4807AA344EA5
+F1B3AB548C7DEFC57DA52F4BCD41CCB04ABA2570DF9758CD55A622C533826EB3
+43F42A28A5A348FC056E974D1BBB4D7213FED3D8C2F862130F299481091D46E2
+2DAABFA91A9F8115DE79D2CABBB7686CC7571251CE6876D8EBE71C9EB45BEDA6
+1F845F7AAB768498557F45F5B94DE6E59BFF0B336D901D4503A0064F64169DD3
+6BF1D67C73C1365924B876F94C7484C8909D567300AC73AA4246D043A301E80E
+5E38A79B2090D5548B633FBB39509B346D2E7510FF6F70E54EA642BF2765DBE0
+3495C66A2E9F3DBCBBA5851F0D3764780499D416E002237702C32E492EA02909
+5ADDA6E8FC7314ECE22F586A05FBEA7F35D96CB2D1892AC9A78656C2AAD47182
+9029C3145F208608B4508AFF111EAFBCD37690D07E31ED18AA94C10D62A12844
+C3808AC8DA5CA8F2D99394693E190F6C02AEFC60A637AD8ED2DFEBCEF08EC3D8
+86725D3F852A90FA74F9CAFBC12DD0146EF2A741B9491A43BCA08B9D68765233
+247B74F12712204D2E66AD91F44B392002B57E691D541EC46B0692A963C07496
+1B8BE15305139D77C92580FA06D9C809B263029117B82A0A78ABE9C6DC0F61C3
+A8ECD12138927031B9D1CCF9A7BFCB7F37873249A7CEE6E49998420B4466B06A
+448EDC2F4B00C73FEF997171AA4364DC49DD5E3D59F31C9DC29064CBC0503FA4
+0188BAE53D62C5BFAA13835C14536C07547DECFD8DB00B7B9590B69D29733E4C
+27B3D020EC1843ECBFD4F1C74D210F7E886407874F52893D5E4D960C311056E5
+AAB46CE02CDB2D14F5BA22AA8AAC05CAF62CA950D6CC279AD6FB80BA1194EA2C
+B380CE9D6F03613542860AD8A21D35C300FF5881885B73745A87228642D981B9
+A19DBD36CFDA547468F0259715F564807E1BF59FC29D4ED8F8A394AAC4609C24
+FBE3F169EB8BC230B5788BE64846AA1E4A92EF1DBF768AEEB465025CA94DAB15
+5068385CE16A9995FA5B117AE9B7BC9A21A40EDFECB2CF53E48FDBAAC9B73C73
+D1129088EEB0C16CED9F042A1375A6E28586C7CCF7A7798CC4F14FD6AEBE9341
+DA1222BA55114253A32A7DE2FD81A269D801E61694A7A5549FDF6555F064AE3B
+DE3B689D8A89840976988D9AB4E9FA38F6F1F563AD72E769CE32AD3764F86226
+327CF11586E8711493731FCBD0F88A02BDA98D73EBD6AD50BD2E1416E01ED0E4
+618A830F6CA2DA58CA47680F705E026B53063D0DF143C59C06066F4A4F0B4707
+C28414153F1001B54E7C470938B972C249EB2B65782FCD0FE61ECAE1B7459F23
+FD9637BD0DAFBFEC2F1E0C715A21F13B6EAAD1017938169122C459F1BB9B56A9
+6D93C017E2FFCB4F81DBA0933A2F37C42C0673336124F0A696F24A58021D9D77
+AC5E73816149EDD6EA75AC1E485CE60E08B84059CAD12A6D9D4C969F0C9153F7
+DCDDF6DC1D409A14539FF828799AC16339106C783DD589E71274B5CB35A5EA3B
+ACEE350AFF93B457C0659CE844783EC57C26BFB35CD43EF81190B9773280878F
+6AA50BD9833F4D7DB73A8BE384A08C9A45401E6FC9E1E3ADF70FC5A0BBBA001A
+2A5ED51A820ACEF131B5EF9E21EA84945F9D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT12
+%!PS-AdobeFont-1.0: CMTT12 003.002
+%%Title: CMTT12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup
+/UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT12 def
+/FontBBox {-1 -234 524 695 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT12.) readonly def
+/FullName (CMTT12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 45 /hyphen put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 110 /n put
+dup 111 /o put
+dup 115 /s put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0
+7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3
+A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3
+4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C
+A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251
+75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0
+9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507
+098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02
+ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581
+DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B
+5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2
+F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914
+2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4
+E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21
+C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23
+42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D
+4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068
+95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9
+830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE5
+5925388A2E95AE46E8806E0F7B954D1A9F70EE29B069A9FEB0349298CE5311BB
+CAB039C21AEB714781BBCDBF2FFCBE7C4750D7693ED142ED0475EE9DB5D5F94F
+4D4613E2C379E494464447C4167C625D70B9DBE4756DEF299974B704A3C238DC
+FCD3AD96645559ACA5056F7FD695D2AA709960E30F055ADBDCC7FDF641920A9F
+A279AAB98424E76D01937F9CFE3CF4E3779650D7C2DC38AB27FB81EB16C19B13
+D47E0AC60C83641CCC1A00136625FE274C6AC706B516CBF14C54000BC2B7BD20
+A28D40FCD6D9B321855BDA608E23BD365208DAB23983C0D8A7C9DDC28ED62216
+12A20A3068D843B5FA016B8C6B9BBD36356BF85A128F96F0CE861FB9C998BB21
+E8624E3DE453C686D41DA7B72ABD919C5BE2F24440D11962C77742A8C0115A72
+9E974E71247FCD58318A4347813D4D5A73CF882A7513E2EFE05CE8C7195BDDC7
+DF250B59AD14D02D2991E2D0CF2D0022EF52D78F043D6D7FEEC3E77B6982B1C0
+8CE51E4D3C8342C08ABD84EFCC8239883D8E66CB0FB0BFE8699155B179CCD63E
+884C502F7F0496A01360C67D7A9BFC8533346485646AF058A743472B3276FB96
+EC4C82188A4A67763ABCE6AF7898C3B924A01118DCE34C77F22E62BB4C4CB561
+75C93226142D43D5ECB9F43C3A275A52F9E5AE4C9BB9E614082AAEAC5E7453DE
+B3F71F9FB747033E227E84E853E75E79771B71495CACE8F911329274CE752AFC
+46C993132BA8CF6B9DA2CFC11A0BD57C9A4BC11B7A6D68A4C346D9768E6A6204
+4227F51932162DA350878EF80D0F4084C82CC61F3223010D771EBE7DEC1B80CF
+327393AAD4C689BF6A791CA2925878C51069C4F06ABFA42B66860082301FCA71
+EA52BED540116A9B12D9741A4C078F207F92B78923C7965A47A3130CCAEF480F
+6B4AD58077FBECC4F99F53BC1F4F24CF3777182A7ADC32FE3260C774E5244912
+470697609A0726EECB72390E6C5C5A1204521D45316989E3C0B4D398958D4363
+3C7A4524B500241161C55C4D8C4CB06034BD825AA2CF2A6895BB9A30BFF00422
+553E4346A53B271C70DE5D0A5AEB92F81CAC1A0E75E47229AA80C8DB09EE3B19
+6E9D3EC0E7ECAB7B879C652282A376C52E5BBF5D4BAF051A0A995460B7F427E9
+521743E74783312E8D7100DE1F31C1C7C85DA33D8D0A626E6E6184DDD538EA7F
+46D50247225E036DB3E6072395C88026D429659DFCFC6416D22A9BE285EEA910
+F7B1B74275B8B043721A829F2D4FE6140E5AFB78F0CFCC27FF27ACE773131462
+48B271781695D31C909FED024B2F3220C206B63601A1B02DBBE2C5D94D027982
+F9E7EA6D4B0A812D28855CF62D372A040F138069F7C28BE3344262EA72795CAC
+2CC8E21D1A666ABFED384875FD2D098066FF0CD902AD6725AECFE61B2CD83860
+82E587B8893F5E09B155EBD813030499E534C050D6902E5F8BA296030512ACCE
+BF19933ECDDA6DAAA1848686DAC81EC429CA7AB1A73B7DFEC0750B404F601F1E
+6755F07C0784A56E403C5962905E9147E44E8042C3858E4A91F7B8A71143263C
+21DC47E481DF1A38EC4A9F682FE059FE80F257576FEF3A3300A36BC27273152A
+78019783D0BC34AB29353EDAEDF48FF6C5DC27C1633CE1CE2C03509992549B87
+75AE1100939A6A2F5AA2BC7C534357687DA72129B9C9F2E511BD95452F10DF8C
+A698CEE0BCAF726111B63C4838F05AC5B2EB43D04115145CDBF2EDCC1EFAB612
+5E35EF5CCC5F4296536DC96F1326B86C65DE657BA06E5B97BB7C4F8ED11DF9CD
+969FA4302F06A5D43B48D40D3DE360F6A7B8F329022CF5B13A33980E8BE54325
+17FE37C9D78E73A74B5734231ADF0594A2E5F2DAD9BCB682A0F5C59507032DE3
+AD0C62E50C258F1F820ADF788D6611CBE6D1988D09D07F8813D6A3EDEBE034C8
+05F7EDC5DD2E4C15B60FE9284E267C8F7DF53F3CC13C131201DE819049324E53
+499FE93874A92EF07AD0121B8FDA88F7D60DE52E2B20AF958A77421F221F8B29
+B2188307F484E1832988059E5A68C52AA7E840D805E646F17DFFDCE1A2A8C0B5
+2CF6F218A06EE1E2543461030E9697624B086FC6619205C04230CC8DADA60721
+F5C4622673ACA45BEABBE3941E7F40080D652567DED98AA3404A4384DA3006A4
+E8A9298AC3FEF04C92A273
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: SFRM1095
+%!FontType1-1.0: SFRM1095 0.3
+%%CreationDate: Wed Sep 12 2001
+% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>.
+% See the file COPYING (GNU General Public License) for license conditions.
+% Converted from METAFONT EC/TC and LH fonts:
+% ecrm1095, tcrm1095, larm1095, lbrm1095, lcrm1095, rxrm1095.
+11 dict begin
+/FontInfo 6 dict dup begin
+/version (0.3) def
+/FullName (Computer Modern Roman) def
+/FamilyName (Computer Modern) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/Weight (Medium) def
+end readonly def
+/FontName /SFRM1095 def
+/Encoding StandardEncoding def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/FontBBox{-188 -320 1445 942}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11
+69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB
+CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89
+F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3
+F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C
+EF25195F68A2A98170E48759F33528B839DFD4B92DF0482493852D12053A7904
+BF6E144B9488970F220C299E80886366662C1276120E72472BF84082B9EEC729
+F7007ECDC5A850C88810EA679DABE81714004E65D938DA9ABDF29C949A52EF02
+EDA8451563235D51286E9133FFC7A27067DF0332ED614AC2D4FAB88EC84E6CB9
+FAB41C933E84B88097BA8742BC30A81416D1CAA3545F08E2554B28362B99B79E
+FC42281922B94604AABAF5F7A9B8E2D9A4358F38F2382EF9544B859D098DF243
+034CC475CEDEBF0EDD0A60C907127BB32F7D85A62A44E90B4056D9B4B2FF3A49
+786032C6B25794E2C0003C7852C6B0688351FBFC43300FB0B72880BB7B58BB61
+3D1064E7D4DDB128A9B38EF7510B7E5F82BDE39489E2D1DF08816781B13836E4
+89390F84577F31776FE43A5F94F817A4AA4A698AA4AE84B178FCB65F1B5A5CE1
+334417595F6E40849041565BAA497F6E4B8F4305D849128C9A26A98B909EABE9
+8F2659189ED27C588ADC7C744712B4D9AD0C5DD25D1233E979DE7F53C5F1C47C
+E9DF254086E5EC70EBC6B7E080060BA72F15E6BB75C75011B15B7ABB6BF761DD
+428FF1BD688938C75BEABA7DEE2AF49364D2E198FDC7F8FA2313BBE598ED3703
+7ECAAA4670BE3A85C693ACA829A5936778BCDCDB38A5981D4CAC8994E2B2F086
+26D8793AC1393D49A8F2FE391F0EF8899F63CFA5A77BC739C867C6CFB9A226B4
+620AED34573F068052604331B7E8E1F0C3BC0BD7DF733F056DB8C3F57E3035BB
+EC82DF5B511453A952D429AC721A4F94D5C9BA5B83545948643D0596F4C6C9C5
+796BEC7B26EB9D729F337E0FDFA91E5955585C330D0C4F193FAC870A28CE054C
+8942BDA170717B7AE9927C936DF0076507F55CA2979BADD3EFACC0A599933EB6
+F148BB7C3D61066CCC93A5856D253D759F30E37534743210743F0D53F58D0B45
+463F053E19A16E5A1B111915D1E664802F8C6C3ACA0F1BFCF3E209D1FD6C79D1
+5D867E142AD6E69933768274F4E2AB57CC518AD5A1C120887EEDDDF18C291BE7
+B3DB17E8FDB124B11B6142DC60F560DDD668D700614732F3FBAC4637B9F41361
+54CD2D8757A9D9BEDD1EC72FDAAED3CE4A1144F1E919FDB952BA7CA1E3D31C3E
+9E434E2E44E7A83AE3480EBE89E0881584045E4AA5814897382EEE5FB5C9410C
+2DC7A2136551DE2AA713487A77B911A7E7AEE41F0BEA1FDAC1950473B1394479
+513741DE60091BFB9751C780D99F2DADD5AD8283DC9CD1C81B902C9F3C9C3EB9
+55608E09D6DD423540BCF72394A24F81135C9D9063C0F4441BFE0120E03558D3
+4A16744457EC281AB2A60432C97DEDD16B2F1FF4C1A90D72D46C9F9BE984C6E3
+E239F98B59A938C2A6490889B437CFC21D923572530E41B7567A9C7E2464DB2B
+18FAF3EB7CBFE7BED6E77219C0366A7D54D469CE3FF62E75FCA2ED6A46F3E5C4
+489992EE1A42C19DA52F0CB2B1A6956BB3F1767B97FDF225685FF7C9E9243497
+144D31ECF634CABABB79E323CFD483BD7A7B0C2679A9C3DFF0D44F09F084CF3E
+886CBC91C5386A266730CE2AF3863534E2450583F6ABB520C27C4EFEA01EBC8A
+F019D25B7BDB40CD6712D7DF2DEBF0BC70A92D3B64D1FDF723DBF3D4AE939E96
+D93646BAAE0BC57BB244AAF47ADE59A5228F057192D917E2BBBF588335E09095
+1CD4AA406C1D10C8EE6812DA676A8FD166461064BE4150CB95C41FC055FF8FA1
+89A4BAACB0B978A58EDDDB0CBEBF6566D47CC0AFC93110751B59EA33AB5D6EAB
+0DB9A65CB16A053495F06B0D49A70BA8A7826EB571B8428AFE5EBB99AB9B56C6
+F69DCC77C25BBBB53FF25C5DB5CB8E742E3C0BFC25098B4CAEF12D299C886881
+0D4EB71D637BC0CD4D63BD6B4F5FEF9B083D95C34FB9E7BC9FCCAC0B9C7D8AB1
+1816B17AFBFE1DA146662723887E435E17AD2E2315AD800EBEE700B3C12B50EF
+4A48C2839AB4BB367E908F59BB5AB88635C3E1B89948BE9F32EFEDC2E439CC79
+BD9754280477F7C982850438092D309C213D70F8D476728119E8FA03762C22B8
+89AC2A2A7C0BEBB0C91CAA95BCCDF91AA918766C82A978B7313870327F89107E
+11A44FF02F597C8D4B085F6D7A098233ADADA521CDF34A78081F8965DCA615FB
+55DB12C1E3459E49C273ABD2663B13447365C9C1C52E192282E96049FD58506F
+FBC9507DDD77014C29275D1352CD5FC765853E858A5781F2DA41360D32FB5A54
+D04E088FD99F8C01DF740E587AACB0E431E03E170CBDA9FF1FCDE8D9FF5E43A5
+73166AF5990B238122AB322F709FEF2F0E2FA7C04FBB62C5383997BC9CFAC8EE
+3FAD26E788DB37ECB388CD80A7D861AA9E9199E7BD065BD7A4D21A0D56DA9323
+2AFAE158CBB662283EA7310D32FB5A54D04E088FD99F8C01DF7535A5156B8344
+F1CCDE84A46AB2CC7F0CFD113074A1C4D90758EE58F61589051A0150121A7BAB
+A636171E6814A1398DCB9F13FE9B11ED5A5F2EEAC14E0C831B2540D10BC0EDAE
+833A83965A33180B0AEA361848DF8FE8E50DF6856F1D10C8EE6BB5198CFB7607
+B6B044160CBE8D4CFF067DF3579918B19B9128C2A83512FC0567CF47B38961BD
+CC60FB8C6330A30AFEA9B276DA89313D6A83343298F34461B13C382575BE392E
+F94E3EA3004D6D37C025DA3F1846E41606DD510D2C7D0BE9DD194E46BE7CAAF7
+A60D496CE85D2393457C50B2D586E010C7C4C7272F496F0CED0084EA956455F6
+2EE57D13B6485B968190360A3E30210D2664BF91C73AD1A811651CAC09A9DC0E
+3A328E1DCA16082699B41A3D533703E58E366E871C982F262478E41DA3483028
+6BDBF03E444C6F0F4DA2CE9AB049F324F887732D21C4BF9C5365C603C9971CFA
+7E45249203329FB9B4054B163C166E1322DED12CAAE39E289C126301D25076D0
+2FD409FABA5247D7A25945AD5881E18C2DAEC09606228CF925557DDFA155400F
+8D446CFB8AD19704B6C544CFCE47ACCB854A74DEB5C646318679DD738987F800
+96844722729076811B5054DA998F9AEBE37DE5068418F41A007E645599C0BC21
+8363573C695B3F68111CE4A6199C8BD40D61E46A153C3C25D0C7DC125415D125
+D0C6130BB6B603ED78153E0CFE7384F7481FD4EDA141C27898B3636398EFBBC1
+9E81060816655B2F7052016A4C72A6A1CDB83BCCB2EB475A9BE17EB08A5ADA04
+CA8AACF6FE68BBDE580243B111BE76EC06E70CB7751A8B206143D0134BF52670
+BB3F44DD8AA7D26283A483CB46286EE0A9BB4FDB0337342BBF362C236C30A120
+D85812760265E3B283F48C05E78F47CF5C678F54658A30EBD7AAD5840F3C7B9E
+21D8CA390CFD164792FF2040E07FA087FDA110A93430C7FAD65C951AEEF79D91
+FC25EC950E250511BB22156C2886A249CD442575934D385554B2B4534AC28C31
+43A657DC937CFAF3F6C87EF4F2826BB02C41DB634D91B70BCCC4F83F4C32796F
+C5664490597DA5F2CAC7C0013B18373EF51520DFE081F95E0C1693D02E39AA2B
+E356FD312C233285B2A8C8C337504C1EA7E9E1F6BD250B5874842F68C92DA11D
+F74E6068495709EDCC6E4BB3A96AA3A4C89411FF06B66DA03FCBB052CF5DE837
+4834FDB84E2248DBC10CD7454636E97E399A7AC5A16A2191D763AFC09588F5EE
+57E80130CBDAF18FE2F530BDBD2CFC21D684AF84A8CA37BF2258C80CA61485BB
+27EFEBB52E5FDDA77E57AC8EEB3811BE2BC948A926FBBBAE974D9CE89333C945
+A9DFE37E5F34BA68EE97019BDBDAC7482826B8F71EC51A777B64C52B1C37326D
+1172F83F6E4DF93B37E66CDD6344810758B10B2EA8C68918DBDBC72F8821F1E1
+96AB78288A2E00C2E03FA05640009DD0EB0D0D318C6A726DE5D8F2B1B035C658
+D09053A4B27B18F18BE4396C900A730908D832F3E8A21C36E32F2D603D0263C0
+8EADB43290CC59C43AD57D357057B13C9ABE55F11DAAA8D78574C430939CEF9E
+FB36B462DA71CFB6E86C72ACAA04D5FE4732AC386F52D4AC92C47F9B11FC32E5
+B188AF2890EE3786AE2772D2FBC5D75A7FC59B0519F32D930B71AAEC8B88F1F5
+DCBACC2CBB9951DCC8F21A26F197A309C26ABBC4C25E3FF22B2A511A96F0BFF1
+2BD9AA37DA5DDDF261EAB0E48C62DE0885B8D074A7642D59C8E216B5F0A8B327
+1794E0BA5B672E41832562DE119AC5DA1AFB74AA66885ADB605AF60B44C1D904
+EF85F00E1F143A19DAC00F751E77EE62D394ACD26B463F7C7EBE4EFD40DD93F8
+81C2956C4250F5F28207671D7AFB3AC09FDD0126533384CF1B2004F31E053135
+44EDCAD0114140E52B7E153C354CF3F2BF37A15E2D19A2ED688710B6F9F83C5B
+BA14795934112F7963FFD217F016DE82353B915549CECBDF7BDFC6FA4F7B74BE
+E202170C9F25C7448970684BC555C8390E34A5098F55E0B003B841CAE775D48C
+1603730AF8C091C0622640AC5A0B46757165B44F0AE1EC1072DA26A8EE0DA335
+A6BC8AF994F5508921F3D9E4E09B375A58ACBB9E6B0448903E19A5CF2A51F619
+81D2A539A4556B9C25722D4DFAAB480586C90874DCDFC2D70716B18572557BE9
+E9CAB7F5A3959D5419DD9FEC22D015EBB5D4BB5CABE110D76E8A76D6EF3513DB
+5C23D3AE05BEFA77BF6B4ED5C413E8DB87B5ABD1B2FA9B3BF37A81C784ABC42B
+1FEFDE6DF012974241B33B67AA67FA38798336F7354F0984D612DBB455D0662B
+C8F15F12DA07E391480C1A150213ABBBB0F2927D223D5752B69C930053655C34
+FC487DD271A8AF594F457F6A083C4150686FBCBD60832E4E7D0D4987CAE5484B
+CA81A230A21F9C49DFBEB24C94C93ADC954B9B3B3EC484C502BD0DFD605F6D5E
+13158237535FA2EADA044ADCC1E1AD42918C8C67320F6621369C250D5335FC05
+AFEA1B294EA5D2A6F335FADB80CB26FCE9EBC0A4EBF72DD47806EBA23C3BCD77
+7F175E2041EA03E2F0B2BD2B81E9A6DD43BA3486375883C30B8606D917C678B6
+6E567A92A0E0DE89BEE5E5AC45C9202D46EED5E045302B71EABAC5FD997A9A7D
+8F522B2CA316B7FDF16CE4981DBC25E4E2FCE3981324B16A18236476FE242584
+AE70C683199B7647325D295528EB7CB15A7E3940FE2D248945015E9DEEB9EB26
+7012041740F5A2A6C7DB7B2358EBC0358E9385E734D208957ADFC7DEF83F5E5F
+4EDE55E2F078E994312214EEAF63F8D0B481C3D523E712901AD838AF2D840055
+E57D34F8FDD4C842D64D3D94B1CA46CEADF497A2FC75A45AC59F8696DE49672E
+E33773AEB31A204F01793262E820E813949115DB90A7C798BDDEA0D5D1E699ED
+753593F2B6373BD24D4647CF35A448037ED5E72DF3175DD6744ABAA0E2E0864A
+2F4EFF3B07B035520A598CDF1AA97D7DC3057414513DDDDE40C2A9DEFB23631C
+B2291ECEEF4D18652CEA451BB1559C0743FE3205BFB6711F1026A613D244BB07
+DB3830F07F32EA637775BCC1B2CEF0C6B0D119AF6CCA17DB1B03AB1E9281C568
+33502239B067013D261BBF33358AAB8803C451B2F570EC34BBA052170AB42F95
+F9386DA11A2C7BB9C05E8C9FDC96111549EAC90DFD8DC906C03F0281C40EC1BF
+EB6B15455CF32FCE5C7DF6F55C91132223FD13FBD62A787EB15CF3E4E6E59AB7
+A529DA186B178CC6E8A4D876794527F3AD72FA86B7C2BAE14D3E5A41D8F90754
+AA28185D92C9ECBBDE4EE53E2BBDF05AB4C9700C1367B3D81FFC1AA34A79CEC1
+1CA7D422CB58C8E21870F680E48EB1B2D5A30D974A7E9B24DE13958976C76225
+45415635E32FF316DC4A69B3CD5EFC6EF5F845C8E24C92166C9076691817FA6E
+AA5D1F1CE12235DEA3902F3C355CBDA5CC344376A5394AAA7C2CB50BCF32DB50
+4B6D9BED63F0A8928C0C06829558B714FD54F355501EEBE29882185A6CA1703F
+6AE65F03CB07406324CCDF00093EBC76627A11A84B5EDB688D20DF49616D8D3F
+7491719761E7627CF8FDCFC0DD2265160BEB33ADBE3AD01E7464370E3E0F9D45
+51FC9A87C678EAE5B16A564333DB11687FCB4D1D82C75A2F551FB4F940E0C71D
+74CFDDA0974D787BE959B2B87FE13DC290C53819DBDC2081CCD16F34F0A61AF4
+3CF53914B713820BF8F2243C0679345EFD56307165AEDF16E3BC771EFBFF595E
+C6B1DB8B028342D5DA1E8CF3FF4269126B48BDDE9BEEF7896CBA70EC77063CFB
+0EB3C6FF697509736BCACAA7F03C4C326875396F0499B198DAF7842384C36C2F
+36B17A65A1D9FB77649DD78499592C817679F344E0B88D80B8D78EEF9EC6A9FF
+41F4D635520B2269035CEDDCB3B5518D63DEBAD4F365A70533AE119F11323AB2
+EF07047536DA6370C07B2215C3A82BFDB44DA593C6B3A33BACC38A105BEA2109
+06DC63737E3EB362A122FE90CE8EF37B9C73FA6933BF27C39EBDE137F15AC495
+7F58F6549759FFD86C2BD3A09490AB47B60E204B16910AFB0C18E4F2361AA033
+9BE5EF972F4B52F18548E3CB947F083768C7254FC019CBD8C4DE7E01DFA456A1
+065EF834C7B146FD395ADBB9FB72B8EABF58EE9E2B2276C87FB83CEAD49BBA55
+7DA56ECA50BE1AE4819EA3C72DBE30F363D43C75287945B0DE47D1FF0283C494
+EA65527E8708279B3B2437BF1CA2456E260020E4FC0A85BA18562CDB8261FDBE
+0B928EF40F0DD40E215B8BBD40BB5B5DCF2FD9AB4D5AF64F82EC77BFF8C37BE3
+74BB9B2E44C819E84CE2C634D55A9EEB4F6DA28025C3831B601AD254108178F3
+3EC068E78ED8C72AFC5C3BE0BFE17F31A23B55E7158FFC40381F36DFEB6612EF
+33A54D2004D92F0A44B3468DBAC0ED5E34F70561F5E77DA369754685B7F6B04F
+233454A59AFDF45F28383B05B6120717744B58D2A96BA706CC9317B5E7FD0848
+56665EB38E31C7F8C87B0C65041A5D2E349CB4264523AABF9C10CA95CDD3BE1D
+9923C1A11D046FFC2E82A09E36ED0146978DC383AC6D70EABB20327360CF7EE1
+DC4DE736760F5CF3B47F7BA082DCBF881ED8DEBC1A4580C287418295CFEBFB01
+51B09DFC98C8A8C9C5F9AAA6971CA95D96A23166E5931F7E464B288F4E357112
+4111BB33FB7F0E042448478D3ED7AAEA57D1B0B4E237F919152F8D9E86229BFC
+B8D59BF9FB9E0062A3ED67A367669D0F2F8EFEB2219E5FFE7400A9DC725ADA62
+706D4D1860BC04D4432F49D7F4271376678D381B148D72DAD9012173FF3779A1
+7C4D92B28D3117888C864440902499FF0F9BEAB0C83FBD788E26B0BA47484188
+FC01B0349E045421E7D912E1BD329A536F61169344F16D65F6B90DB87E22F72D
+8E6F486F8D21E6DAE282C35A2723464F560CAD8B31A931CCA7A2FDB9530769FC
+BE0A5F66F1D4DBC0EAF834D078CFAFA415F43DC87AC62A1D8913334016B3FF37
+20902A7E5644848A57346228A13D7B1C757DFA9B5FC4E9E1DCB2C2AA2FD37386
+87E6B350662256D158D8C7DCD2F7AB1E02D6C5C8E3ECB1C6055A6C0B807B8FF7
+997E562EDBEDF7646B64165A55DED91178BF13FD30ADC1A6B6D621B1A7AEE1F4
+2E30D49CF3BD0656F584CECE76A17151913D7ADB223727B47EB3D7F491385112
+D36848973526DDAD7C1C1C0FB672EC627172D10DD33ADF2445483470F28AF65F
+29CB086189B3FFA31E0CDA710B6DE2B0EE515A46A3FCFC354AF01AF5C5D0B301
+C8FDEADC6DB9D492554777965E2751A715F8FFB6E0248AC51928DD65CA4F6574
+BB1E01B3ED95D736691EBEA8ADFCD8265F128A67C372720840A206056F66A7A4
+10E1722E4C1BDEA8C980250F9E034C29FE0F7D2F5DAACAE3173C865CA9C4C240
+49B6D4D0CD90B75D3BC68B8C84605923075A9A2D5D6F7008365E52796975CCA5
+02770D168EAF28C337D45762A08817666907C68142CFAB9D75C4F6D6A73FB4C0
+748F038F140CB009A24A80270037C9B5E514E04AEAD7CA8468C4D22E1059F2D2
+EA0E7CA2979C7066F1629B49FDB893DBECF6620FF9C48132297E81F717820A90
+BDB45E16CA1D0D9C152B12D50AF4E1B2519FBB2B779218C5E42E31FDF82448E3
+5AFC5F90AA018902EFFC4D5A14D4326911F7055F9B7AC5B592E2E2D3A198E2C7
+F476CB49DBA0FFB2CAAF494DAD087639203084CEA25DED422E0F8A30634FF1DF
+EE5C61FEEC33D547A17961534B3535AA673AE15F560DDFF08EA7AC126882B57F
+A1AE8A5313E6D21F67FB6D16AD32690FCE021616D0DB89C51001090A4A7FB515
+139B751F6137DFEA833004F4689474DE3A8FF64D98EF09D25802C3B35DD2DED9
+FB5300E4F50E5CC70FAD3A21917D15D5DAAFE30DC1CCF79A359B81AA3F21359D
+297B9795636C03E483A80D47A4826930854329FAC093193AEE3A19BA91063421
+988EA0ACD987862A716C42F071140254B72AC91B91911CD6A9D275FD7F6636B7
+4B1B0A47FD39120411E1D5442E711A6C1EB0741C67B0A44C1A2F98C9FF245A9D
+5AE4A04B529CC5FDBABB1C6E8C1590B3CE658EB77B58F4D04803DC351C5645D0
+4DB49D76906E068C3FB553AE91FDFF5F22F734DC4BF8E9D019B06D3A1BB7CDCE
+9101E9D2276CCACFB36B9EC74AD213BCE896FAC45D08EBE43E676816DDA135EA
+8B78003042DA8581975D4C14CBDECE0B027AE87DF28611F387E64B951812C848
+B661FCC0DF91B39DEF14976D7D00609DE2DB8195C186E376F4029CBACE3AF24D
+AABB788FB1AC87D58BF341F95EC2DBD14BFF27D3DAD9A06569FD4EEE40C516AC
+D809E761BFCA049DCD6F8E43E60A0BFE64BCB922D1989CC14EAC1987147A5559
+4F1CA14635DF029AC387BE36036BAEA8AE7DD09D090EBE271FE59FD806894A72
+61C714D6D08322726CAAF168C08CE31F26CDF6613C06CC50DBD59B70DA211B44
+1BFA22AD62D56AD098FFB998E25FABBD89A2C17EB7A3AE81F79C05AA4677D744
+7F412484C16CFB322FABEACF98AF9F152E3217D0F2593D6863E7872C5B6F82BB
+FDFD09B13FA639680E972DC7B086D7DAAB076CF346814556119BDFBDC3A16374
+E7B92CE50B3BEE8B7C26856BDD3C2ED98337C2B877ED5EE4878C50F06A64F750
+E9C8CA83B7FE6C91E10FA717CCEC0D2F8E21CB5A2367B5C90A81897B6973FAD7
+D4D95F6BEDE4E1EBE6D852A937D5D814AA6BA62324C08AC12FC09C5037588F7B
+1B043BC503D725EC657F47DE02CBA939ECD8418F4B7C705EDA3E9AF1E623A989
+074165DB0DDD59B7ECF513C714B7D0A1013E4E3F2B071F6A6DB89B7BBC2774B8
+87ADA7C572B0AA702156B715159829BA38A9EC28E1CF3494B0CEC876A97B4617
+2CC9162F204C36850CA9188B0B97300CDB1AB4F57B55D39BC539BFA5047B032F
+02A88CDF11D098FD30F6A6B82B98AB9D288570FE18E4E6A707179D96287D438F
+2D5D3C2305C5FAF075E0979EAB1DB645AD9DC87A621219C260FF67C2DB8D541F
+8BE9E20ACDCF64C4C721AEF5B2B65761D0310CEF36B1A3E57092DEFB978A43F8
+B553169F523517518CA0618E31F9A5940EDA42D8B9D851AD1E77BC1C0C8EED23
+F469B0568B5A556A5FD5A20F5F4E00FA6F030ECC5E711865F1549E409792F7DA
+D1FFD1BE1E6DD22619163B98EB0425319E738254ADA0AE57FE29E121B0D8F172
+DD717E0B59842BE9F6B37FEC3F1BBECE15664851EDA3DA3A1848191C38F2CF60
+7A262D4440322C26150C605AADAD4EC3EF0CA22D6A2F63BE63C9C08EA643B68B
+9C88ED95D2F2F0868CC40278DC2752A1E61C793FB87EE69A6D348F98A0174B09
+5AE09E214EDA066174A6823347B831ADF2619281E43A71D549FE194D5AD4ED5B
+1DE112CA90BB9D92C57FC3D89F1A57F7CEF2ACE8E944B8B725557F567D9DFC72
+3D28B0E11DA3F81633C042B5FD05513542A2B431B3744E2E9581ED828F5F8A8A
+C600F526EA874274FEB94E64F0AD787F47C98899DAA4552E447D4B97B3774334
+8DF26A38D7CD36EA79B64CB31DB0302BFD0DD2280E10FFDEF59E2D1F6452FB09
+E2A7015523BC1A46AC2F816135FD4EC198D30E95203ECD2623E83FFC1436FF74
+068CFF87C1ABDE2D31AD1FEEE6031D889A25B9F2C05036F16BBDC143705545D8
+4D14A2467639644AFF1D239BB08AA769BB5476DD4FE9974DC01E85C02F82958C
+12C3AAE071BF1E57C358F72290F15A2655C1C79DB5E5264133AD0139F9F9B540
+972A3FD82BF0377FDB8711A746B9F4C6016172C30CB33CEC0B327DA0DE2668BB
+CD41
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMBX12
+%!PS-AdobeFont-1.0: CMBX12 003.002
+%%Title: CMBX12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup
+/UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMBX12 def
+/FontBBox {-53 -251 1139 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX12.) readonly def
+/FullName (CMBX12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 11 /ff put
+dup 12 /fi put
+dup 33 /exclam put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 42 /asterisk put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 63 /question put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 123 /endash put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE
+0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D
+2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608
+1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C
+42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557
+FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE
+78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18
+22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE
+A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811
+4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065
+4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7
+95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D
+9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC
+5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF
+9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3
+CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511
+BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65
+9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68
+EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A
+D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE
+2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE
+947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B
+0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6
+4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C
+BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2
+F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4
+6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514
+D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415
+F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8
+481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24
+FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D
+419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6
+7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B
+70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988
+2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE
+0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC
+9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A
+C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D
+1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2
+A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969
+21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530
+7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198
+17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60
+30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F
+3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257
+96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3
+B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950
+1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B
+57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE
+B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC
+8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91
+8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59
+B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E
+BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC
+21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91
+D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4
+FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F
+A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4
+A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082
+A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA
+DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38
+7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F
+07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9
+BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E
+8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89
+E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C
+B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5
+45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67
+2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5
+5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF
+A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28
+5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975
+E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01
+5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94
+6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30
+8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB
+BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6
+9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB
+B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B
+B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E
+8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD
+595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E
+FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15
+13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A
+FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3
+DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB
+313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248
+C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89
+F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD
+DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844
+8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753
+E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197
+A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3
+C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20
+417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43
+19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4
+9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85
+12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83
+3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1
+A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68
+90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94
+3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5
+B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B
+82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550
+1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94
+AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D
+9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985
+2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5
+99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A
+31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414
+3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86
+F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5
+70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E
+5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891
+84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978
+BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047
+8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7
+5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7
+9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B
+F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E
+94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE
+0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC
+E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4
+7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581
+596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442
+F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E
+7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1
+1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785
+AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE
+4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F
+744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D
+67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA
+054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA
+6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B
+8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE
+CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39
+EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4
+C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76
+57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5
+5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F
+C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1
+CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2
+848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C
+B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB
+77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28
+87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58
+3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8
+409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7
+A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B
+72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D
+99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD
+8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB
+E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C
+82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3
+C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0
+EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634
+23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A
+59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F
+C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0
+1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C
+403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90
+1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893
+75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E
+0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35
+82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25
+C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8
+A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC
+9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06
+0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C
+5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060
+62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D
+6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E
+1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5
+648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1
+FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6
+754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A
+E124929876488AFA97FAD262BE3D172E2F03F564F1325C9F1E050C83C12E0CE3
+C7F58270B5C40B46B3F592FB41FFB7F59EBD69B2F489441E398FEF7F84C85055
+531D95FD21629B0E509C2FCEE995D025BAD5D3F28CDBA5CD414405ACBD936C3F
+AA4CB2620D7426002161F983AE95E542EB8553AFF7E57B82E05FDD5FC433E1DB
+BBCFFB1ED92299DB0291CAB10A84529B7FE279C62628A24A2FC36B01976E13A9
+C528A198B8EC8654AD69CCB5C209964A2B25D6DA9BA0FFB366D19D8C69701D7E
+8ECBEA88569601C80ACCC2D5487DDBDC27DC463A53A8E59F9EC17D0ECB7D2188
+B6CEC6BBCEE631DBB9959A9855B997481B5D88B8BA29995053CF42C5518A3E8C
+AD21553A0F6BC3483624B013D3537F7C85D7C558A9C772554CFC1C3FE7A70633
+318A99508F5D2FB656B5A91E94F80F74C7472F507428AADC375AB9F18CCED8EE
+9DD57456CA8DB8D3B133596CFF2D510746BFA00B23F4001A3D0E8A24476C497F
+A14422160995F3378EC9A74A5D72D776BF8BF91146E73518E61C94AC5C7ACEE7
+783E29B29962E638F75366A0C0235475327F024CC6C824A52A6C25E669546A39
+C3459E06945AF250269C9F7B541B1EDA04DF9B9C7B442CC7484595E7B1A860C2
+EE36E1F845BC6E79C445E11925A881A0D3A9849030954BC5FBFED8D254AB3307
+A399E20BC127C05EC76D54C928A3CE1F99F672A8F47C8520C5D444D1EACEE114
+A71EBF58CA1088DEF117A723C391F62C0AF3985BCFD5526503360C33B1DB957C
+039360854589686E27DCA9375B709FF2F8F5EAED9564F979A245AE2498556344
+69E2A27804B51D5C52844E3582CFA648E82492354EE0A312AFCC4E90866F63CD
+173E4CC6A74D82568D0CD88E078BEB0A5232202C7F74C3A8C80DA4CA4BE6C421
+15B80B4A2A50F91F7841F60C5EBB4DC67ABB15A3A285214E20B5090E25EC9C7A
+2A8F1C9F2FD755368F61370634A37A2EBDC4B8728D2439D55B73596A2D5B28BB
+A83A38BFCE4B84AA3D8D373C53DCF5DBB5A327D9364288907C0ABC0D5E6B1D1F
+7E57E3E21ECD67DD9E3F0E86E00BAE52ABF645D6FE70EEBAD9C853FE34801A46
+8F6BAB6A2C22BAE5DED459A3F06096ECBA2D20C707A5F47FA067FCEC8C8D6466
+9E478B07712A577400F5FFC65EC107578C4E6F28961509BB7C41E49F5E45FC1F
+ED4AF951E8BF1B261E06E4D8AC3B4CD60AA0FC495E73E6203605E5473047818A
+46C98482D55F198EFECEA05092BF11A982798FACA6AC540293AA90208B56E2B4
+05A05AA45B2F8A67CA109A6987A670340523EAABC230E0034454E773C31543EB
+C1C2A99CBD1DC7532E2D2169C3C25B5853E2F0148E4AB501112B8BF210A5B39C
+1C4E8991DD2DDCC634D3D63415B5C7DFC564102751C1BCA38AEAA8F4E69D603C
+13A5B5A81BAACDBF724AAF76189BF3DB6239A7E19A1B2D6DB4943910A0FEC76B
+233994CDB5A903872A55E51561F06A6B999E0F91C9FEA20E0176612E869FC157
+CA648E8C2C4859D3C17905352F1E950675D8C56369B50BC8C75413021319BE2D
+C982926A6CFC9FDFD4BD728E8FC1B6FA1074FD7271C136B260C013A9A33CDFED
+A82DB154C0423B391E7BDD9C5B35D92D3C4F5CA5C773AD3712840EF3BD5F3C0C
+9BF19092B9296CFDA740566999ABF31B92E8AA5A92D29840D33625338A3E7C02
+5854A6B272591E3B581BFCFC1620C9C0F0B128B0B69CF0FE34E56B191FF65DD0
+59BB27457FB4CAE161551620278082F048A6BE2B9073ACF7A6BFAC7D1F9F7F0B
+3DBB05CBA5BE5424E1A07BA58458074101EB3731E775802C97133C9FEAE5494F
+C0EAA6D6CF2DDBC064CE7696F610A3DD93024161BFF27FA1D8075A295BE3B80F
+CC225A257619628F07D9D740349854CBF43BD72E25F63249470C6AD3E171C6AE
+149931C1434F22B467BC377604669C077F5806E9193F9E16A737C19BD3FD5C3B
+7420A718C022EF57CFC7D7BDFE22C3FE896EF34BFDC09A6D5A6E559D6E1F4D31
+8A6B69C544385C1CB338D352749ED74FD1A051ED6579D5F1673522CB02BC25D4
+5A9A51D740B3A9B6AA52F2B9532A32F4C22FECE7BE96873ACFA2836063BABD50
+D4D0647FCF2FC9975A2ADAB86FE1AB14A5FB4C3A576387A993E9EAD3D401D3B9
+F231F890215B7192A71327BE72F2405E94E47EB82C9A7479B00C6122A94DFEB3
+293F1F328765B0AB7A2D4B51C48E5E2B6E7C96C765EFB49FEBCB593DF1A90284
+4C0723CBD625288D62D821F47FC3C28473B3C5DD3322C8D16C4EBEA14523376A
+844F4E51F255B2C1FEFDE840EF9F3E5812411FDB55185100403155B295C63B3A
+DBC92BAC9D6973F0D609CD11CC3C3BE89C92CDB21B6C976164FCE64C78C7DCFC
+DC64B362067DB28BA59ECB57C2A5880EDCE8DF84606B2A87979DB086E06ABE21
+2663D35368F31CE867F91BF71FF831CE0E38084F98D501095CD4706C2B82FD59
+4E1501EDA7B03CCA974AA84EE5B39FED998FFC3D641B2634D72D92AE5B8BE9BF
+64FBCA1B8A80969285372EBCF24A27AE19B48009B144376992058FC36C23CC5A
+6E4A0CF12337A9EB8AF4EB6694621877CAD1C713A85940DCCE4FA1EFB2CAC5A1
+5FC3CBB1E61418DE140D044900F52A6BACC68CECF39C9491756BD3153D07768E
+9D271FDF798A9BE772E9D6203CB03206020B45BF76810C0315448861A5A2030F
+DA8EC1254C22D7CC89684B5AAA2141B7FE3AA4EA3BF55D907B8AD5FDD7488DF2
+A92B28261638A4862130B2EDC13E78F97B9E61B0E933F0AA0EDF58A66BE288FE
+84C209CC1881C5E57ACB026EE9EEA1CBCD4A4B02E7FDEE62BF76D885E26B2297
+2C274B7FB21A9B660E934FEA1471473999B90DF953DCFB6D68DF5D2E021349D3
+14314662237C892EE094D4735D2858FFCD6DD748530645E493C98D80A8285CE5
+6715A6328533B1397C3705CD56E0C75387838B370112A8B235ADC17A0A56E03C
+D175FB1AC49115DF3A8068BFAE58E8CBBCE530216BBBD0F9F3944427571544F2
+8C62339695952397AB33C31BB14D2B0C9F3ADA35ADFA8E4C4B60412A4ED03363
+7EB00119980897F8FAD36DD39AAEB4D841CB7FD8A232A277AF527D50DE49C5BD
+936E0784FA8D2E9820110C5BA10584B294B2791FD0E49A687753DEE31EA923DE
+BBD92D8C08FBACD88FE0677BCAB4938C5902229AE85756DA918D1EAAC6290FF7
+D9F6060953B2BEF26E8C07CC430D70EB307F1C727A57F3D46BD6267A03FF3437
+E1D2A9716E3C4054FC42D3C0246721BDC61D4A5BDD65016F90D55BE8FB63BFD7
+06B527A49F84B91FB321607879A9669EDFBA9668D1B4DBD407A7D53F7EF6CC40
+83B4F1A930BA2432BF2C984C4EA14CBFB7030CD0BC1DE50473BE03E04BE50DD1
+7FB991971A7410A7EE4118F6FE4198835C448B709D612075D0187F1D064A55D0
+BF3AEBDEAC29A16EB33EB458F44B0664E74A58EA5BDD24B9EE38374F68E2A923
+8E6EF9E9F26315A22BFE353D875F5ADDF0821009F568476C9642BD3B942090F9
+39B7902DA57E8C13BDD10ED0E137F3521D1B29F287FD6CDFA7D26E2EAF839C7A
+38F06ACD6D713FCBFF0510C4C35038553E463A0761F0A23DC9030F6CC4FF96BF
+99AF97F7D9267593812BE751607032E736626FAE21BA2912CB67547A5624F9FF
+3253923D889FEADC594F8975A032E566CEB10E876AF5047937881C262732BFB8
+1F73C6FD56077C00902C6EBB852D1747B8FFFB1468E8204A9400C4AAF7F7504B
+89244B5317C1DB608BAF91FABC56827754D6AB01EB4188C1DD73EB4258F962F6
+D18B5C14089225B509D23D5CD4C1DC4EBDEAD354A1B108466BDC3DD86535C7D5
+9DC062AC8F099821864264F13C4AB2441E7ACD2C47AF331AAEE509B0BA31A92F
+18CCEE565B5CE02FF94D635AAAFD9497FD00E8CFD213D22F06BE684D43369131
+24DA92CD0D50373B137892A8B6A9D619094621247B06BE1E433FDB25CBEDDE0C
+A7DBFF7A6CCD6DD55186F56A089E3901136B014C0F5AC86C819D5824292E6FBB
+17704445C90AC7BE8252FEB750B78804B33B2CDA000073A5530C7A7F2A4AE279
+4D627939E1DF094EFFD5FCE391C4CF81949BF45203819647EDEC018D18CC1D5A
+C0C1B1FE3D2BCBABEA21861E2F2FE5DA884F134A93F17F001DE4D595014F3E76
+D4ABF5249A652CA8B53ECE9461924FD87EA819F5F68893EED1A7A1FE4F231514
+3E69D4993A48F014F7E4FAAFF2D8685DF2FF50A41F309F5626E6328EBE3D7793
+6B8EB46F10997C63901343326BC91D6945666C8B3362A1A94A73AAD158E38E2D
+1436AF6B3AD32B064A6FFFBEAE70AD11ABCE5ACBF810974EED6623FF916F947E
+8897C2171970FE02EF18874092950F75632A916FC6EE77883AF461597245F0AE
+8C9C7005217A59C63F192A57B8CB74D07048E7A25F294418AAAB0ED28B0229D4
+2571A21B6B46570EC066319191D8B155B903598F4942F692E3547AFE51D76191
+3A16F163FCB3A73C36471EE438FD549754C91190553CAD1FCC0BA3B1C1921470
+78784DBF40B54294F9EC7EC7F5A8D574CF9CF9D22B5AFA790BA5659631FA3059
+E2E1953F58FB83780B1C99407D48B75A13999CC536089B8AED30485E52DC4985
+82D1A5790B451407C982AD06399DABB46A1A4AFAB1FB85F11B558723706CA227
+37FA6429311FC4A178800ED5DAFFE353929EE385E7AC9E04E4FC63C66296C1E6
+3C5E2DEDD62975D7743C6D35155A5A8367EF7395E4092F095745C3192A5A66A9
+7AE6B45029753FB2230B881A5F7B0A393AB2193B15C06535458598458618C70A
+CA5EAAA28AAFE895B5D4CF0A6B2E3C2573F790EB4E0B91C69E1E17FA78B77CC1
+376510918CDF6E955F231BD7DBE1D4B0C1B663DDDBBCD1D95024181273D58215
+A7455285B8DE11E9795DC15B579EA328D21E9E2F8F276D3D7DD7DD69A5BED0A9
+351216C84EBFDB27DA7A3E151B42BFD9165B491D670014B3FA0274F15863F51C
+54C322A69313804D6960AA6F0CD14A970F28182796656266DF384B25F627CF3B
+5D51F9831719A33AE20EB9CD0511871B416E3DDD76916219B7C93431CF22C76B
+DBBF4D6E85432A920C532D8EED18515C4352A52E0B3CECCBADFC1C1133267F2E
+D66668799BCCA45FB84FEC96E1BE5F9F62784043B71C05383C353CC53F04162A
+9D8419FF16DF736F4CEDF9EC973C501587145DB5E1F1ED63838CD8312011F19F
+94F8BDA1CF1225204B9510B972ABAA4F6E9A92A86787127AD97A42BD3952C5D5
+3C588E96FBC8B48C088979F3881BE01C85B53BD456E0EAC91B8A899BFE0E5C1B
+D6E38EB78BBA172D26B7F1F6E90F029AFD3CCC6E3B101777F6E045D8892C2005
+12CEE278F85797C382624E847BDC406BDFC013F099F6236C6B4C21D85F205D3E
+6FFE140165D3176467E7B241E4BCEDCB0850B03E2810045E79E3190BC6D251C9
+8A2D9CA4314B334868DD0B63DB9D00CCE4D80B4D359E54E9E81F01799905F8A5
+FC2860201F49F53045CAF0D9DDF9EEA4B00221BE2EEEB189D5E1CB6B15DC91E2
+DA3C7A24A571BB9517F8FAC84F7DD0A41F53148D61BC69C6BA042714A69340D2
+86F5874B6653A43EFFD735CBAF59B539B91C1B05E6699A74B1995D5E6AB5601F
+9A606A94F85F32DE43ACF78E3E2B75411565BCD9A90491E29E22DB3596F92BA6
+F7C2DE622841483492295376FCE5EE8BA0B13D54740109D82F686810A03CED91
+CA7442086B0E3A5DCC22F11FAADA1474AE0B6A893B3CA6065343D21B834F7239
+48B88675A71B046352293E2FA73932485BFFE08C8CF502F6BE95E999660D8B2A
+0FA634AB11C8C4765CB478F19595D5AC0EEAC22E20BD6F30B1A1E3B10805CE25
+FA694E5DEA8DC007C05D654BA6593C846B1FB7548A7ADB2579811D5785EAD68B
+AD679E1B61F5FF45E4F8684C7EB447EBB9C9F19C1D346A1D321F2D49E84FD923
+5C54CAA7F85B97232B8CEE6BD06F88F71755AFBD86D0CD6FA10ACF67CE92B40C
+605C488E397A2CC9C206C3D96133EF0CCBAEA910F86DD04D645AB8D40F440439
+3D5F0DE8C89DD451C007793ACB6592E65441A9F49BAADB4C33EEF1BB685A74A1
+25BFB78143CF48AE6E4220532452C6437E8FA281C961C9D205DB1B9ECE54A7B2
+02128113842C8454CDD922610DEDEC6AFA3605F800A2C66B1E014EE0520FA2EC
+E033F8E7BA6C6A64334D877426070CC64F4A30CF382F2FA2511FCC4E8F32B68B
+10D7EEC8A2D3FEB524B64E1ACC9A5D888916D1C52CB3358E4064926E46A0E80A
+D7D379A531BE1B3679CD227B51E6D6C02FF46437C0689E7E5346D47AF8694844
+8DD0BA48D36677A4E612DF41F5109385E07B96AE023621BEEFA0A691E2AA2B90
+E8CADEA34F5570B8B23BC40420ED1D6B2561C28A147E099EEDA54721E38D48EF
+4C685E67F4228E94F657486A8066269822E58B38B3BC343F9D5F57987579C683
+1568DB43597420CE2BACAC2BB30614464BA2D6CD239CAA21F4CABD42E0025967
+017314B488D7E5EE80E110F82477CCEE750ED06A76054A57FEA3E58EDA4E3C3E
+E420DAF021E8ED0D4EF74864A7A1E824C4FF703ECE2C7A1E6BBEDCF03E07B370
+4E1165A4EDD682BE80FFB57B031CF2F1AA3A087FD8F0097423DD6C5CB7534B5D
+657B06513CBA6B7003EEF17DE1694B408603A07E466032CE47A12D891803588E
+B1C2A4654A823859C31F6A9C1E43A6CD1BC33ED401C057ACF6226FB683A81D5A
+9275BE95DC05E58600D03387859171860B5CC021542EC0F9A1D09564CD5D1AB9
+AB4D7912746DB575690193F7AF9F1E8796C9D768C36CC1E7881B7DAF0B577A49
+3120506D2C28E487509CE32C3AF08DDAD24E3661C510A118B1E6532BBF715A0D
+6823411E2F423322A0AE1278664A2A391525C51407FC44082FA112B052D18241
+C4BD149FD298430464B8805A392636365F16B552C3A8C85FB4391779C219E8C8
+7666533C8173D05FBD8380AF078D402E8ECD110D8211100B61C2B3AD289F2ED8
+06513E48847DEC3265DDA8589CE2D08462D88BC1DE42C42C7B85C5814FDE1A22
+185627E533C6D6FEF2F08829E4308401F9A3688E43966F682E008CBCEA1FAA78
+AF167872B047977087BABE9CBD0D32C5BEE00DBA8FB601CA91632BCBCF931FB2
+6A7545A1B85240B4CC322AB87215F7FD0861E2E15D6610793D37343DDD37CFE2
+DA8FE76F21F89D36681AA6A43DC0A18AEE2B8890A7888DEBDC7706B0950C5941
+1B4E0DA58D126082D077CDED69545AEC02608232764F1BD76E619096084F6A40
+E2C90B7DCC3EC1B44B0A9D57CF9A26175839B5E794DDF3D971A66BD17066F96B
+8F5BCD802920130F76E434A76F8FAE8CE36A682B88013043CD4FC58F0E43957E
+6BAD3CD19DA0CDDC20A1A59232EBA4B3D7BFBDFB03B340476C88C8D1E2610162
+AFA87AE597856905EA9E3BF9A9F876708E4EE74EA2B873CD6334EF39934E82EF
+57FED286EC865B17F0458D8C80EEA530A48AE583D90327BEF4D5572C2D6302B7
+2826CDC8273D472681AADF689B1C35468B4BD921176E2E6110B701CEE8849057
+1308F271EB8865D933305FAC772D81DBB57AB63B9FE4A099FC5C12A3D0C3B53E
+5734D8F9A6363E7A495DA00171614BB09EAC3DBDF70FF4BE66A1B7CBDB0EE947
+A66EFB7FE439A044014FE080B3456E6882885826AB7F7607B83420EB3F1938BC
+CD256A898830737E39B674A2AA18FFEF4A5060294EB206535C95C56EBDE03FC6
+58A99B4F468DFA4BE4F63E1355C57B9365CFC853D4DA74774E8C6EC887F1BA26
+5D1850271128267EAD0C2B707BC18382C8F1C30F45DE1BA668B694AA78AFBB5D
+C8948DA576469BA18204F616F978E606BE2B07BD972F3247351D3F8119EFA501
+7C471171B70EF45ED3557A26501F599B7606A1F3D3F543C840B38AB2A9AE7D3F
+9AA1633E6DE860AB2378329FB9513F1B479B9C553EE43B4565E49D4FB7E39CD2
+998D5FC63EEDA03C1CFB5CC07F3203AACA07C853B69DABD3B48FF745B79AE1F4
+E6013DA04F13E069648104D5A38A2678F31BB1DD166D07578DA08A3476E773E0
+9C23D8E05016ED76A0CCA6BC01BF814996AAF260249389C47CC8CE66B454A5E9
+2643DC04C42CFB12FBB9ADB0E78C79C982D7F24B2FB4E5D32EE804FFEDC9FDC0
+B9984261D8124B3086B2303636C1DCD552AB7CD18AE2E6BFE248D02882014F5D
+659C48DB8AE75DD1C5589272EC3D33A552089E26F80142AD0CC676F70A94E2A8
+70BD0F2DE0F1BEAA038C6EE73CF58AA15BE408EFFDE8BC1B2645E1C13272EEB2
+45E63EC4B4E34DE3F1BF7E8530DDDCAD1DB9477E253BB0CDD7DB76423668F37B
+6D8CF668643783F562D1A88F831885F92165158476A408B5891AE6583B10E0A8
+2DC1178398D7DDD886B05FEEEF6505C499EAE9A4ED51099D3D424879E7BBD4AA
+61C14D18B0239F63C1E6A3D559D232C4833E09C36B5E7A22ADC68E1963610666
+1A6BDFB86A6693CC2CB647A4E339C09BF17FDD40BF22CD952491A5F5A66B9732
+017B68D7961C360A317C013F335CD54FAED7A0F75C75C25C575DE3E65E3F0FDE
+C30C7FA545BAA0A3A1A22BB859C16F58E93FB0CA74E98E3899D7923C055AE485
+E75FE2C05DFF8874F452796F95BAB9CBD271423DB40C6087626C5122454C6A9C
+BBF205BC00D07D9830F8AD3A76A5A228E9911583358D2122F959B233A8F590FE
+BB916539D2AF54A10C52AC6541B1C1CE997480908E02A722256EDB75BEC4E962
+1CE8BDDABF01A673F31775C408EAA2A5FED6AAC014B05C36F3C54D9AD2DCD025
+BB70733EA2185F9FD618788854DF25427E870D37224C6B6617E3FA0C251C3FB0
+6B358CA539D752088A0945DF665D6488E37017EBCC6502CABE9CE267BA87A6DA
+E48B1F12FAA0BF3C12FA2E860259C6586FA7843F584CDA55404C88D283141685
+41812C6FEFA7A66AE6C731929D09CE093EC6712749285DC2FD2512F40EC1B114
+70B7613B43D761CB6A02F570A059331ADFA10921C3A3C4E6BE9637FC8B690F23
+138A098D8E1EC01EFF56C86D246BE7270FFAA7C512C6FBD96E3C472F939C1893
+C8A3394C34045B700CF10355913744AF99463D6E2573106B2FB9ED07B79ECEDA
+F9F6D041B6061CFD8E02887E5C5B0194243F3DCB40909C3C03333A279E0D9A9B
+037B84BD6F7300D0E5EAF980EE53B7FD883886528D521DDE4F74536C7F1C5BA8
+6CF279C90DDBB82DDD1EED77FDB05E8350DA91080BCEE5E3C84F003325433D10
+D03C08B43EF95318EA3748DB9BF84D57A712C0308E80F5A54A38F0B2F7AA403B
+C57BD4BB6243F7A0B09AB0C885735D9861115ACA7567ADEA6FEC6F59973584BD
+43B3AFD18824327CD6C21D4FE1F16F6C67D01B97FBB6F70DB5D7D6E46FDE0D09
+DBC1E45DCF82E9FB3D465175DCBBF254C59447D3C3DF1F66E0EF8CB6653EA52E
+4C1D346D33499D2CF129D9704D74AC399DA2A23092216969B5B8D8B520F05DB0
+345E1BE31E211BE01A1B1FEDCD9F2699E9533385D29F0C80F990CA5A874EC60D
+8CDBC045FC2E2F6E7A2E426C485DD04C4052A80568951B7C5B7A7FDF8DD163A3
+CA1D6A36A80B7CB4401674E6E1B9E8F2DEF2ACBF87879AF5131DBDF6A0458B01
+3243CAFB8284DF8C4F946C328B453A363103665491D387CB40A493B9159F46F1
+E95207F8E71D827A15A895EB17899D2C0FD610B9C3D3F8378310602034DA6BB4
+6131CE208D659FD3AEB590D2CA5918ABD2C10E16DC378CC922D605C66850C6FF
+2CA7BB0A1538BE6DD5CCBE51CA7509A995F2FBA6D2813AFFFB625604D25D5BE3
+4B677D6CC459FED33F0A58E740A1EF93455D2B7CD3B6D7ABEE83D3BC3823F2AA
+FA77DA4784BB1DBDA4083D991F9104BB62EFE168D1BA37A2E3EA54BFE6FC2C94
+47078B5E340D2237B312258AA715FE854291D40061B6AA9F9907146EB2FA3B1E
+A1CCF2C8D2FB8230406FEBA3D184317B4F7F777410261D500F55751A0A445DCF
+8B100FE5B149B2D2880C3390422BBB8E8C6B8A8B773072A0091C1BBF8415B329
+D16FE300AD05CB4B62C90ED22ECCE09B5786547455213BDCA572889B926E3DC2
+6FCA839E42D5519C1C2CDCF412755B645AF3BC38897CE7750B8E47F6E352702C
+9C554B0E2ADB99F2A0CDF93DCF419AA331BA310ACD315C11912F4F8898EE964D
+C1E9B8606981B25AEB7E411114D74B37952C0528E51447675CD888D80A0F15C6
+21A42FC33BB3346D51B6BA20B726EC79F582A90EC43EE690F0A83B83D2E23F3E
+4F5C12E8BD48F1CFD04A189937925596C040562F4DA681B185BEABB00F7EEF7E
+1E44F8ADFC6792AFC7C3C809338A6B1C046917289139040D382F60652624775E
+6C6214AF5BE1D81A2A23CF2380BF6A13E88E87E2F1095B60798AB4F657A26671
+FE1C598578506C804FD43FFBFB76DF8D4C8E647F9D021C46011E70880A8AEDA8
+CBF3F181533340999B7620066A460E564C3C23FA8B29CC1BC8D337E2B1E49ED6
+9D10EAD96A52AB4D06982F4C48873C6F4872054695F253B592B83A1BC90A4BA9
+8371C4D319DD261B9A0AB13F74274E5B376A3288FF60C93421F114B51355E725
+FB265D39C00AABB2DE4300968FBE7F652C4EC71A7EBD58A20F2B4C1E2D1E3646
+902A0F815E9D67B50861D6CC2AE3AB45BDDF3782D685ED8E41C0D8F1FA37F238
+00A8A3ACAD22D898CF8E95855558179BC84D199C6C79A3EE2651167A4067A9A3
+49109AE7F53B59EEB1F57DFD4A00077DFC2BD2CB1E3169F0A348D4DDD2D9BFDB
+A31951065B0230504FEC2975FB5015838759745EEA1347DE8591A58783F1EA48
+C7A7456E94BD2ECB916B85160277F98FDEC95DEFA7FC19532AF90C6AB3399C55
+86BF03B871A4C4386714AC62E44857919EEB2658D1AD72570D70F1F9926D6B3A
+D12988299F620196898ADC3125C5A7D11765025B237983BA1DB66418B484B022
+EA1018CB14150269A089EE9CB3EAF08D4F7E15E29048F729B9D39A15C00B8715
+F030F927C8AC027A3B040CCD0CA1FFC5C6BCBD00457BDDB418BA3805C30AC43B
+A8DAAE706D404E22DFEB24AF9874D741C9DA45B3163C259E8DBFFB6ECECE2B97
+6BD4335015222631F5D86490C0F9BD7C22ABD32D6DD412DF772548B38399EC08
+0E28700A2ADAE8F0D50EFC4CA8642E0E996D72BFCDEE1CFB252A6F4D8E03347E
+F6328BF18282ECBC88DE3FF382726F910FAC2DD599E63EF7C3068C1CD785D101
+16B7671ECE1E0D30CCA1C6F2D3AB5E81E309696DBE4973F71D240C207CF73CAA
+D620DBE563AC9B2000A628E8657A45A24030432AC74B5ABDD022CCF6AB855E1A
+61619EB4DBB848A6C2ED5745005938EC8F516979806AF5E714704027A0CECE87
+4C44DAE80608392EE0EE0E39555ACADF1D3A873D35CA84D87ECC2AC41937CB62
+B250E3C1AB878BA32AE2E161D13FA536A305B352E3E0210636A81C6655CFED25
+A2B75AAA6FB0D2FCF696358223E78DBC2B9BCA15271F7612769ADC00BA66A2FA
+8E38ACEB99E18B7B4A5C2B7977169EC141121F0664EAD87EDDA372BE22988222
+27D477A6A4715C71091CB2F01C6B3176160BEE79CC8FC854166DBB093A49DCF5
+E45AB3B20EF3223684E83C8FFB2D5DE9CB49754799E038B748E75C99EBA6D69B
+36E162CC3860E33896371D0164C14138181F2E00FFC08E2A3619E1820A560C7F
+63B054216AC8CBA7B034AEEA8E735705AEBB0D78F17856E1A0476DA6E543E985
+4F7AAD98E3ABB2D7B4B1629FB0E24B9FF10F06192AC8475CF8C35EE3E635BEF6
+ACA79F1847FB84C4B20E6067BC0593C7C39657E08A3CFF64915F887D5B99356D
+91C0722A917B347945E1A867B062C016EBB7D924F11C74873EB4656B61A41CCE
+DA1780D204D28B6F0CDCB1E059B3517A5AB44D45B43221DC53FC699BBDC4F2D2
+865C697EAA3B49D2AF5A4CBB66244196A3D8A09C8815FFDA307DA47760CFAD34
+434D00946C23BE41A6292220F0CC19CED3277801C9C1C3CBFC755A261B4ADA4A
+0C9C3E7F8ADB77A5C68021775619D9CE770B4FE975CD468BC5CED173CE1356CD
+A26E6AE273197511E50A014B19A5B79C7B75A57B08185B20AED966A4C9DB4426
+1294A5BF040A05A4FE60FB202C7CD2BE018DA7702CDE728193B72F03C3C0F1EE
+58CEF81EF167CE9F8967B4DB7A3A3BC0868B8542DFF05D46DA08CA79F62ABDC4
+39373C66A08D536491CCB5EE828E410576057488E85A47D5D9F99F748E19AC88
+E207C21EB573B9429A7086A93CA63467B3EDFE08931BF575DB82B76AA9C05E00
+29C7D4F53CA16E6DD53BF23A0991B1C5B4902E4DDD5178E55C2BAEA308C5877A
+3A21D1184FDAF68ADF993920AAD2EDB045E98C990584EFED9250A332BBC01217
+DD58CCBF7DB9C0E51473CA37655DECE639C28E04EB47E5B52DCA10E92BF83F08
+AF3EC395D0A74BCD4377EB7AFBD1F0B521F6D8F0741A07BE28D6A8C235B90B7E
+B448354C9FD450F98270B3083515004B56718E81C4C6654E40B692780D83695C
+3F456A401A6D24740C67A485AA8B616B94B23EB889AE93CE66F5CD6916E32C66
+809F5D3C4D52195D1335F89D1AEA6C07A1AC8E8F30AC662E11541536C50A6763
+5D8C71FA8E0EA2BB0141FCADA7AF9CA0A69AC758DF87159707038D81DD706B6D
+123D53212F77FBF6AC06A7771FE86D254F9E6B29045CB60628EF491A26226D02
+D799A4B2E1E4DC25BB157BBDFD0958E1A4617EFF11145D3EB94A389F514D1247
+4B6A4CDE1DDF18A826C0BA8FBDCA2045C3BD3465C371248428A4CE147069B2DE
+63E85D5F92038E8986DF08510C6FF1DCD615A7164A287A8C8C869C4B1151820C
+8BE898107D19E768E66125C6A6BCA28D1A99BD7E6F58F60DA14E77ABA2001B54
+899B488C4DE7DA167A762CA3CAB0E8D157F6BED3679F019546F0322A7F6ED7E0
+D6AB34BF0F646E07A4C08EABC1DC40062E17386A406F88FF43C3AD322E8A85B3
+9EC8C24C751ECCA65BC7A2ABC5BC0E8C883ED0FE37DC111181650CC6DF943495
+5F0DEE475D1CFED3C23655E6053A884DC41E8A4D194A02051E5F7F38C625FF89
+5894F611575CF75A533095881952BAB2C81BD8C303C903C81D937E4D72A28261
+2167382EB3632D975CADB689A7DD5419F12E32DE2345CFAD7A85A9ACE0E63BB5
+3C49A690274EBCC5CDE015218223D2FAE1A1E7344932BD8CD076FE564F523B92
+6B50380301C36A67A264AC735C9B038CFD7D897ADAEC00EC65E174F47EF1EF0E
+F4A1C83EAEC77CD415ADBFF5E3AF7769661AD8506C356C20595B1BBB7BFF1808
+92015E73FEBB58376DB5368C54BD47B486330BD22F9E1804A05B350671BA373D
+737BD0BBF7E78ECE5C76FCE2B1DA10BDC7074164DCE3D2940F1CDBD02A996EB9
+7F4227B2446C7BDC11AA79B727696467941A4C2E3D51E3EAF366EAC7857F8180
+AB05461898B99098E955BFA09A8371FCF1EB671DE86C89776B7C90AFB9A4EE02
+39B35FFDE25BE1585476BDE88912D1E2D4C1083BA56BA4346B90EE84E6CE5BDD
+A7CB599B4D716F7F25668D8C559E2347F20311D49CC7D3D4AA0117D017F065D6
+E43EB82320EEE8B29B7C7B83A6CF79D3A20B16393235FCE7F9D0D5592A80B33C
+E664FD2F2B0FFDF29C89F7F5A5B0EA96456CC42DE1C2BC36E791BDEE54293D48
+BAD9DFA71606A78B5C2B8120A45F17A394F417C60CC181EB7ACA7D461A1A8095
+2372E368C1869D19E4A1A23607B6C2B0FAEF474C703492E7C1D68A3248CB8F77
+FB17BDF28A502BACFB2E4601BE018D24EC2CEAA4537271B2B9BB7807CF447BDF
+5A7DF27A00D96C481ABE0B02EC0B61606505E357FBC1BF8F1A198A184BFC8B88
+1ECCF1EEAFADC8D299F72370BF10AF53EDCA219DBBE145E0F1FF317515BEC422
+623045574C79B689412F5E7E5B66FB463E11C507DCFAF31AC1AC380F35CB7DA3
+FF9A0B82402DE0696CA50B4CAF93667A489C1640867AD454CB797645710D9929
+4857D74A887D7E458109B90202A50ED46F0375F71482C7C6BC14E5CA6B001206
+62A44754C351B56B41AA8324EECF26A80E7D3FD85086741E70FD33C8BBD546C6
+3AA832DD5BDB976D17B28481B7DAF12DEF348DDFAAC53E3455F82DEB8056C13E
+931F9159178FF1C744AA7882E7D49D88398EB3D023A272B8A89FB5659AF715D3
+0809BB26F3EF80A788CF54449988A73B416219862845F904E091951992A279F8
+33FF4A4CC37F9AFD5521E41F6FF1F12B1D9C7C0482BB38D1BE007DDCCCC37C9E
+1F7F34B5ECEC3E6DDF6F6EDFD95605BF60F55F2B1D345430A89813FE189F391E
+844C44571502F66FC3A56B222DFEF0D676041A660E6D741D8F72967DDE8C0A3E
+96BC0FE3243DC07CBC1F0E99619BEA04EE85039B404122E496AA7BE34A4775AD
+E4A310C1C020AFC6E74279DBDD0F6F374691D8E3B6EEC90B11AABD20E59F8595
+3397C7E9BA2052454250585469A67EF40741A9F09BA2A2A04885CED6AAAC081D
+0475A63CA91BFA5D6A3770C1CF80F9D01521A51D815ABB1F31A89EA13412BA42
+7F1916165E012C0A94135C485E42A5161C7B94A02724B5E6D196D42BE3F408A1
+C11D207F5EA2CC3F2DEDBACF246719BD222861389AAC1ACFB94496CDFC5F3348
+4ED4336E52D03342822CC7E267C2C9694D9C07448ED043C56C57123B08124AB6
+8EC0700E42478E6F0FEFBB0549B2BE787570D2AED16C44AACBD6933A925055A2
+022517A427181398FF7ADAAF7910954360EB4403E16A92D7203A4587ADB06169
+EADDEBC7EA4AD684C2FCB0C1008CA92508C4B755E93401568145C5555C8B794E
+F9FE03CDD2D904FF6B3C4429188DE0ACA011BC44D0ADAC60939EEDBAB25AD69D
+48A5E171F88DC43B1511C6883DA9AEA734590F09FB58793D0BA23CC46DFE5FE8
+A9C82D1411002EC457793FE7DA76D29FB65F026587DB905A1EE651AF6E4F2122
+A8561A524984E0FA2FBDFEB7A8A4935DF29E126C1CF41ED66412FCDA7D07053F
+EEDB110E865CED746D2530704C3D906DA828873B6AF2FC2D9E9EFD835D71BEB4
+A0C889B6156AE539B48E0D8026F5A8FD0DEB71FF8EAFC66BEA2130B9005645C7
+6FCA01DE45783C2D7B75EE9A9A6A8F5BA5F1B13EBDAF2F246D701507DADB5518
+CA8E75918A1975617EDD5F5701AC7FDD1365F9408E3BA2171D4903A78D223BB8
+0CA0E842DDBBA3C6B41D2339A7C620692F10C4FA9E8C950AAC4E86607955BD81
+A4E3B0131984BEF21770B436B286B93456646004854BA2055C3DE31CDF212205
+883E2D4DDF58152F192E50B4663F0F9779B455C665ACD6F40E7948351BD9F78F
+24550832F18950ED308B402D5FC6327CFE094F1090871431A59C7238CF1AA562
+3A976BCD5808405E7BCC3DED691D332C9B279C849936CD65A6FEBCF58CC2311A
+054CBD1D630459B59071379C3865C3C6A14E22B5B0381F44372DF1DBC8727B1C
+59A733C294C4322E243223A986FB8D2BF832755B5CEED304E6B3699998B223E8
+E28EA70BEA1358C2CEB7AB07112D30B83197B263E56937CDD0F074EC29FAE7BC
+8D6A89133CE8F837D64B703BC40EB64F2DCC73C763A0D31F3C058B5E9443EEB7
+52874573C500ACAE072071AF89FB9C4F4641AECCD14F7315150E5947731C8963
+55403D9A4A92EFAAAC4F5F6E95B4751351C4177271712F85495397CCFCCEE992
+98E7DBADAE9D3C1F273AA78F75012CA5AA357DB035655B3D98ACC2988169E894
+C573D80D60010DFE08394A6D05932944E07BAF050AEC00E45E04A424C6C351C1
+511DB1E856616281570F6DB61D75078B2D1DB18629731358D8663C615782D63D
+E6D7D9464CD95D8B446E563D684D16914B0CA2978C473CB514A5A06D25522569
+9CD74C4E46C95DCA19C8AE79ECF576A677BBEE3510F93C4176A4B5F1A4F24E36
+E0C5CEB30DCED55B7B051C01AB5251CB839AC2E371944C169D9CA4AE4B91450C
+5503BFFCEBFE1AFE8574E2020D3DF2BC16BEDEEEB76C7FBE3FEF7F085BBF4BCF
+2513333E3A01DCA64322049010D1802D1E50B50E39768F960BA243AE4A79C12A
+54D8F7CB63476916E634273F76663E4496466DB6BC16CE9E74727C9EE9FE79FD
+B27EF3DF0E46EA9C028AA3FE5470E983BB251AC803FC07164644F385B6BA347F
+3FC80E540BB262BB5E0CA619CBED3C8A4311B9C2B0EB70DAAAB4DBD04CA642A9
+53FA5B77D48384A8FE1F706DAE7DC478145A2F97FE5075092149C536F32A83C8
+32DEB9CBF5177AB311222565F16AAC5109F31F7C84321824ED15CF558D65BCA4
+9A73C570753D325F081EE9A3A78AA2F18258C5DFB32739242C0297C185C22200
+34C6F979B51240A7B1A3326677929904B567550051B4D548F3AAA253111F7316
+D3C84FC22E64F65882773C7AC585041DFFE3A6A15F365D825FA0C43DE16DB215
+243E53975DFAB3C1FA30D6CB8B52B9C55FEF96526624D5D8807AA901B16293F3
+AE0C4E03E6E22ABD78342AF9837A380BB99B68ADF493C1FB18CC4B968D707AB7
+B744D296FFEB8F2178B7C47D94DEDEAA916AABF76FA32BC0B86E2526F66ECF17
+6FE4A289C2571DE0F86B9B44459726C41C6C648838F928A8E6FA682A43DEA7FC
+3C724137DAEBD60591A73E72F2A92373103808D3973501F08647028F83F2A9FF
+400344095BCEC1EDA8A93325FDD58769ECB58511436843AFC403B5ACA14B7F22
+AD9D64C888F1A8F4E2FAD374804A72E16C0DCC0F2F56B91B3908FAF52A2C6DAD
+EB9BF87C40FE29015B6E655F40FAC45FEE240C5DE731CF7B54C0F48027697146
+3A6FF6ADE84F6CC90E3799331799DA11AA92F445929BF4A95E9C5F4BD4D63CA1
+C84FE7BE3CDCA2ADF4DCEA99EBCD25D7724760516259D45DDC9D6CDF7E538128
+F3D92F8676AC2D0CFC3687AFB29E8BAE8671ADE209AECC9CED20037759EAB6AE
+42E1B41111C9BB92D422CD344E7CB85A7403788C7765AAFA62CBA09A5522A6A5
+0EBE06D0ACD23E77BEF1A15A9E99A4713E67E7C08467C6B2890EEE9AA1F0558F
+EC24065FBFB04573E13C52137EACC7A931791A5D5F675AB42E9B716DECB6308D
+EF96E59E36E8D40B99A1E6D9F2DA7F32C1E47091733341D89DD109FCA2AFD4B6
+2D65D6366EAFE4A5BB0891B9344557DB94F065B3CD7D75874AD92F24454C2B21
+C4D2600AAD92684996A07B4DBC73BF4A3A01620373202E31B7495DCA42DA4B50
+6464003C1431AF808D30E08C4AF67E5CAE26F78188000AA0E8C97151491BF1C4
+94B1CDD72126412E0673ACD9B9322C3EBAA2AA1D039EFB53BD2C708873BF77A4
+7C89B9A48EFAB9E55ABE4FBB6FE868A9B2D86F96A5DB527514C6361DEAB44B53
+BC93CE3D3546324D72B13FDCB33F519812C1D9D66ECC126F8C3724F4D194DCD6
+3FA6E6F06B2509FCEF85C6A80F9C2ADC3D15A9562D2A65C4D1392FF915679CA4
+36E048D8C93D540DFE0265952094E7E6C8CB33BDCD517247FB81D564670F3964
+E65AD1F253EC49752D8ABF2CE12B2425551E7F03D5AFF08A7AF854E99322B8AD
+4C2A300672CB3A06B668A11B752BBE824C07531EB46698EE6C6B65112CB77F0A
+FEFA9A531F51D29EE7F45E8D0C73ADA57B32099FE3F0DD59BB97BCEF2CBA4E84
+D892E8B6880397808D46E78E05F42AACF717A2DDEC317BE5E5FFCAEA963032AE
+515B76D34F880C049F3DF624FB85DAAFE31882A2D7CC9C29E7EF28E2AA4C46A2
+FE2B035FF8303879C436EA4A2BC67DF287FF0C3430E9566857F0CAF38CDFD955
+559249751A61BB9ABB4946A31881ADED4F938C6468318A97B9F1D60A59C996C9
+C8154F002185DDE6063E67449A6E0A9D9155EF95A7EEC84568EC8DEC4E3E9D6D
+5E3E37F01FA5CD500715E0777C0B8FC6940C4BB4E6BE1CBFF8D7F461CCEF1641
+9FBBE9EF79801121137F5336350701ECC4A2ED838874BA412944545B2395C1CC
+6873816AFAB5F4B71E978EBA442C309799F81E66312BD6585FDF500075CCD649
+DA023880E008D9E046660FEE0C93B5FF18722BDF423C5D820DCE694C6803B83B
+101E61412650B945C63348D5053C3F97B6D38821A262600A8231E151718268DE
+4DCB22329C49DF12D9135872A03CD900DAF07D8F3A396A39FC9A5FD04C8AD26D
+4A41211D509B31D9032418D372A90CA0AF2E16DB8996E659CF103EC725BC4820
+9ACFB3C8D5155D87A2AFCE311BA6A18F95E37A9218BB5A45620FA20FD485FBC6
+DFBA5A3FA163833657572CC295C5BE868D584046555006623FAACB6602F612B5
+E6DA8CF67C8C7664992B8062C25E877B578194A33F29039ABD44B3DF14980E77
+18F51B2AC035CF9CC17F6C6C3D75D2FF145B14CBC4F9A551D5050B7E52C855E7
+B5D02F32D2807518958AF87E7380B6968C51A54C735000F02DD66B2E837EE0FD
+BAD9D9603E517B55B8A9765B5C6301040A83E56AE013786CB760C98DB9537966
+8D9AE205EE938ACEAE707397C3BE2980B090C3B50C814A247F82B3267FD63506
+A21E253CA1FE7DA323C9AEE3F8BFAB2D9DF4A01F18DD530E3C618C889B219610
+E313775F33870ED4791EAFA21B649142534100060E28CA081A2391F1458F3ECD
+CAB0BB41419C90D0C9CA95C5A4631A01DF76F52DDE04C6570F22578D556AB841
+A38FFC5A97300AAAB48177442755D76247F84BF57284B05E5D8DE15D0F69D689
+0264FCC502E5A8D8FC2DE3F7823A0363F1BDEC4B694282D0850CCCBFFD84F4AC
+06CEB968973837652E674C1F953725039933EB7988BA490D4D8567EE3BAE7BD0
+21CC586C3CDD38F79B0A3A94FB81FACD7D9ED04B4007345A4C7A47860E38F965
+8CB23565121D1E7A0D0F3F3B7DA86BC3BDF2B4CF412BEBE667E6C427F3F86E63
+DCF7920FECF73F2E421E54F6F0A8E84A8BDE2D0B9C5E441F4C428CE8622360CF
+6D319385106B2590E0D1A8B6C56DFDE8874A3F30D6DC25C1ECB02356D488BAA8
+C2BA0E8CFF8EF6DA75E2EEA6D27E822F511BBA288F7AB46B3C519FA75B676B55
+72E553764D23EC460CB17BAB327FACE33450E14D8329F2339600F0366869153A
+D775A0F12471286F485A65054859B96A00723E1C451C6A8A05C88B32D10AB013
+94D834F675EE8DE2A26910F924583509BBAB4B1DCC5B1FC8781D80E8CF024EAE
+BED6FE0FBBE088F73987477FCE10B4055C28199A91BFDCE080B5F52A1DD5EF9E
+8506B78DE1DAAA88DCDE13C048AAC003735970A5A74E469EA21D2078FF721966
+FEC29EB8D667540184E3CE37797EBA575CFE7F484C71F16D84ACFCC11A769250
+585B7E825E70BC5AF10B9DA5D4E0D7661B486DE2B1357259D473A57598E257B3
+993F51D3FC6E6EEB9F4792150179796020914877D26AEB07C527CAA4468AC50B
+56D8BF2F137F59E55AF7E778DB993EA55FF446CEE4E8E5D87852F211CC342557
+D2F3647F6BC423260E2AC6398D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTI10
+%!PS-AdobeFont-1.0: CMTI10 003.002
+%%Title: CMTI10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTI10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup
+/UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTI10 def
+/FontBBox {-35 -250 1124 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTI10.) readonly def
+/FullName (CMTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 12 /fi put
+dup 45 /hyphen put
+dup 97 /a put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 103 /g put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 118 /v put
+dup 120 /x put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E
+2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A
+EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD
+8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF
+CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2
+7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC
+32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09
+482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF
+118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381
+1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC
+C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA
+8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4
+61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20
+C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504
+3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70
+9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A
+D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0
+125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8
+34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A
+30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9
+39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49
+9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184
+2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF
+0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348
+3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D
+9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757
+802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28
+FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0
+98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9
+5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF
+AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD
+A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93
+5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815
+DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37
+4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC
+8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B
+A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362
+E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F
+42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96
+3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59
+A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F
+7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4
+49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428
+D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C
+0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955
+CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485
+1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB
+8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388
+6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468
+83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29
+60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284
+42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2
+1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A
+21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA
+206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9
+D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7
+7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B
+55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4
+6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762
+4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392
+871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E
+9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645
+DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5
+41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8
+2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F
+220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001
+A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D
+981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F
+337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8
+139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B
+1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC
+100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A
+1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905
+F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB
+72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7
+A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D
+310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928
+7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989
+1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2
+8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33
+80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610
+3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C
+C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996
+4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB
+865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B
+301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48
+3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9
+1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B
+E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29
+0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0
+30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E
+2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0
+C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89
+14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A
+44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC
+CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654
+DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34
+9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87
+4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3
+2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676
+21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26
+47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4
+F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9
+D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F
+03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5
+886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8
+352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD
+9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0
+9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3
+92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F
+821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93
+3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0
+47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0
+F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B
+9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1
+AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71
+C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978
+B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED
+D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD
+F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E
+81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038
+970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C
+6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7
+97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668
+A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE
+AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594
+971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96
+514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7
+8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C
+392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170
+3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F
+464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE
+C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E
+F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053
+911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6
+261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED
+D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA
+147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D
+C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516
+C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB
+61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD
+FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3
+F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C
+2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C
+7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193
+11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C
+9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66
+C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3
+1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692
+5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5
+6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0
+EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E
+F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23
+AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D
+8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94
+376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6
+B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B
+02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56
+4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF
+9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD
+751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198
+3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A
+40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962
+2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360
+D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A
+0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E
+8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946
+AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510
+6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B
+CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E
+DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D
+098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337
+900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B
+41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149
+7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA
+2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC
+A91885E7410F56F60C29AB8B417E2D6092F8BB70A2DD5DEDD4BA1077D7CC62FD
+EA43428C6F79C332342E15F75B08A1ED360B3511F823E75AD49BA7AE63B19238
+2AFE8FAC2715E2FDC895E95036D23127557837506A3B542B0E4651CE2B89C252
+31EE8ADC26E2C04E8E30A9CA12F066CE01953BE7867171FF6C7E834742C36C3B
+58E74E4B482CB85FD4D24DB03D753F260A585D552CDC9E1941446F2F5B45FF24
+2DA4932B973139F328E7E92828B900BFD398B6F41DAA0D6861C66AA7F5E3299C
+87A5925CE0E0F9E09AAE0792954A1F2C0AAA8288DEEFFE579E38A3CE8A943EB4
+55322A87C1634074EBEC25F724DC1BCC1BC10458CA6C4395659B0DB6B612C151
+557CC669D8DC37769E59A5AC6BF061C79FEE265DBB59520EB8FFEA273601D1E8
+2984B8AE31AE343F37D03E2BF97DC48AFE50BB6138C7B9F9B5E28672A37BD8F5
+8F8C98DC43DB22C6537028798198E2D3B0453ED72487267D653DD50F1BBBDA92
+833A987A95FC1F275B90B581B4BB62B6863A4CFAE37F715EDF3EA5A33679FEB6
+4847ABB4B3D170C275B9F1AC3156D731198DACE0B051674E85B758500AC9FBEE
+ECC75EBBD85F8D62AAA328FB09C6526F853077AEF7EFBFC2B6A29D6D508B1E19
+EAFA4C67EEE44045B9F15B9762B3DDF5CE5C18B23A5C2F73A1F6DF7F8679AB78
+843AA41FD2A7DC02B45B729EB76C66A89F5F76E5C4A0C0563B1EC5E75D72EE35
+A7F1FC89216B60D82F6F2B8DBE85E4FF4D63712C689E696F60B52AB622C2A4F9
+37C380775EDB72638D3F81F61D8D74C76D813DDFFF35ABD9A502F2BC7FF65754
+2A8660A5A53E0CDC2E8A95B6E33CA153EB711DC796D313C8183D707D3F0E3EE8
+BA65E0FCE3F1C07F3D93F77056688B5496AE35A6BA0B59619DE78640A8C3F7D9
+7DC5E94894E1E63A7D80600B945B1CCA50F1B85F57673C6CE09EFC4E229D4635
+48AB466118D273BAF7C1B52A067A88C00EBFA7FCB378F1575BC0145F294E6F7F
+8007602C6560476FA20BDB91831B22404DB1C4C167594B1216C25226D262FEC6
+F5D0DBAC4B8D743C669CFF2068CB9BCD2DAE8CD6EE1B33BBF7514C4E5EA79D46
+11AAEEA72B791C22A1822E686F3858E95A37D9CEF904EDEC7EBFB0E60995CF64
+57CF0EAAE6D4925126349DE06E101868BED82BB51E911852E6780772912570AF
+CD5690C6DA70110DD9903BAA3BAD581D206571D1E57712C75D112254C7A3DC8C
+892B66CA346EE682E7D910343C1CCD07465D9E49489839BEDA6174FB2E0DB935
+2D2CBA6B67ADDA1BAA6A51690A10C819692C9BD35BDC689F9DEFEA78BFE79C47
+C9CCFB3D04D20F1D3E0B73498FC0BDC50A3BA6DDB3FAB9458803BB26487C1397
+511717CA3493A7590E27B34C2E2E1BE2ED884CAFD5F7C185CD6EDA68951673D6
+384E6CD12944F86D178E73C8D78D9048A5B1E2FCB489E723F8178F842B362BC9
+F3E4D511B369670908B2C8087AA29F8B592B8AF7018311C0F12A8D45A3625096
+D4C88B19890571C60821F38310685F8DEE7A7A5D209265986F92AAF11143DC85
+F435BC210621851001B6A402E3A07D0F204A3B0D75DA3CD7FF6637D1F434B962
+F404DB3C6BC318EF517AA0836A975C5196976250B5D6B21DF528FB47181F5279
+E1EEBBA0F344D7EABE71904B5C1DB0FD07694C469085D50DF4990E294334E785
+5E5BCC4ADCD38685147CE535B23F3027AAC01A0D65AC751D9CA289B4A8906A64
+165427976FE6FD699442196B0C247C960C9086AB2E440885D2C32FFC5FC7105F
+6C40A76A1968AADBBAD6F3C21FBC076F4F67DE62E1CECD38BE03720FFA886743
+846FFD2005F85371FFB9C962AE2D88586DC9DA2F98996DF8572551C3D49E1ED4
+41248FA76E07B2A5CB9C3451247F60C7AA164ED895CD6290427E828A7FB72F71
+7CC249C92A012C0FE99FC07EE7E084E190CCCB95E66A39EAFA7934598C69F04C
+68B2C68DF99ADB347AB05F1905B8704A51FBF9471FB20CCD3CC87EF9FD75DDDE
+125EA68997DDE4174DFA0ADA2664E7209E4EA1B460CBDFA79D033D33FA9C5075
+DB424689F927F06ADB87DF0C3F4600ADC9CDB197E41430047247E7645A0AAFFE
+750AA1A154498C0B5371ADB099C1E273DE2E367DDE7ADEC2CAF9406A67585AB0
+D39F051BC556A8E569AB9EA4E69557A1DFCB8CD459403A616821AC61E35DE1E9
+2673435E5969EE48F3B9F9777E5F70C682FB7C10E6E7FAC5F5732C9EC2DEFD5F
+9A28572ACC62C108861AB22894979195B88E6A08A533629295A58643F854BC9E
+082F9073AC94EE08DC1CFC626DE4D341D7994178E708D4D8226897B54CC2B4DE
+B37D5BEDC430404177977EEEFD7201713AC45FE927D4FBA0F2613A2FBCF890C1
+908E1DBCCD277E78E42363374E103BBD6C3DAD925A9422469648B9D8BE7391F6
+B448994EA40AF3A3EA7E6E938D0F93B9EBB4E09B5D2E8D9ABF1F4AAEE8A0A304
+EDBA6DF569ECD449FF362660B11DE8A13A71C6C8186273C7417C4572DDD8B993
+C96289B16223B271D026929B2CB9D3AB7A3511F09C6F303A7006705482E9AEF4
+FC76BC1B1FD42095857751315F5B06701E774FF08920342667E99EBBF5A19210
+9AAEDC8033E06007AA89BEFA5A1616095A8E90C999BC3EB266879EDE7D1218F1
+3CB238D180C463AAF853E315CA564247B6E029D8200B9DB7B13EAE09264A5DD1
+4A080EAEDA74C7FD21BB208FD8EBEC1D650C0AE392C67D65C1773A68F2CA313C
+15FE2E4A0B6E7DA9CE391BF6D854431F0EEB550A818B6B95EFE6F72504AF5CE9
+73DC8E3326E2E57F4031688F10D1C272D41AB40B7EBA371ED357E67C31DBFDA0
+B8412EDBFBC2B6F26FD7331BC965DDFB1A4A17B72BB94338283A8D9139B9816F
+D13C12E07B69E9FBD0C5FA9B1DAC2E51324695102DAAFA746D969E5F64980707
+228DA50443B2917FF685F5872D782CA265734036B7A7D75588C638AB9687D34D
+D0221C0B3EB0A8DFE91598F07CE2C35E1C4E01E26D0358841EDADA02D3844B26
+C39D492C480244124F422EFE57D38DD912EC98582F05C74B4ED83BE81C363376
+B816F23D10C5C8CA831E1351F3BF914B07F638FA5712A1E05E3B751E756296C9
+2FF074FFC22CFC383804A92057155C4E43FA4990734C83257E810F3C2A62F42C
+B5328A41BE80C23F49479EF84BA8D13BF3A45EC435781B9480659A4D58041190
+3DA62807723CDF1EE71EFA22BB67887DA88EB20DDC0D1A36A75C06BBA651DE67
+651BB57824E4F5264DEAA04927D2A29730B7293E08FE3FAE5FF493EDDC0F2232
+9476F3CA26707E823808329390EC9D8913AAC2D8DF2A6B5673E1A0F4E7E67C9A
+D006E7DD429BCC550DF7323DAB781F82A837C83C80DDB8970CE699153576ABD7
+4BA82C753C82F19E30B853DD086DB119C48ADA56C39352E3C6B1FA232390BA3D
+02482A6B845C324593FF845A572E1F026941AE3DDBFF83E8230FD5214B631EDC
+69E178C52B5FB4BFF0C89B756E759147596D038850F0A468B20163093F8BADE8
+FB0F718C66D82C41A29EBEC417DE0B72C4F8E746EEEA33F2BFC0063E2514456D
+6EC34CA68E1C667D47FB582C3A259AF4D0859C68AAC0E5F89CC91A1F508CE835
+E29B7860E6484F8B0D75C1635A32FDE55F119C8222A5D00D9C45930C9F5C97BE
+A28EFB48BEF95ABD910E66CBC4C34AF6299A84CA55F780A013E8B3DBC4E57F2A
+1EEE358D24775DEC537CEE09212EB3208E497330427706696335F03BA50BD193
+E022E668C6602731D51102FB7BBBF43A630BC428FCE711882EFE6E7739DC10BB
+63B60272DE6FE4841F7728EA80F871F1648E3478DA71BF29F66FC3565AC3C632
+AEDBCCDDA048A807FCB6CC497A1CA11C6E802C1ABEC3BD80E116A648531484F1
+722E3EDA1EAF6DFF1D3CBB1759C4AEF33A300E7770B8A24F7EAD130B31A0AEF6
+26C369A8DDD409A1343BB66DB2B2F7882FD168C008D5721B3EF2DE8B56EA35D9
+2E456FCEF55927D78D20A99B96EE83A25BAD4DB679511BF4E27E552F871612C9
+6B8C2D5BAF77B648C654AE0D9E6402998E07906B58984B94987216AB9EDB2699
+E0EDFB6AD08E25F2575E1B93157F2F6A0D215ADCE1D21AFB6E4DCA3635E2D4B7
+825A4EAF8568D1A2ED4D6E8C9C6DBFC08D259001EEA83D3ED9A416435A79B56B
+3F7B0AE9A5781694E22FC68152BB68409B61B9A59CC8D58CE1EA9C0DBB329554
+44E4D85F3A4BFCF8AD90771A203FEBD6EE00D118EA5833C96F1BC0CAABFE69FB
+0BCC46E7A3280E16976D86722168F695FB6422734512954A97AA0BA8AF8155ED
+2434100023E1FFCC504AFFEF6C2F70B1F2506E53648271DDCB82754F9775C323
+B77590E86374A9B01FD57FBDD3F3BF8D61CACB66909E6C95C81BA7B083913635
+30C7C0BB9EB7310F23D2991BC6D5CFA9A35AAD04B14CC5540A16C9BE0094A8DB
+058B1DC4D5744C8F89257A04B1D8544C1405D8FA71A780E92D767A170C269668
+202ABE3126680D93532C2EB8EC3A140D604C79906C626AB0185669AF9A425CAA
+465C3DD47810CBA44AD7E2BFCA99FCDA98EB641608032051AC5CC30329C28536
+F5637FC7E371BEFE11320FDB5B6530E513CB14122289CEFA88A97733E4F888D1
+23030714F61091B5ADFFE84E3505E32C347EE1D624AE666E8BC6F416F78CF6F5
+96FE5D12F574F8114C71A10596847A8BA0B03DEDB6AC72F218129B223F422908
+138A916F2605142D5EFF5F4BDA5627E59DAAE09A674B7D5BCECDD63BF5E7C119
+410A36161335A18A93891CABC830833D1FAC47B7A85BC9EA27BCE6F727E7D35B
+348918F512C3BF7769C185A277BA930170AAAC6708F04F00C47251D2679DB455
+F9BB928838F148C1AFEA1C56AA779C54948B9DC0E827706834D9469825FEB644
+6AF843E71E44D0380311A3A6D9B7543A6A24B475BEB483D63BAC1B9421211570
+FF9BEA65E81FDAAF0E00A1555B0A69C8355143DA9B547BD1AED32120C58AFA09
+AC34163ACFBFE0E00D57A5ECC73E522AF84A2EE0C9655C6AE6E67BF4473CD8A7
+E7F95AB4EEB4AF83ADF597547CDE2426F200FB8824E2A826356096B962F31B98
+AB1B27FD681C1F67EC07FFEE7240F704E925E62749E2D2C7CD85C61F14B8A03A
+666339793934155EB270C0C7B58AB8DF6C52B72038257BE0CDDD9B2A484DC97E
+862C67F7AEE273480192980A5BCD8CCDDB87CBED18899B09B0A485FB4A1FB061
+79A918589500995F12211C3E636FD1A7F6F746A231E42C80152EE4E2C1E65FC4
+4075CD6B10A7183C711573498FC034C82A5B66EED4F921646F8A9AC989F7C655
+BC0C74049D81A3AA11FFC20CD823BBBEB6E58FED16B9AC143EF2E2981BCB5605
+71C71C8BE4112AF04B3D2D9C46F948C8E3862AAF882871C3A05CF720DB14ABBD
+B0B2A5C41E35DA879B3109E31226C317CE405C2186F54D710AA503B8EC76BE1D
+BABDC05B316D5382568D4938C7D462B3009A648BDC22C640CE6E891375DC26F2
+A7B36C4F4DBF909B2858AD23DB71783204AFA075488322462A92F0E6739E0A28
+486BD3BC19B3665275ABE63BA5B31936B0097A08717141505568962BBD257511
+B714C52EE8CA7A37B3C0322B7F5A5690BE2FB23AA9FB322107CA58B4CA4032BD
+2026815102CD4688655FACF599739F8C10EE5890AB65B167C5FC0C8F855EF2E5
+0B3F95EDE6BED4CC277CBFD004B7D13734F605E1B929204850434638F7244B70
+176FDEDEEED09D16703108DF3041687BE3EF06ECC78CA7BD028A24676753F889
+32E2B027250023B80E514BCE566E9CAB8F8B516544EED082741972528E2D9D94
+29D8F03449066FA4412350A5549767945AF5E678BCBE884532DA8C66A612465F
+4E2D1CA7353C2F7E0418E1C989026583844702D344900E05FB45FED3401FBED1
+F63830D700F1EC2F4AED4EF8D077EB9903AE3E1AEC126EF9A03AC25D5FB37CD1
+8CAD9A29B803EE39CD78AEA670E2304EFDF0B9E52537DF6BDDD44022F0C00895
+6EDCCFCCD3430853617597EFDC25E915E4F977F9910D640FB088085A96E7FB59
+3570E01A50A7D4903E01C398B5F461BF23638812C245AAE2F5DE500FD2D44E57
+336BDD4B538C081BBFDEE78D8FC75A19F204A15C2E18BBE879BEC3F675663D3B
+73124D4FE6BB1AA1E6E5D6FAB878B479523CC51E4E734AA090DC70DF610CE359
+8357A2C4842AEC553871063A9127C952AC9A64FE3891CD4D0879B41CAAA2FF8B
+0F4336BE27DC0C179FF91D867FAB89D05E382EC85C2DD1E1BFB4B66C6EF9AB3A
+7A7FA0285EF3B67A1249BBB1493AAA17E355690753D2978D937FA5373D195D9C
+9F2A3F7F6F71BB04BC47EFC7D24F11DAAFA20FEBBE5098976E8C002629C7A5D0
+4BC339B70105CEF46994F8780AB84FD47367F996418E00BE7002
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.0: CMMI10 003.002
+%%Title: CMMI10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup
+/UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMMI10 def
+/FontBBox {-32 -250 1048 750 }readonly def
+/PaintType 0 def
+/FontInfo 10 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI10.) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/ascent 750 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 58 /period put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5
+45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4
+7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7
+72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E
+BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89
+974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674
+11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2
+1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C
+7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B
+0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085
+EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37
+404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133
+78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF
+A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE
+88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4
+C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC
+BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88
+98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760
+E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44
+143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3
+981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490
+88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285
+4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683
+FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F
+347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F
+FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB
+C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04
+B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733
+F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA
+29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66
+36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12
+048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0
+80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C
+9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B
+75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E
+4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC
+74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B
+D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355
+E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097
+EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D
+543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883
+710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6
+EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F
+7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93
+03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2
+01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89
+500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F
+F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208
+AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE
+1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915
+85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C
+4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1
+6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F
+55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18
+085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02
+BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951
+2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D
+CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E
+BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E
+D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1
+991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125
+6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754
+E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80
+E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1
+B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3
+4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65
+1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB
+B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7
+8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA
+FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6
+AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E
+BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051
+E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD
+38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3
+7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751
+2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27
+DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D
+22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6
+8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB
+44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90
+D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A
+42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF
+C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E
+0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE
+66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6
+E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1
+6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E
+1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10
+B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B
+897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E
+EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40
+A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3
+F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA
+A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126
+2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6
+51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3
+598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F
+87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE
+178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6
+4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78
+7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6
+AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6
+3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379
+337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547
+C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5
+DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA
+7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD
+6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC
+98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355
+821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4
+C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886
+7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6
+B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16
+A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325
+23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF
+C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3
+969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10
+3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B
+9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725
+1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239
+B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966
+95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7
+FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE
+44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986
+FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4
+E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA
+633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D
+6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F
+FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD
+375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2
+6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7
+EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C
+E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D
+F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156
+DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891
+D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538
+D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4
+9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B
+9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6
+B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0
+D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF
+8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93
+FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26
+B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F
+00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50
+909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49
+5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF
+7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA
+BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0
+C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1
+BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37
+BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D
+4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075
+94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1
+F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9
+E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA
+92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0
+63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A
+CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271
+B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9
+5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E
+86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0
+AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180
+3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC
+35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD
+155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580
+AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255
+E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F
+226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496
+9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B
+8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B
+919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE
+A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7
+9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0
+523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7
+88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D
+2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF
+AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66
+B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22
+CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744
+3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8
+404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84
+262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953
+084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341
+E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMMI12
+%!PS-AdobeFont-1.0: CMMI12 003.002
+%%Title: CMMI12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup
+/UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMMI12 def
+/FontBBox {-31 -250 1026 750 }readonly def
+/PaintType 0 def
+/FontInfo 10 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI12.) readonly def
+/FullName (CMMI12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/ascent 750 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 58 /period put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5
+45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4
+7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7
+72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E
+BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89
+974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674
+11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE
+882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3
+2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A
+7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541
+0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69
+987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7
+609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC
+182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A
+CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A
+1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE
+C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D
+3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6
+D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E
+E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200
+761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24
+8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F
+68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D
+10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4
+262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6
+922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16
+56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26
+32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA
+7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460
+7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A
+46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD
+754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF
+88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F
+CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A
+7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760
+8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0
+BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B
+CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25
+8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B
+D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300
+135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A
+C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812
+1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86
+07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39
+14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D
+7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D
+2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D
+639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3
+D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F
+90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948
+10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E
+1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E
+8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC
+D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9
+1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33
+9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875
+EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE
+DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3
+60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8
+FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D
+203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608
+FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09
+DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F
+2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D
+244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077
+31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B
+724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8
+F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7
+D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA
+AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907
+CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF
+01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D
+CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA
+287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605
+8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9
+9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1
+6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5
+7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C
+192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA
+AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4
+A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9
+50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67
+A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912
+3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF
+CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6
+5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96
+8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE
+084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7
+92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2
+AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27
+97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF
+92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5
+7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824
+5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199
+13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76
+6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1
+5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5
+6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83
+F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E
+A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4
+7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A
+9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817
+E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962
+AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD
+F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8
+0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003
+1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31
+7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E
+38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8
+5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F
+3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B
+B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85
+15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B
+AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674
+6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6
+CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322
+EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82
+A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D
+806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4
+461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1
+4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361
+9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C
+172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6
+69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E
+ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690
+356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0
+E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78
+7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C
+B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A
+31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF
+EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7
+98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30
+C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61
+AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208
+E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900
+76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40
+8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573
+CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7
+761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A
+2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138
+89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60
+D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF
+C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485
+D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8
+B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39
+AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F
+D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3
+866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD
+207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73
+756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7
+60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD
+A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A
+1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4
+A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048
+C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3
+03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321
+1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B
+97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE
+D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8
+4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF
+94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97
+201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7
+9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000
+CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7
+29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939
+4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED
+66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31
+14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53
+84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74
+6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12
+49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C
+224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5
+5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4
+A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498
+1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D
+5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6
+40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C
+E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B
+C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD
+CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D
+2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE
+710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45
+FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8
+FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736
+5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.0: CMSY10 003.002
+%%Title: CMSY10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup
+/UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSY10 def
+/FontBBox {-29 -960 1116 775 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY10.) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /minus put
+dup 13 /circlecopyrt put
+dup 15 /bullet put
+dup 33 /arrowright put
+dup 55 /mapsto put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0
+7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81
+DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91
+511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6
+1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD
+028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86
+1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4
+3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021
+91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2
+E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A
+11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97
+C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857
+D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20
+B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3
+93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F
+10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D
+7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF
+B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B
+491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB
+F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6
+019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6
+915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36
+356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0
+5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D
+9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64
+3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1
+FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252
+720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5
+D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726
+BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5
+7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377
+DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56
+AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7
+A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E
+0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743
+AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18
+CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023
+0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD
+5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B
+5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F
+E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB
+54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809
+E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F
+A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906
+4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378
+4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4
+038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4
+B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308
+5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC
+B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837
+A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD
+2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D
+CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246
+455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE
+FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03
+16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C
+16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F
+483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352
+67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2
+3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472
+1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770
+93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA
+051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B
+8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4
+8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436
+6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0
+06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7
+84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0
+D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6
+DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB
+0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD
+8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC
+C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34
+754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406
+1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05
+CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523
+1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F
+153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02
+905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718
+617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2
+8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A
+98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278
+53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B
+888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D
+052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A
+CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501
+A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F
+07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56
+B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672
+10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2
+CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D
+3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12
+D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F
+849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16
+648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE
+84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA
+2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD
+2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204
+9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0
+B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B
+D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7
+135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE
+EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939
+C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782
+7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0
+4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2
+9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171
+050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486
+3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271
+C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8
+843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342
+CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B
+B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50
+3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175
+19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946
+FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0
+17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6
+8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B
+CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003
+F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194
+1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E
+4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194
+2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929
+9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593
+E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB
+8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB
+BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027
+04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5
+C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404
+ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C
+4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909
+84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6
+C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6
+09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777
+D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503
+56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF
+035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB
+FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333
+CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663
+B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A
+F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD
+CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B
+0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C
+B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9
+33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6
+4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D
+F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E
+2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A
+CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5
+88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37
+17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0
+55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A
+A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50
+2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3
+406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8
+AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B
+60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388
+C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6
+5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50
+822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E
+94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02
+D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA
+343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE
+894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5
+DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327
+DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F
+8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324
+A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA
+DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270
+E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947
+DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC
+4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653
+5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1
+02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8
+88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B15A0
+657F5ED27D204449A841ED19E01432CFFE928E921321113780D036D34F2797DE
+D4459CFD15BB117B5C9745EF3CD2B296D91FAD48C80B136D94476967E255F808
+AD2B5D522ADEC64176833756510391815A1D4A8DA1D0AEE7CAD36A1D161889F2
+3347D5B6BC503300FDDD48F594F391D5FB42C42113C538E707C16EE24A3F375E
+7C506E8F49CE50FF9DEF3B4A4C1BEB3848EAA3477349833BA22D2A9012287D8B
+A8C4CB4307A1188ACC0E6E9338E1559BE5FAFF381BD82A6C71C267409468B3C0
+2C1A29F4281D565836EAE57F680490FEA4A952FF64C8CD11C377C294DCD1EC25
+CEFB2B6DCE959D0208F85B6E32E9B44FD455F9B134A5306D95EA29F37BB8B86D
+9E592159338E1293F449380E13C21AE42E6D6952083BFD432F72DFB7B6F9257F
+5784C683A6E9ACD72334E0EA8060A81E14EE32300055040E24B49810DFA1468D
+A962DE1D1AEE09B49109257898F155A63A83D514996DCD2F96BC0F52796267DD
+DA6229F5E9024F78B02154C27EFDB9B6E09B131C9E9E4DB41A0FAEDD93A05512
+A919AC8869C09FC929682B51174D816B85DADE28C00F6391429BA98327848AA8
+C52FEFEBB2296BB78F06BC1950A8E0405EDBA2D8C51F1F607E73F5A2173E5469
+BEB7918844D450B652DCFBC4C0D0C4AC2AD678B7165AA8F053B717C1D417ECF2
+3A2909E864E503059135C05EA8F7CF185DA45CE17FA40B4076ABDD8B167B6F02
+3C8962F09CE07257495ECE5357F755C48E49F4385DB5CE4FBACA3AD4D18E39B8
+F7057F4BF581ED26ADAEE218CE130B0CCCA0C7B273E51D7F314F53EC8EC84100
+8292750A37A4D4551A5C2A65D2382DB0941409D83FE1005752BAD1980307F153
+BD7C92FC12AEBC7C04839FD7F01BC85F0880DB22FE524204FB924445B6B3DF6E
+1B657353086539BF4E60909524FFC4CCFBC8E0139F65F53ACF3EEC572C673CD0
+64AB1C29253049B26888A322E0FFCF7DF8871F701CAF5BE7B509E090C43B4755
+B100C929D5A8A4B9646E8EB39F2E705006AD23EEC58E0E1CD0C18A346D8ED66B
+D0D2E215F637D25EC4F05C449FF8E25250211635C9D5121EE0D51E712B7A8699
+19E96ED8451ECBE97A7197337C65CCB44FA2522EF6735BFB60CD053EFAC10381
+C70053C2DB3B6DB8DAD720DA6DA25069131FD9759EC2182D1B649AE67FE4181D
+B223BA15F5FEB0BBA498F9993F6A9C8DB9088DFACF064ECCB56FC4951EC8F9
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMSL10
+%!PS-AdobeFont-1.0: CMSL10 003.002
+%%Title: CMSL10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSL10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup
+/UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSL10 def
+/FontBBox {-62 -250 1123 750 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSL10.) readonly def
+/FullName (CMSL10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -9.46 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 11 /ff put
+dup 12 /fi put
+dup 14 /ffi put
+dup 36 /dollar put
+dup 45 /hyphen put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D
+DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384
+7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0
+C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814
+25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5
+7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581
+299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8
+80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB
+5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584
+8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894
+5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F
+F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B
+966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E
+A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5
+9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4
+A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD
+94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A
+DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669
+E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929
+5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23
+8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5
+155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E
+4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038
+44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D
+8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0
+04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC
+A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F
+F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07
+111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344
+8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C
+567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728
+C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214
+C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094
+51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01
+66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58
+9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6
+2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4
+4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7
+5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256
+0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9
+233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D
+BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF
+62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086
+B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88
+DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0
+C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA
+CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC
+38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D
+FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24
+303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2
+8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1
+8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2
+C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53
+9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363
+4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29
+03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212
+93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8
+91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0
+FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27
+06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179
+95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954
+9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2
+7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972
+6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31
+5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262
+3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91
+CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1
+797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0
+DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112
+CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19
+8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51
+04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757
+78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE
+730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F
+021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79
+CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57
+90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD
+97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0
+F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9
+4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394
+40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7
+3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B
+362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7
+DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136
+7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233
+04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8
+DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B
+C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049
+B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F
+9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229
+3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE
+D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2
+B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571
+74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A
+44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5
+A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8
+3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1
+BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64
+01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4
+6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD
+DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A
+CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C
+683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D
+87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF
+550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6
+2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB
+17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB
+3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E
+F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F
+B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B
+1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514
+61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7
+124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2
+ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746
+0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246
+D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933
+F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2
+BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003
+75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A
+8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3
+B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E
+7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD
+F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F
+F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7
+322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E
+523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017
+6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77
+66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633
+B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182
+5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1
+093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838
+B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72
+6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394
+EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF
+A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966
+8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE
+144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0
+7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F
+172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9
+254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6
+5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71
+011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460
+B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC
+0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E
+3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB
+E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E
+993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E
+0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9
+18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0
+ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F
+CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228
+1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3
+A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A
+6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B
+BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20
+DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323
+1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761
+93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082
+E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62
+4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB
+F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526
+4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1
+361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36
+95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C
+AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0
+50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81
+88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932
+AB7916D44EC2210CB941B1455867E510E9D8A0B83CB645BCABDCDBFCD51A4E12
+60CFFEF0CCA548F654037D01CD631FC4E1F97B4F65DA9AE79D99F13A726E93DC
+BBB027B7D175FD17A704C4668F6F8428262959DACA9F8C687C923CFA053804C9
+9B2005FA7E0F07D81E52A9A37AD5CEBA8EA63929093ED0DAB9F7C99C82A50E6C
+6440387049A0C359218F5268C9A28F581783BB9D29E08772D7252FAFA6739687
+22570150178893C418531769CB3D96F799BF1C6415820F96B6EFAB5344E82796
+38A0DF66609F5EA332C1065274EC93027D264B84B52AA8AD82E13E2A41AED340
+B240D1888CB89FBB748FD10B214773D466A44AA2AF44371CA8B9A4450DA76EDC
+0167B4015A270B9983B89EFFA023A3DFFDE181B90C51D70557B0844362B0652A
+6345C6EC83DFEFE099455232455943718297254186940D6305C96EE2B9E3E7C9
+A622D25E0471AC31A8ED3AF8897BD19E322CFC3BD3860D8A0634081D9AF53A9D
+84F4ED39D8127CBCAF9AD48E9CBD10A67A2CD0CF93D61B05DA38E98D5DD8A805
+FB9774EDA40EA0BB44E1795C5826022F3D20F30569D86C3FA13E1E4024BDE38D
+4D3D1BA8B063146DD129739FAB9FBEF85236DAEBB462BD424F7E97B2310556B6
+5B13C70CD7423B6DD024E053FB603801A398761BC030C7889ED6D24A1F05C48A
+D5239EDC8BE23B4883D7312096DAA334A3F3E1567B92F3766867E9910C8F685C
+9DD1FCE797555BEEC6C8D2E3FD919B81A951EF6D6C42F88844BB8714EA87AD0D
+0DECBF323B05DDB409AC534A5087E7C18A839CDCE0A6AAAA79B8E35C68F21375
+9A2A80C092141FDAC6C5ACC84B5F31D70C35B4708A664F06AC8C7EDF9BCB2421
+21ED066E07B1070694AD4C976CE867F5C953E2740CA3E3B0941E270676C7C892
+52C991B67220CA89F7E8417E8F718666A1744E7A5777E370EE148A7853DBB174
+21A597F2FCBC7B6D45D3D56B997568AF83FBB42CAADC7AD151EBA769D11ADB0A
+CB6D59F82F70AA275D606D1BF29CB10EEFD1FA9FC35B97A1EAC17B519BCFBB64
+A6FA812023BFDA1E346A73A678A2F1EC7BF4AE861F420746AB464C05758268AE
+A8CC1D1484D908C8A610F58D1B46A641F5482D0C8B70169EB6711E8DDD7E3B8C
+589483F94B5E6657B8EF887C36E503EC83BA302F11473D6DB4904546EC5CB9B5
+4DBC948F26C63B41A493073EA3B9F1184D6901F0308B4A6996F91FC314FFA54C
+921F102839D5D4530502E3EFD9F1B0F4B557D19DDA4EFF711262A15FCFF137BB
+16BD2253F1E9AE6FFF3090AB3259FBBEBA165B0081EFC32EAA0A87D6050C5B26
+7DA8B4A6FC94ED80BBD9B3348EA511263F33567AA6C268E10DF72CCDD21B4550
+03473C8C5F3E3D281352BC940D27CBBD087C13AC70F72F557754FB53421C1CF1
+5D6CFA7F86869AB323167785FE3DAE8688EBF312203907234C3872A69F25944F
+108FA20DC643FA98929F4423B4CD1CEDAC1A365185E86FDD4E3978154AF581F8
+17BFD9BAE8FE55844C4077E3502DE33F70B669768CC7ABC2C408102FDDD41939
+21595BF555AEFAFEB319937A7DFF06AD2253F97F7E5FCC866D1827806E588358
+B2B26362169574670FE1302AAB6D0B8BD86801413D72687A6EEC5498FC26F95B
+97389FA20EB48D356290336BBE9F8F8602FD3538348AC68FFC6F0216B31C5962
+ACC612AB7BC54EE4E7DBFFE7B23F7B2E0D36CE482EA53DB47A05BBB5E87E9AC3
+AA819B5CA86B87533B13FBD2197C36B4D5CE7A969D7AFBA704240DF7D42CF30F
+17FADF284CB303F2CC4F4DFEA2C72F09781C8F6B3E79FD1D5C65DC134AFF8F5D
+7B598F7777C446BCDBCCCEE9A283A3EF356EAB27D8BC5364A375C209A71A26BD
+2B5DD2F4E5D756094DE321E692AC61883C75E4B7539CFB5354096A9ACD19AF45
+8AC6ED314C48C0D7817A4BBC95120B07CF712C7B68C4C6283F3B8F657CC871CC
+B905DC6A6180F458C389801E8FA25DDEF47BD1086EC66E109D4B0B4AD4BECB2A
+1C826ABC6094EFFF1EF56B1210BBD37C1C4316D7EF1DE61BF69B1D8D5E173D50
+91F1A93F985DE8C180A045F486CA799206EFB861D2E98E0776CF110B7BDF5BFA
+F545D6B2DB7E75444F3A05164A8C30CE8A57A362F7384B6BE1154EDA5F89EE08
+369718561620C73A0EED657D7F91ACA6E41168A0CA783BDF70391F8DCA06FE07
+98F5D12F72852B00699847EE3255344844210630D29D27DCC8A976A64D2FF312
+DCBE50763405AA5431E300B8C458057AABE08F1E7F70B54C8F4321FC9413B5DB
+5F472C0DE7FC6C32CC44D755F11410529BCB9136EE7E0BD4627C2C7B96E8CB57
+DD736FAA0E254368142B1C970B3ECB40570FE2DA6B6AD7F5E81562577377461F
+B2655437AB83B83509A64E91BDF8A245AF86631E781F9AD82253C2BDA83FAF81
+85E7517FEA4A481E859516C17E1ED3BA72C4357FAE66877BC3586819D845E008
+5F74493B89013285343490B9EFE8B478535291E729A83FA30482AB0BF98438AB
+83FB5D81D8C2FD6D6E4E740241368A5DAF63E2A32F2F132B305738071F98015B
+7D76AAB04F4036B0208B865E511CC97944B6634867745B6C54716CC4CEA64266
+CDD55806650C9611F3CCD7FC5487DFD2009F9E9B92FC9EBF8F703645F39AFA49
+B55126A4D1B9B064DC45FAFD2EEE133E8EF4ECEBE3A9F6A446D0E172F58729D3
+09D37C475F0D5D2C6CD2B9012A748A418127F95999E25FBC40FEFF6A8008744E
+6B6D86F46D22337BBC50E20B1C5A6EC464290A2D6A7CB919B40DED3EE6821F41
+7ED82B3AD610AD4D7A1CC4D19C1CABF5E8046BFBAF71F04635E7179E38B76750
+6FE54C73524097B555686D4A63AB9FEEC20CF17AB794AF7B93261771FEEBF472
+3006F2733A606FCD2877C004D9FB2055CF109DAAF0C8B180C74EA4082AA108D6
+854ED8978906996332A4D478B222533C081A8E9955B56EAA0D1A972368EAE511
+BE53D657F089C2E3F356135D9B8B2000AF99B5C463048A7E88DF50022C2BE1C6
+FF935374C06C8C092942A5C533BBC534E16F9DC06F2342EE1065AC56B725DA38
+A1EBA2FABC78ED3990D392EDC999C4C63DA920D31FBC134D79EC4325E5D009AE
+43D13C00BA3348B8A60A8B85395602AE26419937BBB0B8E13B58B0D5DC13E257
+746BC9182DC47C13258739493F4852CC5BB75F4E6F08FC66D22DD065948A58F7
+017AB351156FB2600CB85B3BC4CB59252C9021C98DE29D997C72FE682615FE90
+467C6AC1CD1DEA6FAA5EA476D4D6ABB7BAD66F56F8050CB0A3689E033B2A2910
+ECE37B6A089A78FED58A210DA9F3D87A9420CEB3F86995C2811CD6366F1AE470
+8C7DB8DAD5744BEC588D40D86117F0A6640E10F7AAD07AF223FB165F948685C0
+49213D3AAF79FAFE1B0B97CCCD057FAB7EAEC5405EC412A50BAA0AE40B2F4241
+5D1B30C1D9742D978F1177058CC9F9796D1339FD762A0E2692809D796986A1B1
+7BF9E8EF8C9889106D049EA8CB9C05726E81D70433162B139674F9B57BCA9232
+A565A353E7880B9EF007F6BFCA038D207283E7C7B2E87D4744277B2DBC0CAADB
+2F86C4CD08265ED6C2DCBC742C4B2E86C5830BEDDDE0EEE5785B621425EE6ACD
+B15DCC79C715129ED6B3FBBF244BDE61B14BF471E406976B74307CF9285D73F2
+B7569B900B5873A8B834890C3B664CC18A905FFC355CA45678991A6033EBF272
+CD0571AE7CFDEFA886BE510DEC65053049A42BA19F2122288692BAF0E2F97738
+4F07FB7CA6E6F51E3F604E0092E699E43D3646433A552CABAB110430EBD2B27F
+24F93DDF1E499395D759731BC8ED2E3A1BE88956ECE4F3D6DCDC54447EF69391
+D4B31346B24C6F015B473C072AFA3F17956654C8916899253A8764A10C349B24
+22B01AB946D8FAE6F40446B4F38AB25C02D0C635DC60B031A01DFAC57E35F30F
+F72BAAFA4C985940CE41275B4838191AFC5D5E89F2BF0C41DE6AFB0F3CE342B0
+AE77C45DA6BBE9D6F07A18FF63C83ED1CF9C510362793EDB27662EB1B722881D
+EE49B48F9E373CBC2B6AAF3094144D65D393D0C4BB3C3E2464994B0EA88F30E4
+D8FE8CAB7A8B11B6A06EDBB9CCD0E272BEA67AAF821F398D149390ABF0D1B277
+32581AF647C5A898D8AF65F41F74829A41DF8067D94F98551C2EA8F9D40968B2
+8E43CE4DEB56A555798111497FE15AAF3D9949C7FCEE1F220DEF8097BDF35A7C
+888CD93BF4581A95A9435E8693FA4E4967B9463AF438E68F7E1DF331F49735D4
+1A15BFC4A24F4561B2C395D2B07E9BDD06DEFD9DE8A195A0B300FB544747175B
+05B815CFFD2E2ACF24D94275632691B91B91CA35B28FCE35F6D414375041A4F2
+0BD5F49A69BD6BD427A5A0FBC0B80AF3384FDC0DD761194135C6A1F18EE2F508
+60F8B9286EFD2D439DB909D4B44E1E45997C1EB056567E82153B4702538B7847
+ED5BCCDEE2635C3D19AACAC7163951063355505C388368F9DBA8FB45421000F1
+D7873E3D396B27F2E66AFC2176D3D801A43E764E5E76FE380127D76C05A4775F
+B8A57C8A7951CD127DD4D5E66A314C6A00B0390604F7C28E3A2EB60701F1427A
+9BDB4FBB89F3D77B9AA4A01C81BC4E4F959322CB7D7B6D97A9F5549658653F9A
+A64B159DF99997779EA7731467657A817B86A8F7B71F6D1E66523E1BFF9541BE
+A66DA601DD30F1DA91CAACF9BA3E12469A20CE3D04A6004119C9591CC9ED0F7A
+C687A6D89DC0B8BFC524B9A0EBCE7A06B77B07DD05054754D99B2ACF9F49BE30
+94F31A6E08D6ABFE7EE0B02B6EF5F42F7F402A1384CE1446D8E6B28A37DC607C
+4DD3D4462E4195DF11A816B4B3722FA00E2342A542196CA971E5D262634DE4B0
+F98F6A1E35535ABBC875582E97A67B003C305306A2E3033442A68B0884E6D6D2
+D7D750944D16C6688E81B78EE9CEA560E0507D4204CF5E2B072826A435AF6245
+81B3F5CB5C7C49D40D8F7C5587844DCF5AFFB60B748D227026B8422BEA2E1DC6
+44686ADFA22D85E907C1E9C13D418A4DA79A7254E289F84759324116F589317B
+8C98A295BFABAF32CA01A39A94DC0415EAA25DF3DE69009F5551E97B0EC20124
+29EBA419052C142FA185AA98BC15CB217630149168D61A008B6184C87A6BDA12
+18504C14D1D5BDC88B80A4520ACB63E3D30E5BDA19459D04011B403582FCC967
+6C7FA5615F09C514DEE08C9F7C983A32C397A279175F4F7B3D3B41AC29385651
+65D394CDB4066B79BCA4CF0C6E4F6EB730C6A3A9CE03FD8D7969CFAC7D3B9A57
+5D1E26E4AEED11FEC5BC6FED2CE3FB2CEC00EC7640CD5A07B6A3068BE26E82AB
+5C4603C67ED001474D8211E6489F8097FEF2CA3800F7C9F273687A4EB01ACE10
+0AD80E8F5E82C5AB1E19C98AE0D146BF3E6F163065A572169848D09E1D060B28
+65219807987195FD501181781DC8D48A6C90B368979D2BC728755A537F45F270
+24BC58484C6C41B2F3273E2B705EBBA5C21562504E89C7819CD5265711710317
+19F284E2780A4C9D77070BD9757565FB2C3C16472E33795E156DB4D11A2583EE
+AC431F6520CD8BC2ADBD66F7010A5BB813A1200DEB0C4CC6833198606E994F21
+B694E0A978E9B74C4C3392009DD32755F77EC96AFC6B193878406E9E6DB0AE97
+20537F71F8C5016668BEB87247F69825C9815282DB49B0D014E79D7AD30C8896
+3371C904DF85293980545FDFBD257860768246C8C169AC98EB5F37FB93F339FC
+9303A1976AD8ADD1F056B0F1F77FEF36BECC121506FFDF9B10845544394C40D7
+4C5FFE7A351DEA8729C86782915A79708D6FB969DA3AB2656C3A806B96F5672B
+CBF8779388ABC8AC35A80C2F382C8160BD3355858C6D7D02948447604178CB75
+6A1CE44DF1DC170E79142F243F012B42DEE7D1612B3B3B4602A2A1653873040F
+E7B5648159871AD26DAE8082FF47EDF61754095DFB375E0F949534107E4C66E6
+F2689F929E8DF0190FA28D9A536C22B62837A271E565E3DD0B06FC407B0B9D28
+32B12E4102DF1A19B82AD6A84DA0D0EDB8A267A319E584AF8E6D68DD448AF5B9
+65447ACAA6CA37167F7A20F2B101BAF5CF63B9F30499A4203C2197F88236F85A
+7EAAD802EDD89F703587512E74BAA070830EA0C3BC5E211D602D278DBAA5A455
+0F8E0C9434E4F68C42FE202EF74091F54CC6E5E33E54C456B52870FA92361F67
+351F2CB1D8C97C93347D9BFC50320EEB243A1CD38DC36E45404266A824F0A4B0
+F16884B07D4F49FB376FADDFE1B7BE4C1C8373B8C7A62C06BF7D61A319D04B66
+933C875E626744163580C23292EFFE3209C9CD34E5D6DDA80F99E99005EA4D9B
+4A00D502658553F86F33E3CB5A263D06DE92BD6886E1252AC749805CF84F4BBB
+6E09C439837CF6CC143C9BBE479C32BB93522EC70293723203A64DACD5FD0781
+861E0259D443B88769572A6C5C64EAD4D81A6C602E67FAB56014FB466CF7177F
+268768AFD9B949EA8F155638906350C1858180EB7D4D6F3D74E4FE1267C2A6AD
+6A2106751EDF62BBBB69954F1FD2A94EDC8F40867A0F6FD70BDD6D56E62F765B
+D57E984A76986D0F3480B71D27B2451BA385D2D06D873815E90031284F8501A4
+2E0988C453670739FB48D28182C44C225C41BA5AAACE8B1861E6CA916D5ED948
+D628DF37F76921E21B6A582459B482CE3D3D9D1F32A9804FDC96921CF734FB63
+7153965E87F03F7F601668843BE4CACF6E7557249AB3768F8936988B6B5CD8C7
+955185ABD780F9EE31CA4B868B3B9974F6B6492378D20446AD8B46702B76AFBA
+135891B67A3579A00D84E3672B3F3AFD2BB3182B60A9761245A39579BF0CEE01
+F2CD0E00CCFA6FF2ED703B0B962B020780A98D34A7E130DDEA7D5222A65487B7
+CFEA16C6AA66784BCF276F34B04B0310308C2237DA15B209695A46EED9AE838A
+36BC86252BDE7716000E47AF3876D7EE7520EF52E52D4B50E38E57D327F5D9A3
+8C273487E4D43CF0A013E006FDD3DEB2C898D0A5602DFC7B128E8AF2FF3839BC
+3CC50100638AC513B742F429CDBB470D55A0016058A7C321B6FEA82F505AE5FC
+C48512EBAF90688329D3279A558A5C7ED0D012A104AFF17285E62D222CD2D890
+68CA620BB2E96EEB254A95A914EBFF0781D998FCB259AC821BFDF2DA7DF43165
+67735FB62B79652D7163FC58BA2184AD4115A9D4A87B5DB7B86770091A9F4447
+B18B58A5FC520F5C5593066D5C02E7DCB08D379CFDD2F2005C08691C5FA7D172
+C6E1037FE022050EAACB1FBC04C895145970C7B06C26BA3D23DBB1118E59EB5F
+841BF631FC8746CA5DAFB2E8B0BFF2904A42923EE34B1FA02C73B2C2BA02F300
+C079936892969DABA0221BA300E3CF85D5756B1152C31AAF025CF2BC98E95E34
+8E6DE60A0A3DD95C2EFB04CFA318BA0130052AD7717C87992ECF9D2E9D5540D4
+EC543DCBD7213D0B980C40BD3C08523D81796723BC616ABB30663FEA33CDA534
+71275B5FD9DBB95CAEB0D8550E461BC0F76A8FF1F53F0B89E1F2883A5954CEDD
+558613E103DF8F06742A3C6DF1A8CD8C6A2AA1C89097F97781899633014F7CE5
+B394E5C4CF51AF70259A760270D0E90FB0C6014943BF89684486EC2E7D6FFCE9
+0626F7DA3DA67D3C4F92453A1246483FB6165510D7BC3E95239173AE85CF7224
+DCE1A51582D4F5066A476B78557993B5FF7AC99BDBBC06AE9D6538647E6E599D
+F65F50B1A182B39F72BA9C3FBD3C461FC2E720B72EA5F92A5B379D61EDD01558
+3E1B23962389E133ED530DF302E67ACE9F33E47BB48B02C9514E5752470059BA
+C2A8FBC11F57BBA443E9AA6CB1788C20400115DCBB3FE7879D60F3FCACA6ECAD
+82593B9F185A129C1F19BC9601ECE070DE45F9E62B1082BE638C6C123125BDBC
+401F55E85DEEB89C48906344498D9C50E77CE8CDB83417FE377B75CDA898A27E
+93120B88DFFAB4D271D795F191135587670300D7D72F6B0DDBC8BD29D98491B1
+4E533CA9EDD1ECA586FC1132B6AB61AA3F7DC9492BFC0C51990B70CC017351BA
+CB65FF8F553B98FC75CE7AD09464D04B27624747FB762975E14C6F4FAC997664
+F5999FE7CF31F5937B7FFF0A36932DAE5B47E3602C1D4E43A6A376C0C2CF8D0C
+A083D80171209BDC0E8E28DA33E5ED0ED93E948E55BCF761ACA5E3A97CD42879
+48FF419888C975215D8D61DC57084F9FF210127C168865E22F6EE7E645C3A80E
+6C5E58D146E2834D49A33C2222D019323997637E1CB53510B6071C3E76D8C456
+130CD6039DF3CBDDD65B2C4240DCD6123B88C5EDDAF3A18C7E2AAC385FE45821
+36BD12057D84A28BC6A985EB7C00A21CBD71B3EDFB34FCCD25FBE07BEFA0D819
+69BB7B6E75FEA9B401D185A5334A392F80C7EE168D22C3DDF2EFE04B252121E5
+2317915AD3C17B63BF15186140E06782EB0FE2CD781AAF200C141FD0DDF59C7F
+95FA1974C74CBB540FC773BE9D480558F04D8A6E77A5C4C03FFA26449FB52CC4
+F1EDB91E380CE5B7ADC606E91DB4B23AF1E91143233A9CE96252216A5D2C4668
+BC27EE74A6714918653A3216D9AF4CE72A1CF6D7014E494A1B0381B2D563101E
+71D4CC02715AB87B9A12224EAC1385E815E585A216989099DBC3A23D57C2F214
+CBBBFA6A621FF9B38307D5177EE81038AF0CBDCB9BFAB16E9DE948E03B227B5F
+8D7423B3FEF8401705FEF6C06DFEB53BC6A2171CB19573AE2A7DA6B0E1898CBA
+7BF47DE71CA764FB1CE182D172E652D2EA078A4D9F3C38236B03E4DEFB70112B
+2D9F9087A1B8852044455FBB22098045EE18CB43DC59D76953502F5C7F3EC9A6
+0CD82E4044B2D1C5F86940D642021BD3C80948FE9BE1B152BE0310237F195923
+74A7D9D787F43A9FB313EDD14EC948B185CDFF74E3AA4C818CB448056AF70F7E
+038D45F563F7C93F7CD8CA8A11A350EAD4A8920AB4F8622DE5C63BE56EB5F259
+2C0BE381813D0E6CAFC19A0C4AE1705804E1A7C6F6BC0296320B3F6B19C0A17E
+C7A9F71E5B36453675BCDCA540990422168F25A537F8037B685BD556D3DE9709
+A58FE953DA52E53995EED70997F311393BF306E5E71BC6D0EB9C0D2B6EA61AA9
+465BBB3AAAE2096BB90790D0FC8B919E8DC0BEAED5AE1C577A431BC636FCBC98
+2ACC75B27C5B0F5F4F7652DB2AE91C7EBECF5580C687C513220F6EC2616D2654
+9260DBD025A3BCFB7168B184C3EB0DF518E442CA5DBCCF154E205FB1C28218E1
+5978102C4BAA2F213C9ACAE75DA361B5654FFF070F85B729B707DB21E1542932
+EDC13798EAFC927388A71BF457D5C5AF37D8139A1D6573F26B2A45BCFC926069
+DAC568906DFFBD4F8CDFBB9FD48D5EEA56B6DA0D475B5A5A0D0D1C63BDC7713D
+5267E398B7240AF38F204F649225BC595F6F01AACAD87D087550157C1AC5DB0E
+7B4B77475FB051EA26162169B16B7DCF838A3386C7D1DCB8D6DACD12BCF380FC
+35A8979DB4D342D5A754D94B49ADE540869A4EF7B9DA6DD98B38E99439E27C0E
+CDF0D0FF7D1212C8072750EF4B915EA3258C4BE93934CCE6D5259C6CE0819126
+47F0EE4CB12F14D16403BEE96FDBCE958DC4A0E1B70A6AF85449A1772E340248
+E4653840B230B0BF8484029F159BA598A65133368C4961D601914E91D7FBFE49
+8B6F4D07FFA68939C63CC2861ED29A3F3C9BF3999074A715A93C68C30AD52BAB
+60381DC7B40B870109E4800ECC93D5E6D4D3B412103B7425563A167B4E41A7D0
+8E66017DC8C6E44332995CD0E003B9FD48139C658E444B0961C31B023BD5133D
+C5BF74E94E136A3BE016CBC60F9FC51AF41BB7A8C71F6649CBADA3DB2260B5BF
+2BD404D215FDADCC6A677B58B16627AB99F55AEFAA013D6A3D034F3DB9C08174
+F3334286460CF3AA37E11BE02BE4FA2B0B4FD6648D2095334784CDA45E92E449
+3BBF7953D2F740DE3210E051C37A6AD41899836D74F62BDDDCCAC160C1003BA2
+79170D7CA435CEAAF1FA559AA87A3EF99538ED219F994FF4EB9675528E63ABC0
+3A8EBA027CEA773D4893BE72EF5C0FC3B7D4BB2AE2CE26A2ABA8D3C77AE4F9EA
+8E2541565028DCD3682C8CF5140D025536F2EB52D4BD9C00C2CF99751E7EB429
+D8A416C6025774FE2D4847BCCD4B7618771978B4B49EBACC6E1F9CC3FBEBCECD
+7900B5F3E889845282B3E0EEC2D4BD41AE775F614724D9CC2C83C110FAB4D653
+D9E6FD9530A952450144250F29D19E94517D066C4C66980F0136860FAC91DFD3
+A73EB9087083E9909B4862B07ADDB4DBED95C2794CD2998F9B6D0BF6D52BC1A9
+772D6D5FD498A1DF12F5EC47F60CBE437037089B5CCAE4BA830AF3DD60FF128B
+5C618E23C6D065B96DDBF6CDE360CBD7BC114C06EB9DDFB6604CF98D60176A09
+B5C9D9C0132B14DEE93F8E62E3FC64FF07E18438D417C9FF0FEFE11B41CA96ED
+2B4B633EC23A52EF39847CD1AEFC37923DAE488791CA961556A5CD8FFF7AA02C
+A74186E0827A74640069B5D02CD5CE6BC83089915EDEA034189AA296DF1D5661
+B424FAC4AB5EB5D48D0ED8D81CEE2C4A548FCBF69E8BCF19AE9E4C1FFE6B466D
+570AA4922688E5A7171B8158AB3B793B35ECA4C66FD276FAED922144F44B8107
+7AA10EC3989CD46487D1F20AB9478FAB49E3C969C27ADD6B1E1FDAEBCB37CBA3
+0E0068C6C94F08F228F1DBEECB3A9305202983DEDBDFA7D821799E2DBCBF138F
+8646BD18DFB505E8C6D72A6F4E05C3AD34382616C557814D1846C82E64B2514D
+9D2F2F9D800471BA87FF062E3F85DE5718F64A840A4F47673D3E69070D87BB44
+6F987936ECFA3550F86094268B259EE96B2CE8D824FD7F32328C154237105D8B
+75678C4C1637E32E2E882C09F035567935562EF87E0CDDF225E5D116FAB09DB1
+E661BCC21A76AEA642F13E5149032CAAABB90DF368022FE4A9831149643CEDFC
+3296FEBBAAD249A649BB13578459C7850367D9B3502F8751B77758C1200C9222
+731945D041C117EF61F811982E2140A597F12EB8A6DC93953C48224B8CCFDCCC
+440DB9EF0376177FFB266ADF9530365FDE2964DF2B9609668161816622894ABC
+F54431F1F04DCB1F60E125E8FD4E8A92B5B12CC282C05571A1F03188C387A5DC
+E895AB569E5DDA99C48BDAB90EC15CA3D8F177AAC3A51296A32C4175B6BFB279
+CDCFA114A67337B3C6801ECB992CF91FC96034F0AAFD60CAC43E86B34EA9F73C
+F82C83A1DD81EF6688C2E36446A77583A20DF928149C4B66119956EFB21F3A25
+6ABE9BE47307A3E34A65DD50CEAF224079550F354578ED24451EFD1293C1081B
+D3FA8B291CA0561D2449B534B56112D5AB04D8FC85B6BB33E10C9D0C3F7E214F
+B19DA8E6EFD1FB3DEAD2756C42E4720C3317DBAC8DFFE9165DDB9B1F406B1BF8
+F22968A0D907655328C9ACB2F2D1916F5AC92A1C250EB2E0C31725AF6B3EACC5
+03F9D8EDC24A78F2AEE8664D6AD2292DDB07535623DB79B22ADFCA4E1B740062
+4A6D18D881B77AAA510454E49883C869876BD68662E8D7F5A04E479753FDB1B2
+655F8DF21C6D8EF1A71E7DC0E0C1AAF7A12A2AC800339A74E15ADE48E083DBBD
+8FC2E0A43BC42FC47C709E8CBB0739BCEA6B653237C3B86C528E77E32163579F
+3F8D6C7FAA7F32916C4762237CFD08CA35ADD9CAB6DD101CE342EC47247DF6EC
+A5BC7DDF0DCDD51CB834D90CE7356F4D65BEEF8A49E5C042A9001887DA2F53B6
+18A7511B03050558301D81C17462C0C15B1A40CD8F2DE4BD29338AE4A995CECB
+48666D3BDB3BC6C57237AA181C23357472EEC77E59889518642E51317B040D5E
+B71BB638C92BA3FC11E2C5C041C8E23DE6604DC8F0FF3932A48759DBAE0032B2
+1E8801FD4FD596976599C501E3D92281282A83FC9B4384EE6F9A15ED484DF6D7
+155533F40B40AA8092359F27B36D949CF465DB78EC35EFDD9E38DAF9173429E1
+269F4A41EB64A5C3696C29574CDE851F301DC4AA7615BCB92728741291EAAD33
+ACDEA046404087697361EC681F778BD338CE55935FBE931618BFC6004BBB313E
+7415EDC1DF5DED2D49A27D61D12D1BBA04333F37CC842F310952ADE546F087F4
+F204A63AFB47C980331D395A60E30D6D903423062977A37B0985C9C1B5009520
+2C4DDD235726340CCA561949B85971239050A21C9EA0419C3A5E6A2E25806B9B
+921FF36793077F8AA94CE291EFA15FA1DD6482B6B9B3B9CDC08FF34C8A758A05
+83A02526F9EFEDC27947A5E5C73843ACB1D47CE72B828D933F8F8357B557943C
+636C42E32508CBF894659372E925C9268B76CE85E9D46BC9D35D27DF020C4FC5
+39862BD7E54E264D5421647D80BB75CAF5AE3A45E62271B93CB6F36AC62B1D3A
+95399EBEC46D48139A8F6F406D0F8775C53F6A140137C494E475D817107580FC
+A4089392CE25D5B6A4C0A6824CF65E44CCDC5C8BDDB463818E8011AA45D52BC9
+D0CE5DCBE80DBC9A5618CEB776E4224ABB2666DDC3CC196AEDC0781F8461FCF1
+D7F6B06096CBE4D8A350431177FB2B47D147AD557E8AC5F3E6AE23731F26ED9A
+17E5A53D16A6E88A16FFFD1658D2B377920D18991946F87584E840BABDACB851
+D7D85B8D438F1368D5C68916415FE59247C3252485EE000DCB3502D8C1E0B1B6
+F584019ACA31D279DCEEAF9A2AAB5DBC6B4D224F52F4E4F4EA1492DCCFE705DC
+CAE7CF0EFF03E6DCA5FE36B76D98F3D8DB56E62173D0F710D5D4607AA93DEC1C
+22BC0764EAADF52D98620B7F8C8D73C85FD3E458294AFDDD7D1D0740F4C0D272
+9520DBFC59E21C0FF41951EB5A3ED2D49BB493AFA66841FEC2ED44A7D69CB0F2
+6A6C845202D99F2C002569A1D7EE794E48BB125008565D446B105EA8C03E798B
+D76FB87CEC5F68B91E0B42D99A082C0B0E5846405F3E510C75A8C00D695CB096
+ED8478F4F87EC3BB52AA8D2D98A6A99F395A9D0EEEE045DF42F60350E8913592
+74F45C7F6D64BB608B3A187B4A9B700F00715CCAD7AD2C52892BA657A3EE35A8
+924C8D65DEE11F2E85F724582439DB550E353C9AC4739DC2946D5B9FD8DECF3B
+0298C6600870AECAA7285001B8B5EB24B5C0BA2611E043A168A895CCBA924F5A
+C05DB83BFB5A862DEACCE962E4206DDA6A171A9EBF270AF538AD7E2ED3CA24D6
+148AD0985F16EC1A1B41D226B1FF3D995BEB53767ED704C3CBFACEF2354D8523
+4068DC22CECDDB09FD818676D9CF1828FF76AF43967CE2E7623EA8328397BE77
+C538302A2BE4301571826978DC416F75C9F32EB4AA6DC539B833460701192E5A
+37BA93FAC640125231C637995A140DD004D3456168547953F67F0CD214B2DF55
+07E78C0410A7F677B4EC97D62BA66724C32CF290D02E83A63858C861AD00824D
+FCC6AC1A44D5084C372ED46A82587FFFD3B122FF92E97E62CC81335F9E8BE580
+420EA8E4584C08056BC52DF2EAEAA3DDE1AB0582F4BD8A6D8ACF40032F589A05
+9A0660DB944A097F5B700A1DFE0978EC0C19C85921DA9880DC56C2ED8BFCB882
+0FFE804CE9F518DF1F6E4CA67F46A450A2EBE8C05C48C39EB50F87DC16D60A6F
+899C17DBBB9AEDBE5C04478C2CD4C07A8D6CA094D340E1BFAEBBAAB8EB193FB4
+5530C2CA6C1B4915B8C6F35252C1C1B783EE547C9FAC2B5509995154FE7B9CAB
+6A095287357FBADF597D7C1AF9A92B667489A3804C4DB63C480FA993C84F6E4A
+A348C48D19182D7962FB9B0C907737F2F7AC41BA1C27D0499157BA114837222B
+934910E2117D3E56A43CBBA1592C6365BBFE662FEA2C5F242649EFED3CC711C0
+7D9F882226C6A0FC3854A51A7ECDDA030FAFED1601BA4EEDCEC2A29C0E364333
+D9BFBDC5657C270DF4B4750F42C9AC17BE5267FCC6274EDF6ED0F506707F9136
+167DD356301A66FCAB21126F0E6EA028FD5DA17B1B71A3BA3E78F64ECDDADFC4
+37B68DED62676749851FE9DCB88100126B7F24984817093BD8209965E20771AC
+2C0C8FEE82A5D53BD85A1B4EB56C1890B1BD482AF7E586CB3CFC2A0C95B0ACEF
+5E13E17052D4E576244E124B1C6F2C620BFB3852DF17EE59D7F6255BB2767B00
+0CC5B17297B3BFCF9729A1A96CB1DED678DAF3D2DB6A899ED16298D5BF3B123E
+C1E5C185B50F27F5CAC509FF8E9F314BCE9E8ED45BC9A2BE4F606230841A7927
+773FFC17806CD8FA016254540FF15BD640B8AB67BB5D3AC4AD6B2E6727676B09
+50056FDB57E02263D01EA34A35F8FB0B45284B3A8F57D7C5E5FC349DA0C0EF80
+3B9A3916C5A212BECB5CDF090E21A053C1384569E0102042519262F61D9B6A79
+F43F585F1B59679301B9014DECFD0620A44DEE9282095B876A9CB85F809B13B9
+E5D8308DA9D815EFE446AF23BD05DD4A8F0AB3319AED7358DECFA6BE9B86B52D
+4DA2E9B5D9B7142E82A4B2E73A221E6856791B10384B85CAAD75508AD199B3EE
+F6AE89EDAB93A770F82942EC1CF9EB19311DB57E2C7554D95AC307F59311EA39
+17A7DA41B9C497ACED2F09C74168AF371C0A98B426E42174FFADC8518F41FFAC
+54378844951F5B3A61556F7BED402437F1A388C8F767C1AC766A74A48B8F6677
+46E17E995C332EE33AA0A7E4A4F64ACE7E0D48FF7FE16F31984DC570F78CEEC1
+E1589B060D0E90E252CA904870020399057D8BDC37515A5F1A004C9BBE461F66
+89D85434A447903AA464C063AFF870614589C11A6D0DC414B06BF2952FCB3A0A
+DD2AF3C521E93917447D9F2F32705F54DA8B1EAC58B60C4EC674536C146A7B49
+827FF69ACE907FB2D0045C9B4DED752764A16A6AD3D77084E7D47A53EE4F480F
+5C044AE87835AEA2320DB09E4369155414CF6EA7EB5D7B5AC7F750F039443BFC
+8BE881A5D52B87E6B78388C0B5B3999F79F740354C5BD03D23A8A1B9683E0D25
+1C28C7C8CCB52B1D52D1B150754C331C7FDC159C7CE99F9BB65425254684B1C2
+936E6B694E2676803C768E249AAEC756ACA64277C98FAFA55D90E89803D0C2BE
+A734DFE45BC1B637B7DC481FCF134E63CF14D8D231AEBD08B0956F43A7D9747A
+64B0A1F52FF199D0A80B11CD6C598AF94AADE9D22A59567A0560899ECA0E6AAB
+73C006686AF063D32ECB50C0E790F287CEF50292799B6017CDCD9FDA5097EE29
+D3ACFAC2D3F2448DBB2DF00496381A15DA2963B774A9B965DF1F1DA5439DBC20
+3865794FDE3C938625C0B37BD0E4E9CA8E8E92E6F3D4813BA4F9C8EFDB4179F2
+2E47E5C2E029B71112CE6B0EC0AF1DF745003120BE1BE08532844A819110F2E2
+46A71CDFD7C01CEE4C23057575EADAB8841E0E2EA8D18E44F2380119FB629445
+10F6322F34E11159D1D004723BA320F188F1102C31F992C7662BC2D86C9723A2
+1E20A734FFD8D0EE5BDA9FAE7ACD5F7E4463F8E9F3824F7206BB1C2E1AC0654E
+61E7E03BE000F6BF393E84EFFC6C04FB56873A646405A44FFBE750D2DFB704FE
+3E6CAA11B535CA9D643AAAF96C5A9486EF5FB5E496DAC28199159353A01EF27B
+2C81484B627A16A9FA473679768BDB8867DE84B5868F9F08EEFE61FF22EAE460
+F80AD742C3BC581F463BF564484DAF52FDD6A36AB9CB63A198FAC614272C49CF
+89AA153986D2EEFE4AB482A0DEB39DC5391BBFA6470A8E0AB156AB98E2B6F990
+54D6C73C036171991F9B216269EF5F1F54CD7777978B9B6869EBE8C5CEF83B83
+06604699B377CC80DD569F130BE202F6AFC9EFD5795BC44CA2A3BCD3C2636C0F
+FE8BCDBEB019E3396329997B1A80F9681A230B35A5C440B5149141C28DCA8A9A
+94C19EBCFF8362FB5C2BCA7D4949EE87C57225E0F65FB39884EA7D0E47D41ED7
+BB42AEA45E5239E73A7041F80E200830BAACE26A0AFC2D06D996C52399380F7E
+0BA391A98CEB560166DF661A505847EC9098555DA591FD3B2B7423B268790497
+78ABCC4F11EFFEFD38DCB6BFAB7DC5AAC48C237B03CE9E50B62AAFD915FF80CD
+7D6867C23991644C598DA9B02520D326EA1081C6752256DA88EB71320C296A93
+A9F86CF1BAC22B20AAF03C835E9C920545F8387CBD4CE5C5BC9668AD66E234FC
+EE6C446A5779916919D477C867A0D5E9E9F06701B6C98B4E7F00A4655FAE8E74
+E8447BC98E9824927D841AF8BC80D70BC6B5B59F657D6E93917FF18D5A314D69
+A7A7E8D458A728DC3DBE2EFF94A1DE11ADC7B9B8EEFEB07BB46D6ED8E1F9472B
+EF4BBDBBD0ACE61389B02864D4A188F0C72056D86CFFAA21099A6E01AC6200D6
+E68860A6A358145C8CADD00E2A9846464663AAB709D90A43CAC347780B26E89E
+D554C05EFFD39FC0E4283654065E21F9D2F0A22D29F49DEE2567DDC967BF400A
+59B94F63C93149E641BF85C5640789BCD53BAD6E945047CE139188229DB04A38
+1CDCEACB38A99A95C2E024B9FD65F8C4435B2C884AB0F8412AE77918819F4C3D
+52551CB3B2B1F57992A18B26BDE8159130CCA792382D60F2ABBE375CF9FAE52D
+FB79D84624370F96209BB34378FD2FE08E7417BA17DE9E5D10516A10A53691EC
+E074DDA3619C4E1231BE99FBFB829EA1645E2D96A996051CF8F580015C9C448A
+E3715AA997173E3CB6A6E0B40821B1B909E5B0E4BA8C88D875C47548CDBF7D3D
+9E3AE43B618F7617FD5D11D4226D0BA08A0E77C03BFFEA700333DC02215E57D1
+AD4D87CF31584F9E8128773B052A8031125DE3C342EA28508092112E7C4DC936
+EE2C3DBD213ADFBB93577DBC4B4C640AC8F7E3F5858CB73BB35942827D5DE8BA
+14B1CEBA65C69E174693C9C0EDB23E5A03C45FE39DF99D9A339DB94082B7439B
+660E84AE79A8BD4E3B500C47E34EAE6D5EF0A51714EEFB7F2CC4D51F19EE7612
+D6AC19FFE4C1EBDD2F1F6A19D839FCF77D6D5B1EA670A97A8E6C32165E7295B9
+C97F8E11EA41DEE8633EC9F6264E0629607E5DDBBC7EFBA49A76BF8F6EC91CF0
+BF37884358D84A21658589E353722AA5A7D694EA544F3070EC8B214209422FE8
+E50940790941C491F6844DF7088C1E7871038235BBFC91305B55E30844FCDD1E
+F8EBE9D5BC5A52CE04B8070AA5242DC6731026687997A84F357C08658EF69ED2
+89618E034E1E799BBF4CB8F5352279DFBF730CD7511E5F82BD32190A61D79716
+49DC960844C835929106B6125A7039B96407B31D2FAA07E6F4A12459B1A1BFC5
+A5E8735A4A0B7E66CBBC19BB0F914CB26B8DCF8417706E4DA36AB4E57E6BC1BB
+E7F423C759A9F7196AD891A898D0C24EC1494179A575B8D77A85D9CDAD6F5A99
+6EB2F9A4359E24CF29558D47571A5E7A23B031BC7EBD00BF4EE0830F77609CF6
+3EAE4F283AF38FDF6A625F5BC968907A14781FE795EDBF6328EC24F94752266A
+DFE9B18D17A82BE9BCF55FE1A63B6C2D8F24F27EBAEDFABBA58F1293105D38E7
+4A9B9CCEC8C201771DEC7F1DDC23D0E8F6DD366AF4D35EB6463CB9C369EDA95C
+C54BDF6135D897B65653470638865DD717C77982D46B332E5AFC3E5B4AE9704F
+195857E43926CA296B49A93CFE6F24028BC610A8C7063F3C79423E65CDD2F697
+4B1075D25EDA4E56C8EED787A57B8A8E210B67BA464955FBE58DE885808AAB1A
+7517E1D682031E5FD04AEDF8CCD2DA488AD7896CE0BB63DD941430720AE88404
+A171D6A4425DFEECC1556C0C9E8DA6B7AE9619F61B401F13A57A158A62ED22E8
+3F319B0AE93FB4F52466F86BBB20F0DF2534AFBD1292ED7FA189DF0B30B5A54B
+8EE0D9F65CEED0E689539255A234E78F29A3ED496FA280440AA832AB6D814B12
+BCF3EFAE32E3401564D0A238948868D6996A1B281114DEA1580F419E239CB9A9
+B1B1FFCE1850FCABAFCB605CF218A9DA2F05F417748711CC4BAE1A95608E1D63
+B5A464D3537234CCDA314EA65A650F0DA569DB6745005D392A5756352ABEF049
+52941F1B7A642E31ED01494A40B8ABFDE1E2BC025438FA95C5C1296C0A3231A2
+65FF888A46958EABA844E001DAA376AED4B7B14F5626882D95B95B4BDFCCFBBE
+0F174937DFEEF6319F1466EF8B63031B7A54A7D363D51068726731AC9B53EF81
+01325EFE17924654D68062BE04BA26F8318EECE37BB9E258112956A73FDDE15E
+78C46E9859D69FAA0B7BDA9C124F4541221CDD6F980B45EED340C027756F9A0F
+BD15B2B730E14C6FD94C4E93292BF79266FF9C0E8AEEE2B32279C16898ACF9CA
+8DEAE9A80561DF6A988F1F888AA03E94D1261CFCF386E3372F612FC84CD104D4
+DBD88E9D7F920411996AE86AD63AA5A5F764EE734DA099A0C126FB9056AE971C
+905067D685BE29AE40CC39B06193D36CD046995D7FE0B8B156A195BFB666CB91
+D840D73D58D11CC78704BE7A22BCCBB976BE490CEEA0AB0CC718CE0D2BE09CC4
+6B1C4CBBF734754E50DD3CB48ED8C6D72C05B67CCF82B1FE6062189219E49E24
+D29A21BB286C8A0C7CE7EAFE66EEFA932D9479AEC7188908CA4A634113B5A9AD
+DE7F1668E4B4403AF97702BF7E44A2476C125ADF3A767E2C7DA173724D138EC3
+991DA4DCA989A0904470862721713A6E916E9CE6F4EF99EC2A952F81C7B3FCFE
+6303E88F5A8BC8DC9531E0EB03BB4D6C76CE52E21C9EA78EF952E966E0641098
+3829311BFF5737A625308EAA464C657EC8E4ADF9C08394BDFCB3E73A93DCFB0A
+4BB6063A45FE5FA5502A95C2AECBCD52240A2944B4E02B4D66784A843BB17F09
+709DFAB6DB9155D129C9810125E03F6EB91B26CEC3683FD559B3134AB266C099
+75B77472C25342A2E6B1F00312F3AF8949FBB2249BBB80C86EF5D6E47F7DC55D
+33F693AAC8E630A3A171724895A7BBA861F672B5487848C017054816B6D0D6BA
+D9F31AD23110D124005EEB48CFCCFC41932399FF666300EADCAC159E137269C0
+05BF08D7C7407A3397A1A27A80C88D75B4490EE552E8CF0AC12B07F1345729FD
+CA11B5DA5C8760FCBABAF342CD7B47A6B47A76FF745946698962767AD8082E9D
+2339757DD6CF2B75A4611127A9661603162ED04BC5532B11E18FCD5927051365
+5CF6E70589764CAF6511C3709BBDD45B52B95E0207C77D9A48C655DEC2362D97
+2733C636041CBB4C168386ACE810CE194C618EDF971041325AB1E205976001E1
+4B3D09A8124E903E63EC50795717075116D496F94167F749BA69A72A71F1CE47
+A62CEF962D8449B3686897898E090D609AAADACDA275B5368DCE859D2694C9A0
+0AE5280C19ABA7577F8CD1969E4922A816B246ADA9B971EC77346C09E093749D
+0AB067228EC4F958DB6E447355FC0F61894EEEBD7894601C4902BA0E6A8BA561
+1DB2852F9A21AF990C121C7604EBF9C64B0F88D9878F612D3D2085A795236112
+617BC42ED71C
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.0: CMTT10 003.002
+%%Title: CMTT10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup
+/UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTT10 def
+/FontBBox {-4 -233 537 696 }readonly def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT10.) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 33 /exclam put
+dup 34 /quotedbl put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 37 /percent put
+dup 38 /ampersand put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 43 /plus put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 61 /equal put
+dup 62 /greater put
+dup 63 /question put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 92 /backslash put
+dup 93 /bracketright put
+dup 94 /asciicircum put
+dup 95 /underscore put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /braceleft put
+dup 124 /bar put
+dup 125 /braceright put
+dup 126 /asciitilde put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3
+7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260
+6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89
+14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0
+0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397
+3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4
+BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F
+D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0
+FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB
+556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F
+8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E
+F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB
+B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673
+125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787
+A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77
+4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC
+56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178
+E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F
+15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385
+2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9
+05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390
+6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD
+04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728
+C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4
+70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA
+4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A
+A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473
+62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364
+240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D
+69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2
+ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84
+121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4
+0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB
+D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A
+0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157
+D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C
+550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844
+CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A
+9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4
+FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F
+7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06
+E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6
+50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A
+2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05
+9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2
+44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE
+49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9
+385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091
+8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011
+6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C
+EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0
+E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB
+C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE
+484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29
+4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0
+0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C
+6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F
+5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C
+1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3
+909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8
+BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506
+CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0
+2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0
+CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08
+EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811
+0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6
+9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A
+D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4
+21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0
+7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F
+52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A
+FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD
+AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7
+F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429
+067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E
+E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431
+C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937
+5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B
+0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD
+CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC
+2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD
+E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714
+56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957
+F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F
+E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F
+0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D
+67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046
+EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7
+CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8
+9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5
+9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0
+C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861
+327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203
+F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC
+60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD
+A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4
+B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5
+0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F
+1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1
+DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D
+55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C
+7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E
+75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5
+E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149
+8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E
+F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB
+8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F
+D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914
+54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0
+49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9
+CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0
+34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276
+1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA
+6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A
+DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4
+E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD
+4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD
+2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC
+ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934
+3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE
+97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C
+FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570
+A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF
+639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4
+D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615
+E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2
+1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E
+A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3
+F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780
+5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5
+4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50
+664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844
+4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8
+35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04
+1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6
+01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A
+5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82
+2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0
+DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C
+BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507
+39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1
+C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665
+99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481
+7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE
+D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8
+6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184
+5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38
+6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B
+F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81
+E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9
+39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81
+7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5
+ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77
+6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882
+2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230
+1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41
+06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE
+5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A
+288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E
+7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F
+759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF
+E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E
+03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A
+6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859
+314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266
+74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D
+906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36
+673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E
+A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901
+931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B
+CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390
+E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1
+4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136
+2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE
+F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B
+E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE
+E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE
+251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71
+7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6
+46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C
+E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33
+DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813
+F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46
+507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025
+46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49
+2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C
+C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23
+CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176
+57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6
+788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B
+A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C
+C63B5B76ADB05D44BD5BC0BB3EBCE2E74E1AE5F7DE07A59D90C932DAA2553505
+27F2AFC05F7CEB39E1C7E54F69FB0BBB069959F2FBD11709F8E81F6E7CA06DBA
+1CBDD8E7A78487462596DA288B50B295E46F4C3D9BA862688C68859734B232A7
+4B371D2BD786924F186524765E789EEAA30B20C069322D42C893A30BF1BD2C46
+F8F3732DDFE80B8FC1789239345944D8B457824FD80D11184E73FBA30EB80A9F
+2FD466826D4E666E3A835B98A1D4AE5D17053A6A648E26E77BD08F9A3E02956A
+AE82C4929E9666F539079846527D0E326FE7CBBF86E3722BA3E53F8A5121080B
+ACF8D3C67A2A1DF624B9DB92105D3C833F5A6ECEC108E026E1D3D968967A1447
+15CEFDD09123D56606134BC3449404ADAB1330C9238DE48F3CDFBC91EB86D7B3
+8B85B5BA97376A0673E434DBFF19798EA90BFBD94493E2D21976F8106FC0C276
+C81C9B9F7D4A68120DDA56FC6EC65FFA40DB78A60A05EC270A106DEEBD2CB92B
+F0622BD2B1D43771DF39AAD3ECB655F317AB483F7290C148690903AAA636583C
+99DE3DBA99EFE20773D3D8DDD816A28D7BD8881DE570BAF5C7A30679179E1214
+FCFED81605FE56AEA21C1894167F93D648B474352A65C0756F812F97AB435ADD
+22C031A21714A626DE35308AC51CD676DB1748DD2773532294FA77CFB2AAFD32
+A72BB7A045F12B4934A768F89217233DBBD69B900B28492A26713CA5D61A9042
+A982CB071F1F875718FAC168E4E275860DB6369B8114E1BDD4801110B62C3E3E
+CF140554C826967A99F4E9726526E87D57BF845CE38E33893E5F9788769B6A4B
+A4577C38C8D45AF2EDC9F4FA7DD9979AB8E14FF5D8956233AB4C02982BE8E561
+C63B7BC314793F634DB6F086E1A60D9FC3B69D3A7C20A99FBF3CB028CDBCEB60
+E803C8DC3C5F0CCAC030905E72BBAC052520CB0E40E23B46B2150DE67F61E4B1
+8C4D55904B7F90DDE4A4A78B11AE1009DE46DA396791B1C0EA63FB6897FDFA0F
+42474042E7E9B06A703A7C6E672AC6705506F3C0B6861BC85CEBB9DC9BCFDE0D
+43F5248CD7CAD4B89835BACABBCE6C791BC35FE7211E775C009844FC75CBF6CA
+DA6A6B7B488270BFAFFA3E9950914CB0F88C8AB7CDEFD2FDE11ADA7073037EF3
+1A5CEEE37090F3A56D06FBC70597907A26498593783878C02722ECFD5D65903C
+7D421CAFA78924DD27756853568535B02533C3393183D6E30DA6ED4BD6582E09
+A5A4B4404EC452E91CB44515AC6124EBADAAE8A98D8A95E7D14DA39951EBC461
+D426490071462F246794023DE1BDC04AB0F1834D50F748C3C60A07E1FB8EF400
+78DBAB90B59500BD1232A872ED51928329CC8F06E83164FBB2D0B24222223EE5
+992241E8E00D5DCCD6DB9A8E2325ADBE12FC8512AC127BBEABDA739672C1644B
+554850CD75724E6779A7E76424CAF89E9455860E0AE2679231F4A535C0ED4336
+313717D6F7A4A4DA833847A1BCFC7BF99234FA645F2B85C9A9AAF7108931E3CB
+077A9C571E57B0D7EFD92B56C3AA4FCEC0BCAA96005E649AE8012366BE6E62CD
+9E742F8F45AE4C96BCD73AD80AFB6F061D629ABEAEC3018CFF45E41F46751953
+44E490B1355DC49C1E10BF343307263584091D122ABB1E3892E532B6DBAA105F
+CD48375C112331EC5DB49E4D4CE2D126C9274B21E678E5E3EAAD4EA0CAAA29A7
+86FD8819217B195EC6E40AF23ABCD71156656DAD38C931C8730715A2773DC44C
+4DEF14D92C2A054739F27D7EF349A0EB76D952BD9BA169B4F85C09D80984D232
+2CB4A3812BDE539DC79E2EDC7C221739D16B10246A5F57151C210878556D4176
+31EFF3AB6C4D78C4F0DF81692B3C9BDE4F85242BF0E84BACBFA39688BB222A81
+E85E9CB332868ED5B64E140C66E242B97A90C13B6DFBC3D285A49BA9D4BA1A47
+64D83577FFB50BF974D953F42A249ADF9AC228CC4D8E82213FD463BC757AFF26
+DF4D1678FBCD55AFD5FB3014C0380B2F8CA9D6400DF2AA041580A6FA5694ADBA
+674286F00E531693DB28F7C996D5A66F80AAAF53001EDFBC065C72FA5BE3F114
+1FA3354376AEF7374AE1D0A8E9B06C58FD029922164DC9FA09343FB6652232E2
+2EE34C662F0092BE479D739ACE775C6F589775DD768B736F7391B9AEBDE7F760
+727702E145CF749DC457B2E98A36C52416107B1E59084B5F777B61511B8D17AC
+88386A7933CAF852CA23FE179B67DF8DCF15800755605847ECC0FD77873727FC
+1AF2BA8BC75D30E26C40913771E528724FD7C5DE284A8B58AE55A5C48AF26AC8
+02E155B8FCD6755D8F7F5A6F1AE66E4D24A13567B6463B18E65972BD75ABF732
+FB41F87A62FECE9A50C697BCEA1E3B3DF1E3DC961DCA598220CC746326F85F83
+72E803A4E69106EC5BCA01139F92171DBF9964BBEC8D3370039623CA1F927CBF
+FE7DA71B04B4321EB4D3FCB27F8404994CC7DE5F26AB8FC019A203D6DF2F449D
+85A4F103F7604986A1AC1F7D05D239E728FD6AD1DB5024B0A0542130D2B0E7EA
+4432F910F9FD75568F5732EAC95F7A87CEBC359949C26595741533E952327791
+87E42DF84E1064E1BDD3F5A6455087B8E9C783AB9ABBCAF032E9FA32C27ED7E6
+CA7E3D1D76CD1905166090BD81A85485B9B4E976DB2E19A8E62EFB795FD6298C
+9ADA57D5BDA2FEBB227F0EFEC59E4B51E06B8358006F9D79C1EFE92510D6046B
+6AFEEDC793137DE622A8B3F5C9E3B21F29A98A589D9CEE75E348FD4D206415CE
+508AB95A7496236AF1F6F5ED6B3ADFBAF1E35B51484F9B1E0C11C5AEAB9336F5
+A8861ACE1EC74C4A145A64E4FC8F6BEB3A16B021AFF4AEDA59B06326A8D7FCB3
+3B75F9729BFB7EEEDA8A1774728C80AED40BC35D42045E5CEEBBBEFAD2566CB1
+AD69A9A972826DF0F2303BB232367E611C115E8955DC97779B1AF269B84574C0
+9D816C88BAE3AACA6428CFC648FCF0869AD9236591E3B8FA326BD2EDE7F97286
+511C75F4EE4F7B4DA33BA2CE7F778D92AE7C1B4844CAB3ED8FCA285454D78469
+1639D24729E8002E4507A114407DF51543CF7DFFDB7E05ADB2D36E139F2DBACF
+D90AF274AFB3E5AB5B38918A28EDFCF6EACA78248BEFDC2FAC0E041AD35B130F
+8A91E20251CE976680FCE3F8B65B33118EF7C138CA1260D3CA855C94FCC02CC2
+B29C94A3FFD38056ACE512DE680DA29D97BCFC35FB2A85057E484FC9F72C9A7D
+08AFAFCA705335C6E9AEDAFA97D884E0E463E79D8AB45DDF86C56EC922283C4B
+777EAABC0D57BEE30D4D47FFA16FEAE2FA972E36516480E1FCAFFA5CE692B7E8
+8F887C5AE573B96643F10BC62FAFA4BC6CD04F5353C0D40CBCEFBBA4DE7B8960
+352E7F6497C9C4489779028934084522336B5E5DF6FF84A78158ED5035FFFC9F
+F199AFD543D5D81C0155F3EE0E7F6FAF7898F7F26941D417F7AB37703FE67D37
+C263078FDC85C5430CF379E657FF9ADA0C00DBD605386F5494459C63D4AC057B
+2E061B06E17B54AEF38A9EB401FD4C76C6755F2AB651473DA2F19E28C89229E3
+FD385D8559EFFEEE5D0CEF127A8A6CF9017459466E0FAC341DE1994C03A0CA5A
+799CCD03DD2B41A05F7B36493638AAF8D7CD380E03726B0A18B02A46A0BCA027
+9BF16ED75AE0494C36161ED2C22DD7036FBBA2E319106B9A56FECC732B87E2F2
+596167125221D42DE9D4435DAD321F878FDA68B9E72DBC2E31178621327BAC50
+72148C123D4C8568DE822169839906B9F0ACAF3B4DCEB9352C8A9E246A9A5EA7
+31E04981D0A53F44B6905704CFFB9F0463518C02538DEF2DBDABE936D1213FBB
+FCD28F833C5872057CAA92536B8E8EBA129745E2E2B5A9F07086A1212D466785
+EE640432A0E47C91CCFF3FED5669C8ABC2B43551AD04E7A2FEE2F3C16511F7D4
+048A8207351E83AD32A72360A2DB1AA8F78C5D2630D770F5E13D5C49BE166475
+79483B2F7FEBC1D73B04E0E5D9B8243DBEF7E5D201D9F644B150A230B5CF9B90
+CA34BB8474BCF408E37757B8CE5B33FE7400A68C70F542C7E2A22B8C0AB1EF9F
+2BBA7A646A4C872C43C0A748F078AA98A13E882085B460050CB3F5B09B62EC01
+AB87AF8DFCA6823ED6CF8426EC115C5E4DA335FE416E1D37311B7FD56793CCA0
+BF90B579B0FD4E4E1D0A26FB0C1D490D99CF4994693630FA343960E15AFFC596
+49BB7297BFB82FD56BBCB36DC1597F94A157AEDFC53419BA867CC02C26464BC0
+2875127C688DA6902567716A908153DB4CBF710CDBCE50AB98E0CCF1DF5CC571
+00027F6582CF6AB4E584436471D3C8DA2D780E5B02A9B1717364899D51EC679D
+CF5F4A4981EDC24F710E892772E4F891AD02B7B98A113FB1AD2B5A51046693A4
+19D03A75A3140C19791C85A0DDD173BB3618E9498CDDC8696CCA6EF81729AD1E
+EFE4F3D6242E1766A3079371D1D1833841F46F04F2F8029D8C1943F6986A95E4
+9E77806F221CECAFB3EAE0F979DADC5D2E4715BFB5C64245CBD2300E59030B99
+0885F08417E1A0C57C3746230F9EF4E968C0F41F67706BDA2E983012BF317612
+38E9C0178F027EDA0E679F306AF71F0D8985C712C4B4BBBFC57A86AE052CC2FE
+5C1BDFD948801509ADFD4FF9FA7A25E30D6CCC7C7E418EEAB34C4ECC6AC8FADA
+637B5CC70136EA5A57B727EB11075755A7840215CE2B9939BBB6C3A7E22DE42E
+B3725C1AD0BEE0A54C0B57CB93E6A20E319E2FE4515D80D09972E0A742D20DE0
+55117C1B9F3C181456406FCA70A7E3B757A813F7CF9E3562EB8CAE1CFB65DAA2
+B384C17AE103C20851906846AA4AA5EEE5EE989F292D42B11EB4C4FC057EE4BB
+B09A4D81E8AF0CE1C851B2E328E977207A6989F13F7FF039A4E295507CF0A53F
+10A345A516EDB7C5FD5763CC27543452249D229BC22099C6FC1DFCC07A35144C
+6267BE8D5BDCE57F9C7C65F6A64A74DC2207C8601231477DD57BC8259B26C683
+22FD4DBF0E3BD814E31C9E194CE2EB212268A249216DB084226802B79DC72AAB
+FAC4ED3AF6BC51E2D9A1D5A37F5124BEBB1E0B010C34A1B7FBCED45414AD2285
+43BE684BC7BB56C5036D182AFECC061F749522456B4DCD80E3315F48E7E8AB98
+40C4FBDE71DA957C8FD860C4AB02C97578BC8299EF448A526CFC585F27EA14E8
+88F9928CBF87C8E46F69100F0CB43E2720B0BC8DCA50D59FEFBB84383B4036A3
+0ED89F67B433AB4BF686487194107C63BF989A80D761EF3FB20146A0A496E5E9
+26375866581146F3537156051C61F82AA5C68B6E8418297DDA7704EA50262775
+B96E1E1D7643370288780188ABCF25B9B23BBE408EC5DE254F51469D5FB06FF6
+2EA926F94CF1730E014F34822ED267643B773B7CADF967D431B6F3DDC998E56A
+243880E9F772F3BAB3702C19C5DC92ACF864D6A771783E178F4A7BFBAD36008A
+F0A61C5B437A69E31235DDA9898B4B081F1176C197C0834CAA25FDC9BEB696AA
+8ABD1FDBE17E30070690EDA533E2EBC19180DCE4CA8146D6657BDDB765DDFB21
+D0CDB86912E49DB109F66DBB9226E297945BCE9073E724EBABB58E42AD94CDA4
+C9DAEC40F79F3A3D36777B18C61DC9D22EC351324FAC3426917C893E36C8D953
+4ACFACA05F8764BC61A17F6B40D3A97177B97CF88C2B0023ECB3F29F9CB347DC
+E686012FB31904DCA042679776108D9D611EEE971D341ABCEACBD0866DA21DCC
+270D3DBBBC9CD438F4F651B58D1405A82960CA991CF690B8B564033154645D8D
+ED5E4E059D9DFAF3A5C2BA1C1AFE1B865901C8D117262CAB210A3C7A03443544
+E22EA5577AEF1378A9A4528592F32A8AEBCB1CB6A7E4948FF78C6FD230A5892B
+D8953ED89392929FB91C042D31E7E8A4912FC701E722D7FAF0308625B3B748F2
+26DE427383236E131022A95395C72B3DEBB139C81811582FA4E9C7F970FA605D
+C8DBB3ED8B141428ACE6DF426B2567B10C5D68A4060F25D5D64BA262101CF5C3
+4B7948CDEB6CAC66FFFA0F1795C5F3174F7D319D252DC2D22BD08FAB54CEA742
+64C0C6B94BDF182DC0942C0C82E82A0B04654A7C2E6BE685EC3DAF1D5FE48790
+DA815DBBD0A176BB4D4424ED7F893B4CED54C2EF94D73CBB154E547CD33D874A
+E754A17AD1F10C23BC5FA4E709330A10A73C93B843D8CD8A65D5A4241B35CD19
+938F2BA2FA95551F0C2FEF1CB8B056D9A9120F7607BD4C497762C577B66B2DF6
+8F3F661EBD7F3E73E3A0032790ED80F774423A026F8ADE2FA82129E1FF27DB3A
+1B6E603479668FD783735606F7AC6BE9D65C17F7ECCA3B622C13F0FC95F8259D
+DA4801A7EE18656AAC3D730CF2E17FCE8657AD6289850DC06E897A759F7B53CA
+502E764B07FDDBE6E99D25ECF1600D6646622334871C57133A8AFD03FBBC2368
+1BCDABFA9FF4C4A9EF150045F694A3AA487BE461BDD2BF1BBB38BBC365837063
+70963C7C1E7E4809797F4E497DBF6D5A90A71D6E89BEEDD5D16B31ADCAD67A81
+A9A3085B4CA7BD93E1A9591BD4A7C88FF930EE7A131C5F3338817D88AE31813A
+C09D5E7120AFA6565B0A647A40CA94B78F20905B7110FE44A90794F7F0CD63DB
+E99675C781255B7BA257CEB14DFDF9C13A02701B0FE41C6A6F50CC62C028A3BA
+E9A918549B7F9F206DA0909F2009CC87BBB565F281F24D0ACBCB71F12709DB31
+5D355415D97F66DB25CAC37E90BEDB51F2FA97E0A61EF85E845F702D0B3AF935
+14F3EB201323209D76C7C5970AEFCE4225FFB4A1477B177BB52332AA0539291B
+9B8004F23CE4E055F7AB6D6F2A8E74C2994306A407A4FC831D1C887C42FFD0DF
+EF07891681C7F4AA914AECC427057A8D73261E25F82DC3EEE7295C0870E91523
+E15187584B32B8F8B0F2E9BF4E67E5A2858F00B0C59DA1B1B59B00374C6C6AD9
+741E0998EE0DCC6F5ACD1925CC40807D5B66E971CDCFA4651BBF2490FADD15EF
+C8A7EA3ECD078D34D875C3EC5EDAB74AC0DCA00F2329184455C24C97EB0AD4C5
+40B8E4AA2CE6E7816580F9DBCDAE7F01AF0533397CD37C401D4841B60CB976EB
+E3093FC863F368C85AECE6E6CF7D9ADABDF628D9806C1269A0EE06FEC90948E5
+CBE40C0A2C72E08D9AD94F07470692D571F595E465CB32BF486AE9C3971B6F7B
+FBBDE2699E1FC9DACB156D880DA379262A98C6708A9850FF8EE36C35FF636E46
+D8D00FB3550786C1D73E6B91F9B35D6998F33BC953E0C8AFF996F4C707F8DBAA
+AFD76432E45605D5E703C2569856A0BD8C8ACB29BCAC87F1A72F859D20205328
+6272929343C1CBCB053D7E19AEC4B2EFAA765B2002F43E7F62ED5281C94ABDAE
+750B2C88B3801559FC6DF0D66E55952FD67AD41718D49D35DBF2B7CCBC1E755E
+800ABB45EA4D7547756CE9E6D3AE0B80D8D97D681DFFCF4D5D5330F0FD6AA729
+5BCB1475F18E9612197D6F5F7C7AE8FB931C242993D385AAE7829391D370819A
+496B9518C6F913E666C27F0896C7684AA1DB1A335C7B50762B4F8445D45C907B
+9E30F7FD84E403DACCB0A8DFF2940312386C315FFA700B0E42242EEE04042E2A
+3F4840E719A42FAC426870CC20DF083537010550A6B43A02A330D92CE15222FB
+BE6A9F6EFA44F7987224533983D96BD2E1E536437F89E2E43884AE09FF5C7902
+A284704F78AC067C332EA207F53CAB61ED51EF3FE79A9B7A373C3DF72A4F3A5D
+67B4F60BB470E5D093FD880AD32809160E550CC1EE67E01CFA80318C03E6FDAD
+A8E744FEA593E2761C60D2CE83F3F6D3A2B203739C62A69D4E271FA12372C45F
+6C378E4CC21B9B0CBFCF43233562E4BD4D52F7A634D1F0493F8DE445D140EA4A
+D3956E9971263B7C3CAEC8AC83E541D58F52E00C1C80EBD9A31F0A9D17FA2D63
+E5E0D22CA28D51E39A055C40AB769EF224AEFE2AF714E322FDCB9770EB00686B
+208AAEE2160D059DEED823FF4F9769359C183A6A6398F9E4ED55397F02C68FB1
+016CB495A0599DED25BF1006343DF9AB7C3BAEBD1EB2F99F4FCB07E84AD2D959
+D1D573B89C220DAD815D9EBA41CEF4D664630082DB97645AEA6779A8F0D7765E
+B76A4B8B429CF95F22474EEF2FF1C792DD525E50E1EE0A1ECD78570970B62293
+43DBE6E9B97585B754AEFE28E960B5F8B3F549EC7F168FFFC5EBB52C7CDDACCB
+DF9E1FD89F2F8CEE44285E79724FDDFED021AAD2025006239EE5CA8543B86200
+C7E8522668B07608615F6F102E295003B1B89264810A2BFC3DAFECFF126B1807
+2388839274203BEEC2B319C7F263ABBE6B181FECB5FDB9516E8F0456B6A1BEAD
+7F45DB0F95F4943B2ACF52CB30DFDC6EC936A6292DC2AD0BD67164900CECF3DC
+097528073246A88607DDEE1DE4BCFC298892F3B73E897734D7001A466170F60E
+5F2948ED36A6AC13975086A2D68B6CD8B033CD14C1B85EEE4AD3679D74DEB998
+AF62D045BF1102FB3927E5B9078F8AF93A0ADDF1937276C423CD346F30D17D3C
+C57CE052053EC21A2991D063B157FD535850DD63E55890427BC2C883785DFBA2
+436BDED247251001AB1AE56EA19880B88B3F1BFA6C232876E6C002E9EA850700
+517C80537C27033737A162B10B179624F869FEC056F339D5A292E6E945E7BB31
+A271CA30990B4AA5874CAD851C1154275BBA868EDA5D156F4663E2D436DE6DD2
+74E6579AB19EC803927046D9130BD9E735D64248A6FA78F1DD6B51DF0B1DD553
+316D96795355878C426BDA09F052D54880E5F3E5C1F29786DA0A8084D81A5849
+B2A301BFF171446EEB4DAECAF40D8C4F6C489BEA6C592F8257E68C514180756D
+A13569A03827561348B73584D69626B3175247018DB9DFAA9E989E55C97F9A32
+B02423EA16FADA78FE1E3C56EF4122C640EB8D77C5E957B5E425A2FBFD173423
+E8AA1758A91E1B5B85D174D7DA1F11B3AA76761346D2464BDBA290435A6DA50C
+1F14E14FE29396C918E3E4C388E93D1C3F7A7161FC61DFA1543D4CA86B6A3A5D
+B64FC69BADC3F3E0F7DA2AA5FD6C39700C2CB8A6C823D2620D39FBB0B507003B
+6D28C8D67F57C019DE3D8A4B6BD01CF0B305163BB1229F470AAD7436D13C326C
+5D205B4C818D0F765E2B9FDDE26B033D1060EBEEAD6E5C49EC8C6F395B54C259
+4E24E89DB787773423E358A1C64C3FDEE4CCBAAC4AC652012A0CD7269A062643
+0F52A1BD1DEE9401B5835752C48CD0B705476B00458D31E70599761C793987D1
+1A14288D5EB2C9452C2C4524202A40A8C773AA8A3B9D10ABFF457478532B2C58
+0DA8776E116853B77D1A8EE320C87B23A693BB5D3E77A9C419772675690DD75C
+7AC5BC3ACF97BB11C70C0261EB5DECD96577D755B03EECBC66B3B8FAFAD87950
+94AA617A40E4CFE88939F28D0D36C5C6FB5B4F6E4321BDBF12DCD428BDEC76DC
+192AD968A9699084DBFFA3FE06D5F79D336DD6CFCA4C9E1F427A29DB1F4F0492
+A29F5F052310D455E8AE1847083B70EE57C4799FF4B470655D855B8298FD3694
+66E00CF5D04415601598C0ABD6802FA0DC4C12965546076E46C2DE87467CCC8D
+F9ED9FE429CDE1DB2AFE61363327B4D11F46C678B59E74F8F09D8B9C14C48004
+CEC93F33A4A6906CD71B2414C05B3599E4D1FC1EB839D4B5E5968711359D3BB2
+8E6E262896409C7EE86DF7A8CF1DCA1EDCB2BE723CAAF5B1D7DC94F093864855
+7FB08EF776FDCF9DD8342ECB7F7B307542880A7C04D3BD09D65BE13F80E36120
+24BBE4C422F1CC0DC956CE53261B903ABA0E0CF1CB0AA8895C0DA8127DE3DC9D
+4B491926B5408AC8D29D2FE62CC3CEF548C0A57A1DA202EAEA8F4584D8B64E49
+A3D11A48600CC0913B744180AFB6873BE72DCDFF8EA2203E34082E011C87C3F8
+EE91457705ED0BD4E2C193B7E818B50DDDD734F2BA1B876D262C39D94B0FC27F
+0B5A87423EAE91BDAB38BE457EB0309D05FA5E458109305C03295FC39B0D06BD
+BFA2B4520DD610E12C3AF842A94296108FB67495B300991C3491F0983B5A0403
+68A8D19218D9429EE400C3B91DDE2A9F163684D9F28120B584FEC88628EAA60F
+79F5988BE7BE31153A675BC7B344E7F62CE85E8850361D1996D57E71690472BB
+8055755DE965D795E6D2424F7D76AE7F249AEF4BFD75103B2CE4D62FECCD2FAE
+3702A57A3320C54D19D5015ABA5AF39B237C53D38DBD80773C0B9D6406574BFA
+48BA4EE71769AD140E202D24D9F1691BA072E1AF182FD6DC06C2FD25E3437E38
+ED1D0033E77D2B188F3A84EAE17787110EC5462EF5CD0FEBBE5CE39976B5CDA4
+8206BE5EB8A06C7698C5E6A45EC7F59CAD3D6ED3AC19FABF3D29C9AEBEFDD74A
+6B7261D349FE509BD769D9A24B16C276C917F0CBE8B25FFE19BF8528E1C46D38
+3738E3CEE8170E3EE323A464A3C8FF30B3DAD0BE87518E008E37F60DB471E3EC
+110E9B8AAA5C875AF759126B39B90A8E7BCB25FA3EFA783AF7B069AED1887A19
+6A75C799940E5352C34A93F125DE82A7387CFDD7073A28C1026C9E06A1D8163B
+E66DC3BAAEBBDF96B7B3143B9414AB45643D022294C2AF8C87EBFF1276EF991B
+7A1C720C1A7CFD392F211A190A530A19012EB117670AFAE4CF700048D901A5BE
+074F9B05AA555FA4ED6D0A92C08E4B795279F9BE48887886B5121DDD857E8A86
+A2885B9A672C72BAB990E0AF6DCCC769A7E18E65A86B3E1482D8297FD98E0510
+30B27AFCB9B261771A1AFC298F96E272E779A8B6AB6B03410ECE32B7B69369C7
+5597FDD08BF2E6CA29E093428DBB0BC53C64E5ECBF216111AC90E82822E7604B
+A9AF479BE9FD2FB2ED27EBF4027C22357DB27A5A6FBC6B14607DC26F95A81BA5
+1737D6C406B19857FFF2903F966DCD56BB73B06F5F74C917517DF95D8D5E5108
+350AB839CBDFD7D1F3C687D0B6B576FFE108AE8708B967C29F9840A0D6784789
+DDD7A0D76E92082162603CC916ADAD75BB205E7C9B7A72D286C5411F3771EB6B
+9F9022BB24AC9EE7700907280F52862F1D542605F3D3AB06679252DB9A8A4E41
+FD9740AE35473A9FD025F364B863DDD063AF91A114EB529A38F28C4B4551E276
+F76C254669B81BD3CA8479F0C7208AFE5A1927F2AB12FBEC47FE0BF9AC3DBF3C
+340DC67125FA0D65B245260B32FB74F90CCA6D327874BDB6C252614C75425F20
+2AD8C9ADD15733715B9281DB9D73C66B9664491416643C04165C64F5939CA73F
+F8D7652592F391E59B82EF0BEDA9DC7F42713005E4AEAA1111EAB4E74BD99119
+D86490DEE3DA6C021B36D7AFDF9EEDBB1E3253176EF0607469E0982034AF57A8
+83F024DD4B42B99BBA110514E52498F6BE463B3053DF5114F2D6644FA27702D3
+15DB327F632E3750171BDAD75F0B7D2A84267C712132373A2FE740BB086D53B5
+C3E9A68583159E46FE46ED3B645B0FD505D206E09D438052E27B75EFE7F5D83F
+BC153E4BAD47FF241AD46BE13605E1840C5C2CE3492C29EA5FFF5550AA3986E4
+FF28A404908C88269D821EB2FBB193DC311750F6163D75872603A254B949C756
+CB97829F0BE3AD796D52969E483A0A53CA650CFB9AD57E0F4DED89C7746341EB
+3D3333F06556BC61BABC3553C7B0D83DDC5B3BFDC77DBD9B6DE41680DD6439E9
+4C9FA49DF62830C86E7A4B1CBD37F2794EB6DAFC3F1676697392A6A635E626DD
+3A3BC9E2378C152F9895178C694596191B37BE3DD8C0FF34C82C386289EBD7CC
+B63139A3243F193EA10211A8E390B4C4046663CEC373928556F5CC99FE094ED2
+841DDF013CAA6CA5C48CD9382CB776964B38BC24BB009DF203DB81D4EE3A4463
+C5F2BD876E0C9B9B226FF39C0CE6E67589A38388A02A81D3DEA72CC031BB8B2F
+66C481F00167DC0BEEE6740A78D736F429B44B82A3B01ED2127052646DB442FC
+C1EC78B100F11D42512810F26EEABFFDEE3E46DD584FCC2194896F7BB5670634
+480771223C1E2641A253CE2490AD75591FD94F19B2DBA95F0CD64EE4BA03D3B2
+BB0C7A6437B610004CA4F1B914D9075051F7CBB6CDA305F6337307F317CC05C7
+8BA5A409ED6D915263680852670F8A474AB0646ACF77FA3AC35332DFE2B00CEA
+FA99D25DAC950B173DB84ACD9DD99AB23973390FE32E384C6003FEB9A4D3FB1A
+CA17FE87AD558921F203432EC00D0BD9E0294A0364048A9743516F46EAC01B7A
+AF23DACE21FC2D26692D8F1A85F1B0AA8156D6360B322724C4804FAE55DFA814
+ACCE2F8508335CD775539E7931007A73DFDEEF7695487B10BB0D95FCA66D0F53
+6E86DD15234A025709C4F7DD08761711D05655EAD8122D8BA2F7177E820B48C2
+5EC82CD16644832ADF374ACF193975B4635FB374451D0AED47030807CFDCF240
+783160D79230AAC1F2E5066F09C327ACE24CA2D712D08749FC63C3D8EDADCE22
+B81A7E03350AE88F30BE8222B6954ED0D2910AECBA460EC21BB032C4D5DC1B12
+39F1EB91215B384CDE3F1FBDABA298E37D4460D0B07B0493053444AC73654815
+376ADD2F64BDE78BF59CD75D93A3A3BC730562E9A1F2A730A2F766AA19DE458F
+06DD501B215E0C2070CD64DDE13E99719671FA4809FBCB6623E206253081A50F
+5329F16F1B0F0F69276852A7A0AC023A821B8E7880F9D7AE5DA74D0483AACB4F
+FF09D975ABF439500ADEADA4990CA29A50D82C0A7704F11DDE0C9C8E4DA21382
+C4F7289719D9A4A44BF2735CCAA2BCA698A5FAEC9A3BCCDDA1C88CCE18510733
+5A88B88A193C9DF15ACD00F20A965C11DD8A35CE316EF3E4716AB3FB4EC6288A
+91C0F824FC9933315C9A71CA786C9305A9A30F407777F0AEA7D341D1D9605378
+72CF445A4A2E3666C0075E2F9AAC3F452811EF7E60E6C04F37F3808FE8BD39F2
+346F5E25757E3ED2232F1B9B4DADF83DA45F7F302809251973F705CF71E34C18
+7C452C4B5D29E0CB74CD6EA67637FFF0E9D9B211FF96E04FFFE9A27BE5E13BF6
+B51EF214FF4F0A58C5D5734E6BCB0ECD419AE3CF79AB67D1B3EAE70FC1E83691
+095D0C370C9CF847C2A914F0B810124D763A972464C5F2C1F69914A8672D46EE
+30F9EFFA7E9628D667E5DB582C123160BF28E77DBBD77598F14A32DD74F67032
+B4A0537D0FF938CC61BB0F9798B600FFB1AD7AE6AEE67E0FC6557FC3FBAA1E4E
+C793B0D207EE0395913818CB2446E9B82B880537C1625C70ACBC87F97CEA8C77
+82E6229E1734F80FBF8477F062F3836FA9DCF83A4BA49703FE3DCB5F2CF6266F
+4480EDFA91B1D98FAB8BE14DA6E84B9D58B46DE5D034734496474241F59317F4
+4AE4AFFABA7CA3FA149A26CF5050B83BDCB1C56B529900AA20EE6098D135E65E
+61026EF0852D497B3799DA044CB378332924CA360A1C62E24B5A0628813829AF
+A1236DD728559DAA01188D6EBBF3CEF983C5201904D03A46B62A41E9C5F494DB
+135F6B62BD5F3745625E96E1B401848BFD935AD1FE128507866FB807693E8376
+634F1B39763087EE7E454069D5CED93DAE8BE9D1366669A152968E2DF13EFA54
+D1A631CCCA33D914CC1DA8C0DF8ECE2FABD18641FFB43BB5E82DD0A56CC20DCC
+64EC0A7A04709085C80C2A1477CF85A29D0C11F204CEA455072DFBA6F5F5C693
+CB2B56EA189926EB51E92D2B5D89F25AB94E1F7FA208916FFE89601B616B41EB
+EFA70F4C8CFC3FAD1D056E4076E8CDC2C3058A2B35B34FA0A29A2ED3746060AD
+1A6B6988B1B0986DE495FDE9A8C45119DA7EC756E1C83C89842C8744AC4B80DC
+264792E2E8D5AE4120BC57C170C742EEB0EAE8C9C4537AE432654DA4DF89FD45
+AE0DBDD92D0DDFA0C90C4FB90FD5A7ABB522A193117153CF578A584447FCD674
+548ECB9250DA4669DDC8CDBEBBA49999F2519DE29B0CE693DEB2F420D4B0CE02
+D9AA3C2C15A6DC98495E1EA54C7670482E2B1034B91692285AC47EFD6271659E
+400D6D7DC137A904647FD092B1B4D59170F1EED8E29FCD584FEA2C77642AB839
+0A44403D75504E8DDF1BDBBA6B51B7F9F64B63676B6FBDE514701B9333312126
+4D8AC19B638254A4BFDEACA80AB2CBC4DD12AB48BC34771E210FB576FA0DE013
+5C49E765028D57C056BD7C14E6941B0A92A2073CA3CCA67E9A18F18BE4934550
+EFB984B486B9036B8E3221F63D8642E2C71E6547A8E4B25FC3EC3C42D27DFD85
+E85F2D08C69CDCF3174A09E363E92A8B3D75BFD57CA37144D5267BA4D1750988
+8FA3A9B9100838AA7DFFA97C5E4D2516F5649CA756C97C5A3D500A60D2AC5039
+812B603639C2E3CE36F26CC0AFCB385A5BBD582E7BD1B5920F67DBAF9ABF9EE5
+FCF66EECB566DD87F0618AB73199C230034DE379CAC1F6BD17526305D6B6ECD5
+8C5C57FA76FA775B2A25C7F5C83C27A1F4C71DCA93487469004EDFF855A156C0
+8C8EE1972CEB91B9292F5619118F7DA38B1FCDD069D71D0DAE61BE55AF0E255B
+3B8D2DE974592BCA7D92F0DE92538C74A801CF16A424621627BEE5BEC2CC5E68
+9B88BE0ADDB7C8125F7C35D74A52779C6D5D87143506EAB799765589617D08F3
+1305B15752D134A97F7D872CF330F4B3BB62946570C5EA7DB77612DF9B7F91E9
+22321623627FEC40FA04FDC1AA21DECC7AE531510375D6F68A68C6B8BD649A67
+A3E24B30E04ACC2171A510DCD77F7688E2ABD7D3346BD84E8363BCDB2EABBE0E
+5BC87A595CE80F977190EF06D3D0BE12DA50EA0C33D25617A9DA8940967906B5
+F5317F4CDCE1DCC7ED48B4AC4DA131EBCCD11F7D241551AF8A2A723A5C634EAC
+575113186D3B83F8B6E2E50796481B6CA50D440D5B20C5206A85F539FB7D52B8
+B831EF10B784D195BF7EFF05A9125A3B90CE131D84ADBBE6E47AAC2FBE51DDDF
+1286C0DCCA8343F7803FCB25CD690EF9FB49C1C3B91BB7FCE5D330C781744502
+AE46FEC050B4C695101F3B86ACE09D502572DFF5F8534DBE6DEAE838B4000712
+4B21697BA3FCDCCB3B858251438F05B3EA1F8CABC08A502C5324D1315214E7DA
+6B62576C10E6EE9A69FDB9D424FE1C7BC32CF37EE9EFC42B9F6726C486762574
+03913F9B3F5A20B1EFA8D4E072EA2F641D7AF64403C4EC76E3A81185B976499D
+C78FAD546598AB094B628942EBA51C11FD572264BFC7B0E97A1715D7443F29EB
+7BB4E6848383836F99850E22316C73B76B0E6848008B832E49B7373A94DADEE4
+E7EB32C428F531FFA2067E3316A47C08068D93E27525A9A2A915CD9F204AB4DE
+01EF65ECE8167C184DFA747930AA322FC136DE0D412E99E6F37ACF87A788141B
+3043A3B0D20DDE8C2137EF0DA77A899A581A51AC4CD5A1031F84BD428D0A17A9
+989877277917D07CB806DF051C23F1AB0049FBDE843B34CFC9DEC4147D97759E
+983C395F0C9DC2832139DFDE0455002BEBC392E7617156400301F76441347A3E
+E94D2FB65A31DA189BCC3CE94AFC1613B546D424A36EB2F83F3444DDAB0F03A0
+F3C270A9B8BC62465F46D83929DB7F0240E52CAC458194BFD50645F825D0C41C
+773B1D6757625906C7643BDCE990E24467C011ACDAF6D4A26A62D71FAF1F475C
+F14CA4D545E9E4F80BB01F3AC573D046DA7356FB9884CAE3A29DC357BC8CB255
+E5108AB355F0E087902C9BB458DCE8F341F1AEB79E468EE9A45855FE037780E7
+9EA9ADC1CFA141A3F976DFEF51A428D237F234BF5C694DAD4CCF2AE84FFAB574
+A25C1FBA2F38110C305D962420A310FE93301B8677478BDBBBDC518B8C94E819
+26BD2529D0EBF0E770CB3A1E107440D135848D2F90CE8F37693EDAF6071B79F4
+FEA5ABF4D9F2DC67F2468F2BDA3FA968EED4CAF8D7A22CB28AA43804F72F56B9
+545DBD0E3F27DD5617329305CD8577AF38CD4C472CB181CF3DBEA07CD42C6C1C
+51E819286FFFC75E38F5EFF96C763F51A31A78B0848CF56DE1A2CBE2F39B0C41
+FC7C0D42D48D6C75516316B27F6C34AE6D5F5873233914790ECE044C014E9796
+20E200F53FC51ABFEC15C1E08D36E9A4DA7E58DAC014E2C0627EE8ACC6AD021A
+D2E2C431ACE954602EB99D4584250637F807507A17DA18521B6820E066058B09
+8C2B4609FDEA9E02007A097F833C7A9854D74B38DC81016759DD8FC6F98071FE
+620AFA1A8DE5AA974C281A1DEC9C8B866E7E350BE5EF3C7C53F82280790CF239
+C847E4C7F74BCEBED8BCC57D4C01BC4394F0E9EC5AD01852B3B06B93A477A1AB
+AA97B588415A03C1984B0C9619C899DFD4766A2CE91CD6A65120E07756100696
+297345CACCE1551A2CB549077A292B73ECD47C3A098049BC49F2125BBF004DAA
+8827C407B06A07E5F39CC17843FE876FB2DC6CA2ADC0A4D8812901FC82913ECF
+BD04C66B3647B7A698B4BC6C2F136C04AF4792F10C31231F2A04E4B55538CC17
+AFE4B47BA2F575BB4E7E222E9F6A4F904F11CBBC6DF6C2F3C15DCF268A39D6AB
+DEB9D091EFE6ECD5DF61ED23E570D484A6AFD5F8D34B7D484F76F150D3D97EBE
+5E91D7A458FAB380BE167E7F2FAAC82BC2C7F3C14BDFD06D9665F5AB2CE34800
+E779AC43B70E22199D3BC4A2A14EFD5D20AF12D8CC26BCE54762ECCA9D9F5FDE
+84B43104575B2D6533FD3BD245AAAA4B82314EAEC2E6E566EB32AE367D2F2BBE
+8F6DF9D63F56693D701E259ED828A3E27561A5901B87F606AADBEDDD7E846AC1
+F07D1ACCEC90CF6AB18114A140FE4BC918EDC9B06284B40E2C82D4BE3C1EAB92
+E2E2F0DE115737561F7ACA173B81C9AF7EFCD6797BC1AE6366646C8F1ADC38A9
+F1928933BFB6AB474FA81D8C006AA11B76461ED98DB4DCB95D7772E3D15C2A29
+F116DF0437225E8EA1FC5C3997633CD63539069F7788AAB84BC9FA8A1A61316D
+2C0F07D2914A61B0418912B276561540BE5DBC1F7A20241E85ED95BB775E16D4
+1F22262C8128967F53031EBA86D0A2184DEB01D51D4F7E15BADE50B7DE246C05
+38B9B49D264A4B29A372FCBF57323308C71A0E14748850B56D51BB932B1DCAA3
+A1469E84536A42B0D8B55A0292C8050D6CD1BFDCC4D287B15082801EA40AB8DE
+CD8628D0E1252DBC57333D74841246D7A6392F158EAA9FD5BC6CB2E535DDBEAB
+F16FF32617952596187203D41342DF7FC1E0CAEA2EE8F012236DAB0208A626E4
+5FC5EC819580727F7890BF2B114523A3006CFE3B67F19419A009826C635C4B2C
+10CED88293D753A6FC63C5C17A424E911169E316DAC022EE37A5F93A6D7BB446
+5402EDB1F758FFCCBE83F7842CF09E84DAC17CC8A5D0521CDBCA8B320D90F24F
+32AA9B86DAFD068FB0D234C94EC0889134DCCF83F8B0C89F67D660EC4D6E2B34
+D4CC5E094049ACFA09767E7C0AFD789767D0660825FC94878BFCA40105597194
+BDF88A8636D180BAFEF635601218B47E1242497D1E90E7A0F1098FE4161E6C7D
+D1E920DBECEDE54FD9D8EA40E25881F0E31C3FECCA22ED507DF496122D25AF56
+E6E690952EC746BE46F4D228D54C634B04D036DD33252E5A5B6309E559EB9CF9
+DD17101EF262D5FEBE9C207007A2E7F3BCCCE3243333F0A79C1779E727414D60
+B451BDC14BA3FFCBB9D49641DE51BE92C7D136C2C910559A6EE106DC05CB4890
+322BC12FD592C4789FD8368DFB7827A67FF8FADE351646D0B4B35F74A924E229
+DDCBE1B5D24D049CBD4424B123B6AAE7F5AF8AEEC7F862431541F6B755A272CE
+177CAB058D297A35041646435664056644B2422B2CB890080C3BEC3C52C6363C
+B843F24977C482C7A37CF18DEDE4E8FECB280E86263BBB5BD413A9BE19329817
+EC424B1AEEEF713A52D68143AF0DC2B02F293425F041A616D148ABED9E7FA7A0
+AE99B5762A52E38BE8E7148EF22808632CBDEA8613948D8E3D576580FA3F4B3E
+0B5F9E1B240BC7D0744FB1D121E3231994DEDE24B919A72869C15B839DDD9917
+D3BF2466E673B142E4B527B17893D3405603E1271E2D005A6318DC98CFA3D25C
+3A7B59A16B1D6C5C31F267B964E951DFDB1143F8D9005E378A3D4F5B072911CC
+814C191A806A989BC176544E45BA9A5CB16281394572CC6275A96865BEAB6F9D
+06DD94701FB30DEAC86652473C182379F43877528F28AB0B5FD9669347003055
+2E6169601690053E00E18BE7FA7143DA61EA74326BE8122E56485E65B0572821
+BBE05576C1D9706EE219A8377338E93DFFFEE5E37E6054412A9B875A092C948C
+C4663F161AEBAFBB964859E9056D42B76A806A2B1C435318459E272DD51339B6
+B16BC73787ADF1D7A2CD630CA98F8B6C479693BA427D7096E83AAC35B6D1CCAE
+B5879B03B706C6AA3FC1A1D180315A2252DE59C45E9429E107D7A73A645AB182
+6FCD53B44907874A1B286BC50D9051160CBFB374856E59C961C376C3B553454B
+108BC5FFAC60EB8C7426A70A1FFC2CE80D8989A3EEC43A9AD51771D48884BB32
+1749E328FDCCD4FDD104E80EB6813FB98D83139791DD2A2C9ED7A70BC458DB09
+5D73B21DAF0FFC110324B8F2BC145FA61962C5D78B4D6C8D014D6938AF09F36A
+2A3E5634A140A1A525BFCAA00616AA1D8195A8A68E4260B8ADDDF789B131C074
+01EF325E06AEA94A459CE1F51F312C3C19142528AC941551F324BE2653BBCF38
+46DDC6BDF7EF77D68C32F4DE7D8604E63A632AB2108086C77B94DC31D926D1E7
+1D3653D8B35CC5AC431368B7B2D7C3A565FEE9D9B2E366F265A627FE7B4378C4
+81A0C4DBDDE6F7DD940F08764D307A5B09097320431AA76A41C4ADE92C260588
+522B197B802DC488FA2169BC2E13AE36A98591E1673C1CAC29B4E0E15D2227E7
+80928CA4C060FECE89B014C3FB6A42313FC438E448DDD73CB66ADEF1FACF2E2A
+4601F76ECFF658D97BC22C765C0B1B04B03EE08A41E2C778A8E5954CABE7B386
+BFC2DC7C60E720BAB2B1A726D8AF4933355F21731FD7C930F31720C1E16F6C01
+C0C8B6747961B605CDFFB02FD6D6A7758B1097AA1D47C6DA9DBF0F87E55672AD
+FE93D17DA6FE7B2E3A5360C5BF0C3F4715165CC6748BC95CFA74D4AD57B481B9
+3784040A6B1BB028CA9F69B6AE52CFF8FF3FD169FDE1A85B52651D99B4042E72
+D5E952BD9F976EFA21C935F2ECBF5C8D4D8BA0AA97DD1458650F6DB9C80B3B21
+F60761C150944567DE98E9DED3BB831A57DE2A5C8CC4417D0D02BF24EB09C2A7
+B8262EFB223FDEDB45E75E2559190060C676B43721B5894EA52440AAAF72B77D
+42138ABF062B92255DCE006EC18492D4CC0CA6FE753E8851305B967B4B01D481
+85D8A1B78CAEBEB99ED44E5BD7B0CD242B46F8C3C4B1DCE6B103497A89D0C48A
+FCA2DDB3CBEF2CC076673FE28DD397F4975BF03EABF542C8ECAE8311822A6564
+14C20DE022F9AFBF672B31D124F96E2475073E6B53F8032685A45AC7181B0158
+A6FDBF2DFCC9D842D42E098BC02AEFABA6D571821604BBDC389E80931BC8A767
+A92DC7CE49EDDC3C89521CD3AF5AEFF121EAA27B74A37BF043B1AC045A0D9A38
+8767D85D15DBF0F5ABC495207AA3AD05BE201642206044F470EFDF4A8D52C050
+D600F04B97ACED3F7FC8A56E7640A6A4AAAE1816F3A77D887A378AA0B130B509
+72A8ADBD5808E9BBB7F83216D995EC74FD168D5A3D171AB9C52A0E21169172A2
+9C680D926D2327A314835700D399CE25A8311D22D1127B43CB8A9D900133C4D1
+CA1F71C4331F37DBE7F26650B4D512C5E192635CD8CF4C560AB5BFFE0671424D
+456BA00271A643AA2477DAB650F682D89B932BEBB5A66EBC9072A469EE78E0B3
+86F58B1BA76F31B978C167A0E5CE18889C4DA968CEF94EFA70060960E1D53535
+17230FC0C8AA0E878AD3D6E306533800DB46BF785219872DBCAAEC33A236A8AA
+E86D9C9316CEE8D75888217824D56420EF7AFE70E18C6AC6E7E71161373D574A
+D399548B201868F2D1B2DEC136ECFEFE25C307630331F2F893FE36E0CCC8113F
+9D7A6DE87881BC713E6B438F1E804B2C6F00DAA4FF0A33F2B051EE2655BD8583
+9AA5BB2F7A4AD400F34963FA1BD28D5AB933EAE84C047D636122BE431DB097BC
+85D7CB6C30B09333A567F7DFC0A0482E4373512294562297BACC2F53E2BF1718
+4E23AA470CB1879235832D66846522B8EC1536E17172B8DA9DEB14877C9405D4
+531E548E8ACEBE66D41992C0D0A25CE7FE2641DC2F06A1399C864A7C1155DDD4
+20A2D292688E6426B147572C2CD3706C96C22C977A4A6C4A30A54C7DDD50DCB9
+7BBC5C0B744CD85DF88166B916C0F1909A38742C6BCB58045C4223B70F4B3BAD
+74EBBE8395A3F64A14D6838554EB6AB7CE417DD7448EBB4F3EE10B13B454C4EA
+949AF16A87E72ED21159408171A4847199C5E403FADCC67D0FFA5A58452ADC67
+FC3C597826B20BD85A1AC7BFA715531D99DDA5155185E3FBF29DDF559A103F75
+538AC8CC0B4C4041288E89B387F6ABE04F90E8CEB2099293D1DC4FE00647C80C
+5DBE532282708D050BC6A226F45DBC314D109554BB25CF04770ED4874EED1B1F
+E18E006F254BB4297C435B416A9AFC6FC51568D89317BCDD9885E2D1ED15F4F7
+AF253B5FAEE5CC44BF9D860982B7F4706C8B8018E6488E337B773A4A7AAF9998
+6796B30721736F7AB66CE22EBEF616FE5847929A2E08D64DA7E912F4CA899F73
+6A0A1F1F2163886A7C5E6999D98AB9708EADE2030050B2D05AEF0AA9447F8698
+7C191DD81DB9131D0DC19BB7CD0CD9A60AEBBA3FAD203CA51B6FECB75EC91C14
+EE75CBB49420594C7B9A56EDE29343B5D1817AFF27B71F0BF2B8D59D8198C2B7
+A9F4091A085C973412051D6ACCD3F0B37D502D8FE193CD5E42769D1F497847CF
+B986233F0DE24FE2F4ED03BFA105DD04182887D3C6CB827A1D5B00170B8DFA5E
+EB1BE4FEEACCC82A5BB4BCE2C8320CBCF6EEBFC955025F3980763F51170EA440
+C2144AD36893326E5A3DC214AF59FF505E8168593AB9543FC6690F0D63262FBB
+978B833906430E5D2DC99D729D1CCE7A0A91725537BCF91DFBF8073EEE494A2B
+E38F1AA3D81C602D05FAD3CA3A8A5A7E1F0A7F7CA736B561F3C29275E68D01E1
+FA253D089243988C475ABF8077C71DD93F1414E69FAEE565F42C863C61BE554B
+44C92919D78D898E70510D9EA1FCAB702FD53337263606A777A001224390AA6C
+D8CA04FE8F34D61F03E083D0A050EA3985ED026479142A7184494C615A7AC675
+97B6196C56F2034850A77938B7585B18AEEA2D249E41D25302DFF2416FCADC13
+E69030FD907778821C66F93220A31991386640AC2315A5B7DB80B4AE91A6A4D7
+8BC19E632295CFECA8D65B4045C5A7614852CD48686A27D61F6DC6ED6120D30D
+92C97F4D0B5135823FA4A59DFB7633
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi)
+@start /Fa 130[55 1[55 123[{ T1Encoding ReEncodeFont }2
+116.231 /SFRM1440 rf /Fb 133[34 41 41 55 41 43 30 30
+30 41 43 38 43 64 21 41 23 21 43 38 23 34 43 34 43 38
+8[58 4[43 57 1[52 60 58 70 3[28 58 3[59 1[54 58 7[38
+38 38 38 38 38 38 38 38 38 3[21 31[43 12[{}50 74.7198
+/CMR9 rf /Fc 197[21 58[{}1 74.7198 /CMMI9 rf /Fd 134[39
+39 2[39 39 39 39 2[39 39 39 39 2[39 39 1[39 39 39 2[39
+19[39 27[39 39 2[39 45[{}20 74.7198 /CMSLTT10 rf /Fe
+129[39 39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39
+39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39
+39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 1[39 39
+39 39 39 39 39 39 39 39 39 39 1[39 39 39 5[39 39 39 39
+39 39 39 39 39 1[39 39 39 39 39 1[39 39 1[39 33[{}81
+74.7198 /CMTT9 rf /Ff 167[62 3[60 46 2[57 1[62 76 52
+1[43 1[62 65 54 1[63 60 67[{}13 83.022 /CMR10 rf /Fg
+135[67 2[67 1[50 2[61 69 5[33 1[70 2[68 52[60 47[{}9
+109.174 /CMCSC10 rf /Fh 140[56 3[56 56 1[56 2[56 56 56
+57[56 45[{}8 109.091 /CMTT12 rf /Fi 130[45 1[45 123[{
+ T1Encoding ReEncodeFont }2 91.3242 /SFRM1095 rf /Fj
+134[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 1[48 2[48 3[48 3[48 1[48 1[48
+1[48 48 48 1[48 48 48 1[48 48 48 48 1[48 6[48 6[48 48
+48 48 2[48 5[48 39[{}49 90.9091 /CMSLTT10 rf /Fk 134[65
+65 89 65 68 48 48 50 65 68 61 68 102 34 65 1[34 68 61
+37 56 68 55 68 60 7[93 1[127 1[94 85 68 92 92 84 92 96
+116 74 96 1[46 96 96 77 81 94 89 87 93 1[58 5[61 61 61
+61 61 61 61 61 61 61 1[34 41 34 31[68 72 11[{}62 109.091
+/CMBX12 rf /Fl 135[42 1[42 1[30 37 38 1[46 46 51 74 23
+2[28 1[42 1[42 46 42 1[46 51[33 32[51 12[{}18 90.9091
+/CMTI10 rf /Fm 135[56 2[56 1[42 55 1[51 58 56 68 47 2[27
+1[58 49 51 57 54 53 56 8[74 4[56 2[67 77 5[37 22[50 2[50
+1[34 45[{}25 90.9091 /CMCSC10 rf /Fn 197[25 58[{}1 90.9091
+/CMMI10 rf /Fo 197[33 58[{}1 119.552 /CMMI12 rf /Fp 134[85
+85 1[85 90 63 64 66 1[90 81 90 134 45 1[49 45 90 81 49
+74 90 72 90 78 10[122 124 112 90 120 3[126 153 97 1[83
+60 126 127 101 106 124 117 115 122 7[81 81 81 81 81 81
+81 81 81 81 35[90 94 11[{}52 143.462 /CMBX12 rf /Fq 200[0
+21[91 17[45 1[91 12[71{}5 90.9091 /CMSY10 rf /Fr 133[40
+48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51
+45 28 40 51 40 51 45 7[68 68 93 1[68 66 51 67 1[62 71
+68 83 57 71 1[33 68 71 59 62 69 66 64 68 12[45 45 45
+45 3[30 8[45 21[76 1[51 53 11[{}57 90.9091 /CMSL10 rf
+/Fs 132[67 1[71 71 97 71 75 52 53 55 1[75 67 75 112 37
+71 41 37 75 67 41 61 75 60 75 65 3[37 1[37 1[102 102
+139 102 103 94 75 100 101 92 101 105 128 81 105 69 50
+105 106 85 88 103 97 96 102 105 64 4[37 67 67 67 67 67
+67 67 67 67 67 1[37 1[37 1[67 5[67 112 1[41 20[75 78
+11[{}73 119.552 /CMBX12 rf /Ft 129[48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 33[{}93
+90.9091 /CMTT10 rf /Fu 131[91 45 40 48 48 66 48 51 35
+36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51
+45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71
+68 83 57 71 47 33 68 71 59 62 69 66 64 68 71 43 1[71
+1[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 1[45
+35 35 25 71 76 45 76 45 25 18[76 51 51 53 11[{}91 90.9091
+/CMR10 rf /Fv 138[108 1[76 79 3[108 1[54 3[108 1[59 88
+1[86 1[94 14[144 4[184 10[138 66[{}13 172.154 /CMBX12
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%BeginPaperSize: Letter
+/setpagedevice where
+{ pop << /PageSize [612 792] >> setpagedevice }
+{ /letter where { pop letter } if }
+ifelse
+%%EndPaperSize
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 150 1318 a Fv(Bash)64 b(Reference)j(Man)-5
+b(ual)p 150 1385 3600 34 v 2361 1481 a Fu(Reference)31
+b(Do)s(cumen)m(tation)i(for)d(Bash)2428 1589 y(Edition)h(5.0,)g(for)f
+Ft(Bash)g Fu(V)-8 b(ersion)31 b(5.0.)3145 1697 y(Decem)m(b)s(er)g(2018)
+150 4927 y Fs(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11
+b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068
+y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11
+b(oundation)p 150 5141 3600 17 v eop end
+%%Page: 2 2
+TeXDict begin 2 1 bop 150 4279 a Fu(This)35 b(text)h(is)g(a)g(brief)f
+(description)h(of)f(the)h(features)g(that)g(are)g(presen)m(t)g(in)f
+(the)h(Bash)f(shell)h(\(v)m(ersion)150 4389 y(5.0,)c(7)e(Decem)m(b)s
+(er)i(2018\).)150 4523 y(This)h(is)h(Edition)g(5.0,)i(last)e(up)s
+(dated)f(7)h(Decem)m(b)s(er)g(2018,)j(of)d Fr(The)f(GNU)h(Bash)g
+(Reference)h(Man)m(ual)p Fu(,)150 4633 y(for)30 b Ft(Bash)p
+Fu(,)g(V)-8 b(ersion)31 b(5.0.)150 4767 y(Cop)m(yrigh)m(t)602
+4764 y(c)577 4767 y Fq(\015)f Fu(1988{2018)35 b(F)-8
+b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390
+4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8
+b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s(cumen)m(t)f
+(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8
+b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26
+b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43
+b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8
+b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46
+b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er)31
+b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8
+b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390
+5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8
+b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end
+%%Page: -1 3
+TeXDict begin -1 2 bop 3725 -116 a Fu(i)150 299 y Fp(T)-13
+b(able)53 b(of)h(Con)l(ten)l(ts)150 649 y Fs(1)135 b(In)l(tro)t
+(duction)31 b Fo(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)h(:)f(:)g(:)44 b Fs(1)275 786 y Fu(1.1)92
+b(What)31 b(is)f(Bash?)10 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)23 b Fu(1)275 896 y(1.2)92 b(What)31
+b(is)f(a)h(shell?)22 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)35 b Fu(1)150 1147 y Fs(2)135 b(De\014nitions)31
+b Fo(:)20 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)
+f(:)h(:)f(:)g(:)h(:)43 b Fs(3)150 1425 y(3)135 b(Basic)45
+b(Shell)g(F)-11 b(eatures)19 b Fo(:)h(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+h(:)f(:)32 b Fs(5)275 1562 y Fu(3.1)92 b(Shell)30 b(Syn)m(tax)13
+b Fn(:)j(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+27 b Fu(5)399 1671 y(3.1.1)93 b(Shell)30 b(Op)s(eration)14
+b Fn(:)h(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)28 b Fu(5)399
+1781 y(3.1.2)93 b(Quoting)23 b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)37 b Fu(6)524 1890 y(3.1.2.1)93
+b(Escap)s(e)30 b(Character)19 b Fn(:)d(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)33 b Fu(6)524
+2000 y(3.1.2.2)93 b(Single)31 b(Quotes)16 b Fn(:)g(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)30
+b Fu(6)524 2110 y(3.1.2.3)93 b(Double)31 b(Quotes)14
+b Fn(:)i(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)28 b Fu(6)524 2219 y(3.1.2.4)93
+b(ANSI-C)30 b(Quoting)15 b Fn(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)29 b Fu(6)524
+2329 y(3.1.2.5)93 b(Lo)s(cale-Sp)s(eci\014c)32 b(T)-8
+b(ranslation)17 b Fn(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)30
+b Fu(7)399 2438 y(3.1.3)93 b(Commen)m(ts)14 b Fn(:)i(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)28 b Fu(7)275 2548 y(3.2)92
+b(Shell)30 b(Commands)9 b Fn(:)15 b(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)23 b Fu(8)399 2658 y(3.2.1)93 b(Simple)30
+b(Commands)15 b Fn(:)f(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)29 b Fu(8)399
+2767 y(3.2.2)93 b(Pip)s(elines)26 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)40 b Fu(8)399 2877 y(3.2.3)93
+b(Lists)30 b(of)h(Commands)23 b Fn(:)14 b(:)i(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)36
+b Fu(9)399 2986 y(3.2.4)93 b(Comp)s(ound)28 b(Commands)12
+b Fn(:)i(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)25 b Fu(9)524 3096 y(3.2.4.1)93 b(Lo)s(oping)30
+b(Constructs)16 b Fn(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)29 b Fu(10)524 3205 y(3.2.4.2)93 b(Conditional)31
+b(Constructs)25 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+39 b Fu(11)524 3315 y(3.2.4.3)93 b(Grouping)30 b(Commands)22
+b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)36
+b Fu(14)399 3425 y(3.2.5)93 b(Copro)s(cesses)26 b Fn(:)15
+b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)39 b Fu(15)399
+3534 y(3.2.6)93 b(GNU)31 b(P)m(arallel)13 b Fn(:)k(:)f(:)f(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)26 b Fu(16)275 3644 y(3.3)92 b(Shell)30
+b(F)-8 b(unctions)16 b Fn(:)g(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)29 b Fu(17)275 3753 y(3.4)92 b(Shell)30 b(P)m(arameters)c
+Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)38 b
+Fu(19)399 3863 y(3.4.1)93 b(P)m(ositional)32 b(P)m(arameters)8
+b Fn(:)17 b(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)21 b Fu(21)399 3973 y(3.4.2)93 b(Sp)s(ecial)30
+b(P)m(arameters)c Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)37 b Fu(21)275 4082
+y(3.5)92 b(Shell)30 b(Expansions)24 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)38 b Fu(22)399 4192 y(3.5.1)93 b(Brace)31
+b(Expansion)9 b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)22 b
+Fu(23)399 4301 y(3.5.2)93 b(Tilde)30 b(Expansion)18 b
+Fn(:)d(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)31 b Fu(23)399 4411 y(3.5.3)93
+b(Shell)30 b(P)m(arameter)i(Expansion)26 b Fn(:)15 b(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)39 b Fu(24)399 4521 y(3.5.4)93
+b(Command)29 b(Substitution)20 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)33 b Fu(30)399 4630
+y(3.5.5)93 b(Arithmetic)31 b(Expansion)c Fn(:)15 b(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)40 b
+Fu(31)399 4740 y(3.5.6)93 b(Pro)s(cess)30 b(Substitution)15
+b Fn(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)28 b Fu(31)399 4849 y(3.5.7)93 b(W)-8
+b(ord)31 b(Splitting)d Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41
+b Fu(31)399 4959 y(3.5.8)93 b(Filename)32 b(Expansion)22
+b Fn(:)14 b(:)h(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)35 b Fu(32)524 5068 y(3.5.8.1)93 b(P)m(attern)31
+b(Matc)m(hing)14 b Fn(:)k(:)d(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)27 b Fu(33)399 5178 y(3.5.9)93
+b(Quote)31 b(Remo)m(v)-5 b(al)17 b Fn(:)g(:)e(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)30
+b Fu(34)275 5288 y(3.6)92 b(Redirections)14 b Fn(:)i(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)27 b Fu(34)p
+eop end
+%%Page: -2 4
+TeXDict begin -2 3 bop 3699 -116 a Fu(ii)399 83 y(3.6.1)93
+b(Redirecting)31 b(Input)11 b Fn(:)j(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)24
+b Fu(35)399 193 y(3.6.2)93 b(Redirecting)31 b(Output)15
+b Fn(:)f(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)28 b Fu(35)399 302 y(3.6.3)93 b(App)s(ending)28
+b(Redirected)k(Output)20 b Fn(:)14 b(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)33 b Fu(36)399 412 y(3.6.4)93 b(Redirecting)31 b(Standard)e(Output)h
+(and)f(Standard)h(Error)16 b Fn(:)e(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)29
+b Fu(36)399 521 y(3.6.5)93 b(App)s(ending)28 b(Standard)i(Output)f(and)
+h(Standard)f(Error)d Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40
+b Fu(36)399 631 y(3.6.6)93 b(Here)31 b(Do)s(cumen)m(ts)15
+b Fn(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)27 b Fu(36)399 741 y(3.6.7)93
+b(Here)31 b(Strings)16 b Fn(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29
+b Fu(37)399 850 y(3.6.8)93 b(Duplicating)32 b(File)f(Descriptors)25
+b Fn(:)15 b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)37
+b Fu(37)399 960 y(3.6.9)93 b(Mo)m(ving)32 b(File)f(Descriptors)d
+Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+40 b Fu(37)399 1069 y(3.6.10)93 b(Op)s(ening)29 b(File)j(Descriptors)f
+(for)f(Reading)h(and)f(W)-8 b(riting)29 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f
+(:)41 b Fu(37)275 1179 y(3.7)92 b(Executing)31 b(Commands)24
+b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)38 b Fu(38)399 1289 y(3.7.1)93
+b(Simple)30 b(Command)f(Expansion)11 b Fn(:)k(:)g(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)24 b Fu(38)399 1398 y(3.7.2)93 b(Command)29
+b(Searc)m(h)i(and)f(Execution)15 b Fn(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+28 b Fu(38)399 1508 y(3.7.3)93 b(Command)29 b(Execution)i(En)m
+(vironmen)m(t)17 b Fn(:)e(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)30 b Fu(39)399
+1617 y(3.7.4)93 b(En)m(vironmen)m(t)26 b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)39 b Fu(40)399 1727 y(3.7.5)93 b(Exit)31
+b(Status)16 b Fn(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)29
+b Fu(40)399 1836 y(3.7.6)93 b(Signals)23 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)36 b Fu(41)275
+1946 y(3.8)92 b(Shell)30 b(Scripts)12 b Fn(:)i(:)i(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)25 b Fu(41)150 2197
+y Fs(4)135 b(Shell)45 b(Builtin)g(Commands)14 b Fo(:)20
+b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)27 b Fs(43)275 2334 y Fu(4.1)92 b(Bourne)30
+b(Shell)g(Builtins)16 b Fn(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)29
+b Fu(43)275 2443 y(4.2)92 b(Bash)30 b(Builtin)h(Commands)13
+b Fn(:)h(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)26 b Fu(50)275 2553 y(4.3)92 b(Mo)s(difying)30
+b(Shell)g(Beha)m(vior)18 b Fn(:)f(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)31 b Fu(61)399
+2663 y(4.3.1)93 b(The)30 b(Set)g(Builtin)14 b Fn(:)i(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)27 b Fu(61)399 2772 y(4.3.2)93 b(The)30 b(Shopt)f(Builtin)21
+b Fn(:)16 b(:)g(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)34 b Fu(65)275 2882 y(4.4)92
+b(Sp)s(ecial)30 b(Builtins)9 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)22 b Fu(71)150 3132 y Fs(5)135 b(Shell)45
+b(V)-11 b(ariables)11 b Fo(:)20 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)24 b Fs(73)275 3269 y Fu(5.1)92
+b(Bourne)30 b(Shell)g(V)-8 b(ariables)10 b Fn(:)17 b(:)e(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+23 b Fu(73)275 3379 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)26
+b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)38
+b Fu(73)150 3630 y Fs(6)135 b(Bash)44 b(F)-11 b(eatures)32
+b Fo(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+44 b Fs(85)275 3767 y Fu(6.1)92 b(In)m(v)m(oking)31 b(Bash)16
+b Fn(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)29
+b Fu(85)275 3876 y(6.2)92 b(Bash)30 b(Startup)g(Files)f
+Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 b Fu(87)275
+3986 y(6.3)92 b(In)m(teractiv)m(e)32 b(Shells)19 b Fn(:)d(:)f(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)32 b Fu(88)399 4095 y(6.3.1)93
+b(What)31 b(is)f(an)h(In)m(teractiv)m(e)h(Shell?)25 b
+Fn(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)38
+b Fu(89)399 4205 y(6.3.2)93 b(Is)30 b(this)g(Shell)g(In)m(teractiv)m
+(e?)22 b Fn(:)d(:)c(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)35 b Fu(89)399 4315 y(6.3.3)93 b(In)m(teractiv)m(e)33
+b(Shell)d(Beha)m(vior)11 b Fn(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)24 b Fu(89)275 4424 y(6.4)92 b(Bash)30
+b(Conditional)h(Expressions)10 b Fn(:)k(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)23 b Fu(90)275 4534 y(6.5)92
+b(Shell)30 b(Arithmetic)13 b Fn(:)k(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)26 b Fu(92)275 4643 y(6.6)92 b(Aliases)20 b Fn(:)d(:)e(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)33
+b Fu(93)275 4753 y(6.7)92 b(Arra)m(ys)25 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)38
+b Fu(94)275 4863 y(6.8)92 b(The)29 b(Directory)j(Stac)m(k)16
+b Fn(:)h(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29 b Fu(96)399 4972
+y(6.8.1)93 b(Directory)32 b(Stac)m(k)f(Builtins)23 b
+Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+36 b Fu(96)275 5082 y(6.9)92 b(Con)m(trolling)31 b(the)g(Prompt)13
+b Fn(:)h(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)25 b Fu(97)275 5191 y(6.10)92
+b(The)30 b(Restricted)h(Shell)11 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)24
+b Fu(99)275 5301 y(6.11)92 b(Bash)31 b(POSIX)e(Mo)s(de)17
+b Fn(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)30 b Fu(99)p eop end
+%%Page: -3 5
+TeXDict begin -3 4 bop 3674 -116 a Fu(iii)150 83 y Fs(7)135
+b(Job)45 b(Con)l(trol)35 b Fo(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)48 b Fs(103)275 220 y
+Fu(7.1)92 b(Job)30 b(Con)m(trol)h(Basics)23 b Fn(:)16
+b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)36 b Fu(103)275 330 y(7.2)92
+b(Job)30 b(Con)m(trol)h(Builtins)11 b Fn(:)k(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)24
+b Fu(104)275 439 y(7.3)92 b(Job)30 b(Con)m(trol)h(V)-8
+b(ariables)26 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fu(106)150
+690 y Fs(8)135 b(Command)45 b(Line)g(Editing)11 b Fo(:)20
+b(:)g(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)k Fs(107)275 827 y Fu(8.1)92 b(In)m(tro)s(duction)30
+b(to)h(Line)f(Editing)12 b Fn(:)k(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)25 b Fu(107)275 936 y(8.2)92
+b(Readline)31 b(In)m(teraction)14 b Fn(:)j(:)e(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)27
+b Fu(107)399 1046 y(8.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)13
+b Fn(:)j(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)26
+b Fu(108)399 1156 y(8.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i
+(Commands)13 b Fn(:)i(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)27
+b Fu(108)399 1265 y(8.2.3)93 b(Readline)31 b(Killing)g(Commands)24
+b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)38
+b Fu(109)399 1375 y(8.2.4)93 b(Readline)31 b(Argumen)m(ts)17
+b Fn(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)30 b Fu(109)399 1484 y(8.2.5)93 b(Searc)m(hing)31
+b(for)f(Commands)f(in)h(the)h(History)15 b Fn(:)g(:)h(:)f(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)28 b Fu(109)275
+1594 y(8.3)92 b(Readline)31 b(Init)f(File)8 b Fn(:)17
+b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)22 b Fu(110)399 1704
+y(8.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)21
+b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)34
+b Fu(110)399 1813 y(8.3.2)93 b(Conditional)31 b(Init)f(Constructs)14
+b Fn(:)h(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)27
+b Fu(118)399 1923 y(8.3.3)93 b(Sample)30 b(Init)g(File)20
+b Fn(:)d(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)33 b Fu(119)275 2032 y(8.4)92
+b(Bindable)30 b(Readline)h(Commands)19 b Fn(:)c(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)33 b Fu(122)399 2142 y(8.4.1)93
+b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)16 b Fn(:)h(:)e(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29 b Fu(122)399
+2252 y(8.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f
+(History)c Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)39 b Fu(123)399 2361 y(8.4.3)93 b(Commands)29 b(F)-8
+b(or)31 b(Changing)f(T)-8 b(ext)9 b Fn(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)23 b Fu(124)399 2471 y(8.4.4)93 b(Killing)31
+b(And)e(Y)-8 b(anking)10 b Fn(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)24 b Fu(126)399
+2580 y(8.4.5)93 b(Sp)s(ecifying)30 b(Numeric)g(Argumen)m(ts)25
+b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)39 b Fu(127)399
+2690 y(8.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8
+b(or)31 b(Y)-8 b(ou)20 b Fn(:)c(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)33
+b Fu(127)399 2800 y(8.4.7)93 b(Keyb)s(oard)29 b(Macros)9
+b Fn(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)22 b Fu(129)399 2909 y(8.4.8)93
+b(Some)30 b(Miscellaneous)j(Commands)14 b Fn(:)f(:)j(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)27 b Fu(129)275 3019 y(8.5)92 b(Readline)31 b(vi)f(Mo)s(de)e
+Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)41 b Fu(131)275
+3128 y(8.6)92 b(Programmable)30 b(Completion)25 b Fn(:)15
+b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)37
+b Fu(132)275 3238 y(8.7)92 b(Programmable)30 b(Completion)h(Builtins)14
+b Fn(:)i(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)28 b Fu(134)275
+3347 y(8.8)92 b(A)30 b(Programmable)h(Completion)g(Example)8
+b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)22 b Fu(138)150 3598 y
+Fs(9)135 b(Using)45 b(History)h(In)l(teractiv)l(ely)28
+b Fo(:)22 b(:)d(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)41 b Fs(141)275 3735 y Fu(9.1)92 b(Bash)30 b(History)h(F)-8
+b(acilities)9 b Fn(:)19 b(:)c(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)22 b Fu(141)275
+3845 y(9.2)92 b(Bash)30 b(History)h(Builtins)d Fn(:)16
+b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)h(:)f(:)41 b Fu(141)275 3954 y(9.3)92 b(History)31
+b(Expansion)10 b Fn(:)k(:)h(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)23
+b Fu(143)399 4064 y(9.3.1)93 b(Ev)m(en)m(t)31 b(Designators)19
+b Fn(:)e(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)32 b Fu(144)399 4174 y(9.3.2)93 b(W)-8
+b(ord)31 b(Designators)c Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)39 b Fu(144)399
+4283 y(9.3.3)93 b(Mo)s(di\014ers)15 b Fn(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)29 b Fu(145)p eop end
+%%Page: -4 6
+TeXDict begin -4 5 bop 3677 -116 a Fu(iv)150 83 y Fs(10)135
+b(Installing)46 b(Bash)16 b Fo(:)j(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)h(:)f(:)29 b Fs(147)275 220 y Fu(10.1)92 b(Basic)32
+b(Installation)8 b Fn(:)17 b(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)22
+b Fu(147)275 330 y(10.2)92 b(Compilers)30 b(and)g(Options)17
+b Fn(:)d(:)i(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)30 b Fu(148)275 439 y(10.3)92 b(Compiling)30
+b(F)-8 b(or)32 b(Multiple)f(Arc)m(hitectures)10 b Fn(:)16
+b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)23 b Fu(148)275 549 y(10.4)92
+b(Installation)32 b(Names)22 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)35
+b Fu(148)275 658 y(10.5)92 b(Sp)s(ecifying)30 b(the)g(System)h(T)m(yp)s
+(e)21 b Fn(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)34 b Fu(149)275 768 y(10.6)92 b(Sharing)30 b(Defaults)24
+b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)37 b Fu(149)275
+878 y(10.7)92 b(Op)s(eration)30 b(Con)m(trols)12 b Fn(:)k(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)25 b Fu(149)275 987 y(10.8)92 b(Optional)31
+b(F)-8 b(eatures)19 b Fn(:)d(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)32
+b Fu(150)150 1238 y Fs(App)t(endix)44 b(A)119 b(Rep)t(orting)46
+b(Bugs)21 b Fo(:)f(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)35 b Fs(155)150 1498 y(App)t(endix)44
+b(B)125 b(Ma)7 b(jor)46 b(Di\013erences)g(F)-11 b(rom)284
+1639 y(The)45 b(Bourne)f(Shell)35 b Fo(:)19 b(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)h(:)47 b Fs(156)275 1776 y Fu(B.1)92
+b(Implemen)m(tation)31 b(Di\013erences)h(F)-8 b(rom)31
+b(The)e(SVR4.2)j(Shell)22 b Fn(:)15 b(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)35 b Fu(160)150 2027 y Fs(App)t(endix)44 b(C)124 b(GNU)36
+b(F)-11 b(ree)35 b(Do)t(cumen)l(tation)i(License)25 b
+Fo(:)20 b(:)29 b Fs(162)150 2305 y(App)t(endix)44 b(D)118
+b(Indexes)27 b Fo(:)20 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)40
+b Fs(170)275 2442 y Fu(D.1)92 b(Index)29 b(of)i(Shell)f(Builtin)h
+(Commands)23 b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)38
+b Fu(170)275 2552 y(D.2)92 b(Index)29 b(of)i(Shell)f(Reserv)m(ed)h(W)-8
+b(ords)20 b Fn(:)c(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)34
+b Fu(171)275 2661 y(D.3)92 b(P)m(arameter)31 b(and)f(V)-8
+b(ariable)32 b(Index)27 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)42 b Fu(172)275 2771 y(D.4)92 b(F)-8 b(unction)31
+b(Index)24 b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)38
+b Fu(174)275 2880 y(D.5)92 b(Concept)30 b(Index)15 b
+Fn(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)29 b
+Fu(176)p eop end
+%%Page: 1 7
+TeXDict begin 1 6 bop 3705 -116 a Fu(1)150 299 y Fp(1)80
+b(In)l(tro)t(duction)150 604 y Fs(1.1)68 b(What)45 b(is)g(Bash?)150
+763 y Fu(Bash)38 b(is)g(the)g(shell,)i(or)d(command)h(language)h(in)m
+(terpreter,)h(for)e(the)g Fm(gnu)f Fu(op)s(erating)h(system.)63
+b(The)150 873 y(name)33 b(is)g(an)g(acron)m(ym)g(for)g(the)g(`)p
+Ft(Bourne-Again)27 b(SHell)p Fu(',)32 b(a)i(pun)d(on)i(Stephen)f
+(Bourne,)h(the)g(author)150 983 y(of)f(the)f(direct)h(ancestor)h(of)e
+(the)h(curren)m(t)f(Unix)g(shell)h Ft(sh)p Fu(,)f(whic)m(h)g(app)s
+(eared)g(in)g(the)h(Sev)m(en)m(th)g(Edition)150 1092
+y(Bell)g(Labs)e(Researc)m(h)h(v)m(ersion)g(of)f(Unix.)275
+1221 y(Bash)f(is)g(largely)i(compatible)f(with)f Ft(sh)g
+Fu(and)g(incorp)s(orates)g(useful)g(features)g(from)g(the)g(Korn)g
+(shell)150 1330 y Ft(ksh)37 b Fu(and)h(the)g(C)g(shell)g
+Ft(csh)p Fu(.)64 b(It)38 b(is)g(in)m(tended)g(to)h(b)s(e)f(a)g
+(conforman)m(t)h(implemen)m(tation)h(of)e(the)g Fm(ieee)150
+1440 y(posix)c Fu(Shell)g(and)g(T)-8 b(o)s(ols)35 b(p)s(ortion)f(of)g
+(the)h Fm(ieee)f(posix)f Fu(sp)s(eci\014cation)j(\()p
+Fm(ieee)e Fu(Standard)f(1003.1\).)56 b(It)150 1550 y(o\013ers)31
+b(functional)f(impro)m(v)m(emen)m(ts)i(o)m(v)m(er)g Ft(sh)d
+Fu(for)i(b)s(oth)e(in)m(teractiv)m(e)k(and)d(programming)g(use.)275
+1678 y(While)h(the)g Fm(gnu)f Fu(op)s(erating)h(system)g(pro)m(vides)f
+(other)h(shells,)g(including)f(a)h(v)m(ersion)g(of)g
+Ft(csh)p Fu(,)f(Bash)150 1788 y(is)j(the)h(default)f(shell.)49
+b(Lik)m(e)34 b(other)g Fm(gnu)f Fu(soft)m(w)m(are,)i(Bash)f(is)f(quite)
+h(p)s(ortable.)49 b(It)33 b(curren)m(tly)g(runs)f(on)150
+1897 y(nearly)c(ev)m(ery)g(v)m(ersion)g(of)f(Unix)h(and)e(a)i(few)f
+(other)h(op)s(erating)g(systems)f Fq(\000)g Fu(indep)s(enden)m
+(tly-supp)s(orted)150 2007 y(p)s(orts)j(exist)h(for)f
+Fm(ms-dos)p Fu(,)f Fm(os/2)p Fu(,)i(and)f(Windo)m(ws)g(platforms.)150
+2236 y Fs(1.2)68 b(What)45 b(is)g(a)h(shell?)150 2395
+y Fu(A)m(t)32 b(its)f(base,)h(a)f(shell)g(is)h(simply)e(a)h(macro)h
+(pro)s(cessor)f(that)g(executes)i(commands.)42 b(The)30
+b(term)h(macro)150 2505 y(pro)s(cessor)25 b(means)g(functionalit)m(y)i
+(where)d(text)j(and)d(sym)m(b)s(ols)h(are)h(expanded)e(to)i(create)h
+(larger)f(expres-)150 2615 y(sions.)275 2743 y(A)34 b(Unix)h(shell)g
+(is)f(b)s(oth)g(a)h(command)g(in)m(terpreter)g(and)f(a)h(programming)f
+(language.)55 b(As)35 b(a)g(com-)150 2853 y(mand)30 b(in)m(terpreter,)i
+(the)g(shell)f(pro)m(vides)g(the)h(user)e(in)m(terface)j(to)f(the)f
+(ric)m(h)h(set)g(of)f Fm(gnu)g Fu(utilities.)44 b(The)150
+2962 y(programming)30 b(language)h(features)f(allo)m(w)h(these)g
+(utilities)g(to)g(b)s(e)e(com)m(bined.)41 b(Files)31
+b(con)m(taining)g(com-)150 3072 y(mands)e(can)i(b)s(e)e(created,)j(and)
+d(b)s(ecome)i(commands)f(themselv)m(es.)42 b(These)30
+b(new)f(commands)h(ha)m(v)m(e)i(the)150 3182 y(same)j(status)g(as)g
+(system)g(commands)f(in)g(directories)i(suc)m(h)e(as)h
+Ft(/bin)p Fu(,)g(allo)m(wing)h(users)e(or)g(groups)g(to)150
+3291 y(establish)d(custom)f(en)m(vironmen)m(ts)h(to)g(automate)h(their)
+f(common)f(tasks.)275 3420 y(Shells)j(ma)m(y)h(b)s(e)f(used)g(in)m
+(teractiv)m(ely)k(or)d(non-in)m(teractiv)m(ely)-8 b(.)54
+b(In)33 b(in)m(teractiv)m(e)j(mo)s(de,)f(they)e(accept)150
+3529 y(input)21 b(t)m(yp)s(ed)h(from)g(the)h(k)m(eyb)s(oard.)37
+b(When)22 b(executing)i(non-in)m(teractiv)m(ely)-8 b(,)27
+b(shells)c(execute)g(commands)150 3639 y(read)30 b(from)g(a)h(\014le.)
+275 3768 y(A)41 b(shell)g(allo)m(ws)h(execution)h(of)e
+Fm(gnu)g Fu(commands,)i(b)s(oth)e(sync)m(hronously)f(and)h(async)m
+(hronously)-8 b(.)150 3877 y(The)29 b(shell)g(w)m(aits)i(for)e(sync)m
+(hronous)f(commands)h(to)h(complete)h(b)s(efore)e(accepting)i(more)e
+(input;)g(asyn-)150 3987 y(c)m(hronous)22 b(commands)h(con)m(tin)m(ue)h
+(to)f(execute)h(in)e(parallel)i(with)f(the)f(shell)h(while)g(it)g
+(reads)g(and)f(executes)150 4096 y(additional)35 b(commands.)50
+b(The)33 b Fr(redirection)h Fu(constructs)g(p)s(ermit)f(\014ne-grained)
+g(con)m(trol)i(of)f(the)g(input)150 4206 y(and)40 b(output)f(of)i
+(those)f(commands.)70 b(Moreo)m(v)m(er,)45 b(the)c(shell)f(allo)m(ws)h
+(con)m(trol)h(o)m(v)m(er)g(the)e(con)m(ten)m(ts)i(of)150
+4316 y(commands')30 b(en)m(vironmen)m(ts.)275 4444 y(Shells)k(also)i
+(pro)m(vide)g(a)f(small)h(set)f(of)g(built-in)g(commands)g(\()p
+Fr(builtins)t Fu(\))g(implemen)m(ting)h(function-)150
+4554 y(alit)m(y)i(imp)s(ossible)e(or)g(incon)m(v)m(enien)m(t)j(to)e
+(obtain)g(via)g(separate)g(utilities.)61 b(F)-8 b(or)37
+b(example,)i Ft(cd)p Fu(,)e Ft(break)p Fu(,)150 4663
+y Ft(continue)p Fu(,)28 b(and)i Ft(exec)f Fu(cannot)i(b)s(e)f(implemen)
+m(ted)h(outside)g(of)f(the)h(shell)f(b)s(ecause)h(they)f(directly)h
+(ma-)150 4773 y(nipulate)d(the)g(shell)g(itself.)41 b(The)27
+b Ft(history)p Fu(,)g Ft(getopts)p Fu(,)f Ft(kill)p Fu(,)i(or)g
+Ft(pwd)f Fu(builtins,)h(among)g(others,)h(could)150 4883
+y(b)s(e)34 b(implemen)m(ted)g(in)g(separate)h(utilities,)i(but)d(they)g
+(are)g(more)h(con)m(v)m(enien)m(t)h(to)f(use)f(as)g(builtin)g(com-)150
+4992 y(mands.)40 b(All)31 b(of)f(the)h(shell)f(builtins)g(are)h
+(describ)s(ed)e(in)h(subsequen)m(t)g(sections.)275 5121
+y(While)39 b(executing)h(commands)e(is)g(essen)m(tial,)43
+b(most)c(of)g(the)g(p)s(o)m(w)m(er)f(\(and)g(complexit)m(y\))j(of)e
+(shells)150 5230 y(is)34 b(due)f(to)i(their)f(em)m(b)s(edded)f
+(programming)h(languages.)52 b(Lik)m(e)35 b(an)m(y)f(high-lev)m(el)i
+(language,)h(the)d(shell)150 5340 y(pro)m(vides)c(v)-5
+b(ariables,)32 b(\015o)m(w)e(con)m(trol)i(constructs,)f(quoting,)g(and)
+f(functions.)p eop end
+%%Page: 2 8
+TeXDict begin 2 7 bop 150 -116 a Fu(Chapter)30 b(1:)41
+b(In)m(tro)s(duction)2592 b(2)275 299 y(Shells)21 b(o\013er)i(features)
+f(geared)h(sp)s(eci\014cally)g(for)f(in)m(teractiv)m(e)j(use)d(rather)g
+(than)g(to)h(augmen)m(t)g(the)f(pro-)150 408 y(gramming)32
+b(language.)48 b(These)32 b(in)m(teractiv)m(e)j(features)d(include)g
+(job)g(con)m(trol,)j(command)c(line)i(editing,)150 518
+y(command)d(history)g(and)g(aliases.)42 b(Eac)m(h)31
+b(of)g(these)g(features)f(is)h(describ)s(ed)e(in)h(this)g(man)m(ual.)p
+eop end
+%%Page: 3 9
+TeXDict begin 3 8 bop 3705 -116 a Fu(3)150 299 y Fp(2)80
+b(De\014nitions)150 552 y Fu(These)30 b(de\014nitions)g(are)h(used)e
+(throughout)h(the)h(remainder)f(of)g(this)h(man)m(ual.)150
+720 y Ft(POSIX)240 b Fu(A)27 b(family)g(of)g(op)s(en)f(system)g
+(standards)g(based)g(on)h(Unix.)39 b(Bash)27 b(is)g(primarily)f
+(concerned)630 830 y(with)k(the)h(Shell)f(and)g(Utilities)i(p)s(ortion)
+e(of)h(the)f Fm(posix)g Fu(1003.1)j(standard.)150 995
+y Ft(blank)240 b Fu(A)30 b(space)h(or)g(tab)f(c)m(haracter.)150
+1161 y Ft(builtin)144 b Fu(A)35 b(command)g(that)g(is)g(implemen)m(ted)
+g(in)m(ternally)h(b)m(y)f(the)g(shell)g(itself,)i(rather)d(than)h(b)m
+(y)630 1271 y(an)30 b(executable)i(program)e(somewhere)h(in)f(the)g
+(\014le)h(system.)150 1436 y Ft(control)d(operator)630
+1546 y Fu(A)20 b Ft(token)f Fu(that)i(p)s(erforms)e(a)i(con)m(trol)g
+(function.)37 b(It)21 b(is)f(a)h Ft(newline)d Fu(or)j(one)f(of)h(the)f
+(follo)m(wing:)630 1655 y(`)p Ft(||)p Fu(',)31 b(`)p
+Ft(&&)p Fu(',)f(`)p Ft(&)p Fu(',)h(`)p Ft(;)p Fu(',)g(`)p
+Ft(;;)p Fu(',)f(`)p Ft(;&)p Fu(',)h(`)p Ft(;;&)p Fu(',)f(`)p
+Ft(|)p Fu(',)h(`)p Ft(|&)p Fu(',)f(`)p Ft(\()p Fu(',)h(or)f(`)p
+Ft(\))p Fu('.)150 1821 y Ft(exit)f(status)630 1931 y
+Fu(The)f(v)-5 b(alue)29 b(returned)e(b)m(y)h(a)h(command)f(to)h(its)g
+(caller.)41 b(The)28 b(v)-5 b(alue)29 b(is)f(restricted)h(to)h(eigh)m
+(t)630 2040 y(bits,)h(so)f(the)h(maxim)m(um)f(v)-5 b(alue)31
+b(is)f(255.)150 2206 y Ft(field)240 b Fu(A)27 b(unit)g(of)g(text)h
+(that)g(is)f(the)g(result)g(of)g(one)h(of)f(the)g(shell)g(expansions.)
+40 b(After)27 b(expansion,)630 2315 y(when)e(executing)h(a)g(command,)h
+(the)f(resulting)f(\014elds)g(are)h(used)f(as)h(the)g(command)f(name)
+630 2425 y(and)30 b(argumen)m(ts.)150 2591 y Ft(filename)96
+b Fu(A)30 b(string)h(of)f(c)m(haracters)i(used)e(to)h(iden)m(tify)g(a)f
+(\014le.)150 2756 y Ft(job)336 b Fu(A)31 b(set)h(of)f(pro)s(cesses)g
+(comprising)g(a)g(pip)s(eline,)g(and)g(an)m(y)g(pro)s(cesses)g
+(descended)g(from)f(it,)630 2866 y(that)h(are)g(all)g(in)f(the)h(same)f
+(pro)s(cess)g(group.)150 3031 y Ft(job)f(control)630
+3141 y Fu(A)22 b(mec)m(hanism)g(b)m(y)f(whic)m(h)h(users)f(can)h
+(selectiv)m(ely)i(stop)e(\(susp)s(end\))e(and)h(restart)i(\(resume\))
+630 3251 y(execution)32 b(of)e(pro)s(cesses.)150 3416
+y Ft(metacharacter)630 3526 y Fu(A)23 b(c)m(haracter)h(that,)h(when)d
+(unquoted,)h(separates)h(w)m(ords.)37 b(A)23 b(metac)m(haracter)i(is)e
+(a)g Ft(space)p Fu(,)630 3635 y Ft(tab)p Fu(,)29 b Ft(newline)p
+Fu(,)e(or)i(one)h(of)f(the)h(follo)m(wing)g(c)m(haracters:)42
+b(`)p Ft(|)p Fu(',)29 b(`)p Ft(&)p Fu(',)h(`)p Ft(;)p
+Fu(',)g(`)p Ft(\()p Fu(',)g(`)p Ft(\))p Fu(',)g(`)p Ft(<)p
+Fu(',)f(or)h(`)p Ft(>)p Fu('.)150 3801 y Ft(name)288
+b Fu(A)37 b Ft(word)f Fu(consisting)i(solely)h(of)e(letters,)j(n)m(um)m
+(b)s(ers,)e(and)f(underscores,)h(and)f(b)s(eginning)630
+3910 y(with)23 b(a)g(letter)h(or)f(underscore.)38 b Ft(Name)p
+Fu(s)22 b(are)h(used)f(as)i(shell)f(v)-5 b(ariable)24
+b(and)e(function)h(names.)630 4020 y(Also)31 b(referred)f(to)h(as)f(an)
+h Ft(identifier)p Fu(.)150 4186 y Ft(operator)96 b Fu(A)38
+b Ft(control)28 b(operator)36 b Fu(or)h(a)i Ft(redirection)27
+b(operator)p Fu(.)61 b(See)38 b(Section)g(3.6)h([Redirec-)630
+4295 y(tions],)f(page)f(34,)i(for)d(a)g(list)h(of)f(redirection)h(op)s
+(erators.)58 b(Op)s(erators)35 b(con)m(tain)j(at)f(least)630
+4405 y(one)31 b(unquoted)e Ft(metacharacter)p Fu(.)150
+4570 y Ft(process)f(group)630 4680 y Fu(A)i(collection)k(of)c(related)h
+(pro)s(cesses)g(eac)m(h)g(ha)m(ving)g(the)g(same)f(pro)s(cess)g(group)g
+Fm(id)p Fu(.)150 4846 y Ft(process)e(group)h(ID)630 4955
+y Fu(A)h(unique)g(iden)m(ti\014er)h(that)f(represen)m(ts)h(a)g
+Ft(process)d(group)h Fu(during)g(its)i(lifetime.)150
+5121 y Ft(reserved)d(word)630 5230 y Fu(A)h Ft(word)e
+Fu(that)i(has)f(a)h(sp)s(ecial)g(meaning)f(to)h(the)g(shell.)40
+b(Most)30 b(reserv)m(ed)e(w)m(ords)g(in)m(tro)s(duce)630
+5340 y(shell)j(\015o)m(w)f(con)m(trol)i(constructs,)f(suc)m(h)f(as)g
+Ft(for)g Fu(and)g Ft(while)p Fu(.)p eop end
+%%Page: 4 10
+TeXDict begin 4 9 bop 150 -116 a Fu(Chapter)30 b(2:)41
+b(De\014nitions)2662 b(4)150 299 y Ft(return)29 b(status)630
+408 y Fu(A)h(synon)m(ym)g(for)g Ft(exit)g(status)p Fu(.)150
+568 y Ft(signal)192 b Fu(A)40 b(mec)m(hanism)h(b)m(y)e(whic)m(h)h(a)h
+(pro)s(cess)e(ma)m(y)i(b)s(e)e(noti\014ed)h(b)m(y)g(the)h(k)m(ernel)f
+(of)g(an)g(ev)m(en)m(t)630 677 y(o)s(ccurring)30 b(in)g(the)h(system.)
+150 837 y Ft(special)d(builtin)630 946 y Fu(A)j(shell)f(builtin)g
+(command)h(that)g(has)f(b)s(een)g(classi\014ed)h(as)g(sp)s(ecial)g(b)m
+(y)f(the)h Fm(posix)f Fu(stan-)630 1056 y(dard.)150 1215
+y Ft(token)240 b Fu(A)38 b(sequence)h(of)f(c)m(haracters)h(considered)f
+(a)h(single)g(unit)e(b)m(y)h(the)h(shell.)64 b(It)38
+b(is)g(either)h(a)630 1325 y Ft(word)29 b Fu(or)i(an)f
+Ft(operator)p Fu(.)150 1484 y Ft(word)288 b Fu(A)28 b(sequence)g(of)g
+(c)m(haracters)h(treated)g(as)f(a)g(unit)f(b)m(y)h(the)g(shell.)40
+b(W)-8 b(ords)28 b(ma)m(y)g(not)g(include)630 1594 y(unquoted)i
+Ft(metacharacters)p Fu(.)p eop end
+%%Page: 5 11
+TeXDict begin 5 10 bop 3705 -116 a Fu(5)150 299 y Fp(3)80
+b(Basic)54 b(Shell)e(F)-13 b(eatures)150 601 y Fu(Bash)21
+b(is)g(an)f(acron)m(ym)i(for)e(`)p Ft(Bourne-Again)27
+b(SHell)p Fu('.)37 b(The)20 b(Bourne)g(shell)h(is)g(the)g(traditional)h
+(Unix)f(shell)150 710 y(originally)h(written)f(b)m(y)f(Stephen)g
+(Bourne.)38 b(All)21 b(of)g(the)g(Bourne)f(shell)h(builtin)f(commands)g
+(are)i(a)m(v)-5 b(ailable)150 820 y(in)26 b(Bash,)h(The)f(rules)f(for)h
+(ev)-5 b(aluation)28 b(and)d(quoting)h(are)h(tak)m(en)g(from)f(the)g
+Fm(posix)f Fu(sp)s(eci\014cation)i(for)f(the)150 929
+y(`standard')k(Unix)g(shell.)275 1086 y(This)h(c)m(hapter)i(brie\015y)e
+(summarizes)h(the)h(shell's)f(`building)g(blo)s(c)m(ks':)45
+b(commands,)32 b(con)m(trol)i(struc-)150 1196 y(tures,)k(shell)e
+(functions,)h(shell)g Fl(p)-5 b(ar)g(ameters)p Fu(,)41
+b(shell)36 b(expansions,)i Fl(r)-5 b(e)g(dir)g(e)g(ctions)p
+Fu(,)40 b(whic)m(h)c(are)h(a)f(w)m(a)m(y)h(to)150 1306
+y(direct)31 b(input)e(and)h(output)g(from)g(and)g(to)h(named)f
+(\014les,)g(and)g(ho)m(w)g(the)h(shell)g(executes)g(commands.)150
+1580 y Fs(3.1)68 b(Shell)45 b(Syn)l(tax)150 1740 y Fu(When)40
+b(the)h(shell)g(reads)f(input,)i(it)f(pro)s(ceeds)f(through)g(a)h
+(sequence)g(of)g(op)s(erations.)71 b(If)40 b(the)h(input)150
+1849 y(indicates)31 b(the)f(b)s(eginning)f(of)h(a)g(commen)m(t,)h(the)f
+(shell)g(ignores)g(the)g(commen)m(t)h(sym)m(b)s(ol)f(\(`)p
+Ft(#)p Fu('\),)h(and)e(the)150 1959 y(rest)i(of)f(that)h(line.)275
+2116 y(Otherwise,)h(roughly)f(sp)s(eaking,)i(the)f(shell)g(reads)g(its)
+g(input)f(and)h(divides)f(the)i(input)e(in)m(to)h(w)m(ords)150
+2225 y(and)23 b(op)s(erators,)j(emplo)m(ying)e(the)g(quoting)h(rules)e
+(to)h(select)i(whic)m(h)d(meanings)h(to)h(assign)f(v)-5
+b(arious)23 b(w)m(ords)150 2335 y(and)30 b(c)m(haracters.)275
+2492 y(The)38 b(shell)h(then)f(parses)g(these)h(tok)m(ens)h(in)m(to)f
+(commands)g(and)f(other)h(constructs,)i(remo)m(v)m(es)f(the)150
+2602 y(sp)s(ecial)31 b(meaning)f(of)g(certain)h(w)m(ords)f(or)g(c)m
+(haracters,)i(expands)d(others,)h(redirects)h(input)e(and)g(output)150
+2711 y(as)d(needed,)g(executes)g(the)g(sp)s(eci\014ed)e(command,)j(w)m
+(aits)f(for)f(the)g(command's)g(exit)i(status,)f(and)f(mak)m(es)150
+2821 y(that)31 b(exit)g(status)g(a)m(v)-5 b(ailable)33
+b(for)d(further)f(insp)s(ection)h(or)h(pro)s(cessing.)150
+3043 y Fk(3.1.1)63 b(Shell)41 b(Op)s(eration)150 3190
+y Fu(The)c(follo)m(wing)h(is)f(a)h(brief)e(description)i(of)f(the)g
+(shell's)h(op)s(eration)f(when)f(it)i(reads)f(and)f(executes)j(a)150
+3299 y(command.)h(Basically)-8 b(,)34 b(the)c(shell)h(do)s(es)f(the)h
+(follo)m(wing:)199 3456 y(1.)61 b(Reads)42 b(its)h(input)e(from)h(a)g
+(\014le)h(\(see)g(Section)g(3.8)g([Shell)f(Scripts],)j(page)e(41\),)k
+(from)41 b(a)i(string)330 3566 y(supplied)30 b(as)h(an)g(argumen)m(t)h
+(to)g(the)f Ft(-c)g Fu(in)m(v)m(o)s(cation)i(option)f(\(see)g(Section)g
+(6.1)g([In)m(v)m(oking)g(Bash],)330 3675 y(page)f(85\),)h(or)e(from)g
+(the)h(user's)f(terminal.)199 3821 y(2.)61 b(Breaks)43
+b(the)g(input)f(in)m(to)h(w)m(ords)f(and)g(op)s(erators,)k(ob)s(eying)d
+(the)g(quoting)g(rules)f(describ)s(ed)f(in)330 3931 y(Section)27
+b(3.1.2)i([Quoting],)f(page)f(6.)40 b(These)26 b(tok)m(ens)i(are)f
+(separated)g(b)m(y)f Ft(metacharacters)p Fu(.)36 b(Alias)330
+4040 y(expansion)30 b(is)h(p)s(erformed)d(b)m(y)j(this)f(step)g(\(see)i
+(Section)f(6.6)g([Aliases],)i(page)e(93\).)199 4186 y(3.)61
+b(P)m(arses)35 b(the)g(tok)m(ens)g(in)m(to)h(simple)e(and)g(comp)s
+(ound)f(commands)h(\(see)h(Section)h(3.2)f([Shell)g(Com-)330
+4296 y(mands],)30 b(page)h(8\).)199 4442 y(4.)61 b(P)m(erforms)40
+b(the)h(v)-5 b(arious)40 b(shell)h(expansions)f(\(see)h(Section)g(3.5)g
+([Shell)g(Expansions],)h(page)f(22\),)330 4551 y(breaking)35
+b(the)g(expanded)g(tok)m(ens)h(in)m(to)g(lists)f(of)g(\014lenames)h
+(\(see)g(Section)f(3.5.8)i([Filename)g(Ex-)330 4661 y(pansion],)30
+b(page)h(32\))h(and)e(commands)g(and)g(argumen)m(ts.)199
+4807 y(5.)61 b(P)m(erforms)36 b(an)m(y)i(necessary)f(redirections)g
+(\(see)h(Section)f(3.6)h([Redirections],)i(page)e(34\))g(and)e(re-)330
+4916 y(mo)m(v)m(es)c(the)e(redirection)h(op)s(erators)g(and)f(their)g
+(op)s(erands)f(from)h(the)h(argumen)m(t)f(list.)199 5062
+y(6.)61 b(Executes)31 b(the)g(command)f(\(see)h(Section)g(3.7)h
+([Executing)f(Commands],)f(page)h(38\).)199 5208 y(7.)61
+b(Optionally)40 b(w)m(aits)g(for)f(the)g(command)g(to)h(complete)g(and)
+f(collects)i(its)f(exit)g(status)f(\(see)h(Sec-)330 5317
+y(tion)31 b(3.7.5)h([Exit)f(Status],)g(page)g(40\).)p
+eop end
+%%Page: 6 12
+TeXDict begin 6 11 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(6)150 299
+y Fk(3.1.2)63 b(Quoting)150 446 y Fu(Quoting)32 b(is)h(used)e(to)i
+(remo)m(v)m(e)h(the)e(sp)s(ecial)h(meaning)f(of)h(certain)g(c)m
+(haracters)g(or)f(w)m(ords)g(to)h(the)f(shell.)150 555
+y(Quoting)c(can)f(b)s(e)g(used)f(to)j(disable)e(sp)s(ecial)h(treatmen)m
+(t)h(for)e(sp)s(ecial)h(c)m(haracters,)i(to)e(prev)m(en)m(t)g(reserv)m
+(ed)150 665 y(w)m(ords)i(from)g(b)s(eing)g(recognized)h(as)g(suc)m(h,)f
+(and)g(to)h(prev)m(en)m(t)g(parameter)g(expansion.)275
+795 y(Eac)m(h)22 b(of)g(the)g(shell)g(metac)m(haracters)i(\(see)f
+(Chapter)e(2)i([De\014nitions],)h(page)f(3\))g(has)e(sp)s(ecial)i
+(meaning)150 905 y(to)40 b(the)g(shell)f(and)g(m)m(ust)g(b)s(e)g
+(quoted)g(if)h(it)g(is)f(to)h(represen)m(t)g(itself.)68
+b(When)39 b(the)h(command)f(history)150 1015 y(expansion)i(facilities)j
+(are)e(b)s(eing)f(used)g(\(see)h(Section)h(9.3)f([History)h(In)m
+(teraction],)j(page)c(143\),)47 b(the)150 1124 y Fr(history)30
+b(expansion)h Fu(c)m(haracter,)h(usually)f(`)p Ft(!)p
+Fu(',)g(m)m(ust)f(b)s(e)g(quoted)h(to)g(prev)m(en)m(t)g(history)g
+(expansion.)41 b(See)150 1234 y(Section)22 b(9.1)g([Bash)f(History)h(F)
+-8 b(acilities],)26 b(page)c(141,)j(for)20 b(more)h(details)h
+(concerning)g(history)f(expansion.)275 1364 y(There)37
+b(are)h(three)f(quoting)h(mec)m(hanisms:)56 b(the)38
+b Fr(escap)s(e)g(c)m(haracter)p Fu(,)j(single)d(quotes,)i(and)d(double)
+150 1474 y(quotes.)150 1665 y Fk(3.1.2.1)63 b(Escap)s(e)41
+b(Character)150 1812 y Fu(A)36 b(non-quoted)f(bac)m(kslash)h(`)p
+Ft(\\)p Fu(')g(is)f(the)h(Bash)g(escap)s(e)f(c)m(haracter.)58
+b(It)36 b(preserv)m(es)f(the)h(literal)h(v)-5 b(alue)36
+b(of)150 1921 y(the)27 b(next)g(c)m(haracter)h(that)f(follo)m(ws,)i
+(with)d(the)h(exception)g(of)g Ft(newline)p Fu(.)38 b(If)26
+b(a)h Ft(\\newline)d Fu(pair)i(app)s(ears,)150 2031 y(and)k(the)h(bac)m
+(kslash)g(itself)g(is)g(not)g(quoted,)g(the)f Ft(\\newline)f
+Fu(is)h(treated)i(as)f(a)g(line)g(con)m(tin)m(uation)h(\(that)150
+2140 y(is,)f(it)g(is)f(remo)m(v)m(ed)h(from)f(the)h(input)e(stream)i
+(and)f(e\013ectiv)m(ely)j(ignored\).)150 2331 y Fk(3.1.2.2)63
+b(Single)42 b(Quotes)150 2478 y Fu(Enclosing)24 b(c)m(haracters)h(in)e
+(single)h(quotes)g(\(`)p Ft(')p Fu('\))g(preserv)m(es)g(the)f(literal)i
+(v)-5 b(alue)24 b(of)g(eac)m(h)g(c)m(haracter)h(within)150
+2588 y(the)31 b(quotes.)42 b(A)31 b(single)h(quote)f(ma)m(y)g(not)g(o)s
+(ccur)g(b)s(et)m(w)m(een)g(single)h(quotes,)f(ev)m(en)h(when)d
+(preceded)i(b)m(y)g(a)150 2697 y(bac)m(kslash.)150 2888
+y Fk(3.1.2.3)63 b(Double)42 b(Quotes)150 3035 y Fu(Enclosing)24
+b(c)m(haracters)h(in)f(double)f(quotes)h(\(`)p Ft(")p
+Fu('\))g(preserv)m(es)g(the)g(literal)h(v)-5 b(alue)24
+b(of)g(all)g(c)m(haracters)h(within)150 3145 y(the)34
+b(quotes,)h(with)f(the)g(exception)h(of)f(`)p Ft($)p
+Fu(',)h(`)p Ft(`)p Fu(',)g(`)p Ft(\\)p Fu(',)g(and,)f(when)f(history)g
+(expansion)h(is)g(enabled,)h(`)p Ft(!)p Fu('.)150 3254
+y(When)e(the)h(shell)g(is)g(in)f Fm(posix)g Fu(mo)s(de)g(\(see)i
+(Section)f(6.11)i([Bash)e(POSIX)e(Mo)s(de],)k(page)e(99\),)i(the)e(`)p
+Ft(!)p Fu(')150 3364 y(has)28 b(no)g(sp)s(ecial)h(meaning)g(within)f
+(double)g(quotes,)h(ev)m(en)g(when)f(history)g(expansion)g(is)g
+(enabled.)40 b(The)150 3474 y(c)m(haracters)h(`)p Ft($)p
+Fu(')e(and)g(`)p Ft(`)p Fu(')g(retain)h(their)f(sp)s(ecial)h(meaning)f
+(within)g(double)g(quotes)h(\(see)g(Section)g(3.5)150
+3583 y([Shell)29 b(Expansions],)g(page)h(22\).)41 b(The)28
+b(bac)m(kslash)i(retains)f(its)h(sp)s(ecial)f(meaning)g(only)g(when)f
+(follo)m(w)m(ed)150 3693 y(b)m(y)41 b(one)f(of)h(the)g(follo)m(wing)h
+(c)m(haracters:)63 b(`)p Ft($)p Fu(',)43 b(`)p Ft(`)p
+Fu(',)h(`)p Ft(")p Fu(',)g(`)p Ft(\\)p Fu(',)f(or)e Ft(newline)p
+Fu(.)69 b(Within)41 b(double)f(quotes,)150 3802 y(bac)m(kslashes)25
+b(that)h(are)f(follo)m(w)m(ed)h(b)m(y)e(one)h(of)g(these)g(c)m
+(haracters)h(are)f(remo)m(v)m(ed.)40 b(Bac)m(kslashes)26
+b(preceding)150 3912 y(c)m(haracters)35 b(without)e(a)h(sp)s(ecial)f
+(meaning)h(are)f(left)h(unmo)s(di\014ed.)47 b(A)34 b(double)f(quote)g
+(ma)m(y)h(b)s(e)f(quoted)150 4022 y(within)h(double)h(quotes)g(b)m(y)g
+(preceding)g(it)g(with)g(a)g(bac)m(kslash.)55 b(If)35
+b(enabled,)h(history)f(expansion)g(will)150 4131 y(b)s(e)f(p)s
+(erformed)g(unless)g(an)h(`)p Ft(!)p Fu(')g(app)s(earing)f(in)h(double)
+f(quotes)i(is)f(escap)s(ed)g(using)f(a)h(bac)m(kslash.)55
+b(The)150 4241 y(bac)m(kslash)31 b(preceding)f(the)h(`)p
+Ft(!)p Fu(')f(is)h(not)g(remo)m(v)m(ed.)275 4371 y(The)41
+b(sp)s(ecial)h(parameters)f(`)p Ft(*)p Fu(')h(and)f(`)p
+Ft(@)p Fu(')h(ha)m(v)m(e)g(sp)s(ecial)g(meaning)g(when)f(in)g(double)g
+(quotes)h(\(see)150 4481 y(Section)31 b(3.5.3)h([Shell)f(P)m(arameter)h
+(Expansion],)e(page)h(24\).)150 4672 y Fk(3.1.2.4)63
+b(ANSI-C)40 b(Quoting)150 4819 y Fu(W)-8 b(ords)43 b(of)f(the)h(form)f
+Ft($')p Fj(string)p Ft(')e Fu(are)j(treated)g(sp)s(ecially)-8
+b(.)79 b(The)42 b(w)m(ord)g(expands)f(to)j Fr(string)p
+Fu(,)h(with)150 4928 y(bac)m(kslash-escap)s(ed)f(c)m(haracters)h
+(replaced)f(as)g(sp)s(eci\014ed)f(b)m(y)g(the)g(ANSI)g(C)g(standard.)79
+b(Bac)m(kslash)150 5038 y(escap)s(e)31 b(sequences,)g(if)f(presen)m(t,)
+h(are)g(deco)s(ded)f(as)g(follo)m(ws:)150 5189 y Ft(\\a)384
+b Fu(alert)31 b(\(b)s(ell\))150 5340 y Ft(\\b)384 b Fu(bac)m(kspace)p
+eop end
+%%Page: 7 13
+TeXDict begin 7 12 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(7)150 299
+y Ft(\\e)150 408 y(\\E)384 b Fu(an)30 b(escap)s(e)h(c)m(haracter)h
+(\(not)f(ANSI)f(C\))150 566 y Ft(\\f)384 b Fu(form)30
+b(feed)150 723 y Ft(\\n)384 b Fu(newline)150 880 y Ft(\\r)g
+Fu(carriage)32 b(return)150 1037 y Ft(\\t)384 b Fu(horizon)m(tal)32
+b(tab)150 1194 y Ft(\\v)384 b Fu(v)m(ertical)32 b(tab)150
+1351 y Ft(\\\\)384 b Fu(bac)m(kslash)150 1508 y Ft(\\')g
+Fu(single)31 b(quote)150 1665 y Ft(\\")384 b Fu(double)30
+b(quote)150 1823 y Ft(\\?)384 b Fu(question)31 b(mark)150
+1980 y Ft(\\)p Fj(nnn)288 b Fu(the)36 b(eigh)m(t-bit)h(c)m(haracter)g
+(whose)f(v)-5 b(alue)36 b(is)f(the)h(o)s(ctal)h(v)-5
+b(alue)36 b Fr(nnn)e Fu(\(one)i(to)h(three)f(o)s(ctal)630
+2089 y(digits\))150 2246 y Ft(\\x)p Fj(HH)288 b Fu(the)36
+b(eigh)m(t-bit)i(c)m(haracter)f(whose)f(v)-5 b(alue)36
+b(is)g(the)g(hexadecimal)h(v)-5 b(alue)36 b Fr(HH)46
+b Fu(\(one)37 b(or)f(t)m(w)m(o)630 2356 y(hex)30 b(digits\))150
+2513 y Ft(\\u)p Fj(HHHH)192 b Fu(the)33 b(Unico)s(de)f(\(ISO/IEC)g
+(10646\))j(c)m(haracter)f(whose)e(v)-5 b(alue)33 b(is)g(the)g
+(hexadecimal)g(v)-5 b(alue)630 2623 y Fr(HHHH)41 b Fu(\(one)31
+b(to)g(four)f(hex)g(digits\))150 2780 y Ft(\\U)p Fj(HHHHHHHH)630
+2889 y Fu(the)j(Unico)s(de)f(\(ISO/IEC)g(10646\))j(c)m(haracter)f
+(whose)e(v)-5 b(alue)33 b(is)g(the)g(hexadecimal)g(v)-5
+b(alue)630 2999 y Fr(HHHHHHHH)42 b Fu(\(one)31 b(to)g(eigh)m(t)g(hex)g
+(digits\))150 3156 y Ft(\\c)p Fj(x)336 b Fu(a)31 b(con)m(trol-)p
+Fr(x)38 b Fu(c)m(haracter)150 3313 y(The)30 b(expanded)f(result)i(is)f
+(single-quoted,)i(as)f(if)f(the)g(dollar)h(sign)g(had)e(not)i(b)s(een)f
+(presen)m(t.)150 3510 y Fk(3.1.2.5)63 b(Lo)s(cale-Sp)s(eci\014c)41
+b(T)-10 b(ranslation)150 3657 y Fu(A)28 b(double-quoted)g(string)f
+(preceded)h(b)m(y)f(a)h(dollar)h(sign)e(\(`)p Ft($)p
+Fu('\))i(will)f(cause)g(the)g(string)g(to)g(b)s(e)f(translated)150
+3767 y(according)f(to)f(the)g(curren)m(t)g(lo)s(cale.)41
+b(If)24 b(the)h(curren)m(t)g(lo)s(cale)h(is)f Ft(C)g
+Fu(or)g Ft(POSIX)p Fu(,)f(the)h(dollar)h(sign)f(is)g(ignored.)150
+3876 y(If)30 b(the)g(string)h(is)f(translated)h(and)f(replaced,)h(the)g
+(replacemen)m(t)h(is)e(double-quoted.)275 4010 y(Some)20
+b(systems)h(use)f(the)h(message)h(catalog)h(selected)f(b)m(y)f(the)g
+Ft(LC_MESSAGES)c Fu(shell)k(v)-5 b(ariable.)39 b(Others)150
+4119 y(create)g(the)e(name)g(of)g(the)g(message)h(catalog)i(from)d(the)
+g(v)-5 b(alue)37 b(of)g(the)h Ft(TEXTDOMAIN)c Fu(shell)j(v)-5
+b(ariable,)150 4229 y(p)s(ossibly)31 b(adding)g(a)g(su\016x)g(of)h(`)p
+Ft(.mo)p Fu('.)43 b(If)31 b(y)m(ou)h(use)f(the)h Ft(TEXTDOMAIN)c
+Fu(v)-5 b(ariable,)33 b(y)m(ou)f(ma)m(y)g(need)f(to)h(set)150
+4339 y(the)22 b Ft(TEXTDOMAINDIR)d Fu(v)-5 b(ariable)23
+b(to)g(the)f(lo)s(cation)i(of)e(the)h(message)g(catalog)i(\014les.)38
+b(Still)23 b(others)f(use)g(b)s(oth)150 4448 y(v)-5 b(ariables)31
+b(in)f(this)g(fashion:)41 b Ft(TEXTDOMAINDIR)p Fu(/)p
+Ft(LC_MESSAGES)p Fu(/LC)p 2528 4448 28 4 v 34 w(MESSA)m(GES/)p
+Ft(TEXTDOMAIN)p Fu(.mo.)150 4645 y Fk(3.1.3)63 b(Commen)m(ts)150
+4792 y Fu(In)21 b(a)i(non-in)m(teractiv)m(e)h(shell,)g(or)e(an)g(in)m
+(teractiv)m(e)j(shell)d(in)g(whic)m(h)g(the)g Ft(interactive_comments)
+16 b Fu(option)150 4902 y(to)40 b(the)f Ft(shopt)e Fu(builtin)h(is)h
+(enabled)g(\(see)h(Section)g(4.3.2)g([The)f(Shopt)f(Builtin],)k(page)e
+(65\),)i(a)d(w)m(ord)150 5011 y(b)s(eginning)26 b(with)g(`)p
+Ft(#)p Fu(')g(causes)h(that)f(w)m(ord)g(and)g(all)h(remaining)g(c)m
+(haracters)g(on)f(that)h(line)g(to)g(b)s(e)f(ignored.)150
+5121 y(An)43 b(in)m(teractiv)m(e)j(shell)e(without)f(the)g
+Ft(interactive_comments)38 b Fu(option)44 b(enabled)f(do)s(es)g(not)g
+(allo)m(w)150 5230 y(commen)m(ts.)56 b(The)34 b Ft
+(interactive_comments)c Fu(option)35 b(is)g(on)g(b)m(y)g(default)g(in)g
+(in)m(teractiv)m(e)j(shells.)55 b(See)150 5340 y(Section)30
+b(6.3)f([In)m(teractiv)m(e)j(Shells],)d(page)h(88,)g(for)e(a)i
+(description)e(of)h(what)g(mak)m(es)h(a)f(shell)g(in)m(teractiv)m(e.)p
+eop end
+%%Page: 8 14
+TeXDict begin 8 13 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(8)150 299
+y Fs(3.2)68 b(Shell)45 b(Commands)150 458 y Fu(A)d(simple)g(shell)g
+(command)f(suc)m(h)h(as)g Ft(echo)29 b(a)h(b)g(c)41 b
+Fu(consists)i(of)f(the)f(command)h(itself)h(follo)m(w)m(ed)g(b)m(y)150
+568 y(argumen)m(ts,)31 b(separated)g(b)m(y)f(spaces.)275
+704 y(More)h(complex)h(shell)f(commands)g(are)g(comp)s(osed)g(of)g
+(simple)g(commands)g(arranged)g(together)h(in)150 814
+y(a)f(v)-5 b(ariet)m(y)32 b(of)f(w)m(a)m(ys:)41 b(in)31
+b(a)g(pip)s(eline)f(in)g(whic)m(h)g(the)h(output)f(of)h(one)f(command)h
+(b)s(ecomes)f(the)h(input)f(of)150 923 y(a)h(second,)f(in)h(a)f(lo)s
+(op)h(or)f(conditional)i(construct,)f(or)f(in)g(some)h(other)g
+(grouping.)150 1124 y Fk(3.2.1)63 b(Simple)41 b(Commands)150
+1271 y Fu(A)29 b(simple)f(command)g(is)h(the)g(kind)e(of)i(command)f
+(encoun)m(tered)h(most)g(often.)40 b(It's)29 b(just)f(a)h(sequence)g
+(of)150 1381 y(w)m(ords)22 b(separated)i(b)m(y)e Ft(blank)p
+Fu(s,)i(terminated)f(b)m(y)g(one)g(of)g(the)g(shell's)g(con)m(trol)h
+(op)s(erators)f(\(see)h(Chapter)f(2)150 1491 y([De\014nitions],)37
+b(page)e(3\).)54 b(The)35 b(\014rst)e(w)m(ord)i(generally)g(sp)s
+(eci\014es)g(a)g(command)f(to)h(b)s(e)f(executed,)j(with)150
+1600 y(the)31 b(rest)f(of)h(the)f(w)m(ords)g(b)s(eing)g(that)h
+(command's)f(argumen)m(ts.)275 1736 y(The)h(return)h(status)g(\(see)i
+(Section)f(3.7.5)h([Exit)f(Status],)h(page)f(40\))g(of)g(a)g(simple)f
+(command)g(is)h(its)150 1846 y(exit)38 b(status)f(as)g(pro)m(vided)f(b)
+m(y)h(the)g Fm(posix)f Fu(1003.1)j Ft(waitpid)c Fu(function,)j(or)f
+(128)p Ft(+)p Fr(n)g Fu(if)g(the)g(command)150 1956 y(w)m(as)31
+b(terminated)g(b)m(y)f(signal)h Fr(n)p Fu(.)150 2157
+y Fk(3.2.2)63 b(Pip)s(elines)150 2304 y Fu(A)21 b Ft(pipeline)d
+Fu(is)j(a)g(sequence)g(of)g(one)g(or)g(more)g(commands)f(separated)h(b)
+m(y)g(one)g(of)g(the)g(con)m(trol)h(op)s(erators)150
+2413 y(`)p Ft(|)p Fu(')31 b(or)f(`)p Ft(|&)p Fu('.)275
+2550 y(The)f(format)i(for)f(a)h(pip)s(eline)f(is)390
+2686 y Ft([time)46 b([-p]])h([!])g Fj(command1)e Ft([)j(|)f(or)g(|&)g
+Fj(command2)f Ft(])h(...)150 2822 y Fu(The)25 b(output)f(of)i(eac)m(h)g
+(command)f(in)f(the)i(pip)s(eline)e(is)i(connected)g(via)f(a)h(pip)s(e)
+e(to)i(the)f(input)f(of)h(the)h(next)150 2932 y(command.)40
+b(That)29 b(is,)h(eac)m(h)h(command)e(reads)g(the)h(previous)f
+(command's)g(output.)40 b(This)29 b(connection)150 3041
+y(is)h(p)s(erformed)f(b)s(efore)h(an)m(y)h(redirections)g(sp)s
+(eci\014ed)f(b)m(y)g(the)g(command.)275 3178 y(If)k(`)p
+Ft(|&)p Fu(')h(is)f(used,)i Fr(command1)7 b Fu('s)35
+b(standard)f(error,)i(in)e(addition)h(to)h(its)f(standard)f(output,)i
+(is)e(con-)150 3287 y(nected)h(to)g Fr(command2)7 b Fu('s)35
+b(standard)f(input)f(through)h(the)g(pip)s(e;)i(it)f(is)g(shorthand)e
+(for)h Ft(2>&1)29 b(|)p Fu(.)53 b(This)150 3397 y(implicit)41
+b(redirection)f(of)g(the)g(standard)f(error)g(to)h(the)g(standard)f
+(output)g(is)h(p)s(erformed)e(after)j(an)m(y)150 3506
+y(redirections)31 b(sp)s(eci\014ed)f(b)m(y)g(the)g(command.)275
+3643 y(The)36 b(reserv)m(ed)g(w)m(ord)g Ft(time)g Fu(causes)h(timing)g
+(statistics)h(to)f(b)s(e)f(prin)m(ted)g(for)g(the)h(pip)s(eline)f(once)
+h(it)150 3752 y(\014nishes.)51 b(The)34 b(statistics)i(curren)m(tly)e
+(consist)h(of)f(elapsed)h(\(w)m(all-clo)s(c)m(k\))i(time)e(and)f(user)f
+(and)h(system)150 3862 y(time)e(consumed)e(b)m(y)h(the)g(command's)g
+(execution.)44 b(The)31 b Ft(-p)f Fu(option)i(c)m(hanges)g(the)f
+(output)g(format)g(to)150 3971 y(that)j(sp)s(eci\014ed)e(b)m(y)h
+Fm(posix)p Fu(.)49 b(When)33 b(the)g(shell)g(is)h(in)e
+Fm(posix)h Fu(mo)s(de)g(\(see)h(Section)g(6.11)g([Bash)g(POSIX)150
+4081 y(Mo)s(de],)40 b(page)f(99\),)i(it)d(do)s(es)f(not)h(recognize)i
+Ft(time)c Fu(as)i(a)g(reserv)m(ed)g(w)m(ord)f(if)h(the)g(next)g(tok)m
+(en)g(b)s(egins)150 4191 y(with)33 b(a)g(`)p Ft(-)p Fu('.)49
+b(The)33 b Ft(TIMEFORMAT)d Fu(v)-5 b(ariable)34 b(ma)m(y)g(b)s(e)f(set)
+g(to)h(a)g(format)f(string)g(that)h(sp)s(eci\014es)f(ho)m(w)g(the)150
+4300 y(timing)38 b(information)g(should)e(b)s(e)h(displa)m(y)m(ed.)62
+b(See)38 b(Section)g(5.2)g([Bash)g(V)-8 b(ariables],)41
+b(page)d(73,)i(for)e(a)150 4410 y(description)27 b(of)g(the)h(a)m(v)-5
+b(ailable)29 b(formats.)40 b(The)26 b(use)h(of)g Ft(time)f
+Fu(as)i(a)f(reserv)m(ed)g(w)m(ord)g(p)s(ermits)f(the)h(timing)150
+4519 y(of)38 b(shell)g(builtins,)i(shell)e(functions,)i(and)d(pip)s
+(elines.)63 b(An)38 b(external)h Ft(time)e Fu(command)h(cannot)g(time)
+150 4629 y(these)31 b(easily)-8 b(.)275 4765 y(When)29
+b(the)h(shell)h(is)f(in)f Fm(posix)g Fu(mo)s(de)h(\(see)h(Section)f
+(6.11)i([Bash)e(POSIX)f(Mo)s(de],)i(page)g(99\),)g Ft(time)150
+4875 y Fu(ma)m(y)26 b(b)s(e)f(follo)m(w)m(ed)j(b)m(y)d(a)h(newline.)39
+b(In)25 b(this)h(case,)i(the)d(shell)h(displa)m(ys)g(the)g(total)h
+(user)e(and)g(system)h(time)150 4984 y(consumed)33 b(b)m(y)h(the)h
+(shell)f(and)f(its)i(c)m(hildren.)51 b(The)34 b Ft(TIMEFORMAT)d
+Fu(v)-5 b(ariable)35 b(ma)m(y)g(b)s(e)e(used)g(to)i(sp)s(ecify)150
+5094 y(the)c(format)f(of)h(the)f(time)h(information.)275
+5230 y(If)24 b(the)h(pip)s(eline)g(is)g(not)g(executed)h(async)m
+(hronously)f(\(see)h(Section)g(3.2.3)h([Lists],)g(page)e(9\),)i(the)f
+(shell)150 5340 y(w)m(aits)31 b(for)f(all)i(commands)e(in)g(the)g(pip)s
+(eline)g(to)h(complete.)p eop end
+%%Page: 9 15
+TeXDict begin 9 14 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(9)275 299
+y(Eac)m(h)29 b(command)g(in)g(a)g(pip)s(eline)g(is)g(executed)h(in)e
+(its)i(o)m(wn)f(subshell,)f(whic)m(h)h(is)g(a)g(separate)h(pro)s(cess)
+150 408 y(\(see)g(Section)g(3.7.3)h([Command)e(Execution)h(En)m
+(vironmen)m(t],)g(page)g(39\).)41 b(If)29 b(the)g Ft(lastpipe)e
+Fu(option)j(is)150 518 y(enabled)35 b(using)g(the)g Ft(shopt)f
+Fu(builtin)g(\(see)i(Section)g(4.3.2)h([The)e(Shopt)f(Builtin],)j(page)
+f(65\),)i(the)d(last)150 628 y(elemen)m(t)d(of)e(a)h(pip)s(eline)f(ma)m
+(y)h(b)s(e)f(run)f(b)m(y)h(the)h(shell)f(pro)s(cess.)275
+760 y(The)24 b(exit)i(status)f(of)h(a)f(pip)s(eline)g(is)g(the)g(exit)h
+(status)f(of)h(the)f(last)h(command)f(in)f(the)i(pip)s(eline,)g(unless)
+150 870 y(the)31 b Ft(pipefail)d Fu(option)j(is)g(enabled)f(\(see)i
+(Section)f(4.3.1)i([The)d(Set)h(Builtin],)g(page)h(61\).)42
+b(If)30 b Ft(pipefail)150 980 y Fu(is)f(enabled,)g(the)f(pip)s(eline's)
+g(return)g(status)h(is)f(the)h(v)-5 b(alue)29 b(of)f(the)h(last)g
+(\(righ)m(tmost\))i(command)d(to)h(exit)150 1089 y(with)34
+b(a)h(non-zero)g(status,)i(or)d(zero)i(if)e(all)i(commands)e(exit)h
+(successfully)-8 b(.)54 b(If)34 b(the)h(reserv)m(ed)g(w)m(ord)f(`)p
+Ft(!)p Fu(')150 1199 y(precedes)e(the)f(pip)s(eline,)h(the)f(exit)i
+(status)f(is)f(the)h(logical)i(negation)f(of)e(the)h(exit)g(status)g
+(as)g(describ)s(ed)150 1308 y(ab)s(o)m(v)m(e.)63 b(The)38
+b(shell)f(w)m(aits)i(for)e(all)i(commands)e(in)g(the)h(pip)s(eline)f
+(to)h(terminate)h(b)s(efore)e(returning)g(a)150 1418
+y(v)-5 b(alue.)150 1614 y Fk(3.2.3)63 b(Lists)41 b(of)h(Commands)150
+1761 y Fu(A)37 b Ft(list)e Fu(is)i(a)g(sequence)g(of)g(one)g(or)f(more)
+h(pip)s(elines)f(separated)h(b)m(y)g(one)g(of)f(the)h(op)s(erators)g(`)
+p Ft(;)p Fu(',)i(`)p Ft(&)p Fu(',)150 1870 y(`)p Ft(&&)p
+Fu(',)31 b(or)f(`)p Ft(||)p Fu(',)g(and)g(optionally)i(terminated)f(b)m
+(y)f(one)h(of)f(`)p Ft(;)p Fu(',)h(`)p Ft(&)p Fu(',)g(or)f(a)h
+Ft(newline)p Fu(.)275 2003 y(Of)23 b(these)h(list)g(op)s(erators,)i(`)p
+Ft(&&)p Fu(')d(and)g(`)p Ft(||)p Fu(')h(ha)m(v)m(e)h(equal)f
+(precedence,)i(follo)m(w)m(ed)f(b)m(y)f(`)p Ft(;)p Fu(')g(and)f(`)p
+Ft(&)p Fu(',)i(whic)m(h)150 2113 y(ha)m(v)m(e)32 b(equal)e(precedence.)
+275 2245 y(A)f(sequence)h(of)g(one)g(or)g(more)g(newlines)f(ma)m(y)h
+(app)s(ear)f(in)h(a)g Ft(list)e Fu(to)j(delimit)f(commands,)g(equiv-)
+150 2355 y(alen)m(t)i(to)f(a)g(semicolon.)275 2488 y(If)c(a)h(command)f
+(is)h(terminated)g(b)m(y)g(the)g(con)m(trol)h(op)s(erator)f(`)p
+Ft(&)p Fu(',)h(the)e(shell)h(executes)h(the)f(command)150
+2597 y(async)m(hronously)g(in)h(a)g(subshell.)39 b(This)28
+b(is)h(kno)m(wn)f(as)h(executing)h(the)f(command)g(in)f(the)h
+Fr(bac)m(kground)p Fu(,)150 2707 y(and)42 b(these)i(are)f(referred)g
+(to)g(as)h Fr(async)m(hronous)i Fu(commands.)78 b(The)43
+b(shell)g(do)s(es)g(not)g(w)m(ait)h(for)f(the)150 2816
+y(command)34 b(to)h(\014nish,)f(and)f(the)h(return)f(status)i(is)f(0)g
+(\(true\).)53 b(When)34 b(job)g(con)m(trol)h(is)f(not)h(activ)m(e)h
+(\(see)150 2926 y(Chapter)27 b(7)h([Job)f(Con)m(trol],)i(page)g(103\),)
+h(the)d(standard)g(input)f(for)i(async)m(hronous)f(commands,)h(in)f
+(the)150 3036 y(absence)k(of)f(an)m(y)h(explicit)h(redirections,)f(is)f
+(redirected)h(from)f Ft(/dev/null)p Fu(.)275 3168 y(Commands)19
+b(separated)j(b)m(y)f(a)g(`)p Ft(;)p Fu(')g(are)h(executed)g(sequen)m
+(tially;)k(the)21 b(shell)g(w)m(aits)h(for)f(eac)m(h)h(command)150
+3278 y(to)31 b(terminate)h(in)e(turn.)39 b(The)30 b(return)f(status)i
+(is)f(the)h(exit)g(status)g(of)g(the)f(last)h(command)f(executed.)275
+3411 y Fm(and)g Fu(and)h Fm(or)g Fu(lists)h(are)g(sequences)f(of)h(one)
+g(or)f(more)h(pip)s(elines)e(separated)i(b)m(y)g(the)f(con)m(trol)i(op)
+s(er-)150 3520 y(ators)e(`)p Ft(&&)p Fu(')f(and)g(`)p
+Ft(||)p Fu(',)h(resp)s(ectiv)m(ely)-8 b(.)42 b Fm(and)30
+b Fu(and)f Fm(or)h Fu(lists)h(are)g(executed)g(with)f(left)h(asso)s
+(ciativit)m(y)-8 b(.)275 3653 y(An)30 b Fm(and)f Fu(list)i(has)f(the)h
+(form)390 3786 y Fj(command1)46 b Ft(&&)h Fj(command2)150
+3918 y Fr(command2)38 b Fu(is)30 b(executed)i(if,)e(and)g(only)g(if,)h
+Fr(command1)38 b Fu(returns)29 b(an)h(exit)h(status)g(of)g(zero)g
+(\(success\).)275 4051 y(An)f Fm(or)f Fu(list)i(has)f(the)h(form)390
+4184 y Fj(command1)46 b Ft(||)h Fj(command2)150 4317
+y Fr(command2)38 b Fu(is)30 b(executed)i(if,)e(and)g(only)g(if,)h
+Fr(command1)38 b Fu(returns)29 b(a)i(non-zero)g(exit)g(status.)275
+4449 y(The)h(return)g(status)i(of)f Fm(and)f Fu(and)h
+Fm(or)f Fu(lists)i(is)f(the)g(exit)h(status)g(of)f(the)g(last)h
+(command)f(executed)150 4559 y(in)d(the)h(list.)150 4755
+y Fk(3.2.4)63 b(Comp)s(ound)42 b(Commands)150 4902 y
+Fu(Comp)s(ound)29 b(commands)h(are)i(the)f(shell)g(programming)f
+(language)j(constructs.)42 b(Eac)m(h)32 b(construct)f(b)s(e-)150
+5011 y(gins)25 b(with)f(a)i(reserv)m(ed)f(w)m(ord)f(or)h(con)m(trol)h
+(op)s(erator)f(and)g(is)g(terminated)g(b)m(y)g(a)g(corresp)s(onding)f
+(reserv)m(ed)150 5121 y(w)m(ord)i(or)g(op)s(erator.)40
+b(An)m(y)26 b(redirections)g(\(see)i(Section)f(3.6)g([Redirections],)h
+(page)f(34\))h(asso)s(ciated)f(with)150 5230 y(a)k(comp)s(ound)f
+(command)h(apply)f(to)i(all)g(commands)f(within)f(that)i(comp)s(ound)d
+(command)i(unless)f(ex-)150 5340 y(plicitly)i(o)m(v)m(erridden.)p
+eop end
+%%Page: 10 16
+TeXDict begin 10 15 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(10)275 299
+y(In)20 b(most)h(cases)g(a)g(list)h(of)f(commands)f(in)g(a)h(comp)s
+(ound)f(command's)g(description)h(ma)m(y)g(b)s(e)f(separated)150
+408 y(from)30 b(the)h(rest)g(of)g(the)g(command)g(b)m(y)f(one)h(or)g
+(more)g(newlines,)g(and)f(ma)m(y)i(b)s(e)e(follo)m(w)m(ed)i(b)m(y)f(a)g
+(newline)150 518 y(in)f(place)h(of)g(a)g(semicolon.)275
+663 y(Bash)45 b(pro)m(vides)h(lo)s(oping)g(constructs,)j(conditional)e
+(commands,)j(and)44 b(mec)m(hanisms)i(to)g(group)150
+773 y(commands)30 b(and)g(execute)i(them)e(as)g(a)h(unit.)150
+983 y Fk(3.2.4.1)63 b(Lo)s(oping)43 b(Constructs)150
+1130 y Fu(Bash)31 b(supp)s(orts)d(the)j(follo)m(wing)g(lo)s(oping)g
+(constructs.)275 1276 y(Note)k(that)f(wherev)m(er)g(a)g(`)p
+Ft(;)p Fu(')g(app)s(ears)f(in)h(the)g(description)g(of)g(a)g(command's)
+g(syn)m(tax,)i(it)e(ma)m(y)h(b)s(e)150 1385 y(replaced)c(with)f(one)h
+(or)f(more)g(newlines.)150 1561 y Ft(until)240 b Fu(The)30
+b(syn)m(tax)h(of)f(the)h Ft(until)e Fu(command)h(is:)870
+1701 y Ft(until)46 b Fj(test-commands)p Ft(;)e(do)j Fj
+(consequent-commands)p Ft(;)c(done)630 1841 y Fu(Execute)f
+Fr(consequen)m(t-commands)k Fu(as)41 b(long)h(as)f Fr(test-commands)46
+b Fu(has)41 b(an)g(exit)h(status)630 1950 y(whic)m(h)c(is)h(not)g
+(zero.)67 b(The)38 b(return)g(status)h(is)f(the)h(exit)h(status)f(of)g
+(the)g(last)g(command)630 2060 y(executed)31 b(in)f Fr(consequen)m
+(t-commands)p Fu(,)i(or)e(zero)h(if)g(none)f(w)m(as)h(executed.)150
+2230 y Ft(while)240 b Fu(The)30 b(syn)m(tax)h(of)f(the)h
+Ft(while)e Fu(command)h(is:)870 2370 y Ft(while)46 b
+Fj(test-commands)p Ft(;)e(do)j Fj(consequent-commands)p
+Ft(;)c(done)630 2510 y Fu(Execute)f Fr(consequen)m(t-commands)k
+Fu(as)41 b(long)h(as)f Fr(test-commands)46 b Fu(has)41
+b(an)g(exit)h(status)630 2620 y(of)34 b(zero.)53 b(The)34
+b(return)f(status)h(is)h(the)f(exit)h(status)g(of)f(the)g(last)h
+(command)f(executed)h(in)630 2729 y Fr(consequen)m(t-commands)p
+Fu(,)c(or)g(zero)g(if)f(none)g(w)m(as)h(executed.)150
+2900 y Ft(for)336 b Fu(The)30 b(syn)m(tax)h(of)f(the)h
+Ft(for)e Fu(command)i(is:)870 3040 y Ft(for)47 b Fj(name)g
+Ft([)g([in)g([)p Fj(words)f Ft(...)o(])i(])f(;)h(])f(do)g
+Fj(commands)p Ft(;)e(done)630 3180 y Fu(Expand)30 b Fr(w)m(ords)k
+Fu(\(see)d(Section)h(3.5)g([Shell)f(Expansions],)g(page)g(22\),)i(and)d
+(execute)i Fr(com-)630 3289 y(mands)43 b Fu(once)e(for)g(eac)m(h)g(mem)
+m(b)s(er)f(in)g(the)h(resultan)m(t)g(list,)j(with)c Fr(name)46
+b Fu(b)s(ound)39 b(to)i(the)630 3399 y(curren)m(t)34
+b(mem)m(b)s(er.)53 b(If)35 b(`)p Ft(in)30 b Fj(words)p
+Fu(')j(is)i(not)g(presen)m(t,)h(the)f Ft(for)e Fu(command)i(executes)h
+(the)630 3508 y Fr(commands)j Fu(once)e(for)f(eac)m(h)h(p)s(ositional)g
+(parameter)f(that)h(is)f(set,)i(as)e(if)g(`)p Ft(in)30
+b("$@")p Fu(')36 b(had)630 3618 y(b)s(een)30 b(sp)s(eci\014ed)f(\(see)j
+(Section)f(3.4.2)h([Sp)s(ecial)f(P)m(arameters],)h(page)f(21\).)630
+3758 y(The)c(return)f(status)h(is)g(the)h(exit)g(status)f(of)g(the)h
+(last)g(command)e(that)i(executes.)41 b(If)27 b(there)630
+3868 y(are)38 b(no)f(items)g(in)g(the)h(expansion)f(of)g
+Fr(w)m(ords)p Fu(,)i(no)e(commands)g(are)g(executed,)j(and)d(the)630
+3977 y(return)29 b(status)i(is)f(zero.)630 4117 y(An)g(alternate)i
+(form)e(of)h(the)f Ft(for)g Fu(command)g(is)g(also)h(supp)s(orted:)870
+4257 y Ft(for)47 b(\(\()g Fj(expr1)f Ft(;)i Fj(expr2)e
+Ft(;)i Fj(expr3)e Ft(\)\))h(;)h(do)f Fj(commands)e Ft(;)j(done)630
+4397 y Fu(First,)38 b(the)f(arithmetic)h(expression)e
+Fr(expr1)43 b Fu(is)36 b(ev)-5 b(aluated)38 b(according)f(to)g(the)g
+(rules)f(de-)630 4507 y(scrib)s(ed)41 b(b)s(elo)m(w)h(\(see)h(Section)g
+(6.5)g([Shell)g(Arithmetic],)j(page)d(92\).)77 b(The)42
+b(arithmetic)630 4616 y(expression)33 b Fr(expr2)41 b
+Fu(is)34 b(then)f(ev)-5 b(aluated)35 b(rep)s(eatedly)f(un)m(til)g(it)g
+(ev)-5 b(aluates)35 b(to)g(zero.)51 b(Eac)m(h)630 4726
+y(time)23 b Fr(expr2)30 b Fu(ev)-5 b(aluates)25 b(to)e(a)g(non-zero)h
+(v)-5 b(alue,)25 b Fr(commands)h Fu(are)d(executed)g(and)g(the)g
+(arith-)630 4835 y(metic)29 b(expression)f Fr(expr3)36
+b Fu(is)28 b(ev)-5 b(aluated.)41 b(If)28 b(an)m(y)h(expression)f(is)g
+(omitted,)i(it)f(b)s(eha)m(v)m(es)g(as)630 4945 y(if)i(it)h(ev)-5
+b(aluates)32 b(to)g(1.)44 b(The)30 b(return)g(v)-5 b(alue)32
+b(is)f(the)g(exit)h(status)g(of)f(the)g(last)h(command)f(in)630
+5055 y Fr(commands)j Fu(that)d(is)f(executed,)i(or)e(false)h(if)f(an)m
+(y)h(of)g(the)f(expressions)g(is)h(in)m(v)-5 b(alid.)275
+5230 y(The)26 b Ft(break)g Fu(and)h Ft(continue)e Fu(builtins)i(\(see)h
+(Section)h(4.1)f([Bourne)g(Shell)f(Builtins],)i(page)f(43\))g(ma)m(y)
+150 5340 y(b)s(e)i(used)f(to)i(con)m(trol)h(lo)s(op)f(execution.)p
+eop end
+%%Page: 11 17
+TeXDict begin 11 16 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(11)150 299
+y Fk(3.2.4.2)63 b(Conditional)42 b(Constructs)150 472
+y Ft(if)384 b Fu(The)30 b(syn)m(tax)h(of)f(the)h Ft(if)f
+Fu(command)g(is:)870 608 y Ft(if)47 b Fj(test-commands)p
+Ft(;)d(then)965 718 y Fj(consequent-commands)p Ft(;)870
+828 y([elif)i Fj(more-test-commands)p Ft(;)d(then)965
+937 y Fj(more-consequents)p Ft(;])870 1047 y([else)j
+Fj(alternate-consequents)p Ft(;])870 1156 y(fi)630 1292
+y Fu(The)53 b Fr(test-commands)58 b Fu(list)c(is)g(executed,)60
+b(and)53 b(if)g(its)h(return)e(status)i(is)f(zero,)61
+b(the)630 1402 y Fr(consequen)m(t-commands)44 b Fu(list)d(is)f
+(executed.)70 b(If)40 b Fr(test-commands)k Fu(returns)39
+b(a)h(non-zero)630 1512 y(status,)45 b(eac)m(h)e Ft(elif)d
+Fu(list)i(is)g(executed)h(in)e(turn,)j(and)d(if)g(its)h(exit)h(status)f
+(is)f(zero,)46 b(the)630 1621 y(corresp)s(onding)37 b
+Fr(more-consequen)m(ts)42 b Fu(is)c(executed)g(and)f(the)h(command)g
+(completes.)63 b(If)630 1731 y(`)p Ft(else)29 b Fj
+(alternate-consequents)p Fu(')c(is)30 b(presen)m(t,)h(and)f(the)g
+(\014nal)g(command)g(in)g(the)g(\014nal)630 1840 y Ft(if)44
+b Fu(or)g Ft(elif)f Fu(clause)i(has)f(a)h(non-zero)g(exit)g(status,)j
+(then)c Fr(alternate-consequen)m(ts)51 b Fu(is)630 1950
+y(executed.)k(The)34 b(return)g(status)h(is)f(the)h(exit)h(status)f(of)
+g(the)g(last)g(command)g(executed,)630 2060 y(or)30 b(zero)i(if)e(no)g
+(condition)h(tested)g(true.)150 2222 y Ft(case)288 b
+Fu(The)30 b(syn)m(tax)h(of)f(the)h Ft(case)e Fu(command)h(is:)870
+2358 y Ft(case)47 b Fj(word)f Ft(in)1061 2468 y([)h([\(])g
+Fj(pattern)f Ft([|)h Fj(pattern)p Ft(]...)m(\))h Fj(command-list)c
+Ft(;;]...)870 2577 y(esac)630 2713 y(case)20 b Fu(will)i(selectiv)m
+(ely)j(execute)e(the)e Fr(command-list)k Fu(corresp)s(onding)20
+b(to)i(the)g(\014rst)f Fr(pattern)630 2823 y Fu(that)h(matc)m(hes)h
+Fr(w)m(ord)p Fu(.)38 b(The)21 b(matc)m(h)h(is)g(p)s(erformed)e
+(according)j(to)f(the)g(rules)g(describ)s(ed)e(b)s(e-)630
+2933 y(lo)m(w)25 b(in)e(Section)i(3.5.8.1)h([P)m(attern)f(Matc)m
+(hing],)i(page)e(33.)39 b(If)23 b(the)h Ft(nocasematch)d
+Fu(shell)j(op-)630 3042 y(tion)j(\(see)g(the)f(description)g(of)g
+Ft(shopt)f Fu(in)g(Section)i(4.3.2)h([The)e(Shopt)f(Builtin],)j(page)f
+(65\))630 3152 y(is)40 b(enabled,)i(the)e(matc)m(h)h(is)e(p)s(erformed)
+g(without)g(regard)h(to)h(the)f(case)g(of)g(alphab)s(etic)630
+3261 y(c)m(haracters.)48 b(The)32 b(`)p Ft(|)p Fu(')g(is)h(used)e(to)i
+(separate)h(m)m(ultiple)f(patterns,)g(and)f(the)g(`)p
+Ft(\))p Fu(')h(op)s(erator)630 3371 y(terminates)f(a)f(pattern)g(list.)
+43 b(A)31 b(list)g(of)g(patterns)g(and)f(an)h(asso)s(ciated)h
+(command-list)g(is)630 3481 y(kno)m(wn)e(as)g(a)h Fr(clause)p
+Fu(.)630 3617 y(Eac)m(h)42 b(clause)g(m)m(ust)f(b)s(e)g(terminated)h
+(with)e(`)p Ft(;;)p Fu(',)45 b(`)p Ft(;&)p Fu(',)f(or)d(`)p
+Ft(;;&)p Fu('.)73 b(The)41 b Fr(w)m(ord)j Fu(under-)630
+3726 y(go)s(es)35 b(tilde)f(expansion,)h(parameter)g(expansion,)g
+(command)f(substitution,)h(arithmetic)630 3836 y(expansion,)g(and)f
+(quote)g(remo)m(v)-5 b(al)36 b(\(see)f(Section)g(3.5.3)h([Shell)e(P)m
+(arameter)h(Expansion],)630 3945 y(page)22 b(24\))g(b)s(efore)f(matc)m
+(hing)h(is)g(attempted.)38 b(Eac)m(h)22 b Fr(pattern)g
+Fu(undergo)s(es)e(tilde)i(expansion,)630 4055 y(parameter)31
+b(expansion,)f(command)g(substitution,)h(and)f(arithmetic)h(expansion.)
+630 4191 y(There)f(ma)m(y)g(b)s(e)f(an)h(arbitrary)g(n)m(um)m(b)s(er)f
+(of)h Ft(case)f Fu(clauses,)i(eac)m(h)g(terminated)g(b)m(y)e(a)i(`)p
+Ft(;;)p Fu(',)630 4301 y(`)p Ft(;&)p Fu(',)c(or)e(`)p
+Ft(;;&)p Fu('.)39 b(The)25 b(\014rst)g(pattern)h(that)g(matc)m(hes)h
+(determines)e(the)h(command-list)g(that)630 4410 y(is)35
+b(executed.)55 b(It's)35 b(a)g(common)g(idiom)g(to)g(use)g(`)p
+Ft(*)p Fu(')g(as)g(the)g(\014nal)f(pattern)h(to)h(de\014ne)e(the)630
+4520 y(default)d(case,)g(since)g(that)g(pattern)f(will)h(alw)m(a)m(ys)h
+(matc)m(h.)630 4656 y(Here)j(is)g(an)g(example)h(using)e
+Ft(case)g Fu(in)g(a)h(script)g(that)h(could)f(b)s(e)f(used)g(to)h
+(describ)s(e)g(one)630 4766 y(in)m(teresting)d(feature)f(of)f(an)g
+(animal:)870 4902 y Ft(echo)47 b(-n)g("Enter)f(the)h(name)f(of)i(an)f
+(animal:)f(")870 5011 y(read)h(ANIMAL)870 5121 y(echo)g(-n)g("The)f
+($ANIMAL)g(has)h(")870 5230 y(case)g($ANIMAL)e(in)965
+5340 y(horse)i(|)g(dog)g(|)h(cat\))e(echo)h(-n)g("four";;)p
+eop end
+%%Page: 12 18
+TeXDict begin 12 17 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(12)965 299
+y Ft(man)47 b(|)h(kangaroo)d(\))j(echo)e(-n)i("two";;)965
+408 y(*\))g(echo)e(-n)h("an)g(unknown)f(number)g(of";;)870
+518 y(esac)870 628 y(echo)h(")g(legs.")630 781 y Fu(If)25
+b(the)h(`)p Ft(;;)p Fu(')g(op)s(erator)g(is)g(used,)g(no)g(subsequen)m
+(t)f(matc)m(hes)i(are)f(attempted)h(after)g(the)f(\014rst)630
+891 y(pattern)g(matc)m(h.)40 b(Using)26 b(`)p Ft(;&)p
+Fu(')f(in)h(place)g(of)g(`)p Ft(;;)p Fu(')g(causes)g(execution)h(to)f
+(con)m(tin)m(ue)h(with)f(the)630 1000 y Fr(command-list)39
+b Fu(asso)s(ciated)f(with)e(the)g(next)g(clause,)j(if)d(an)m(y)-8
+b(.)59 b(Using)37 b(`)p Ft(;;&)p Fu(')f(in)g(place)h(of)630
+1110 y(`)p Ft(;;)p Fu(')30 b(causes)g(the)g(shell)g(to)g(test)h(the)f
+(patterns)g(in)f(the)h(next)g(clause,)h(if)e(an)m(y)-8
+b(,)31 b(and)f(execute)630 1219 y(an)m(y)h(asso)s(ciated)h
+Fr(command-list)h Fu(on)d(a)h(successful)f(matc)m(h.)630
+1351 y(The)c(return)f(status)h(is)g(zero)h(if)f(no)g
+Fr(pattern)g Fu(is)g(matc)m(hed.)40 b(Otherwise,)27 b(the)g(return)e
+(status)630 1461 y(is)30 b(the)h(exit)g(status)g(of)f(the)h
+Fr(command-list)i Fu(executed.)150 1614 y Ft(select)630
+1745 y Fu(The)g Ft(select)f Fu(construct)i(allo)m(ws)h(the)f(easy)g
+(generation)h(of)e(men)m(us.)50 b(It)34 b(has)f(almost)i(the)630
+1855 y(same)c(syn)m(tax)g(as)f(the)h Ft(for)e Fu(command:)870
+1987 y Ft(select)46 b Fj(name)h Ft([in)g Fj(words)f Ft(...)o(];)h(do)h
+Fj(commands)p Ft(;)d(done)630 2118 y Fu(The)25 b(list)h(of)f(w)m(ords)g
+(follo)m(wing)i Ft(in)d Fu(is)h(expanded,)h(generating)h(a)e(list)h(of)
+g(items.)39 b(The)25 b(set)h(of)630 2228 y(expanded)i(w)m(ords)h(is)g
+(prin)m(ted)f(on)h(the)g(standard)f(error)h(output)f(stream,)i(eac)m(h)
+g(preceded)630 2337 y(b)m(y)21 b(a)g(n)m(um)m(b)s(er.)37
+b(If)20 b(the)i(`)p Ft(in)30 b Fj(words)p Fu(')20 b(is)h(omitted,)j
+(the)d(p)s(ositional)h(parameters)g(are)f(prin)m(ted,)630
+2447 y(as)28 b(if)f(`)p Ft(in)j("$@")p Fu(')d(had)f(b)s(een)h(sp)s
+(eci\014ed.)39 b(The)27 b Ft(PS3)g Fu(prompt)f(is)i(then)f(displa)m(y)m
+(ed)h(and)f(a)h(line)630 2556 y(is)h(read)f(from)h(the)f(standard)g
+(input.)39 b(If)29 b(the)g(line)g(consists)g(of)g(a)g(n)m(um)m(b)s(er)e
+(corresp)s(onding)630 2666 y(to)36 b(one)f(of)h(the)f(displa)m(y)m(ed)h
+(w)m(ords,)g(then)f(the)g(v)-5 b(alue)36 b(of)f Fr(name)40
+b Fu(is)35 b(set)h(to)g(that)g(w)m(ord.)54 b(If)630 2776
+y(the)37 b(line)h(is)f(empt)m(y)-8 b(,)39 b(the)e(w)m(ords)g(and)f
+(prompt)g(are)i(displa)m(y)m(ed)f(again.)62 b(If)37 b
+Ft(EOF)f Fu(is)h(read,)630 2885 y(the)c Ft(select)e Fu(command)i
+(completes.)50 b(An)m(y)33 b(other)g(v)-5 b(alue)33 b(read)g(causes)g
+Fr(name)38 b Fu(to)c(b)s(e)e(set)630 2995 y(to)f(n)m(ull.)41
+b(The)30 b(line)g(read)h(is)f(sa)m(v)m(ed)h(in)g(the)f(v)-5
+b(ariable)31 b Ft(REPLY)p Fu(.)630 3126 y(The)42 b Fr(commands)j
+Fu(are)d(executed)h(after)g(eac)m(h)g(selection)h(un)m(til)e(a)h
+Ft(break)d Fu(command)i(is)630 3236 y(executed,)32 b(at)f(whic)m(h)f(p)
+s(oin)m(t)g(the)h Ft(select)d Fu(command)i(completes.)630
+3367 y(Here)39 b(is)g(an)g(example)h(that)f(allo)m(ws)i(the)e(user)f
+(to)i(pic)m(k)f(a)g(\014lename)h(from)e(the)h(curren)m(t)630
+3477 y(directory)-8 b(,)32 b(and)d(displa)m(ys)i(the)f(name)h(and)f
+(index)f(of)i(the)g(\014le)f(selected.)870 3608 y Ft(select)46
+b(fname)g(in)i(*;)870 3718 y(do)870 3828 y(echo)f(you)g(picked)f
+($fname)g(\\\($REPLY\\\))870 3937 y(break;)870 4047 y(done)150
+4200 y(\(\(...)o(\)\))870 4332 y(\(\()h Fj(expression)e
+Ft(\)\))630 4463 y Fu(The)33 b(arithmetic)i Fr(expression)f
+Fu(is)f(ev)-5 b(aluated)35 b(according)g(to)f(the)g(rules)f(describ)s
+(ed)g(b)s(elo)m(w)630 4573 y(\(see)j(Section)f(6.5)h([Shell)f
+(Arithmetic],)i(page)f(92\).)55 b(If)34 b(the)h(v)-5
+b(alue)35 b(of)g(the)g(expression)g(is)630 4682 y(non-zero,)27
+b(the)f(return)e(status)i(is)g(0;)h(otherwise)f(the)g(return)e(status)i
+(is)g(1.)39 b(This)25 b(is)g(exactly)630 4792 y(equiv)-5
+b(alen)m(t)32 b(to)870 4924 y Ft(let)47 b(")p Fj(expression)p
+Ft(")630 5055 y Fu(See)25 b(Section)h(4.2)h([Bash)e(Builtins],)i(page)f
+(50,)i(for)c(a)i(full)f(description)g(of)g(the)h Ft(let)e
+Fu(builtin.)150 5208 y Ft([[...)o(]])870 5340 y([[)47
+b Fj(expression)e Ft(]])p eop end
+%%Page: 13 19
+TeXDict begin 13 18 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(13)630 299
+y(Return)25 b(a)h(status)f(of)h(0)g(or)g(1)g(dep)s(ending)e(on)h(the)h
+(ev)-5 b(aluation)27 b(of)e(the)h(conditional)h(expres-)630
+408 y(sion)j Fr(expression)p Fu(.)41 b(Expressions)29
+b(are)i(comp)s(osed)f(of)g(the)h(primaries)f(describ)s(ed)f(b)s(elo)m
+(w)h(in)630 518 y(Section)36 b(6.4)h([Bash)f(Conditional)g
+(Expressions],)h(page)f(90.)57 b(W)-8 b(ord)36 b(splitting)h(and)e
+(\014le-)630 628 y(name)d(expansion)g(are)h(not)g(p)s(erformed)d(on)j
+(the)f(w)m(ords)g(b)s(et)m(w)m(een)h(the)f Ft([[)g Fu(and)f
+Ft(]])p Fu(;)i(tilde)630 737 y(expansion,)e(parameter)g(and)f(v)-5
+b(ariable)31 b(expansion,)g(arithmetic)g(expansion,)g(command)630
+847 y(substitution,)40 b(pro)s(cess)f(substitution,)h(and)e(quote)h
+(remo)m(v)-5 b(al)40 b(are)f(p)s(erformed.)63 b(Condi-)630
+956 y(tional)32 b(op)s(erators)e(suc)m(h)g(as)h(`)p Ft(-f)p
+Fu(')f(m)m(ust)g(b)s(e)g(unquoted)g(to)h(b)s(e)e(recognized)j(as)f
+(primaries.)630 1097 y(When)k(used)f(with)h Ft([[)p Fu(,)h(the)f(`)p
+Ft(<)p Fu(')g(and)g(`)p Ft(>)p Fu(')g(op)s(erators)g(sort)g
+(lexicographically)j(using)d(the)630 1207 y(curren)m(t)30
+b(lo)s(cale.)630 1348 y(When)22 b(the)h(`)p Ft(==)p Fu(')f(and)g(`)p
+Ft(!=)p Fu(')g(op)s(erators)h(are)g(used,)g(the)g(string)f(to)i(the)e
+(righ)m(t)h(of)g(the)g(op)s(erator)630 1457 y(is)31 b(considered)g(a)h
+(pattern)f(and)g(matc)m(hed)h(according)g(to)g(the)g(rules)f(describ)s
+(ed)f(b)s(elo)m(w)h(in)630 1567 y(Section)d(3.5.8.1)h([P)m(attern)f
+(Matc)m(hing],)h(page)f(33,)g(as)f(if)g(the)g Ft(extglob)d
+Fu(shell)j(option)g(w)m(ere)630 1677 y(enabled.)46 b(The)31
+b(`)p Ft(=)p Fu(')h(op)s(erator)h(is)f(iden)m(tical)h(to)g(`)p
+Ft(==)p Fu('.)46 b(If)31 b(the)h Ft(nocasematch)d Fu(shell)j(option)630
+1786 y(\(see)42 b(the)f(description)g(of)h Ft(shopt)d
+Fu(in)i(Section)h(4.3.2)h([The)e(Shopt)f(Builtin],)45
+b(page)d(65\))630 1896 y(is)e(enabled,)i(the)e(matc)m(h)h(is)e(p)s
+(erformed)g(without)g(regard)h(to)h(the)f(case)g(of)g(alphab)s(etic)630
+2005 y(c)m(haracters.)h(The)28 b(return)e(v)-5 b(alue)28
+b(is)g(0)g(if)g(the)g(string)g(matc)m(hes)h(\(`)p Ft(==)p
+Fu('\))f(or)g(do)s(es)f(not)h(matc)m(h)630 2115 y(\(`)p
+Ft(!=)p Fu('\))j(the)f(pattern,)h(and)e(1)i(otherwise.)41
+b(An)m(y)30 b(part)g(of)h(the)f(pattern)g(ma)m(y)h(b)s(e)f(quoted)g(to)
+630 2225 y(force)h(the)g(quoted)f(p)s(ortion)g(to)h(b)s(e)f(matc)m(hed)
+h(as)g(a)f(string.)630 2365 y(An)j(additional)i(binary)e(op)s(erator,)i
+(`)p Ft(=~)p Fu(',)g(is)f(a)m(v)-5 b(ailable,)37 b(with)c(the)h(same)g
+(precedence)h(as)630 2475 y(`)p Ft(==)p Fu(')g(and)g(`)p
+Ft(!=)p Fu('.)55 b(When)35 b(it)g(is)h(used,)f(the)h(string)f(to)h(the)
+f(righ)m(t)h(of)f(the)h(op)s(erator)f(is)g(con-)630 2585
+y(sidered)43 b(a)h Fm(POSIX)f Fu(extended)h(regular)g(expression)f(and)
+g(matc)m(hed)i(accordingly)f(\(as)630 2694 y(in)d Fl(r)-5
+b(e)g(gex)11 b Fu(3\)\).)76 b(The)41 b(return)f(v)-5
+b(alue)42 b(is)g(0)f(if)h(the)f(string)h(matc)m(hes)g(the)g(pattern,)j
+(and)c(1)630 2804 y(otherwise.)59 b(If)35 b(the)i(regular)f(expression)
+g(is)g(syn)m(tactically)j(incorrect,)g(the)e(conditional)630
+2913 y(expression's)27 b(return)f(v)-5 b(alue)28 b(is)f(2.)40
+b(If)27 b(the)g Ft(nocasematch)e Fu(shell)i(option)h(\(see)g(the)f
+(descrip-)630 3023 y(tion)41 b(of)g Ft(shopt)f Fu(in)h(Section)g(4.3.2)
+i([The)e(Shopt)f(Builtin],)k(page)e(65\))g(is)f(enabled,)j(the)630
+3133 y(matc)m(h)36 b(is)f(p)s(erformed)e(without)i(regard)g(to)h(the)f
+(case)h(of)f(alphab)s(etic)g(c)m(haracters.)56 b(An)m(y)630
+3242 y(part)25 b(of)h(the)g(pattern)f(ma)m(y)h(b)s(e)f(quoted)h(to)g
+(force)g(the)g(quoted)f(p)s(ortion)g(to)i(b)s(e)d(matc)m(hed)j(as)630
+3352 y(a)34 b(string.)49 b(Brac)m(k)m(et)36 b(expressions)c(in)h
+(regular)h(expressions)f(m)m(ust)g(b)s(e)f(treated)j(carefully)-8
+b(,)630 3461 y(since)37 b(normal)f(quoting)h(c)m(haracters)g(lose)g
+(their)g(meanings)f(b)s(et)m(w)m(een)h(brac)m(k)m(ets.)60
+b(If)36 b(the)630 3571 y(pattern)e(is)g(stored)g(in)f(a)i(shell)f(v)-5
+b(ariable,)36 b(quoting)e(the)g(v)-5 b(ariable)35 b(expansion)e(forces)
+i(the)630 3680 y(en)m(tire)30 b(pattern)e(to)i(b)s(e)e(matc)m(hed)h(as)
+g(a)g(string.)40 b(Substrings)27 b(matc)m(hed)j(b)m(y)e(paren)m
+(thesized)630 3790 y(sub)s(expressions)40 b(within)h(the)g(regular)h
+(expression)f(are)h(sa)m(v)m(ed)h(in)e(the)h(arra)m(y)g(v)-5
+b(ariable)630 3900 y Ft(BASH_REMATCH)p Fu(.)56 b(The)37
+b(elemen)m(t)h(of)f Ft(BASH_REMATCH)c Fu(with)j(index)h(0)g(is)g(the)f
+(p)s(ortion)h(of)630 4009 y(the)22 b(string)f(matc)m(hing)h(the)g(en)m
+(tire)g(regular)g(expression.)37 b(The)21 b(elemen)m(t)i(of)e
+Ft(BASH_REMATCH)630 4119 y Fu(with)26 b(index)h Fr(n)f
+Fu(is)h(the)g(p)s(ortion)f(of)h(the)g(string)g(matc)m(hing)h(the)f
+Fr(n)p Fu(th)f(paren)m(thesized)h(sub)s(ex-)630 4228
+y(pression.)630 4369 y(F)-8 b(or)28 b(example,)h(the)e(follo)m(wing)i
+(will)e(matc)m(h)h(a)g(line)f(\(stored)h(in)e(the)i(shell)f(v)-5
+b(ariable)28 b Fr(line)5 b Fu(\))28 b(if)630 4479 y(there)22
+b(is)g(a)h(sequence)f(of)h(c)m(haracters)g(in)f(the)g(v)-5
+b(alue)23 b(consisting)g(of)f(an)m(y)h(n)m(um)m(b)s(er,)f(including)630
+4589 y(zero,)31 b(of)g(space)g(c)m(haracters,)h(zero)f(or)g(one)f
+(instances)h(of)g(`)p Ft(a)p Fu(',)f(then)g(a)h(`)p Ft(b)p
+Fu(':)870 4729 y Ft([[)47 b($line)g(=~)g([[:space:]]*?\(a\)b)c(]])630
+4870 y Fu(That)24 b(means)g(v)-5 b(alues)24 b(lik)m(e)h(`)p
+Ft(aab)p Fu(')e(and)h(`)30 b Ft(aaaaaab)p Fu(')22 b(will)i(matc)m(h,)j
+(as)d(will)g(a)g(line)g(con)m(taining)630 4980 y(a)31
+b(`)p Ft(b)p Fu(')f(an)m(ywhere)h(in)f(its)g(v)-5 b(alue.)630
+5121 y(Storing)31 b(the)g(regular)g(expression)f(in)h(a)g(shell)g(v)-5
+b(ariable)31 b(is)g(often)g(a)g(useful)f(w)m(a)m(y)i(to)f(a)m(v)m(oid)
+630 5230 y(problems)f(with)g(quoting)h(c)m(haracters)i(that)e(are)g(sp)
+s(ecial)g(to)h(the)f(shell.)41 b(It)31 b(is)g(sometimes)630
+5340 y(di\016cult)24 b(to)h(sp)s(ecify)f(a)h(regular)g(expression)f
+(literally)i(without)f(using)e(quotes,)k(or)d(to)h(k)m(eep)p
+eop end
+%%Page: 14 20
+TeXDict begin 14 19 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(14)630 299
+y(trac)m(k)33 b(of)g(the)f(quoting)g(used)g(b)m(y)g(regular)g
+(expressions)g(while)g(pa)m(ying)h(atten)m(tion)h(to)f(the)630
+408 y(shell's)25 b(quote)g(remo)m(v)-5 b(al.)40 b(Using)25
+b(a)g(shell)g(v)-5 b(ariable)26 b(to)f(store)g(the)g(pattern)g
+(decreases)g(these)630 518 y(problems.)40 b(F)-8 b(or)31
+b(example,)g(the)g(follo)m(wing)h(is)e(equiv)-5 b(alen)m(t)32
+b(to)f(the)g(ab)s(o)m(v)m(e:)870 649 y Ft(pattern='[[:space:]]*?\(a)o
+(\)b')870 758 y([[)47 b($line)g(=~)g($pattern)e(]])630
+889 y Fu(If)28 b(y)m(ou)h(w)m(an)m(t)g(to)g(matc)m(h)h(a)e(c)m
+(haracter)j(that's)e(sp)s(ecial)g(to)g(the)g(regular)f(expression)g
+(gram-)630 999 y(mar,)g(it)g(has)g(to)g(b)s(e)f(quoted)h(to)g(remo)m(v)
+m(e)h(its)f(sp)s(ecial)g(meaning.)40 b(This)27 b(means)g(that)h(in)g
+(the)630 1108 y(pattern)e(`)p Ft(xxx.txt)p Fu(',)g(the)h(`)p
+Ft(.)p Fu(')f(matc)m(hes)i(an)m(y)e(c)m(haracter)i(in)e(the)h(string)f
+(\(its)h(usual)f(regular)630 1218 y(expression)g(meaning\),)i(but)e(in)
+g(the)h(pattern)f(`)p Ft("xxx.txt")p Fu(')f(it)i(can)g(only)f(matc)m(h)
+i(a)e(literal)630 1328 y(`)p Ft(.)p Fu('.)56 b(Shell)35
+b(programmers)f(should)h(tak)m(e)i(sp)s(ecial)e(care)i(with)e(bac)m
+(kslashes,)i(since)f(bac)m(k-)630 1437 y(slashes)27 b(are)g(used)f(b)s
+(oth)g(b)m(y)h(the)f(shell)h(and)f(regular)h(expressions)g(to)g(remo)m
+(v)m(e)h(the)f(sp)s(ecial)630 1547 y(meaning)h(from)f(the)h(follo)m
+(wing)i(c)m(haracter.)41 b(The)27 b(follo)m(wing)j(t)m(w)m(o)f(sets)f
+(of)g(commands)g(are)630 1656 y Fl(not)40 b Fu(equiv)-5
+b(alen)m(t:)870 1787 y Ft(pattern='\\.')870 2006 y([[)47
+b(.)h(=~)f($pattern)e(]])870 2116 y([[)i(.)h(=~)f(\\.)g(]])870
+2335 y([[)g(.)h(=~)f("$pattern")e(]])870 2445 y([[)i(.)h(=~)f('\\.')f
+(]])630 2576 y Fu(The)28 b(\014rst)h(t)m(w)m(o)h(matc)m(hes)g(will)f
+(succeed,)h(but)f(the)g(second)g(t)m(w)m(o)h(will)f(not,)h(b)s(ecause)f
+(in)g(the)630 2685 y(second)39 b(t)m(w)m(o)i(the)e(bac)m(kslash)h(will)
+f(b)s(e)g(part)g(of)g(the)h(pattern)f(to)h(b)s(e)e(matc)m(hed.)68
+b(In)39 b(the)630 2795 y(\014rst)31 b(t)m(w)m(o)h(examples,)h(the)e
+(bac)m(kslash)h(remo)m(v)m(es)h(the)f(sp)s(ecial)g(meaning)f(from)g(`)p
+Ft(.)p Fu(',)h(so)g(the)630 2904 y(literal)f(`)p Ft(.)p
+Fu(')e(matc)m(hes.)42 b(If)28 b(the)i(string)f(in)g(the)g(\014rst)g
+(examples)g(w)m(ere)h(an)m(ything)g(other)f(than)630
+3014 y(`)p Ft(.)p Fu(',)g(sa)m(y)g(`)p Ft(a)p Fu(',)g(the)f(pattern)g
+(w)m(ould)g(not)h(matc)m(h,)h(b)s(ecause)e(the)g(quoted)g(`)p
+Ft(.)p Fu(')h(in)e(the)i(pattern)630 3124 y(loses)i(its)g(sp)s(ecial)g
+(meaning)f(of)h(matc)m(hing)g(an)m(y)g(single)g(c)m(haracter.)630
+3254 y(Expressions)23 b(ma)m(y)h(b)s(e)e(com)m(bined)i(using)f(the)h
+(follo)m(wing)h(op)s(erators,)g(listed)f(in)f(decreasing)630
+3364 y(order)30 b(of)g(precedence:)630 3516 y Ft(\()g
+Fj(expression)e Ft(\))1110 3626 y Fu(Returns)i(the)h(v)-5
+b(alue)31 b(of)g Fr(expression)p Fu(.)42 b(This)30 b(ma)m(y)i(b)s(e)e
+(used)g(to)i(o)m(v)m(erride)g(the)1110 3735 y(normal)e(precedence)h(of)
+g(op)s(erators.)630 3887 y Ft(!)f Fj(expression)1110
+3997 y Fu(T)-8 b(rue)30 b(if)g Fr(expression)g Fu(is)h(false.)630
+4149 y Fj(expression1)c Ft(&&)j Fj(expression2)1110 4259
+y Fu(T)-8 b(rue)30 b(if)g(b)s(oth)g Fr(expression1)38
+b Fu(and)29 b Fr(expression2)38 b Fu(are)31 b(true.)630
+4411 y Fj(expression1)c Ft(||)j Fj(expression2)1110 4520
+y Fu(T)-8 b(rue)30 b(if)g(either)h Fr(expression1)38
+b Fu(or)30 b Fr(expression2)38 b Fu(is)30 b(true.)630
+4672 y(The)24 b Ft(&&)h Fu(and)f Ft(||)g Fu(op)s(erators)h(do)g(not)g
+(ev)-5 b(aluate)27 b Fr(expression2)32 b Fu(if)25 b(the)g(v)-5
+b(alue)25 b(of)g Fr(expression1)630 4782 y Fu(is)30 b(su\016cien)m(t)h
+(to)g(determine)g(the)f(return)g(v)-5 b(alue)31 b(of)f(the)h(en)m(tire)
+g(conditional)h(expression.)150 4974 y Fk(3.2.4.3)63
+b(Grouping)43 b(Commands)150 5121 y Fu(Bash)30 b(pro)m(vides)g(t)m(w)m
+(o)h(w)m(a)m(ys)f(to)h(group)e(a)h(list)g(of)g(commands)f(to)i(b)s(e)e
+(executed)h(as)g(a)h(unit.)40 b(When)29 b(com-)150 5230
+y(mands)h(are)i(group)s(ed,)f(redirections)h(ma)m(y)g(b)s(e)e(applied)i
+(to)g(the)f(en)m(tire)h(command)g(list.)44 b(F)-8 b(or)32
+b(example,)150 5340 y(the)f(output)f(of)g(all)h(the)g(commands)f(in)g
+(the)h(list)g(ma)m(y)g(b)s(e)e(redirected)i(to)g(a)g(single)g(stream.)p
+eop end
+%%Page: 15 21
+TeXDict begin 15 20 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(15)150 299
+y Ft(\(\))870 437 y(\()47 b Fj(list)g Ft(\))630 574 y
+Fu(Placing)30 b(a)f(list)g(of)g(commands)f(b)s(et)m(w)m(een)i(paren)m
+(theses)e(causes)i(a)f(subshell)e(en)m(vironmen)m(t)630
+684 y(to)k(b)s(e)e(created)j(\(see)f(Section)g(3.7.3)h([Command)d
+(Execution)i(En)m(vironmen)m(t],)g(page)f(39\),)630 793
+y(and)d(eac)m(h)h(of)g(the)f(commands)g(in)g Fr(list)j
+Fu(to)f(b)s(e)d(executed)j(in)e(that)h(subshell.)38 b(Since)28
+b(the)f Fr(list)630 903 y Fu(is)i(executed)g(in)f(a)h(subshell,)g(v)-5
+b(ariable)29 b(assignmen)m(ts)g(do)g(not)g(remain)f(in)g(e\013ect)j
+(after)e(the)630 1013 y(subshell)g(completes.)150 1178
+y Ft({})870 1316 y({)47 b Fj(list)p Ft(;)g(})630 1453
+y Fu(Placing)30 b(a)g(list)g(of)g(commands)f(b)s(et)m(w)m(een)h(curly)f
+(braces)g(causes)h(the)f(list)h(to)g(b)s(e)f(executed)630
+1563 y(in)d(the)h(curren)m(t)g(shell)f(con)m(text.)42
+b(No)27 b(subshell)f(is)g(created.)41 b(The)26 b(semicolon)i(\(or)f
+(newline\))630 1673 y(follo)m(wing)32 b Fr(list)h Fu(is)d(required.)275
+1841 y(In)44 b(addition)h(to)h(the)f(creation)i(of)e(a)g(subshell,)j
+(there)e(is)f(a)g(subtle)g(di\013erence)h(b)s(et)m(w)m(een)f(these)150
+1951 y(t)m(w)m(o)c(constructs)e(due)g(to)g(historical)i(reasons.)67
+b(The)39 b(braces)g(are)h Ft(reserved)28 b(words)p Fu(,)40
+b(so)g(they)f(m)m(ust)150 2061 y(b)s(e)d(separated)h(from)f(the)g
+Fr(list)j Fu(b)m(y)e Ft(blank)p Fu(s)e(or)h(other)h(shell)f(metac)m
+(haracters.)62 b(The)36 b(paren)m(theses)h(are)150 2170
+y Ft(operators)p Fu(,)23 b(and)h(are)g(recognized)i(as)e(separate)i
+(tok)m(ens)f(b)m(y)f(the)g(shell)h(ev)m(en)g(if)f(they)g(are)h(not)f
+(separated)150 2280 y(from)30 b(the)g Fr(list)j Fu(b)m(y)e(whitespace.)
+275 2421 y(The)e(exit)j(status)e(of)h(b)s(oth)f(of)g(these)h
+(constructs)g(is)f(the)h(exit)g(status)f(of)h Fr(list)p
+Fu(.)150 2626 y Fk(3.2.5)63 b(Copro)s(cesses)150 2773
+y Fu(A)37 b Ft(coprocess)c Fu(is)k(a)g(shell)f(command)h(preceded)f(b)m
+(y)g(the)h Ft(coproc)d Fu(reserv)m(ed)j(w)m(ord.)59 b(A)36
+b(copro)s(cess)h(is)150 2883 y(executed)g(async)m(hronously)g(in)f(a)h
+(subshell,)g(as)g(if)g(the)f(command)h(had)f(b)s(een)f(terminated)i
+(with)g(the)150 2992 y(`)p Ft(&)p Fu(')d(con)m(trol)h(op)s(erator,)g
+(with)f(a)g(t)m(w)m(o-w)m(a)m(y)i(pip)s(e)d(established)h(b)s(et)m(w)m
+(een)h(the)f(executing)h(shell)f(and)f(the)150 3102 y(copro)s(cess.)275
+3243 y(The)c(format)i(for)f(a)h(copro)s(cess)g(is:)390
+3383 y Ft(coproc)46 b([)p Fj(NAME)p Ft(])g Fj(command)g
+Ft([)p Fj(redirections)p Ft(])150 3524 y Fu(This)39 b(creates)j(a)e
+(copro)s(cess)h(named)f Fr(NAME)p Fu(.)70 b(If)40 b Fr(NAME)46
+b Fu(is)40 b(not)g(supplied,)i(the)e(default)h(name)f(is)150
+3634 y Fr(COPR)m(OC)p Fu(.)d Fr(NAME)28 b Fu(m)m(ust)23
+b(not)g(b)s(e)e(supplied)h(if)g Fr(command)k Fu(is)d(a)g(simple)f
+(command)g(\(see)i(Section)f(3.2.1)150 3743 y([Simple)39
+b(Commands],)h(page)g(8\);)k(otherwise,)e(it)d(is)g(in)m(terpreted)h
+(as)f(the)g(\014rst)f(w)m(ord)h(of)g(the)g(simple)150
+3853 y(command.)275 3994 y(When)j(the)i(copro)s(cess)f(is)g(executed,)
+48 b(the)43 b(shell)g(creates)i(an)e(arra)m(y)g(v)-5
+b(ariable)44 b(\(see)g(Section)g(6.7)150 4103 y([Arra)m(ys],)32
+b(page)g(94\))h(named)e Ft(NAME)f Fu(in)h(the)h(con)m(text)h(of)e(the)h
+(executing)g(shell.)44 b(The)31 b(standard)f(output)150
+4213 y(of)39 b Fr(command)j Fu(is)d(connected)g(via)g(a)g(pip)s(e)f(to)
+i(a)f(\014le)f(descriptor)h(in)f(the)h(executing)h(shell,)h(and)d(that)
+150 4322 y(\014le)i(descriptor)h(is)f(assigned)h(to)g
+Ft(NAME)p Fu([0].)70 b(The)40 b(standard)f(input)h(of)g
+Fr(command)k Fu(is)c(connected)h(via)150 4432 y(a)h(pip)s(e)f(to)i(a)f
+(\014le)g(descriptor)g(in)f(the)h(executing)i(shell,)h(and)c(that)h
+(\014le)g(descriptor)g(is)g(assigned)g(to)150 4542 y
+Ft(NAME)p Fu([1].)69 b(This)39 b(pip)s(e)g(is)h(established)g(b)s
+(efore)f(an)m(y)h(redirections)h(sp)s(eci\014ed)e(b)m(y)g(the)h
+(command)g(\(see)150 4651 y(Section)45 b(3.6)h([Redirections],)k(page)
+45 b(34\).)84 b(The)44 b(\014le)h(descriptors)f(can)h(b)s(e)f(utilized)
+h(as)g(argumen)m(ts)150 4761 y(to)d(shell)g(commands)f(and)g
+(redirections)h(using)f(standard)g(w)m(ord)g(expansions.)74
+b(Other)41 b(than)g(those)150 4870 y(created)27 b(to)g(execute)g
+(command)f(and)f(pro)s(cess)h(substitutions,)h(the)f(\014le)g
+(descriptors)g(are)g(not)h(a)m(v)-5 b(ailable)150 4980
+y(in)30 b(subshells.)275 5121 y(The)d(pro)s(cess)h(ID)h(of)f(the)h
+(shell)f(spa)m(wned)g(to)h(execute)h(the)e(copro)s(cess)h(is)f(a)m(v)-5
+b(ailable)31 b(as)d(the)h(v)-5 b(alue)29 b(of)150 5230
+y(the)k(v)-5 b(ariable)33 b Ft(NAME)p 850 5230 28 4 v
+39 w Fu(PID.)g(The)f Ft(wait)f Fu(builtin)h(command)g(ma)m(y)h(b)s(e)f
+(used)g(to)h(w)m(ait)h(for)e(the)h(copro)s(cess)150 5340
+y(to)e(terminate.)p eop end
+%%Page: 16 22
+TeXDict begin 16 21 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(16)275 299
+y(Since)20 b(the)g(copro)s(cess)h(is)g(created)g(as)g(an)f(async)m
+(hronous)g(command,)i(the)f Ft(coproc)d Fu(command)i(alw)m(a)m(ys)150
+408 y(returns)29 b(success.)41 b(The)30 b(return)f(status)i(of)f(a)h
+(copro)s(cess)g(is)f(the)h(exit)g(status)g(of)f Fr(command)p
+Fu(.)150 612 y Fk(3.2.6)63 b(GNU)41 b(P)m(arallel)150
+759 y Fu(There)30 b(are)h(w)m(a)m(ys)g(to)g(run)f(commands)g(in)g
+(parallel)h(that)h(are)e(not)h(built)g(in)m(to)g(Bash.)41
+b(GNU)31 b(P)m(arallel)i(is)150 869 y(a)e(to)s(ol)g(to)g(do)f(just)g
+(that.)275 1007 y(GNU)e(P)m(arallel,)i(as)e(its)g(name)f(suggests,)j
+(can)d(b)s(e)g(used)g(to)h(build)f(and)g(run)f(commands)h(in)h
+(parallel.)150 1117 y(Y)-8 b(ou)41 b(ma)m(y)g(run)e(the)h(same)h
+(command)f(with)g(di\013eren)m(t)h(argumen)m(ts,)j(whether)39
+b(they)i(are)g(\014lenames,)150 1227 y(usernames,)27
+b(hostnames,)h(or)e(lines)h(read)f(from)h(\014les.)39
+b(GNU)27 b(P)m(arallel)i(pro)m(vides)d(shorthand)g(references)150
+1336 y(to)38 b(man)m(y)g(of)g(the)g(most)g(common)g(op)s(erations)g
+(\(input)f(lines,)j(v)-5 b(arious)38 b(p)s(ortions)f(of)h(the)g(input)e
+(line,)150 1446 y(di\013eren)m(t)f(w)m(a)m(ys)h(to)f(sp)s(ecify)f(the)h
+(input)f(source,)i(and)e(so)h(on\).)54 b(P)m(arallel)36
+b(can)f(replace)h Ft(xargs)d Fu(or)i(feed)150 1555 y(commands)30
+b(from)g(its)h(input)e(sources)h(to)i(sev)m(eral)f(di\013eren)m(t)g
+(instances)g(of)g(Bash.)275 1694 y(F)-8 b(or)33 b(a)g(complete)h
+(description,)g(refer)e(to)i(the)f(GNU)g(P)m(arallel)i(do)s(cumen)m
+(tation.)48 b(A)33 b(few)f(examples)150 1804 y(should)d(pro)m(vide)i(a)
+g(brief)e(in)m(tro)s(duction)i(to)g(its)g(use.)275 1943
+y(F)-8 b(or)37 b(example,)i(it)e(is)f(easy)h(to)g(replace)h
+Ft(xargs)d Fu(to)i(gzip)g(all)g(h)m(tml)g(\014les)f(in)h(the)f(curren)m
+(t)g(directory)150 2052 y(and)30 b(its)h(sub)s(directories:)390
+2191 y Ft(find)47 b(.)g(-type)f(f)i(-name)e('*.html')g(-print)g(|)h
+(parallel)f(gzip)150 2330 y Fu(If)30 b(y)m(ou)h(need)f(to)h(protect)h
+(sp)s(ecial)f(c)m(haracters)g(suc)m(h)g(as)f(newlines)h(in)f(\014le)g
+(names,)h(use)f(\014nd's)f Ft(-print0)150 2439 y Fu(option)i(and)f
+(parallel's)h Ft(-0)f Fu(option.)275 2578 y(Y)-8 b(ou)34
+b(can)g(use)f(P)m(arallel)j(to)e(mo)m(v)m(e)h(\014les)f(from)f(the)h
+(curren)m(t)f(directory)h(when)f(the)h(n)m(um)m(b)s(er)e(of)i(\014les)
+150 2688 y(is)c(to)s(o)i(large)f(to)g(pro)s(cess)f(with)g(one)h
+Ft(mv)f Fu(in)m(v)m(o)s(cation:)390 2827 y Ft(ls)47 b(|)h(parallel)d
+(mv)i({})h(destdir)275 2965 y Fu(As)28 b(y)m(ou)h(can)g(see,)g(the)g
+Fi({})g Fu(is)g(replaced)g(with)f(eac)m(h)i(line)f(read)f(from)g
+(standard)g(input.)39 b(While)29 b(using)150 3075 y Ft(ls)g
+Fu(will)h(w)m(ork)g(in)f(most)h(instances,)h(it)f(is)g(not)g
+(su\016cien)m(t)g(to)h(deal)f(with)f(all)i(\014lenames.)40
+b(If)30 b(y)m(ou)g(need)f(to)150 3185 y(accommo)s(date)j(sp)s(ecial)f
+(c)m(haracters)h(in)e(\014lenames,)h(y)m(ou)f(can)h(use)390
+3323 y Ft(find)47 b(.)g(-depth)f(1)i(\\!)f(-name)f('.*')h(-print0)f(|)h
+(parallel)f(-0)h(mv)g({})g(destdir)150 3462 y Fu(as)31
+b(alluded)f(to)h(ab)s(o)m(v)m(e.)275 3601 y(This)e(will)i(run)e(as)h
+(man)m(y)h Ft(mv)e Fu(commands)h(as)h(there)f(are)h(\014les)f(in)h(the)
+f(curren)m(t)g(directory)-8 b(.)42 b(Y)-8 b(ou)31 b(can)150
+3711 y(em)m(ulate)h(a)f(parallel)g Ft(xargs)e Fu(b)m(y)h(adding)g(the)h
+Ft(-X)f Fu(option:)390 3850 y Ft(find)47 b(.)g(-depth)f(1)i(\\!)f
+(-name)f('.*')h(-print0)f(|)h(parallel)f(-0)h(-X)g(mv)g({})g(destdir)
+275 3988 y Fu(GNU)31 b(P)m(arallel)i(can)e(replace)h(certain)g(common)g
+(idioms)f(that)g(op)s(erate)h(on)f(lines)g(read)g(from)f(a)i(\014le)150
+4098 y(\(in)e(this)h(case,)g(\014lenames)g(listed)g(one)f(p)s(er)g
+(line\):)390 4237 y Ft(while)46 b(IFS=)h(read)g(-r)g(x;)g(do)390
+4346 y(do-something1)d("$x")j("config-$x")390 4456 y(do-something2)d(<)
+k("$x")390 4566 y(done)f(<)g(file)g(|)g(process-output)150
+4704 y Fu(with)30 b(a)h(more)f(compact)i(syn)m(tax)f(reminiscen)m(t)g
+(of)g(lam)m(b)s(das:)390 4843 y Ft(cat)47 b(list)g(|)g(parallel)f
+("do-something1)d({})48 b(config-{})d(;)i(do-something2)e(<)i({}")g(|)
+915 4953 y(process-output)275 5092 y Fu(P)m(arallel)31
+b(pro)m(vides)e(a)h(built-in)g(mec)m(hanism)g(to)g(remo)m(v)m(e)h
+(\014lename)e(extensions,)i(whic)m(h)e(lends)g(itself)150
+5201 y(to)i(batc)m(h)g(\014le)g(transformations)f(or)g(renaming:)390
+5340 y Ft(ls)47 b(*.gz)g(|)g(parallel)f(-j+0)g("zcat)h({})g(|)g(bzip2)g
+(>{.}.bz2)e(&&)j(rm)f({}")p eop end
+%%Page: 17 23
+TeXDict begin 17 22 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(17)150 299
+y(This)28 b(will)i(recompress)e(all)i(\014les)f(in)g(the)g(curren)m(t)g
+(directory)g(with)g(names)g(ending)f(in)h(.gz)h(using)f(bzip2,)150
+408 y(running)37 b(one)i(job)f(p)s(er)f(CPU)h(\(-j)p
+Ft(+)p Fu(0\))i(in)e(parallel.)66 b(\(W)-8 b(e)40 b(use)e
+Ft(ls)g Fu(for)h(brevit)m(y)g(here;)j(using)c Ft(find)g
+Fu(as)150 518 y(ab)s(o)m(v)m(e)e(is)g(more)f(robust)f(in)h(the)h(face)g
+(of)f(\014lenames)h(con)m(taining)g(unexp)s(ected)f(c)m(haracters.\))57
+b(P)m(arallel)150 628 y(can)31 b(tak)m(e)h(argumen)m(ts)e(from)g(the)h
+(command)f(line;)h(the)f(ab)s(o)m(v)m(e)i(can)f(also)g(b)s(e)f(written)
+g(as)390 770 y Ft(parallel)46 b("zcat)g({})h(|)h(bzip2)e(>{.}.bz2)f(&&)
+j(rm)f({}")g(:::)g(*.gz)275 913 y Fu(If)24 b(a)i(command)f(generates)h
+(output,)g(y)m(ou)g(ma)m(y)f(w)m(an)m(t)h(to)g(preserv)m(e)g(the)f
+(input)f(order)h(in)g(the)g(output.)150 1023 y(F)-8 b(or)31
+b(instance,)g(the)g(follo)m(wing)h(command)390 1165 y
+Ft({)581 1275 y(echo)47 b(foss.org.my)d(;)581 1385 y(echo)j(debian.org)
+e(;)581 1494 y(echo)i(freenetproject.org)42 b(;)390 1604
+y(})47 b(|)h(parallel)d(traceroute)150 1747 y Fu(will)31
+b(displa)m(y)f(as)h(output)f(the)g(traceroute)i(in)m(v)m(o)s(cation)h
+(that)e(\014nishes)e(\014rst.)40 b(Adding)30 b(the)g
+Ft(-k)g Fu(option)390 1889 y Ft({)581 1999 y(echo)47
+b(foss.org.my)d(;)581 2108 y(echo)j(debian.org)e(;)581
+2218 y(echo)i(freenetproject.org)42 b(;)390 2328 y(})47
+b(|)h(parallel)d(-k)j(traceroute)150 2470 y Fu(will)31
+b(ensure)e(that)i(the)g(output)f(of)g Ft(traceroute)e(foss.org.my)f
+Fu(is)k(displa)m(y)m(ed)g(\014rst.)275 2613 y(Finally)-8
+b(,)31 b(P)m(arallel)h(can)e(b)s(e)f(used)g(to)i(run)d(a)i(sequence)h
+(of)f(shell)g(commands)f(in)h(parallel,)h(similar)f(to)150
+2723 y(`)p Ft(cat)g(file)f(|)h(bash)p Fu('.)53 b(It)35
+b(is)g(not)g(uncommon)f(to)i(tak)m(e)g(a)f(list)h(of)f(\014lenames,)h
+(create)g(a)g(series)f(of)g(shell)150 2832 y(commands)24
+b(to)h(op)s(erate)h(on)e(them,)i(and)e(feed)g(that)h(list)h(of)e
+(commands)g(to)i(a)f(shell.)39 b(P)m(arallel)26 b(can)f(sp)s(eed)150
+2942 y(this)30 b(up.)40 b(Assuming)30 b(that)h Ft(file)e
+Fu(con)m(tains)i(a)g(list)g(of)g(shell)f(commands,)h(one)f(p)s(er)g
+(line,)390 3085 y Ft(parallel)46 b(-j)h(10)g(<)g(file)150
+3227 y Fu(will)37 b(ev)-5 b(aluate)38 b(the)f(commands)f(using)g(the)h
+(shell)g(\(since)g(no)f(explicit)i(command)e(is)h(supplied)e(as)i(an)
+150 3337 y(argumen)m(t\),)31 b(in)f(blo)s(c)m(ks)h(of)g(ten)f(shell)h
+(jobs)f(at)h(a)g(time.)150 3590 y Fs(3.3)68 b(Shell)45
+b(F)-11 b(unctions)150 3750 y Fu(Shell)35 b(functions)h(are)g(a)g(w)m
+(a)m(y)g(to)h(group)e(commands)g(for)h(later)g(execution)h(using)e(a)h
+(single)g(name)g(for)150 3859 y(the)f(group.)55 b(They)35
+b(are)g(executed)h(just)f(lik)m(e)h(a)g Ft(")p Fu(regular)p
+Ft(")f Fu(command.)54 b(When)35 b(the)h(name)f(of)g(a)h(shell)150
+3969 y(function)j(is)g(used)f(as)h(a)h(simple)f(command)g(name,)i(the)e
+(list)h(of)f(commands)g(asso)s(ciated)i(with)d(that)150
+4078 y(function)25 b(name)h(is)g(executed.)40 b(Shell)25
+b(functions)g(are)i(executed)f(in)f(the)h(curren)m(t)g(shell)g(con)m
+(text;)j(no)c(new)150 4188 y(pro)s(cess)30 b(is)g(created)i(to)f(in)m
+(terpret)g(them.)275 4331 y(F)-8 b(unctions)30 b(are)h(declared)g
+(using)f(this)g(syn)m(tax:)390 4473 y Fj(name)47 b Ft(\(\))g
+Fj(compound-command)c Ft([)48 b Fj(redirections)c Ft(])275
+4616 y Fu(or)390 4759 y Ft(function)i Fj(name)g Ft([\(\)])h
+Fj(compound-command)c Ft([)48 b Fj(redirections)c Ft(])275
+4902 y Fu(This)31 b(de\014nes)h(a)h(shell)g(function)g(named)f
+Fr(name)p Fu(.)48 b(The)32 b(reserv)m(ed)h(w)m(ord)f
+Ft(function)f Fu(is)h(optional.)49 b(If)150 5011 y(the)39
+b Ft(function)f Fu(reserv)m(ed)h(w)m(ord)g(is)g(supplied,)i(the)e
+(paren)m(theses)h(are)f(optional.)69 b(The)39 b Fr(b)s(o)s(dy)45
+b Fu(of)40 b(the)150 5121 y(function)h(is)h(the)g(comp)s(ound)e
+(command)h Fr(comp)s(ound-command)j Fu(\(see)e(Section)h(3.2.4)g([Comp)
+s(ound)150 5230 y(Commands],)33 b(page)h(9\).)49 b(That)33
+b(command)f(is)h(usually)g(a)g Fr(list)j Fu(enclosed)e(b)s(et)m(w)m
+(een)f Fi({)h Fu(and)e Fi(})p Fu(,)i(but)e(ma)m(y)150
+5340 y(b)s(e)39 b(an)m(y)h(comp)s(ound)e(command)i(listed)g(ab)s(o)m(v)
+m(e,)j(with)d(one)g(exception:)60 b(If)39 b(the)h Ft(function)e
+Fu(reserv)m(ed)p eop end
+%%Page: 18 24
+TeXDict begin 18 23 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(18)150 299
+y(w)m(ord)38 b(is)g(used,)h(but)f(the)g(paren)m(theses)h(are)f(not)h
+(supplied,)g(the)f(braces)g(are)h(required.)63 b Fr(comp)s(ound-)150
+408 y(command)39 b Fu(is)c(executed)h(whenev)m(er)f Fr(name)41
+b Fu(is)35 b(sp)s(eci\014ed)g(as)g(the)h(name)f(of)h(a)f(command.)56
+b(When)35 b(the)150 518 y(shell)d(is)h(in)f Fm(posix)f
+Fu(mo)s(de)h(\(see)h(Section)g(6.11)h([Bash)f(POSIX)e(Mo)s(de],)j(page)
+f(99\),)h Fr(name)j Fu(ma)m(y)c(not)g(b)s(e)150 628 y(the)k(same)g(as)g
+(one)g(of)g(the)f(sp)s(ecial)i(builtins)e(\(see)h(Section)h(4.4)g([Sp)s
+(ecial)f(Builtins],)i(page)e(71\).)61 b(An)m(y)150 737
+y(redirections)32 b(\(see)g(Section)h(3.6)f([Redirections],)i(page)e
+(34\))h(asso)s(ciated)g(with)e(the)h(shell)f(function)h(are)150
+847 y(p)s(erformed)d(when)g(the)i(function)f(is)g(executed.)275
+981 y(A)44 b(function)g(de\014nition)h(ma)m(y)g(b)s(e)f(deleted)h
+(using)f(the)h Ft(-f)f Fu(option)h(to)g(the)g Ft(unset)e
+Fu(builtin)h(\(see)150 1090 y(Section)31 b(4.1)h([Bourne)e(Shell)g
+(Builtins],)h(page)h(43\).)275 1224 y(The)26 b(exit)i(status)g(of)f(a)h
+(function)f(de\014nition)g(is)g(zero)h(unless)f(a)g(syn)m(tax)h(error)f
+(o)s(ccurs)g(or)g(a)h(readonly)150 1334 y(function)k(with)f(the)i(same)
+f(name)g(already)h(exists.)46 b(When)32 b(executed,)h(the)f(exit)h
+(status)g(of)f(a)g(function)150 1443 y(is)e(the)h(exit)g(status)g(of)f
+(the)h(last)g(command)f(executed)i(in)e(the)g(b)s(o)s(dy)-8
+b(.)275 1577 y(Note)22 b(that)f(for)f(historical)i(reasons,)h(in)e(the)
+g(most)g(common)g(usage)g(the)g(curly)f(braces)h(that)g(surround)150
+1687 y(the)38 b(b)s(o)s(dy)d(of)j(the)f(function)g(m)m(ust)g(b)s(e)g
+(separated)h(from)f(the)g(b)s(o)s(dy)f(b)m(y)h Ft(blank)p
+Fu(s)f(or)h(newlines.)62 b(This)150 1797 y(is)38 b(b)s(ecause)g(the)h
+(braces)f(are)h(reserv)m(ed)f(w)m(ords)g(and)f(are)i(only)f(recognized)
+i(as)e(suc)m(h)g(when)f(they)i(are)150 1906 y(separated)26
+b(from)f(the)h(command)f(list)i(b)m(y)e(whitespace)h(or)g(another)g
+(shell)g(metac)m(haracter.)41 b(Also,)28 b(when)150 2016
+y(using)i(the)g(braces,)h(the)g Fr(list)i Fu(m)m(ust)d(b)s(e)g
+(terminated)h(b)m(y)f(a)h(semicolon,)h(a)e(`)p Ft(&)p
+Fu(',)h(or)g(a)f(newline.)275 2150 y(When)i(a)i(function)f(is)g
+(executed,)i(the)e(argumen)m(ts)h(to)g(the)f(function)g(b)s(ecome)g
+(the)h(p)s(ositional)g(pa-)150 2259 y(rameters)42 b(during)e(its)i
+(execution)h(\(see)f(Section)g(3.4.1)h([P)m(ositional)h(P)m
+(arameters],)i(page)c(21\).)75 b(The)150 2369 y(sp)s(ecial)37
+b(parameter)f(`)p Ft(#)p Fu(')g(that)h(expands)e(to)i(the)f(n)m(um)m(b)
+s(er)f(of)h(p)s(ositional)h(parameters)f(is)g(up)s(dated)f(to)150
+2478 y(re\015ect)h(the)f(c)m(hange.)56 b(Sp)s(ecial)35
+b(parameter)h Ft(0)f Fu(is)g(unc)m(hanged.)54 b(The)35
+b(\014rst)f(elemen)m(t)j(of)e(the)g Ft(FUNCNAME)150 2588
+y Fu(v)-5 b(ariable)31 b(is)g(set)f(to)i(the)e(name)h(of)f(the)h
+(function)f(while)g(the)h(function)f(is)g(executing.)275
+2722 y(All)25 b(other)g(asp)s(ects)g(of)g(the)g(shell)g(execution)h(en)
+m(vironmen)m(t)g(are)f(iden)m(tical)h(b)s(et)m(w)m(een)g(a)f(function)g
+(and)150 2832 y(its)35 b(caller)i(with)d(these)i(exceptions:)50
+b(the)36 b Ft(DEBUG)d Fu(and)h Ft(RETURN)g Fu(traps)g(are)i(not)f
+(inherited)f(unless)h(the)150 2941 y(function)26 b(has)g(b)s(een)f(giv)
+m(en)i(the)g Ft(trace)d Fu(attribute)j(using)f(the)g
+Ft(declare)e Fu(builtin)i(or)g(the)h Ft(-o)i(functrace)150
+3051 y Fu(option)f(has)e(b)s(een)h(enabled)g(with)g(the)g
+Ft(set)f Fu(builtin,)i(\(in)f(whic)m(h)f(case)j(all)f(functions)e
+(inherit)h(the)g Ft(DEBUG)150 3160 y Fu(and)33 b Ft(RETURN)f
+Fu(traps\),)j(and)e(the)h Ft(ERR)f Fu(trap)h(is)g(not)g(inherited)f
+(unless)g(the)h Ft(-o)c(errtrace)h Fu(shell)j(option)150
+3270 y(has)h(b)s(een)f(enabled.)55 b(See)35 b(Section)h(4.1)g([Bourne)f
+(Shell)g(Builtins],)i(page)f(43,)i(for)c(the)i(description)f(of)150
+3380 y(the)c Ft(trap)e Fu(builtin.)275 3513 y(The)38
+b Ft(FUNCNEST)f Fu(v)-5 b(ariable,)42 b(if)d(set)h(to)g(a)g(n)m(umeric)
+f(v)-5 b(alue)39 b(greater)h(than)f(0,)j(de\014nes)d(a)g(maxim)m(um)150
+3623 y(function)24 b(nesting)h(lev)m(el.)40 b(F)-8 b(unction)25
+b(in)m(v)m(o)s(cations)i(that)e(exceed)g(the)g(limit)g(cause)g(the)g
+(en)m(tire)g(command)150 3733 y(to)31 b(ab)s(ort.)275
+3867 y(If)37 b(the)g(builtin)g(command)h Ft(return)d
+Fu(is)j(executed)g(in)g(a)g(function,)h(the)e(function)h(completes)h
+(and)150 3976 y(execution)25 b(resumes)e(with)h(the)g(next)g(command)f
+(after)i(the)f(function)f(call.)40 b(An)m(y)24 b(command)f(asso)s
+(ciated)150 4086 y(with)36 b(the)h Ft(RETURN)d Fu(trap)i(is)h(executed)
+g(b)s(efore)f(execution)i(resumes.)57 b(When)37 b(a)f(function)g
+(completes,)150 4195 y(the)h(v)-5 b(alues)38 b(of)f(the)g(p)s
+(ositional)h(parameters)f(and)g(the)g(sp)s(ecial)h(parameter)f(`)p
+Ft(#)p Fu(')g(are)h(restored)f(to)h(the)150 4305 y(v)-5
+b(alues)26 b(they)f(had)g(prior)f(to)i(the)g(function's)f(execution.)40
+b(If)25 b(a)h(n)m(umeric)f(argumen)m(t)h(is)f(giv)m(en)h(to)g
+Ft(return)p Fu(,)150 4415 y(that)j(is)g(the)f(function's)h(return)e
+(status;)j(otherwise)f(the)f(function's)h(return)e(status)i(is)f(the)h
+(exit)h(status)150 4524 y(of)h(the)f(last)h(command)f(executed)i(b)s
+(efore)e(the)g Ft(return)p Fu(.)275 4658 y(V)-8 b(ariables)31
+b(lo)s(cal)g(to)f(the)g(function)f(ma)m(y)i(b)s(e)e(declared)h(with)f
+(the)h Ft(local)f Fu(builtin.)40 b(These)29 b(v)-5 b(ariables)150
+4768 y(are)25 b(visible)h(only)f(to)g(the)g(function)g(and)f(the)i
+(commands)e(it)i(in)m(v)m(ok)m(es.)40 b(This)24 b(is)h(particularly)h
+(imp)s(ortan)m(t)150 4877 y(when)j(a)i(shell)g(function)f(calls)h
+(other)g(functions.)275 5011 y(Lo)s(cal)41 b(v)-5 b(ariables)42
+b Ft(")p Fu(shado)m(w)p Ft(")e Fu(v)-5 b(ariables)42
+b(with)f(the)g(same)g(name)g(declared)h(at)f(previous)g(scop)s(es.)150
+5121 y(F)-8 b(or)41 b(instance,)j(a)d(lo)s(cal)h(v)-5
+b(ariable)41 b(declared)g(in)f(a)h(function)f(hides)g(a)h(global)h(v)-5
+b(ariable)41 b(of)g(the)g(same)150 5230 y(name:)59 b(references)40
+b(and)f(assignmen)m(ts)h(refer)f(to)i(the)f(lo)s(cal)g(v)-5
+b(ariable,)43 b(lea)m(ving)f(the)d(global)i(v)-5 b(ariable)150
+5340 y(unmo)s(di\014ed.)39 b(When)30 b(the)g(function)g(returns,)g(the)
+g(global)i(v)-5 b(ariable)31 b(is)g(once)g(again)g(visible.)p
+eop end
+%%Page: 19 25
+TeXDict begin 19 24 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(19)275 299
+y(The)30 b(shell)h(uses)g Fr(dynamic)g(scoping)39 b Fu(to)32
+b(con)m(trol)g(a)f(v)-5 b(ariable's)32 b(visibilit)m(y)h(within)d
+(functions.)42 b(With)150 408 y(dynamic)31 b(scoping,)i(visible)e(v)-5
+b(ariables)32 b(and)f(their)h(v)-5 b(alues)32 b(are)f(a)h(result)g(of)f
+(the)h(sequence)g(of)f(function)150 518 y(calls)37 b(that)g(caused)g
+(execution)g(to)g(reac)m(h)g(the)g(curren)m(t)f(function.)58
+b(The)36 b(v)-5 b(alue)36 b(of)h(a)g(v)-5 b(ariable)37
+b(that)g(a)150 628 y(function)24 b(sees)g(dep)s(ends)f(on)h(its)g(v)-5
+b(alue)25 b(within)e(its)i(caller,)i(if)d(an)m(y)-8 b(,)26
+b(whether)e(that)g(caller)i(is)e(the)g Ft(")p Fu(global)p
+Ft(")150 737 y Fu(scop)s(e)41 b(or)g(another)g(shell)g(function.)73
+b(This)40 b(is)h(also)h(the)f(v)-5 b(alue)41 b(that)h(a)f(lo)s(cal)i(v)
+-5 b(ariable)41 b(declaration)150 847 y Ft(")p Fu(shado)m(ws)p
+Ft(")p Fu(,)30 b(and)g(the)g(v)-5 b(alue)31 b(that)g(is)f(restored)h
+(when)e(the)i(function)f(returns.)275 991 y(F)-8 b(or)41
+b(example,)j(if)d(a)g(v)-5 b(ariable)41 b Fr(v)-5 b(ar)48
+b Fu(is)40 b(declared)h(as)g(lo)s(cal)h(in)f(function)f
+Fr(func1)p Fu(,)j(and)d Fr(func1)48 b Fu(calls)150 1101
+y(another)33 b(function)g Fr(func2)p Fu(,)g(references)g(to)h
+Fr(v)-5 b(ar)39 b Fu(made)33 b(from)f(within)h Fr(func2)39
+b Fu(will)34 b(resolv)m(e)g(to)g(the)f(lo)s(cal)150 1210
+y(v)-5 b(ariable)31 b Fr(v)-5 b(ar)37 b Fu(from)30 b
+Fr(func1)p Fu(,)g(shado)m(wing)h(an)m(y)f(global)i(v)-5
+b(ariable)31 b(named)f Fr(v)-5 b(ar)p Fu(.)275 1355 y(The)29
+b(follo)m(wing)j(script)f(demonstrates)f(this)h(b)s(eha)m(vior.)40
+b(When)31 b(executed,)g(the)g(script)f(displa)m(ys)390
+1499 y Ft(In)47 b(func2,)f(var)h(=)h(func1)e(local)390
+1643 y(func1\(\))390 1753 y({)581 1862 y(local)g(var='func1)f(local')
+581 1972 y(func2)390 2081 y(})390 2301 y(func2\(\))390
+2410 y({)581 2520 y(echo)i("In)f(func2,)h(var)f(=)i($var")390
+2629 y(})390 2849 y(var=global)390 2958 y(func1)275 3102
+y Fu(The)32 b Ft(unset)g Fu(builtin)g(also)i(acts)g(using)e(the)i(same)
+f(dynamic)g(scop)s(e:)46 b(if)33 b(a)g(v)-5 b(ariable)34
+b(is)f(lo)s(cal)h(to)g(the)150 3212 y(curren)m(t)i(scop)s(e,)h
+Ft(unset)e Fu(will)h(unset)g(it;)j(otherwise)e(the)f(unset)f(will)h
+(refer)g(to)h(the)f(v)-5 b(ariable)37 b(found)d(in)150
+3322 y(an)m(y)j(calling)h(scop)s(e)f(as)g(describ)s(ed)f(ab)s(o)m(v)m
+(e.)61 b(If)36 b(a)h(v)-5 b(ariable)38 b(at)f(the)g(curren)m(t)g(lo)s
+(cal)h(scop)s(e)e(is)h(unset,)h(it)150 3431 y(will)27
+b(remain)h(so)f(un)m(til)g(it)h(is)f(reset)h(in)f(that)g(scop)s(e)h(or)
+f(un)m(til)g(the)h(function)e(returns.)39 b(Once)27 b(the)g(function)
+150 3541 y(returns,)34 b(an)m(y)h(instance)g(of)f(the)g(v)-5
+b(ariable)35 b(at)g(a)g(previous)e(scop)s(e)i(will)f(b)s(ecome)h
+(visible.)52 b(If)34 b(the)g(unset)150 3650 y(acts)e(on)f(a)h(v)-5
+b(ariable)32 b(at)g(a)f(previous)g(scop)s(e,)h(an)m(y)f(instance)h(of)f
+(a)h(v)-5 b(ariable)32 b(with)f(that)h(name)f(that)h(had)150
+3760 y(b)s(een)e(shado)m(w)m(ed)g(will)h(b)s(ecome)g(visible.)275
+3904 y(F)-8 b(unction)51 b(names)f(and)g(de\014nitions)g(ma)m(y)i(b)s
+(e)e(listed)h(with)f(the)h Ft(-f)f Fu(option)h(to)g(the)g
+Ft(declare)150 4014 y Fu(\()p Ft(typeset)p Fu(\))35 b(builtin)g
+(command)h(\(see)h(Section)g(4.2)g([Bash)f(Builtins],)i(page)f(50\).)59
+b(The)35 b Ft(-F)h Fu(option)g(to)150 4123 y Ft(declare)e
+Fu(or)i Ft(typeset)e Fu(will)i(list)h(the)f(function)g(names)g(only)g
+(\(and)g(optionally)h(the)f(source)g(\014le)h(and)150
+4233 y(line)c(n)m(um)m(b)s(er,)g(if)f(the)h Ft(extdebug)e
+Fu(shell)i(option)g(is)g(enabled\).)49 b(F)-8 b(unctions)33
+b(ma)m(y)h(b)s(e)e(exp)s(orted)g(so)h(that)150 4343 y(subshells)j
+(automatically)k(ha)m(v)m(e)f(them)e(de\014ned)f(with)h(the)h
+Ft(-f)e Fu(option)i(to)g(the)g Ft(export)d Fu(builtin)i(\(see)150
+4452 y(Section)31 b(4.1)h([Bourne)e(Shell)g(Builtins],)h(page)h(43\).)
+275 4596 y(F)-8 b(unctions)33 b(ma)m(y)g(b)s(e)g(recursiv)m(e.)48
+b(The)32 b Ft(FUNCNEST)f Fu(v)-5 b(ariable)34 b(ma)m(y)f(b)s(e)f(used)g
+(to)i(limit)g(the)f(depth)f(of)150 4706 y(the)27 b(function)f(call)i
+(stac)m(k)h(and)d(restrict)h(the)g(n)m(um)m(b)s(er)f(of)h(function)f
+(in)m(v)m(o)s(cations.)42 b(By)27 b(default,)g(no)g(limit)150
+4816 y(is)j(placed)h(on)g(the)f(n)m(um)m(b)s(er)f(of)i(recursiv)m(e)f
+(calls.)150 5071 y Fs(3.4)68 b(Shell)45 b(P)l(arameters)150
+5230 y Fu(A)23 b Fr(parameter)31 b Fu(is)23 b(an)g(en)m(tit)m(y)i(that)
+f(stores)g(v)-5 b(alues.)39 b(It)23 b(can)h(b)s(e)f(a)g
+Ft(name)p Fu(,)h(a)g(n)m(um)m(b)s(er,)f(or)h(one)f(of)h(the)f(sp)s
+(ecial)150 5340 y(c)m(haracters)i(listed)e(b)s(elo)m(w.)39
+b(A)23 b Fr(v)-5 b(ariable)30 b Fu(is)23 b(a)g(parameter)h(denoted)f(b)
+m(y)h(a)f Ft(name)p Fu(.)37 b(A)24 b(v)-5 b(ariable)24
+b(has)f(a)g Fr(v)-5 b(alue)p eop end
+%%Page: 20 26
+TeXDict begin 20 25 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(20)150 299
+y(and)33 b(zero)i(or)f(more)g Fr(attributes)p Fu(.)52
+b(A)m(ttributes)35 b(are)f(assigned)g(using)g(the)g Ft(declare)e
+Fu(builtin)h(command)150 408 y(\(see)e(the)g(description)f(of)h(the)f
+Ft(declare)f Fu(builtin)h(in)g(Section)h(4.2)g([Bash)g(Builtins],)g
+(page)g(50\).)275 542 y(A)d(parameter)h(is)g(set)g(if)f(it)h(has)f(b)s
+(een)g(assigned)h(a)g(v)-5 b(alue.)40 b(The)28 b(n)m(ull)h(string)f(is)
+h(a)g(v)-5 b(alid)28 b(v)-5 b(alue.)41 b(Once)150 652
+y(a)31 b(v)-5 b(ariable)31 b(is)f(set,)i(it)e(ma)m(y)h(b)s(e)f(unset)g
+(only)h(b)m(y)f(using)g(the)g Ft(unset)f Fu(builtin)h(command.)275
+786 y(A)g(v)-5 b(ariable)31 b(ma)m(y)g(b)s(e)f(assigned)g(to)i(b)m(y)e
+(a)h(statemen)m(t)h(of)e(the)h(form)390 920 y Fj(name)p
+Ft(=[)p Fj(value)p Ft(])150 1054 y Fu(If)j Fr(v)-5 b(alue)40
+b Fu(is)35 b(not)g(giv)m(en,)h(the)f(v)-5 b(ariable)35
+b(is)g(assigned)g(the)f(n)m(ull)h(string.)53 b(All)35
+b Fr(v)-5 b(alue)5 b Fu(s)35 b(undergo)f(tilde)h(ex-)150
+1163 y(pansion,)h(parameter)f(and)f(v)-5 b(ariable)36
+b(expansion,)f(command)g(substitution,)h(arithmetic)g(expansion,)150
+1273 y(and)k(quote)h(remo)m(v)-5 b(al)42 b(\(detailed)h(b)s(elo)m(w\).)
+72 b(If)40 b(the)h(v)-5 b(ariable)41 b(has)g(its)g Ft(integer)e
+Fu(attribute)i(set,)j(then)150 1383 y Fr(v)-5 b(alue)38
+b Fu(is)33 b(ev)-5 b(aluated)34 b(as)f(an)g(arithmetic)h(expression)f
+(ev)m(en)h(if)e(the)h Ft($\(\(...)o(\)\))f Fu(expansion)h(is)g(not)g
+(used)150 1492 y(\(see)e(Section)g(3.5.5)i([Arithmetic)e(Expansion],)f
+(page)h(31\).)42 b(W)-8 b(ord)31 b(splitting)g(is)g(not)f(p)s
+(erformed,)f(with)150 1602 y(the)35 b(exception)h(of)f
+Ft("$@")f Fu(as)h(explained)g(b)s(elo)m(w.)54 b(Filename)36
+b(expansion)f(is)g(not)g(p)s(erformed.)53 b(Assign-)150
+1711 y(men)m(t)33 b(statemen)m(ts)h(ma)m(y)f(also)g(app)s(ear)f(as)g
+(argumen)m(ts)h(to)g(the)g Ft(alias)p Fu(,)e Ft(declare)p
+Fu(,)g Ft(typeset)p Fu(,)g Ft(export)p Fu(,)150 1821
+y Ft(readonly)p Fu(,)38 b(and)g Ft(local)f Fu(builtin)h(commands)g(\()p
+Fr(declaration)j Fu(commands\).)64 b(When)39 b(in)f Fm(posix)f
+Fu(mo)s(de)150 1931 y(\(see)c(Section)f(6.11)h([Bash)g(POSIX)d(Mo)s
+(de],)j(page)f(99\),)i(these)e(builtins)f(ma)m(y)i(app)s(ear)e(in)g(a)h
+(command)150 2040 y(after)i(one)g(or)f(more)h(instances)g(of)f(the)h
+Ft(command)d Fu(builtin)i(and)g(retain)h(these)g(assignmen)m(t)g
+(statemen)m(t)150 2150 y(prop)s(erties.)275 2284 y(In)29
+b(the)h(con)m(text)i(where)d(an)h(assignmen)m(t)h(statemen)m(t)h(is)e
+(assigning)g(a)h(v)-5 b(alue)30 b(to)h(a)f(shell)g(v)-5
+b(ariable)31 b(or)150 2393 y(arra)m(y)24 b(index)f(\(see)h(Section)g
+(6.7)g([Arra)m(ys],)i(page)e(94\),)i(the)e(`)p Ft(+=)p
+Fu(')f(op)s(erator)g(can)h(b)s(e)f(used)f(to)i(app)s(end)e(to)i(or)150
+2503 y(add)k(to)i(the)f(v)-5 b(ariable's)30 b(previous)e(v)-5
+b(alue.)41 b(This)28 b(includes)g(argumen)m(ts)i(to)f(builtin)g
+(commands)f(suc)m(h)h(as)150 2612 y Ft(declare)e Fu(that)i(accept)h
+(assignmen)m(t)f(statemen)m(ts)h(\()p Fr(declaration)h
+Fu(commands\).)40 b(When)28 b(`)p Ft(+=)p Fu(')h(is)f(applied)150
+2722 y(to)d(a)f(v)-5 b(ariable)24 b(for)g(whic)m(h)f(the)h
+Fr(in)m(teger)32 b Fu(attribute)24 b(has)g(b)s(een)f(set,)j
+Fr(v)-5 b(alue)29 b Fu(is)24 b(ev)-5 b(aluated)25 b(as)f(an)g
+(arithmetic)150 2832 y(expression)30 b(and)f(added)g(to)i(the)f(v)-5
+b(ariable's)30 b(curren)m(t)g(v)-5 b(alue,)31 b(whic)m(h)e(is)h(also)h
+(ev)-5 b(aluated.)42 b(When)29 b(`)p Ft(+=)p Fu(')h(is)150
+2941 y(applied)25 b(to)h(an)f(arra)m(y)h(v)-5 b(ariable)26
+b(using)f(comp)s(ound)f(assignmen)m(t)i(\(see)g(Section)g(6.7)g([Arra)m
+(ys],)h(page)f(94\),)150 3051 y(the)33 b(v)-5 b(ariable's)33
+b(v)-5 b(alue)33 b(is)g(not)g(unset)f(\(as)h(it)g(is)g(when)e(using)i
+(`)p Ft(=)p Fu('\),)g(and)f(new)g(v)-5 b(alues)33 b(are)g(app)s(ended)e
+(to)150 3160 y(the)26 b(arra)m(y)h(b)s(eginning)e(at)i(one)f(greater)h
+(than)f(the)g(arra)m(y's)h(maxim)m(um)f(index)f(\(for)i(indexed)e(arra)
+m(ys\),)j(or)150 3270 y(added)c(as)i(additional)g(k)m(ey-v)-5
+b(alue)26 b(pairs)f(in)g(an)g(asso)s(ciativ)m(e)j(arra)m(y)-8
+b(.)40 b(When)24 b(applied)h(to)h(a)g(string-v)-5 b(alued)150
+3380 y(v)g(ariable,)31 b Fr(v)-5 b(alue)36 b Fu(is)31
+b(expanded)e(and)h(app)s(ended)f(to)i(the)f(v)-5 b(ariable's)32
+b(v)-5 b(alue.)275 3513 y(A)28 b(v)-5 b(ariable)29 b(can)f(b)s(e)f
+(assigned)i(the)f Fr(nameref)45 b Fu(attribute)29 b(using)f(the)g
+Ft(-n)f Fu(option)i(to)g(the)f Ft(declare)e Fu(or)150
+3623 y Ft(local)f Fu(builtin)h(commands)g(\(see)i(Section)f(4.2)h
+([Bash)f(Builtins],)h(page)f(50\))h(to)f(create)i(a)e
+Fr(nameref)p Fu(,)g(or)g(a)150 3733 y(reference)f(to)g(another)f(v)-5
+b(ariable.)40 b(This)24 b(allo)m(ws)j(v)-5 b(ariables)26
+b(to)g(b)s(e)e(manipulated)h(indirectly)-8 b(.)40 b(Whenev)m(er)150
+3842 y(the)31 b(nameref)g(v)-5 b(ariable)32 b(is)f(referenced,)g
+(assigned)h(to,)g(unset,)f(or)g(has)f(its)i(attributes)f(mo)s(di\014ed)
+f(\(other)150 3952 y(than)c(using)g(or)h(c)m(hanging)g(the)g(nameref)f
+(attribute)i(itself)7 b(\),)29 b(the)d(op)s(eration)h(is)g(actually)h
+(p)s(erformed)d(on)150 4061 y(the)31 b(v)-5 b(ariable)31
+b(sp)s(eci\014ed)f(b)m(y)g(the)h(nameref)f(v)-5 b(ariable's)31
+b(v)-5 b(alue.)42 b(A)30 b(nameref)g(is)h(commonly)g(used)e(within)150
+4171 y(shell)h(functions)g(to)h(refer)f(to)h(a)f(v)-5
+b(ariable)31 b(whose)f(name)h(is)f(passed)g(as)g(an)g(argumen)m(t)h(to)
+g(the)f(function.)150 4281 y(F)-8 b(or)31 b(instance,)g(if)g(a)g(v)-5
+b(ariable)31 b(name)f(is)h(passed)e(to)j(a)e(shell)h(function)f(as)h
+(its)f(\014rst)g(argumen)m(t,)h(running)390 4415 y Ft(declare)46
+b(-n)h(ref=$1)150 4548 y Fu(inside)31 b(the)h(function)f(creates)i(a)g
+(nameref)e(v)-5 b(ariable)32 b Fr(ref)49 b Fu(whose)32
+b(v)-5 b(alue)32 b(is)g(the)f(v)-5 b(ariable)33 b(name)e(passed)150
+4658 y(as)e(the)h(\014rst)e(argumen)m(t.)41 b(References)30
+b(and)e(assignmen)m(ts)i(to)g Fr(ref)p Fu(,)f(and)g(c)m(hanges)h(to)g
+(its)f(attributes,)i(are)150 4768 y(treated)g(as)f(references,)g
+(assignmen)m(ts,)h(and)e(attribute)i(mo)s(di\014cations)f(to)h(the)f(v)
+-5 b(ariable)30 b(whose)g(name)150 4877 y(w)m(as)h(passed)f(as)g
+Ft($1)p Fu(.)275 5011 y(If)h(the)g(con)m(trol)i(v)-5
+b(ariable)32 b(in)g(a)f Ft(for)g Fu(lo)s(op)h(has)f(the)g(nameref)h
+(attribute,)g(the)g(list)g(of)g(w)m(ords)f(can)h(b)s(e)150
+5121 y(a)h(list)h(of)f(shell)g(v)-5 b(ariables,)34 b(and)e(a)i(name)f
+(reference)g(will)g(b)s(e)f(established)h(for)g(eac)m(h)h(w)m(ord)e(in)
+h(the)g(list,)150 5230 y(in)c(turn,)g(when)g(the)h(lo)s(op)g(is)g
+(executed.)41 b(Arra)m(y)30 b(v)-5 b(ariables)30 b(cannot)h(b)s(e)e
+(giv)m(en)h(the)g(nameref)g(attribute.)150 5340 y(Ho)m(w)m(ev)m(er,)39
+b(nameref)d(v)-5 b(ariables)36 b(can)g(reference)g(arra)m(y)g(v)-5
+b(ariables)37 b(and)e(subscripted)f(arra)m(y)i(v)-5 b(ariables.)p
+eop end
+%%Page: 21 27
+TeXDict begin 21 26 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(21)150 299
+y(Namerefs)36 b(can)f(b)s(e)g(unset)g(using)g(the)h Ft(-n)e
+Fu(option)i(to)g(the)g Ft(unset)e Fu(builtin)h(\(see)h(Section)g(4.1)h
+([Bourne)150 408 y(Shell)43 b(Builtins],)j(page)e(43\).)79
+b(Otherwise,)45 b(if)e Ft(unset)e Fu(is)i(executed)h(with)e(the)h(name)
+g(of)g(a)g(nameref)150 518 y(v)-5 b(ariable)31 b(as)g(an)f(argumen)m
+(t,)h(the)g(v)-5 b(ariable)31 b(referenced)f(b)m(y)g(the)h(nameref)f(v)
+-5 b(ariable)31 b(will)g(b)s(e)f(unset.)150 741 y Fk(3.4.1)63
+b(P)m(ositional)41 b(P)m(arameters)150 888 y Fu(A)28
+b Fr(p)s(ositional)h(parameter)35 b Fu(is)28 b(a)g(parameter)g(denoted)
+g(b)m(y)g(one)g(or)g(more)g(digits,)h(other)g(than)e(the)h(single)150
+998 y(digit)34 b Ft(0)p Fu(.)48 b(P)m(ositional)36 b(parameters)d(are)g
+(assigned)h(from)e(the)i(shell's)f(argumen)m(ts)g(when)f(it)i(is)f(in)m
+(v)m(ok)m(ed,)150 1107 y(and)38 b(ma)m(y)i(b)s(e)e(reassigned)i(using)e
+(the)h Ft(set)g Fu(builtin)f(command.)67 b(P)m(ositional)41
+b(parameter)e Ft(N)g Fu(ma)m(y)h(b)s(e)150 1217 y(referenced)34
+b(as)h Ft(${N})p Fu(,)g(or)f(as)h Ft($N)e Fu(when)h Ft(N)g
+Fu(consists)h(of)f(a)h(single)g(digit.)54 b(P)m(ositional)37
+b(parameters)d(ma)m(y)150 1327 y(not)j(b)s(e)f(assigned)h(to)g(with)f
+(assignmen)m(t)i(statemen)m(ts.)61 b(The)36 b Ft(set)g
+Fu(and)g Ft(shift)f Fu(builtins)h(are)h(used)f(to)150
+1436 y(set)k(and)f(unset)f(them)i(\(see)g(Chapter)f(4)g([Shell)h
+(Builtin)g(Commands],)h(page)f(43\).)68 b(The)39 b(p)s(ositional)150
+1546 y(parameters)44 b(are)g(temp)s(orarily)g(replaced)h(when)e(a)h
+(shell)g(function)g(is)g(executed)g(\(see)h(Section)g(3.3)150
+1655 y([Shell)30 b(F)-8 b(unctions],)32 b(page)f(17\).)275
+1814 y(When)c(a)i(p)s(ositional)g(parameter)g(consisting)f(of)h(more)f
+(than)g(a)g(single)h(digit)g(is)f(expanded,)g(it)h(m)m(ust)150
+1923 y(b)s(e)h(enclosed)h(in)f(braces.)150 2146 y Fk(3.4.2)63
+b(Sp)s(ecial)41 b(P)m(arameters)150 2293 y Fu(The)d(shell)g(treats)h
+(sev)m(eral)g(parameters)f(sp)s(ecially)-8 b(.)65 b(These)38
+b(parameters)h(ma)m(y)f(only)g(b)s(e)g(referenced;)150
+2403 y(assignmen)m(t)31 b(to)g(them)g(is)f(not)h(allo)m(w)m(ed.)150
+2598 y Ft(*)432 b Fu(\($*\))38 b(Expands)d(to)i(the)f(p)s(ositional)h
+(parameters,)h(starting)f(from)f(one.)59 b(When)36 b(the)g(ex-)630
+2708 y(pansion)h(is)h(not)g(within)f(double)g(quotes,)j(eac)m(h)f(p)s
+(ositional)f(parameter)g(expands)f(to)i(a)630 2817 y(separate)e(w)m
+(ord.)56 b(In)35 b(con)m(texts)i(where)e(it)h(is)g(p)s(erformed,)g
+(those)g(w)m(ords)f(are)h(sub)5 b(ject)35 b(to)630 2927
+y(further)h(w)m(ord)h(splitting)h(and)f(pathname)g(expansion.)61
+b(When)38 b(the)f(expansion)g(o)s(ccurs)630 3037 y(within)25
+b(double)h(quotes,)h(it)f(expands)f(to)i(a)f(single)g(w)m(ord)f(with)h
+(the)g(v)-5 b(alue)26 b(of)g(eac)m(h)h(param-)630 3146
+y(eter)32 b(separated)h(b)m(y)e(the)h(\014rst)f(c)m(haracter)i(of)f
+(the)g Ft(IFS)f Fu(sp)s(ecial)h(v)-5 b(ariable.)45 b(That)32
+b(is,)g Ft("$*")630 3256 y Fu(is)f(equiv)-5 b(alen)m(t)32
+b(to)g Ft("$1)p Fj(c)p Ft($2)p Fj(c)p Ft(...)m(")p Fu(,)f(where)g
+Fr(c)37 b Fu(is)31 b(the)g(\014rst)f(c)m(haracter)j(of)e(the)g(v)-5
+b(alue)32 b(of)f(the)630 3365 y Ft(IFS)e Fu(v)-5 b(ariable.)41
+b(If)29 b Ft(IFS)g Fu(is)h(unset,)f(the)h(parameters)g(are)g(separated)
+g(b)m(y)g(spaces.)41 b(If)29 b Ft(IFS)g Fu(is)630 3475
+y(n)m(ull,)i(the)f(parameters)h(are)g(joined)f(without)g(in)m(terv)m
+(ening)i(separators.)150 3658 y Ft(@)432 b Fu(\($@\))43
+b(Expands)f(to)h(the)g(p)s(ositional)g(parameters,)k(starting)c(from)f
+(one.)78 b(In)42 b(con)m(texts)630 3768 y(where)35 b(w)m(ord)h
+(splitting)g(is)g(p)s(erformed,)g(this)g(expands)e(eac)m(h)j(p)s
+(ositional)g(parameter)f(to)630 3877 y(a)d(separate)h(w)m(ord;)g(if)f
+(not)g(within)g(double)f(quotes,)j(these)e(w)m(ords)g(are)g(sub)5
+b(ject)33 b(to)g(w)m(ord)630 3987 y(splitting.)60 b(In)36
+b(con)m(texts)j(where)d(w)m(ord)g(splitting)h(is)g(not)g(p)s(erformed,)
+g(this)f(expands)g(to)630 4097 y(a)c(single)h(w)m(ord)e(with)h(eac)m(h)
+h(p)s(ositional)g(parameter)f(separated)g(b)m(y)g(a)g(space.)46
+b(When)32 b(the)630 4206 y(expansion)i(o)s(ccurs)h(within)e(double)i
+(quotes,)h(and)e(w)m(ord)g(splitting)h(is)g(p)s(erformed,)f(eac)m(h)630
+4316 y(parameter)23 b(expands)f(to)i(a)f(separate)h(w)m(ord.)37
+b(That)23 b(is,)i Ft("$@")c Fu(is)i(equiv)-5 b(alen)m(t)24
+b(to)g Ft("$1")29 b("$2")630 4425 y(...)o Fu(.)39 b(If)26
+b(the)g(double-quoted)g(expansion)f(o)s(ccurs)h(within)f(a)h(w)m(ord,)h
+(the)f(expansion)g(of)g(the)630 4535 y(\014rst)31 b(parameter)h(is)g
+(joined)f(with)g(the)h(b)s(eginning)f(part)h(of)f(the)h(original)h(w)m
+(ord,)f(and)f(the)630 4645 y(expansion)25 b(of)g(the)h(last)g
+(parameter)f(is)h(joined)f(with)g(the)g(last)h(part)f(of)g(the)h
+(original)g(w)m(ord.)630 4754 y(When)i(there)g(are)g(no)g(p)s
+(ositional)g(parameters,)h Ft("$@")e Fu(and)g Ft($@)h
+Fu(expand)f(to)h(nothing)g(\(i.e.,)630 4864 y(they)j(are)f(remo)m(v)m
+(ed\).)150 5047 y Ft(#)432 b Fu(\($#\))31 b(Expands)e(to)i(the)g(n)m
+(um)m(b)s(er)e(of)h(p)s(ositional)i(parameters)e(in)g(decimal.)150
+5230 y Ft(?)432 b Fu(\($?\))88 b(Expands)45 b(to)h(the)g(exit)h(status)
+f(of)g(the)g(most)h(recen)m(tly)g(executed)g(foreground)630
+5340 y(pip)s(eline.)p eop end
+%%Page: 22 28
+TeXDict begin 22 27 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(22)150 299
+y Ft(-)432 b Fu(\($-,)24 b(a)e(h)m(yphen.\))37 b(Expands)20
+b(to)i(the)f(curren)m(t)h(option)f(\015ags)h(as)f(sp)s(eci\014ed)g(up)s
+(on)f(in)m(v)m(o)s(cation,)630 408 y(b)m(y)38 b(the)h
+Ft(set)f Fu(builtin)g(command,)j(or)d(those)i(set)f(b)m(y)f(the)h
+(shell)g(itself)g(\(suc)m(h)g(as)g(the)g Ft(-i)630 518
+y Fu(option\).)150 675 y Ft($)432 b Fu(\($$\))31 b(Expands)d(to)j(the)e
+(pro)s(cess)h Fm(id)f Fu(of)h(the)g(shell.)41 b(In)28
+b(a)i Ft(\(\))f Fu(subshell,)h(it)g(expands)e(to)j(the)630
+785 y(pro)s(cess)f Fm(id)g Fu(of)h(the)g(in)m(v)m(oking)g(shell,)g(not)
+g(the)f(subshell.)150 943 y Ft(!)432 b Fu(\($!\))51 b(Expands)32
+b(to)i(the)g(pro)s(cess)f Fm(id)h Fu(of)f(the)h(job)f(most)h(recen)m
+(tly)h(placed)f(in)m(to)g(the)g(bac)m(k-)630 1052 y(ground,)26
+b(whether)g(executed)g(as)h(an)f(async)m(hronous)f(command)h(or)g
+(using)g(the)g Ft(bg)f Fu(builtin)630 1162 y(\(see)31
+b(Section)h(7.2)f([Job)f(Con)m(trol)h(Builtins],)g(page)h(104\).)150
+1319 y Ft(0)432 b Fu(\($0\))46 b(Expands)d(to)i(the)g(name)g(of)f(the)h
+(shell)g(or)f(shell)h(script.)83 b(This)44 b(is)g(set)h(at)h(shell)630
+1429 y(initialization.)d(If)27 b(Bash)h(is)g(in)m(v)m(ok)m(ed)h(with)e
+(a)i(\014le)e(of)h(commands)g(\(see)g(Section)h(3.8)g([Shell)630
+1538 y(Scripts],)g(page)g(41\),)h Ft($0)e Fu(is)h(set)g(to)g(the)f
+(name)h(of)f(that)h(\014le.)41 b(If)28 b(Bash)g(is)h(started)g(with)f
+(the)630 1648 y Ft(-c)i Fu(option)h(\(see)h(Section)g(6.1)f([In)m(v)m
+(oking)h(Bash],)g(page)f(85\),)i(then)d Ft($0)g Fu(is)h(set)g(to)h(the)
+f(\014rst)630 1758 y(argumen)m(t)g(after)g(the)g(string)g(to)g(b)s(e)f
+(executed,)i(if)f(one)g(is)f(presen)m(t.)42 b(Otherwise,)31
+b(it)g(is)f(set)630 1867 y(to)h(the)g(\014lename)f(used)g(to)h(in)m(v)m
+(ok)m(e)h(Bash,)f(as)g(giv)m(en)g(b)m(y)f(argumen)m(t)h(zero.)150
+2025 y Ft(_)432 b Fu(\($)p 716 2025 28 4 v 41 w(,)41
+b(an)e(underscore.\))67 b(A)m(t)40 b(shell)f(startup,)i(set)f(to)g(the)
+f(absolute)h(pathname)f(used)f(to)630 2134 y(in)m(v)m(ok)m(e)43
+b(the)e(shell)g(or)g(shell)g(script)g(b)s(eing)f(executed)i(as)f
+(passed)g(in)f(the)h(en)m(vironmen)m(t)630 2244 y(or)34
+b(argumen)m(t)g(list.)52 b(Subsequen)m(tly)-8 b(,)34
+b(expands)f(to)i(the)f(last)h(argumen)m(t)f(to)g(the)g(previous)630
+2353 y(simple)g(command)f(executed)i(in)e(the)h(foreground,)g(after)g
+(expansion.)51 b(Also)34 b(set)g(to)h(the)630 2463 y(full)d(pathname)h
+(used)f(to)i(in)m(v)m(ok)m(e)g(eac)m(h)g(command)f(executed)g(and)f
+(placed)i(in)e(the)h(en)m(vi-)630 2572 y(ronmen)m(t)24
+b(exp)s(orted)g(to)h(that)g(command.)38 b(When)24 b(c)m(hec)m(king)i
+(mail,)h(this)d(parameter)g(holds)630 2682 y(the)31 b(name)f(of)h(the)f
+(mail)h(\014le.)150 2921 y Fs(3.5)68 b(Shell)45 b(Expansions)150
+3080 y Fu(Expansion)27 b(is)i(p)s(erformed)d(on)i(the)g(command)g(line)
+h(after)f(it)h(has)f(b)s(een)f(split)h(in)m(to)i Ft(token)p
+Fu(s.)38 b(There)28 b(are)150 3190 y(sev)m(en)j(kinds)e(of)i(expansion)
+f(p)s(erformed:)225 3323 y Fq(\017)60 b Fu(brace)31 b(expansion)225
+3457 y Fq(\017)60 b Fu(tilde)31 b(expansion)225 3590
+y Fq(\017)60 b Fu(parameter)31 b(and)f(v)-5 b(ariable)31
+b(expansion)225 3724 y Fq(\017)60 b Fu(command)30 b(substitution)225
+3857 y Fq(\017)60 b Fu(arithmetic)32 b(expansion)225
+3991 y Fq(\017)60 b Fu(w)m(ord)30 b(splitting)225 4124
+y Fq(\017)60 b Fu(\014lename)31 b(expansion)275 4282
+y(The)24 b(order)h(of)h(expansions)f(is:)39 b(brace)25
+b(expansion;)j(tilde)e(expansion,)g(parameter)g(and)f(v)-5
+b(ariable)26 b(ex-)150 4391 y(pansion,)j(arithmetic)i(expansion,)f(and)
+f(command)g(substitution)g(\(done)g(in)h(a)f(left-to-righ)m(t)k
+(fashion\);)150 4501 y(w)m(ord)d(splitting;)h(and)f(\014lename)h
+(expansion.)275 4635 y(On)42 b(systems)h(that)h(can)g(supp)s(ort)e(it,)
+47 b(there)d(is)f(an)h(additional)g(expansion)f(a)m(v)-5
+b(ailable:)69 b Fr(pro)s(cess)150 4744 y(substitution)p
+Fu(.)50 b(This)33 b(is)h(p)s(erformed)e(at)j(the)f(same)g(time)g(as)g
+(tilde,)i(parameter,)f(v)-5 b(ariable,)35 b(and)f(arith-)150
+4854 y(metic)d(expansion)g(and)e(command)i(substitution.)275
+4987 y(After)f(these)h(expansions)f(are)g(p)s(erformed,)f(quote)i(c)m
+(haracters)h(presen)m(t)e(in)g(the)g(original)i(w)m(ord)e(are)150
+5097 y(remo)m(v)m(ed)h(unless)f(they)h(ha)m(v)m(e)g(b)s(een)f(quoted)g
+(themselv)m(es)i(\()p Fr(quote)f(remo)m(v)-5 b(al)t Fu(\).)275
+5230 y(Only)31 b(brace)i(expansion,)h(w)m(ord)e(splitting,)i(and)e
+(\014lename)h(expansion)f(can)h(increase)g(the)g(n)m(um)m(b)s(er)150
+5340 y(of)24 b(w)m(ords)g(of)g(the)h(expansion;)h(other)e(expansions)g
+(expand)g(a)g(single)h(w)m(ord)f(to)h(a)f(single)h(w)m(ord.)38
+b(The)24 b(only)p eop end
+%%Page: 23 29
+TeXDict begin 23 28 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(23)150 299
+y(exceptions)26 b(to)f(this)g(are)g(the)g(expansions)g(of)g
+Ft("$@")f Fu(and)g Ft($*)g Fu(\(see)i(Section)f(3.4.2)i([Sp)s(ecial)e
+(P)m(arameters],)150 408 y(page)31 b(21\),)h(and)e Ft("${)p
+Fj(name)p Ft([@]}")d Fu(and)i Ft(${)p Fj(name)p Ft([*]})f
+Fu(\(see)j(Section)h(6.7)f([Arra)m(ys],)g(page)g(94\).)275
+537 y(After)41 b(all)i(expansions,)h Ft(quote)29 b(removal)40
+b Fu(\(see)i(Section)h(3.5.9)g([Quote)f(Remo)m(v)-5 b(al],)47
+b(page)42 b(34\))h(is)150 647 y(p)s(erformed.)150 834
+y Fk(3.5.1)63 b(Brace)40 b(Expansion)150 981 y Fu(Brace)32
+b(expansion)f(is)f(a)i(mec)m(hanism)f(b)m(y)f(whic)m(h)h(arbitrary)f
+(strings)h(ma)m(y)g(b)s(e)f(generated.)43 b(This)30 b(mec)m(h-)150
+1090 y(anism)35 b(is)h(similar)f(to)h Fr(\014lename)g(expansion)f
+Fu(\(see)i(Section)f(3.5.8)h([Filename)g(Expansion],)f(page)g(32\),)150
+1200 y(but)26 b(the)h(\014lenames)g(generated)h(need)f(not)g(exist.)40
+b(P)m(atterns)28 b(to)f(b)s(e)g(brace)g(expanded)f(tak)m(e)i(the)f
+(form)g(of)150 1310 y(an)j(optional)h Fr(pream)m(ble)p
+Fu(,)g(follo)m(w)m(ed)g(b)m(y)f(either)g(a)h(series)f(of)g
+(comma-separated)i(strings)d(or)h(a)h(sequence)150 1419
+y(expression)36 b(b)s(et)m(w)m(een)g(a)h(pair)e(of)i(braces,)g(follo)m
+(w)m(ed)h(b)m(y)e(an)g(optional)h Fr(p)s(ostscript)p
+Fu(.)57 b(The)36 b(pream)m(ble)g(is)150 1529 y(pre\014xed)28
+b(to)h(eac)m(h)h(string)f(con)m(tained)h(within)e(the)h(braces,)g(and)g
+(the)g(p)s(ostscript)f(is)h(then)f(app)s(ended)f(to)150
+1638 y(eac)m(h)32 b(resulting)e(string,)h(expanding)e(left)j(to)f(righ)
+m(t.)275 1767 y(Brace)37 b(expansions)f(ma)m(y)h(b)s(e)f(nested.)59
+b(The)36 b(results)g(of)h(eac)m(h)g(expanded)f(string)g(are)h(not)g
+(sorted;)150 1876 y(left)31 b(to)g(righ)m(t)g(order)f(is)g(preserv)m
+(ed.)41 b(F)-8 b(or)31 b(example,)390 2005 y Ft(bash$)46
+b(echo)h(a{d,c,b}e)390 2115 y(ade)g(ace)g(abe)275 2243
+y Fu(A)23 b(sequence)g(expression)g(tak)m(es)i(the)e(form)g
+Ft({)p Fj(x)p Ft(..)p Fj(y)p Ft([..)p Fj(incr)p Ft(]})p
+Fu(,)e(where)i Fr(x)29 b Fu(and)23 b Fr(y)30 b Fu(are)24
+b(either)g(in)m(tegers)150 2353 y(or)42 b(single)h(c)m(haracters,)48
+b(and)41 b Fr(incr)p Fu(,)46 b(an)c(optional)i(incremen)m(t,)i(is)c(an)
+h(in)m(teger.)78 b(When)42 b(in)m(tegers)i(are)150 2462
+y(supplied,)f(the)f(expression)f(expands)f(to)i(eac)m(h)h(n)m(um)m(b)s
+(er)d(b)s(et)m(w)m(een)i Fr(x)47 b Fu(and)41 b Fr(y)p
+Fu(,)j(inclusiv)m(e.)75 b(Supplied)150 2572 y(in)m(tegers)33
+b(ma)m(y)e(b)s(e)g(pre\014xed)f(with)h(`)p Ft(0)p Fu(')h(to)g(force)g
+(eac)m(h)g(term)g(to)g(ha)m(v)m(e)g(the)g(same)g(width.)42
+b(When)31 b(either)150 2681 y Fr(x)43 b Fu(or)36 b Fr(y)44
+b Fu(b)s(egins)36 b(with)g(a)h(zero,)i(the)e(shell)g(attempts)g(to)g
+(force)g(all)h(generated)f(terms)g(to)g(con)m(tain)h(the)150
+2791 y(same)e(n)m(um)m(b)s(er)e(of)i(digits,)i(zero-padding)d(where)h
+(necessary)-8 b(.)57 b(When)35 b(c)m(haracters)i(are)f(supplied,)g(the)
+150 2901 y(expression)24 b(expands)g(to)h(eac)m(h)h(c)m(haracter)g
+(lexicographically)h(b)s(et)m(w)m(een)e Fr(x)30 b Fu(and)24
+b Fr(y)p Fu(,)i(inclusiv)m(e,)h(using)d(the)150 3010
+y(default)32 b(C)g(lo)s(cale.)48 b(Note)34 b(that)f(b)s(oth)e
+Fr(x)39 b Fu(and)31 b Fr(y)40 b Fu(m)m(ust)32 b(b)s(e)g(of)g(the)h
+(same)f(t)m(yp)s(e.)47 b(When)32 b(the)g(incremen)m(t)150
+3120 y(is)d(supplied,)g(it)h(is)f(used)f(as)i(the)f(di\013erence)h(b)s
+(et)m(w)m(een)g(eac)m(h)g(term.)41 b(The)29 b(default)g(incremen)m(t)h
+(is)f(1)h(or)f(-1)150 3229 y(as)i(appropriate.)275 3358
+y(Brace)36 b(expansion)g(is)f(p)s(erformed)f(b)s(efore)h(an)m(y)h
+(other)g(expansions,)h(and)e(an)m(y)g(c)m(haracters)i(sp)s(ecial)150
+3467 y(to)32 b(other)g(expansions)g(are)g(preserv)m(ed)f(in)h(the)f
+(result.)45 b(It)32 b(is)g(strictly)g(textual.)46 b(Bash)32
+b(do)s(es)f(not)h(apply)150 3577 y(an)m(y)27 b(syn)m(tactic)i(in)m
+(terpretation)g(to)f(the)f(con)m(text)i(of)e(the)g(expansion)g(or)g
+(the)h(text)g(b)s(et)m(w)m(een)f(the)h(braces.)275 3706
+y(A)h(correctly-formed)i(brace)f(expansion)f(m)m(ust)h(con)m(tain)h
+(unquoted)e(op)s(ening)g(and)g(closing)i(braces,)150
+3815 y(and)h(at)i(least)g(one)f(unquoted)g(comma)g(or)g(a)h(v)-5
+b(alid)33 b(sequence)g(expression.)48 b(An)m(y)33 b(incorrectly)h
+(formed)150 3925 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275
+4053 y(A)25 b Fi({)h Fu(or)f(`)p Ft(,)p Fu(')g(ma)m(y)h(b)s(e)f(quoted)
+h(with)f(a)g(bac)m(kslash)h(to)g(prev)m(en)m(t)g(its)g(b)s(eing)f
+(considered)g(part)g(of)h(a)g(brace)150 4163 y(expression.)51
+b(T)-8 b(o)34 b(a)m(v)m(oid)i(con\015icts)e(with)g(parameter)g
+(expansion,)h(the)f(string)g(`)p Ft(${)p Fu(')g(is)g(not)g(considered)
+150 4272 y(eligible)e(for)e(brace)h(expansion,)f(and)g(inhibits)g
+(brace)h(expansion)f(un)m(til)g(the)h(closing)h(`)p Ft(})p
+Fu('..)275 4401 y(This)e(construct)h(is)g(t)m(ypically)i(used)d(as)h
+(shorthand)f(when)g(the)h(common)g(pre\014x)f(of)h(the)g(strings)g(to)
+150 4511 y(b)s(e)f(generated)h(is)g(longer)g(than)f(in)g(the)g(ab)s(o)m
+(v)m(e)i(example:)390 4639 y Ft(mkdir)46 b(/usr/local/src/bash/{old,n)o
+(ew,)o(dist)o(,bug)o(s})275 4768 y Fu(or)390 4896 y Ft(chown)g(root)h
+(/usr/{ucb/{ex,edit},lib/)o({ex?)o(.?*,)o(how)o(_ex})o(})150
+5083 y Fk(3.5.2)63 b(Tilde)41 b(Expansion)150 5230 y
+Fu(If)29 b(a)h(w)m(ord)g(b)s(egins)f(with)g(an)h(unquoted)f(tilde)h(c)m
+(haracter)h(\(`)p Ft(~)p Fu('\),)g(all)g(of)f(the)g(c)m(haracters)h(up)
+d(to)j(the)f(\014rst)150 5340 y(unquoted)24 b(slash)g(\(or)h(all)h(c)m
+(haracters,)h(if)e(there)g(is)f(no)h(unquoted)e(slash\))i(are)g
+(considered)g(a)g Fr(tilde-pre\014x)p Fu(.)p eop end
+%%Page: 24 30
+TeXDict begin 24 29 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(24)150 299
+y(If)38 b(none)g(of)g(the)h(c)m(haracters)g(in)f(the)h(tilde-pre\014x)f
+(are)h(quoted,)h(the)f(c)m(haracters)h(in)d(the)i(tilde-pre\014x)150
+408 y(follo)m(wing)28 b(the)g(tilde)f(are)h(treated)g(as)f(a)g(p)s
+(ossible)g Fr(login)h(name)p Fu(.)39 b(If)27 b(this)g(login)h(name)f
+(is)g(the)g(n)m(ull)g(string,)150 518 y(the)35 b(tilde)g(is)g(replaced)
+g(with)f(the)h(v)-5 b(alue)35 b(of)g(the)g Ft(HOME)e
+Fu(shell)i(v)-5 b(ariable.)54 b(If)34 b Ft(HOME)g Fu(is)h(unset,)g(the)
+g(home)150 628 y(directory)e(of)g(the)f(user)g(executing)i(the)e(shell)
+h(is)f(substituted)g(instead.)47 b(Otherwise,)33 b(the)g
+(tilde-pre\014x)150 737 y(is)d(replaced)h(with)f(the)h(home)f
+(directory)h(asso)s(ciated)h(with)e(the)h(sp)s(eci\014ed)e(login)j
+(name.)275 874 y(If)g(the)h(tilde-pre\014x)f(is)h(`)p
+Ft(~+)p Fu(',)g(the)g(v)-5 b(alue)33 b(of)g(the)g(shell)g(v)-5
+b(ariable)34 b Ft(PWD)d Fu(replaces)j(the)f(tilde-pre\014x.)47
+b(If)150 984 y(the)31 b(tilde-pre\014x)f(is)g(`)p Ft(~-)p
+Fu(',)h(the)f(v)-5 b(alue)31 b(of)g(the)f(shell)h(v)-5
+b(ariable)31 b Ft(OLDPWD)p Fu(,)e(if)h(it)h(is)g(set,)g(is)f
+(substituted.)275 1121 y(If)f(the)h(c)m(haracters)h(follo)m(wing)h(the)
+e(tilde)g(in)g(the)g(tilde-pre\014x)g(consist)g(of)g(a)h(n)m(um)m(b)s
+(er)d Fr(N)p Fu(,)j(optionally)150 1230 y(pre\014xed)22
+b(b)m(y)h(a)h(`)p Ft(+)p Fu(')f(or)h(a)f(`)p Ft(-)p Fu(',)j(the)d
+(tilde-pre\014x)g(is)h(replaced)f(with)g(the)h(corresp)s(onding)e
+(elemen)m(t)j(from)e(the)150 1340 y(directory)36 b(stac)m(k,)i(as)e(it)
+g(w)m(ould)f(b)s(e)g(displa)m(y)m(ed)h(b)m(y)g(the)f
+Ft(dirs)g Fu(builtin)g(in)m(v)m(ok)m(ed)i(with)e(the)g(c)m(haracters)
+150 1450 y(follo)m(wing)40 b(tilde)f(in)g(the)f(tilde-pre\014x)h(as)g
+(an)f(argumen)m(t)h(\(see)h(Section)f(6.8)h([The)e(Directory)i(Stac)m
+(k],)150 1559 y(page)c(96\).)57 b(If)35 b(the)g(tilde-pre\014x,)i(sans)
+e(the)h(tilde,)h(consists)f(of)g(a)f(n)m(um)m(b)s(er)f(without)i(a)f
+(leading)h(`)p Ft(+)p Fu(')g(or)150 1669 y(`)p Ft(-)p
+Fu(',)31 b(`)p Ft(+)p Fu(')f(is)h(assumed.)275 1806 y(If)e(the)i(login)
+g(name)g(is)f(in)m(v)-5 b(alid,)31 b(or)g(the)f(tilde)h(expansion)f
+(fails,)i(the)e(w)m(ord)g(is)h(left)g(unc)m(hanged.)275
+1943 y(Eac)m(h)38 b(v)-5 b(ariable)38 b(assignmen)m(t)h(is)e(c)m(hec)m
+(k)m(ed)j(for)d(unquoted)g(tilde-pre\014xes)h(immediately)g(follo)m
+(wing)150 2052 y(a)d(`)p Ft(:)p Fu(')g(or)g(the)g(\014rst)f(`)p
+Ft(=)p Fu('.)54 b(In)34 b(these)h(cases,)i(tilde)e(expansion)g(is)g
+(also)h(p)s(erformed.)52 b(Consequen)m(tly)-8 b(,)37
+b(one)150 2162 y(ma)m(y)29 b(use)e(\014lenames)h(with)g(tildes)g(in)g
+(assignmen)m(ts)g(to)h Ft(PATH)p Fu(,)f Ft(MAILPATH)p
+Fu(,)e(and)h Ft(CDPATH)p Fu(,)g(and)h(the)g(shell)150
+2271 y(assigns)j(the)f(expanded)g(v)-5 b(alue.)275 2408
+y(The)29 b(follo)m(wing)j(table)g(sho)m(ws)e(ho)m(w)g(Bash)h(treats)g
+(unquoted)e(tilde-pre\014xes:)150 2572 y Ft(~)432 b Fu(The)30
+b(v)-5 b(alue)31 b(of)f Ft($HOME)150 2733 y(~/foo)240
+b($HOME/foo)150 2895 y(~fred/foo)630 3005 y Fu(The)30
+b(sub)s(directory)f Ft(foo)h Fu(of)g(the)h(home)f(directory)h(of)g(the)
+f(user)g Ft(fred)150 3167 y(~+/foo)192 b($PWD/foo)150
+3329 y(~-/foo)g(${OLDPWD-'~-'}/foo)150 3491 y(~)p Fj(N)384
+b Fu(The)30 b(string)g(that)h(w)m(ould)f(b)s(e)g(displa)m(y)m(ed)h(b)m
+(y)f(`)p Ft(dirs)g(+)p Fj(N)p Fu(')150 3653 y Ft(~+)p
+Fj(N)336 b Fu(The)30 b(string)g(that)h(w)m(ould)f(b)s(e)g(displa)m(y)m
+(ed)h(b)m(y)f(`)p Ft(dirs)g(+)p Fj(N)p Fu(')150 3814
+y Ft(~-)p Fj(N)336 b Fu(The)30 b(string)g(that)h(w)m(ould)f(b)s(e)g
+(displa)m(y)m(ed)h(b)m(y)f(`)p Ft(dirs)g(-)p Fj(N)p Fu(')275
+3978 y(Bash)40 b(also)h(p)s(erforms)e(tilde)h(expansion)g(on)h(w)m
+(ords)e(satisfying)i(the)f(conditions)h(of)f(v)-5 b(ariable)41
+b(as-)150 4087 y(signmen)m(ts)f(\(see)h(Section)g(3.4)g([Shell)f(P)m
+(arameters],)k(page)d(19\))g(when)e(they)h(app)s(ear)f(as)i(argumen)m
+(ts)150 4197 y(to)c(simple)f(commands.)57 b(Bash)36 b(do)s(es)f(not)h
+(do)g(this,)i(except)f(for)e(the)h Fr(declaration)i Fu(commands)d
+(listed)150 4306 y(ab)s(o)m(v)m(e,)d(when)d(in)h Fm(posix)g
+Fu(mo)s(de.)150 4508 y Fk(3.5.3)63 b(Shell)41 b(P)m(arameter)f
+(Expansion)150 4655 y Fu(The)g(`)p Ft($)p Fu(')h(c)m(haracter)i(in)m
+(tro)s(duces)d(parameter)h(expansion,)j(command)d(substitution,)i(or)e
+(arithmetic)150 4765 y(expansion.)d(The)22 b(parameter)h(name)f(or)g
+(sym)m(b)s(ol)h(to)g(b)s(e)e(expanded)h(ma)m(y)h(b)s(e)f(enclosed)h(in)
+f(braces,)i(whic)m(h)150 4874 y(are)31 b(optional)g(but)f(serv)m(e)h
+(to)h(protect)f(the)g(v)-5 b(ariable)31 b(to)g(b)s(e)f(expanded)g(from)
+g(c)m(haracters)i(immediately)150 4984 y(follo)m(wing)g(it)f(whic)m(h)f
+(could)g(b)s(e)g(in)m(terpreted)h(as)f(part)h(of)f(the)h(name.)275
+5121 y(When)44 b(braces)i(are)f(used,)j(the)e(matc)m(hing)g(ending)f
+(brace)g(is)g(the)g(\014rst)g(`)p Ft(})p Fu(')g(not)g(escap)s(ed)h(b)m
+(y)f(a)150 5230 y(bac)m(kslash)40 b(or)f(within)g(a)g(quoted)g(string,)
+j(and)c(not)i(within)e(an)h(em)m(b)s(edded)f(arithmetic)j(expansion,)
+150 5340 y(command)30 b(substitution,)g(or)h(parameter)g(expansion.)p
+eop end
+%%Page: 25 31
+TeXDict begin 25 30 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(25)275 299
+y(The)40 b(basic)i(form)f(of)g(parameter)h(expansion)f(is)h($)p
+Fi({)p Fr(parameter)7 b Fi(})p Fu(.)74 b(The)41 b(v)-5
+b(alue)42 b(of)g Fr(parameter)48 b Fu(is)150 408 y(substituted.)43
+b(The)31 b Fr(parameter)39 b Fu(is)31 b(a)h(shell)f(parameter)h(as)g
+(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)g(3.4)h([Shell)150
+518 y(P)m(arameters],)e(page)f(19\))h(or)e(an)g(arra)m(y)h(reference)f
+(\(see)i(Section)f(6.7)g([Arra)m(ys],)g(page)g(94\).)42
+b(The)29 b(braces)150 628 y(are)j(required)g(when)f Fr(parameter)39
+b Fu(is)32 b(a)h(p)s(ositional)f(parameter)h(with)f(more)g(than)g(one)g
+(digit,)i(or)e(when)150 737 y Fr(parameter)37 b Fu(is)31
+b(follo)m(w)m(ed)h(b)m(y)e(a)h(c)m(haracter)h(that)f(is)f(not)h(to)g(b)
+s(e)f(in)m(terpreted)g(as)h(part)f(of)h(its)f(name.)275
+885 y(If)k(the)h(\014rst)f(c)m(haracter)i(of)f Fr(parameter)42
+b Fu(is)35 b(an)g(exclamation)i(p)s(oin)m(t)e(\(!\),)i(and)d
+Fr(parameter)42 b Fu(is)34 b(not)i(a)150 995 y Fr(nameref)p
+Fu(,)c(it)f(in)m(tro)s(duces)h(a)f(lev)m(el)i(of)f(indirection.)44
+b(Bash)31 b(uses)g(the)g(v)-5 b(alue)32 b(formed)f(b)m(y)g(expanding)g
+(the)150 1104 y(rest)c(of)f Fr(parameter)33 b Fu(as)27
+b(the)g(new)f Fr(parameter)7 b Fu(;)28 b(this)e(is)g(then)g(expanded)g
+(and)g(that)h(v)-5 b(alue)27 b(is)f(used)g(in)g(the)150
+1214 y(rest)33 b(of)f(the)h(expansion,)g(rather)g(than)f(the)h
+(expansion)f(of)h(the)g(original)g Fr(parameter)p Fu(.)48
+b(This)32 b(is)g(kno)m(wn)150 1324 y(as)42 b Ft(indirect)28
+b(expansion)p Fu(.)71 b(The)41 b(v)-5 b(alue)41 b(is)h(sub)5
+b(ject)41 b(to)h(tilde)g(expansion,)i(parameter)e(expansion,)150
+1433 y(command)31 b(substitution,)g(and)g(arithmetic)h(expansion.)43
+b(If)31 b Fr(parameter)38 b Fu(is)32 b(a)f(nameref,)h(this)f(expands)
+150 1543 y(to)d(the)g(name)g(of)f(the)h(v)-5 b(ariable)28
+b(referenced)g(b)m(y)f Fr(parameter)35 b Fu(instead)27
+b(of)h(p)s(erforming)e(the)i(complete)h(in-)150 1652
+y(direct)e(expansion.)39 b(The)25 b(exceptions)i(to)g(this)f(are)h(the)
+f(expansions)g(of)g($)p Fi({)p Fu(!)p Fr(pre\014x)6 b
+Fu(*)p Fi(})28 b Fu(and)d($)p Fi({)p Fu(!)p Fr(name)5
+b Fu([@])p Fi(})150 1762 y Fu(describ)s(ed)28 b(b)s(elo)m(w.)41
+b(The)28 b(exclamation)j(p)s(oin)m(t)f(m)m(ust)f(immediately)h(follo)m
+(w)g(the)g(left)f(brace)h(in)f(order)f(to)150 1872 y(in)m(tro)s(duce)i
+(indirection.)275 2019 y(In)39 b(eac)m(h)i(of)g(the)f(cases)h(b)s(elo)m
+(w,)i Fr(w)m(ord)h Fu(is)c(sub)5 b(ject)40 b(to)h(tilde)f(expansion,)j
+(parameter)e(expansion,)150 2129 y(command)30 b(substitution,)g(and)g
+(arithmetic)i(expansion.)275 2277 y(When)h(not)h(p)s(erforming)e
+(substring)h(expansion,)h(using)g(the)f(form)h(describ)s(ed)e(b)s(elo)m
+(w)i(\(e.g.,)i(`)p Ft(:-)p Fu('\),)150 2387 y(Bash)d(tests)h(for)e(a)i
+(parameter)f(that)h(is)e(unset)h(or)g(n)m(ull.)48 b(Omitting)33
+b(the)h(colon)f(results)g(in)g(a)g(test)h(only)150 2496
+y(for)c(a)i(parameter)f(that)g(is)g(unset.)41 b(Put)31
+b(another)f(w)m(a)m(y)-8 b(,)33 b(if)e(the)f(colon)i(is)f(included,)f
+(the)h(op)s(erator)g(tests)150 2606 y(for)36 b(b)s(oth)g
+Fr(parameter)7 b Fu('s)37 b(existence)h(and)e(that)i(its)f(v)-5
+b(alue)37 b(is)g(not)f(n)m(ull;)k(if)d(the)g(colon)h(is)e(omitted,)k
+(the)150 2715 y(op)s(erator)31 b(tests)g(only)f(for)g(existence.)150
+2895 y Ft(${)p Fj(parameter)p Ft(:)p Fq(\000)p Fj(word)p
+Ft(})630 3005 y Fu(If)g Fr(parameter)37 b Fu(is)30 b(unset)g(or)h(n)m
+(ull,)f(the)h(expansion)f(of)g Fr(w)m(ord)k Fu(is)c(substituted.)40
+b(Otherwise,)630 3114 y(the)31 b(v)-5 b(alue)30 b(of)h
+Fr(parameter)37 b Fu(is)31 b(substituted.)150 3287 y
+Ft(${)p Fj(parameter)p Ft(:=)p Fj(word)p Ft(})630 3397
+y Fu(If)i Fr(parameter)40 b Fu(is)33 b(unset)f(or)h(n)m(ull,)h(the)f
+(expansion)g(of)g Fr(w)m(ord)j Fu(is)d(assigned)g(to)h
+Fr(parameter)p Fu(.)630 3506 y(The)c(v)-5 b(alue)32 b(of)f
+Fr(parameter)38 b Fu(is)31 b(then)g(substituted.)42 b(P)m(ositional)33
+b(parameters)e(and)f(sp)s(ecial)630 3616 y(parameters)h(ma)m(y)g(not)f
+(b)s(e)g(assigned)h(to)g(in)f(this)g(w)m(a)m(y)-8 b(.)150
+3789 y Ft(${)p Fj(parameter)p Ft(:?)p Fj(word)p Ft(})630
+3898 y Fu(If)26 b Fr(parameter)33 b Fu(is)26 b(n)m(ull)g(or)g(unset,)h
+(the)f(expansion)g(of)g Fr(w)m(ord)k Fu(\(or)c(a)h(message)g(to)g(that)
+f(e\013ect)630 4008 y(if)i Fr(w)m(ord)j Fu(is)d(not)g(presen)m(t\))h
+(is)f(written)g(to)h(the)f(standard)f(error)h(and)f(the)h(shell,)h(if)f
+(it)h(is)f(not)630 4118 y(in)m(teractiv)m(e,)33 b(exits.)42
+b(Otherwise,)30 b(the)h(v)-5 b(alue)31 b(of)f Fr(parameter)38
+b Fu(is)30 b(substituted.)150 4290 y Ft(${)p Fj(parameter)p
+Ft(:+)p Fj(word)p Ft(})630 4400 y Fu(If)35 b Fr(parameter)42
+b Fu(is)36 b(n)m(ull)f(or)h(unset,)g(nothing)g(is)f(substituted,)i
+(otherwise)e(the)h(expansion)630 4510 y(of)31 b Fr(w)m(ord)i
+Fu(is)e(substituted.)150 4682 y Ft(${)p Fj(parameter)p
+Ft(:)p Fj(offset)p Ft(})150 4792 y(${)p Fj(parameter)p
+Ft(:)p Fj(offset)p Ft(:)p Fj(lengt)o(h)p Ft(})630 4902
+y Fu(This)f(is)h(referred)f(to)h(as)g(Substring)f(Expansion.)41
+b(It)31 b(expands)f(to)h(up)f(to)h Fr(length)g Fu(c)m(harac-)630
+5011 y(ters)k(of)g(the)h(v)-5 b(alue)35 b(of)g Fr(parameter)42
+b Fu(starting)36 b(at)g(the)f(c)m(haracter)i(sp)s(eci\014ed)d(b)m(y)h
+Fr(o\013set)p Fu(.)55 b(If)630 5121 y Fr(parameter)32
+b Fu(is)26 b(`)p Ft(@)p Fu(',)g(an)f(indexed)g(arra)m(y)h(subscripted)e
+(b)m(y)h(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p Fu(',)g(or)g(an)f(asso)s
+(ciativ)m(e)j(ar-)630 5230 y(ra)m(y)g(name,)h(the)f(results)g(di\013er)
+g(as)g(describ)s(ed)f(b)s(elo)m(w.)40 b(If)28 b Fr(length)g
+Fu(is)g(omitted,)i(it)f(expands)630 5340 y(to)e(the)g(substring)f(of)g
+(the)h(v)-5 b(alue)27 b(of)g Fr(parameter)33 b Fu(starting)28
+b(at)f(the)g(c)m(haracter)h(sp)s(eci\014ed)e(b)m(y)p
+eop end
+%%Page: 26 32
+TeXDict begin 26 31 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(26)630 299
+y Fr(o\013set)37 b Fu(and)d(extending)g(to)h(the)f(end)g(of)g(the)g(v)
+-5 b(alue.)53 b Fr(length)34 b Fu(and)g Fr(o\013set)j
+Fu(are)e(arithmetic)630 408 y(expressions)30 b(\(see)h(Section)g(6.5)h
+([Shell)e(Arithmetic],)i(page)f(92\).)630 555 y(If)39
+b Fr(o\013set)k Fu(ev)-5 b(aluates)41 b(to)f(a)g(n)m(um)m(b)s(er)f
+(less)h(than)f(zero,)k(the)d(v)-5 b(alue)40 b(is)g(used)e(as)i(an)g
+(o\013set)630 664 y(in)33 b(c)m(haracters)i(from)f(the)f(end)g(of)h
+(the)g(v)-5 b(alue)34 b(of)g Fr(parameter)p Fu(.)51 b(If)33
+b Fr(length)h Fu(ev)-5 b(aluates)35 b(to)g(a)630 774
+y(n)m(um)m(b)s(er)23 b(less)h(than)g(zero,)j(it)d(is)h(in)m(terpreted)f
+(as)g(an)h(o\013set)g(in)f(c)m(haracters)h(from)f(the)g(end)g(of)630
+883 y(the)31 b(v)-5 b(alue)31 b(of)g Fr(parameter)38
+b Fu(rather)30 b(than)h(a)g(n)m(um)m(b)s(er)f(of)g(c)m(haracters,)j
+(and)d(the)h(expansion)630 993 y(is)39 b(the)g(c)m(haracters)i(b)s(et)m
+(w)m(een)f Fr(o\013set)i Fu(and)c(that)i(result.)67 b(Note)40
+b(that)g(a)g(negativ)m(e)h(o\013set)630 1103 y(m)m(ust)27
+b(b)s(e)g(separated)g(from)g(the)g(colon)i(b)m(y)e(at)h(least)g(one)f
+(space)h(to)g(a)m(v)m(oid)h(b)s(eing)e(confused)630 1212
+y(with)j(the)h(`)p Ft(:-)p Fu(')f(expansion.)630 1358
+y(Here)43 b(are)g(some)f(examples)h(illustrating)g(substring)f
+(expansion)g(on)g(parameters)h(and)630 1468 y(subscripted)29
+b(arra)m(ys:)630 1614 y Ft($)47 b(string=01234567890abcdefgh)630
+1724 y($)g(echo)g(${string:7})630 1833 y(7890abcdefgh)630
+1943 y($)g(echo)g(${string:7:0})630 2162 y($)g(echo)g(${string:7:2})630
+2271 y(78)630 2381 y($)g(echo)g(${string:7:-2})630 2491
+y(7890abcdef)630 2600 y($)g(echo)g(${string:)e(-7})630
+2710 y(bcdefgh)630 2819 y($)i(echo)g(${string:)e(-7:0})630
+3039 y($)i(echo)g(${string:)e(-7:2})630 3148 y(bc)630
+3258 y($)i(echo)g(${string:)e(-7:-2})630 3367 y(bcdef)630
+3477 y($)i(set)g(--)h(01234567890abcdefgh)630 3587 y($)f(echo)g(${1:7})
+630 3696 y(7890abcdefgh)630 3806 y($)g(echo)g(${1:7:0})630
+4025 y($)g(echo)g(${1:7:2})630 4134 y(78)630 4244 y($)g(echo)g
+(${1:7:-2})630 4354 y(7890abcdef)630 4463 y($)g(echo)g(${1:)g(-7})630
+4573 y(bcdefgh)630 4682 y($)g(echo)g(${1:)g(-7:0})630
+4902 y($)g(echo)g(${1:)g(-7:2})630 5011 y(bc)630 5121
+y($)g(echo)g(${1:)g(-7:-2})630 5230 y(bcdef)630 5340
+y($)g(array[0]=01234567890abcdef)o(gh)p eop end
+%%Page: 27 33
+TeXDict begin 27 32 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(27)630 299
+y Ft($)47 b(echo)g(${array[0]:7})630 408 y(7890abcdefgh)630
+518 y($)g(echo)g(${array[0]:7:0})630 737 y($)g(echo)g(${array[0]:7:2})
+630 847 y(78)630 956 y($)g(echo)g(${array[0]:7:-2})630
+1066 y(7890abcdef)630 1176 y($)g(echo)g(${array[0]:)e(-7})630
+1285 y(bcdefgh)630 1395 y($)i(echo)g(${array[0]:)e(-7:0})630
+1614 y($)i(echo)g(${array[0]:)e(-7:2})630 1724 y(bc)630
+1833 y($)i(echo)g(${array[0]:)e(-7:-2})630 1943 y(bcdef)630
+2071 y Fu(If)22 b Fr(parameter)30 b Fu(is)23 b(`)p Ft(@)p
+Fu(',)i(the)e(result)g(is)g Fr(length)h Fu(p)s(ositional)f(parameters)h
+(b)s(eginning)e(at)i Fr(o\013set)p Fu(.)630 2180 y(A)36
+b(negativ)m(e)j Fr(o\013set)g Fu(is)e(tak)m(en)g(relativ)m(e)i(to)e
+(one)g(greater)g(than)f(the)h(greatest)h(p)s(ositional)630
+2290 y(parameter,)29 b(so)f(an)g(o\013set)h(of)f(-1)g(ev)-5
+b(aluates)30 b(to)e(the)g(last)h(p)s(ositional)g(parameter.)40
+b(It)28 b(is)g(an)630 2399 y(expansion)i(error)g(if)h
+Fr(length)f Fu(ev)-5 b(aluates)32 b(to)f(a)g(n)m(um)m(b)s(er)e(less)i
+(than)f(zero.)630 2527 y(The)i(follo)m(wing)i(examples)f(illustrate)h
+(substring)d(expansion)i(using)f(p)s(ositional)h(param-)630
+2637 y(eters:)630 2765 y Ft($)47 b(set)g(--)h(1)f(2)g(3)h(4)f(5)h(6)f
+(7)h(8)f(9)h(0)f(a)h(b)f(c)g(d)h(e)f(f)h(g)f(h)630 2874
+y($)g(echo)g(${@:7})630 2984 y(7)g(8)h(9)f(0)h(a)f(b)h(c)f(d)h(e)f(f)h
+(g)f(h)630 3093 y($)g(echo)g(${@:7:0})630 3313 y($)g(echo)g(${@:7:2})
+630 3422 y(7)g(8)630 3532 y($)g(echo)g(${@:7:-2})630
+3641 y(bash:)f(-2:)h(substring)f(expression)f(<)i(0)630
+3751 y($)g(echo)g(${@:)g(-7:2})630 3861 y(b)g(c)630 3970
+y($)g(echo)g(${@:0})630 4080 y(./bash)f(1)i(2)f(3)g(4)h(5)f(6)h(7)f(8)h
+(9)f(0)h(a)f(b)h(c)f(d)g(e)h(f)f(g)h(h)630 4189 y($)f(echo)g(${@:0:2})
+630 4299 y(./bash)f(1)630 4408 y($)h(echo)g(${@:)g(-7:0})630
+4646 y Fu(If)36 b Fr(parameter)43 b Fu(is)36 b(an)g(indexed)g(arra)m(y)
+g(name)g(subscripted)f(b)m(y)h(`)p Ft(@)p Fu(')g(or)h(`)p
+Ft(*)p Fu(',)h(the)e(result)g(is)630 4755 y(the)j Fr(length)g
+Fu(mem)m(b)s(ers)f(of)h(the)f(arra)m(y)i(b)s(eginning)d(with)i
+Ft(${)p Fj(parameter)p Ft([)p Fj(offset)p Ft(]})p Fu(.)60
+b(A)630 4865 y(negativ)m(e)33 b Fr(o\013set)g Fu(is)e(tak)m(en)h
+(relativ)m(e)g(to)g(one)f(greater)g(than)g(the)f(maxim)m(um)h(index)f
+(of)h(the)630 4975 y(sp)s(eci\014ed)38 b(arra)m(y)-8
+b(.)65 b(It)38 b(is)g(an)h(expansion)f(error)f(if)i Fr(length)f
+Fu(ev)-5 b(aluates)40 b(to)f(a)g(n)m(um)m(b)s(er)e(less)630
+5084 y(than)30 b(zero.)630 5212 y(These)23 b(examples)i(sho)m(w)e(ho)m
+(w)h(y)m(ou)g(can)g(use)f(substring)f(expansion)i(with)f(indexed)g
+(arra)m(ys:)630 5340 y Ft($)47 b(array=\(0)f(1)h(2)h(3)f(4)h(5)f(6)h(7)
+f(8)h(9)f(0)h(a)f(b)g(c)h(d)f(e)h(f)f(g)h(h\))p eop end
+%%Page: 28 34
+TeXDict begin 28 33 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(28)630 299
+y Ft($)47 b(echo)g(${array[@]:7})630 408 y(7)g(8)h(9)f(0)h(a)f(b)h(c)f
+(d)h(e)f(f)h(g)f(h)630 518 y($)g(echo)g(${array[@]:7:2})630
+628 y(7)g(8)630 737 y($)g(echo)g(${array[@]:)e(-7:2})630
+847 y(b)i(c)630 956 y($)g(echo)g(${array[@]:)e(-7:-2})630
+1066 y(bash:)h(-2:)h(substring)f(expression)f(<)i(0)630
+1176 y($)g(echo)g(${array[@]:0})630 1285 y(0)g(1)h(2)f(3)h(4)f(5)h(6)f
+(7)h(8)f(9)h(0)f(a)g(b)h(c)f(d)h(e)f(f)h(g)f(h)630 1395
+y($)g(echo)g(${array[@]:0:2})630 1504 y(0)g(1)630 1614
+y($)g(echo)g(${array[@]:)e(-7:0})630 1855 y Fu(Substring)25
+b(expansion)g(applied)h(to)h(an)f(asso)s(ciativ)m(e)j(arra)m(y)d(pro)s
+(duces)f(unde\014ned)f(results.)630 1987 y(Substring)32
+b(indexing)i(is)f(zero-based)i(unless)e(the)h(p)s(ositional)g
+(parameters)g(are)g(used,)g(in)630 2096 y(whic)m(h)29
+b(case)i(the)f(indexing)g(starts)g(at)g(1)g(b)m(y)g(default.)41
+b(If)29 b Fr(o\013set)k Fu(is)d(0,)g(and)f(the)h(p)s(ositional)630
+2206 y(parameters)h(are)f(used,)g Ft($@)g Fu(is)g(pre\014xed)g(to)h
+(the)f(list.)150 2359 y Ft(${!)p Fj(prefix)p Ft(*})150
+2469 y(${!)p Fj(prefix)p Ft(@})630 2578 y Fu(Expands)24
+b(to)h(the)g(names)g(of)g(v)-5 b(ariables)26 b(whose)f(names)f(b)s
+(egin)h(with)f Fr(pre\014x)p Fu(,)i(separated)f(b)m(y)630
+2688 y(the)k(\014rst)f(c)m(haracter)j(of)e(the)g Ft(IFS)f
+Fu(sp)s(ecial)i(v)-5 b(ariable.)41 b(When)29 b(`)p Ft(@)p
+Fu(')g(is)g(used)f(and)h(the)g(expan-)630 2798 y(sion)35
+b(app)s(ears)g(within)f(double)h(quotes,)i(eac)m(h)f(v)-5
+b(ariable)36 b(name)f(expands)g(to)g(a)h(separate)630
+2907 y(w)m(ord.)150 3061 y Ft(${!)p Fj(name)p Ft([@]})150
+3170 y(${!)p Fj(name)p Ft([*]})630 3280 y Fu(If)26 b
+Fr(name)32 b Fu(is)27 b(an)f(arra)m(y)h(v)-5 b(ariable,)29
+b(expands)d(to)h(the)g(list)g(of)g(arra)m(y)g(indices)g(\(k)m(eys\))h
+(assigned)630 3389 y(in)c Fr(name)p Fu(.)39 b(If)24 b
+Fr(name)30 b Fu(is)24 b(not)h(an)f(arra)m(y)-8 b(,)27
+b(expands)c(to)j(0)f(if)f Fr(name)30 b Fu(is)24 b(set)h(and)f(n)m(ull)g
+(otherwise.)630 3499 y(When)39 b(`)p Ft(@)p Fu(')h(is)f(used)g(and)f
+(the)i(expansion)f(app)s(ears)g(within)f(double)h(quotes,)k(eac)m(h)d
+(k)m(ey)630 3608 y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150
+3762 y Ft(${#)p Fj(parameter)p Ft(})630 3871 y Fu(The)40
+b(length)g(in)g(c)m(haracters)i(of)e(the)h(expanded)e(v)-5
+b(alue)41 b(of)f Fr(parameter)47 b Fu(is)40 b(substituted.)630
+3981 y(If)i Fr(parameter)50 b Fu(is)43 b(`)p Ft(*)p Fu(')g(or)g(`)p
+Ft(@)p Fu(',)k(the)c(v)-5 b(alue)43 b(substituted)f(is)h(the)g(n)m(um)m
+(b)s(er)f(of)h(p)s(ositional)630 4091 y(parameters.)i(If)32
+b Fr(parameter)38 b Fu(is)32 b(an)g(arra)m(y)g(name)g(subscripted)f(b)m
+(y)g(`)p Ft(*)p Fu(')h(or)g(`)p Ft(@)p Fu(',)g(the)g(v)-5
+b(alue)630 4200 y(substituted)30 b(is)h(the)g(n)m(um)m(b)s(er)e(of)i
+(elemen)m(ts)i(in)d(the)h(arra)m(y)-8 b(.)43 b(If)30
+b Fr(parameter)38 b Fu(is)31 b(an)f(indexed)630 4310
+y(arra)m(y)37 b(name)g(subscripted)f(b)m(y)h(a)g(negativ)m(e)i(n)m(um)m
+(b)s(er,)f(that)f(n)m(um)m(b)s(er)f(is)g(in)m(terpreted)i(as)630
+4419 y(relativ)m(e)47 b(to)g(one)e(greater)i(than)e(the)h(maxim)m(um)f
+(index)g(of)g Fr(parameter)p Fu(,)50 b(so)c(negativ)m(e)630
+4529 y(indices)30 b(coun)m(t)h(bac)m(k)g(from)f(the)h(end)e(of)i(the)f
+(arra)m(y)-8 b(,)32 b(and)e(an)g(index)g(of)g(-1)h(references)g(the)630
+4639 y(last)g(elemen)m(t.)150 4792 y Ft(${)p Fj(parameter)p
+Ft(#)p Fj(word)p Ft(})150 4902 y(${)p Fj(parameter)p
+Ft(##)p Fj(word)p Ft(})630 5011 y Fu(The)43 b Fr(w)m(ord)k
+Fu(is)d(expanded)f(to)h(pro)s(duce)f(a)h(pattern)g(and)f(matc)m(hed)i
+(according)f(to)h(the)630 5121 y(rules)31 b(describ)s(ed)g(b)s(elo)m(w)
+h(\(see)h(Section)g(3.5.8.1)h([P)m(attern)g(Matc)m(hing],)g(page)f
+(33\).)46 b(If)32 b(the)630 5230 y(pattern)37 b(matc)m(hes)h(the)f(b)s
+(eginning)f(of)h(the)g(expanded)f(v)-5 b(alue)38 b(of)f
+Fr(parameter)p Fu(,)i(then)e(the)630 5340 y(result)f(of)h(the)f
+(expansion)h(is)f(the)h(expanded)e(v)-5 b(alue)37 b(of)g
+Fr(parameter)43 b Fu(with)36 b(the)h(shortest)p eop end
+%%Page: 29 35
+TeXDict begin 29 34 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(29)630 299
+y(matc)m(hing)31 b(pattern)e(\(the)h(`)p Ft(#)p Fu(')g(case\))h(or)e
+(the)h(longest)h(matc)m(hing)f(pattern)g(\(the)g(`)p
+Ft(##)p Fu(')g(case\))630 408 y(deleted.)49 b(If)32 b
+Fr(parameter)40 b Fu(is)33 b(`)p Ft(@)p Fu(')g(or)g(`)p
+Ft(*)p Fu(',)h(the)f(pattern)g(remo)m(v)-5 b(al)34 b(op)s(eration)g(is)
+f(applied)f(to)630 518 y(eac)m(h)38 b(p)s(ositional)g(parameter)g(in)f
+(turn,)h(and)e(the)h(expansion)g(is)h(the)f(resultan)m(t)h(list.)61
+b(If)630 628 y Fr(parameter)38 b Fu(is)32 b(an)f(arra)m(y)h(v)-5
+b(ariable)32 b(subscripted)e(with)h(`)p Ft(@)p Fu(')g(or)h(`)p
+Ft(*)p Fu(',)g(the)f(pattern)h(remo)m(v)-5 b(al)630 737
+y(op)s(eration)30 b(is)g(applied)f(to)i(eac)m(h)g(mem)m(b)s(er)e(of)h
+(the)g(arra)m(y)g(in)f(turn,)g(and)g(the)h(expansion)g(is)630
+847 y(the)h(resultan)m(t)g(list.)150 993 y Ft(${)p Fj(parameter)p
+Ft(\045)p Fj(word)p Ft(})150 1103 y(${)p Fj(parameter)p
+Ft(\045\045)p Fj(word)p Ft(})630 1212 y Fu(The)43 b Fr(w)m(ord)k
+Fu(is)d(expanded)f(to)h(pro)s(duce)f(a)h(pattern)g(and)f(matc)m(hed)i
+(according)f(to)h(the)630 1322 y(rules)31 b(describ)s(ed)g(b)s(elo)m(w)
+h(\(see)h(Section)g(3.5.8.1)h([P)m(attern)g(Matc)m(hing],)g(page)f
+(33\).)46 b(If)32 b(the)630 1431 y(pattern)25 b(matc)m(hes)h(If)f(the)g
+(pattern)g(matc)m(hes)i(a)e(trailing)h(p)s(ortion)f(of)g(the)g
+(expanded)f(v)-5 b(alue)630 1541 y(of)23 b Fr(parameter)p
+Fu(,)i(then)e(the)g(result)f(of)h(the)g(expansion)g(is)g(the)g(v)-5
+b(alue)23 b(of)g Fr(parameter)30 b Fu(with)23 b(the)630
+1650 y(shortest)35 b(matc)m(hing)h(pattern)f(\(the)g(`)p
+Ft(\045)p Fu(')g(case\))i(or)d(the)h(longest)i(matc)m(hing)e(pattern)g
+(\(the)630 1760 y(`)p Ft(\045\045)p Fu(')f(case\))i(deleted.)54
+b(If)34 b Fr(parameter)42 b Fu(is)35 b(`)p Ft(@)p Fu(')f(or)h(`)p
+Ft(*)p Fu(',)h(the)e(pattern)h(remo)m(v)-5 b(al)36 b(op)s(eration)f(is)
+630 1870 y(applied)26 b(to)g(eac)m(h)h(p)s(ositional)f(parameter)h(in)e
+(turn,)h(and)f(the)h(expansion)g(is)f(the)h(resultan)m(t)630
+1979 y(list.)56 b(If)34 b Fr(parameter)42 b Fu(is)35
+b(an)g(arra)m(y)h(v)-5 b(ariable)36 b(subscripted)e(with)g(`)p
+Ft(@)p Fu(')i(or)f(`)p Ft(*)p Fu(',)i(the)e(pattern)630
+2089 y(remo)m(v)-5 b(al)44 b(op)s(eration)g(is)e(applied)h(to)h(eac)m
+(h)g(mem)m(b)s(er)e(of)h(the)g(arra)m(y)h(in)e(turn,)j(and)e(the)630
+2198 y(expansion)30 b(is)h(the)f(resultan)m(t)h(list.)150
+2345 y Ft(${)p Fj(parameter)p Ft(/)p Fj(pattern)p Ft(/)p
+Fj(stri)o(ng)p Ft(})630 2454 y Fu(The)37 b Fr(pattern)g
+Fu(is)g(expanded)g(to)h(pro)s(duce)e(a)h(pattern)g(just)g(as)h(in)e
+(\014lename)i(expansion.)630 2564 y Fr(P)m(arameter)46
+b Fu(is)38 b(expanded)f(and)g(the)i(longest)g(matc)m(h)g(of)f
+Fr(pattern)g Fu(against)h(its)f(v)-5 b(alue)39 b(is)630
+2673 y(replaced)31 b(with)g Fr(string)p Fu(.)42 b(The)30
+b(matc)m(h)h(is)g(p)s(erformed)f(according)h(to)h(the)f(rules)f
+(describ)s(ed)630 2783 y(b)s(elo)m(w)f(\(see)h(Section)g(3.5.8.1)h([P)m
+(attern)g(Matc)m(hing],)g(page)f(33\).)41 b(If)29 b Fr(pattern)g
+Fu(b)s(egins)f(with)630 2892 y(`)p Ft(/)p Fu(',)43 b(all)e(matc)m(hes)g
+(of)f Fr(pattern)g Fu(are)h(replaced)f(with)g Fr(string)p
+Fu(.)69 b(Normally)41 b(only)f(the)h(\014rst)630 3002
+y(matc)m(h)28 b(is)f(replaced.)40 b(If)26 b Fr(pattern)h
+Fu(b)s(egins)f(with)h(`)p Ft(#)p Fu(',)h(it)f(m)m(ust)g(matc)m(h)h(at)g
+(the)f(b)s(eginning)f(of)630 3112 y(the)32 b(expanded)f(v)-5
+b(alue)32 b(of)g Fr(parameter)p Fu(.)45 b(If)31 b Fr(pattern)h
+Fu(b)s(egins)f(with)g(`)p Ft(\045)p Fu(',)i(it)f(m)m(ust)g(matc)m(h)g
+(at)630 3221 y(the)24 b(end)f(of)h(the)h(expanded)e(v)-5
+b(alue)24 b(of)g Fr(parameter)p Fu(.)39 b(If)24 b Fr(string)31
+b Fu(is)24 b(n)m(ull,)i(matc)m(hes)f(of)f Fr(pattern)630
+3331 y Fu(are)36 b(deleted)g(and)f(the)g Ft(/)g Fu(follo)m(wing)i
+Fr(pattern)e Fu(ma)m(y)h(b)s(e)f(omitted.)57 b(If)34
+b(the)i Ft(nocasematch)630 3440 y Fu(shell)31 b(option)h(\(see)g(the)g
+(description)f(of)g Ft(shopt)f Fu(in)h(Section)h(4.3.2)h([The)e(Shopt)f
+(Builtin],)630 3550 y(page)45 b(65\))h(is)f(enabled,)j(the)d(matc)m(h)g
+(is)g(p)s(erformed)e(without)i(regard)f(to)h(the)g(case)h(of)630
+3660 y(alphab)s(etic)36 b(c)m(haracters.)56 b(If)34 b
+Fr(parameter)42 b Fu(is)36 b(`)p Ft(@)p Fu(')f(or)g(`)p
+Ft(*)p Fu(',)h(the)g(substitution)e(op)s(eration)i(is)630
+3769 y(applied)26 b(to)g(eac)m(h)h(p)s(ositional)f(parameter)h(in)e
+(turn,)h(and)f(the)h(expansion)g(is)f(the)h(resultan)m(t)630
+3879 y(list.)38 b(If)21 b Fr(parameter)28 b Fu(is)22
+b(an)f(arra)m(y)h(v)-5 b(ariable)22 b(subscripted)e(with)h(`)p
+Ft(@)p Fu(')g(or)g(`)p Ft(*)p Fu(',)j(the)d(substitution)630
+3988 y(op)s(eration)30 b(is)g(applied)f(to)i(eac)m(h)g(mem)m(b)s(er)e
+(of)h(the)g(arra)m(y)g(in)f(turn,)g(and)g(the)h(expansion)g(is)630
+4098 y(the)h(resultan)m(t)g(list.)150 4244 y Ft(${)p
+Fj(parameter)p Ft(^)p Fj(pattern)p Ft(})150 4354 y(${)p
+Fj(parameter)p Ft(^^)p Fj(pattern)p Ft(})150 4463 y(${)p
+Fj(parameter)p Ft(,)p Fj(pattern)p Ft(})150 4573 y(${)p
+Fj(parameter)p Ft(,,)p Fj(pattern)p Ft(})630 4682 y Fu(This)36
+b(expansion)g(mo)s(di\014es)g(the)g(case)i(of)f(alphab)s(etic)g(c)m
+(haracters)h(in)e Fr(parameter)p Fu(.)59 b(The)630 4792
+y Fr(pattern)33 b Fu(is)g(expanded)e(to)j(pro)s(duce)d(a)j(pattern)e
+(just)g(as)h(in)g(\014lename)g(expansion.)47 b(Eac)m(h)630
+4902 y(c)m(haracter)32 b(in)e(the)g(expanded)f(v)-5 b(alue)31
+b(of)f Fr(parameter)37 b Fu(is)30 b(tested)h(against)h
+Fr(pattern)p Fu(,)e(and,)g(if)630 5011 y(it)j(matc)m(hes)h(the)g
+(pattern,)f(its)h(case)g(is)f(con)m(v)m(erted.)49 b(The)33
+b(pattern)g(should)f(not)h(attempt)630 5121 y(to)f(matc)m(h)g(more)f
+(than)g(one)g(c)m(haracter.)44 b(The)30 b(`)p Ft(^)p
+Fu(')i(op)s(erator)f(con)m(v)m(erts)h(lo)m(w)m(ercase)i(letters)630
+5230 y(matc)m(hing)i Fr(pattern)f Fu(to)h(upp)s(ercase;)h(the)e(`)p
+Ft(,)p Fu(')g(op)s(erator)g(con)m(v)m(erts)i(matc)m(hing)f(upp)s
+(ercase)630 5340 y(letters)e(to)f(lo)m(w)m(ercase.)50
+b(The)32 b(`)p Ft(^^)p Fu(')h(and)f(`)p Ft(,,)p Fu(')g(expansions)h
+(con)m(v)m(ert)h(eac)m(h)g(matc)m(hed)f(c)m(har-)p eop
+end
+%%Page: 30 36
+TeXDict begin 30 35 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(30)630 299
+y(acter)29 b(in)f(the)h(expanded)e(v)-5 b(alue;)30 b(the)e(`)p
+Ft(^)p Fu(')g(and)g(`)p Ft(,)p Fu(')g(expansions)g(matc)m(h)h(and)f
+(con)m(v)m(ert)i(only)630 408 y(the)37 b(\014rst)g(c)m(haracter)i(in)e
+(the)g(expanded)g(v)-5 b(alue.)61 b(If)37 b Fr(pattern)g
+Fu(is)h(omitted,)i(it)e(is)f(treated)630 518 y(lik)m(e)h(a)f(`)p
+Ft(?)p Fu(',)i(whic)m(h)d(matc)m(hes)i(ev)m(ery)f(c)m(haracter.)61
+b(If)37 b Fr(parameter)43 b Fu(is)37 b(`)p Ft(@)p Fu(')g(or)f(`)p
+Ft(*)p Fu(',)j(the)e(case)630 628 y(mo)s(di\014cation)29
+b(op)s(eration)f(is)g(applied)g(to)h(eac)m(h)h(p)s(ositional)f
+(parameter)f(in)g(turn,)g(and)g(the)630 737 y(expansion)38
+b(is)g(the)g(resultan)m(t)h(list.)65 b(If)37 b Fr(parameter)46
+b Fu(is)38 b(an)g(arra)m(y)g(v)-5 b(ariable)39 b(subscripted)630
+847 y(with)26 b(`)p Ft(@)p Fu(')f(or)h(`)p Ft(*)p Fu(',)h(the)f(case)h
+(mo)s(di\014cation)f(op)s(eration)h(is)e(applied)h(to)h(eac)m(h)g(mem)m
+(b)s(er)e(of)h(the)630 956 y(arra)m(y)31 b(in)f(turn,)f(and)h(the)h
+(expansion)f(is)g(the)h(resultan)m(t)g(list.)150 1120
+y Ft(${)p Fj(parameter)p Ft(@)p Fj(operator)p Ft(})630
+1230 y Fu(The)d(expansion)h(is)f(either)h(a)g(transformation)g(of)g
+(the)g(v)-5 b(alue)29 b(of)g Fr(parameter)35 b Fu(or)29
+b(informa-)630 1340 y(tion)e(ab)s(out)f Fr(parameter)33
+b Fu(itself,)28 b(dep)s(ending)c(on)i(the)h(v)-5 b(alue)26
+b(of)h Fr(op)s(erator)p Fu(.)39 b(Eac)m(h)27 b Fr(op)s(erator)630
+1449 y Fu(is)j(a)h(single)g(letter:)630 1613 y Ft(Q)432
+b Fu(The)30 b(expansion)h(is)g(a)g(string)f(that)i(is)f(the)g(v)-5
+b(alue)31 b(of)g Fr(parameter)37 b Fu(quoted)31 b(in)1110
+1723 y(a)g(format)f(that)h(can)g(b)s(e)f(reused)f(as)i(input.)630
+1887 y Ft(E)432 b Fu(The)27 b(expansion)g(is)g(a)g(string)h(that)f(is)h
+(the)f(v)-5 b(alue)28 b(of)f Fr(parameter)34 b Fu(with)27
+b(bac)m(k-)1110 1996 y(slash)e(escap)s(e)h(sequences)f(expanded)g(as)g
+(with)g(the)h Ft($'...)o(')e Fu(quoting)i(mec)m(h-)1110
+2106 y(anism.)630 2270 y Ft(P)432 b Fu(The)22 b(expansion)h(is)g(a)g
+(string)g(that)g(is)g(the)g(result)g(of)g(expanding)f(the)h(v)-5
+b(alue)24 b(of)1110 2379 y Fr(parameter)31 b Fu(as)24
+b(if)f(it)h(w)m(ere)g(a)g(prompt)f(string)h(\(see)g(Section)h(6.9)g
+([Con)m(trolling)1110 2489 y(the)31 b(Prompt],)f(page)h(97\).)630
+2653 y Ft(A)432 b Fu(The)24 b(expansion)g(is)g(a)h(string)f(in)g(the)g
+(form)g(of)h(an)f(assignmen)m(t)h(statemen)m(t)h(or)1110
+2763 y Ft(declare)h Fu(command)i(that,)h(if)f(ev)-5 b(aluated,)31
+b(will)e(recreate)i Fr(parameter)36 b Fu(with)1110 2872
+y(its)31 b(attributes)g(and)e(v)-5 b(alue.)630 3036 y
+Ft(a)432 b Fu(The)30 b(expansion)g(is)g(a)h(string)f(consisting)h(of)g
+(\015ag)g(v)-5 b(alues)30 b(represen)m(ting)h Fr(pa-)1110
+3146 y(rameter)7 b Fu('s)31 b(attributes.)630 3310 y(If)e
+Fr(parameter)37 b Fu(is)30 b(`)p Ft(@)p Fu(')g(or)g(`)p
+Ft(*)p Fu(',)g(the)g(op)s(eration)g(is)g(applied)f(to)i(eac)m(h)g(p)s
+(ositional)f(parameter)630 3419 y(in)24 b(turn,)g(and)f(the)h
+(expansion)g(is)g(the)g(resultan)m(t)h(list.)39 b(If)23
+b Fr(parameter)31 b Fu(is)24 b(an)g(arra)m(y)g(v)-5 b(ariable)630
+3529 y(subscripted)24 b(with)h(`)p Ft(@)p Fu(')h(or)g(`)p
+Ft(*)p Fu(',)h(the)e(op)s(eration)h(is)g(applied)f(to)h(eac)m(h)h(mem)m
+(b)s(er)e(of)h(the)f(arra)m(y)630 3639 y(in)30 b(turn,)g(and)f(the)i
+(expansion)f(is)h(the)f(resultan)m(t)h(list.)630 3775
+y(The)22 b(result)g(of)g(the)h(expansion)f(is)g(sub)5
+b(ject)22 b(to)h(w)m(ord)f(splitting)g(and)g(pathname)g(expansion)630
+3885 y(as)31 b(describ)s(ed)e(b)s(elo)m(w.)150 4089 y
+Fk(3.5.4)63 b(Command)41 b(Substitution)150 4236 y Fu(Command)f
+(substitution)h(allo)m(ws)i(the)e(output)g(of)h(a)f(command)g(to)h
+(replace)g(the)g(command)f(itself.)150 4345 y(Command)29
+b(substitution)h(o)s(ccurs)h(when)e(a)i(command)f(is)g(enclosed)h(as)g
+(follo)m(ws:)390 4484 y Ft($\()p Fj(command)p Ft(\))150
+4623 y Fu(or)390 4763 y Ft(`)p Fj(command)p Ft(`)150
+4902 y Fu(Bash)20 b(p)s(erforms)f(the)i(expansion)f(b)m(y)g(executing)i
+Fr(command)h Fu(in)d(a)h(subshell)e(en)m(vironmen)m(t)i(and)f
+(replacing)150 5011 y(the)40 b(command)g(substitution)f(with)h(the)g
+(standard)f(output)g(of)h(the)g(command,)i(with)e(an)m(y)g(trailing)150
+5121 y(newlines)e(deleted.)64 b(Em)m(b)s(edded)37 b(newlines)h(are)g
+(not)g(deleted,)j(but)d(they)g(ma)m(y)h(b)s(e)e(remo)m(v)m(ed)i(during)
+150 5230 y(w)m(ord)30 b(splitting.)42 b(The)30 b(command)g
+(substitution)h Ft($\(cat)e Fj(file)p Ft(\))g Fu(can)h(b)s(e)g
+(replaced)h(b)m(y)g(the)f(equiv)-5 b(alen)m(t)150 5340
+y(but)30 b(faster)g Ft($\(<)g Fj(file)p Ft(\))p Fu(.)p
+eop end
+%%Page: 31 37
+TeXDict begin 31 36 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(31)275 299
+y(When)33 b(the)i(old-st)m(yle)h(bac)m(kquote)f(form)f(of)g
+(substitution)g(is)g(used,)h(bac)m(kslash)f(retains)h(its)f(literal)150
+408 y(meaning)k(except)h(when)e(follo)m(w)m(ed)j(b)m(y)e(`)p
+Ft($)p Fu(',)j(`)p Ft(`)p Fu(',)f(or)e(`)p Ft(\\)p Fu('.)64
+b(The)38 b(\014rst)f(bac)m(kquote)j(not)e(preceded)g(b)m(y)g(a)150
+518 y(bac)m(kslash)k(terminates)f(the)h(command)e(substitution.)72
+b(When)41 b(using)f(the)i Ft($\()p Fj(command)p Ft(\))c
+Fu(form,)43 b(all)150 628 y(c)m(haracters)32 b(b)s(et)m(w)m(een)f(the)f
+(paren)m(theses)h(mak)m(e)g(up)f(the)g(command;)h(none)f(are)h(treated)
+g(sp)s(ecially)-8 b(.)275 762 y(Command)22 b(substitutions)g(ma)m(y)i
+(b)s(e)e(nested.)39 b(T)-8 b(o)23 b(nest)g(when)f(using)h(the)g(bac)m
+(kquoted)h(form,)g(escap)s(e)150 872 y(the)31 b(inner)e(bac)m(kquotes)j
+(with)e(bac)m(kslashes.)275 1007 y(If)e(the)i(substitution)e(app)s
+(ears)h(within)g(double)f(quotes,)i(w)m(ord)f(splitting)h(and)f
+(\014lename)g(expansion)150 1116 y(are)i(not)f(p)s(erformed)f(on)h(the)
+h(results.)150 1316 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)150
+1463 y Fu(Arithmetic)25 b(expansion)g(allo)m(ws)g(the)g(ev)-5
+b(aluation)26 b(of)f(an)f(arithmetic)i(expression)e(and)g(the)g
+(substitution)150 1572 y(of)31 b(the)f(result.)41 b(The)30
+b(format)g(for)g(arithmetic)i(expansion)e(is:)390 1707
+y Ft($\(\()47 b Fj(expression)e Ft(\)\))275 1841 y Fu(The)33
+b(expression)g(is)h(treated)g(as)g(if)g(it)g(w)m(ere)g(within)f(double)
+h(quotes,)h(but)e(a)h(double)f(quote)h(inside)150 1951
+y(the)k(paren)m(theses)g(is)g(not)g(treated)h(sp)s(ecially)-8
+b(.)65 b(All)38 b(tok)m(ens)h(in)f(the)g(expression)f(undergo)g
+(parameter)150 2061 y(and)26 b(v)-5 b(ariable)28 b(expansion,)g
+(command)e(substitution,)i(and)e(quote)i(remo)m(v)-5
+b(al.)41 b(The)26 b(result)h(is)g(treated)h(as)150 2170
+y(the)j(arithmetic)g(expression)f(to)h(b)s(e)f(ev)-5
+b(aluated.)42 b(Arithmetic)31 b(expansions)g(ma)m(y)g(b)s(e)e(nested.)
+275 2305 y(The)34 b(ev)-5 b(aluation)37 b(is)f(p)s(erformed)e
+(according)i(to)g(the)g(rules)f(listed)h(b)s(elo)m(w)g(\(see)g(Section)
+g(6.5)h([Shell)150 2415 y(Arithmetic],)32 b(page)f(92\).)42
+b(If)30 b(the)h(expression)f(is)g(in)m(v)-5 b(alid,)32
+b(Bash)e(prin)m(ts)g(a)h(message)g(indicating)h(failure)150
+2524 y(to)f(the)g(standard)e(error)h(and)g(no)g(substitution)g(o)s
+(ccurs.)150 2724 y Fk(3.5.6)63 b(Pro)s(cess)42 b(Substitution)150
+2870 y Fu(Pro)s(cess)33 b(substitution)g(allo)m(ws)i(a)e(pro)s(cess's)g
+(input)f(or)h(output)g(to)h(b)s(e)f(referred)f(to)i(using)f(a)g
+(\014lename.)150 2980 y(It)d(tak)m(es)i(the)f(form)f(of)390
+3115 y Ft(<\()p Fj(list)p Ft(\))150 3249 y Fu(or)390
+3384 y Ft(>\()p Fj(list)p Ft(\))150 3519 y Fu(The)e(pro)s(cess)h
+Fr(list)j Fu(is)d(run)e(async)m(hronously)-8 b(,)30 b(and)e(its)i
+(input)e(or)h(output)f(app)s(ears)h(as)g(a)g(\014lename.)41
+b(This)150 3628 y(\014lename)25 b(is)g(passed)g(as)g(an)g(argumen)m(t)h
+(to)g(the)f(curren)m(t)g(command)g(as)g(the)g(result)g(of)g(the)h
+(expansion.)38 b(If)150 3738 y(the)28 b Ft(>\()p Fj(list)p
+Ft(\))d Fu(form)i(is)g(used,)h(writing)f(to)h(the)g(\014le)f(will)h
+(pro)m(vide)g(input)e(for)h Fr(list)p Fu(.)41 b(If)26
+b(the)i Ft(<\()p Fj(list)p Ft(\))d Fu(form)150 3848 y(is)g(used,)g(the)
+f(\014le)h(passed)f(as)h(an)f(argumen)m(t)h(should)e(b)s(e)h(read)h(to)
+g(obtain)g(the)f(output)g(of)h Fr(list)p Fu(.)40 b(Note)25
+b(that)150 3957 y(no)33 b(space)g(ma)m(y)g(app)s(ear)f(b)s(et)m(w)m
+(een)i(the)f Ft(<)f Fu(or)h Ft(>)f Fu(and)g(the)h(left)h(paren)m
+(thesis,)f(otherwise)h(the)f(construct)150 4067 y(w)m(ould)j(b)s(e)g
+(in)m(terpreted)g(as)h(a)f(redirection.)59 b(Pro)s(cess)36
+b(substitution)g(is)h(supp)s(orted)d(on)i(systems)g(that)150
+4176 y(supp)s(ort)29 b(named)h(pip)s(es)f(\()p Fm(fif)n(o)p
+Fu(s\))h(or)h(the)f Ft(/dev/fd)f Fu(metho)s(d)h(of)g(naming)g(op)s(en)g
+(\014les.)275 4311 y(When)36 b(a)m(v)-5 b(ailable,)40
+b(pro)s(cess)c(substitution)h(is)f(p)s(erformed)f(sim)m(ultaneously)i
+(with)g(parameter)g(and)150 4421 y(v)-5 b(ariable)31
+b(expansion,)g(command)f(substitution,)g(and)g(arithmetic)i(expansion.)
+150 4620 y Fk(3.5.7)63 b(W)-10 b(ord)41 b(Splitting)150
+4767 y Fu(The)30 b(shell)h(scans)g(the)g(results)f(of)h(parameter)g
+(expansion,)g(command)g(substitution,)g(and)f(arithmetic)150
+4877 y(expansion)g(that)h(did)f(not)g(o)s(ccur)h(within)e(double)h
+(quotes)h(for)f(w)m(ord)g(splitting.)275 5011 y(The)e(shell)g(treats)i
+(eac)m(h)g(c)m(haracter)g(of)f Ft($IFS)e Fu(as)i(a)g(delimiter,)h(and)e
+(splits)g(the)h(results)f(of)h(the)g(other)150 5121 y(expansions)22
+b(in)m(to)i(w)m(ords)e(using)h(these)g(c)m(haracters)h(as)f(\014eld)f
+(terminators.)39 b(If)22 b Ft(IFS)g Fu(is)h(unset,)h(or)e(its)h(v)-5
+b(alue)150 5230 y(is)36 b(exactly)j Ft(<space><tab><newline>)p
+Fu(,)32 b(the)37 b(default,)h(then)e(sequences)h(of)67
+b Ft(<space>)p Fu(,)36 b Ft(<tab>)p Fu(,)h(and)150 5340
+y Ft(<newline>)28 b Fu(at)k(the)f(b)s(eginning)f(and)h(end)f(of)h(the)g
+(results)g(of)g(the)g(previous)g(expansions)f(are)i(ignored,)p
+eop end
+%%Page: 32 38
+TeXDict begin 32 37 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(32)150 299
+y(and)36 b(an)m(y)h(sequence)h(of)f Ft(IFS)f Fu(c)m(haracters)i(not)f
+(at)h(the)f(b)s(eginning)f(or)h(end)f(serv)m(es)h(to)h(delimit)f(w)m
+(ords.)150 408 y(If)43 b Ft(IFS)f Fu(has)h(a)h(v)-5 b(alue)43
+b(other)h(than)f(the)g(default,)k(then)c(sequences)h(of)f(the)h
+(whitespace)f(c)m(haracters)150 518 y Ft(space)p Fu(,)29
+b Ft(tab)p Fu(,)h(and)g Ft(newline)e Fu(are)j(ignored)g(at)g(the)f(b)s
+(eginning)g(and)g(end)g(of)g(the)h(w)m(ord,)f(as)h(long)g(as)g(the)150
+628 y(whitespace)c(c)m(haracter)h(is)f(in)f(the)g(v)-5
+b(alue)27 b(of)g Ft(IFS)e Fu(\(an)i Ft(IFS)e Fu(whitespace)i(c)m
+(haracter\).)42 b(An)m(y)26 b(c)m(haracter)i(in)150 737
+y Ft(IFS)c Fu(that)h(is)g(not)f Ft(IFS)g Fu(whitespace,)j(along)f(with)
+e(an)m(y)h(adjacen)m(t)h Ft(IFS)e Fu(whitespace)h(c)m(haracters,)i
+(delimits)150 847 y(a)k(\014eld.)40 b(A)31 b(sequence)g(of)f
+Ft(IFS)g Fu(whitespace)h(c)m(haracters)h(is)e(also)h(treated)h(as)f(a)f
+(delimiter.)42 b(If)30 b(the)g(v)-5 b(alue)150 956 y(of)31
+b Ft(IFS)e Fu(is)h(n)m(ull,)h(no)f(w)m(ord)g(splitting)h(o)s(ccurs.)275
+1114 y(Explicit)21 b(n)m(ull)g(argumen)m(ts)g(\()p Ft("")g
+Fu(or)g Ft('')p Fu(\))f(are)h(retained)h(and)e(passed)g(to)i(commands)e
+(as)i(empt)m(y)f(strings.)150 1224 y(Unquoted)37 b(implicit)i(n)m(ull)f
+(argumen)m(ts,)i(resulting)d(from)g(the)h(expansion)g(of)g(parameters)f
+(that)i(ha)m(v)m(e)150 1333 y(no)32 b(v)-5 b(alues,)33
+b(are)f(remo)m(v)m(ed.)47 b(If)32 b(a)g(parameter)h(with)e(no)h(v)-5
+b(alue)33 b(is)f(expanded)f(within)h(double)f(quotes,)j(a)150
+1443 y(n)m(ull)c(argumen)m(t)g(results)g(and)f(is)h(retained)g(and)f
+(passed)g(to)i(a)f(command)g(as)g(an)f(empt)m(y)i(string.)40
+b(When)150 1552 y(a)f(quoted)f(n)m(ull)g(argumen)m(t)h(app)s(ears)e(as)
+i(part)f(of)g(a)g(w)m(ord)g(whose)g(expansion)g(is)h(non-n)m(ull,)h
+(the)e(n)m(ull)150 1662 y(argumen)m(t)i(is)f(remo)m(v)m(ed.)69
+b(That)39 b(is,)j(the)e(w)m(ord)f Ft(-d'')f Fu(b)s(ecomes)i
+Ft(-d)e Fu(after)i(w)m(ord)f(splitting)h(and)f(n)m(ull)150
+1772 y(argumen)m(t)31 b(remo)m(v)-5 b(al.)275 1929 y(Note)31
+b(that)g(if)g(no)f(expansion)g(o)s(ccurs,)g(no)h(splitting)g(is)f(p)s
+(erformed.)150 2152 y Fk(3.5.8)63 b(Filename)41 b(Expansion)150
+2299 y Fu(After)30 b(w)m(ord)f(splitting,)i(unless)d(the)i
+Ft(-f)f Fu(option)h(has)f(b)s(een)g(set)h(\(see)g(Section)h(4.3.1)g
+([The)e(Set)h(Builtin],)150 2408 y(page)d(61\),)i(Bash)d(scans)h(eac)m
+(h)h(w)m(ord)e(for)g(the)h(c)m(haracters)g(`)p Ft(*)p
+Fu(',)h(`)p Ft(?)p Fu(',)g(and)e(`)p Ft([)p Fu('.)39
+b(If)26 b(one)h(of)g(these)f(c)m(haracters)150 2518 y(app)s(ears,)h
+(then)f(the)h(w)m(ord)f(is)h(regarded)g(as)g(a)g Fr(pattern)p
+Fu(,)g(and)g(replaced)g(with)f(an)h(alphab)s(etically)h(sorted)150
+2627 y(list)k(of)f(\014lenames)g(matc)m(hing)h(the)f(pattern)g(\(see)h
+(Section)f(3.5.8.1)j([P)m(attern)e(Matc)m(hing],)h(page)f(33\).)43
+b(If)150 2737 y(no)26 b(matc)m(hing)i(\014lenames)e(are)h(found,)f(and)
+g(the)h(shell)f(option)h Ft(nullglob)d Fu(is)j(disabled,)g(the)g(w)m
+(ord)f(is)g(left)150 2846 y(unc)m(hanged.)40 b(If)30
+b(the)g Ft(nullglob)e Fu(option)i(is)h(set,)f(and)g(no)g(matc)m(hes)h
+(are)g(found,)e(the)h(w)m(ord)g(is)g(remo)m(v)m(ed.)150
+2956 y(If)i(the)g Ft(failglob)e Fu(shell)i(option)h(is)f(set,)h(and)f
+(no)g(matc)m(hes)h(are)g(found,)e(an)h(error)g(message)h(is)f(prin)m
+(ted)150 3066 y(and)e(the)g(command)g(is)h(not)f(executed.)42
+b(If)30 b(the)g(shell)h(option)g Ft(nocaseglob)c Fu(is)k(enabled,)f
+(the)h(matc)m(h)g(is)150 3175 y(p)s(erformed)e(without)h(regard)h(to)g
+(the)f(case)i(of)e(alphab)s(etic)h(c)m(haracters.)275
+3333 y(When)23 b(a)h(pattern)f(is)h(used)f(for)g(\014lename)h
+(expansion,)h(the)e(c)m(haracter)i(`)p Ft(.)p Fu(')f(at)g(the)g(start)g
+(of)g(a)g(\014lename)150 3442 y(or)f(immediately)i(follo)m(wing)g(a)f
+(slash)f(m)m(ust)h(b)s(e)f(matc)m(hed)h(explicitly)-8
+b(,)27 b(unless)c(the)g(shell)h(option)g Ft(dotglob)150
+3552 y Fu(is)k(set.)41 b(The)28 b(\014lenames)g(`)p Ft(.)p
+Fu(')g(and)g(`)p Ft(..)p Fu(')g(m)m(ust)g(alw)m(a)m(ys)i(b)s(e)e(matc)m
+(hed)h(explicitly)-8 b(,)30 b(ev)m(en)f(if)g Ft(dotglob)d
+Fu(is)i(set.)150 3662 y(In)i(other)g(cases,)i(the)e(`)p
+Ft(.)p Fu(')h(c)m(haracter)h(is)e(not)h(treated)g(sp)s(ecially)-8
+b(.)275 3819 y(When)30 b(matc)m(hing)i(a)f(\014lename,)h(the)f(slash)f
+(c)m(haracter)j(m)m(ust)d(alw)m(a)m(ys)j(b)s(e)d(matc)m(hed)h
+(explicitly)i(b)m(y)e(a)150 3929 y(slash)d(in)f(the)h(pattern,)h(but)e
+(in)h(other)g(matc)m(hing)h(con)m(texts)h(it)e(can)g(b)s(e)g(matc)m
+(hed)g(b)m(y)g(a)g(sp)s(ecial)h(pattern)150 4038 y(c)m(haracter)j(as)f
+(describ)s(ed)e(b)s(elo)m(w)h(\(see)i(Section)f(3.5.8.1)i([P)m(attern)e
+(Matc)m(hing],)i(page)e(33\).)275 4196 y(See)d(the)g(description)g(of)g
+Ft(shopt)e Fu(in)i(Section)g(4.3.2)i([The)e(Shopt)f(Builtin],)i(page)g
+(65,)g(for)f(a)g(descrip-)150 4306 y(tion)j(of)f(the)h
+Ft(nocaseglob)p Fu(,)d Ft(nullglob)p Fu(,)g Ft(failglob)p
+Fu(,)h(and)g Ft(dotglob)g Fu(options.)275 4463 y(The)36
+b Ft(GLOBIGNORE)d Fu(shell)k(v)-5 b(ariable)37 b(ma)m(y)g(b)s(e)f(used)
+g(to)h(restrict)g(the)g(set)g(of)g(\014le)f(names)h(matc)m(hing)150
+4573 y(a)42 b(pattern.)74 b(If)41 b Ft(GLOBIGNORE)e Fu(is)i(set,)k(eac)
+m(h)e(matc)m(hing)f(\014le)g(name)f(that)h(also)h(matc)m(hes)f(one)g
+(of)g(the)150 4682 y(patterns)34 b(in)g Ft(GLOBIGNORE)d
+Fu(is)k(remo)m(v)m(ed)g(from)f(the)g(list)h(of)f(matc)m(hes.)54
+b(If)33 b(the)i Ft(nocaseglob)c Fu(option)k(is)150 4792
+y(set,)c(the)e(matc)m(hing)i(against)g(the)f(patterns)f(in)h
+Ft(GLOBIGNORE)c Fu(is)k(p)s(erformed)e(without)i(regard)f(to)i(case.)
+150 4902 y(The)d(\014lenames)h Ft(.)g Fu(and)f Ft(..)h
+Fu(are)g(alw)m(a)m(ys)h(ignored)f(when)f Ft(GLOBIGNORE)f
+Fu(is)i(set)g(and)f(not)h(n)m(ull.)41 b(Ho)m(w)m(ev)m(er,)150
+5011 y(setting)30 b Ft(GLOBIGNORE)d Fu(to)j(a)f(non-n)m(ull)g(v)-5
+b(alue)30 b(has)f(the)g(e\013ect)i(of)f(enabling)f(the)h
+Ft(dotglob)d Fu(shell)i(option,)150 5121 y(so)j(all)h(other)f
+(\014lenames)g(b)s(eginning)f(with)h(a)g(`)p Ft(.)p Fu(')g(will)h(matc)
+m(h.)46 b(T)-8 b(o)32 b(get)h(the)f(old)g(b)s(eha)m(vior)g(of)h
+(ignoring)150 5230 y(\014lenames)c(b)s(eginning)f(with)h(a)h(`)p
+Ft(.)p Fu(',)f(mak)m(e)h(`)p Ft(.*)p Fu(')f(one)h(of)f(the)g(patterns)g
+(in)g Ft(GLOBIGNORE)p Fu(.)37 b(The)29 b Ft(dotglob)150
+5340 y Fu(option)i(is)f(disabled)g(when)g Ft(GLOBIGNORE)d
+Fu(is)k(unset.)p eop end
+%%Page: 33 39
+TeXDict begin 33 38 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(33)150 299
+y Fk(3.5.8.1)63 b(P)m(attern)40 b(Matc)m(hing)150 446
+y Fu(An)m(y)24 b(c)m(haracter)h(that)f(app)s(ears)f(in)g(a)h(pattern,)i
+(other)e(than)f(the)h(sp)s(ecial)g(pattern)g(c)m(haracters)h(describ)s
+(ed)150 555 y(b)s(elo)m(w,)31 b(matc)m(hes)g(itself.)42
+b(The)29 b Fm(nul)h Fu(c)m(haracter)i(ma)m(y)e(not)h(o)s(ccur)f(in)g(a)
+h(pattern.)40 b(A)31 b(bac)m(kslash)g(escap)s(es)150
+665 y(the)38 b(follo)m(wing)g(c)m(haracter;)43 b(the)37
+b(escaping)i(bac)m(kslash)e(is)h(discarded)f(when)f(matc)m(hing.)63
+b(The)36 b(sp)s(ecial)150 775 y(pattern)30 b(c)m(haracters)i(m)m(ust)f
+(b)s(e)e(quoted)i(if)f(they)h(are)f(to)i(b)s(e)d(matc)m(hed)i
+(literally)-8 b(.)275 901 y(The)29 b(sp)s(ecial)i(pattern)g(c)m
+(haracters)h(ha)m(v)m(e)f(the)g(follo)m(wing)h(meanings:)150
+1045 y Ft(*)432 b Fu(Matc)m(hes)31 b(an)m(y)e(string,)h(including)f
+(the)g(n)m(ull)g(string.)41 b(When)29 b(the)g Ft(globstar)e
+Fu(shell)i(option)630 1155 y(is)37 b(enabled,)h(and)e(`)p
+Ft(*)p Fu(')h(is)g(used)f(in)g(a)h(\014lename)g(expansion)g(con)m
+(text,)j(t)m(w)m(o)e(adjacen)m(t)g(`)p Ft(*)p Fu('s)630
+1264 y(used)f(as)g(a)h(single)g(pattern)g(will)f(matc)m(h)i(all)f
+(\014les)f(and)g(zero)h(or)g(more)f(directories)i(and)630
+1374 y(sub)s(directories.)g(If)25 b(follo)m(w)m(ed)j(b)m(y)e(a)g(`)p
+Ft(/)p Fu(',)h(t)m(w)m(o)g(adjacen)m(t)h(`)p Ft(*)p Fu('s)e(will)g
+(matc)m(h)h(only)f(directories)630 1484 y(and)k(sub)s(directories.)150
+1627 y Ft(?)432 b Fu(Matc)m(hes)32 b(an)m(y)f(single)g(c)m(haracter.)
+150 1771 y Ft([...)o(])241 b Fu(Matc)m(hes)27 b(an)m(y)e(one)g(of)g
+(the)g(enclosed)g(c)m(haracters.)41 b(A)25 b(pair)f(of)h(c)m(haracters)
+i(separated)e(b)m(y)g(a)630 1881 y(h)m(yphen)k(denotes)i(a)g
+Fr(range)g(expression)p Fu(;)f(an)m(y)h(c)m(haracter)h(that)f(falls)g
+(b)s(et)m(w)m(een)g(those)g(t)m(w)m(o)630 1990 y(c)m(haracters,)d
+(inclusiv)m(e,)f(using)d(the)h(curren)m(t)f(lo)s(cale's)j(collating)g
+(sequence)e(and)f(c)m(haracter)630 2100 y(set,)31 b(is)f(matc)m(hed.)42
+b(If)30 b(the)g(\014rst)g(c)m(haracter)i(follo)m(wing)g(the)e(`)p
+Ft([)p Fu(')h(is)f(a)h(`)p Ft(!)p Fu(')f(or)g(a)h(`)p
+Ft(^)p Fu(')g(then)f(an)m(y)630 2210 y(c)m(haracter)c(not)f(enclosed)g
+(is)g(matc)m(hed.)40 b(A)25 b(`)p Fq(\000)p Fu(')f(ma)m(y)i(b)s(e)e
+(matc)m(hed)h(b)m(y)f(including)h(it)g(as)g(the)630 2319
+y(\014rst)32 b(or)h(last)h(c)m(haracter)h(in)e(the)g(set.)50
+b(A)33 b(`)p Ft(])p Fu(')g(ma)m(y)h(b)s(e)e(matc)m(hed)i(b)m(y)f
+(including)g(it)g(as)h(the)630 2429 y(\014rst)25 b(c)m(haracter)i(in)e
+(the)h(set.)40 b(The)25 b(sorting)h(order)f(of)h(c)m(haracters)h(in)f
+(range)g(expressions)f(is)630 2538 y(determined)h(b)m(y)h(the)g(curren)
+m(t)f(lo)s(cale)j(and)d(the)h(v)-5 b(alues)27 b(of)g(the)g
+Ft(LC_COLLATE)d Fu(and)i Ft(LC_ALL)630 2648 y Fu(shell)31
+b(v)-5 b(ariables,)31 b(if)f(set.)630 2775 y(F)-8 b(or)34
+b(example,)g(in)f(the)g(default)g(C)f(lo)s(cale,)k(`)p
+Ft([a-dx-z])p Fu(')31 b(is)i(equiv)-5 b(alen)m(t)34 b(to)g(`)p
+Ft([abcdxyz])p Fu('.)630 2884 y(Man)m(y)68 b(lo)s(cales)h(sort)f(c)m
+(haracters)h(in)e(dictionary)i(order,)76 b(and)67 b(in)g(these)h(lo)s
+(cales)630 2994 y(`)p Ft([a-dx-z])p Fu(')36 b(is)i(t)m(ypically)i(not)e
+(equiv)-5 b(alen)m(t)39 b(to)g(`)p Ft([abcdxyz])p Fu(';)g(it)g(migh)m
+(t)f(b)s(e)f(equiv)-5 b(alen)m(t)630 3104 y(to)34 b(`)p
+Ft([aBbCcDdxXyYz])p Fu(',)c(for)j(example.)49 b(T)-8
+b(o)33 b(obtain)h(the)f(traditional)h(in)m(terpretation)h(of)630
+3213 y(ranges)e(in)f(brac)m(k)m(et)i(expressions,)g(y)m(ou)f(can)g
+(force)g(the)g(use)f(of)h(the)g(C)f(lo)s(cale)i(b)m(y)f(setting)630
+3323 y(the)c Ft(LC_COLLATE)e Fu(or)i Ft(LC_ALL)f Fu(en)m(vironmen)m(t)i
+(v)-5 b(ariable)30 b(to)g(the)f(v)-5 b(alue)30 b(`)p
+Ft(C)p Fu(',)g(or)f(enable)h(the)630 3432 y Ft(globasciiranges)c
+Fu(shell)31 b(option.)630 3559 y(Within)23 b(`)p Ft([)p
+Fu(')h(and)e(`)p Ft(])p Fu(',)j Fr(c)m(haracter)g(classes)j
+Fu(can)c(b)s(e)e(sp)s(eci\014ed)h(using)f(the)i(syn)m(tax)f
+Ft([:)p Fr(class)t Ft(:])p Fu(,)630 3669 y(where)30 b
+Fr(class)35 b Fu(is)30 b(one)h(of)f(the)h(follo)m(wing)h(classes)f
+(de\014ned)e(in)h(the)h Fm(posix)f Fu(standard:)870 3795
+y Ft(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g(digit)g(graph)g(lower)
+870 3905 y(print)g(punct)g(space)f(upper)h(word)190 b(xdigit)630
+4032 y Fu(A)42 b(c)m(haracter)h(class)f(matc)m(hes)h(an)m(y)f(c)m
+(haracter)h(b)s(elonging)f(to)g(that)g(class.)75 b(The)41
+b Ft(word)630 4141 y Fu(c)m(haracter)32 b(class)f(matc)m(hes)h
+(letters,)f(digits,)h(and)d(the)i(c)m(haracter)h(`)p
+Ft(_)p Fu('.)630 4268 y(Within)25 b(`)p Ft([)p Fu(')f(and)g(`)p
+Ft(])p Fu(',)i(an)e Fr(equiv)-5 b(alence)26 b(class)j
+Fu(can)24 b(b)s(e)g(sp)s(eci\014ed)g(using)g(the)g(syn)m(tax)h
+Ft([=)p Fr(c)6 b Ft(=])p Fu(,)630 4378 y(whic)m(h)29
+b(matc)m(hes)i(all)f(c)m(haracters)h(with)e(the)h(same)g(collation)h(w)
+m(eigh)m(t)g(\(as)f(de\014ned)e(b)m(y)i(the)630 4487
+y(curren)m(t)g(lo)s(cale\))j(as)d(the)h(c)m(haracter)h
+Fr(c)p Fu(.)630 4614 y(Within)22 b(`)p Ft([)p Fu(')f(and)g(`)p
+Ft(])p Fu(',)j(the)d(syn)m(tax)h Ft([.)p Fr(sym)m(b)s(ol)t
+Ft(.])e Fu(matc)m(hes)i(the)g(collating)i(sym)m(b)s(ol)d
+Fr(sym)m(b)s(ol)p Fu(.)275 4758 y(If)29 b(the)g Ft(extglob)f
+Fu(shell)h(option)h(is)g(enabled)f(using)g(the)h Ft(shopt)e
+Fu(builtin,)h(sev)m(eral)i(extended)f(pattern)150 4867
+y(matc)m(hing)37 b(op)s(erators)e(are)h(recognized.)58
+b(In)35 b(the)g(follo)m(wing)i(description,)g(a)f Fr(pattern-list)j
+Fu(is)d(a)g(list)g(of)150 4977 y(one)d(or)f(more)h(patterns)f
+(separated)h(b)m(y)f(a)h(`)p Ft(|)p Fu('.)47 b(Comp)s(osite)33
+b(patterns)f(ma)m(y)i(b)s(e)d(formed)h(using)g(one)h(or)150
+5087 y(more)e(of)f(the)h(follo)m(wing)g(sub-patterns:)150
+5230 y Ft(?\()p Fj(pattern-list)p Ft(\))630 5340 y Fu(Matc)m(hes)h
+(zero)f(or)g(one)f(o)s(ccurrence)h(of)f(the)h(giv)m(en)g(patterns.)p
+eop end
+%%Page: 34 40
+TeXDict begin 34 39 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(34)150 299
+y Ft(*\()p Fj(pattern-list)p Ft(\))630 408 y Fu(Matc)m(hes)32
+b(zero)f(or)g(more)f(o)s(ccurrences)h(of)f(the)h(giv)m(en)g(patterns.)
+150 554 y Ft(+\()p Fj(pattern-list)p Ft(\))630 663 y
+Fu(Matc)m(hes)h(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m(en)
+i(patterns.)150 809 y Ft(@\()p Fj(pattern-list)p Ft(\))630
+918 y Fu(Matc)m(hes)g(one)f(of)f(the)h(giv)m(en)g(patterns.)150
+1064 y Ft(!\()p Fj(pattern-list)p Ft(\))630 1173 y Fu(Matc)m(hes)h(an)m
+(ything)f(except)g(one)g(of)f(the)h(giv)m(en)g(patterns.)275
+1319 y(Complicated)41 b(extended)f(pattern)g(matc)m(hing)h(against)h
+(long)f(strings)f(is)g(slo)m(w,)k(esp)s(ecially)d(when)150
+1428 y(the)29 b(patterns)g(con)m(tain)i(alternations)f(and)f(the)g
+(strings)g(con)m(tain)h(m)m(ultiple)g(matc)m(hes.)42
+b(Using)29 b(separate)150 1538 y(matc)m(hes)38 b(against)g(shorter)e
+(strings,)i(or)f(using)f(arra)m(ys)h(of)g(strings)f(instead)h(of)g(a)g
+(single)g(long)h(string,)150 1647 y(ma)m(y)31 b(b)s(e)f(faster.)150
+1833 y Fk(3.5.9)63 b(Quote)41 b(Remo)m(v)-7 b(al)150
+1979 y Fu(After)32 b(the)g(preceding)g(expansions,)h(all)f(unquoted)f
+(o)s(ccurrences)h(of)g(the)h(c)m(haracters)g(`)p Ft(\\)p
+Fu(',)g(`)p Ft(')p Fu(',)f(and)g(`)p Ft(")p Fu(')150
+2089 y(that)f(did)f(not)g(result)g(from)g(one)h(of)g(the)f(ab)s(o)m(v)m
+(e)i(expansions)e(are)h(remo)m(v)m(ed.)150 2316 y Fs(3.6)68
+b(Redirections)150 2475 y Fu(Before)32 b(a)f(command)f(is)h(executed,)h
+(its)f(input)e(and)h(output)h(ma)m(y)g(b)s(e)f Fr(redirected)k
+Fu(using)c(a)i(sp)s(ecial)f(no-)150 2585 y(tation)d(in)m(terpreted)f(b)
+m(y)f(the)h(shell.)40 b(Redirection)27 b(allo)m(ws)h(commands')f
+(\014le)f(handles)g(to)i(b)s(e)e(duplicated,)150 2694
+y(op)s(ened,)i(closed,)i(made)e(to)h(refer)f(to)h(di\013eren)m(t)f
+(\014les,)h(and)f(can)g(c)m(hange)h(the)g(\014les)f(the)g(command)g
+(reads)150 2804 y(from)39 b(and)g(writes)h(to.)69 b(Redirection)40
+b(ma)m(y)g(also)h(b)s(e)e(used)g(to)h(mo)s(dify)f(\014le)g(handles)g
+(in)g(the)h(curren)m(t)150 2914 y(shell)e(execution)h(en)m(vironmen)m
+(t.)65 b(The)37 b(follo)m(wing)j(redirection)f(op)s(erators)f(ma)m(y)g
+(precede)h(or)f(app)s(ear)150 3023 y(an)m(ywhere)30 b(within)f(a)h
+(simple)f(command)h(or)f(ma)m(y)i(follo)m(w)g(a)f(command.)40
+b(Redirections)30 b(are)g(pro)s(cessed)150 3133 y(in)g(the)h(order)f
+(they)g(app)s(ear,)g(from)g(left)h(to)g(righ)m(t.)275
+3260 y(Eac)m(h)45 b(redirection)h(that)f(ma)m(y)h(b)s(e)e(preceded)g(b)
+m(y)h(a)h(\014le)f(descriptor)f(n)m(um)m(b)s(er)g(ma)m(y)h(instead)h(b)
+s(e)150 3370 y(preceded)41 b(b)m(y)g(a)h(w)m(ord)f(of)g(the)h(form)f
+Fi({)p Fr(v)-5 b(arname)5 b Fi(})p Fu(.)74 b(In)41 b(this)g(case,)k
+(for)c(eac)m(h)i(redirection)f(op)s(erator)150 3479 y(except)30
+b Ft(>)p Fu(&-)f(and)f Ft(<)p Fu(&-,)h(the)g(shell)g(will)h(allo)s
+(cate)h(a)e(\014le)h(descriptor)e(greater)j(than)d(10)i(and)e(assign)i
+(it)f(to)150 3589 y Fi({)p Fr(v)-5 b(arname)5 b Fi(})p
+Fu(.)45 b(If)31 b Ft(>)p Fu(&-)g(or)h Ft(<)p Fu(&-)f(is)h(preceded)f(b)
+m(y)g Fi({)p Fr(v)-5 b(arname)5 b Fi(})p Fu(,)33 b(the)f(v)-5
+b(alue)32 b(of)g Fr(v)-5 b(arname)36 b Fu(de\014nes)31
+b(the)h(\014le)150 3698 y(descriptor)i(to)g(close.)52
+b(If)34 b Fi({)p Fr(v)-5 b(arname)5 b Fi(})34 b Fu(is)g(supplied,)g
+(the)g(redirection)g(p)s(ersists)f(b)s(ey)m(ond)g(the)h(scop)s(e)g(of)
+150 3808 y(the)d(command,)f(allo)m(wing)i(the)f(shell)f(programmer)g
+(to)h(manage)h(the)e(\014le)h(descriptor)f(himself.)275
+3936 y(In)d(the)i(follo)m(wing)h(descriptions,)g(if)e(the)h(\014le)g
+(descriptor)f(n)m(um)m(b)s(er)g(is)g(omitted,)i(and)f(the)f(\014rst)g
+(c)m(har-)150 4045 y(acter)42 b(of)f(the)g(redirection)g(op)s(erator)g
+(is)g(`)p Ft(<)p Fu(',)i(the)e(redirection)g(refers)g(to)g(the)g
+(standard)f(input)f(\(\014le)150 4155 y(descriptor)33
+b(0\).)49 b(If)33 b(the)g(\014rst)f(c)m(haracter)i(of)g(the)f
+(redirection)g(op)s(erator)h(is)f(`)p Ft(>)p Fu(',)h(the)f(redirection)
+g(refers)150 4264 y(to)e(the)g(standard)e(output)h(\(\014le)h
+(descriptor)f(1\).)275 4392 y(The)h(w)m(ord)h(follo)m(wing)i(the)f
+(redirection)g(op)s(erator)f(in)g(the)h(follo)m(wing)h(descriptions,)f
+(unless)e(other-)150 4501 y(wise)21 b(noted,)i(is)e(sub)5
+b(jected)21 b(to)h(brace)f(expansion,)i(tilde)f(expansion,)h(parameter)
+e(expansion,)i(command)150 4611 y(substitution,)31 b(arithmetic)h
+(expansion,)f(quote)h(remo)m(v)-5 b(al,)33 b(\014lename)e(expansion,)g
+(and)f(w)m(ord)h(splitting.)150 4721 y(If)f(it)h(expands)e(to)i(more)g
+(than)f(one)h(w)m(ord,)f(Bash)h(rep)s(orts)e(an)h(error.)275
+4848 y(Note)h(that)g(the)g(order)f(of)g(redirections)h(is)g
+(signi\014can)m(t.)41 b(F)-8 b(or)31 b(example,)h(the)e(command)390
+4975 y Ft(ls)47 b(>)h Fj(dirlist)d Ft(2>&1)150 5103 y
+Fu(directs)28 b(b)s(oth)f(standard)g(output)g(\(\014le)h(descriptor)f
+(1\))i(and)e(standard)f(error)i(\(\014le)g(descriptor)f(2\))h(to)h(the)
+150 5213 y(\014le)h Fr(dirlist)p Fu(,)h(while)f(the)h(command)390
+5340 y Ft(ls)47 b(2>&1)g(>)g Fj(dirlist)p eop end
+%%Page: 35 41
+TeXDict begin 35 40 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(35)150 299
+y(directs)28 b(only)f(the)h(standard)e(output)i(to)g(\014le)f
+Fr(dirlist)p Fu(,)h(b)s(ecause)g(the)f(standard)g(error)g(w)m(as)h
+(made)f(a)h(cop)m(y)150 408 y(of)j(the)f(standard)g(output)g(b)s(efore)
+g(the)g(standard)g(output)g(w)m(as)g(redirected)h(to)g
+Fr(dirlist)p Fu(.)275 543 y(Bash)26 b(handles)f(sev)m(eral)j
+(\014lenames)e(sp)s(ecially)h(when)f(they)g(are)g(used)g(in)g
+(redirections,)i(as)e(describ)s(ed)150 652 y(in)38 b(the)h(follo)m
+(wing)h(table.)66 b(If)38 b(the)h(op)s(erating)g(system)f(on)h(whic)m
+(h)f(Bash)h(is)f(running)f(pro)m(vides)h(these)150 762
+y(sp)s(ecial)27 b(\014les,)g(bash)e(will)i(use)f(them;)h(otherwise)g
+(it)f(will)h(em)m(ulate)h(them)e(in)m(ternally)h(with)f(the)g(b)s(eha)m
+(vior)150 871 y(describ)s(ed)j(b)s(elo)m(w.)150 1030
+y Ft(/dev/fd/)p Fj(fd)630 1140 y Fu(If)h Fr(fd)j Fu(is)d(a)h(v)-5
+b(alid)31 b(in)m(teger,)h(\014le)e(descriptor)h Fr(fd)i
+Fu(is)d(duplicated.)150 1298 y Ft(/dev/stdin)630 1408
+y Fu(File)i(descriptor)e(0)h(is)f(duplicated.)150 1566
+y Ft(/dev/stdout)630 1676 y Fu(File)i(descriptor)e(1)h(is)f
+(duplicated.)150 1835 y Ft(/dev/stderr)630 1944 y Fu(File)i(descriptor)
+e(2)h(is)f(duplicated.)150 2103 y Ft(/dev/tcp/)p Fj(host)p
+Ft(/)p Fj(port)630 2212 y Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5
+b(alid)41 b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c
+Fr(p)s(ort)j Fu(is)f(an)f(in)m(teger)i(p)s(ort)630 2322
+y(n)m(um)m(b)s(er)23 b(or)i(service)h(name,)g(Bash)f(attempts)h(to)f
+(op)s(en)f(the)h(corresp)s(onding)f(TCP)g(so)s(c)m(k)m(et.)150
+2480 y Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)630 2590
+y Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 b(alid)41 b(hostname)h(or)f(In)
+m(ternet)h(address,)i(and)c Fr(p)s(ort)j Fu(is)f(an)f(in)m(teger)i(p)s
+(ort)630 2700 y(n)m(um)m(b)s(er)23 b(or)h(service)h(name,)h(Bash)e
+(attempts)h(to)g(op)s(en)f(the)g(corresp)s(onding)f(UDP)i(so)s(c)m(k)m
+(et.)275 2858 y(A)30 b(failure)h(to)g(op)s(en)e(or)i(create)h(a)e
+(\014le)h(causes)g(the)f(redirection)h(to)g(fail.)275
+2992 y(Redirections)f(using)e(\014le)i(descriptors)f(greater)h(than)f
+(9)h(should)e(b)s(e)h(used)f(with)h(care,)h(as)g(they)f(ma)m(y)150
+3102 y(con\015ict)i(with)f(\014le)h(descriptors)f(the)g(shell)h(uses)f
+(in)m(ternally)-8 b(.)150 3300 y Fk(3.6.1)63 b(Redirecting)40
+b(Input)150 3447 y Fu(Redirection)35 b(of)f(input)f(causes)i(the)f
+(\014le)g(whose)g(name)g(results)g(from)g(the)g(expansion)g(of)g
+Fr(w)m(ord)k Fu(to)d(b)s(e)150 3557 y(op)s(ened)d(for)g(reading)g(on)g
+(\014le)h(descriptor)f Ft(n)p Fu(,)h(or)f(the)g(standard)g(input)f
+(\(\014le)i(descriptor)f(0\))h(if)f Ft(n)g Fu(is)h(not)150
+3667 y(sp)s(eci\014ed.)275 3801 y(The)c(general)j(format)e(for)h
+(redirecting)g(input)e(is:)390 3935 y Ft([)p Fj(n)p Ft(]<)p
+Fj(word)150 4133 y Fk(3.6.2)63 b(Redirecting)40 b(Output)150
+4280 y Fu(Redirection)31 b(of)g(output)f(causes)h(the)f(\014le)h(whose)
+f(name)g(results)h(from)e(the)i(expansion)f(of)h Fr(w)m(ord)i
+Fu(to)f(b)s(e)150 4390 y(op)s(ened)d(for)g(writing)g(on)g(\014le)h
+(descriptor)f Fr(n)p Fu(,)g(or)g(the)h(standard)e(output)h(\(\014le)h
+(descriptor)f(1\))h(if)g Fr(n)e Fu(is)i(not)150 4499
+y(sp)s(eci\014ed.)40 b(If)30 b(the)g(\014le)h(do)s(es)f(not)h(exist)g
+(it)g(is)f(created;)i(if)e(it)h(do)s(es)f(exist)h(it)g(is)g(truncated)f
+(to)h(zero)g(size.)275 4633 y(The)e(general)j(format)e(for)h
+(redirecting)g(output)f(is:)390 4768 y Ft([)p Fj(n)p
+Ft(]>[|])p Fj(word)275 4902 y Fu(If)g(the)h(redirection)g(op)s(erator)g
+(is)g(`)p Ft(>)p Fu(',)g(and)f(the)h Ft(noclobber)d Fu(option)j(to)g
+(the)g Ft(set)f Fu(builtin)g(has)h(b)s(een)150 5011 y(enabled,)h(the)g
+(redirection)h(will)f(fail)h(if)e(the)i(\014le)e(whose)h(name)g
+(results)g(from)f(the)h(expansion)g(of)g Fr(w)m(ord)150
+5121 y Fu(exists)f(and)f(is)g(a)h(regular)g(\014le.)41
+b(If)30 b(the)h(redirection)g(op)s(erator)g(is)f(`)p
+Ft(>|)p Fu(',)h(or)f(the)h(redirection)g(op)s(erator)g(is)150
+5230 y(`)p Ft(>)p Fu(')36 b(and)f(the)g Ft(noclobber)e
+Fu(option)j(is)g(not)g(enabled,)h(the)e(redirection)h(is)g(attempted)g
+(ev)m(en)h(if)e(the)h(\014le)150 5340 y(named)30 b(b)m(y)g
+Fr(w)m(ord)k Fu(exists.)p eop end
+%%Page: 36 42
+TeXDict begin 36 41 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(36)150 299
+y Fk(3.6.3)63 b(App)s(ending)42 b(Redirected)e(Output)150
+446 y Fu(Redirection)23 b(of)e(output)h(in)f(this)h(fashion)f(causes)h
+(the)g(\014le)g(whose)f(name)h(results)f(from)g(the)h(expansion)g(of)
+150 555 y Fr(w)m(ord)28 b Fu(to)e(b)s(e)e(op)s(ened)g(for)h(app)s
+(ending)e(on)i(\014le)g(descriptor)g Fr(n)p Fu(,)g(or)g(the)g(standard)
+f(output)h(\(\014le)g(descriptor)150 665 y(1\))31 b(if)f
+Fr(n)g Fu(is)h(not)f(sp)s(eci\014ed.)40 b(If)30 b(the)h(\014le)f(do)s
+(es)g(not)h(exist)g(it)g(is)f(created.)275 796 y(The)f(general)j
+(format)e(for)h(app)s(ending)e(output)h(is:)390 928 y
+Ft([)p Fj(n)p Ft(]>>)p Fj(word)150 1120 y Fk(3.6.4)63
+b(Redirecting)40 b(Standard)h(Output)g(and)g(Standard)g(Error)150
+1267 y Fu(This)33 b(construct)i(allo)m(ws)g(b)s(oth)f(the)g(standard)g
+(output)f(\(\014le)i(descriptor)f(1\))h(and)f(the)g(standard)f(error)
+150 1377 y(output)d(\(\014le)h(descriptor)f(2\))h(to)g(b)s(e)f
+(redirected)h(to)g(the)f(\014le)h(whose)f(name)h(is)f(the)g(expansion)h
+(of)f Fr(w)m(ord)p Fu(.)275 1508 y(There)f(are)i(t)m(w)m(o)h(formats)e
+(for)h(redirecting)g(standard)e(output)h(and)g(standard)f(error:)390
+1639 y Ft(&>)p Fj(word)150 1771 y Fu(and)390 1902 y Ft(>&)p
+Fj(word)150 2033 y Fu(Of)h(the)g(t)m(w)m(o)i(forms,)e(the)h(\014rst)e
+(is)i(preferred.)39 b(This)30 b(is)g(seman)m(tically)j(equiv)-5
+b(alen)m(t)32 b(to)390 2164 y Ft(>)p Fj(word)46 b Ft(2>&1)275
+2296 y Fu(When)41 b(using)g(the)h(second)f(form,)k Fr(w)m(ord)f
+Fu(ma)m(y)e(not)g(expand)f(to)h(a)g(n)m(um)m(b)s(er)f(or)g(`)p
+Ft(-)p Fu('.)75 b(If)41 b(it)h(do)s(es,)150 2405 y(other)27
+b(redirection)g(op)s(erators)f(apply)h(\(see)g(Duplicating)h(File)f
+(Descriptors)h(b)s(elo)m(w\))f(for)f(compatibilit)m(y)150
+2515 y(reasons.)150 2707 y Fk(3.6.5)63 b(App)s(ending)42
+b(Standard)f(Output)g(and)g(Standard)g(Error)150 2854
+y Fu(This)33 b(construct)i(allo)m(ws)g(b)s(oth)f(the)g(standard)g
+(output)f(\(\014le)i(descriptor)f(1\))h(and)f(the)g(standard)f(error)
+150 2964 y(output)d(\(\014le)h(descriptor)f(2\))h(to)g(b)s(e)f(app)s
+(ended)f(to)i(the)f(\014le)h(whose)f(name)g(is)h(the)f(expansion)h(of)f
+Fr(w)m(ord)p Fu(.)275 3095 y(The)f(format)i(for)f(app)s(ending)f
+(standard)h(output)g(and)f(standard)h(error)g(is:)390
+3226 y Ft(&>>)p Fj(word)150 3358 y Fu(This)g(is)g(seman)m(tically)j
+(equiv)-5 b(alen)m(t)32 b(to)390 3489 y Ft(>>)p Fj(word)46
+b Ft(2>&1)275 3620 y Fu(\(see)31 b(Duplicating)h(File)f(Descriptors)g
+(b)s(elo)m(w\).)150 3813 y Fk(3.6.6)63 b(Here)41 b(Do)s(cumen)m(ts)150
+3960 y Fu(This)26 b(t)m(yp)s(e)g(of)h(redirection)g(instructs)f(the)g
+(shell)h(to)g(read)f(input)g(from)g(the)g(curren)m(t)h(source)f(un)m
+(til)h(a)g(line)150 4070 y(con)m(taining)h(only)e Fr(w)m(ord)k
+Fu(\(with)c(no)g(trailing)h(blanks\))f(is)g(seen.)40
+b(All)27 b(of)f(the)g(lines)h(read)f(up)f(to)i(that)g(p)s(oin)m(t)150
+4179 y(are)k(then)f(used)f(as)i(the)g(standard)e(input)h(\(or)g(\014le)
+h(descriptor)f Fr(n)g Fu(if)g Fr(n)g Fu(is)g(sp)s(eci\014ed\))g(for)h
+(a)f(command.)275 4310 y(The)f(format)i(of)g(here-do)s(cumen)m(ts)f
+(is:)390 4442 y Ft([)p Fj(n)p Ft(]<<[)p Fq(\000)p Ft(])p
+Fj(word)772 4551 y(here-document)390 4661 y(delimiter)275
+4792 y Fu(No)i(parameter)h(and)f(v)-5 b(ariable)32 b(expansion,)h
+(command)f(substitution,)h(arithmetic)g(expansion,)g(or)150
+4902 y(\014lename)26 b(expansion)g(is)g(p)s(erformed)e(on)i
+Fr(w)m(ord)p Fu(.)39 b(If)25 b(an)m(y)i(part)e(of)h Fr(w)m(ord)j
+Fu(is)d(quoted,)i(the)e Fr(delimiter)33 b Fu(is)26 b(the)150
+5011 y(result)33 b(of)g(quote)g(remo)m(v)-5 b(al)34 b(on)f
+Fr(w)m(ord)p Fu(,)g(and)f(the)h(lines)g(in)g(the)g(here-do)s(cumen)m(t)
+g(are)g(not)g(expanded.)47 b(If)150 5121 y Fr(w)m(ord)26
+b Fu(is)c(unquoted,)h(all)g(lines)g(of)g(the)f(here-do)s(cumen)m(t)g
+(are)h(sub)5 b(jected)22 b(to)h(parameter)g(expansion,)h(com-)150
+5230 y(mand)30 b(substitution,)g(and)g(arithmetic)h(expansion,)g(the)f
+(c)m(haracter)i(sequence)f Ft(\\newline)d Fu(is)j(ignored,)150
+5340 y(and)f(`)p Ft(\\)p Fu(')g(m)m(ust)h(b)s(e)e(used)h(to)h(quote)g
+(the)g(c)m(haracters)g(`)p Ft(\\)p Fu(',)g(`)p Ft($)p
+Fu(',)g(and)f(`)p Ft(`)p Fu('.)p eop end
+%%Page: 37 43
+TeXDict begin 37 42 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(37)275 299
+y(If)21 b(the)i(redirection)g(op)s(erator)g(is)f(`)p
+Ft(<<-)p Fu(',)i(then)e(all)h(leading)g(tab)g(c)m(haracters)h(are)e
+(stripp)s(ed)f(from)h(input)150 408 y(lines)33 b(and)f(the)h(line)h
+(con)m(taining)g Fr(delimiter)p Fu(.)49 b(This)32 b(allo)m(ws)i
+(here-do)s(cumen)m(ts)f(within)f(shell)i(scripts)e(to)150
+518 y(b)s(e)e(inden)m(ted)g(in)g(a)h(natural)f(fashion.)150
+709 y Fk(3.6.7)63 b(Here)41 b(Strings)150 856 y Fu(A)30
+b(v)-5 b(arian)m(t)32 b(of)e(here)h(do)s(cumen)m(ts,)f(the)g(format)h
+(is:)390 987 y Ft([)p Fj(n)p Ft(]<<<)46 b Fj(word)275
+1117 y Fu(The)29 b Fr(w)m(ord)k Fu(undergo)s(es)c(tilde)i(expansion,)f
+(parameter)h(and)e(v)-5 b(ariable)31 b(expansion,)f(command)g(sub-)150
+1227 y(stitution,)25 b(arithmetic)f(expansion,)h(and)d(quote)h(remo)m
+(v)-5 b(al.)40 b(P)m(athname)23 b(expansion)g(and)f(w)m(ord)g
+(splitting)150 1336 y(are)35 b(not)g(p)s(erformed.)51
+b(The)34 b(result)h(is)g(supplied)e(as)i(a)f(single)i(string,)f(with)g
+(a)g(newline)f(app)s(ended,)g(to)150 1446 y(the)d(command)f(on)g(its)h
+(standard)e(input)h(\(or)g(\014le)h(descriptor)f Fr(n)g
+Fu(if)g Fr(n)g Fu(is)h(sp)s(eci\014ed\).)150 1637 y Fk(3.6.8)63
+b(Duplicating)41 b(File)g(Descriptors)150 1784 y Fu(The)30
+b(redirection)h(op)s(erator)390 1914 y Ft([)p Fj(n)p
+Ft(]<&)p Fj(word)150 2045 y Fu(is)k(used)e(to)j(duplicate)f(input)f
+(\014le)g(descriptors.)53 b(If)34 b Fr(w)m(ord)k Fu(expands)c(to)h(one)
+g(or)g(more)g(digits,)h(the)f(\014le)150 2154 y(descriptor)e(denoted)h
+(b)m(y)f Fr(n)g Fu(is)g(made)h(to)g(b)s(e)f(a)g(cop)m(y)h(of)g(that)g
+(\014le)f(descriptor.)50 b(If)33 b(the)h(digits)g(in)f
+Fr(w)m(ord)150 2264 y Fu(do)c(not)h(sp)s(ecify)f(a)h(\014le)f
+(descriptor)g(op)s(en)g(for)g(input,)g(a)h(redirection)g(error)f(o)s
+(ccurs.)40 b(If)29 b Fr(w)m(ord)j Fu(ev)-5 b(aluates)150
+2373 y(to)31 b(`)p Ft(-)p Fu(',)g(\014le)g(descriptor)g
+Fr(n)f Fu(is)g(closed.)43 b(If)30 b Fr(n)g Fu(is)g(not)h(sp)s
+(eci\014ed,)f(the)h(standard)f(input)g(\(\014le)h(descriptor)f(0\))150
+2483 y(is)g(used.)275 2613 y(The)f(op)s(erator)390 2744
+y Ft([)p Fj(n)p Ft(]>&)p Fj(word)150 2874 y Fu(is)40
+b(used)g(similarly)h(to)g(duplicate)f(output)g(\014le)h(descriptors.)70
+b(If)40 b Fr(n)f Fu(is)i(not)f(sp)s(eci\014ed,)i(the)f(standard)150
+2984 y(output)30 b(\(\014le)g(descriptor)g(1\))h(is)f(used.)39
+b(If)30 b(the)g(digits)h(in)e Fr(w)m(ord)34 b Fu(do)29
+b(not)i(sp)s(ecify)e(a)i(\014le)f(descriptor)g(op)s(en)150
+3093 y(for)35 b(output,)h(a)g(redirection)g(error)e(o)s(ccurs.)55
+b(If)35 b Fr(w)m(ord)j Fu(ev)-5 b(aluates)37 b(to)f(`)p
+Ft(-)p Fu(',)h(\014le)e(descriptor)g Fr(n)g Fu(is)g(closed.)150
+3203 y(As)f(a)g(sp)s(ecial)h(case,)h(if)e Fr(n)f Fu(is)h(omitted,)i
+(and)e Fr(w)m(ord)j Fu(do)s(es)d(not)g(expand)f(to)i(one)f(or)g(more)g
+(digits)h(or)f(`)p Ft(-)p Fu(',)150 3313 y(the)d(standard)e(output)h
+(and)g(standard)f(error)h(are)h(redirected)g(as)g(describ)s(ed)e
+(previously)-8 b(.)150 3504 y Fk(3.6.9)63 b(Mo)m(ving)41
+b(File)h(Descriptors)150 3651 y Fu(The)30 b(redirection)h(op)s(erator)
+390 3781 y Ft([)p Fj(n)p Ft(]<&)p Fj(digit)p Ft(-)150
+3911 y Fu(mo)m(v)m(es)i(the)f(\014le)g(descriptor)f Fr(digit)k
+Fu(to)d(\014le)g(descriptor)g Fr(n)p Fu(,)f(or)h(the)g(standard)f
+(input)f(\(\014le)j(descriptor)e(0\))150 4021 y(if)f
+Fr(n)g Fu(is)h(not)f(sp)s(eci\014ed.)40 b Fr(digit)33
+b Fu(is)e(closed)g(after)g(b)s(eing)f(duplicated)g(to)h
+Fr(n)p Fu(.)275 4151 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s
+(erator)390 4282 y Ft([)p Fj(n)p Ft(]>&)p Fj(digit)p
+Ft(-)150 4412 y Fu(mo)m(v)m(es)e(the)g(\014le)f(descriptor)f
+Fr(digit)k Fu(to)e(\014le)f(descriptor)g Fr(n)p Fu(,)g(or)g(the)g
+(standard)f(output)h(\(\014le)g(descriptor)g(1\))150
+4522 y(if)i Fr(n)g Fu(is)h(not)f(sp)s(eci\014ed.)150
+4713 y Fk(3.6.10)63 b(Op)s(ening)42 b(File)g(Descriptors)g(for)g
+(Reading)e(and)h(W)-10 b(riting)150 4860 y Fu(The)30
+b(redirection)h(op)s(erator)390 4990 y Ft([)p Fj(n)p
+Ft(]<>)p Fj(word)150 5121 y Fu(causes)39 b(the)g(\014le)g(whose)g(name)
+g(is)g(the)g(expansion)g(of)g Fr(w)m(ord)j Fu(to)d(b)s(e)g(op)s(ened)f
+(for)g(b)s(oth)h(reading)g(and)150 5230 y(writing)33
+b(on)f(\014le)h(descriptor)f Fr(n)p Fu(,)h(or)g(on)f(\014le)h
+(descriptor)g(0)g(if)f Fr(n)g Fu(is)h(not)g(sp)s(eci\014ed.)47
+b(If)32 b(the)h(\014le)f(do)s(es)h(not)150 5340 y(exist,)e(it)g(is)g
+(created.)p eop end
+%%Page: 38 44
+TeXDict begin 38 43 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(38)150 299
+y Fs(3.7)68 b(Executing)46 b(Commands)150 523 y Fk(3.7.1)63
+b(Simple)41 b(Command)h(Expansion)150 670 y Fu(When)33
+b(a)g(simple)g(command)g(is)g(executed,)h(the)g(shell)f(p)s(erforms)e
+(the)i(follo)m(wing)i(expansions,)e(assign-)150 779 y(men)m(ts,)e(and)f
+(redirections,)h(from)f(left)h(to)g(righ)m(t.)199 913
+y(1.)61 b(The)38 b(w)m(ords)f(that)i(the)g(parser)e(has)h(mark)m(ed)g
+(as)h(v)-5 b(ariable)39 b(assignmen)m(ts)g(\(those)g(preceding)f(the)
+330 1023 y(command)30 b(name\))h(and)f(redirections)h(are)f(sa)m(v)m
+(ed)i(for)e(later)h(pro)s(cessing.)199 1157 y(2.)61 b(The)39
+b(w)m(ords)g(that)i(are)f(not)g(v)-5 b(ariable)40 b(assignmen)m(ts)h
+(or)e(redirections)i(are)f(expanded)f(\(see)h(Sec-)330
+1267 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g(22\).)61
+b(If)37 b(an)m(y)g(w)m(ords)f(remain)h(after)h(expansion,)h(the)e
+(\014rst)330 1376 y(w)m(ord)31 b(is)g(tak)m(en)h(to)g(b)s(e)f(the)g
+(name)h(of)f(the)h(command)f(and)f(the)i(remaining)f(w)m(ords)g(are)g
+(the)h(argu-)330 1486 y(men)m(ts.)199 1620 y(3.)61 b(Redirections)25
+b(are)f(p)s(erformed)f(as)h(describ)s(ed)f(ab)s(o)m(v)m(e)i(\(see)g
+(Section)g(3.6)g([Redirections],)i(page)d(34\).)199 1754
+y(4.)61 b(The)25 b(text)h(after)f(the)g(`)p Ft(=)p Fu(')h(in)e(eac)m(h)
+j(v)-5 b(ariable)25 b(assignmen)m(t)h(undergo)s(es)e(tilde)i
+(expansion,)g(parameter)330 1864 y(expansion,)49 b(command)d
+(substitution,)j(arithmetic)d(expansion,)k(and)45 b(quote)h(remo)m(v)-5
+b(al)46 b(b)s(efore)330 1973 y(b)s(eing)30 b(assigned)h(to)g(the)f(v)-5
+b(ariable.)275 2132 y(If)32 b(no)i(command)f(name)g(results,)h(the)g(v)
+-5 b(ariable)34 b(assignmen)m(ts)g(a\013ect)h(the)f(curren)m(t)f(shell)
+h(en)m(viron-)150 2242 y(men)m(t.)39 b(Otherwise,)27
+b(the)e(v)-5 b(ariables)26 b(are)g(added)f(to)h(the)f(en)m(vironmen)m
+(t)h(of)g(the)f(executed)h(command)g(and)150 2351 y(do)35
+b(not)f(a\013ect)j(the)d(curren)m(t)h(shell)g(en)m(vironmen)m(t.)54
+b(If)34 b(an)m(y)h(of)g(the)f(assignmen)m(ts)i(attempts)f(to)h(assign)
+150 2461 y(a)j(v)-5 b(alue)39 b(to)g(a)g(readonly)f(v)-5
+b(ariable,)42 b(an)c(error)g(o)s(ccurs,)j(and)c(the)i(command)f(exits)h
+(with)g(a)f(non-zero)150 2570 y(status.)275 2705 y(If)33
+b(no)g(command)g(name)h(results,)g(redirections)g(are)g(p)s(erformed,)f
+(but)g(do)h(not)f(a\013ect)i(the)f(curren)m(t)150 2814
+y(shell)d(en)m(vironmen)m(t.)41 b(A)30 b(redirection)h(error)f(causes)h
+(the)g(command)f(to)h(exit)g(with)f(a)h(non-zero)g(status.)275
+2948 y(If)26 b(there)i(is)f(a)h(command)f(name)h(left)g(after)g
+(expansion,)g(execution)h(pro)s(ceeds)e(as)g(describ)s(ed)f(b)s(elo)m
+(w.)150 3058 y(Otherwise,)39 b(the)e(command)g(exits.)62
+b(If)37 b(one)g(of)g(the)h(expansions)f(con)m(tained)h(a)g(command)f
+(substitu-)150 3167 y(tion,)i(the)d(exit)h(status)g(of)f(the)h(command)
+f(is)h(the)f(exit)h(status)g(of)f(the)h(last)g(command)f(substitution)
+150 3277 y(p)s(erformed.)55 b(If)35 b(there)g(w)m(ere)h(no)g(command)f
+(substitutions,)i(the)e(command)h(exits)g(with)f(a)h(status)g(of)150
+3387 y(zero.)150 3585 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h
+(Execution)150 3732 y Fu(After)i(a)h(command)f(has)g(b)s(een)f(split)h
+(in)m(to)h(w)m(ords,)j(if)c(it)g(results)g(in)g(a)h(simple)f(command)g
+(and)f(an)150 3842 y(optional)32 b(list)f(of)f(argumen)m(ts,)h(the)g
+(follo)m(wing)g(actions)h(are)f(tak)m(en.)199 3976 y(1.)61
+b(If)24 b(the)g(command)g(name)g(con)m(tains)i(no)e(slashes,)i(the)e
+(shell)h(attempts)g(to)g(lo)s(cate)h(it.)39 b(If)24 b(there)g(exists)
+330 4085 y(a)h(shell)g(function)f(b)m(y)g(that)h(name,)h(that)f
+(function)f(is)h(in)m(v)m(ok)m(ed)h(as)e(describ)s(ed)g(in)g(Section)h
+(3.3)h([Shell)330 4195 y(F)-8 b(unctions],)31 b(page)h(17.)199
+4329 y(2.)61 b(If)41 b(the)g(name)h(do)s(es)f(not)g(matc)m(h)i(a)e
+(function,)j(the)e(shell)f(searc)m(hes)i(for)e(it)h(in)f(the)g(list)h
+(of)g(shell)330 4439 y(builtins.)e(If)30 b(a)h(matc)m(h)g(is)f(found,)g
+(that)h(builtin)f(is)g(in)m(v)m(ok)m(ed.)199 4573 y(3.)61
+b(If)40 b(the)g(name)h(is)f(neither)h(a)f(shell)h(function)f(nor)g(a)g
+(builtin,)j(and)d(con)m(tains)h(no)g(slashes,)i(Bash)330
+4682 y(searc)m(hes)c(eac)m(h)g(elemen)m(t)g(of)g Ft($PATH)d
+Fu(for)i(a)g(directory)h(con)m(taining)g(an)f(executable)h(\014le)f(b)m
+(y)g(that)330 4792 y(name.)56 b(Bash)36 b(uses)f(a)h(hash)e(table)j(to)
+f(remem)m(b)s(er)f(the)h(full)f(pathnames)g(of)h(executable)h(\014les)e
+(to)330 4902 y(a)m(v)m(oid)e(m)m(ultiple)f Ft(PATH)f
+Fu(searc)m(hes)i(\(see)f(the)g(description)g(of)f Ft(hash)g
+Fu(in)g(Section)i(4.1)f([Bourne)g(Shell)330 5011 y(Builtins],)37
+b(page)f(43\).)55 b(A)35 b(full)g(searc)m(h)g(of)g(the)g(directories)h
+(in)f Ft($PATH)e Fu(is)i(p)s(erformed)f(only)h(if)g(the)330
+5121 y(command)24 b(is)h(not)g(found)e(in)i(the)g(hash)f(table.)39
+b(If)25 b(the)f(searc)m(h)i(is)e(unsuccessful,)h(the)g(shell)g(searc)m
+(hes)330 5230 y(for)e(a)h(de\014ned)e(shell)h(function)h(named)e
+Ft(command_not_found_handle)p Fu(.)32 b(If)23 b(that)h(function)f
+(exists,)330 5340 y(it)33 b(is)f(in)m(v)m(ok)m(ed)i(in)e(a)h(separate)h
+(execution)f(en)m(vironmen)m(t)g(with)f(the)h(original)h(command)e(and)
+g(the)p eop end
+%%Page: 39 45
+TeXDict begin 39 44 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(39)330 299
+y(original)26 b(command's)e(argumen)m(ts)h(as)g(its)g(argumen)m(ts,)h
+(and)e(the)h(function's)f(exit)i(status)f(b)s(ecomes)330
+408 y(the)j(exit)g(status)g(of)f(that)h(subshell.)39
+b(If)27 b(that)h(function)f(is)h(not)g(de\014ned,)f(the)g(shell)h(prin)
+m(ts)f(an)g(error)330 518 y(message)k(and)f(returns)f(an)i(exit)g
+(status)g(of)f(127.)199 654 y(4.)61 b(If)33 b(the)g(searc)m(h)h(is)g
+(successful,)g(or)f(if)g(the)h(command)f(name)g(con)m(tains)i(one)f(or)
+f(more)g(slashes,)i(the)330 763 y(shell)g(executes)h(the)f(named)f
+(program)g(in)h(a)g(separate)h(execution)f(en)m(vironmen)m(t.)55
+b(Argumen)m(t)35 b(0)330 873 y(is)30 b(set)h(to)h(the)e(name)h(giv)m
+(en,)g(and)f(the)h(remaining)f(argumen)m(ts)h(to)g(the)g(command)f(are)
+h(set)g(to)g(the)330 983 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8
+b(.)199 1118 y(5.)61 b(If)35 b(this)h(execution)h(fails)f(b)s(ecause)g
+(the)f(\014le)h(is)g(not)g(in)f(executable)j(format,)f(and)e(the)h
+(\014le)g(is)g(not)330 1228 y(a)d(directory)-8 b(,)34
+b(it)f(is)g(assumed)e(to)j(b)s(e)d(a)i Fr(shell)g(script)h
+Fu(and)e(the)h(shell)f(executes)i(it)f(as)g(describ)s(ed)e(in)330
+1338 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(41.)199
+1473 y(6.)61 b(If)38 b(the)h(command)f(w)m(as)h(not)g(b)s(egun)e(async)
+m(hronously)-8 b(,)42 b(the)c(shell)h(w)m(aits)h(for)e(the)h(command)f
+(to)330 1583 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150
+1785 y Fk(3.7.3)63 b(Command)41 b(Execution)f(En)m(vironmen)m(t)150
+1932 y Fu(The)30 b(shell)g(has)h(an)f Fr(execution)h(en)m(vironmen)m(t)
+p Fu(,)h(whic)m(h)e(consists)h(of)f(the)h(follo)m(wing:)225
+2069 y Fq(\017)60 b Fu(op)s(en)32 b(\014les)g(inherited)g(b)m(y)h(the)f
+(shell)h(at)g(in)m(v)m(o)s(cation,)j(as)c(mo)s(di\014ed)g(b)m(y)g
+(redirections)h(supplied)e(to)330 2178 y(the)g Ft(exec)e
+Fu(builtin)225 2314 y Fq(\017)60 b Fu(the)28 b(curren)m(t)g(w)m(orking)
+h(directory)g(as)f(set)h(b)m(y)f Ft(cd)p Fu(,)g Ft(pushd)p
+Fu(,)g(or)g Ft(popd)p Fu(,)g(or)g(inherited)g(b)m(y)g(the)h(shell)f(at)
+330 2424 y(in)m(v)m(o)s(cation)225 2560 y Fq(\017)60
+b Fu(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)g(as)h(set)g(b)m(y)f
+Ft(umask)f Fu(or)h(inherited)g(from)g(the)h(shell's)f(paren)m(t)225
+2695 y Fq(\017)60 b Fu(curren)m(t)30 b(traps)g(set)h(b)m(y)f
+Ft(trap)225 2831 y Fq(\017)60 b Fu(shell)30 b(parameters)f(that)h(are)g
+(set)g(b)m(y)g(v)-5 b(ariable)30 b(assignmen)m(t)g(or)g(with)f
+Ft(set)f Fu(or)i(inherited)f(from)g(the)330 2941 y(shell's)i(paren)m(t)
+f(in)g(the)h(en)m(vironmen)m(t)225 3077 y Fq(\017)60
+b Fu(shell)44 b(functions)f(de\014ned)f(during)h(execution)i(or)e
+(inherited)h(from)f(the)h(shell's)g(paren)m(t)f(in)h(the)330
+3186 y(en)m(vironmen)m(t)225 3322 y Fq(\017)60 b Fu(options)33
+b(enabled)g(at)h(in)m(v)m(o)s(cation)h(\(either)f(b)m(y)f(default)g(or)
+g(with)g(command-line)g(argumen)m(ts\))h(or)330 3432
+y(b)m(y)c Ft(set)225 3567 y Fq(\017)60 b Fu(options)31
+b(enabled)f(b)m(y)g Ft(shopt)f Fu(\(see)j(Section)f(4.3.2)h([The)e
+(Shopt)g(Builtin],)h(page)g(65\))225 3703 y Fq(\017)60
+b Fu(shell)31 b(aliases)g(de\014ned)f(with)g Ft(alias)f
+Fu(\(see)i(Section)g(6.6)h([Aliases],)g(page)f(93\))225
+3839 y Fq(\017)60 b Fu(v)-5 b(arious)50 b(pro)s(cess)f
+Fm(id)p Fu(s,)55 b(including)49 b(those)i(of)e(bac)m(kground)h(jobs)f
+(\(see)i(Section)g(3.2.3)g([Lists],)330 3948 y(page)31
+b(9\),)g(the)g(v)-5 b(alue)31 b(of)f Ft($$)p Fu(,)g(and)g(the)h(v)-5
+b(alue)31 b(of)f Ft($PPID)275 4112 y Fu(When)k(a)g(simple)h(command)f
+(other)g(than)g(a)h(builtin)f(or)g(shell)h(function)f(is)g(to)h(b)s(e)f
+(executed,)i(it)f(is)150 4221 y(in)m(v)m(ok)m(ed)25 b(in)f(a)g
+(separate)h(execution)g(en)m(vironmen)m(t)g(that)f(consists)g(of)h(the)
+f(follo)m(wing.)40 b(Unless)24 b(otherwise)150 4331 y(noted,)31
+b(the)f(v)-5 b(alues)31 b(are)g(inherited)f(from)g(the)g(shell.)225
+4468 y Fq(\017)60 b Fu(the)31 b(shell's)h(op)s(en)e(\014les,)i(plus)e
+(an)m(y)h(mo)s(di\014cations)h(and)e(additions)h(sp)s(eci\014ed)g(b)m
+(y)g(redirections)g(to)330 4578 y(the)g(command)225 4713
+y Fq(\017)60 b Fu(the)31 b(curren)m(t)f(w)m(orking)g(directory)225
+4849 y Fq(\017)60 b Fu(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225
+4985 y Fq(\017)60 b Fu(shell)32 b(v)-5 b(ariables)33
+b(and)e(functions)h(mark)m(ed)g(for)g(exp)s(ort,)g(along)h(with)f(v)-5
+b(ariables)32 b(exp)s(orted)g(for)g(the)330 5095 y(command,)e(passed)g
+(in)g(the)h(en)m(vironmen)m(t)g(\(see)g(Section)g(3.7.4)i([En)m
+(vironmen)m(t],)e(page)g(40\))225 5230 y Fq(\017)60 b
+Fu(traps)31 b(caugh)m(t)h(b)m(y)f(the)g(shell)h(are)f(reset)h(to)g(the)
+f(v)-5 b(alues)32 b(inherited)e(from)h(the)g(shell's)h(paren)m(t,)g
+(and)330 5340 y(traps)e(ignored)h(b)m(y)f(the)g(shell)h(are)g(ignored)p
+eop end
+%%Page: 40 46
+TeXDict begin 40 45 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(40)275 299
+y(A)41 b(command)g(in)m(v)m(ok)m(ed)i(in)e(this)h(separate)g(en)m
+(vironmen)m(t)g(cannot)g(a\013ect)h(the)f(shell's)g(execution)150
+408 y(en)m(vironmen)m(t.)275 552 y(Command)35 b(substitution,)j
+(commands)e(group)s(ed)f(with)i(paren)m(theses,)h(and)e(async)m
+(hronous)g(com-)150 662 y(mands)c(are)h(in)m(v)m(ok)m(ed)i(in)d(a)i
+(subshell)e(en)m(vironmen)m(t)h(that)h(is)f(a)g(duplicate)h(of)f(the)g
+(shell)g(en)m(vironmen)m(t,)150 772 y(except)i(that)g(traps)f(caugh)m
+(t)h(b)m(y)f(the)h(shell)f(are)g(reset)h(to)g(the)f(v)-5
+b(alues)35 b(that)g(the)f(shell)h(inherited)e(from)150
+881 y(its)g(paren)m(t)f(at)h(in)m(v)m(o)s(cation.)49
+b(Builtin)32 b(commands)g(that)h(are)g(in)m(v)m(ok)m(ed)h(as)e(part)g
+(of)h(a)f(pip)s(eline)g(are)h(also)150 991 y(executed)41
+b(in)f(a)h(subshell)e(en)m(vironmen)m(t.)72 b(Changes)40
+b(made)g(to)h(the)g(subshell)e(en)m(vironmen)m(t)i(cannot)150
+1100 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275
+1244 y(Subshells)c(spa)m(wned)i(to)h(execute)g(command)f(substitutions)
+g(inherit)g(the)g(v)-5 b(alue)31 b(of)f(the)h Ft(-e)e
+Fu(option)150 1354 y(from)23 b(the)i(paren)m(t)f(shell.)38
+b(When)24 b(not)g(in)g Fm(posix)f Fu(mo)s(de,)i(Bash)f(clears)h(the)f
+Ft(-e)f Fu(option)i(in)e(suc)m(h)h(subshells.)275 1498
+y(If)f(a)h(command)g(is)g(follo)m(w)m(ed)h(b)m(y)f(a)g(`)p
+Ft(&)p Fu(')g(and)f(job)h(con)m(trol)h(is)f(not)g(activ)m(e,)k(the)c
+(default)g(standard)f(input)150 1607 y(for)35 b(the)g(command)g(is)g
+(the)g(empt)m(y)h(\014le)f Ft(/dev/null)p Fu(.)52 b(Otherwise,)37
+b(the)e(in)m(v)m(ok)m(ed)h(command)f(inherits)150 1717
+y(the)c(\014le)f(descriptors)g(of)h(the)f(calling)i(shell)f(as)f(mo)s
+(di\014ed)g(b)m(y)g(redirections.)150 1926 y Fk(3.7.4)63
+b(En)m(vironmen)m(t)150 2073 y Fu(When)29 b(a)g(program)f(is)h(in)m(v)m
+(ok)m(ed)h(it)g(is)f(giv)m(en)g(an)g(arra)m(y)g(of)g(strings)g(called)h
+(the)f Fr(en)m(vironmen)m(t)p Fu(.)41 b(This)28 b(is)h(a)150
+2182 y(list)i(of)g(name-v)-5 b(alue)31 b(pairs,)f(of)h(the)f(form)g
+Ft(name=value)p Fu(.)275 2326 y(Bash)39 b(pro)m(vides)g(sev)m(eral)i(w)
+m(a)m(ys)g(to)f(manipulate)f(the)h(en)m(vironmen)m(t.)69
+b(On)38 b(in)m(v)m(o)s(cation,)44 b(the)c(shell)150 2436
+y(scans)g(its)h(o)m(wn)f(en)m(vironmen)m(t)h(and)f(creates)i(a)f
+(parameter)f(for)g(eac)m(h)i(name)e(found,)i(automatically)150
+2545 y(marking)26 b(it)g(for)g Fr(exp)s(ort)h Fu(to)g(c)m(hild)f(pro)s
+(cesses.)39 b(Executed)26 b(commands)g(inherit)g(the)g(en)m(vironmen)m
+(t.)39 b(The)150 2655 y Ft(export)c Fu(and)i(`)p Ft(declare)29
+b(-x)p Fu(')36 b(commands)h(allo)m(w)i(parameters)e(and)g(functions)g
+(to)h(b)s(e)e(added)h(to)h(and)150 2765 y(deleted)21
+b(from)f(the)h(en)m(vironmen)m(t.)38 b(If)20 b(the)h(v)-5
+b(alue)21 b(of)g(a)g(parameter)g(in)f(the)g(en)m(vironmen)m(t)i(is)e
+(mo)s(di\014ed,)i(the)150 2874 y(new)31 b(v)-5 b(alue)32
+b(b)s(ecomes)f(part)h(of)f(the)h(en)m(vironmen)m(t,)g(replacing)h(the)e
+(old.)44 b(The)31 b(en)m(vironmen)m(t)h(inherited)150
+2984 y(b)m(y)f(an)m(y)g(executed)h(command)f(consists)g(of)g(the)g
+(shell's)h(initial)g(en)m(vironmen)m(t,)g(whose)f(v)-5
+b(alues)31 b(ma)m(y)h(b)s(e)150 3093 y(mo)s(di\014ed)26
+b(in)g(the)h(shell,)h(less)f(an)m(y)g(pairs)f(remo)m(v)m(ed)i(b)m(y)f
+(the)g Ft(unset)e Fu(and)h(`)p Ft(export)j(-n)p Fu(')e(commands,)g
+(plus)150 3203 y(an)m(y)k(additions)f(via)h(the)g Ft(export)d
+Fu(and)i(`)p Ft(declare)f(-x)p Fu(')h(commands.)275 3347
+y(The)j(en)m(vironmen)m(t)i(for)f(an)m(y)g(simple)h(command)f(or)g
+(function)g(ma)m(y)g(b)s(e)g(augmen)m(ted)h(temp)s(orarily)150
+3457 y(b)m(y)c(pre\014xing)e(it)i(with)g(parameter)g(assignmen)m(ts,)h
+(as)e(describ)s(ed)g(in)g(Section)i(3.4)g([Shell)e(P)m(arameters],)150
+3566 y(page)g(19.)41 b(These)29 b(assignmen)m(t)i(statemen)m(ts)g
+(a\013ect)f(only)g(the)f(en)m(vironmen)m(t)h(seen)g(b)m(y)f(that)h
+(command.)275 3710 y(If)g(the)h Ft(-k)g Fu(option)g(is)g(set)h(\(see)g
+(Section)g(4.3.1)g([The)f(Set)g(Builtin],)h(page)g(61\),)h(then)e(all)g
+(parameter)150 3820 y(assignmen)m(ts)f(are)g(placed)h(in)e(the)h(en)m
+(vironmen)m(t)g(for)g(a)g(command,)f(not)h(just)f(those)i(that)f
+(precede)g(the)150 3929 y(command)g(name.)275 4073 y(When)h(Bash)h(in)m
+(v)m(ok)m(es)i(an)e(external)h(command,)f(the)g(v)-5
+b(ariable)33 b(`)p Ft($_)p Fu(')f(is)g(set)h(to)f(the)g(full)g
+(pathname)150 4183 y(of)f(the)f(command)g(and)g(passed)g(to)h(that)g
+(command)f(in)g(its)h(en)m(vironmen)m(t.)150 4392 y Fk(3.7.5)63
+b(Exit)40 b(Status)150 4538 y Fu(The)26 b(exit)h(status)f(of)g(an)g
+(executed)h(command)f(is)g(the)h(v)-5 b(alue)26 b(returned)f(b)m(y)h
+(the)g Fr(w)m(aitpid)k Fu(system)d(call)g(or)150 4648
+y(equiv)-5 b(alen)m(t)33 b(function.)45 b(Exit)32 b(statuses)g(fall)g
+(b)s(et)m(w)m(een)h(0)f(and)f(255,)i(though,)f(as)g(explained)g(b)s
+(elo)m(w,)h(the)150 4758 y(shell)i(ma)m(y)g(use)f(v)-5
+b(alues)35 b(ab)s(o)m(v)m(e)g(125)h(sp)s(ecially)-8 b(.)54
+b(Exit)35 b(statuses)g(from)f(shell)h(builtins)f(and)f(comp)s(ound)150
+4867 y(commands)j(are)g(also)h(limited)g(to)g(this)f(range.)58
+b(Under)36 b(certain)h(circumstances,)h(the)e(shell)h(will)f(use)150
+4977 y(sp)s(ecial)31 b(v)-5 b(alues)31 b(to)g(indicate)g(sp)s(eci\014c)
+f(failure)h(mo)s(des.)275 5121 y(F)-8 b(or)32 b(the)g(shell's)g(purp)s
+(oses,)e(a)j(command)e(whic)m(h)h(exits)g(with)g(a)g(zero)g(exit)h
+(status)f(has)f(succeeded.)150 5230 y(A)e(non-zero)h(exit)g(status)g
+(indicates)g(failure.)40 b(This)28 b(seemingly)i(coun)m(ter-in)m
+(tuitiv)m(e)i(sc)m(heme)e(is)f(used)g(so)150 5340 y(there)34
+b(is)g(one)g(w)m(ell-de\014ned)g(w)m(a)m(y)g(to)h(indicate)g(success)f
+(and)f(a)h(v)-5 b(ariet)m(y)35 b(of)f(w)m(a)m(ys)h(to)f(indicate)h(v)-5
+b(arious)p eop end
+%%Page: 41 47
+TeXDict begin 41 46 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(41)150 299
+y(failure)38 b(mo)s(des.)62 b(When)37 b(a)h(command)f(terminates)i(on)e
+(a)h(fatal)h(signal)g(whose)e(n)m(um)m(b)s(er)f(is)i
+Fr(N)p Fu(,)i(Bash)150 408 y(uses)30 b(the)g(v)-5 b(alue)31
+b(128)p Ft(+)p Fr(N)42 b Fu(as)30 b(the)h(exit)g(status.)275
+537 y(If)k(a)h(command)g(is)g(not)g(found,)g(the)g(c)m(hild)h(pro)s
+(cess)e(created)i(to)g(execute)g(it)g(returns)d(a)j(status)f(of)150
+647 y(127.)42 b(If)30 b(a)h(command)f(is)g(found)f(but)h(is)g(not)h
+(executable,)h(the)f(return)e(status)i(is)f(126.)275
+776 y(If)i(a)i(command)f(fails)g(b)s(ecause)g(of)h(an)f(error)f(during)
+g(expansion)h(or)g(redirection,)i(the)f(exit)g(status)150
+885 y(is)c(greater)i(than)e(zero.)275 1014 y(The)38 b(exit)h(status)g
+(is)g(used)f(b)m(y)g(the)h(Bash)g(conditional)h(commands)e(\(see)h
+(Section)h(3.2.4.2)h([Con-)150 1123 y(ditional)i(Constructs],)h(page)f
+(11\))g(and)e(some)i(of)f(the)g(list)g(constructs)g(\(see)h(Section)f
+(3.2.3)i([Lists],)150 1233 y(page)31 b(9\).)275 1362
+y(All)40 b(of)g(the)h(Bash)f(builtins)f(return)g(an)h(exit)h(status)g
+(of)f(zero)h(if)f(they)g(succeed)g(and)g(a)g(non-zero)150
+1471 y(status)34 b(on)f(failure,)i(so)f(they)g(ma)m(y)g(b)s(e)f(used)g
+(b)m(y)g(the)h(conditional)h(and)e(list)h(constructs.)50
+b(All)35 b(builtins)150 1581 y(return)e(an)i(exit)g(status)g(of)f(2)h
+(to)g(indicate)h(incorrect)f(usage,)h(generally)g(in)m(v)-5
+b(alid)35 b(options)g(or)f(missing)150 1691 y(argumen)m(ts.)150
+1878 y Fk(3.7.6)63 b(Signals)150 2025 y Fu(When)36 b(Bash)g(is)h(in)m
+(teractiv)m(e,)j(in)c(the)h(absence)f(of)h(an)m(y)f(traps,)i(it)e
+(ignores)h Ft(SIGTERM)d Fu(\(so)j(that)g(`)p Ft(kill)150
+2135 y(0)p Fu(')c(do)s(es)g(not)g(kill)g(an)g(in)m(teractiv)m(e)j
+(shell\),)f(and)d Ft(SIGINT)f Fu(is)i(caugh)m(t)h(and)f(handled)f(\(so)
+h(that)h(the)f Ft(wait)150 2244 y Fu(builtin)24 b(is)h(in)m
+(terruptible\).)39 b(When)24 b(Bash)g(receiv)m(es)j(a)d
+Ft(SIGINT)p Fu(,)h(it)g(breaks)f(out)h(of)f(an)m(y)h(executing)h(lo)s
+(ops.)150 2354 y(In)31 b(all)h(cases,)h(Bash)f(ignores)g
+Ft(SIGQUIT)p Fu(.)42 b(If)32 b(job)f(con)m(trol)i(is)e(in)h(e\013ect)h
+(\(see)f(Chapter)f(7)h([Job)g(Con)m(trol],)150 2464 y(page)f(103\),)h
+(Bash)f(ignores)g Ft(SIGTTIN)p Fu(,)d Ft(SIGTTOU)p Fu(,)h(and)h
+Ft(SIGTSTP)p Fu(.)275 2592 y(Non-builtin)h(commands)g(started)g(b)m(y)g
+(Bash)h(ha)m(v)m(e)g(signal)g(handlers)e(set)i(to)g(the)g(v)-5
+b(alues)31 b(inherited)150 2702 y(b)m(y)37 b(the)h(shell)g(from)f(its)h
+(paren)m(t.)62 b(When)38 b(job)f(con)m(trol)i(is)e(not)h(in)f
+(e\013ect,)k(async)m(hronous)c(commands)150 2812 y(ignore)f
+Ft(SIGINT)e Fu(and)h Ft(SIGQUIT)e Fu(in)j(addition)f(to)i(these)f
+(inherited)f(handlers.)55 b(Commands)35 b(run)f(as)i(a)150
+2921 y(result)27 b(of)h(command)f(substitution)h(ignore)g(the)g(k)m
+(eyb)s(oard-generated)g(job)g(con)m(trol)h(signals)f
+Ft(SIGTTIN)p Fu(,)150 3031 y Ft(SIGTTOU)p Fu(,)h(and)g
+Ft(SIGTSTP)p Fu(.)275 3160 y(The)h(shell)i(exits)g(b)m(y)f(default)g
+(up)s(on)f(receipt)i(of)f(a)h Ft(SIGHUP)p Fu(.)42 b(Before)32
+b(exiting,)h(an)e(in)m(teractiv)m(e)j(shell)150 3269
+y(resends)41 b(the)i Ft(SIGHUP)e Fu(to)i(all)g(jobs,)i(running)c(or)h
+(stopp)s(ed.)76 b(Stopp)s(ed)41 b(jobs)h(are)h(sen)m(t)g
+Ft(SIGCONT)d Fu(to)150 3379 y(ensure)32 b(that)h(they)g(receiv)m(e)i
+(the)e Ft(SIGHUP)p Fu(.)47 b(T)-8 b(o)33 b(prev)m(en)m(t)g(the)g(shell)
+g(from)g(sending)f(the)h Ft(SIGHUP)e Fu(signal)150 3488
+y(to)i(a)g(particular)g(job,)g(it)g(should)f(b)s(e)g(remo)m(v)m(ed)h
+(from)g(the)f(jobs)g(table)i(with)e(the)h Ft(disown)e
+Fu(builtin)h(\(see)150 3598 y(Section)c(7.2)g([Job)e(Con)m(trol)i
+(Builtins],)g(page)g(104\))h(or)e(mark)m(ed)g(to)g(not)g(receiv)m(e)i
+Ft(SIGHUP)c Fu(using)i Ft(disown)150 3707 y(-h)p Fu(.)275
+3836 y(If)38 b(the)h Ft(huponexit)e Fu(shell)i(option)g(has)g(b)s(een)f
+(set)i(with)f Ft(shopt)e Fu(\(see)j(Section)g(4.3.2)h([The)e(Shopt)150
+3946 y(Builtin],)31 b(page)g(65\),)h(Bash)f(sends)e(a)i
+Ft(SIGHUP)e Fu(to)i(all)g(jobs)f(when)f(an)i(in)m(teractiv)m(e)i(login)
+e(shell)g(exits.)275 4075 y(If)38 b(Bash)h(is)g(w)m(aiting)h(for)f(a)g
+(command)f(to)i(complete)g(and)e(receiv)m(es)j(a)e(signal)h(for)e(whic)
+m(h)h(a)g(trap)150 4184 y(has)c(b)s(een)f(set,)i(the)f(trap)g(will)g
+(not)g(b)s(e)f(executed)i(un)m(til)f(the)g(command)f(completes.)55
+b(When)35 b(Bash)g(is)150 4294 y(w)m(aiting)j(for)f(an)g(async)m
+(hronous)g(command)g(via)h(the)f Ft(wait)f Fu(builtin,)i(the)g
+(reception)g(of)f(a)g(signal)h(for)150 4403 y(whic)m(h)d(a)g(trap)g
+(has)g(b)s(een)f(set)h(will)h(cause)f(the)g Ft(wait)f
+Fu(builtin)h(to)g(return)f(immediately)i(with)f(an)g(exit)150
+4513 y(status)c(greater)g(than)f(128,)i(immediately)g(after)f(whic)m(h)
+f(the)h(trap)f(is)g(executed.)150 4742 y Fs(3.8)68 b(Shell)45
+b(Scripts)150 4902 y Fu(A)30 b(shell)f(script)h(is)f(a)h(text)h(\014le)
+f(con)m(taining)h(shell)f(commands.)40 b(When)29 b(suc)m(h)g(a)h
+(\014le)g(is)f(used)g(as)h(the)g(\014rst)150 5011 y(non-option)c
+(argumen)m(t)h(when)e(in)m(v)m(oking)i(Bash,)g(and)f(neither)g(the)g
+Ft(-c)g Fu(nor)f Ft(-s)h Fu(option)g(is)g(supplied)f(\(see)150
+5121 y(Section)39 b(6.1)g([In)m(v)m(oking)g(Bash],)h(page)f(85\),)i
+(Bash)d(reads)g(and)f(executes)i(commands)f(from)f(the)i(\014le,)150
+5230 y(then)32 b(exits.)46 b(This)32 b(mo)s(de)f(of)i(op)s(eration)f
+(creates)i(a)e(non-in)m(teractiv)m(e)j(shell.)46 b(The)31
+b(shell)i(\014rst)e(searc)m(hes)150 5340 y(for)d(the)g(\014le)g(in)g
+(the)g(curren)m(t)f(directory)-8 b(,)30 b(and)d(lo)s(oks)i(in)e(the)i
+(directories)g(in)e Ft($PATH)g Fu(if)h(not)g(found)e(there.)p
+eop end
+%%Page: 42 48
+TeXDict begin 42 47 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(42)275 299
+y(When)34 b(Bash)h(runs)e(a)i(shell)g(script,)g(it)h(sets)f(the)f(sp)s
+(ecial)i(parameter)f Ft(0)f Fu(to)h(the)g(name)g(of)g(the)g(\014le,)150
+408 y(rather)k(than)g(the)h(name)f(of)h(the)f(shell,)j(and)d(the)h(p)s
+(ositional)g(parameters)f(are)h(set)g(to)g(the)g(remain-)150
+518 y(ing)f(argumen)m(ts,)j(if)d(an)m(y)g(are)g(giv)m(en.)67
+b(If)39 b(no)g(additional)g(argumen)m(ts)h(are)f(supplied,)h(the)f(p)s
+(ositional)150 628 y(parameters)31 b(are)f(unset.)275
+762 y(A)39 b(shell)h(script)f(ma)m(y)h(b)s(e)f(made)h(executable)h(b)m
+(y)e(using)g(the)h Ft(chmod)e Fu(command)h(to)h(turn)e(on)i(the)150
+872 y(execute)j(bit.)73 b(When)41 b(Bash)g(\014nds)e(suc)m(h)i(a)h
+(\014le)f(while)g(searc)m(hing)h(the)f Ft($PATH)f Fu(for)h(a)h
+(command,)h(it)150 981 y(spa)m(wns)30 b(a)g(subshell)g(to)h(execute)h
+(it.)41 b(In)30 b(other)g(w)m(ords,)g(executing)390 1116
+y Ft(filename)46 b Fj(arguments)150 1250 y Fu(is)30 b(equiv)-5
+b(alen)m(t)32 b(to)f(executing)390 1385 y Ft(bash)47
+b(filename)e Fj(arguments)150 1519 y Fu(if)30 b Ft(filename)d
+Fu(is)j(an)f(executable)j(shell)e(script.)40 b(This)29
+b(subshell)g(reinitializes)i(itself,)g(so)f(that)h(the)e(e\013ect)150
+1629 y(is)36 b(as)h(if)g(a)f(new)g(shell)h(had)f(b)s(een)g(in)m(v)m(ok)
+m(ed)h(to)h(in)m(terpret)e(the)h(script,)h(with)e(the)h(exception)h
+(that)f(the)150 1738 y(lo)s(cations)25 b(of)g(commands)e(remem)m(b)s
+(ered)h(b)m(y)g(the)g(paren)m(t)g(\(see)h(the)f(description)g(of)g
+Ft(hash)f Fu(in)h(Section)h(4.1)150 1848 y([Bourne)30
+b(Shell)h(Builtins],)g(page)g(43\))h(are)e(retained)h(b)m(y)f(the)h(c)m
+(hild.)275 1983 y(Most)36 b(v)m(ersions)g(of)g(Unix)f(mak)m(e)h(this)g
+(a)g(part)f(of)h(the)g(op)s(erating)g(system's)f(command)h(execution)
+150 2092 y(mec)m(hanism.)50 b(If)33 b(the)g(\014rst)g(line)h(of)f(a)h
+(script)f(b)s(egins)g(with)g(the)g(t)m(w)m(o)i(c)m(haracters)g(`)p
+Ft(#!)p Fu(',)f(the)g(remainder)150 2202 y(of)d(the)g(line)h(sp)s
+(eci\014es)e(an)h(in)m(terpreter)g(for)g(the)g(program.)43
+b(Th)m(us,)30 b(y)m(ou)h(can)h(sp)s(ecify)e(Bash,)i Ft(awk)p
+Fu(,)e(P)m(erl,)150 2311 y(or)g(some)h(other)g(in)m(terpreter)g(and)e
+(write)i(the)f(rest)h(of)g(the)f(script)g(\014le)h(in)f(that)h
+(language.)275 2446 y(The)40 b(argumen)m(ts)h(to)g(the)g(in)m
+(terpreter)g(consist)g(of)g(a)g(single)h(optional)f(argumen)m(t)h
+(follo)m(wing)g(the)150 2555 y(in)m(terpreter)33 b(name)h(on)f(the)g
+(\014rst)f(line)i(of)f(the)g(script)g(\014le,)h(follo)m(w)m(ed)h(b)m(y)
+e(the)g(name)g(of)g(the)h(script)f(\014le,)150 2665 y(follo)m(w)m(ed)g
+(b)m(y)f(the)f(rest)h(of)g(the)f(argumen)m(ts.)45 b(Bash)31
+b(will)h(p)s(erform)e(this)i(action)h(on)e(op)s(erating)h(systems)150
+2775 y(that)24 b(do)g(not)f(handle)g(it)h(themselv)m(es.)40
+b(Note)25 b(that)f(some)g(older)g(v)m(ersions)f(of)h(Unix)f(limit)i
+(the)f(in)m(terpreter)150 2884 y(name)30 b(and)g(argumen)m(t)h(to)g(a)g
+(maxim)m(um)f(of)h(32)g(c)m(haracters.)275 3019 y(Bash)h(scripts)g
+(often)g(b)s(egin)g(with)g Ft(#!)e(/bin/bash)g Fu(\(assuming)i(that)h
+(Bash)f(has)g(b)s(een)f(installed)i(in)150 3128 y Ft(/bin)p
+Fu(\),)26 b(since)h(this)f(ensures)f(that)i(Bash)f(will)h(b)s(e)f(used)
+f(to)i(in)m(terpret)f(the)h(script,)g(ev)m(en)g(if)f(it)h(is)f
+(executed)150 3238 y(under)j(another)h(shell.)p eop end
+%%Page: 43 49
+TeXDict begin 43 48 bop 3659 -116 a Fu(43)150 299 y Fp(4)80
+b(Shell)53 b(Builtin)f(Commands)150 499 y Fu(Builtin)34
+b(commands)f(are)h(con)m(tained)g(within)f(the)h(shell)g(itself.)50
+b(When)34 b(the)f(name)h(of)f(a)h(builtin)f(com-)150
+608 y(mand)26 b(is)i(used)e(as)i(the)g(\014rst)e(w)m(ord)h(of)h(a)f
+(simple)h(command)f(\(see)h(Section)g(3.2.1)h([Simple)f(Commands],)150
+718 y(page)21 b(8\),)j(the)d(shell)g(executes)h(the)f(command)f
+(directly)-8 b(,)24 b(without)d(in)m(v)m(oking)h(another)f(program.)37
+b(Builtin)150 828 y(commands)f(are)h(necessary)g(to)g(implemen)m(t)g
+(functionalit)m(y)h(imp)s(ossible)e(or)h(incon)m(v)m(enien)m(t)h(to)f
+(obtain)150 937 y(with)30 b(separate)h(utilities.)275
+1065 y(This)c(section)j(brie\015y)e(describ)s(es)g(the)h(builtins)f
+(whic)m(h)g(Bash)h(inherits)f(from)g(the)h(Bourne)g(Shell,)g(as)150
+1174 y(w)m(ell)i(as)g(the)g(builtin)e(commands)h(whic)m(h)h(are)f
+(unique)g(to)h(or)f(ha)m(v)m(e)i(b)s(een)d(extended)i(in)f(Bash.)275
+1302 y(Sev)m(eral)45 b(builtin)e(commands)h(are)h(describ)s(ed)e(in)h
+(other)g(c)m(hapters:)69 b(builtin)43 b(commands)h(whic)m(h)150
+1412 y(pro)m(vide)23 b(the)h(Bash)f(in)m(terface)i(to)f(the)g(job)f
+(con)m(trol)i(facilities)g(\(see)f(Section)h(7.2)f([Job)f(Con)m(trol)h
+(Builtins],)150 1521 y(page)37 b(104\),)i(the)d(directory)g(stac)m(k)h
+(\(see)g(Section)g(6.8.1)g([Directory)h(Stac)m(k)f(Builtins],)h(page)e
+(96\),)j(the)150 1631 y(command)23 b(history)h(\(see)g(Section)g(9.2)h
+([Bash)f(History)g(Builtins],)h(page)g(141\),)h(and)d(the)h
+(programmable)150 1740 y(completion)32 b(facilities)g(\(see)g(Section)f
+(8.7)g([Programmable)g(Completion)g(Builtins],)g(page)h(134\).)275
+1868 y(Man)m(y)f(of)f(the)h(builtins)e(ha)m(v)m(e)j(b)s(een)e(extended)
+g(b)m(y)g Fm(posix)g Fu(or)g(Bash.)275 1996 y(Unless)20
+b(otherwise)h(noted,)h(eac)m(h)g(builtin)e(command)g(do)s(cumen)m(ted)g
+(as)h(accepting)h(options)e(preceded)150 2105 y(b)m(y)42
+b(`)p Ft(-)p Fu(')g(accepts)h(`)p Ft(--)p Fu(')f(to)h(signify)f(the)g
+(end)f(of)h(the)g(options.)76 b(The)41 b Ft(:)p Fu(,)k
+Ft(true)p Fu(,)f Ft(false)p Fu(,)g(and)d Ft(test)p Fu(/)p
+Ft([)150 2215 y Fu(builtins)32 b(do)g(not)h(accept)h(options)f(and)f
+(do)g(not)h(treat)g(`)p Ft(--)p Fu(')g(sp)s(ecially)-8
+b(.)48 b(The)32 b Ft(exit)p Fu(,)g Ft(logout)p Fu(,)f
+Ft(return)p Fu(,)150 2325 y Ft(break)p Fu(,)38 b Ft(continue)p
+Fu(,)f Ft(let)p Fu(,)i(and)d Ft(shift)g Fu(builtins)h(accept)i(and)e
+(pro)s(cess)g(argumen)m(ts)h(b)s(eginning)e(with)150
+2434 y(`)p Ft(-)p Fu(')h(without)f(requiring)g(`)p Ft(--)p
+Fu('.)59 b(Other)36 b(builtins)g(that)h(accept)h(argumen)m(ts)f(but)f
+(are)h(not)g(sp)s(eci\014ed)f(as)150 2544 y(accepting)28
+b(options)f(in)m(terpret)g(argumen)m(ts)g(b)s(eginning)e(with)i(`)p
+Ft(-)p Fu(')f(as)h(in)m(v)-5 b(alid)27 b(options)g(and)f(require)g(`)p
+Ft(--)p Fu(')150 2653 y(to)31 b(prev)m(en)m(t)g(this)f(in)m
+(terpretation.)150 2880 y Fs(4.1)68 b(Bourne)45 b(Shell)g(Builtins)150
+3040 y Fu(The)22 b(follo)m(wing)j(shell)d(builtin)h(commands)f(are)h
+(inherited)g(from)f(the)h(Bourne)g(Shell.)38 b(These)22
+b(commands)150 3149 y(are)31 b(implemen)m(ted)g(as)f(sp)s(eci\014ed)g
+(b)m(y)g(the)h Fm(posix)e Fu(standard.)150 3295 y Ft(:)h
+Fu(\(a)h(colon\))870 3405 y Ft(:)47 b([)p Fj(arguments)p
+Ft(])630 3532 y Fu(Do)c(nothing)f(b)s(ey)m(ond)g(expanding)f
+Fr(argumen)m(ts)46 b Fu(and)c(p)s(erforming)f(redirections.)76
+b(The)630 3642 y(return)29 b(status)i(is)f(zero.)150
+3788 y Ft(.)g Fu(\(a)h(p)s(erio)s(d\))870 3897 y Ft(.)47
+b Fj(filename)f Ft([)p Fj(arguments)p Ft(])630 4025 y
+Fu(Read)34 b(and)f(execute)i(commands)e(from)g(the)h
+Fr(\014lename)39 b Fu(argumen)m(t)34 b(in)f(the)h(curren)m(t)g(shell)
+630 4134 y(con)m(text.)45 b(If)31 b Fr(\014lename)37
+b Fu(do)s(es)31 b(not)g(con)m(tain)i(a)e(slash,)h(the)g
+Ft(PATH)e Fu(v)-5 b(ariable)32 b(is)f(used)f(to)i(\014nd)630
+4244 y Fr(\014lename)p Fu(.)52 b(When)34 b(Bash)g(is)h(not)f(in)g
+Fm(posix)f Fu(mo)s(de,)i(the)g(curren)m(t)f(directory)g(is)g(searc)m
+(hed)630 4354 y(if)d Fr(\014lename)36 b Fu(is)31 b(not)h(found)d(in)i
+Ft($PATH)p Fu(.)41 b(If)31 b(an)m(y)g Fr(argumen)m(ts)k
+Fu(are)c(supplied,)f(they)i(b)s(ecome)630 4463 y(the)e(p)s(ositional)h
+(parameters)g(when)e Fr(\014lename)35 b Fu(is)30 b(executed.)42
+b(Otherwise)30 b(the)g(p)s(ositional)630 4573 y(parameters)40
+b(are)f(unc)m(hanged.)67 b(If)39 b(the)g Ft(-T)g Fu(option)g(is)h
+(enabled,)h Ft(source)d Fu(inherits)h(an)m(y)630 4682
+y(trap)31 b(on)g Ft(DEBUG)p Fu(;)f(if)i(it)f(is)g(not,)h(an)m(y)g
+Ft(DEBUG)e Fu(trap)h(string)g(is)g(sa)m(v)m(ed)h(and)f(restored)g
+(around)630 4792 y(the)41 b(call)i(to)e Ft(source)p Fu(,)i(and)d
+Ft(source)f Fu(unsets)i(the)g Ft(DEBUG)f Fu(trap)h(while)g(it)g
+(executes.)74 b(If)630 4902 y Ft(-T)39 b Fu(is)g(not)h(set,)j(and)c
+(the)g(sourced)h(\014le)f(c)m(hanges)i(the)e Ft(DEBUG)f
+Fu(trap,)k(the)e(new)f(v)-5 b(alue)40 b(is)630 5011 y(retained)e(when)e
+Ft(source)g Fu(completes.)63 b(The)37 b(return)f(status)h(is)h(the)f
+(exit)i(status)e(of)h(the)630 5121 y(last)g(command)e(executed,)j(or)e
+(zero)h(if)e(no)h(commands)f(are)h(executed.)61 b(If)36
+b Fr(\014lename)42 b Fu(is)630 5230 y(not)f(found,)h(or)e(cannot)h(b)s
+(e)f(read,)j(the)e(return)e(status)i(is)g(non-zero.)71
+b(This)40 b(builtin)g(is)630 5340 y(equiv)-5 b(alen)m(t)32
+b(to)f Ft(source)p Fu(.)p eop end
+%%Page: 44 50
+TeXDict begin 44 49 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(44)150 299 y Ft(break)870
+428 y(break)46 b([)p Fj(n)p Ft(])630 558 y Fu(Exit)f(from)f(a)g
+Ft(for)p Fu(,)k Ft(while)p Fu(,)e Ft(until)p Fu(,)h(or)d
+Ft(select)f Fu(lo)s(op.)83 b(If)44 b Fr(n)g Fu(is)g(supplied,)j(the)e
+Fr(n)p Fu(th)630 667 y(enclosing)c(lo)s(op)f(is)h(exited.)70
+b Fr(n)40 b Fu(m)m(ust)g(b)s(e)f(greater)j(than)d(or)i(equal)f(to)h(1.)
+70 b(The)40 b(return)630 777 y(status)31 b(is)f(zero)h(unless)f
+Fr(n)g Fu(is)g(not)h(greater)g(than)g(or)f(equal)h(to)g(1.)150
+927 y Ft(cd)870 1056 y(cd)47 b([-L|[-P)f([-e]])g([-@])h([)p
+Fj(directory)p Ft(])630 1186 y Fu(Change)27 b(the)g(curren)m(t)f(w)m
+(orking)h(directory)g(to)h Fr(directory)p Fu(.)40 b(If)26
+b Fr(directory)35 b Fu(is)27 b(not)g(supplied,)630 1295
+y(the)f(v)-5 b(alue)26 b(of)f(the)h Ft(HOME)e Fu(shell)i(v)-5
+b(ariable)26 b(is)g(used.)38 b(An)m(y)25 b(additional)i(argumen)m(ts)e
+(follo)m(wing)630 1405 y Fr(directory)39 b Fu(are)31
+b(ignored.)41 b(If)30 b(the)h(shell)g(v)-5 b(ariable)31
+b Ft(CDPATH)e Fu(exists,)i(it)g(is)g(used)f(as)g(a)h(searc)m(h)630
+1514 y(path:)39 b(eac)m(h)29 b(directory)g(name)f(in)f
+Ft(CDPATH)g Fu(is)h(searc)m(hed)g(for)g Fr(directory)p
+Fu(,)h(with)f(alternativ)m(e)630 1624 y(directory)j(names)g(in)f
+Ft(CDPATH)f Fu(separated)j(b)m(y)e(a)h(colon)h(\(`)p
+Ft(:)p Fu('\).)43 b(If)30 b Fr(directory)39 b Fu(b)s(egins)30
+b(with)630 1733 y(a)h(slash,)f Ft(CDPATH)f Fu(is)h(not)h(used.)630
+1863 y(The)g Ft(-P)h Fu(option)g(means)g(to)h(not)f(follo)m(w)h(sym)m
+(b)s(olic)g(links:)44 b(sym)m(b)s(olic)32 b(links)g(are)g(resolv)m(ed)
+630 1973 y(while)41 b Ft(cd)f Fu(is)h(tra)m(v)m(ersing)h
+Fr(directory)49 b Fu(and)40 b(b)s(efore)g(pro)s(cessing)h(an)f
+(instance)i(of)f(`)p Ft(..)p Fu(')f(in)630 2082 y Fr(directory)p
+Fu(.)630 2212 y(By)34 b(default,)h(or)e(when)g(the)g
+Ft(-L)g Fu(option)h(is)g(supplied,)f(sym)m(b)s(olic)h(links)f(in)h
+Fr(directory)42 b Fu(are)630 2321 y(resolv)m(ed)31 b(after)g
+Ft(cd)f Fu(pro)s(cesses)g(an)g(instance)h(of)g(`)p Ft(..)p
+Fu(')f(in)g Fr(directory)p Fu(.)630 2451 y(If)35 b(`)p
+Ft(..)p Fu(')f(app)s(ears)h(in)f Fr(directory)p Fu(,)j(it)f(is)f(pro)s
+(cessed)f(b)m(y)h(remo)m(ving)h(the)f(immediately)h(pre-)630
+2560 y(ceding)31 b(pathname)f(comp)s(onen)m(t,)h(bac)m(k)g(to)g(a)g
+(slash)f(or)h(the)f(b)s(eginning)g(of)g Fr(directory)p
+Fu(.)630 2690 y(If)i(the)i Ft(-e)e Fu(option)h(is)g(supplied)f(with)g
+Ft(-P)h Fu(and)f(the)h(curren)m(t)g(w)m(orking)g(directory)g(cannot)630
+2800 y(b)s(e)k(successfully)g(determined)g(after)i(a)e(successful)h
+(directory)g(c)m(hange,)i Ft(cd)d Fu(will)h(return)630
+2909 y(an)30 b(unsuccessful)f(status.)630 3039 y(On)41
+b(systems)h(that)h(supp)s(ort)d(it,)46 b(the)c Ft(-@)g
+Fu(option)g(presen)m(ts)g(the)g(extended)g(attributes)630
+3148 y(asso)s(ciated)32 b(with)e(a)h(\014le)f(as)h(a)f(directory)-8
+b(.)630 3278 y(If)41 b Fr(directory)49 b Fu(is)41 b(`)p
+Ft(-)p Fu(',)j(it)e(is)f(con)m(v)m(erted)h(to)g Ft($OLDPWD)d
+Fu(b)s(efore)i(the)g(directory)h(c)m(hange)g(is)630 3387
+y(attempted.)630 3517 y(If)33 b(a)h(non-empt)m(y)g(directory)g(name)f
+(from)g Ft(CDPATH)f Fu(is)h(used,)h(or)g(if)f(`)p Ft(-)p
+Fu(')h(is)f(the)h(\014rst)f(argu-)630 3626 y(men)m(t,)28
+b(and)e(the)h(directory)g(c)m(hange)h(is)f(successful,)h(the)f
+(absolute)g(pathname)g(of)f(the)h(new)630 3736 y(w)m(orking)k
+(directory)g(is)f(written)g(to)i(the)e(standard)g(output.)630
+3866 y(The)f(return)g(status)h(is)f(zero)i(if)e(the)h(directory)g(is)g
+(successfully)g(c)m(hanged,)g(non-zero)g(oth-)630 3975
+y(erwise.)150 4125 y Ft(continue)870 4254 y(continue)46
+b([)p Fj(n)p Ft(])630 4384 y Fu(Resume)32 b(the)g(next)g(iteration)i
+(of)e(an)g(enclosing)h Ft(for)p Fu(,)f Ft(while)p Fu(,)f
+Ft(until)p Fu(,)g(or)h Ft(select)f Fu(lo)s(op.)630 4493
+y(If)f Fr(n)h Fu(is)g(supplied,)e(the)j(execution)g(of)f(the)g
+Fr(n)p Fu(th)f(enclosing)i(lo)s(op)f(is)f(resumed.)42
+b Fr(n)30 b Fu(m)m(ust)h(b)s(e)630 4603 y(greater)39
+b(than)f(or)g(equal)g(to)h(1.)63 b(The)38 b(return)e(status)j(is)e
+(zero)i(unless)e Fr(n)h Fu(is)g(not)g(greater)630 4712
+y(than)30 b(or)g(equal)h(to)g(1.)150 4862 y Ft(eval)870
+4991 y(eval)47 b([)p Fj(arguments)p Ft(])630 5121 y Fu(The)25
+b(argumen)m(ts)h(are)g(concatenated)i(together)f(in)m(to)f(a)g(single)h
+(command,)f(whic)m(h)g(is)f(then)630 5230 y(read)35 b(and)g(executed,)j
+(and)d(its)h(exit)g(status)g(returned)e(as)h(the)h(exit)g(status)g(of)g
+Ft(eval)p Fu(.)54 b(If)630 5340 y(there)31 b(are)f(no)h(argumen)m(ts)f
+(or)h(only)f(empt)m(y)h(argumen)m(ts,)g(the)f(return)g(status)g(is)h
+(zero.)p eop end
+%%Page: 45 51
+TeXDict begin 45 50 bop 150 -116 a Fu(Chapter)30 b(4:)h(Shell)f
+(Builtin)h(Commands)2079 b(45)150 299 y Ft(exec)870 430
+y(exec)47 b([-cl])f([-a)h Fj(name)p Ft(])f([)p Fj(command)g
+Ft([)p Fj(arguments)p Ft(]])630 562 y Fu(If)36 b Fr(command)k
+Fu(is)c(supplied,)h(it)g(replaces)h(the)e(shell)h(without)f(creating)i
+(a)f(new)f(pro)s(cess.)630 671 y(If)k(the)h Ft(-l)e Fu(option)i(is)g
+(supplied,)h(the)e(shell)h(places)g(a)g(dash)f(at)h(the)f(b)s(eginning)
+g(of)h(the)630 781 y(zeroth)36 b(argumen)m(t)h(passed)e(to)h
+Fr(command)p Fu(.)57 b(This)35 b(is)h(what)f(the)h Ft(login)e
+Fu(program)i(do)s(es.)630 891 y(The)i Ft(-c)g Fu(option)g(causes)h
+Fr(command)j Fu(to)d(b)s(e)f(executed)h(with)f(an)g(empt)m(y)h(en)m
+(vironmen)m(t.)630 1000 y(If)c Ft(-a)g Fu(is)h(supplied,)f(the)h(shell)
+g(passes)f Fr(name)41 b Fu(as)36 b(the)f(zeroth)i(argumen)m(t)f(to)g
+Fr(command)p Fu(.)630 1110 y(If)c Fr(command)j Fu(cannot)e(b)s(e)f
+(executed)h(for)f(some)g(reason,)h(a)g(non-in)m(teractiv)m(e)i(shell)d
+(exits,)630 1219 y(unless)27 b(the)g Ft(execfail)e Fu(shell)i(option)h
+(is)f(enabled.)40 b(In)27 b(that)g(case,)j(it)d(returns)f(failure.)40
+b(An)630 1329 y(in)m(teractiv)m(e)35 b(shell)d(returns)f(failure)h(if)g
+(the)g(\014le)g(cannot)h(b)s(e)e(executed.)47 b(A)32
+b(subshell)f(exits)630 1439 y(unconditionally)j(if)g
+Ft(exec)f Fu(fails.)52 b(If)33 b(no)h Fr(command)j Fu(is)d(sp)s
+(eci\014ed,)h(redirections)f(ma)m(y)h(b)s(e)630 1548
+y(used)30 b(to)i(a\013ect)g(the)f(curren)m(t)g(shell)g(en)m(vironmen)m
+(t.)43 b(If)30 b(there)i(are)f(no)g(redirection)g(errors,)630
+1658 y(the)g(return)e(status)i(is)f(zero;)h(otherwise)g(the)g(return)e
+(status)i(is)f(non-zero.)150 1811 y Ft(exit)870 1943
+y(exit)47 b([)p Fj(n)p Ft(])630 2074 y Fu(Exit)30 b(the)g(shell,)h
+(returning)d(a)j(status)f(of)g Fr(n)f Fu(to)h(the)g(shell's)g(paren)m
+(t.)41 b(If)30 b Fr(n)f Fu(is)h(omitted,)h(the)630 2184
+y(exit)c(status)g(is)g(that)g(of)g(the)g(last)g(command)f(executed.)41
+b(An)m(y)26 b(trap)h(on)f Ft(EXIT)f Fu(is)i(executed)630
+2293 y(b)s(efore)j(the)h(shell)f(terminates.)150 2447
+y Ft(export)870 2578 y(export)46 b([-fn])g([-p])h([)p
+Fj(name)p Ft([=)p Fj(value)p Ft(]])630 2710 y Fu(Mark)40
+b(eac)m(h)h Fr(name)k Fu(to)40 b(b)s(e)f(passed)g(to)i(c)m(hild)f(pro)s
+(cesses)f(in)g(the)h(en)m(vironmen)m(t.)70 b(If)39 b(the)630
+2819 y Ft(-f)33 b Fu(option)h(is)g(supplied,)f(the)h
+Fr(name)5 b Fu(s)33 b(refer)g(to)i(shell)e(functions;)i(otherwise)f
+(the)g(names)630 2929 y(refer)c(to)h(shell)g(v)-5 b(ariables.)41
+b(The)30 b Ft(-n)f Fu(option)i(means)f(to)h(no)f(longer)h(mark)f(eac)m
+(h)i Fr(name)j Fu(for)630 3039 y(exp)s(ort.)52 b(If)33
+b(no)h Fr(names)k Fu(are)c(supplied,)g(or)g(if)g(the)g
+Ft(-p)g Fu(option)g(is)g(giv)m(en,)j(a)d(list)h(of)f(names)630
+3148 y(of)d(all)h(exp)s(orted)e(v)-5 b(ariables)31 b(is)g(displa)m(y)m
+(ed.)43 b(The)30 b Ft(-p)g Fu(option)i(displa)m(ys)e(output)h(in)f(a)h
+(form)630 3258 y(that)25 b(ma)m(y)g(b)s(e)f(reused)g(as)h(input.)38
+b(If)24 b(a)h(v)-5 b(ariable)25 b(name)g(is)g(follo)m(w)m(ed)h(b)m(y)e
+(=)p Fr(v)-5 b(alue)p Fu(,)27 b(the)d(v)-5 b(alue)630
+3367 y(of)31 b(the)f(v)-5 b(ariable)31 b(is)g(set)g(to)g
+Fr(v)-5 b(alue)p Fu(.)630 3499 y(The)29 b(return)e(status)j(is)f(zero)h
+(unless)e(an)h(in)m(v)-5 b(alid)29 b(option)h(is)f(supplied,)f(one)i
+(of)f(the)g(names)630 3608 y(is)k(not)g(a)h(v)-5 b(alid)33
+b(shell)h(v)-5 b(ariable)33 b(name,)i(or)e Ft(-f)f Fu(is)h(supplied)f
+(with)h(a)g(name)g(that)h(is)f(not)h(a)630 3718 y(shell)d(function.)150
+3871 y Ft(getopts)870 4003 y(getopts)46 b Fj(optstring)f(name)i
+Ft([)p Fj(args)p Ft(])630 4134 y(getopts)28 b Fu(is)i(used)g(b)m(y)g
+(shell)g(scripts)g(to)g(parse)g(p)s(ositional)h(parameters.)41
+b Fr(optstring)d Fu(con-)630 4244 y(tains)k(the)g(option)f(c)m
+(haracters)i(to)g(b)s(e)d(recognized;)49 b(if)42 b(a)f(c)m(haracter)j
+(is)d(follo)m(w)m(ed)i(b)m(y)f(a)630 4354 y(colon,)33
+b(the)f(option)g(is)g(exp)s(ected)g(to)h(ha)m(v)m(e)g(an)e(argumen)m
+(t,)i(whic)m(h)f(should)e(b)s(e)h(separated)630 4463
+y(from)40 b(it)g(b)m(y)g(whitespace.)70 b(The)40 b(colon)h(\(`)p
+Ft(:)p Fu('\))g(and)e(question)h(mark)g(\(`)p Ft(?)p
+Fu('\))h(ma)m(y)f(not)h(b)s(e)630 4573 y(used)d(as)g(option)h(c)m
+(haracters.)67 b(Eac)m(h)39 b(time)g(it)g(is)f(in)m(v)m(ok)m(ed,)k
+Ft(getopts)37 b Fu(places)i(the)g(next)630 4682 y(option)29
+b(in)f(the)h(shell)g(v)-5 b(ariable)30 b Fr(name)p Fu(,)f(initializing)
+i Fr(name)j Fu(if)28 b(it)h(do)s(es)g(not)g(exist,)h(and)e(the)630
+4792 y(index)33 b(of)g(the)h(next)f(argumen)m(t)h(to)g(b)s(e)e(pro)s
+(cessed)h(in)m(to)h(the)g(v)-5 b(ariable)34 b Ft(OPTIND)p
+Fu(.)48 b Ft(OPTIND)630 4902 y Fu(is)41 b(initialized)i(to)f(1)f(eac)m
+(h)h(time)g(the)f(shell)g(or)g(a)g(shell)g(script)g(is)g(in)m(v)m(ok)m
+(ed.)74 b(When)41 b(an)630 5011 y(option)36 b(requires)e(an)h(argumen)m
+(t,)i Ft(getopts)c Fu(places)j(that)g(argumen)m(t)g(in)m(to)g(the)f(v)
+-5 b(ariable)630 5121 y Ft(OPTARG)p Fu(.)55 b(The)35
+b(shell)g(do)s(es)h(not)g(reset)g Ft(OPTIND)e Fu(automatically;)41
+b(it)36 b(m)m(ust)f(b)s(e)g(man)m(ually)630 5230 y(reset)i(b)s(et)m(w)m
+(een)g(m)m(ultiple)h(calls)f(to)g Ft(getopts)e Fu(within)h(the)h(same)g
+(shell)f(in)m(v)m(o)s(cation)j(if)e(a)630 5340 y(new)30
+b(set)h(of)f(parameters)h(is)f(to)i(b)s(e)d(used.)p eop
+end
+%%Page: 46 52
+TeXDict begin 46 51 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(46)630 299 y(When)41
+b(the)h(end)e(of)i(options)g(is)f(encoun)m(tered,)k Ft(getopts)39
+b Fu(exits)j(with)f(a)h(return)e(v)-5 b(alue)630 408
+y(greater)32 b(than)e(zero.)41 b Ft(OPTIND)29 b Fu(is)h(set)h(to)g(the)
+g(index)f(of)g(the)h(\014rst)f(non-option)g(argumen)m(t,)630
+518 y(and)g Fr(name)35 b Fu(is)c(set)g(to)g(`)p Ft(?)p
+Fu('.)630 655 y Ft(getopts)c Fu(normally)j(parses)e(the)i(p)s
+(ositional)g(parameters,)g(but)e(if)i(more)f(argumen)m(ts)h(are)630
+765 y(giv)m(en)h(in)f Fr(args)p Fu(,)h Ft(getopts)e Fu(parses)h(those)h
+(instead.)630 902 y Ft(getopts)h Fu(can)h(rep)s(ort)g(errors)g(in)h(t)m
+(w)m(o)h(w)m(a)m(ys.)51 b(If)33 b(the)h(\014rst)e(c)m(haracter)k(of)d
+Fr(optstring)42 b Fu(is)34 b(a)630 1011 y(colon,)g Fr(silen)m(t)h
+Fu(error)d(rep)s(orting)f(is)i(used.)45 b(In)31 b(normal)h(op)s
+(eration,)h(diagnostic)h(messages)630 1121 y(are)c(prin)m(ted)e(when)g
+(in)m(v)-5 b(alid)30 b(options)g(or)f(missing)g(option)g(argumen)m(ts)h
+(are)f(encoun)m(tered.)630 1230 y(If)34 b(the)g(v)-5
+b(ariable)35 b Ft(OPTERR)d Fu(is)i(set)h(to)f(0,)i(no)e(error)g
+(messages)h(will)f(b)s(e)f(displa)m(y)m(ed,)j(ev)m(en)f(if)630
+1340 y(the)c(\014rst)e(c)m(haracter)j(of)f Ft(optstring)d
+Fu(is)i(not)h(a)f(colon.)630 1477 y(If)39 b(an)h(in)m(v)-5
+b(alid)41 b(option)f(is)g(seen,)i Ft(getopts)c Fu(places)j(`)p
+Ft(?)p Fu(')f(in)m(to)h Fr(name)k Fu(and,)d(if)e(not)g(silen)m(t,)630
+1587 y(prin)m(ts)f(an)h(error)f(message)h(and)f(unsets)g
+Ft(OPTARG)p Fu(.)67 b(If)39 b Ft(getopts)f Fu(is)i(silen)m(t,)j(the)c
+(option)630 1696 y(c)m(haracter)32 b(found)d(is)h(placed)h(in)f
+Ft(OPTARG)f Fu(and)h(no)g(diagnostic)i(message)f(is)g(prin)m(ted.)630
+1833 y(If)c(a)g(required)f(argumen)m(t)i(is)f(not)g(found,)g(and)f
+Ft(getopts)f Fu(is)i(not)h(silen)m(t,)h(a)e(question)g(mark)630
+1943 y(\(`)p Ft(?)p Fu('\))h(is)g(placed)g(in)f Fr(name)p
+Fu(,)h Ft(OPTARG)e Fu(is)h(unset,)h(and)f(a)g(diagnostic)i(message)g
+(is)e(prin)m(ted.)39 b(If)630 2052 y Ft(getopts)28 b
+Fu(is)h(silen)m(t,)i(then)e(a)h(colon)h(\(`)p Ft(:)p
+Fu('\))f(is)g(placed)g(in)f Fr(name)35 b Fu(and)29 b
+Ft(OPTARG)f Fu(is)h(set)h(to)h(the)630 2162 y(option)g(c)m(haracter)h
+(found.)150 2326 y Ft(hash)870 2463 y(hash)47 b([-r])f([-p)h
+Fj(filename)p Ft(])e([-dt])i([)p Fj(name)p Ft(])630 2600
+y Fu(Eac)m(h)32 b(time)g Ft(hash)e Fu(is)h(in)m(v)m(ok)m(ed,)j(it)d
+(remem)m(b)s(ers)g(the)g(full)g(pathnames)g(of)h(the)f(commands)630
+2710 y(sp)s(eci\014ed)i(as)i Fr(name)k Fu(argumen)m(ts,)c(so)g(they)f
+(need)g(not)g(b)s(e)f(searc)m(hed)i(for)f(on)g(subsequen)m(t)630
+2819 y(in)m(v)m(o)s(cations.)79 b(The)41 b(commands)h(are)h(found)e(b)m
+(y)h(searc)m(hing)i(through)d(the)i(directories)630 2929
+y(listed)37 b(in)g Ft($PATH)p Fu(.)58 b(An)m(y)37 b(previously-remem)m
+(b)s(ered)f(pathname)h(is)g(discarded.)59 b(The)37 b
+Ft(-p)630 3039 y Fu(option)d(inhibits)f(the)h(path)g(searc)m(h,)h(and)e
+Fr(\014lename)39 b Fu(is)34 b(used)f(as)h(the)f(lo)s(cation)j(of)e
+Fr(name)p Fu(.)630 3148 y(The)42 b Ft(-r)g Fu(option)h(causes)f(the)h
+(shell)g(to)g(forget)g(all)h(remem)m(b)s(ered)d(lo)s(cations.)79
+b(The)42 b Ft(-d)630 3258 y Fu(option)31 b(causes)g(the)f(shell)h(to)g
+(forget)h(the)f(remem)m(b)s(ered)e(lo)s(cation)j(of)f(eac)m(h)h
+Fr(name)p Fu(.)41 b(If)30 b(the)630 3367 y Ft(-t)39 b
+Fu(option)h(is)g(supplied,)g(the)g(full)f(pathname)h(to)g(whic)m(h)f
+(eac)m(h)i Fr(name)k Fu(corresp)s(onds)38 b(is)630 3477
+y(prin)m(ted.)i(If)28 b(m)m(ultiple)h Fr(name)34 b Fu(argumen)m(ts)29
+b(are)g(supplied)f(with)g Ft(-t)p Fu(,)h(the)g Fr(name)34
+b Fu(is)28 b(prin)m(ted)630 3587 y(b)s(efore)h(the)i(hashed)e(full)g
+(pathname.)41 b(The)29 b Ft(-l)g Fu(option)i(causes)f(output)f(to)i(b)s
+(e)e(displa)m(y)m(ed)630 3696 y(in)23 b(a)h(format)g(that)g(ma)m(y)g(b)
+s(e)f(reused)f(as)i(input.)37 b(If)23 b(no)h(argumen)m(ts)f(are)h(giv)m
+(en,)i(or)e(if)f(only)h Ft(-l)630 3806 y Fu(is)35 b(supplied,)f
+(information)h(ab)s(out)g(remem)m(b)s(ered)f(commands)g(is)h(prin)m
+(ted.)53 b(The)34 b(return)630 3915 y(status)d(is)f(zero)h(unless)f(a)h
+Fr(name)k Fu(is)c(not)f(found)f(or)i(an)f(in)m(v)-5 b(alid)31
+b(option)g(is)f(supplied.)150 4080 y Ft(pwd)870 4217
+y(pwd)47 b([-LP])630 4354 y Fu(Prin)m(t)29 b(the)g(absolute)h(pathname)
+e(of)h(the)h(curren)m(t)e(w)m(orking)h(directory)-8 b(.)42
+b(If)28 b(the)h Ft(-P)f Fu(option)630 4463 y(is)39 b(supplied,)h(the)f
+(pathname)g(prin)m(ted)g(will)g(not)h(con)m(tain)g(sym)m(b)s(olic)f
+(links.)67 b(If)38 b(the)i Ft(-L)630 4573 y Fu(option)k(is)g(supplied,)
+i(the)e(pathname)f(prin)m(ted)h(ma)m(y)g(con)m(tain)h(sym)m(b)s(olic)f
+(links.)80 b(The)630 4682 y(return)26 b(status)h(is)h(zero)g(unless)e
+(an)h(error)g(is)g(encoun)m(tered)g(while)h(determining)f(the)g(name)
+630 4792 y(of)k(the)f(curren)m(t)g(directory)h(or)f(an)h(in)m(v)-5
+b(alid)31 b(option)g(is)f(supplied.)150 4956 y Ft(readonly)870
+5093 y(readonly)46 b([-aAf])g([-p])g([)p Fj(name)p Ft([=)p
+Fj(value)p Ft(]])e(...)630 5230 y Fu(Mark)33 b(eac)m(h)h
+Fr(name)39 b Fu(as)33 b(readonly)-8 b(.)49 b(The)32 b(v)-5
+b(alues)34 b(of)f(these)g(names)g(ma)m(y)h(not)f(b)s(e)f(c)m(hanged)630
+5340 y(b)m(y)38 b(subsequen)m(t)g(assignmen)m(t.)65 b(If)38
+b(the)h Ft(-f)f Fu(option)g(is)h(supplied,)g(eac)m(h)h
+Fr(name)j Fu(refers)38 b(to)p eop end
+%%Page: 47 53
+TeXDict begin 47 52 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(47)630 299 y(a)37
+b(shell)g(function.)59 b(The)36 b Ft(-a)g Fu(option)h(means)f(eac)m(h)i
+Fr(name)k Fu(refers)36 b(to)h(an)f(indexed)g(arra)m(y)630
+408 y(v)-5 b(ariable;)28 b(the)f Ft(-A)e Fu(option)h(means)g(eac)m(h)h
+Fr(name)k Fu(refers)26 b(to)g(an)g(asso)s(ciativ)m(e)i(arra)m(y)f(v)-5
+b(ariable.)630 518 y(If)35 b(b)s(oth)g(options)h(are)h(supplied,)f
+Ft(-A)f Fu(tak)m(es)i(precedence.)58 b(If)35 b(no)h Fr(name)k
+Fu(argumen)m(ts)d(are)630 628 y(giv)m(en,)k(or)c(if)h(the)g
+Ft(-p)f Fu(option)h(is)f(supplied,)i(a)f(list)g(of)g(all)g(readonly)g
+(names)f(is)h(prin)m(ted.)630 737 y(The)32 b(other)g(options)g(ma)m(y)h
+(b)s(e)f(used)f(to)i(restrict)g(the)f(output)g(to)h(a)f(subset)g(of)g
+(the)g(set)h(of)630 847 y(readonly)c(names.)41 b(The)28
+b Ft(-p)h Fu(option)h(causes)g(output)e(to)j(b)s(e)d(displa)m(y)m(ed)i
+(in)f(a)h(format)f(that)630 956 y(ma)m(y)j(b)s(e)e(reused)g(as)i
+(input.)42 b(If)30 b(a)i(v)-5 b(ariable)31 b(name)h(is)f(follo)m(w)m
+(ed)h(b)m(y)f(=)p Fr(v)-5 b(alue)p Fu(,)32 b(the)f(v)-5
+b(alue)32 b(of)630 1066 y(the)i(v)-5 b(ariable)34 b(is)f(set)i(to)f
+Fr(v)-5 b(alue)p Fu(.)50 b(The)33 b(return)g(status)g(is)h(zero)g
+(unless)f(an)g(in)m(v)-5 b(alid)34 b(option)630 1176
+y(is)c(supplied,)f(one)h(of)g(the)g Fr(name)35 b Fu(argumen)m(ts)30
+b(is)g(not)g(a)g(v)-5 b(alid)31 b(shell)f(v)-5 b(ariable)30
+b(or)g(function)630 1285 y(name,)h(or)f(the)h Ft(-f)e
+Fu(option)i(is)g(supplied)e(with)h(a)h(name)f(that)h(is)f(not)h(a)g
+(shell)f(function.)150 1462 y Ft(return)870 1606 y(return)46
+b([)p Fj(n)p Ft(])630 1749 y Fu(Cause)37 b(a)g(shell)h(function)f(to)g
+(stop)h(executing)g(and)e(return)h(the)g(v)-5 b(alue)37
+b Fr(n)g Fu(to)h(its)f(caller.)630 1858 y(If)h Fr(n)h
+Fu(is)g(not)g(supplied,)h(the)f(return)e(v)-5 b(alue)40
+b(is)f(the)g(exit)g(status)g(of)g(the)g(last)h(command)630
+1968 y(executed)i(in)f(the)g(function.)72 b(If)41 b Ft(return)e
+Fu(is)i(executed)h(b)m(y)f(a)h(trap)f(handler,)i(the)e(last)630
+2078 y(command)d(used)f(to)i(determine)f(the)g(status)g(is)h(the)f
+(last)h(command)e(executed)i(b)s(efore)630 2187 y(the)27
+b(trap)g(handler.)39 b(If)26 b Ft(return)g Fu(is)h(executed)h(during)d
+(a)j Ft(DEBUG)d Fu(trap,)j(the)f(last)h(command)630 2297
+y(used)f(to)h(determine)g(the)f(status)h(is)g(the)f(last)i(command)e
+(executed)h(b)m(y)g(the)f(trap)h(handler)630 2406 y(b)s(efore)e
+Ft(return)f Fu(w)m(as)i(in)m(v)m(ok)m(ed.)41 b Ft(return)25
+b Fu(ma)m(y)i(also)g(b)s(e)f(used)g(to)h(terminate)h(execution)g(of)630
+2516 y(a)34 b(script)g(b)s(eing)g(executed)g(with)g(the)g
+Ft(.)g Fu(\()p Ft(source)p Fu(\))f(builtin,)h(returning)f(either)i
+Fr(n)e Fu(or)h(the)630 2626 y(exit)j(status)f(of)g(the)g(last)h
+(command)e(executed)i(within)e(the)h(script)g(as)g(the)g(exit)h(status)
+630 2735 y(of)i(the)g(script.)65 b(If)38 b Fr(n)g Fu(is)h(supplied,)h
+(the)f(return)e(v)-5 b(alue)39 b(is)g(its)g(least)h(signi\014can)m(t)g
+(8)f(bits.)630 2845 y(An)m(y)g(command)f(asso)s(ciated)j(with)d(the)h
+Ft(RETURN)e Fu(trap)i(is)g(executed)g(b)s(efore)g(execution)630
+2954 y(resumes)29 b(after)h(the)g(function)g(or)g(script.)40
+b(The)29 b(return)g(status)h(is)g(non-zero)g(if)g Ft(return)e
+Fu(is)630 3064 y(supplied)h(a)i(non-n)m(umeric)g(argumen)m(t)g(or)f(is)
+h(used)f(outside)h(a)g(function)f(and)g(not)h(during)630
+3173 y(the)g(execution)g(of)g(a)f(script)h(b)m(y)f Ft(.)g
+Fu(or)g Ft(source)p Fu(.)150 3351 y Ft(shift)870 3494
+y(shift)46 b([)p Fj(n)p Ft(])630 3637 y Fu(Shift)41 b(the)g(p)s
+(ositional)h(parameters)g(to)g(the)f(left)h(b)m(y)g Fr(n)p
+Fu(.)73 b(The)40 b(p)s(ositional)j(parameters)630 3747
+y(from)34 b Fr(n)p Ft(+)p Fu(1)39 b(.)22 b(.)h(.)45 b
+Ft($#)34 b Fu(are)g(renamed)g(to)h Ft($1)k Fu(.)22 b(.)g(.)46
+b Ft($#)p Fu(-)p Fr(n)p Fu(.)51 b(P)m(arameters)36 b(represen)m(ted)e
+(b)m(y)g(the)630 3856 y(n)m(um)m(b)s(ers)25 b Ft($#)i
+Fu(to)g Ft($#)p Fu(-)p Fr(n)p Ft(+)p Fu(1)g(are)g(unset.)39
+b Fr(n)26 b Fu(m)m(ust)h(b)s(e)f(a)i(non-negativ)m(e)h(n)m(um)m(b)s(er)
+c(less)i(than)g(or)630 3966 y(equal)33 b(to)h Ft($#)p
+Fu(.)47 b(If)33 b Fr(n)f Fu(is)h(zero)g(or)g(greater)h(than)f
+Ft($#)p Fu(,)g(the)g(p)s(ositional)g(parameters)g(are)h(not)630
+4075 y(c)m(hanged.)48 b(If)32 b Fr(n)g Fu(is)h(not)f(supplied,)h(it)g
+(is)f(assumed)g(to)h(b)s(e)f(1.)48 b(The)32 b(return)g(status)h(is)f
+(zero)630 4185 y(unless)e Fr(n)f Fu(is)i(greater)g(than)g
+Ft($#)e Fu(or)i(less)f(than)h(zero,)g(non-zero)g(otherwise.)150
+4362 y Ft(test)150 4472 y([)870 4615 y(test)47 b Fj(expr)630
+4758 y Fu(Ev)-5 b(aluate)43 b(a)f(conditional)h(expression)f
+Fr(expr)48 b Fu(and)41 b(return)g(a)h(status)g(of)g(0)g(\(true\))h(or)f
+(1)630 4868 y(\(false\).)g(Eac)m(h)31 b(op)s(erator)f(and)f(op)s(erand)
+g(m)m(ust)h(b)s(e)f(a)i(separate)g(argumen)m(t.)41 b(Expressions)630
+4977 y(are)26 b(comp)s(osed)f(of)g(the)h(primaries)f(describ)s(ed)f(b)s
+(elo)m(w)h(in)g(Section)h(6.4)h([Bash)e(Conditional)630
+5087 y(Expressions],)39 b(page)g(90.)64 b Ft(test)37
+b Fu(do)s(es)g(not)h(accept)i(an)m(y)e(options,)i(nor)e(do)s(es)f(it)h
+(accept)630 5197 y(and)30 b(ignore)h(an)f(argumen)m(t)h(of)f
+Ft(--)g Fu(as)h(signifying)f(the)h(end)f(of)g(options.)630
+5340 y(When)g(the)h Ft([)f Fu(form)g(is)g(used,)g(the)g(last)i(argumen)
+m(t)e(to)i(the)e(command)g(m)m(ust)h(b)s(e)e(a)i Ft(])p
+Fu(.)p eop end
+%%Page: 48 54
+TeXDict begin 48 53 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(48)630 299 y(Expressions)23
+b(ma)m(y)h(b)s(e)e(com)m(bined)i(using)f(the)h(follo)m(wing)h(op)s
+(erators,)g(listed)f(in)f(decreasing)630 408 y(order)30
+b(of)h(precedence.)43 b(The)30 b(ev)-5 b(aluation)33
+b(dep)s(ends)28 b(on)j(the)g(n)m(um)m(b)s(er)f(of)h(argumen)m(ts;)g
+(see)630 518 y(b)s(elo)m(w.)41 b(Op)s(erator)30 b(precedence)h(is)f
+(used)g(when)f(there)i(are)f(\014v)m(e)h(or)f(more)h(argumen)m(ts.)630
+673 y Ft(!)f Fj(expr)210 b Fu(T)-8 b(rue)30 b(if)g Fr(expr)37
+b Fu(is)30 b(false.)630 829 y Ft(\()g Fj(expr)f Ft(\))133
+b Fu(Returns)23 b(the)i(v)-5 b(alue)25 b(of)f Fr(expr)p
+Fu(.)38 b(This)24 b(ma)m(y)h(b)s(e)e(used)h(to)h(o)m(v)m(erride)g(the)g
+(normal)1110 938 y(precedence)31 b(of)f(op)s(erators.)630
+1093 y Fj(expr1)f Ft(-a)h Fj(expr2)1110 1203 y Fu(T)-8
+b(rue)30 b(if)g(b)s(oth)g Fr(expr1)37 b Fu(and)30 b Fr(expr2)38
+b Fu(are)30 b(true.)630 1358 y Fj(expr1)f Ft(-o)h Fj(expr2)1110
+1468 y Fu(T)-8 b(rue)30 b(if)g(either)h Fr(expr1)38 b
+Fu(or)30 b Fr(expr2)37 b Fu(is)31 b(true.)630 1623 y(The)37
+b Ft(test)f Fu(and)g Ft([)h Fu(builtins)g(ev)-5 b(aluate)39
+b(conditional)f(expressions)f(using)g(a)g(set)h(of)f(rules)630
+1733 y(based)30 b(on)g(the)h(n)m(um)m(b)s(er)e(of)h(argumen)m(ts.)630
+1888 y(0)h(argumen)m(ts)1110 1998 y(The)f(expression)g(is)g(false.)630
+2153 y(1)h(argumen)m(t)1110 2262 y(The)f(expression)g(is)g(true)h(if,)f
+(and)g(only)g(if,)h(the)g(argumen)m(t)f(is)h(not)f(n)m(ull.)630
+2418 y(2)h(argumen)m(ts)1110 2527 y(If)f(the)h(\014rst)f(argumen)m(t)h
+(is)g(`)p Ft(!)p Fu(',)g(the)g(expression)g(is)g(true)f(if)h(and)f
+(only)h(if)g(the)1110 2637 y(second)j(argumen)m(t)f(is)h(n)m(ull.)50
+b(If)33 b(the)h(\014rst)e(argumen)m(t)i(is)g(one)g(of)f(the)h(unary)
+1110 2746 y(conditional)42 b(op)s(erators)f(\(see)g(Section)h(6.4)f
+([Bash)g(Conditional)g(Expres-)1110 2856 y(sions],)34
+b(page)f(90\),)i(the)e(expression)f(is)h(true)g(if)g(the)g(unary)e
+(test)j(is)f(true.)47 b(If)1110 2966 y(the)33 b(\014rst)g(argumen)m(t)h
+(is)f(not)g(a)h(v)-5 b(alid)34 b(unary)e(op)s(erator,)i(the)g
+(expression)f(is)1110 3075 y(false.)630 3230 y(3)e(argumen)m(ts)1110
+3340 y(The)f(follo)m(wing)i(conditions)f(are)f(applied)h(in)f(the)g
+(order)g(listed.)1159 3472 y(1.)61 b(If)29 b(the)g(second)g(argumen)m
+(t)h(is)f(one)h(of)f(the)h(binary)e(conditional)j(op)s(era-)1290
+3582 y(tors)c(\(see)h(Section)g(6.4)g([Bash)g(Conditional)f
+(Expressions],)h(page)f(90\),)1290 3692 y(the)d(result)g(of)f(the)h
+(expression)g(is)g(the)f(result)h(of)g(the)g(binary)f(test)h(using)1290
+3801 y(the)35 b(\014rst)e(and)h(third)g(argumen)m(ts)h(as)f(op)s
+(erands.)52 b(The)34 b(`)p Ft(-a)p Fu(')g(and)g(`)p Ft(-o)p
+Fu(')1290 3911 y(op)s(erators)24 b(are)g(considered)g(binary)f(op)s
+(erators)h(when)f(there)h(are)h(three)1290 4020 y(argumen)m(ts.)1159
+4153 y(2.)61 b(If)41 b(the)h(\014rst)e(argumen)m(t)i(is)f(`)p
+Ft(!)p Fu(',)k(the)d(v)-5 b(alue)41 b(is)h(the)f(negation)i(of)f(the)
+1290 4262 y(t)m(w)m(o-argumen)m(t)33 b(test)e(using)f(the)g(second)h
+(and)e(third)h(argumen)m(ts.)1159 4395 y(3.)61 b(If)35
+b(the)h(\014rst)e(argumen)m(t)i(is)g(exactly)h(`)p Ft(\()p
+Fu(')f(and)f(the)g(third)g(argumen)m(t)h(is)1290 4504
+y(exactly)i(`)p Ft(\))p Fu(',)g(the)f(result)f(is)h(the)f(one-argumen)m
+(t)i(test)f(of)f(the)h(second)1290 4614 y(argumen)m(t.)1159
+4746 y(4.)61 b(Otherwise,)30 b(the)h(expression)f(is)g(false.)630
+4902 y(4)h(argumen)m(ts)1110 5011 y(If)h(the)i(\014rst)e(argumen)m(t)h
+(is)g(`)p Ft(!)p Fu(',)h(the)f(result)g(is)g(the)g(negation)h(of)f(the)
+g(three-)1110 5121 y(argumen)m(t)h(expression)f(comp)s(osed)h(of)f(the)
+h(remaining)g(argumen)m(ts.)50 b(Oth-)1110 5230 y(erwise,)34
+b(the)f(expression)g(is)g(parsed)g(and)f(ev)-5 b(aluated)34
+b(according)h(to)e(prece-)1110 5340 y(dence)e(using)e(the)i(rules)f
+(listed)h(ab)s(o)m(v)m(e.)p eop end
+%%Page: 49 55
+TeXDict begin 49 54 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(49)630 299 y(5)31
+b(or)f(more)h(argumen)m(ts)1110 408 y(The)43 b(expression)f(is)i
+(parsed)e(and)g(ev)-5 b(aluated)45 b(according)f(to)f(precedence)1110
+518 y(using)30 b(the)g(rules)g(listed)h(ab)s(o)m(v)m(e.)630
+690 y(When)40 b(used)f(with)g Ft(test)g Fu(or)h(`)p Ft([)p
+Fu(',)j(the)d(`)p Ft(<)p Fu(')g(and)f(`)p Ft(>)p Fu(')h(op)s(erators)g
+(sort)g(lexicographically)630 800 y(using)30 b(ASCI)s(I)f(ordering.)150
+972 y Ft(times)870 1113 y(times)630 1254 y Fu(Prin)m(t)37
+b(out)h(the)g(user)e(and)h(system)g(times)h(used)f(b)m(y)g(the)h(shell)
+f(and)g(its)h(c)m(hildren.)61 b(The)630 1363 y(return)29
+b(status)i(is)f(zero.)150 1536 y Ft(trap)870 1677 y(trap)47
+b([-lp])f([)p Fj(arg)p Ft(])g([)p Fj(sigspec)g Ft(...)o(])630
+1817 y Fu(The)d(commands)f(in)h Fr(arg)51 b Fu(are)44
+b(to)g(b)s(e)e(read)h(and)g(executed)h(when)e(the)h(shell)g(receiv)m
+(es)630 1927 y(signal)36 b Fr(sigsp)s(ec)p Fu(.)57 b(If)35
+b Fr(arg)44 b Fu(is)36 b(absen)m(t)g(\(and)f(there)h(is)g(a)f(single)i
+Fr(sigsp)s(ec)6 b Fu(\))35 b(or)h(equal)g(to)h(`)p Ft(-)p
+Fu(',)630 2037 y(eac)m(h)k(sp)s(eci\014ed)e(signal's)h(disp)s(osition)g
+(is)f(reset)i(to)f(the)g(v)-5 b(alue)40 b(it)g(had)f(when)g(the)h
+(shell)630 2146 y(w)m(as)33 b(started.)47 b(If)32 b Fr(arg)41
+b Fu(is)32 b(the)h(n)m(ull)f(string,)i(then)e(the)g(signal)i(sp)s
+(eci\014ed)d(b)m(y)i(eac)m(h)g Fr(sigsp)s(ec)630 2256
+y Fu(is)g(ignored)h(b)m(y)f(the)g(shell)h(and)e(commands)h(it)h(in)m(v)
+m(ok)m(es.)51 b(If)33 b Fr(arg)41 b Fu(is)33 b(not)h(presen)m(t)f(and)g
+Ft(-p)630 2365 y Fu(has)g(b)s(een)g(supplied,)f(the)i(shell)f(displa)m
+(ys)h(the)f(trap)g(commands)g(asso)s(ciated)i(with)e(eac)m(h)630
+2475 y Fr(sigsp)s(ec)p Fu(.)47 b(If)31 b(no)i(argumen)m(ts)f(are)h
+(supplied,)e(or)i(only)f Ft(-p)g Fu(is)g(giv)m(en,)i
+Ft(trap)d Fu(prin)m(ts)h(the)g(list)630 2585 y(of)c(commands)f(asso)s
+(ciated)i(with)f(eac)m(h)h(signal)f(n)m(um)m(b)s(er)e(in)i(a)g(form)f
+(that)h(ma)m(y)h(b)s(e)e(reused)630 2694 y(as)f(shell)h(input.)38
+b(The)26 b Ft(-l)f Fu(option)i(causes)f(the)g(shell)h(to)g(prin)m(t)e
+(a)i(list)f(of)h(signal)g(names)f(and)630 2804 y(their)33
+b(corresp)s(onding)f(n)m(um)m(b)s(ers.)47 b(Eac)m(h)34
+b Fr(sigsp)s(ec)39 b Fu(is)33 b(either)g(a)h(signal)g(name)f(or)g(a)g
+(signal)630 2913 y(n)m(um)m(b)s(er.)39 b(Signal)31 b(names)f(are)h
+(case)h(insensitiv)m(e)f(and)f(the)g Ft(SIG)g Fu(pre\014x)f(is)i
+(optional.)630 3054 y(If)k(a)g Fr(sigsp)s(ec)41 b Fu(is)35
+b Ft(0)g Fu(or)g Ft(EXIT)p Fu(,)g Fr(arg)43 b Fu(is)35
+b(executed)h(when)e(the)h(shell)h(exits.)55 b(If)35 b(a)g
+Fr(sigsp)s(ec)41 b Fu(is)630 3164 y Ft(DEBUG)p Fu(,)32
+b(the)g(command)g Fr(arg)40 b Fu(is)33 b(executed)g(b)s(efore)f(ev)m
+(ery)h(simple)f(command,)h Ft(for)e Fu(com-)630 3273
+y(mand,)d Ft(case)g Fu(command,)h Ft(select)e Fu(command,)i(ev)m(ery)h
+(arithmetic)g Ft(for)d Fu(command,)j(and)630 3383 y(b)s(efore)22
+b(the)g(\014rst)f(command)h(executes)i(in)e(a)g(shell)h(function.)37
+b(Refer)22 b(to)h(the)g(description)f(of)630 3493 y(the)i
+Ft(extdebug)d Fu(option)j(to)h(the)f Ft(shopt)e Fu(builtin)h(\(see)i
+(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)630 3602
+y(page)33 b(65\))g(for)f(details)h(of)f(its)h(e\013ect)g(on)f(the)g
+Ft(DEBUG)f Fu(trap.)46 b(If)31 b(a)i Fr(sigsp)s(ec)38
+b Fu(is)32 b Ft(RETURN)p Fu(,)f(the)630 3712 y(command)h
+Fr(arg)41 b Fu(is)33 b(executed)g(eac)m(h)h(time)f(a)g(shell)g
+(function)g(or)f(a)h(script)g(executed)g(with)630 3821
+y(the)e Ft(.)f Fu(or)g Ft(source)f Fu(builtins)g(\014nishes)h
+(executing.)630 3962 y(If)20 b(a)i Fr(sigsp)s(ec)27 b
+Fu(is)21 b Ft(ERR)p Fu(,)h(the)f(command)g Fr(arg)29
+b Fu(is)21 b(executed)h(whenev)m(er)e(a)i(pip)s(eline)e(\(whic)m(h)h
+(ma)m(y)630 4072 y(consist)35 b(of)g(a)f(single)h(simple)g(command\),)h
+(a)e(list,)j(or)d(a)h(comp)s(ound)e(command)h(returns)630
+4181 y(a)41 b(non-zero)g(exit)h(status,)h(sub)5 b(ject)41
+b(to)g(the)g(follo)m(wing)h(conditions.)72 b(The)40 b
+Ft(ERR)f Fu(trap)i(is)630 4291 y(not)c(executed)h(if)f(the)h(failed)f
+(command)g(is)g(part)g(of)h(the)f(command)g(list)h(immediately)630
+4401 y(follo)m(wing)30 b(an)e Ft(until)f Fu(or)i Ft(while)e
+Fu(k)m(eyw)m(ord,)i(part)g(of)f(the)h(test)g(follo)m(wing)h(the)f
+Ft(if)f Fu(or)g Ft(elif)630 4510 y Fu(reserv)m(ed)45
+b(w)m(ords,)j(part)c(of)h(a)g(command)g(executed)g(in)g(a)g
+Ft(&&)f Fu(or)h Ft(||)f Fu(list)h(except)h(the)630 4620
+y(command)28 b(follo)m(wing)j(the)d(\014nal)h Ft(&&)f
+Fu(or)g Ft(||)p Fu(,)h(an)m(y)g(command)f(in)h(a)g(pip)s(eline)f(but)g
+(the)h(last,)630 4729 y(or)d(if)g(the)f(command's)h(return)f(status)h
+(is)g(b)s(eing)f(in)m(v)m(erted)i(using)e Ft(!)p Fu(.)39
+b(These)25 b(are)i(the)f(same)630 4839 y(conditions)31
+b(ob)s(ey)m(ed)f(b)m(y)h(the)f Ft(errexit)f Fu(\()p Ft(-e)p
+Fu(\))h(option.)630 4980 y(Signals)37 b(ignored)f(up)s(on)f(en)m(try)i
+(to)g(the)f(shell)h(cannot)g(b)s(e)f(trapp)s(ed)f(or)h(reset.)59
+b(T)-8 b(rapp)s(ed)630 5089 y(signals)28 b(that)f(are)h(not)f(b)s(eing)
+g(ignored)g(are)g(reset)h(to)g(their)f(original)h(v)-5
+b(alues)28 b(in)e(a)i(subshell)630 5199 y(or)i(subshell)g(en)m
+(vironmen)m(t)h(when)e(one)i(is)f(created.)630 5340 y(The)g(return)f
+(status)i(is)f(zero)h(unless)f(a)h Fr(sigsp)s(ec)36 b
+Fu(do)s(es)30 b(not)h(sp)s(ecify)f(a)g(v)-5 b(alid)31
+b(signal.)p eop end
+%%Page: 50 56
+TeXDict begin 50 55 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(50)150 299 y Ft(umask)870
+427 y(umask)46 b([-p])h([-S])g([)p Fj(mode)p Ft(])630
+554 y Fu(Set)30 b(the)f(shell)h(pro)s(cess's)f(\014le)h(creation)g
+(mask)g(to)g Fr(mo)s(de)p Fu(.)40 b(If)29 b Fr(mo)s(de)34
+b Fu(b)s(egins)29 b(with)g(a)h(digit,)630 664 y(it)e(is)f(in)m
+(terpreted)g(as)g(an)g(o)s(ctal)i(n)m(um)m(b)s(er;)e(if)g(not,)h(it)g
+(is)f(in)m(terpreted)g(as)g(a)h(sym)m(b)s(olic)f(mo)s(de)630
+773 y(mask)i(similar)g(to)g(that)h(accepted)g(b)m(y)f(the)g
+Ft(chmod)e Fu(command.)40 b(If)28 b Fr(mo)s(de)34 b Fu(is)28
+b(omitted,)j(the)630 883 y(curren)m(t)39 b(v)-5 b(alue)40
+b(of)f(the)g(mask)g(is)h(prin)m(ted.)66 b(If)39 b(the)g
+Ft(-S)g Fu(option)g(is)h(supplied)d(without)j(a)630 993
+y Fr(mo)s(de)d Fu(argumen)m(t,)d(the)e(mask)g(is)h(prin)m(ted)f(in)g(a)
+g(sym)m(b)s(olic)h(format.)47 b(If)32 b(the)g Ft(-p)g
+Fu(option)h(is)630 1102 y(supplied,)f(and)f Fr(mo)s(de)37
+b Fu(is)32 b(omitted,)i(the)f(output)f(is)g(in)g(a)g(form)g(that)h(ma)m
+(y)g(b)s(e)e(reused)h(as)630 1212 y(input.)62 b(The)38
+b(return)f(status)h(is)g(zero)g(if)g(the)g(mo)s(de)g(is)g(successfully)
+g(c)m(hanged)g(or)g(if)g(no)630 1321 y Fr(mo)s(de)d Fu(argumen)m(t)c
+(is)f(supplied,)g(and)f(non-zero)i(otherwise.)630 1449
+y(Note)38 b(that)e(when)g(the)g(mo)s(de)g(is)g(in)m(terpreted)h(as)f
+(an)g(o)s(ctal)i(n)m(um)m(b)s(er,)e(eac)m(h)i(n)m(um)m(b)s(er)d(of)630
+1559 y(the)f(umask)g(is)h(subtracted)f(from)f Ft(7)p
+Fu(.)53 b(Th)m(us,)34 b(a)h(umask)e(of)i Ft(022)e Fu(results)h(in)g(p)s
+(ermissions)630 1668 y(of)d Ft(755)p Fu(.)150 1814 y
+Ft(unset)870 1942 y(unset)46 b([-fnv])g([)p Fj(name)p
+Ft(])630 2069 y Fu(Remo)m(v)m(e)36 b(eac)m(h)f(v)-5 b(ariable)35
+b(or)f(function)f Fr(name)p Fu(.)52 b(If)33 b(the)i Ft(-v)e
+Fu(option)h(is)g(giv)m(en,)j(eac)m(h)e Fr(name)630 2179
+y Fu(refers)27 b(to)h(a)g(shell)f(v)-5 b(ariable)28 b(and)f(that)h(v)-5
+b(ariable)28 b(is)f(remo)m(v)m(ed.)41 b(If)27 b(the)g
+Ft(-f)g Fu(option)g(is)h(giv)m(en,)630 2288 y(the)37
+b Fr(name)5 b Fu(s)37 b(refer)f(to)i(shell)f(functions,)h(and)e(the)h
+(function)g(de\014nition)f(is)h(remo)m(v)m(ed.)61 b(If)630
+2398 y(the)34 b Ft(-n)e Fu(option)i(is)g(supplied,)f(and)g
+Fr(name)38 b Fu(is)c(a)f(v)-5 b(ariable)34 b(with)g(the)f
+Fr(nameref)51 b Fu(attribute,)630 2508 y Fr(name)42 b
+Fu(will)37 b(b)s(e)f(unset)g(rather)g(than)h(the)g(v)-5
+b(ariable)37 b(it)g(references.)60 b Ft(-n)36 b Fu(has)g(no)h(e\013ect)
+h(if)630 2617 y(the)h Ft(-f)g Fu(option)g(is)h(supplied.)65
+b(If)39 b(no)g(options)h(are)f(supplied,)h(eac)m(h)h
+Fr(name)j Fu(refers)39 b(to)h(a)630 2727 y(v)-5 b(ariable;)37
+b(if)d(there)g(is)g(no)g(v)-5 b(ariable)34 b(b)m(y)g(that)h(name,)g(an)
+m(y)f(function)g(with)f(that)i(name)f(is)630 2836 y(unset.)46
+b(Readonly)33 b(v)-5 b(ariables)33 b(and)e(functions)h(ma)m(y)h(not)g
+(b)s(e)e(unset.)47 b(The)31 b(return)h(status)630 2946
+y(is)e(zero)i(unless)d(a)i Fr(name)36 b Fu(is)30 b(readonly)-8
+b(.)150 3173 y Fs(4.2)68 b(Bash)45 b(Builtin)g(Commands)150
+3332 y Fu(This)c(section)h(describ)s(es)f(builtin)f(commands)h(whic)m
+(h)g(are)h(unique)e(to)j(or)e(ha)m(v)m(e)h(b)s(een)f(extended)g(in)150
+3442 y(Bash.)g(Some)30 b(of)h(these)g(commands)f(are)g(sp)s(eci\014ed)g
+(in)g(the)h Fm(posix)e Fu(standard.)150 3588 y Ft(alias)870
+3715 y(alias)46 b([-p])h([)p Fj(name)p Ft([=)p Fj(value)p
+Ft(])d(...)o(])630 3843 y Fu(Without)26 b(argumen)m(ts)f(or)g(with)f
+(the)h Ft(-p)g Fu(option,)h Ft(alias)e Fu(prin)m(ts)g(the)h(list)h(of)f
+(aliases)h(on)f(the)630 3953 y(standard)g(output)g(in)g(a)h(form)f
+(that)h(allo)m(ws)h(them)e(to)h(b)s(e)f(reused)g(as)g(input.)39
+b(If)25 b(argumen)m(ts)630 4062 y(are)j(supplied,)e(an)i(alias)g(is)f
+(de\014ned)f(for)h(eac)m(h)h Fr(name)33 b Fu(whose)27
+b Fr(v)-5 b(alue)33 b Fu(is)27 b(giv)m(en.)41 b(If)26
+b(no)h Fr(v)-5 b(alue)630 4172 y Fu(is)37 b(giv)m(en,)j(the)d(name)g
+(and)g(v)-5 b(alue)37 b(of)h(the)f(alias)h(is)f(prin)m(ted.)61
+b(Aliases)38 b(are)f(describ)s(ed)f(in)630 4281 y(Section)31
+b(6.6)h([Aliases],)g(page)f(93.)150 4427 y Ft(bind)870
+4555 y(bind)47 b([-m)g Fj(keymap)p Ft(])e([-lpsvPSVX])870
+4664 y(bind)i([-m)g Fj(keymap)p Ft(])e([-q)i Fj(function)p
+Ft(])f([-u)g Fj(function)p Ft(])g([-r)h Fj(keyseq)p Ft(])870
+4774 y(bind)g([-m)g Fj(keymap)p Ft(])e(-f)j Fj(filename)870
+4884 y Ft(bind)f([-m)g Fj(keymap)p Ft(])e(-x)j Fj(keyseq:shell-command)
+870 4993 y Ft(bind)f([-m)g Fj(keymap)p Ft(])e Fj(keyseq:function-name)
+870 5103 y Ft(bind)i([-m)g Fj(keymap)p Ft(])e Fj
+(keyseq:readline-command)630 5230 y Fu(Displa)m(y)22
+b(curren)m(t)f(Readline)h(\(see)f(Chapter)g(8)g([Command)f(Line)h
+(Editing],)j(page)e(107\))g(k)m(ey)630 5340 y(and)36
+b(function)g(bindings,)i(bind)d(a)i(k)m(ey)g(sequence)g(to)h(a)f
+(Readline)g(function)f(or)h(macro,)p eop end
+%%Page: 51 57
+TeXDict begin 51 56 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(51)630 299 y(or)44
+b(set)h(a)g(Readline)f(v)-5 b(ariable.)83 b(Eac)m(h)45
+b(non-option)g(argumen)m(t)f(is)g(a)h(command)f(as)g(it)630
+408 y(w)m(ould)e(app)s(ear)f(in)h(a)h(Readline)g(initialization)i
+(\014le)d(\(see)h(Section)g(8.3)g([Readline)g(Init)630
+518 y(File],)c(page)d(110\),)j(but)c(eac)m(h)h(binding)f(or)g(command)h
+(m)m(ust)f(b)s(e)g(passed)g(as)h(a)g(separate)630 628
+y(argumen)m(t;)31 b(e.g.,)h(`)p Ft("\\C-x\\C-r":re-read-init-f)o(ile)p
+Fu('.)630 762 y(Options,)e(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m
+(wing)h(meanings:)630 921 y Ft(-m)e Fj(keymap)66 b Fu(Use)54
+b Fr(k)m(eymap)j Fu(as)d(the)g(k)m(eymap)g(to)h(b)s(e)e(a\013ected)i(b)
+m(y)f(the)g(subsequen)m(t)1110 1031 y(bindings.)46 b(Acceptable)34
+b Fr(k)m(eymap)i Fu(names)c(are)h Ft(emacs)p Fu(,)f Ft(emacs-standard)p
+Fu(,)1110 1140 y Ft(emacs-meta)p Fu(,)99 b Ft(emacs-ctlx)p
+Fu(,)f Ft(vi)p Fu(,)j Ft(vi-move)p Fu(,)f Ft(vi-command)p
+Fu(,)f(and)1110 1250 y Ft(vi-insert)p Fu(.)81 b Ft(vi)44
+b Fu(is)h(equiv)-5 b(alen)m(t)46 b(to)g Ft(vi-command)c
+Fu(\()p Ft(vi-move)h Fu(is)i(also)h(a)1110 1359 y(synon)m(ym\);)30
+b Ft(emacs)f Fu(is)i(equiv)-5 b(alen)m(t)32 b(to)f Ft(emacs-standard)p
+Fu(.)630 1518 y Ft(-l)384 b Fu(List)31 b(the)f(names)g(of)h(all)g
+(Readline)g(functions.)630 1678 y Ft(-p)384 b Fu(Displa)m(y)34
+b(Readline)f(function)g(names)g(and)f(bindings)f(in)i(suc)m(h)f(a)i(w)m
+(a)m(y)f(that)1110 1787 y(they)e(can)f(b)s(e)g(used)g(as)g(input)g(or)g
+(in)g(a)h(Readline)g(initialization)i(\014le.)630 1946
+y Ft(-P)384 b Fu(List)31 b(curren)m(t)f(Readline)h(function)f(names)g
+(and)g(bindings.)630 2105 y Ft(-v)384 b Fu(Displa)m(y)25
+b(Readline)f(v)-5 b(ariable)25 b(names)f(and)f(v)-5 b(alues)24
+b(in)g(suc)m(h)f(a)i(w)m(a)m(y)f(that)h(they)1110 2215
+y(can)31 b(b)s(e)e(used)h(as)h(input)e(or)h(in)g(a)h(Readline)g
+(initialization)j(\014le.)630 2374 y Ft(-V)384 b Fu(List)31
+b(curren)m(t)f(Readline)h(v)-5 b(ariable)31 b(names)f(and)g(v)-5
+b(alues.)630 2533 y Ft(-s)384 b Fu(Displa)m(y)39 b(Readline)f(k)m(ey)g
+(sequences)f(b)s(ound)f(to)i(macros)g(and)f(the)g(strings)1110
+2643 y(they)d(output)f(in)h(suc)m(h)f(a)h(w)m(a)m(y)h(that)f(they)g
+(can)g(b)s(e)f(used)g(as)h(input)e(or)i(in)g(a)1110 2752
+y(Readline)d(initialization)i(\014le.)630 2911 y Ft(-S)384
+b Fu(Displa)m(y)39 b(Readline)f(k)m(ey)g(sequences)f(b)s(ound)f(to)i
+(macros)g(and)f(the)g(strings)1110 3021 y(they)31 b(output.)630
+3180 y Ft(-f)f Fj(filename)1110 3290 y Fu(Read)h(k)m(ey)g(bindings)e
+(from)h Fr(\014lename)p Fu(.)630 3449 y Ft(-q)g Fj(function)1110
+3558 y Fu(Query)g(ab)s(out)g(whic)m(h)g(k)m(eys)h(in)m(v)m(ok)m(e)h
+(the)f(named)f Fr(function)p Fu(.)630 3717 y Ft(-u)g
+Fj(function)1110 3827 y Fu(Un)m(bind)f(all)i(k)m(eys)g(b)s(ound)e(to)i
+(the)f(named)g Fr(function)p Fu(.)630 3986 y Ft(-r)g
+Fj(keyseq)66 b Fu(Remo)m(v)m(e)32 b(an)m(y)f(curren)m(t)f(binding)f
+(for)h Fr(k)m(eyseq)p Fu(.)630 4145 y Ft(-x)g Fj(keyseq:shell-command)
+1110 4255 y Fu(Cause)35 b Fr(shell-command)k Fu(to)d(b)s(e)f(executed)h
+(whenev)m(er)f Fr(k)m(eyseq)j Fu(is)d(en)m(tered.)1110
+4364 y(When)46 b Fr(shell-command)k Fu(is)c(executed,)51
+b(the)46 b(shell)g(sets)g(the)g Ft(READLINE_)1110 4474
+y(LINE)37 b Fu(v)-5 b(ariable)38 b(to)g(the)g(con)m(ten)m(ts)i(of)e
+(the)g(Readline)g(line)g(bu\013er)f(and)g(the)1110 4583
+y Ft(READLINE_POINT)e Fu(v)-5 b(ariable)39 b(to)h(the)e(curren)m(t)h
+(lo)s(cation)h(of)f(the)g(insertion)1110 4693 y(p)s(oin)m(t.)59
+b(If)37 b(the)f(executed)i(command)e(c)m(hanges)i(the)f(v)-5
+b(alue)37 b(of)f Ft(READLINE_)1110 4803 y(LINE)29 b Fu(or)h
+Ft(READLINE_POINT)p Fu(,)c(those)31 b(new)e(v)-5 b(alues)31
+b(will)f(b)s(e)f(re\015ected)i(in)f(the)1110 4912 y(editing)h(state.)
+630 5071 y Ft(-X)384 b Fu(List)27 b(all)i(k)m(ey)f(sequences)f(b)s
+(ound)e(to)j(shell)g(commands)e(and)h(the)g(asso)s(ciated)1110
+5181 y(commands)j(in)g(a)h(format)g(that)f(can)h(b)s(e)f(reused)f(as)i
+(input.)630 5340 y(The)26 b(return)f(status)i(is)f(zero)i(unless)d(an)i
+(in)m(v)-5 b(alid)27 b(option)g(is)f(supplied)f(or)i(an)f(error)g(o)s
+(ccurs.)p eop end
+%%Page: 52 58
+TeXDict begin 52 57 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(52)150 299 y Ft(builtin)870
+437 y(builtin)46 b([)p Fj(shell-builtin)e Ft([)p Fj(args)p
+Ft(]])630 576 y Fu(Run)35 b(a)i(shell)f(builtin,)i(passing)e(it)h
+Fr(args)p Fu(,)h(and)e(return)f(its)i(exit)g(status.)59
+b(This)35 b(is)i(useful)630 685 y(when)29 b(de\014ning)h(a)g(shell)h
+(function)f(with)g(the)g(same)h(name)f(as)h(a)g(shell)f(builtin,)g
+(retaining)630 795 y(the)k(functionalit)m(y)h(of)f(the)f(builtin)g
+(within)g(the)h(function.)50 b(The)33 b(return)g(status)h(is)f(non-)630
+905 y(zero)e(if)g Fr(shell-builtin)f Fu(is)g(not)h(a)g(shell)f(builtin)
+g(command.)150 1072 y Ft(caller)870 1210 y(caller)46
+b([)p Fj(expr)p Ft(])630 1349 y Fu(Returns)34 b(the)g(con)m(text)j(of)e
+(an)m(y)g(activ)m(e)i(subroutine)c(call)j(\(a)f(shell)g(function)f(or)h
+(a)g(script)630 1458 y(executed)c(with)f(the)h Ft(.)f
+Fu(or)g Ft(source)f Fu(builtins\).)630 1597 y(Without)45
+b Fr(expr)p Fu(,)j Ft(caller)43 b Fu(displa)m(ys)i(the)f(line)h(n)m(um)
+m(b)s(er)f(and)g(source)g(\014lename)h(of)g(the)630 1706
+y(curren)m(t)35 b(subroutine)g(call.)58 b(If)35 b(a)h(non-negativ)m(e)i
+(in)m(teger)f(is)f(supplied)e(as)i Fr(expr)p Fu(,)h Ft(caller)630
+1816 y Fu(displa)m(ys)k(the)f(line)h(n)m(um)m(b)s(er,)h(subroutine)d
+(name,)44 b(and)c(source)g(\014le)h(corresp)s(onding)e(to)630
+1925 y(that)c(p)s(osition)g(in)f(the)h(curren)m(t)f(execution)i(call)g
+(stac)m(k.)54 b(This)34 b(extra)h(information)g(ma)m(y)630
+2035 y(b)s(e)30 b(used,)g(for)g(example,)h(to)g(prin)m(t)f(a)h(stac)m
+(k)h(trace.)42 b(The)29 b(curren)m(t)i(frame)f(is)g(frame)h(0.)630
+2173 y(The)d(return)g(v)-5 b(alue)29 b(is)g(0)g(unless)f(the)h(shell)g
+(is)g(not)g(executing)h(a)f(subroutine)e(call)j(or)f
+Fr(expr)630 2283 y Fu(do)s(es)h(not)h(corresp)s(ond)e(to)i(a)g(v)-5
+b(alid)30 b(p)s(osition)h(in)f(the)g(call)i(stac)m(k.)150
+2450 y Ft(command)870 2589 y(command)46 b([-pVv])g Fj(command)g
+Ft([)p Fj(arguments)f Ft(...)o(])630 2727 y Fu(Runs)32
+b Fr(command)k Fu(with)d Fr(argumen)m(ts)k Fu(ignoring)c(an)m(y)g
+(shell)h(function)e(named)h Fr(command)p Fu(.)630 2837
+y(Only)39 b(shell)i(builtin)e(commands)h(or)g(commands)f(found)g(b)m(y)
+h(searc)m(hing)h(the)f Ft(PATH)f Fu(are)630 2946 y(executed.)59
+b(If)36 b(there)h(is)f(a)h(shell)f(function)g(named)g
+Ft(ls)p Fu(,)h(running)e(`)p Ft(command)29 b(ls)p Fu(')35
+b(within)630 3056 y(the)c(function)f(will)h(execute)g(the)g(external)g
+(command)g Ft(ls)f Fu(instead)g(of)h(calling)h(the)f(func-)630
+3165 y(tion)36 b(recursiv)m(ely)-8 b(.)56 b(The)34 b
+Ft(-p)h Fu(option)g(means)g(to)h(use)f(a)g(default)h(v)-5
+b(alue)35 b(for)g Ft(PATH)f Fu(that)i(is)630 3275 y(guaran)m(teed)f(to)
+f(\014nd)e(all)j(of)f(the)g(standard)f(utilities.)52
+b(The)33 b(return)g(status)h(in)f(this)h(case)630 3385
+y(is)29 b(127)g(if)g Fr(command)j Fu(cannot)d(b)s(e)e(found)h(or)g(an)g
+(error)h(o)s(ccurred,)f(and)g(the)h(exit)g(status)g(of)630
+3494 y Fr(command)34 b Fu(otherwise.)630 3633 y(If)e(either)h(the)f
+Ft(-V)g Fu(or)g Ft(-v)g Fu(option)h(is)f(supplied,)g(a)h(description)f
+(of)h Fr(command)j Fu(is)c(prin)m(ted.)630 3742 y(The)f
+Ft(-v)h Fu(option)g(causes)g(a)g(single)h(w)m(ord)f(indicating)g(the)g
+(command)g(or)g(\014le)g(name)g(used)630 3852 y(to)40
+b(in)m(v)m(ok)m(e)h Fr(command)h Fu(to)e(b)s(e)e(displa)m(y)m(ed;)44
+b(the)39 b Ft(-V)f Fu(option)i(pro)s(duces)d(a)j(more)f(v)m(erb)s(ose)
+630 3961 y(description.)61 b(In)36 b(this)h(case,)j(the)e(return)e
+(status)h(is)g(zero)h(if)f Fr(command)k Fu(is)c(found,)h(and)630
+4071 y(non-zero)31 b(if)f(not.)150 4238 y Ft(declare)870
+4377 y(declare)46 b([-aAfFgilnrtux])d([-p])k([)p Fj(name)p
+Ft([=)p Fj(value)p Ft(])d(...)o(])630 4515 y Fu(Declare)29
+b(v)-5 b(ariables)28 b(and)e(giv)m(e)j(them)e(attributes.)40
+b(If)27 b(no)g Fr(name)5 b Fu(s)27 b(are)h(giv)m(en,)h(then)e(displa)m
+(y)630 4625 y(the)k(v)-5 b(alues)30 b(of)h(v)-5 b(ariables)31
+b(instead.)630 4763 y(The)k Ft(-p)f Fu(option)i(will)g(displa)m(y)f
+(the)h(attributes)g(and)e(v)-5 b(alues)36 b(of)f(eac)m(h)i
+Fr(name)p Fu(.)55 b(When)36 b Ft(-p)630 4873 y Fu(is)i(used)g(with)g
+Fr(name)43 b Fu(argumen)m(ts,)e(additional)e(options,)i(other)d(than)g
+Ft(-f)g Fu(and)g Ft(-F)p Fu(,)i(are)630 4982 y(ignored.)630
+5121 y(When)g Ft(-p)g Fu(is)g(supplied)f(without)i Fr(name)k
+Fu(argumen)m(ts,)f Ft(declare)38 b Fu(will)j(displa)m(y)f(the)h(at-)630
+5230 y(tributes)31 b(and)f(v)-5 b(alues)31 b(of)g(all)h(v)-5
+b(ariables)31 b(ha)m(ving)h(the)f(attributes)g(sp)s(eci\014ed)f(b)m(y)h
+(the)g(addi-)630 5340 y(tional)k(options.)52 b(If)34
+b(no)g(other)g(options)g(are)g(supplied)f(with)h Ft(-p)p
+Fu(,)g Ft(declare)e Fu(will)j(displa)m(y)p eop end
+%%Page: 53 59
+TeXDict begin 53 58 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(53)630 299 y(the)33
+b(attributes)h(and)e(v)-5 b(alues)33 b(of)g(all)h(shell)f(v)-5
+b(ariables.)50 b(The)32 b Ft(-f)g Fu(option)i(will)f(restrict)h(the)630
+408 y(displa)m(y)d(to)g(shell)f(functions.)630 544 y(The)41
+b Ft(-F)f Fu(option)i(inhibits)e(the)i(displa)m(y)f(of)g(function)g
+(de\014nitions;)47 b(only)41 b(the)g(function)630 654
+y(name)30 b(and)f(attributes)i(are)f(prin)m(ted.)40 b(If)30
+b(the)g Ft(extdebug)e Fu(shell)i(option)g(is)g(enabled)g(using)630
+764 y Ft(shopt)24 b Fu(\(see)i(Section)g(4.3.2)i([The)d(Shopt)f
+(Builtin],)k(page)e(65\),)i(the)d(source)h(\014le)f(name)h(and)630
+873 y(line)31 b(n)m(um)m(b)s(er)e(where)h(eac)m(h)h Fr(name)36
+b Fu(is)30 b(de\014ned)f(are)i(displa)m(y)m(ed)g(as)g(w)m(ell.)41
+b Ft(-F)30 b Fu(implies)h Ft(-f)p Fu(.)630 1009 y(The)36
+b Ft(-g)g Fu(option)h(forces)g(v)-5 b(ariables)37 b(to)g(b)s(e)f
+(created)i(or)e(mo)s(di\014ed)g(at)h(the)g(global)h(scop)s(e,)630
+1119 y(ev)m(en)g(when)e Ft(declare)f Fu(is)j(executed)g(in)f(a)g(shell)
+h(function.)61 b(It)37 b(is)g(ignored)h(in)f(all)h(other)630
+1228 y(cases.)630 1364 y(The)27 b(follo)m(wing)h(options)g(can)f(b)s(e)
+g(used)f(to)i(restrict)g(output)e(to)i(v)-5 b(ariables)28
+b(with)f(the)g(sp)s(ec-)630 1474 y(i\014ed)j(attributes)h(or)f(to)h
+(giv)m(e)h(v)-5 b(ariables)31 b(attributes:)630 1636
+y Ft(-a)384 b Fu(Eac)m(h)36 b Fr(name)k Fu(is)34 b(an)h(indexed)g(arra)
+m(y)g(v)-5 b(ariable)36 b(\(see)f(Section)h(6.7)g([Arra)m(ys],)1110
+1745 y(page)31 b(94\).)630 1908 y Ft(-A)384 b Fu(Eac)m(h)24
+b Fr(name)k Fu(is)23 b(an)g(asso)s(ciativ)m(e)j(arra)m(y)e(v)-5
+b(ariable)24 b(\(see)g(Section)g(6.7)g([Arra)m(ys],)1110
+2017 y(page)31 b(94\).)630 2179 y Ft(-f)384 b Fu(Use)31
+b(function)f(names)g(only)-8 b(.)630 2342 y Ft(-i)384
+b Fu(The)36 b(v)-5 b(ariable)37 b(is)f(to)h(b)s(e)f(treated)h(as)g(an)f
+(in)m(teger;)41 b(arithmetic)c(ev)-5 b(aluation)1110
+2451 y(\(see)29 b(Section)f(6.5)h([Shell)f(Arithmetic],)i(page)e(92\))h
+(is)f(p)s(erformed)e(when)h(the)1110 2561 y(v)-5 b(ariable)31
+b(is)g(assigned)f(a)h(v)-5 b(alue.)630 2723 y Ft(-l)384
+b Fu(When)26 b(the)g(v)-5 b(ariable)27 b(is)f(assigned)g(a)g(v)-5
+b(alue,)28 b(all)f(upp)s(er-case)e(c)m(haracters)j(are)1110
+2833 y(con)m(v)m(erted)k(to)f(lo)m(w)m(er-case.)43 b(The)30
+b(upp)s(er-case)g(attribute)h(is)g(disabled.)630 2995
+y Ft(-n)384 b Fu(Giv)m(e)28 b(eac)m(h)g Fr(name)k Fu(the)27
+b Fr(nameref)44 b Fu(attribute,)28 b(making)f(it)h(a)f(name)f
+(reference)1110 3104 y(to)32 b(another)g(v)-5 b(ariable.)46
+b(That)31 b(other)h(v)-5 b(ariable)33 b(is)f(de\014ned)e(b)m(y)i(the)g
+(v)-5 b(alue)32 b(of)1110 3214 y Fr(name)p Fu(.)54 b(All)35
+b(references,)h(assignmen)m(ts,)h(and)d(attribute)h(mo)s(di\014cations)
+g(to)1110 3324 y Fr(name)p Fu(,)27 b(except)f(for)f(those)h(using)f(or)
+g(c)m(hanging)h(the)f Ft(-n)g Fu(attribute)h(itself,)i(are)1110
+3433 y(p)s(erformed)22 b(on)h(the)g(v)-5 b(ariable)25
+b(referenced)e(b)m(y)g Fr(name)5 b Fu('s)23 b(v)-5 b(alue.)39
+b(The)23 b(nameref)1110 3543 y(attribute)31 b(cannot)g(b)s(e)f(applied)
+g(to)h(arra)m(y)g(v)-5 b(ariables.)630 3705 y Ft(-r)384
+b Fu(Mak)m(e)25 b Fr(name)5 b Fu(s)23 b(readonly)-8 b(.)39
+b(These)24 b(names)f(cannot)h(then)f(b)s(e)g(assigned)h(v)-5
+b(alues)1110 3814 y(b)m(y)30 b(subsequen)m(t)g(assignmen)m(t)h
+(statemen)m(ts)h(or)f(unset.)630 3977 y Ft(-t)384 b Fu(Giv)m(e)33
+b(eac)m(h)h Fr(name)j Fu(the)32 b Ft(trace)f Fu(attribute.)46
+b(T)-8 b(raced)32 b(functions)g(inherit)g(the)1110 4086
+y Ft(DEBUG)26 b Fu(and)h Ft(RETURN)f Fu(traps)h(from)g(the)h(calling)h
+(shell.)40 b(The)27 b(trace)i(attribute)1110 4196 y(has)h(no)g(sp)s
+(ecial)h(meaning)g(for)f(v)-5 b(ariables.)630 4358 y
+Ft(-u)384 b Fu(When)28 b(the)h(v)-5 b(ariable)29 b(is)f(assigned)h(a)f
+(v)-5 b(alue,)30 b(all)f(lo)m(w)m(er-case)i(c)m(haracters)f(are)1110
+4468 y(con)m(v)m(erted)i(to)f(upp)s(er-case.)40 b(The)30
+b(lo)m(w)m(er-case)j(attribute)e(is)g(disabled.)630 4630
+y Ft(-x)384 b Fu(Mark)30 b(eac)m(h)h Fr(name)k Fu(for)29
+b(exp)s(ort)h(to)g(subsequen)m(t)f(commands)h(via)g(the)g(en)m(vi-)1110
+4739 y(ronmen)m(t.)630 4902 y(Using)e(`)p Ft(+)p Fu(')h(instead)f(of)g
+(`)p Ft(-)p Fu(')g(turns)f(o\013)i(the)f(attribute)h(instead,)g(with)f
+(the)g(exceptions)h(that)630 5011 y(`)p Ft(+a)p Fu(')23
+b(and)f(`)p Ft(+A)p Fu(')h(ma)m(y)h(not)f(b)s(e)f(used)g(to)i(destro)m
+(y)g(arra)m(y)f(v)-5 b(ariables)24 b(and)e(`)p Ft(+r)p
+Fu(')h(will)g(not)g(remo)m(v)m(e)630 5121 y(the)36 b(readonly)h
+(attribute.)59 b(When)36 b(used)f(in)h(a)h(function,)g
+Ft(declare)d Fu(mak)m(es)j(eac)m(h)h Fr(name)630 5230
+y Fu(lo)s(cal,)e(as)d(with)h(the)f Ft(local)f Fu(command,)j(unless)d
+(the)i Ft(-g)f Fu(option)h(is)f(used.)49 b(If)33 b(a)h(v)-5
+b(ariable)630 5340 y(name)30 b(is)h(follo)m(w)m(ed)h(b)m(y)e(=)p
+Fr(v)-5 b(alue)p Fu(,)31 b(the)f(v)-5 b(alue)31 b(of)g(the)f(v)-5
+b(ariable)32 b(is)e(set)h(to)g Fr(v)-5 b(alue)p Fu(.)p
+eop end
+%%Page: 54 60
+TeXDict begin 54 59 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(54)630 299 y(When)41
+b(using)g Ft(-a)g Fu(or)h Ft(-A)e Fu(and)h(the)h(comp)s(ound)e
+(assignmen)m(t)i(syn)m(tax)g(to)g(create)h(arra)m(y)630
+408 y(v)-5 b(ariables,)28 b(additional)f(attributes)g(do)f(not)h(tak)m
+(e)h(e\013ect)g(un)m(til)e(subsequen)m(t)g(assignmen)m(ts.)630
+537 y(The)35 b(return)f(status)i(is)g(zero)g(unless)f(an)g(in)m(v)-5
+b(alid)36 b(option)g(is)g(encoun)m(tered,)h(an)f(attempt)630
+647 y(is)c(made)g(to)g(de\014ne)f(a)h(function)g(using)f(`)p
+Ft(-f)f(foo=bar)p Fu(',)h(an)h(attempt)g(is)g(made)g(to)h(assign)630
+757 y(a)42 b(v)-5 b(alue)43 b(to)g(a)f(readonly)g(v)-5
+b(ariable,)47 b(an)42 b(attempt)h(is)f(made)g(to)h(assign)f(a)h(v)-5
+b(alue)42 b(to)h(an)630 866 y(arra)m(y)30 b(v)-5 b(ariable)30
+b(without)g(using)e(the)i(comp)s(ound)e(assignmen)m(t)i(syn)m(tax)g
+(\(see)h(Section)f(6.7)630 976 y([Arra)m(ys],)47 b(page)c(94\),)48
+b(one)43 b(of)g(the)g Fr(names)k Fu(is)c(not)g(a)g(v)-5
+b(alid)43 b(shell)g(v)-5 b(ariable)44 b(name,)i(an)630
+1085 y(attempt)28 b(is)f(made)h(to)f(turn)f(o\013)i(readonly)f(status)g
+(for)g(a)h(readonly)f(v)-5 b(ariable,)29 b(an)e(attempt)630
+1195 y(is)h(made)h(to)g(turn)e(o\013)i(arra)m(y)f(status)h(for)f(an)g
+(arra)m(y)h(v)-5 b(ariable,)30 b(or)e(an)g(attempt)i(is)e(made)g(to)630
+1305 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g
+Ft(-f)p Fu(.)150 1453 y Ft(echo)870 1582 y(echo)47 b([-neE])f([)p
+Fj(arg)g Ft(...])630 1711 y Fu(Output)31 b(the)i Fr(arg)8
+b Fu(s,)33 b(separated)g(b)m(y)g(spaces,)g(terminated)g(with)f(a)h
+(newline.)47 b(The)32 b(return)630 1820 y(status)f(is)f(0)h(unless)f(a)
+h(write)g(error)f(o)s(ccurs.)41 b(If)30 b Ft(-n)g Fu(is)h(sp)s
+(eci\014ed,)f(the)h(trailing)g(newline)g(is)630 1930
+y(suppressed.)38 b(If)29 b(the)h Ft(-e)f Fu(option)h(is)f(giv)m(en,)i
+(in)m(terpretation)g(of)e(the)h(follo)m(wing)h(bac)m(kslash-)630
+2039 y(escap)s(ed)43 b(c)m(haracters)h(is)e(enabled.)78
+b(The)42 b Ft(-E)g Fu(option)h(disables)g(the)g(in)m(terpretation)h(of)
+630 2149 y(these)27 b(escap)s(e)g(c)m(haracters,)i(ev)m(en)e(on)g
+(systems)f(where)g(they)h(are)g(in)m(terpreted)g(b)m(y)f(default.)630
+2259 y(The)32 b Ft(xpg_echo)f Fu(shell)i(option)g(ma)m(y)h(b)s(e)e
+(used)g(to)h(dynamically)h(determine)f(whether)f(or)630
+2368 y(not)h Ft(echo)f Fu(expands)g(these)h(escap)s(e)h(c)m(haracters)g
+(b)m(y)f(default.)48 b Ft(echo)32 b Fu(do)s(es)g(not)i(in)m(terpret)630
+2478 y Ft(--)c Fu(to)h(mean)f(the)h(end)f(of)g(options.)630
+2607 y Ft(echo)f Fu(in)m(terprets)i(the)f(follo)m(wing)i(escap)s(e)f
+(sequences:)630 2755 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630
+2903 y Ft(\\b)384 b Fu(bac)m(kspace)630 3051 y Ft(\\c)g
+Fu(suppress)28 b(further)h(output)630 3200 y Ft(\\e)630
+3309 y(\\E)384 b Fu(escap)s(e)630 3458 y Ft(\\f)g Fu(form)30
+b(feed)630 3606 y Ft(\\n)384 b Fu(new)30 b(line)630 3754
+y Ft(\\r)384 b Fu(carriage)32 b(return)630 3902 y Ft(\\t)384
+b Fu(horizon)m(tal)32 b(tab)630 4051 y Ft(\\v)384 b Fu(v)m(ertical)32
+b(tab)630 4199 y Ft(\\\\)384 b Fu(bac)m(kslash)630 4347
+y Ft(\\0)p Fj(nnn)240 b Fu(the)32 b(eigh)m(t-bit)i(c)m(haracter)g
+(whose)e(v)-5 b(alue)33 b(is)f(the)g(o)s(ctal)i(v)-5
+b(alue)32 b Fr(nnn)f Fu(\(zero)i(to)1110 4457 y(three)e(o)s(ctal)g
+(digits\))630 4605 y Ft(\\x)p Fj(HH)288 b Fu(the)38 b(eigh)m(t-bit)i(c)
+m(haracter)g(whose)e(v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5
+b(alue)39 b Fr(HH)1110 4715 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e
+(digits\))630 4863 y Ft(\\u)p Fj(HHHH)192 b Fu(the)41
+b(Unico)s(de)g(\(ISO/IEC)f(10646\))j(c)m(haracter)g(whose)e(v)-5
+b(alue)41 b(is)g(the)g(hex-)1110 4973 y(adecimal)32 b(v)-5
+b(alue)31 b Fr(HHHH)41 b Fu(\(one)31 b(to)g(four)e(hex)h(digits\))630
+5121 y Ft(\\U)p Fj(HHHHHHHH)1110 5230 y Fu(the)41 b(Unico)s(de)g
+(\(ISO/IEC)f(10646\))j(c)m(haracter)g(whose)e(v)-5 b(alue)41
+b(is)g(the)g(hex-)1110 5340 y(adecimal)32 b(v)-5 b(alue)31
+b Fr(HHHHHHHH)41 b Fu(\(one)31 b(to)g(eigh)m(t)h(hex)e(digits\))p
+eop end
+%%Page: 55 61
+TeXDict begin 55 60 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(55)150 299 y Ft(enable)870
+433 y(enable)46 b([-a])h([-dnps])f([-f)g Fj(filename)p
+Ft(])g([)p Fj(name)g Ft(...)o(])630 567 y Fu(Enable)36
+b(and)f(disable)h(builtin)g(shell)g(commands.)56 b(Disabling)37
+b(a)g(builtin)e(allo)m(ws)i(a)f(disk)630 676 y(command)e(whic)m(h)g
+(has)g(the)g(same)h(name)f(as)h(a)f(shell)h(builtin)e(to)i(b)s(e)f
+(executed)h(without)630 786 y(sp)s(ecifying)27 b(a)g(full)g(pathname,)g
+(ev)m(en)h(though)f(the)g(shell)g(normally)g(searc)m(hes)h(for)f
+(builtins)630 896 y(b)s(efore)35 b(disk)g(commands.)55
+b(If)35 b Ft(-n)g Fu(is)g(used,)h(the)g Fr(name)5 b Fu(s)35
+b(b)s(ecome)h(disabled.)55 b(Otherwise)630 1005 y Fr(name)5
+b Fu(s)44 b(are)h(enabled.)82 b(F)-8 b(or)45 b(example,)k(to)c(use)f
+(the)g Ft(test)f Fu(binary)h(found)f(via)h Ft($PATH)630
+1115 y Fu(instead)31 b(of)f(the)h(shell)f(builtin)g(v)m(ersion,)h(t)m
+(yp)s(e)g(`)p Ft(enable)e(-n)h(test)p Fu('.)630 1249
+y(If)45 b(the)i Ft(-p)e Fu(option)h(is)g(supplied,)j(or)d(no)g
+Fr(name)51 b Fu(argumen)m(ts)46 b(app)s(ear,)k(a)c(list)h(of)f(shell)
+630 1358 y(builtins)37 b(is)h(prin)m(ted.)63 b(With)38
+b(no)f(other)h(argumen)m(ts,)j(the)d(list)g(consists)g(of)g(all)h
+(enabled)630 1468 y(shell)d(builtins.)57 b(The)35 b Ft(-a)h
+Fu(option)g(means)g(to)g(list)h(eac)m(h)g(builtin)f(with)f(an)h
+(indication)h(of)630 1577 y(whether)30 b(or)g(not)h(it)g(is)f(enabled.)
+630 1711 y(The)22 b Ft(-f)f Fu(option)h(means)g(to)h(load)g(the)f(new)g
+(builtin)f(command)h Fr(name)27 b Fu(from)22 b(shared)f(ob)5
+b(ject)630 1821 y Fr(\014lename)p Fu(,)33 b(on)e(systems)h(that)h(supp)
+s(ort)d(dynamic)i(loading.)46 b(The)31 b Ft(-d)g Fu(option)h(will)h
+(delete)630 1931 y(a)e(builtin)f(loaded)h(with)f Ft(-f)p
+Fu(.)630 2064 y(If)j(there)i(are)f(no)g(options,)h(a)f(list)h(of)f(the)
+g(shell)g(builtins)g(is)g(displa)m(y)m(ed.)52 b(The)33
+b Ft(-s)g Fu(option)630 2174 y(restricts)j Ft(enable)d
+Fu(to)j(the)f Fm(posix)f Fu(sp)s(ecial)i(builtins.)54
+b(If)34 b Ft(-s)h Fu(is)g(used)f(with)g Ft(-f)p Fu(,)i(the)f(new)630
+2284 y(builtin)30 b(b)s(ecomes)h(a)f(sp)s(ecial)h(builtin)f(\(see)i
+(Section)f(4.4)g([Sp)s(ecial)g(Builtins],)g(page)g(71\).)630
+2418 y(The)26 b(return)f(status)h(is)g(zero)h(unless)e(a)i
+Fr(name)k Fu(is)26 b(not)g(a)h(shell)f(builtin)g(or)g(there)g(is)g(an)g
+(error)630 2527 y(loading)31 b(a)g(new)f(builtin)g(from)g(a)g(shared)g
+(ob)5 b(ject.)150 2685 y Ft(help)870 2819 y(help)47 b([-dms])f([)p
+Fj(pattern)p Ft(])630 2953 y Fu(Displa)m(y)40 b(helpful)e(information)h
+(ab)s(out)g(builtin)f(commands.)66 b(If)38 b Fr(pattern)h
+Fu(is)g(sp)s(eci\014ed,)630 3063 y Ft(help)28 b Fu(giv)m(es)i(detailed)
+g(help)e(on)h(all)h(commands)e(matc)m(hing)i Fr(pattern)p
+Fu(,)g(otherwise)f(a)g(list)h(of)630 3173 y(the)h(builtins)e(is)i(prin)
+m(ted.)630 3306 y(Options,)f(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)
+m(wing)h(meanings:)630 3465 y Ft(-d)384 b Fu(Displa)m(y)32
+b(a)e(short)g(description)h(of)f(eac)m(h)i Fr(pattern)630
+3623 y Ft(-m)384 b Fu(Displa)m(y)32 b(the)e(description)g(of)h(eac)m(h)
+h Fr(pattern)e Fu(in)g(a)h(manpage-lik)m(e)h(format)630
+3781 y Ft(-s)384 b Fu(Displa)m(y)32 b(only)e(a)h(short)f(usage)h
+(synopsis)e(for)i(eac)m(h)g Fr(pattern)630 3940 y Fu(The)f(return)f
+(status)i(is)f(zero)h(unless)f(no)g(command)h(matc)m(hes)g
+Fr(pattern)p Fu(.)150 4098 y Ft(let)870 4232 y(let)47
+b Fj(expression)e Ft([)p Fj(expression)g Ft(...)o(])630
+4366 y Fu(The)c Ft(let)g Fu(builtin)g(allo)m(ws)i(arithmetic)f(to)h(b)s
+(e)d(p)s(erformed)g(on)i(shell)g(v)-5 b(ariables.)74
+b(Eac)m(h)630 4475 y Fr(expression)31 b Fu(is)g(ev)-5
+b(aluated)32 b(according)f(to)h(the)f(rules)g(giv)m(en)h(b)s(elo)m(w)f
+(in)f(Section)i(6.5)g([Shell)630 4585 y(Arithmetic],)51
+b(page)46 b(92.)87 b(If)45 b(the)g(last)h Fr(expression)g
+Fu(ev)-5 b(aluates)47 b(to)f(0,)k Ft(let)44 b Fu(returns)g(1;)630
+4695 y(otherwise)31 b(0)g(is)f(returned.)150 4853 y Ft(local)870
+4987 y(local)46 b([)p Fj(option)p Ft(])g Fj(name)p Ft([=)p
+Fj(value)p Ft(])e(...)630 5121 y Fu(F)-8 b(or)27 b(eac)m(h)g(argumen)m
+(t,)g(a)f(lo)s(cal)h(v)-5 b(ariable)27 b(named)e Fr(name)31
+b Fu(is)26 b(created,)i(and)d(assigned)h Fr(v)-5 b(alue)p
+Fu(.)630 5230 y(The)37 b Fr(option)h Fu(can)f(b)s(e)g(an)m(y)h(of)f
+(the)h(options)g(accepted)g(b)m(y)g Ft(declare)p Fu(.)59
+b Ft(local)36 b Fu(can)i(only)630 5340 y(b)s(e)j(used)h(within)f(a)i
+(function;)48 b(it)42 b(mak)m(es)h(the)f(v)-5 b(ariable)43
+b Fr(name)48 b Fu(ha)m(v)m(e)43 b(a)f(visible)h(scop)s(e)p
+eop end
+%%Page: 56 62
+TeXDict begin 56 61 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(56)630 299 y(restricted)44
+b(to)f(that)h(function)e(and)g(its)i(c)m(hildren.)78
+b(If)42 b Fr(name)48 b Fu(is)43 b(`)p Ft(-)p Fu(',)j(the)d(set)h(of)f
+(shell)630 408 y(options)34 b(is)f(made)g(lo)s(cal)i(to)f(the)f
+(function)g(in)g(whic)m(h)g Ft(local)f Fu(is)h(in)m(v)m(ok)m(ed:)48
+b(shell)34 b(options)630 518 y(c)m(hanged)e(using)e(the)i
+Ft(set)e Fu(builtin)h(inside)g(the)g(function)g(are)g(restored)h(to)g
+(their)f(original)630 628 y(v)-5 b(alues)25 b(when)e(the)i(function)f
+(returns.)37 b(The)24 b(return)f(status)i(is)f(zero)i(unless)d
+Ft(local)g Fu(is)i(used)630 737 y(outside)k(a)f(function,)h(an)f(in)m
+(v)-5 b(alid)29 b Fr(name)k Fu(is)28 b(supplied,)g(or)g
+Fr(name)34 b Fu(is)28 b(a)h(readonly)f(v)-5 b(ariable.)150
+887 y Ft(logout)870 1016 y(logout)46 b([)p Fj(n)p Ft(])630
+1146 y Fu(Exit)31 b(a)g(login)g(shell,)g(returning)e(a)i(status)g(of)f
+Fr(n)g Fu(to)h(the)g(shell's)f(paren)m(t.)150 1295 y
+Ft(mapfile)870 1425 y(mapfile)46 b([-d)h Fj(delim)p Ft(])f([-n)h
+Fj(count)p Ft(])f([-O)h Fj(origin)p Ft(])f([-s)g Fj(count)p
+Ft(])1061 1534 y([-t])h([-u)f Fj(fd)p Ft(])h([-C)g Fj(callback)p
+Ft(])f([-c)g Fj(quantum)p Ft(])g([)p Fj(array)p Ft(])630
+1664 y Fu(Read)38 b(lines)f(from)g(the)h(standard)e(input)g(in)m(to)j
+(the)e(indexed)g(arra)m(y)h(v)-5 b(ariable)38 b Fr(arra)m(y)p
+Fu(,)i(or)630 1773 y(from)28 b(\014le)h(descriptor)f
+Fr(fd)k Fu(if)c(the)h Ft(-u)f Fu(option)h(is)g(supplied.)39
+b(The)28 b(v)-5 b(ariable)29 b Ft(MAPFILE)e Fu(is)i(the)630
+1883 y(default)i Fr(arra)m(y)p Fu(.)41 b(Options,)30
+b(if)g(supplied,)g(ha)m(v)m(e)h(the)g(follo)m(wing)h(meanings:)630
+2032 y Ft(-d)384 b Fu(The)37 b(\014rst)g(c)m(haracter)i(of)f
+Fr(delim)g Fu(is)f(used)g(to)h(terminate)h(eac)m(h)g(input)d(line,)1110
+2142 y(rather)41 b(than)h(newline.)74 b(If)41 b Fr(delim)h
+Fu(is)g(the)f(empt)m(y)h(string,)j Ft(mapfile)40 b Fu(will)1110
+2252 y(terminate)31 b(a)g(line)g(when)e(it)i(reads)f(a)h(NUL)g(c)m
+(haracter.)630 2401 y Ft(-n)384 b Fu(Cop)m(y)30 b(at)h(most)g
+Fr(coun)m(t)i Fu(lines.)41 b(If)30 b Fr(coun)m(t)j Fu(is)d(0,)h(all)h
+(lines)e(are)h(copied.)630 2550 y Ft(-O)384 b Fu(Begin)31
+b(assigning)g(to)g Fr(arra)m(y)39 b Fu(at)31 b(index)f
+Fr(origin)p Fu(.)41 b(The)30 b(default)h(index)f(is)g(0.)630
+2700 y Ft(-s)384 b Fu(Discard)31 b(the)f(\014rst)g Fr(coun)m(t)j
+Fu(lines)e(read.)630 2849 y Ft(-t)384 b Fu(Remo)m(v)m(e)32
+b(a)f(trailing)g Fr(delim)g Fu(\(default)g(newline\))f(from)g(eac)m(h)i
+(line)f(read.)630 2999 y Ft(-u)384 b Fu(Read)31 b(lines)f(from)g
+(\014le)h(descriptor)f Fr(fd)j Fu(instead)e(of)f(the)h(standard)e
+(input.)630 3148 y Ft(-C)384 b Fu(Ev)-5 b(aluate)26 b
+Fr(callbac)m(k)33 b Fu(eac)m(h)26 b(time)g Fr(quan)m(tum)f
+Fu(lines)g(are)g(read.)39 b(The)25 b Ft(-c)f Fu(option)1110
+3258 y(sp)s(eci\014es)30 b Fr(quan)m(tum)p Fu(.)630 3407
+y Ft(-c)384 b Fu(Sp)s(ecify)30 b(the)g(n)m(um)m(b)s(er)f(of)i(lines)f
+(read)h(b)s(et)m(w)m(een)g(eac)m(h)g(call)h(to)f Fr(callbac)m(k)p
+Fu(.)630 3557 y(If)36 b Ft(-C)g Fu(is)g(sp)s(eci\014ed)g(without)g
+Ft(-c)p Fu(,)h(the)g(default)f(quan)m(tum)g(is)h(5000.)60
+b(When)36 b Fr(callbac)m(k)44 b Fu(is)630 3666 y(ev)-5
+b(aluated,)30 b(it)e(is)g(supplied)f(the)h(index)f(of)i(the)f(next)g
+(arra)m(y)g(elemen)m(t)h(to)g(b)s(e)e(assigned)i(and)630
+3776 y(the)39 b(line)g(to)h(b)s(e)e(assigned)h(to)h(that)f(elemen)m(t)i
+(as)e(additional)h(argumen)m(ts.)66 b Fr(callbac)m(k)47
+b Fu(is)630 3885 y(ev)-5 b(aluated)32 b(after)e(the)h(line)g(is)f(read)
+g(but)g(b)s(efore)g(the)h(arra)m(y)g(elemen)m(t)g(is)g(assigned.)630
+4015 y(If)25 b(not)g(supplied)f(with)h(an)g(explicit)i(origin,)g
+Ft(mapfile)c Fu(will)j(clear)g Fr(arra)m(y)34 b Fu(b)s(efore)24
+b(assigning)630 4125 y(to)31 b(it.)630 4254 y Ft(mapfile)41
+b Fu(returns)g(successfully)i(unless)e(an)i(in)m(v)-5
+b(alid)43 b(option)g(or)g(option)g(argumen)m(t)g(is)630
+4364 y(supplied,)29 b Fr(arra)m(y)39 b Fu(is)30 b(in)m(v)-5
+b(alid)31 b(or)g(unassignable,)f(or)h Fr(arra)m(y)38
+b Fu(is)31 b(not)f(an)h(indexed)e(arra)m(y)-8 b(.)150
+4513 y Ft(printf)870 4643 y(printf)46 b([-v)h Fj(var)p
+Ft(])g Fj(format)f Ft([)p Fj(arguments)p Ft(])630 4772
+y Fu(W)-8 b(rite)27 b(the)g(formatted)f Fr(argumen)m(ts)k
+Fu(to)d(the)f(standard)f(output)h(under)e(the)i(con)m(trol)i(of)e(the)
+630 4882 y Fr(format)p Fu(.)66 b(The)39 b Ft(-v)f Fu(option)h(causes)g
+(the)g(output)g(to)g(b)s(e)f(assigned)h(to)h(the)f(v)-5
+b(ariable)39 b Fr(v)-5 b(ar)630 4991 y Fu(rather)30 b(than)g(b)s(eing)g
+(prin)m(ted)g(to)h(the)g(standard)e(output.)630 5121
+y(The)36 b Fr(format)i Fu(is)f(a)f(c)m(haracter)i(string)e(whic)m(h)g
+(con)m(tains)i(three)e(t)m(yp)s(es)g(of)h(ob)5 b(jects:)53
+b(plain)630 5230 y(c)m(haracters,)41 b(whic)m(h)c(are)h(simply)e
+(copied)i(to)g(standard)f(output,)i(c)m(haracter)g(escap)s(e)e(se-)630
+5340 y(quences,)g(whic)m(h)f(are)g(con)m(v)m(erted)h(and)f(copied)g(to)
+g(the)g(standard)f(output,)i(and)f(format)p eop end
+%%Page: 57 63
+TeXDict begin 57 62 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(57)630 299 y(sp)s
+(eci\014cations,)39 b(eac)m(h)e(of)g(whic)m(h)f(causes)g(prin)m(ting)g
+(of)h(the)f(next)h(successiv)m(e)g Fr(argumen)m(t)p Fu(.)630
+408 y(In)24 b(addition)h(to)g(the)g(standard)f Ft(printf\(1\))e
+Fu(formats,)27 b Ft(printf)c Fu(in)m(terprets)i(the)f(follo)m(wing)630
+518 y(extensions:)630 690 y Ft(\045b)384 b Fu(Causes)38
+b Ft(printf)f Fu(to)j(expand)e(bac)m(kslash)h(escap)s(e)g(sequences)g
+(in)f(the)h(cor-)1110 800 y(resp)s(onding)31 b Fr(argumen)m(t)j
+Fu(in)e(the)h(same)f(w)m(a)m(y)h(as)g Ft(echo)c(-e)j
+Fu(\(see)h(Section)g(4.2)1110 909 y([Bash)e(Builtins],)g(page)g(50\).)
+630 1082 y Ft(\045q)384 b Fu(Causes)32 b Ft(printf)e
+Fu(to)i(output)g(the)g(corresp)s(onding)f Fr(argumen)m(t)j
+Fu(in)d(a)i(format)1110 1191 y(that)e(can)g(b)s(e)e(reused)h(as)h
+(shell)f(input.)630 1363 y Ft(\045\()p Fj(datefmt)p Ft(\)T)1110
+1473 y Fu(Causes)f Ft(printf)e Fu(to)j(output)f(the)g(date-time)i
+(string)e(resulting)h(from)e(using)1110 1583 y Fr(datefm)m(t)45
+b Fu(as)d(a)g(format)g(string)g(for)g Ft(strftime)p Fu(\(3\).)74
+b(The)41 b(corresp)s(onding)1110 1692 y Fr(argumen)m(t)h
+Fu(is)e(an)g(in)m(teger)i(represen)m(ting)e(the)g(n)m(um)m(b)s(er)f(of)
+h(seconds)g(since)1110 1802 y(the)24 b(ep)s(o)s(c)m(h.)38
+b(Tw)m(o)24 b(sp)s(ecial)h(argumen)m(t)f(v)-5 b(alues)24
+b(ma)m(y)h(b)s(e)e(used:)36 b(-1)25 b(represen)m(ts)1110
+1911 y(the)30 b(curren)m(t)g(time,)h(and)e(-2)i(represen)m(ts)f(the)g
+(time)h(the)f(shell)g(w)m(as)g(in)m(v)m(ok)m(ed.)1110
+2021 y(If)38 b(no)g(argumen)m(t)h(is)f(sp)s(eci\014ed,)i(con)m(v)m
+(ersion)f(b)s(eha)m(v)m(es)g(as)g(if)f(-1)h(had)f(b)s(een)1110
+2131 y(giv)m(en.)k(This)29 b(is)i(an)f(exception)i(to)f(the)f(usual)g
+Ft(printf)f Fu(b)s(eha)m(vior.)630 2303 y(Argumen)m(ts)f(to)h
+(non-string)e(format)i(sp)s(eci\014ers)e(are)h(treated)h(as)g(C)e
+(language)j(constan)m(ts,)630 2412 y(except)22 b(that)g(a)g(leading)g
+(plus)e(or)h(min)m(us)f(sign)i(is)f(allo)m(w)m(ed,)k(and)c(if)g(the)g
+(leading)h(c)m(haracter)h(is)630 2522 y(a)i(single)g(or)f(double)h
+(quote,)h(the)f(v)-5 b(alue)25 b(is)f(the)h(ASCI)s(I)e(v)-5
+b(alue)25 b(of)f(the)h(follo)m(wing)h(c)m(haracter.)630
+2663 y(The)31 b Fr(format)i Fu(is)f(reused)e(as)i(necessary)f(to)i
+(consume)e(all)h(of)f(the)h Fr(argumen)m(ts)p Fu(.)44
+b(If)30 b(the)i Fr(for-)630 2772 y(mat)c Fu(requires)e(more)g
+Fr(argumen)m(ts)k Fu(than)25 b(are)i(supplied,)e(the)h(extra)h(format)f
+(sp)s(eci\014cations)630 2882 y(b)s(eha)m(v)m(e)j(as)g(if)f(a)h(zero)g
+(v)-5 b(alue)29 b(or)g(n)m(ull)f(string,)h(as)g(appropriate,)g(had)f(b)
+s(een)g(supplied.)38 b(The)630 2992 y(return)29 b(v)-5
+b(alue)31 b(is)g(zero)g(on)f(success,)h(non-zero)g(on)f(failure.)150
+3164 y Ft(read)870 3305 y(read)47 b([-ers])f([-a)h Fj(aname)p
+Ft(])f([-d)h Fj(delim)p Ft(])f([-i)h Fj(text)p Ft(])f([-n)h
+Fj(nchars)p Ft(])1061 3414 y([-N)g Fj(nchars)p Ft(])f([-p)h
+Fj(prompt)p Ft(])e([-t)i Fj(timeout)p Ft(])f([-u)h Fj(fd)p
+Ft(])g([)p Fj(name)f Ft(...)o(])630 3555 y Fu(One)38
+b(line)g(is)g(read)g(from)g(the)g(standard)f(input,)j(or)e(from)f(the)i
+(\014le)f(descriptor)g Fr(fd)j Fu(sup-)630 3665 y(plied)34
+b(as)h(an)f(argumen)m(t)h(to)g(the)f Ft(-u)g Fu(option,)i(split)f(in)m
+(to)g(w)m(ords)f(as)g(describ)s(ed)g(ab)s(o)m(v)m(e)h(in)630
+3774 y(Section)j(3.5.7)h([W)-8 b(ord)38 b(Splitting],)i(page)e(31,)j
+(and)36 b(the)i(\014rst)f(w)m(ord)g(is)g(assigned)h(to)g(the)630
+3884 y(\014rst)32 b Fr(name)p Fu(,)h(the)g(second)g(w)m(ord)f(to)h(the)
+g(second)g Fr(name)p Fu(,)g(and)f(so)h(on.)47 b(If)32
+b(there)h(are)g(more)630 3994 y(w)m(ords)39 b(than)g(names,)j(the)e
+(remaining)f(w)m(ords)g(and)g(their)h(in)m(terv)m(ening)g(delimiters)h
+(are)630 4103 y(assigned)29 b(to)h(the)g(last)g Fr(name)p
+Fu(.)40 b(If)29 b(there)g(are)h(few)m(er)f(w)m(ords)g(read)g(from)g
+(the)g(input)g(stream)630 4213 y(than)35 b(names,)i(the)e(remaining)h
+(names)f(are)h(assigned)f(empt)m(y)h(v)-5 b(alues.)56
+b(The)34 b(c)m(haracters)630 4322 y(in)e(the)h(v)-5 b(alue)33
+b(of)g(the)g Ft(IFS)f Fu(v)-5 b(ariable)33 b(are)h(used)d(to)j(split)f
+(the)g(line)g(in)m(to)g(w)m(ords)g(using)f(the)630 4432
+y(same)d(rules)f(the)g(shell)h(uses)f(for)g(expansion)g(\(describ)s(ed)
+g(ab)s(o)m(v)m(e)i(in)e(Section)h(3.5.7)h([W)-8 b(ord)630
+4542 y(Splitting],)38 b(page)f(31\).)60 b(The)35 b(bac)m(kslash)i(c)m
+(haracter)h(`)p Ft(\\)p Fu(')e(ma)m(y)h(b)s(e)f(used)f(to)i(remo)m(v)m
+(e)h(an)m(y)630 4651 y(sp)s(ecial)i(meaning)g(for)f(the)g(next)h(c)m
+(haracter)h(read)e(and)g(for)g(line)h(con)m(tin)m(uation.)69
+b(If)39 b(no)630 4761 y(names)c(are)h(supplied,)f(the)h(line)g(read)f
+(is)g(assigned)h(to)g(the)f(v)-5 b(ariable)36 b Ft(REPLY)p
+Fu(.)54 b(The)35 b(exit)630 4870 y(status)f(is)f(zero,)i(unless)e
+(end-of-\014le)h(is)f(encoun)m(tered,)i Ft(read)e Fu(times)h(out)f
+(\(in)h(whic)m(h)f(case)630 4980 y(the)g(status)h(is)f(greater)i(than)e
+(128\),)j(a)e(v)-5 b(ariable)34 b(assignmen)m(t)g(error)f(\(suc)m(h)g
+(as)g(assigning)630 5089 y(to)38 b(a)f(readonly)g(v)-5
+b(ariable\))38 b(o)s(ccurs,)h(or)e(an)g(in)m(v)-5 b(alid)38
+b(\014le)f(descriptor)g(is)g(supplied)e(as)j(the)630
+5199 y(argumen)m(t)31 b(to)g Ft(-u)p Fu(.)630 5340 y(Options,)f(if)h
+(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)p
+eop end
+%%Page: 58 64
+TeXDict begin 58 63 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(58)630 299 y Ft(-a)30
+b Fj(aname)114 b Fu(The)34 b(w)m(ords)f(are)i(assigned)f(to)h(sequen)m
+(tial)h(indices)e(of)g(the)g(arra)m(y)h(v)-5 b(ariable)1110
+408 y Fr(aname)p Fu(,)29 b(starting)h(at)f(0.)40 b(All)29
+b(elemen)m(ts)h(are)e(remo)m(v)m(ed)i(from)d Fr(aname)34
+b Fu(b)s(efore)1110 518 y(the)d(assignmen)m(t.)41 b(Other)30
+b Fr(name)36 b Fu(argumen)m(ts)30 b(are)h(ignored.)630
+671 y Ft(-d)f Fj(delim)114 b Fu(The)41 b(\014rst)h(c)m(haracter)h(of)f
+Fr(delim)g Fu(is)g(used)g(to)g(terminate)h(the)f(input)f(line,)1110
+781 y(rather)31 b(than)g(newline.)42 b(If)30 b Fr(delim)h
+Fu(is)g(the)h(empt)m(y)f(string,)g Ft(read)f Fu(will)h(termi-)1110
+891 y(nate)g(a)g(line)f(when)g(it)h(reads)f(a)h(NUL)f(c)m(haracter.)630
+1044 y Ft(-e)384 b Fu(Readline)46 b(\(see)g(Chapter)e(8)h([Command)f
+(Line)h(Editing],)50 b(page)45 b(107\))i(is)1110 1154
+y(used)37 b(to)i(obtain)g(the)f(line.)65 b(Readline)39
+b(uses)e(the)i(curren)m(t)f(\(or)g(default,)j(if)1110
+1263 y(line)h(editing)g(w)m(as)g(not)g(previously)f(activ)m(e\))k
+(editing)d(settings,)j(but)c(uses)1110 1373 y(Readline's)31
+b(default)g(\014lename)f(completion.)630 1526 y Ft(-i)g
+Fj(text)162 b Fu(If)36 b(Readline)i(is)f(b)s(eing)g(used)f(to)h(read)g
+(the)g(line,)j Fr(text)f Fu(is)e(placed)h(in)m(to)g(the)1110
+1636 y(editing)31 b(bu\013er)e(b)s(efore)h(editing)h(b)s(egins.)630
+1789 y Ft(-n)f Fj(nchars)66 b Ft(read)38 b Fu(returns)f(after)j
+(reading)f Fr(nc)m(hars)j Fu(c)m(haracters)e(rather)f(than)g(w)m
+(aiting)1110 1899 y(for)d(a)h(complete)h(line)f(of)g(input,)g(but)f
+(honors)g(a)h(delimiter)g(if)f(few)m(er)h(than)1110 2008
+y Fr(nc)m(hars)d Fu(c)m(haracters)e(are)e(read)h(b)s(efore)f(the)g
+(delimiter.)630 2162 y Ft(-N)g Fj(nchars)66 b Ft(read)39
+b Fu(returns)f(after)j(reading)e(exactly)j Fr(nc)m(hars)h
+Fu(c)m(haracters)f(rather)d(than)1110 2271 y(w)m(aiting)32
+b(for)f(a)g(complete)i(line)e(of)g(input,)g(unless)f(EOF)h(is)g(encoun)
+m(tered)g(or)1110 2381 y Ft(read)f Fu(times)i(out.)43
+b(Delimiter)33 b(c)m(haracters)f(encoun)m(tered)g(in)f(the)g(input)g
+(are)1110 2491 y(not)g(treated)h(sp)s(ecially)f(and)f(do)h(not)g(cause)
+g Ft(read)e Fu(to)j(return)d(un)m(til)i Fr(nc)m(hars)1110
+2600 y Fu(c)m(haracters)26 b(are)f(read.)38 b(The)24
+b(result)g(is)h(not)f(split)h(on)f(the)h(c)m(haracters)h(in)e
+Ft(IFS)p Fu(;)1110 2710 y(the)e(in)m(ten)m(t)i(is)e(that)h(the)f(v)-5
+b(ariable)23 b(is)f(assigned)g(exactly)i(the)e(c)m(haracters)i(read)
+1110 2819 y(\(with)30 b(the)h(exception)h(of)e(bac)m(kslash;)h(see)g
+(the)g Ft(-r)f Fu(option)h(b)s(elo)m(w\).)630 2973 y
+Ft(-p)f Fj(prompt)66 b Fu(Displa)m(y)38 b Fr(prompt)p
+Fu(,)g(without)e(a)h(trailing)h(newline,)h(b)s(efore)d(attempting)i(to)
+1110 3082 y(read)f(an)m(y)h(input.)60 b(The)37 b(prompt)g(is)g(displa)m
+(y)m(ed)h(only)f(if)g(input)g(is)g(coming)1110 3192 y(from)30
+b(a)h(terminal.)630 3345 y Ft(-r)384 b Fu(If)21 b(this)h(option)g(is)f
+(giv)m(en,)k(bac)m(kslash)d(do)s(es)f(not)h(act)h(as)f(an)f(escap)s(e)h
+(c)m(haracter.)1110 3455 y(The)30 b(bac)m(kslash)i(is)f(considered)g
+(to)h(b)s(e)e(part)h(of)g(the)g(line.)43 b(In)30 b(particular,)i(a)1110
+3565 y(bac)m(kslash-newline)26 b(pair)e(ma)m(y)h(not)g(then)g(b)s(e)f
+(used)g(as)h(a)g(line)g(con)m(tin)m(uation.)630 3718
+y Ft(-s)384 b Fu(Silen)m(t)28 b(mo)s(de.)40 b(If)27 b(input)f(is)i
+(coming)g(from)f(a)h(terminal,)h(c)m(haracters)g(are)f(not)1110
+3828 y(ec)m(ho)s(ed.)630 3981 y Ft(-t)i Fj(timeout)1110
+4091 y Fu(Cause)42 b Ft(read)g Fu(to)h(time)h(out)f(and)f(return)f
+(failure)i(if)g(a)g(complete)h(line)f(of)1110 4200 y(input)26
+b(\(or)h(a)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)g(of)h(c)m(haracters\))h
+(is)f(not)g(read)g(within)f Fr(time-)1110 4310 y(out)37
+b Fu(seconds.)53 b Fr(timeout)38 b Fu(ma)m(y)d(b)s(e)f(a)h(decimal)h(n)
+m(um)m(b)s(er)d(with)h(a)h(fractional)1110 4419 y(p)s(ortion)29
+b(follo)m(wing)h(the)f(decimal)h(p)s(oin)m(t.)40 b(This)29
+b(option)g(is)g(only)g(e\013ectiv)m(e)j(if)1110 4529
+y Ft(read)j Fu(is)i(reading)g(input)e(from)h(a)h(terminal,)i(pip)s(e,)e
+(or)g(other)f(sp)s(ecial)i(\014le;)1110 4639 y(it)31
+b(has)g(no)g(e\013ect)h(when)e(reading)h(from)g(regular)g(\014les.)42
+b(If)30 b Ft(read)g Fu(times)h(out,)1110 4748 y Ft(read)d
+Fu(sa)m(v)m(es)j(an)m(y)f(partial)h(input)d(read)i(in)m(to)h(the)e(sp)s
+(eci\014ed)g(v)-5 b(ariable)31 b Fr(name)p Fu(.)1110
+4858 y(If)k Fr(timeout)j Fu(is)e(0,)h Ft(read)e Fu(returns)f
+(immediately)-8 b(,)39 b(without)c(trying)h(to)g(read)1110
+4967 y(and)30 b(data.)44 b(The)30 b(exit)i(status)f(is)g(0)g(if)g
+(input)f(is)h(a)m(v)-5 b(ailable)34 b(on)c(the)i(sp)s(eci\014ed)1110
+5077 y(\014le)g(descriptor,)g(non-zero)h(otherwise.)46
+b(The)31 b(exit)i(status)f(is)g(greater)h(than)1110 5187
+y(128)f(if)e(the)h(timeout)g(is)f(exceeded.)630 5340
+y Ft(-u)g Fj(fd)258 b Fu(Read)31 b(input)e(from)h(\014le)g(descriptor)h
+Fr(fd)p Fu(.)p eop end
+%%Page: 59 65
+TeXDict begin 59 64 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(59)150 299 y Ft(readarray)870
+408 y(readarray)45 b([-d)i Fj(delim)p Ft(])f([-n)h Fj(count)p
+Ft(])f([-O)h Fj(origin)p Ft(])f([-s)h Fj(count)p Ft(])1061
+518 y([-t])g([-u)f Fj(fd)p Ft(])h([-C)g Fj(callback)p
+Ft(])f([-c)g Fj(quantum)p Ft(])g([)p Fj(array)p Ft(])630
+650 y Fu(Read)38 b(lines)f(from)g(the)h(standard)e(input)g(in)m(to)j
+(the)e(indexed)g(arra)m(y)h(v)-5 b(ariable)38 b Fr(arra)m(y)p
+Fu(,)i(or)630 760 y(from)30 b(\014le)g(descriptor)h Fr(fd)i
+Fu(if)d(the)h Ft(-u)e Fu(option)i(is)g(supplied.)630
+892 y(A)f(synon)m(ym)g(for)g Ft(mapfile)p Fu(.)150 1047
+y Ft(source)870 1179 y(source)46 b Fj(filename)630 1312
+y Fu(A)30 b(synon)m(ym)g(for)g Ft(.)g Fu(\(see)i(Section)f(4.1)g
+([Bourne)g(Shell)f(Builtins],)h(page)g(43\).)150 1467
+y Ft(type)870 1599 y(type)47 b([-afptP])e([)p Fj(name)i
+Ft(...)o(])630 1731 y Fu(F)-8 b(or)42 b(eac)m(h)g Fr(name)p
+Fu(,)i(indicate)e(ho)m(w)g(it)f(w)m(ould)g(b)s(e)g(in)m(terpreted)g(if)
+g(used)f(as)i(a)f(command)630 1841 y(name.)630 1973 y(If)g(the)g
+Ft(-t)g Fu(option)h(is)f(used,)j Ft(type)c Fu(prin)m(ts)h(a)h(single)g
+(w)m(ord)f(whic)m(h)g(is)g(one)h(of)g(`)p Ft(alias)p
+Fu(',)630 2083 y(`)p Ft(function)p Fu(',)32 b(`)p Ft(builtin)p
+Fu(',)g(`)p Ft(file)p Fu(')g(or)h(`)p Ft(keyword)p Fu(',)f(if)h
+Fr(name)38 b Fu(is)33 b(an)f(alias,)j(shell)e(function,)630
+2192 y(shell)i(builtin,)g(disk)g(\014le,)h(or)e(shell)h(reserv)m(ed)g
+(w)m(ord,)h(resp)s(ectiv)m(ely)-8 b(.)55 b(If)34 b(the)h
+Fr(name)40 b Fu(is)35 b(not)630 2302 y(found,)29 b(then)h(nothing)h(is)
+f(prin)m(ted,)g(and)g Ft(type)f Fu(returns)g(a)i(failure)g(status.)630
+2434 y(If)25 b(the)g Ft(-p)g Fu(option)h(is)f(used,)h
+Ft(type)e Fu(either)h(returns)g(the)g(name)g(of)h(the)f(disk)g(\014le)g
+(that)h(w)m(ould)630 2544 y(b)s(e)k(executed,)h(or)g(nothing)f(if)g
+Ft(-t)g Fu(w)m(ould)g(not)h(return)e(`)p Ft(file)p Fu('.)630
+2676 y(The)h Ft(-P)g Fu(option)h(forces)g(a)g(path)f(searc)m(h)h(for)g
+(eac)m(h)g Fr(name)p Fu(,)g(ev)m(en)g(if)g Ft(-t)f Fu(w)m(ould)g(not)h
+(return)630 2785 y(`)p Ft(file)p Fu('.)630 2918 y(If)f(a)g(command)g
+(is)g(hashed,)f Ft(-p)h Fu(and)f Ft(-P)g Fu(prin)m(t)h(the)g(hashed)f
+(v)-5 b(alue,)31 b(whic)m(h)f(is)g(not)g(neces-)630 3027
+y(sarily)h(the)f(\014le)h(that)g(app)s(ears)e(\014rst)h(in)g
+Ft($PATH)p Fu(.)630 3160 y(If)22 b(the)i Ft(-a)e Fu(option)h(is)g
+(used,)h Ft(type)e Fu(returns)f(all)j(of)f(the)g(places)h(that)f(con)m
+(tain)i(an)d(executable)630 3269 y(named)32 b Fr(\014le)p
+Fu(.)49 b(This)32 b(includes)h(aliases)h(and)e(functions,)i(if)f(and)f
+(only)h(if)g(the)g Ft(-p)f Fu(option)i(is)630 3379 y(not)d(also)g
+(used.)630 3511 y(If)f(the)g Ft(-f)g Fu(option)g(is)h(used,)e
+Ft(type)g Fu(do)s(es)h(not)h(attempt)g(to)g(\014nd)d(shell)j
+(functions,)f(as)g(with)630 3621 y(the)h Ft(command)d
+Fu(builtin.)630 3753 y(The)j(return)f(status)h(is)g(zero)h(if)f(all)h
+(of)f(the)h Fr(names)i Fu(are)e(found,)e(non-zero)i(if)f(an)m(y)g(are)h
+(not)630 3862 y(found.)150 4017 y Ft(typeset)870 4150
+y(typeset)46 b([-afFgrxilnrtux])d([-p])k([)p Fj(name)p
+Ft([=)p Fj(value)p Ft(])d(...)o(])630 4282 y Fu(The)31
+b Ft(typeset)e Fu(command)i(is)g(supplied)f(for)h(compatibilit)m(y)i
+(with)e(the)g(Korn)f(shell.)44 b(It)31 b(is)630 4391
+y(a)g(synon)m(ym)f(for)g(the)g Ft(declare)f Fu(builtin)h(command.)150
+4546 y Ft(ulimit)870 4679 y(ulimit)46 b([-HSabcdefiklmnpqrstuvxPT)o(])c
+([)p Fj(limit)p Ft(])630 4811 y(ulimit)25 b Fu(pro)m(vides)h(con)m
+(trol)i(o)m(v)m(er)g(the)f(resources)f(a)m(v)-5 b(ailable)29
+b(to)e(pro)s(cesses)f(started)h(b)m(y)g(the)630 4921
+y(shell,)i(on)f(systems)g(that)h(allo)m(w)h(suc)m(h)e(con)m(trol.)41
+b(If)28 b(an)g(option)h(is)f(giv)m(en,)i(it)e(is)h(in)m(terpreted)630
+5030 y(as)i(follo)m(ws:)630 5185 y Ft(-S)384 b Fu(Change)30
+b(and)g(rep)s(ort)g(the)g(soft)h(limit)g(asso)s(ciated)h(with)e(a)h
+(resource.)630 5340 y Ft(-H)384 b Fu(Change)30 b(and)g(rep)s(ort)g(the)
+g(hard)g(limit)h(asso)s(ciated)h(with)e(a)h(resource.)p
+eop end
+%%Page: 60 66
+TeXDict begin 60 65 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(60)630 299 y Ft(-a)384
+b Fu(All)31 b(curren)m(t)f(limits)h(are)g(rep)s(orted.)630
+454 y Ft(-b)384 b Fu(The)30 b(maxim)m(um)g(so)s(c)m(k)m(et)i(bu\013er)e
+(size.)630 610 y Ft(-c)384 b Fu(The)30 b(maxim)m(um)g(size)h(of)g(core)
+g(\014les)f(created.)630 765 y Ft(-d)384 b Fu(The)30
+b(maxim)m(um)g(size)h(of)g(a)g(pro)s(cess's)f(data)h(segmen)m(t.)630
+921 y Ft(-e)384 b Fu(The)30 b(maxim)m(um)g(sc)m(heduling)h(priorit)m(y)
+f(\()p Ft(")p Fu(nice)p Ft(")p Fu(\).)630 1076 y Ft(-f)384
+b Fu(The)30 b(maxim)m(um)g(size)h(of)g(\014les)f(written)h(b)m(y)f(the)
+g(shell)h(and)f(its)h(c)m(hildren.)630 1232 y Ft(-i)384
+b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(p)s(ending)e
+(signals.)630 1387 y Ft(-k)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s
+(er)f(of)i(kqueues)f(that)h(ma)m(y)g(b)s(e)e(allo)s(cated.)630
+1543 y Ft(-l)384 b Fu(The)30 b(maxim)m(um)g(size)h(that)g(ma)m(y)g(b)s
+(e)f(lo)s(c)m(k)m(ed)i(in)m(to)f(memory)-8 b(.)630 1698
+y Ft(-m)384 b Fu(The)36 b(maxim)m(um)g(residen)m(t)h(set)g(size)g
+(\(man)m(y)g(systems)f(do)h(not)f(honor)g(this)1110 1808
+y(limit\).)630 1963 y Ft(-n)384 b Fu(The)38 b(maxim)m(um)h(n)m(um)m(b)s
+(er)e(of)i(op)s(en)f(\014le)h(descriptors)g(\(most)g(systems)g(do)1110
+2073 y(not)31 b(allo)m(w)g(this)g(v)-5 b(alue)31 b(to)g(b)s(e)e(set\).)
+630 2228 y Ft(-p)384 b Fu(The)30 b(pip)s(e)f(bu\013er)h(size.)630
+2384 y Ft(-q)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(b)m
+(ytes)g(in)f(POSIX)f(message)j(queues.)630 2539 y Ft(-r)384
+b Fu(The)30 b(maxim)m(um)g(real-time)i(sc)m(heduling)f(priorit)m(y)-8
+b(.)630 2695 y Ft(-s)384 b Fu(The)30 b(maxim)m(um)g(stac)m(k)i(size.)
+630 2850 y Ft(-t)384 b Fu(The)30 b(maxim)m(um)g(amoun)m(t)h(of)f(cpu)g
+(time)h(in)f(seconds.)630 3005 y Ft(-u)384 b Fu(The)30
+b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(pro)s(cesses)f(a)m(v)-5
+b(ailable)33 b(to)e(a)f(single)i(user.)630 3161 y Ft(-v)384
+b Fu(The)41 b(maxim)m(um)h(amoun)m(t)g(of)h(virtual)f(memory)g(a)m(v)-5
+b(ailable)44 b(to)e(the)g(shell,)1110 3271 y(and,)30
+b(on)g(some)h(systems,)g(to)g(its)g(c)m(hildren.)630
+3426 y Ft(-x)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i
+(\014le)f(lo)s(c)m(ks.)630 3581 y Ft(-P)384 b Fu(The)30
+b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(pseudoterminals.)630
+3737 y Ft(-T)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i
+(threads.)630 3892 y(If)36 b Fr(limit)k Fu(is)c(giv)m(en,)k(and)c(the)h
+Ft(-a)f Fu(option)h(is)f(not)h(used,)h Fr(limit)h Fu(is)e(the)g(new)f
+(v)-5 b(alue)37 b(of)g(the)630 4002 y(sp)s(eci\014ed)c(resource.)51
+b(The)34 b(sp)s(ecial)g Fr(limit)j Fu(v)-5 b(alues)34
+b Ft(hard)p Fu(,)g Ft(soft)p Fu(,)g(and)f Ft(unlimited)e
+Fu(stand)630 4112 y(for)h(the)g(curren)m(t)g(hard)f(limit,)i(the)g
+(curren)m(t)f(soft)g(limit,)h(and)f(no)g(limit,)h(resp)s(ectiv)m(ely)-8
+b(.)48 b(A)630 4221 y(hard)37 b(limit)h(cannot)h(b)s(e)e(increased)h(b)
+m(y)f(a)h(non-ro)s(ot)g(user)f(once)i(it)f(is)g(set;)k(a)c(soft)g
+(limit)630 4331 y(ma)m(y)j(b)s(e)e(increased)i(up)e(to)h(the)h(v)-5
+b(alue)40 b(of)g(the)h(hard)e(limit.)70 b(Otherwise,)43
+b(the)d(curren)m(t)630 4440 y(v)-5 b(alue)29 b(of)h(the)f(soft)g(limit)
+h(for)e(the)h(sp)s(eci\014ed)g(resource)g(is)g(prin)m(ted,)g(unless)f
+(the)h Ft(-H)f Fu(option)630 4550 y(is)h(supplied.)39
+b(When)29 b(setting)h(new)f(limits,)h(if)f(neither)g
+Ft(-H)g Fu(nor)f Ft(-S)h Fu(is)g(supplied,)f(b)s(oth)h(the)630
+4660 y(hard)i(and)h(soft)h(limits)g(are)f(set.)48 b(If)31
+b(no)i(option)f(is)h(giv)m(en,)h(then)e Ft(-f)g Fu(is)g(assumed.)46
+b(V)-8 b(alues)630 4769 y(are)31 b(in)f(1024-b)m(yte)j(incremen)m(ts,)e
+(except)g(for)f Ft(-t)p Fu(,)g(whic)m(h)g(is)g(in)g(seconds;)h
+Ft(-p)p Fu(,)f(whic)m(h)g(is)g(in)630 4879 y(units)h(of)g(512-b)m(yte)j
+(blo)s(c)m(ks;)e Ft(-P)p Fu(,)f Ft(-T)p Fu(,)h Ft(-b)p
+Fu(,)f Ft(-k)p Fu(,)g Ft(-n)g Fu(and)f Ft(-u)p Fu(,)h(whic)m(h)h(are)f
+(unscaled)g(v)-5 b(alues;)630 4988 y(and,)31 b(when)f(in)g
+Fm(posix)g Fu(Mo)s(de)h(\(see)h(Section)g(6.11)g([Bash)g(POSIX)e(Mo)s
+(de],)h(page)h(99\),)h Ft(-c)630 5098 y Fu(and)d Ft(-f)p
+Fu(,)g(whic)m(h)g(are)h(in)f(512-b)m(yte)i(incremen)m(ts.)630
+5230 y(The)i(return)g(status)h(is)f(zero)i(unless)e(an)g(in)m(v)-5
+b(alid)36 b(option)f(or)f(argumen)m(t)i(is)e(supplied,)h(or)630
+5340 y(an)30 b(error)g(o)s(ccurs)g(while)h(setting)g(a)g(new)f(limit.)p
+eop end
+%%Page: 61 67
+TeXDict begin 61 66 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(61)150 299 y Ft(unalias)870
+428 y(unalias)46 b([-a])g([)p Fj(name)h Ft(...)g(])630
+558 y Fu(Remo)m(v)m(e)42 b(eac)m(h)f Fr(name)k Fu(from)39
+b(the)i(list)f(of)g(aliases.)71 b(If)40 b Ft(-a)f Fu(is)h(supplied,)h
+(all)g(aliases)h(are)630 668 y(remo)m(v)m(ed.)g(Aliases)31
+b(are)g(describ)s(ed)e(in)h(Section)i(6.6)f([Aliases],)h(page)f(93.)150
+898 y Fs(4.3)68 b(Mo)t(difying)45 b(Shell)g(Beha)l(vior)150
+1118 y Fk(4.3.1)63 b(The)41 b(Set)g(Builtin)150 1265
+y Fu(This)35 b(builtin)h(is)g(so)g(complicated)i(that)f(it)f(deserv)m
+(es)h(its)f(o)m(wn)g(section.)59 b Ft(set)35 b Fu(allo)m(ws)j(y)m(ou)e
+(to)h(c)m(hange)150 1374 y(the)c(v)-5 b(alues)34 b(of)f(shell)g
+(options)h(and)e(set)i(the)f(p)s(ositional)h(parameters,)h(or)e(to)h
+(displa)m(y)f(the)g(names)h(and)150 1484 y(v)-5 b(alues)31
+b(of)f(shell)h(v)-5 b(ariables.)150 1633 y Ft(set)870
+1763 y(set)47 b([--abefhkmnptuvxBCEHPT])41 b([-o)47 b
+Fj(option-name)p Ft(])e([)p Fj(argument)g Ft(...)o(])870
+1873 y(set)i([+abefhkmnptuvxBCEHPT])42 b([+o)47 b Fj(option-name)p
+Ft(])d([)p Fj(argument)h Ft(...)o(])630 2002 y Fu(If)22
+b(no)h(options)g(or)g(argumen)m(ts)g(are)g(supplied,)g
+Ft(set)f Fu(displa)m(ys)g(the)h(names)g(and)f(v)-5 b(alues)23
+b(of)g(all)630 2112 y(shell)j(v)-5 b(ariables)27 b(and)e(functions,)h
+(sorted)g(according)h(to)g(the)f(curren)m(t)f(lo)s(cale,)k(in)c(a)i
+(format)630 2221 y(that)i(ma)m(y)h(b)s(e)e(reused)g(as)h(input)f(for)h
+(setting)h(or)e(resetting)i(the)f(curren)m(tly-set)h(v)-5
+b(ariables.)630 2331 y(Read-only)37 b(v)-5 b(ariables)37
+b(cannot)h(b)s(e)e(reset.)59 b(In)36 b Fm(posix)g Fu(mo)s(de,)i(only)f
+(shell)f(v)-5 b(ariables)38 b(are)630 2440 y(listed.)630
+2570 y(When)29 b(options)g(are)g(supplied,)f(they)h(set)h(or)f(unset)f
+(shell)h(attributes.)41 b(Options,)29 b(if)g(sp)s(ec-)630
+2680 y(i\014ed,)h(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630
+2829 y Ft(-a)384 b Fu(Eac)m(h)37 b(v)-5 b(ariable)36
+b(or)g(function)g(that)g(is)g(created)h(or)f(mo)s(di\014ed)f(is)h(giv)m
+(en)h(the)1110 2939 y(exp)s(ort)28 b(attribute)h(and)f(mark)m(ed)g(for)
+g(exp)s(ort)g(to)h(the)g(en)m(vironmen)m(t)f(of)h(sub-)1110
+3048 y(sequen)m(t)i(commands.)630 3198 y Ft(-b)384 b
+Fu(Cause)44 b(the)h(status)g(of)f(terminated)h(bac)m(kground)g(jobs)f
+(to)h(b)s(e)f(rep)s(orted)1110 3307 y(immediately)-8
+b(,)30 b(rather)d(than)f(b)s(efore)h(prin)m(ting)g(the)g(next)g
+(primary)g(prompt.)630 3457 y Ft(-e)384 b Fu(Exit)65
+b(immediately)g(if)f(a)h(pip)s(eline)e(\(see)i(Section)g(3.2.2)h([Pip)s
+(elines],)1110 3567 y(page)56 b(8\),)62 b(whic)m(h)55
+b(ma)m(y)h(consist)f(of)h(a)f(single)h(simple)f(command)g(\(see)1110
+3676 y(Section)30 b(3.2.1)i([Simple)d(Commands],)g(page)h(8\),)h(a)f
+(list)g(\(see)h(Section)f(3.2.3)1110 3786 y([Lists],)66
+b(page)59 b(9\),)67 b(or)58 b(a)h(comp)s(ound)e(command)h(\(see)h
+(Section)g(3.2.4)1110 3895 y([Comp)s(ound)67 b(Commands],)77
+b(page)69 b(9\))g(returns)e(a)i(non-zero)g(status.)1110
+4005 y(The)41 b(shell)g(do)s(es)g(not)g(exit)h(if)f(the)h(command)f
+(that)h(fails)f(is)g(part)g(of)h(the)1110 4115 y(command)g(list)h
+(immediately)g(follo)m(wing)g(a)g Ft(while)e Fu(or)h
+Ft(until)e Fu(k)m(eyw)m(ord,)1110 4224 y(part)61 b(of)g(the)g(test)h
+(in)e(an)h Ft(if)f Fu(statemen)m(t,)71 b(part)61 b(of)g(an)m(y)g
+(command)1110 4334 y(executed)50 b(in)e(a)h Ft(&&)f Fu(or)h
+Ft(||)f Fu(list)h(except)g(the)g(command)g(follo)m(wing)h(the)1110
+4443 y(\014nal)37 b Ft(&&)g Fu(or)g Ft(||)p Fu(,)h(an)m(y)g(command)f
+(in)g(a)g(pip)s(eline)g(but)g(the)g(last,)j(or)e(if)f(the)1110
+4553 y(command's)c(return)f(status)h(is)g(b)s(eing)g(in)m(v)m(erted)h
+(with)e Ft(!)p Fu(.)48 b(If)33 b(a)g(comp)s(ound)1110
+4662 y(command)g(other)g(than)f(a)i(subshell)d(returns)h(a)h(non-zero)h
+(status)f(b)s(ecause)1110 4772 y(a)k(command)g(failed)g(while)g
+Ft(-e)f Fu(w)m(as)i(b)s(eing)e(ignored,)j(the)e(shell)g(do)s(es)g(not)
+1110 4882 y(exit.)42 b(A)30 b(trap)g(on)h Ft(ERR)p Fu(,)e(if)i(set,)g
+(is)f(executed)i(b)s(efore)e(the)g(shell)h(exits.)1110
+5011 y(This)f(option)h(applies)f(to)h(the)g(shell)g(en)m(vironmen)m(t)g
+(and)f(eac)m(h)h(subshell)f(en-)1110 5121 y(vironmen)m(t)j(separately)i
+(\(see)f(Section)g(3.7.3)h([Command)d(Execution)i(En-)1110
+5230 y(vironmen)m(t],)i(page)f(39\),)i(and)d(ma)m(y)h(cause)f
+(subshells)g(to)h(exit)g(b)s(efore)f(exe-)1110 5340 y(cuting)d(all)g
+(the)g(commands)f(in)g(the)g(subshell.)p eop end
+%%Page: 62 68
+TeXDict begin 62 67 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(62)1110 299 y(If)41
+b(a)g(comp)s(ound)e(command)i(or)g(shell)g(function)g(executes)h(in)f
+(a)g(con)m(text)1110 408 y(where)31 b Ft(-e)g Fu(is)g(b)s(eing)g
+(ignored,)h(none)f(of)h(the)f(commands)g(executed)h(within)1110
+518 y(the)j(comp)s(ound)f(command)h(or)g(function)f(b)s(o)s(dy)g(will)h
+(b)s(e)f(a\013ected)j(b)m(y)e(the)1110 628 y Ft(-e)25
+b Fu(setting,)j(ev)m(en)e(if)g Ft(-e)f Fu(is)h(set)g(and)f(a)h(command)
+g(returns)e(a)i(failure)g(status.)1110 737 y(If)32 b(a)i(comp)s(ound)d
+(command)i(or)g(shell)g(function)f(sets)i Ft(-e)e Fu(while)h(executing)
+1110 847 y(in)40 b(a)h(con)m(text)i(where)d Ft(-e)g Fu(is)h(ignored,)j
+(that)d(setting)h(will)f(not)g(ha)m(v)m(e)h(an)m(y)1110
+956 y(e\013ect)g(un)m(til)e(the)h(comp)s(ound)e(command)h(or)g(the)g
+(command)g(con)m(taining)1110 1066 y(the)31 b(function)f(call)h
+(completes.)630 1217 y Ft(-f)384 b Fu(Disable)31 b(\014lename)g
+(expansion)f(\(globbing\).)630 1367 y Ft(-h)384 b Fu(Lo)s(cate)33
+b(and)e(remem)m(b)s(er)h(\(hash\))g(commands)f(as)h(they)g(are)g(lo)s
+(ok)m(ed)h(up)e(for)1110 1477 y(execution.)42 b(This)29
+b(option)i(is)g(enabled)f(b)m(y)g(default.)630 1628 y
+Ft(-k)384 b Fu(All)34 b(argumen)m(ts)g(in)f(the)h(form)f(of)g
+(assignmen)m(t)h(statemen)m(ts)i(are)d(placed)h(in)1110
+1737 y(the)k(en)m(vironmen)m(t)g(for)g(a)g(command,)h(not)f(just)f
+(those)i(that)f(precede)g(the)1110 1847 y(command)30
+b(name.)630 1998 y Ft(-m)384 b Fu(Job)28 b(con)m(trol)h(is)f(enabled)g
+(\(see)h(Chapter)f(7)g([Job)g(Con)m(trol],)i(page)f(103\).)41
+b(All)1110 2107 y(pro)s(cesses)27 b(run)f(in)i(a)g(separate)g(pro)s
+(cess)f(group.)40 b(When)27 b(a)h(bac)m(kground)f(job)1110
+2217 y(completes,)32 b(the)f(shell)f(prin)m(ts)g(a)h(line)f(con)m
+(taining)i(its)f(exit)g(status.)630 2367 y Ft(-n)384
+b Fu(Read)38 b(commands)f(but)f(do)i(not)f(execute)i(them.)62
+b(This)37 b(ma)m(y)h(b)s(e)f(used)f(to)1110 2477 y(c)m(hec)m(k)d(a)e
+(script)g(for)g(syn)m(tax)h(errors.)42 b(This)30 b(option)i(is)f
+(ignored)g(b)m(y)g(in)m(terac-)1110 2587 y(tiv)m(e)h(shells.)630
+2737 y Ft(-o)e Fj(option-name)1110 2847 y Fu(Set)h(the)f(option)h
+(corresp)s(onding)e(to)i Fr(option-name)5 b Fu(:)1110
+2998 y Ft(allexport)1590 3107 y Fu(Same)30 b(as)h Ft(-a)p
+Fu(.)1110 3258 y Ft(braceexpand)1590 3367 y Fu(Same)f(as)h
+Ft(-B)p Fu(.)1110 3518 y Ft(emacs)240 b Fu(Use)25 b(an)f
+Ft(emacs)p Fu(-st)m(yle)h(line)f(editing)h(in)m(terface)h(\(see)g
+(Chapter)e(8)1590 3628 y([Command)33 b(Line)g(Editing],)h(page)h
+(107\).)51 b(This)32 b(also)i(a\013ects)1590 3737 y(the)d(editing)g(in)
+m(terface)h(used)d(for)h Ft(read)f(-e)p Fu(.)1110 3888
+y Ft(errexit)144 b Fu(Same)30 b(as)h Ft(-e)p Fu(.)1110
+4039 y Ft(errtrace)96 b Fu(Same)30 b(as)h Ft(-E)p Fu(.)1110
+4189 y Ft(functrace)1590 4299 y Fu(Same)f(as)h Ft(-T)p
+Fu(.)1110 4450 y Ft(hashall)144 b Fu(Same)30 b(as)h Ft(-h)p
+Fu(.)1110 4600 y Ft(histexpand)1590 4710 y Fu(Same)f(as)h
+Ft(-H)p Fu(.)1110 4861 y Ft(history)144 b Fu(Enable)39
+b(command)g(history)-8 b(,)42 b(as)d(describ)s(ed)f(in)h(Section)h(9.1)
+1590 4970 y([Bash)d(History)g(F)-8 b(acilities],)41 b(page)c(141.)60
+b(This)36 b(option)h(is)f(on)1590 5080 y(b)m(y)30 b(default)h(in)f(in)m
+(teractiv)m(e)j(shells.)1110 5230 y Ft(ignoreeof)1590
+5340 y Fu(An)d(in)m(teractiv)m(e)j(shell)e(will)g(not)f(exit)h(up)s(on)
+e(reading)i(EOF.)p eop end
+%%Page: 63 69
+TeXDict begin 63 68 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(63)1110 299 y
+Ft(keyword)144 b Fu(Same)30 b(as)h Ft(-k)p Fu(.)1110
+457 y Ft(monitor)144 b Fu(Same)30 b(as)h Ft(-m)p Fu(.)1110
+615 y Ft(noclobber)1590 725 y Fu(Same)f(as)h Ft(-C)p
+Fu(.)1110 883 y Ft(noexec)192 b Fu(Same)30 b(as)h Ft(-n)p
+Fu(.)1110 1042 y Ft(noglob)192 b Fu(Same)30 b(as)h Ft(-f)p
+Fu(.)1110 1200 y Ft(nolog)240 b Fu(Curren)m(tly)30 b(ignored.)1110
+1358 y Ft(notify)192 b Fu(Same)30 b(as)h Ft(-b)p Fu(.)1110
+1517 y Ft(nounset)144 b Fu(Same)30 b(as)h Ft(-u)p Fu(.)1110
+1675 y Ft(onecmd)192 b Fu(Same)30 b(as)h Ft(-t)p Fu(.)1110
+1833 y Ft(physical)96 b Fu(Same)30 b(as)h Ft(-P)p Fu(.)1110
+1991 y Ft(pipefail)96 b Fu(If)44 b(set,)k(the)d(return)e(v)-5
+b(alue)45 b(of)f(a)h(pip)s(eline)e(is)i(the)f(v)-5 b(alue)45
+b(of)1590 2101 y(the)33 b(last)h(\(righ)m(tmost\))h(command)e(to)h
+(exit)g(with)f(a)g(non-zero)1590 2211 y(status,)28 b(or)f(zero)g(if)f
+(all)i(commands)e(in)g(the)h(pip)s(eline)f(exit)i(suc-)1590
+2320 y(cessfully)-8 b(.)41 b(This)30 b(option)h(is)f(disabled)g(b)m(y)h
+(default.)1110 2478 y Ft(posix)240 b Fu(Change)30 b(the)g(b)s(eha)m
+(vior)h(of)f(Bash)g(where)g(the)g(default)h(op)s(era-)1590
+2588 y(tion)25 b(di\013ers)f(from)g(the)h Fm(posix)f
+Fu(standard)f(to)i(matc)m(h)h(the)f(stan-)1590 2698 y(dard)32
+b(\(see)i(Section)g(6.11)h([Bash)e(POSIX)f(Mo)s(de],)j(page)e(99\).)
+1590 2807 y(This)k(is)g(in)m(tended)g(to)h(mak)m(e)g(Bash)g(b)s(eha)m
+(v)m(e)g(as)g(a)f(strict)h(su-)1590 2917 y(p)s(erset)30
+b(of)h(that)f(standard.)1110 3075 y Ft(privileged)1590
+3185 y Fu(Same)g(as)h Ft(-p)p Fu(.)1110 3343 y Ft(verbose)144
+b Fu(Same)30 b(as)h Ft(-v)p Fu(.)1110 3501 y Ft(vi)384
+b Fu(Use)36 b(a)g Ft(vi)p Fu(-st)m(yle)g(line)g(editing)g(in)m
+(terface.)58 b(This)35 b(also)h(a\013ects)1590 3611 y(the)31
+b(editing)g(in)m(terface)h(used)d(for)h Ft(read)f(-e)p
+Fu(.)1110 3769 y Ft(xtrace)192 b Fu(Same)30 b(as)h Ft(-x)p
+Fu(.)630 3927 y Ft(-p)384 b Fu(T)-8 b(urn)33 b(on)h(privileged)h(mo)s
+(de.)51 b(In)34 b(this)g(mo)s(de,)h(the)f Ft($BASH_ENV)e
+Fu(and)h Ft($ENV)1110 4037 y Fu(\014les)23 b(are)h(not)f(pro)s(cessed,)
+h(shell)g(functions)e(are)i(not)f(inherited)g(from)f(the)i(en-)1110
+4147 y(vironmen)m(t,)h(and)e(the)g Ft(SHELLOPTS)p Fu(,)f
+Ft(BASHOPTS)p Fu(,)h Ft(CDPATH)e Fu(and)i Ft(GLOBIGNORE)1110
+4256 y Fu(v)-5 b(ariables,)23 b(if)e(they)g(app)s(ear)f(in)g(the)h(en)m
+(vironmen)m(t,)i(are)e(ignored.)38 b(If)20 b(the)h(shell)1110
+4366 y(is)37 b(started)h(with)f(the)g(e\013ectiv)m(e)j(user)d
+(\(group\))g(id)g(not)g(equal)h(to)g(the)f(real)1110
+4475 y(user)h(\(group\))h(id,)i(and)d(the)h Ft(-p)f Fu(option)i(is)e
+(not)i(supplied,)f(these)h(actions)1110 4585 y(are)32
+b(tak)m(en)i(and)d(the)h(e\013ectiv)m(e)j(user)c(id)h(is)g(set)h(to)f
+(the)h(real)f(user)g(id.)45 b(If)32 b(the)1110 4695 y
+Ft(-p)i Fu(option)h(is)g(supplied)f(at)h(startup,)h(the)f(e\013ectiv)m
+(e)i(user)d(id)g(is)h(not)g(reset.)1110 4804 y(T)-8 b(urning)35
+b(this)i(option)g(o\013)g(causes)g(the)g(e\013ectiv)m(e)i(user)d(and)g
+(group)g(ids)g(to)1110 4914 y(b)s(e)30 b(set)h(to)g(the)f(real)h(user)f
+(and)g(group)g(ids.)630 5072 y Ft(-t)384 b Fu(Exit)31
+b(after)g(reading)f(and)g(executing)h(one)g(command.)630
+5230 y Ft(-u)384 b Fu(T)-8 b(reat)25 b(unset)e(v)-5 b(ariables)25
+b(and)e(parameters)h(other)h(than)e(the)h(sp)s(ecial)h(param-)1110
+5340 y(eters)35 b(`)p Ft(@)p Fu(')f(or)g(`)p Ft(*)p Fu(')h(as)f(an)g
+(error)g(when)f(p)s(erforming)g(parameter)i(expansion.)p
+eop end
+%%Page: 64 70
+TeXDict begin 64 69 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(64)1110 299 y(An)28
+b(error)h(message)g(will)g(b)s(e)f(written)h(to)h(the)e(standard)g
+(error,)h(and)f(a)h(non-)1110 408 y(in)m(teractiv)m(e)k(shell)e(will)g
+(exit.)630 568 y Ft(-v)384 b Fu(Prin)m(t)30 b(shell)h(input)e(lines)i
+(as)g(they)f(are)h(read.)630 727 y Ft(-x)384 b Fu(Prin)m(t)21
+b(a)h(trace)h(of)f(simple)f(commands,)i Ft(for)e Fu(commands,)i
+Ft(case)d Fu(commands,)1110 837 y Ft(select)29 b Fu(commands,)j(and)e
+(arithmetic)j Ft(for)d Fu(commands)h(and)f(their)i(argu-)1110
+946 y(men)m(ts)h(or)f(asso)s(ciated)i(w)m(ord)e(lists)h(after)g(they)f
+(are)h(expanded)f(and)f(b)s(efore)1110 1056 y(they)i(are)g(executed.)49
+b(The)32 b(v)-5 b(alue)33 b(of)g(the)g Ft(PS4)f Fu(v)-5
+b(ariable)34 b(is)f(expanded)f(and)1110 1166 y(the)24
+b(resultan)m(t)h(v)-5 b(alue)24 b(is)g(prin)m(ted)g(b)s(efore)f(the)h
+(command)g(and)f(its)i(expanded)1110 1275 y(argumen)m(ts.)630
+1435 y Ft(-B)384 b Fu(The)41 b(shell)g(will)g(p)s(erform)f(brace)h
+(expansion)g(\(see)h(Section)g(3.5.1)g([Brace)1110 1544
+y(Expansion],)30 b(page)h(23\).)42 b(This)30 b(option)h(is)f(on)g(b)m
+(y)h(default.)630 1704 y Ft(-C)384 b Fu(Prev)m(en)m(t)25
+b(output)e(redirection)h(using)f(`)p Ft(>)p Fu(',)i(`)p
+Ft(>&)p Fu(',)g(and)e(`)p Ft(<>)p Fu(')g(from)h(o)m(v)m(erwriting)1110
+1813 y(existing)31 b(\014les.)630 1973 y Ft(-E)384 b
+Fu(If)39 b(set,)j(an)m(y)e(trap)f(on)g Ft(ERR)g Fu(is)g(inherited)g(b)m
+(y)g(shell)h(functions,)h(command)1110 2082 y(substitutions,)35
+b(and)e(commands)g(executed)i(in)f(a)g(subshell)f(en)m(vironmen)m(t.)
+1110 2192 y(The)d Ft(ERR)f Fu(trap)i(is)f(normally)h(not)f(inherited)g
+(in)g(suc)m(h)g(cases.)630 2351 y Ft(-H)384 b Fu(Enable)38
+b(`)p Ft(!)p Fu(')h(st)m(yle)h(history)e(substitution)g(\(see)h
+(Section)h(9.3)f([History)g(In-)1110 2461 y(teraction],)g(page)d
+(143\).)57 b(This)34 b(option)i(is)f(on)g(b)m(y)h(default)f(for)g(in)m
+(teractiv)m(e)1110 2570 y(shells.)630 2730 y Ft(-P)384
+b Fu(If)39 b(set,)j(do)d(not)g(resolv)m(e)i(sym)m(b)s(olic)e(links)g
+(when)f(p)s(erforming)g(commands)1110 2839 y(suc)m(h)29
+b(as)h Ft(cd)f Fu(whic)m(h)g(c)m(hange)h(the)g(curren)m(t)f(directory)
+-8 b(.)42 b(The)28 b(ph)m(ysical)j(direc-)1110 2949 y(tory)j(is)g(used)
+f(instead.)52 b(By)34 b(default,)h(Bash)f(follo)m(ws)h(the)f(logical)i
+(c)m(hain)f(of)1110 3059 y(directories)j(when)d(p)s(erforming)h
+(commands)g(whic)m(h)g(c)m(hange)i(the)f(curren)m(t)1110
+3168 y(directory)-8 b(.)1110 3303 y(F)g(or)42 b(example,)i(if)d
+Ft(/usr/sys)e Fu(is)i(a)g(sym)m(b)s(olic)g(link)g(to)h
+Ft(/usr/local/sys)1110 3412 y Fu(then:)1350 3547 y Ft($)47
+b(cd)h(/usr/sys;)d(echo)i($PWD)1350 3656 y(/usr/sys)1350
+3766 y($)g(cd)h(..;)f(pwd)1350 3875 y(/usr)1110 4010
+y Fu(If)30 b Ft(set)f(-P)h Fu(is)h(on,)f(then:)1350 4144
+y Ft($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 4254 y(/usr/local/sys)
+1350 4364 y($)g(cd)h(..;)f(pwd)1350 4473 y(/usr/local)630
+4633 y(-T)384 b Fu(If)34 b(set,)j(an)m(y)e(trap)g(on)g
+Ft(DEBUG)e Fu(and)i Ft(RETURN)e Fu(are)i(inherited)g(b)m(y)f(shell)i
+(func-)1110 4742 y(tions,)k(command)d(substitutions,)h(and)f(commands)g
+(executed)h(in)f(a)h(sub-)1110 4852 y(shell)33 b(en)m(vironmen)m(t.)49
+b(The)32 b Ft(DEBUG)g Fu(and)g Ft(RETURN)f Fu(traps)h(are)i(normally)f
+(not)1110 4961 y(inherited)d(in)g(suc)m(h)g(cases.)630
+5121 y Ft(--)384 b Fu(If)44 b(no)g(argumen)m(ts)g(follo)m(w)i(this)e
+(option,)k(then)c(the)h(p)s(ositional)g(parame-)1110
+5230 y(ters)31 b(are)g(unset.)40 b(Otherwise,)31 b(the)f(p)s(ositional)
+i(parameters)f(are)f(set)h(to)h(the)1110 5340 y Fr(argumen)m(ts)p
+Fu(,)f(ev)m(en)g(if)f(some)h(of)g(them)f(b)s(egin)g(with)g(a)h(`)p
+Ft(-)p Fu('.)p eop end
+%%Page: 65 71
+TeXDict begin 65 70 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(65)630 299 y Ft(-)432
+b Fu(Signal)45 b(the)g(end)f(of)h(options,)k(cause)c(all)h(remaining)e
+Fr(argumen)m(ts)49 b Fu(to)d(b)s(e)1110 408 y(assigned)33
+b(to)h(the)g(p)s(ositional)g(parameters.)49 b(The)33
+b Ft(-x)g Fu(and)f Ft(-v)h Fu(options)h(are)1110 518
+y(turned)k(o\013.)68 b(If)38 b(there)i(are)f(no)g(argumen)m(ts,)j(the)e
+(p)s(ositional)g(parameters)1110 628 y(remain)30 b(unc)m(hanged.)630
+775 y(Using)d(`)p Ft(+)p Fu(')h(rather)f(than)g(`)p Ft(-)p
+Fu(')g(causes)h(these)f(options)h(to)g(b)s(e)e(turned)g(o\013.)40
+b(The)27 b(options)h(can)630 884 y(also)36 b(b)s(e)f(used)f(up)s(on)g
+(in)m(v)m(o)s(cation)j(of)e(the)g(shell.)56 b(The)34
+b(curren)m(t)h(set)h(of)f(options)h(ma)m(y)g(b)s(e)630
+994 y(found)29 b(in)h Ft($-)p Fu(.)630 1122 y(The)43
+b(remaining)h(N)f Fr(argumen)m(ts)48 b Fu(are)c(p)s(ositional)g
+(parameters)g(and)f(are)h(assigned,)j(in)630 1232 y(order,)30
+b(to)h Ft($1)p Fu(,)f Ft($2)p Fu(,)36 b(.)22 b(.)g(.)42
+b Ft($N)p Fu(.)e(The)30 b(sp)s(ecial)h(parameter)g Ft(#)f
+Fu(is)g(set)h(to)g(N.)630 1360 y(The)f(return)f(status)i(is)f(alw)m(a)m
+(ys)i(zero)f(unless)f(an)g(in)m(v)-5 b(alid)31 b(option)g(is)f
+(supplied.)150 1548 y Fk(4.3.2)63 b(The)41 b(Shopt)h(Builtin)150
+1695 y Fu(This)30 b(builtin)g(allo)m(ws)h(y)m(ou)g(to)g(c)m(hange)h
+(additional)f(shell)f(optional)i(b)s(eha)m(vior.)150
+1842 y Ft(shopt)870 1970 y(shopt)46 b([-pqsu])g([-o])h([)p
+Fj(optname)e Ft(...])630 2099 y Fu(T)-8 b(oggle)37 b(the)e(v)-5
+b(alues)35 b(of)g(settings)h(con)m(trolling)g(optional)g(shell)f(b)s
+(eha)m(vior.)55 b(The)34 b(settings)630 2208 y(can)24
+b(b)s(e)g(either)h(those)f(listed)h(b)s(elo)m(w,)h(or,)f(if)g(the)f
+Ft(-o)f Fu(option)i(is)f(used,)h(those)g(a)m(v)-5 b(ailable)26
+b(with)630 2318 y(the)k Ft(-o)f Fu(option)i(to)f(the)g
+Ft(set)f Fu(builtin)h(command)f(\(see)i(Section)g(4.3.1)g([The)f(Set)g
+(Builtin],)630 2427 y(page)i(61\).)45 b(With)32 b(no)f(options,)h(or)g
+(with)f(the)g Ft(-p)g Fu(option,)h(a)g(list)g(of)f(all)i(settable)g
+(options)630 2537 y(is)g(displa)m(y)m(ed,)i(with)e(an)g(indication)h
+(of)g(whether)e(or)h(not)h(eac)m(h)g(is)g(set;)h(if)e
+Fr(optnames)38 b Fu(are)630 2647 y(supplied,)25 b(the)g(output)g(is)g
+(restricted)g(to)h(those)g(options.)39 b(The)24 b Ft(-p)h
+Fu(option)g(causes)g(output)630 2756 y(to)30 b(b)s(e)f(displa)m(y)m(ed)
+g(in)g(a)h(form)f(that)g(ma)m(y)h(b)s(e)f(reused)f(as)i(input.)39
+b(Other)29 b(options)g(ha)m(v)m(e)i(the)630 2866 y(follo)m(wing)h
+(meanings:)630 3013 y Ft(-s)384 b Fu(Enable)30 b(\(set\))i(eac)m(h)f
+Fr(optname)p Fu(.)630 3160 y Ft(-u)384 b Fu(Disable)31
+b(\(unset\))g(eac)m(h)h Fr(optname)p Fu(.)630 3307 y
+Ft(-q)384 b Fu(Suppresses)28 b(normal)h(output;)h(the)g(return)e
+(status)i(indicates)h(whether)e(the)1110 3417 y Fr(optname)37
+b Fu(is)31 b(set)h(or)f(unset.)43 b(If)31 b(m)m(ultiple)h
+Fr(optname)37 b Fu(argumen)m(ts)31 b(are)h(giv)m(en)1110
+3527 y(with)d Ft(-q)p Fu(,)g(the)g(return)f(status)h(is)g(zero)h(if)f
+(all)h Fr(optnames)j Fu(are)d(enabled;)f(non-)1110 3636
+y(zero)i(otherwise.)630 3784 y Ft(-o)384 b Fu(Restricts)22
+b(the)f(v)-5 b(alues)22 b(of)f Fr(optname)27 b Fu(to)22
+b(b)s(e)e(those)i(de\014ned)e(for)h(the)g Ft(-o)f Fu(option)1110
+3893 y(to)31 b(the)g Ft(set)e Fu(builtin)h(\(see)h(Section)h(4.3.1)g
+([The)e(Set)g(Builtin],)i(page)f(61\).)630 4040 y(If)e(either)i
+Ft(-s)e Fu(or)h Ft(-u)f Fu(is)h(used)f(with)g(no)h Fr(optname)35
+b Fu(argumen)m(ts,)c Ft(shopt)d Fu(sho)m(ws)h(only)h(those)630
+4150 y(options)h(whic)m(h)f(are)h(set)f(or)h(unset,)f(resp)s(ectiv)m
+(ely)-8 b(.)630 4278 y(Unless)30 b(otherwise)h(noted,)g(the)g
+Ft(shopt)d Fu(options)j(are)g(disabled)f(\(o\013)7 b(\))32
+b(b)m(y)e(default.)630 4407 y(The)d(return)f(status)i(when)f(listing)h
+(options)g(is)f(zero)i(if)e(all)i Fr(optnames)i Fu(are)d(enabled,)g
+(non-)630 4516 y(zero)40 b(otherwise.)66 b(When)39 b(setting)h(or)f
+(unsetting)g(options,)i(the)e(return)f(status)h(is)g(zero)630
+4626 y(unless)30 b(an)g Fr(optname)36 b Fu(is)30 b(not)h(a)g(v)-5
+b(alid)30 b(shell)h(option.)630 4754 y(The)f(list)h(of)f
+Ft(shopt)f Fu(options)i(is:)630 4902 y Ft(assoc_expand_once)1110
+5011 y Fu(If)h(set,)i(the)e(shell)h(suppresses)e(m)m(ultiple)i(ev)-5
+b(aluation)34 b(of)e(asso)s(ciativ)m(e)j(arra)m(y)1110
+5121 y(subscripts)24 b(during)h(arithmetic)h(expression)g(ev)-5
+b(aluation,)28 b(while)e(executing)1110 5230 y(builtins)c(that)i(can)f
+(p)s(erform)f(v)-5 b(ariable)24 b(assignmen)m(ts,)h(and)e(while)g
+(executing)1110 5340 y(builtins)30 b(that)h(p)s(erform)e(arra)m(y)i
+(dereferencing.)p eop end
+%%Page: 66 72
+TeXDict begin 66 71 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(66)630 299 y Ft(autocd)192
+b Fu(If)27 b(set,)h(a)g(command)f(name)g(that)h(is)f(the)g(name)g(of)h
+(a)f(directory)h(is)f(executed)1110 408 y(as)j(if)f(it)h(w)m(ere)f(the)
+h(argumen)m(t)g(to)g(the)f Ft(cd)g Fu(command.)40 b(This)29
+b(option)g(is)h(only)1110 518 y(used)g(b)m(y)g(in)m(teractiv)m(e)j
+(shells.)630 682 y Ft(cdable_vars)1110 792 y Fu(If)h(this)h(is)g(set,)i
+(an)e(argumen)m(t)g(to)h(the)f Ft(cd)f Fu(builtin)h(command)f(that)i
+(is)f(not)1110 902 y(a)c(directory)g(is)g(assumed)f(to)h(b)s(e)f(the)h
+(name)f(of)h(a)g(v)-5 b(ariable)31 b(whose)g(v)-5 b(alue)31
+b(is)1110 1011 y(the)g(directory)f(to)i(c)m(hange)f(to.)630
+1176 y Ft(cdspell)144 b Fu(If)27 b(set,)h(minor)f(errors)f(in)h(the)g
+(sp)s(elling)h(of)f(a)g(directory)h(comp)s(onen)m(t)f(in)g(a)h
+Ft(cd)1110 1285 y Fu(command)i(will)h(b)s(e)f(corrected.)43
+b(The)30 b(errors)g(c)m(hec)m(k)m(ed)j(for)d(are)h(transp)s(osed)1110
+1395 y(c)m(haracters,)46 b(a)c(missing)f(c)m(haracter,)47
+b(and)40 b(a)i(c)m(haracter)h(to)s(o)g(man)m(y)-8 b(.)74
+b(If)42 b(a)1110 1504 y(correction)25 b(is)e(found,)g(the)h(corrected)g
+(path)f(is)g(prin)m(ted,)h(and)f(the)g(command)1110 1614
+y(pro)s(ceeds.)40 b(This)30 b(option)h(is)f(only)h(used)e(b)m(y)h(in)m
+(teractiv)m(e)k(shells.)630 1778 y Ft(checkhash)1110
+1888 y Fu(If)29 b(this)h(is)g(set,)g(Bash)g(c)m(hec)m(ks)h(that)g(a)f
+(command)f(found)g(in)g(the)h(hash)f(table)1110 1998
+y(exists)k(b)s(efore)f(trying)h(to)h(execute)g(it.)48
+b(If)32 b(a)h(hashed)e(command)i(no)f(longer)1110 2107
+y(exists,)f(a)g(normal)f(path)g(searc)m(h)h(is)g(p)s(erformed.)630
+2271 y Ft(checkjobs)1110 2381 y Fu(If)d(set,)i(Bash)e(lists)h(the)g
+(status)g(of)f(an)m(y)h(stopp)s(ed)f(and)g(running)e(jobs)i(b)s(efore)
+1110 2491 y(exiting)42 b(an)f(in)m(teractiv)m(e)j(shell.)72
+b(If)41 b(an)m(y)g(jobs)f(are)i(running,)g(this)f(causes)1110
+2600 y(the)30 b(exit)g(to)g(b)s(e)f(deferred)g(un)m(til)h(a)f(second)h
+(exit)g(is)g(attempted)h(without)e(an)1110 2710 y(in)m(terv)m(ening)d
+(command)f(\(see)h(Chapter)e(7)h([Job)g(Con)m(trol],)i(page)f(103\).)40
+b(The)1110 2819 y(shell)31 b(alw)m(a)m(ys)g(p)s(ostp)s(ones)f(exiting)h
+(if)g(an)m(y)f(jobs)g(are)h(stopp)s(ed.)630 2984 y Ft(checkwinsize)1110
+3093 y Fu(If)23 b(set,)j(Bash)e(c)m(hec)m(ks)h(the)f(windo)m(w)f(size)h
+(after)h(eac)m(h)f(external)h(\(non-builtin\))1110 3203
+y(command)55 b(and,)60 b(if)55 b(necessary)-8 b(,)62
+b(up)s(dates)54 b(the)h(v)-5 b(alues)55 b(of)g Ft(LINES)f
+Fu(and)1110 3313 y Ft(COLUMNS)p Fu(.)39 b(This)29 b(option)i(is)g
+(enabled)f(b)m(y)g(default.)630 3477 y Ft(cmdhist)144
+b Fu(If)33 b(set,)j(Bash)e(attempts)h(to)g(sa)m(v)m(e)g(all)g(lines)f
+(of)g(a)h(m)m(ultiple-line)g(command)1110 3587 y(in)c(the)g(same)g
+(history)g(en)m(try)-8 b(.)42 b(This)30 b(allo)m(ws)i(easy)g
+(re-editing)g(of)f(m)m(ulti-line)1110 3696 y(commands.)79
+b(This)43 b(option)g(is)h(enabled)f(b)m(y)g(default,)k(but)c(only)g
+(has)g(an)1110 3806 y(e\013ect)30 b(if)e(command)g(history)g(is)h
+(enabled)f(\(see)h(Section)g(9.1)h([Bash)e(History)1110
+3915 y(F)-8 b(acilities],)34 b(page)d(141\).)630 4080
+y Ft(compat31)96 b Fu(If)27 b(set,)i(Bash)e(c)m(hanges)i(its)f(b)s(eha)
+m(vior)f(to)i(that)f(of)f(v)m(ersion)h(3.1)h(with)e(resp)s(ect)1110
+4189 y(to)39 b(quoted)f(argumen)m(ts)g(to)h(the)f(conditional)h
+(command's)f(`)p Ft(=~)p Fu(')g(op)s(erator)1110 4299
+y(and)i(with)f(resp)s(ect)i(to)g(lo)s(cale-sp)s(eci\014c)h(string)e
+(comparison)g(when)f(using)1110 4408 y(the)31 b Ft([[)e
+Fu(conditional)j(command's)e(`)p Ft(<)p Fu(')h(and)f(`)p
+Ft(>)p Fu(')g(op)s(erators.)41 b(Bash)31 b(v)m(ersions)1110
+4518 y(prior)g(to)h(bash-4.1)g(use)g(ASCI)s(I)e(collation)j(and)e
+(strcmp\(3\);)i(bash-4.1)g(and)1110 4628 y(later)e(use)f(the)h(curren)m
+(t)f(lo)s(cale's)i(collation)h(sequence)e(and)f(strcoll\(3\).)630
+4792 y Ft(compat32)96 b Fu(If)27 b(set,)i(Bash)e(c)m(hanges)i(its)f(b)s
+(eha)m(vior)f(to)i(that)f(of)f(v)m(ersion)h(3.2)h(with)e(resp)s(ect)
+1110 4902 y(to)34 b(lo)s(cale-sp)s(eci\014c)h(string)e(comparison)g
+(when)f(using)h(the)g Ft([[)g Fu(conditional)1110 5011
+y(command's)21 b(`)p Ft(<)p Fu(')g(and)f(`)p Ft(>)p Fu(')h(op)s
+(erators)g(\(see)h(previous)e(item\))i(and)e(the)h(e\013ect)i(of)1110
+5121 y(in)m(terrupting)h(a)h(command)e(list.)40 b(Bash)24
+b(v)m(ersions)h(3.2)g(and)f(earlier)h(con)m(tin)m(ue)1110
+5230 y(with)33 b(the)g(next)g(command)g(in)g(the)g(list)h(after)f(one)h
+(terminates)g(due)e(to)i(an)1110 5340 y(in)m(terrupt.)p
+eop end
+%%Page: 67 73
+TeXDict begin 67 72 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(67)630 299 y Ft(compat40)96
+b Fu(If)27 b(set,)i(Bash)e(c)m(hanges)i(its)f(b)s(eha)m(vior)f(to)i
+(that)f(of)f(v)m(ersion)h(4.0)h(with)e(resp)s(ect)1110
+408 y(to)34 b(lo)s(cale-sp)s(eci\014c)h(string)e(comparison)g(when)f
+(using)h(the)g Ft([[)g Fu(conditional)1110 518 y(command's)28
+b(`)p Ft(<)p Fu(')h(and)f(`)p Ft(>)p Fu(')h(op)s(erators)f(\(see)i
+(description)e(of)h Ft(compat31)p Fu(\))e(and)1110 628
+y(the)38 b(e\013ect)i(of)e(in)m(terrupting)f(a)i(command)e(list.)64
+b(Bash)38 b(v)m(ersions)h(4.0)g(and)1110 737 y(later)24
+b(in)m(terrupt)f(the)g(list)h(as)g(if)f(the)h(shell)f(receiv)m(ed)i
+(the)e(in)m(terrupt;)i(previous)1110 847 y(v)m(ersions)31
+b(con)m(tin)m(ue)g(with)f(the)h(next)g(command)f(in)g(the)g(list.)630
+1003 y Ft(compat41)96 b Fu(If)25 b(set,)j(Bash,)e(when)f(in)g
+Fm(posix)g Fu(mo)s(de,)i(treats)f(a)g(single)h(quote)f(in)f(a)h
+(double-)1110 1113 y(quoted)46 b(parameter)h(expansion)f(as)g(a)h(sp)s
+(ecial)f(c)m(haracter.)90 b(The)45 b(single)1110 1223
+y(quotes)34 b(m)m(ust)g(matc)m(h)h(\(an)f(ev)m(en)h(n)m(um)m(b)s(er\))e
+(and)g(the)h(c)m(haracters)h(b)s(et)m(w)m(een)1110 1332
+y(the)40 b(single)g(quotes)g(are)g(considered)g(quoted.)69
+b(This)38 b(is)i(the)g(b)s(eha)m(vior)g(of)1110 1442
+y Fm(posix)f Fu(mo)s(de)g(through)g(v)m(ersion)h(4.1.)69
+b(The)39 b(default)g(Bash)h(b)s(eha)m(vior)g(re-)1110
+1551 y(mains)30 b(as)h(in)f(previous)g(v)m(ersions.)630
+1708 y Ft(compat42)96 b Fu(If)29 b(set,)i(Bash)f(do)s(es)f(not)h(pro)s
+(cess)g(the)g(replacemen)m(t)h(string)e(in)h(the)g(pattern)1110
+1817 y(substitution)g(w)m(ord)g(expansion)g(using)g(quote)h(remo)m(v)-5
+b(al.)630 1974 y Ft(compat43)96 b Fu(If)24 b(set,)j(Bash)e(do)s(es)g
+(not)g(prin)m(t)g(a)g(w)m(arning)g(message)h(if)f(an)g(attempt)h(is)f
+(made)1110 2084 y(to)43 b(use)g(a)g(quoted)f(comp)s(ound)f(arra)m(y)i
+(assignmen)m(t)h(as)f(an)f(argumen)m(t)h(to)1110 2193
+y Ft(declare)p Fu(,)31 b(mak)m(es)i(w)m(ord)f(expansion)g(errors)g
+(non-fatal)i(errors)d(that)i(cause)1110 2303 y(the)28
+b(curren)m(t)h(command)f(to)h(fail)g(\(the)f(default)h(b)s(eha)m(vior)f
+(is)h(to)g(mak)m(e)g(them)1110 2412 y(fatal)42 b(errors)e(that)i(cause)
+f(the)h(shell)f(to)g(exit\),)k(and)c(do)s(es)f(not)h(reset)h(the)1110
+2522 y(lo)s(op)34 b(state)h(when)f(a)g(shell)g(function)g(is)g
+(executed)h(\(this)f(allo)m(ws)h Ft(break)e Fu(or)1110
+2632 y Ft(continue)25 b Fu(in)j(a)g(shell)g(function)f(to)i(a\013ect)g
+(lo)s(ops)f(in)f(the)h(caller's)h(con)m(text\).)630 2788
+y Ft(compat44)96 b Fu(If)33 b(set,)i(Bash)f(sa)m(v)m(es)h(the)e(p)s
+(ositional)i(parameters)f(to)g(BASH)p 3264 2788 28 4
+v 40 w(AR)m(GV)h(and)1110 2898 y(BASH)p 1367 2898 V 40
+w(AR)m(GC)k(b)s(efore)e(they)i(are)f(used,)i(regardless)e(of)g(whether)
+g(or)g(not)1110 3007 y(extended)30 b(debugging)h(mo)s(de)f(is)g
+(enabled.)630 3164 y Ft(complete_fullquote)1110 3273
+y Fu(If)h(set,)g(Bash)h(quotes)f(all)h(shell)f(metac)m(haracters)i(in)e
+(\014lenames)g(and)g(direc-)1110 3383 y(tory)g(names)f(when)g(p)s
+(erforming)f(completion.)43 b(If)30 b(not)h(set,)g(Bash)g(remo)m(v)m
+(es)1110 3493 y(metac)m(haracters)40 b(suc)m(h)d(as)h(the)g(dollar)g
+(sign)g(from)f(the)h(set)g(of)f(c)m(haracters)1110 3602
+y(that)f(will)g(b)s(e)f(quoted)g(in)g(completed)i(\014lenames)e(when)f
+(these)i(metac)m(har-)1110 3712 y(acters)29 b(app)s(ear)e(in)g(shell)h
+(v)-5 b(ariable)28 b(references)g(in)f(w)m(ords)g(to)i(b)s(e)e
+(completed.)1110 3821 y(This)k(means)i(that)g(dollar)f(signs)g(in)g(v)
+-5 b(ariable)33 b(names)g(that)f(expand)g(to)h(di-)1110
+3931 y(rectories)28 b(will)g(not)f(b)s(e)f(quoted;)j(ho)m(w)m(ev)m(er,)
+g(an)m(y)e(dollar)h(signs)f(app)s(earing)f(in)1110 4041
+y(\014lenames)j(will)h(not)f(b)s(e)g(quoted,)h(either.)41
+b(This)28 b(is)i(activ)m(e)h(only)e(when)g(bash)1110
+4150 y(is)39 b(using)f(bac)m(kslashes)i(to)g(quote)g(completed)f
+(\014lenames.)67 b(This)38 b(v)-5 b(ariable)1110 4260
+y(is)41 b(set)g(b)m(y)g(default,)j(whic)m(h)c(is)h(the)g(default)g
+(Bash)g(b)s(eha)m(vior)g(in)g(v)m(ersions)1110 4369 y(through)30
+b(4.2.)630 4526 y Ft(direxpand)1110 4635 y Fu(If)k(set,)i(Bash)f
+(replaces)g(directory)g(names)g(with)f(the)g(results)h(of)f(w)m(ord)g
+(ex-)1110 4745 y(pansion)k(when)g(p)s(erforming)f(\014lename)i
+(completion.)67 b(This)38 b(c)m(hanges)i(the)1110 4855
+y(con)m(ten)m(ts)29 b(of)e(the)g(readline)h(editing)g(bu\013er.)38
+b(If)27 b(not)g(set,)i(Bash)e(attempts)h(to)1110 4964
+y(preserv)m(e)j(what)f(the)g(user)g(t)m(yp)s(ed.)630
+5121 y Ft(dirspell)96 b Fu(If)26 b(set,)i(Bash)f(attempts)g(sp)s
+(elling)g(correction)g(on)g(directory)g(names)f(during)1110
+5230 y(w)m(ord)36 b(completion)h(if)f(the)g(directory)g(name)g
+(initially)h(supplied)e(do)s(es)h(not)1110 5340 y(exist.)p
+eop end
+%%Page: 68 74
+TeXDict begin 68 73 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(68)630 299 y Ft(dotglob)144
+b Fu(If)36 b(set,)i(Bash)e(includes)g(\014lenames)g(b)s(eginning)f
+(with)h(a)g(`.')58 b(in)36 b(the)g(results)1110 408 y(of)f(\014lename)f
+(expansion.)53 b(The)33 b(\014lenames)i(`)p Ft(.)p Fu(')f(and)g(`)p
+Ft(..)p Fu(')g(m)m(ust)h(alw)m(a)m(ys)h(b)s(e)1110 518
+y(matc)m(hed)31 b(explicitly)-8 b(,)33 b(ev)m(en)e(if)f
+Ft(dotglob)f Fu(is)h(set.)630 682 y Ft(execfail)96 b
+Fu(If)24 b(this)h(is)f(set,)j(a)e(non-in)m(teractiv)m(e)i(shell)e(will)
+f(not)h(exit)h(if)e(it)h(cannot)h(execute)1110 792 y(the)i(\014le)g(sp)
+s(eci\014ed)g(as)g(an)g(argumen)m(t)g(to)h(the)f Ft(exec)f
+Fu(builtin)h(command.)39 b(An)1110 902 y(in)m(teractiv)m(e)33
+b(shell)e(do)s(es)f(not)g(exit)i(if)e Ft(exec)f Fu(fails.)630
+1066 y Ft(expand_aliases)1110 1176 y Fu(If)j(set,)h(aliases)g(are)g
+(expanded)e(as)h(describ)s(ed)f(b)s(elo)m(w)h(under)f(Aliases,)i(Sec-)
+1110 1285 y(tion)38 b(6.6)h([Aliases],)j(page)d(93.)64
+b(This)37 b(option)h(is)g(enabled)g(b)m(y)g(default)g(for)1110
+1395 y(in)m(teractiv)m(e)33 b(shells.)630 1559 y Ft(extdebug)96
+b Fu(If)36 b(set)h(at)h(shell)f(in)m(v)m(o)s(cation,)j(arrange)d(to)h
+(execute)g(the)f(debugger)f(pro\014le)1110 1669 y(b)s(efore)f(the)h
+(shell)f(starts,)j(iden)m(tical)f(to)f(the)g Ft(--debugger)c
+Fu(option.)56 b(If)35 b(set)1110 1778 y(after)25 b(in)m(v)m(o)s
+(cation,)j(b)s(eha)m(vior)d(in)m(tended)g(for)f(use)h(b)m(y)g
+(debuggers)f(is)h(enabled:)1159 1915 y(1.)61 b(The)37
+b Ft(-F)g Fu(option)h(to)g(the)g Ft(declare)d Fu(builtin)i(\(see)i
+(Section)f(4.2)h([Bash)1290 2025 y(Builtins],)29 b(page)g(50\))g
+(displa)m(ys)f(the)g(source)h(\014le)f(name)g(and)f(line)h(n)m(um-)1290
+2134 y(b)s(er)h(corresp)s(onding)g(to)i(eac)m(h)g(function)f(name)g
+(supplied)f(as)i(an)f(argu-)1290 2244 y(men)m(t.)1159
+2381 y(2.)61 b(If)20 b(the)h(command)g(run)e(b)m(y)i(the)f
+Ft(DEBUG)g Fu(trap)g(returns)g(a)h(non-zero)g(v)-5 b(alue,)1290
+2491 y(the)31 b(next)f(command)g(is)h(skipp)s(ed)e(and)g(not)i
+(executed.)1159 2628 y(3.)61 b(If)37 b(the)g(command)g(run)f(b)m(y)i
+(the)f Ft(DEBUG)f Fu(trap)h(returns)f(a)i(v)-5 b(alue)38
+b(of)f(2,)1290 2737 y(and)c(the)g(shell)h(is)f(executing)i(in)e(a)h
+(subroutine)e(\(a)i(shell)g(function)f(or)1290 2847 y(a)h(shell)g
+(script)f(executed)h(b)m(y)g(the)f Ft(.)h Fu(or)f Ft(source)f
+Fu(builtins\),)i(the)g(shell)1290 2956 y(sim)m(ulates)d(a)g(call)h(to)f
+Ft(return)p Fu(.)1159 3093 y(4.)61 b Ft(BASH_ARGC)34
+b Fu(and)i Ft(BASH_ARGV)e Fu(are)j(up)s(dated)e(as)h(describ)s(ed)g(in)
+g(their)1290 3203 y(descriptions)30 b(\(see)i(Section)f(5.2)g([Bash)g
+(V)-8 b(ariables],)32 b(page)f(73\).)1159 3340 y(5.)61
+b(F)-8 b(unction)57 b(tracing)g(is)g(enabled:)93 b(command)56
+b(substitution,)63 b(shell)1290 3450 y(functions,)32
+b(and)e(subshells)h(in)m(v)m(ok)m(ed)i(with)e Ft(\()f
+Fj(command)e Ft(\))j Fu(inherit)h(the)1290 3559 y Ft(DEBUG)d
+Fu(and)h Ft(RETURN)e Fu(traps.)1159 3696 y(6.)61 b(Error)41
+b(tracing)i(is)f(enabled:)63 b(command)42 b(substitution,)i(shell)f
+(func-)1290 3806 y(tions,)32 b(and)e(subshells)g(in)m(v)m(ok)m(ed)i
+(with)e Ft(\()g Fj(command)f Ft(\))h Fu(inherit)h(the)g
+Ft(ERR)1290 3915 y Fu(trap.)630 4080 y Ft(extglob)144
+b Fu(If)26 b(set,)i(the)f(extended)f(pattern)h(matc)m(hing)g(features)g
+(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)1110 4189 y(Section)j(3.5.8.1)i
+([P)m(attern)f(Matc)m(hing],)g(page)f(33\))h(are)f(enabled.)630
+4354 y Ft(extquote)96 b Fu(If)51 b(set,)58 b Ft($')p
+Fj(string)p Ft(')49 b Fu(and)i Ft($")p Fj(string)p Ft(")e
+Fu(quoting)k(is)e(p)s(erformed)f(within)1110 4463 y Ft(${)p
+Fj(parameter)p Ft(})31 b Fu(expansions)k(enclosed)g(in)g(double)f
+(quotes.)55 b(This)33 b(option)1110 4573 y(is)d(enabled)h(b)m(y)f
+(default.)630 4737 y Ft(failglob)96 b Fu(If)36 b(set,)j(patterns)d
+(whic)m(h)g(fail)h(to)h(matc)m(h)f(\014lenames)f(during)g(\014lename)g
+(ex-)1110 4847 y(pansion)30 b(result)g(in)g(an)g(expansion)h(error.)630
+5011 y Ft(force_fignore)1110 5121 y Fu(If)43 b(set,)k(the)d(su\016xes)f
+(sp)s(eci\014ed)f(b)m(y)i(the)f Ft(FIGNORE)f Fu(shell)h(v)-5
+b(ariable)44 b(cause)1110 5230 y(w)m(ords)31 b(to)h(b)s(e)f(ignored)h
+(when)f(p)s(erforming)f(w)m(ord)h(completion)i(ev)m(en)f(if)g(the)1110
+5340 y(ignored)37 b(w)m(ords)g(are)g(the)h(only)f(p)s(ossible)g
+(completions.)62 b(See)37 b(Section)h(5.2)p eop end
+%%Page: 69 75
+TeXDict begin 69 74 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(69)1110 299 y([Bash)24
+b(V)-8 b(ariables],)27 b(page)e(73,)h(for)d(a)h(description)g(of)g
+Ft(FIGNORE)p Fu(.)37 b(This)22 b(option)1110 408 y(is)30
+b(enabled)h(b)m(y)f(default.)630 603 y Ft(globasciiranges)1110
+713 y Fu(If)j(set,)h(range)f(expressions)g(used)f(in)h(pattern)g(matc)m
+(hing)h(brac)m(k)m(et)h(expres-)1110 822 y(sions)28 b(\(see)h(Section)h
+(3.5.8.1)g([P)m(attern)g(Matc)m(hing],)h(page)e(33\))g(b)s(eha)m(v)m(e)
+g(as)g(if)1110 932 y(in)i(the)g(traditional)i(C)d(lo)s(cale)j(when)d(p)
+s(erforming)g(comparisons.)44 b(That)31 b(is,)1110 1042
+y(the)d(curren)m(t)g(lo)s(cale's)i(collating)h(sequence)d(is)h(not)f
+(tak)m(en)h(in)m(to)g(accoun)m(t,)i(so)1110 1151 y(`)p
+Ft(b)p Fu(')j(will)g(not)g(collate)i(b)s(et)m(w)m(een)e(`)p
+Ft(A)p Fu(')g(and)f(`)p Ft(B)p Fu(',)h(and)f(upp)s(er-case)g(and)g(lo)m
+(w)m(er-)1110 1261 y(case)e(ASCI)s(I)e(c)m(haracters)j(will)f(collate)i
+(together.)630 1456 y Ft(globstar)96 b Fu(If)38 b(set,)j(the)e(pattern)
+f(`)p Ft(**)p Fu(')h(used)e(in)i(a)f(\014lename)h(expansion)f(con)m
+(text)j(will)1110 1565 y(matc)m(h)36 b(all)g(\014les)f(and)f(zero)i(or)
+f(more)g(directories)h(and)e(sub)s(directories.)54 b(If)1110
+1675 y(the)30 b(pattern)g(is)g(follo)m(w)m(ed)i(b)m(y)d(a)i(`)p
+Ft(/)p Fu(',)f(only)g(directories)h(and)f(sub)s(directories)1110
+1784 y(matc)m(h.)630 1979 y Ft(gnu_errfmt)1110 2089 y
+Fu(If)35 b(set,)j(shell)e(error)g(messages)g(are)h(written)e(in)h(the)g
+(standard)f Fm(gnu)g Fu(error)1110 2198 y(message)c(format.)630
+2393 y Ft(histappend)1110 2503 y Fu(If)c(set,)j(the)e(history)g(list)g
+(is)g(app)s(ended)e(to)j(the)f(\014le)g(named)f(b)m(y)h(the)g(v)-5
+b(alue)29 b(of)1110 2612 y(the)d Ft(HISTFILE)d Fu(v)-5
+b(ariable)26 b(when)e(the)h(shell)h(exits,)h(rather)e(than)h(o)m(v)m
+(erwriting)1110 2722 y(the)31 b(\014le.)630 2917 y Ft(histreedit)1110
+3026 y Fu(If)i(set,)h(and)f(Readline)h(is)f(b)s(eing)g(used,)g(a)g
+(user)g(is)g(giv)m(en)h(the)g(opp)s(ortunit)m(y)1110
+3136 y(to)d(re-edit)g(a)g(failed)g(history)f(substitution.)630
+3331 y Ft(histverify)1110 3440 y Fu(If)35 b(set,)i(and)e(Readline)h(is)
+f(b)s(eing)g(used,)h(the)f(results)g(of)g(history)h(substitu-)1110
+3550 y(tion)h(are)g(not)g(immediately)h(passed)e(to)h(the)g(shell)g
+(parser.)59 b(Instead,)38 b(the)1110 3660 y(resulting)i(line)f(is)h
+(loaded)g(in)m(to)g(the)g(Readline)g(editing)g(bu\013er,)h(allo)m(wing)
+1110 3769 y(further)29 b(mo)s(di\014cation.)630 3964
+y Ft(hostcomplete)1110 4074 y Fu(If)38 b(set,)j(and)c(Readline)i(is)f
+(b)s(eing)g(used,)h(Bash)g(will)f(attempt)h(to)g(p)s(erform)1110
+4183 y(hostname)d(completion)h(when)e(a)h(w)m(ord)f(con)m(taining)i(a)f
+(`)p Ft(@)p Fu(')g(is)g(b)s(eing)f(com-)1110 4293 y(pleted)g(\(see)h
+(Section)f(8.4.6)i([Commands)d(F)-8 b(or)36 b(Completion],)g(page)g
+(127\).)1110 4402 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)
+630 4597 y Ft(huponexit)1110 4707 y Fu(If)i(set,)i(Bash)f(will)h(send)d
+Ft(SIGHUP)h Fu(to)h(all)h(jobs)e(when)g(an)g(in)m(teractiv)m(e)k(login)
+1110 4816 y(shell)31 b(exits)g(\(see)g(Section)g(3.7.6)h([Signals],)g
+(page)f(41\).)630 5011 y Ft(inherit_errexit)1110 5121
+y Fu(If)e(set,)h(command)g(substitution)f(inherits)g(the)g(v)-5
+b(alue)30 b(of)g(the)f Ft(errexit)f Fu(op-)1110 5230
+y(tion,)33 b(instead)g(of)f(unsetting)g(it)h(in)f(the)g(subshell)f(en)m
+(vironmen)m(t.)46 b(This)32 b(op-)1110 5340 y(tion)f(is)f(enabled)h
+(when)e Fm(posix)h Fu(mo)s(de)g(is)g(enabled.)p eop end
+%%Page: 70 76
+TeXDict begin 70 75 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(70)630 299 y Ft
+(interactive_comments)1110 408 y Fu(Allo)m(w)27 b(a)g(w)m(ord)e(b)s
+(eginning)g(with)h(`)p Ft(#)p Fu(')g(to)h(cause)f(that)h(w)m(ord)f(and)
+f(all)i(remain-)1110 518 y(ing)41 b(c)m(haracters)i(on)e(that)h(line)g
+(to)g(b)s(e)f(ignored)g(in)g(an)g(in)m(teractiv)m(e)j(shell.)1110
+628 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)630
+777 y Ft(lastpipe)96 b Fu(If)24 b(set,)i(and)e(job)g(con)m(trol)i(is)f
+(not)f(activ)m(e,)k(the)d(shell)f(runs)f(the)i(last)g(command)1110
+887 y(of)37 b(a)h(pip)s(eline)e(not)h(executed)h(in)f(the)g(bac)m
+(kground)g(in)g(the)g(curren)m(t)g(shell)1110 996 y(en)m(vironmen)m(t.)
+630 1146 y Ft(lithist)144 b Fu(If)22 b(enabled,)i(and)d(the)h
+Ft(cmdhist)e Fu(option)j(is)f(enabled,)i(m)m(ulti-line)f(commands)1110
+1255 y(are)28 b(sa)m(v)m(ed)h(to)g(the)f(history)g(with)f(em)m(b)s
+(edded)g(newlines)h(rather)g(than)f(using)1110 1365 y(semicolon)32
+b(separators)f(where)e(p)s(ossible.)630 1514 y Ft(localvar_inherit)1110
+1624 y Fu(If)j(set,)h(lo)s(cal)g(v)-5 b(ariables)33 b(inherit)f(the)g
+(v)-5 b(alue)32 b(and)g(attributes)h(of)f(a)g(v)-5 b(ariable)1110
+1733 y(of)36 b(the)g(same)g(name)g(that)h(exists)f(at)h(a)f(previous)g
+(scop)s(e)g(b)s(efore)f(an)m(y)h(new)1110 1843 y(v)-5
+b(alue)31 b(is)f(assigned.)41 b(The)30 b Fr(nameref)48
+b Fu(attribute)31 b(is)f(not)h(inherited.)630 1993 y
+Ft(localvar_unset)1110 2102 y Fu(If)i(set,)i(calling)g
+Ft(unset)d Fu(on)i(lo)s(cal)g(v)-5 b(ariables)35 b(in)e(previous)g
+(function)g(scop)s(es)1110 2212 y(marks)26 b(them)g(so)g(subsequen)m(t)
+g(lo)s(okups)f(\014nd)g(them)h(unset)f(un)m(til)i(that)g(func-)1110
+2321 y(tion)40 b(returns.)68 b(This)39 b(is)g(iden)m(tical)j(to)e(the)g
+(b)s(eha)m(vior)g(of)g(unsetting)g(lo)s(cal)1110 2431
+y(v)-5 b(ariables)31 b(at)g(the)g(curren)m(t)f(function)g(scop)s(e.)630
+2580 y Ft(login_shell)1110 2690 y Fu(The)35 b(shell)h(sets)g(this)f
+(option)h(if)g(it)g(is)f(started)h(as)g(a)g(login)g(shell)g(\(see)g
+(Sec-)1110 2800 y(tion)29 b(6.1)g([In)m(v)m(oking)h(Bash],)f(page)g
+(85\).)41 b(The)28 b(v)-5 b(alue)29 b(ma)m(y)g(not)f(b)s(e)g(c)m
+(hanged.)630 2949 y Ft(mailwarn)96 b Fu(If)34 b(set,)i(and)e(a)h
+(\014le)g(that)g(Bash)f(is)h(c)m(hec)m(king)h(for)f(mail)g(has)f(b)s
+(een)g(accessed)1110 3059 y(since)24 b(the)h(last)g(time)f(it)h(w)m(as)
+f(c)m(hec)m(k)m(ed,)k(the)c(message)h Ft("The)k(mail)h(in)f
+Fj(mail-)1110 3168 y(file)g Ft(has)h(been)f(read")g Fu(is)h(displa)m(y)
+m(ed.)630 3318 y Ft(no_empty_cmd_completion)1110 3427
+y Fu(If)g(set,)g(and)g(Readline)g(is)h(b)s(eing)e(used,)h(Bash)g(will)g
+(not)g(attempt)i(to)e(searc)m(h)1110 3537 y(the)25 b
+Ft(PATH)f Fu(for)h(p)s(ossible)f(completions)j(when)d(completion)i(is)f
+(attempted)h(on)1110 3646 y(an)k(empt)m(y)h(line.)630
+3796 y Ft(nocaseglob)1110 3905 y Fu(If)38 b(set,)k(Bash)d(matc)m(hes)g
+(\014lenames)g(in)f(a)h(case-insensitiv)m(e)j(fashion)c(when)1110
+4015 y(p)s(erforming)29 b(\014lename)i(expansion.)630
+4164 y Ft(nocasematch)1110 4274 y Fu(If)42 b(set,)k(Bash)d(matc)m(hes)g
+(patterns)g(in)f(a)h(case-insensitiv)m(e)i(fashion)d(when)1110
+4384 y(p)s(erforming)31 b(matc)m(hing)i(while)f(executing)i
+Ft(case)d Fu(or)h Ft([[)g Fu(conditional)h(com-)1110
+4493 y(mands,)d(when)g(p)s(erforming)g(pattern)h(substitution)g(w)m
+(ord)g(expansions,)g(or)1110 4603 y(when)g(\014ltering)i(p)s(ossible)f
+(completions)h(as)g(part)f(of)h(programmable)f(com-)1110
+4712 y(pletion.)630 4862 y Ft(nullglob)96 b Fu(If)23
+b(set,)j(Bash)e(allo)m(ws)g(\014lename)g(patterns)g(whic)m(h)f(matc)m
+(h)h(no)g(\014les)f(to)i(expand)1110 4971 y(to)31 b(a)g(n)m(ull)f
+(string,)h(rather)f(than)g(themselv)m(es.)630 5121 y
+Ft(progcomp)96 b Fu(If)25 b(set,)i(the)f(programmable)g(completion)g
+(facilities)i(\(see)f(Section)f(8.6)h([Pro-)1110 5230
+y(grammable)45 b(Completion],)k(page)c(132\))h(are)f(enabled.)82
+b(This)44 b(option)h(is)1110 5340 y(enabled)30 b(b)m(y)h(default.)p
+eop end
+%%Page: 71 77
+TeXDict begin 71 76 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(71)630 299 y Ft(progcomp_alias)
+1110 408 y Fu(If)23 b(set,)j(and)d(programmable)h(completion)h(is)f
+(enabled,)h(Bash)f(treats)h(a)f(com-)1110 518 y(mand)34
+b(name)h(that)g(do)s(esn't)f(ha)m(v)m(e)i(an)m(y)g(completions)f(as)g
+(a)g(p)s(ossible)g(alias)1110 628 y(and)40 b(attempts)i(alias)h
+(expansion.)72 b(If)41 b(it)g(has)g(an)g(alias,)k(Bash)c(attempts)1110
+737 y(programmable)28 b(completion)h(using)e(the)h(command)f(w)m(ord)h
+(resulting)f(from)1110 847 y(the)k(expanded)e(alias.)630
+996 y Ft(promptvars)1110 1106 y Fu(If)50 b(set,)56 b(prompt)49
+b(strings)h(undergo)g(parameter)h(expansion,)k(command)1110
+1215 y(substitution,)35 b(arithmetic)g(expansion,)g(and)e(quote)i(remo)
+m(v)-5 b(al)35 b(after)f(b)s(eing)1110 1325 y(expanded)53
+b(as)h(describ)s(ed)e(b)s(elo)m(w)i(\(see)h(Section)f(6.9)h([Con)m
+(trolling)g(the)1110 1434 y(Prompt],)30 b(page)h(97\).)42
+b(This)30 b(option)h(is)f(enabled)h(b)m(y)f(default.)630
+1584 y Ft(restricted_shell)1110 1693 y Fu(The)40 b(shell)h(sets)g(this)
+g(option)g(if)g(it)h(is)e(started)i(in)e(restricted)i(mo)s(de)e(\(see)
+1110 1803 y(Section)c(6.10)g([The)f(Restricted)g(Shell],)i(page)e
+(99\).)56 b(The)34 b(v)-5 b(alue)35 b(ma)m(y)h(not)1110
+1913 y(b)s(e)c(c)m(hanged.)49 b(This)32 b(is)h(not)h(reset)f(when)f
+(the)h(startup)g(\014les)f(are)i(executed,)1110 2022
+y(allo)m(wing)k(the)e(startup)f(\014les)h(to)g(disco)m(v)m(er)h
+(whether)f(or)f(not)i(a)f(shell)g(is)g(re-)1110 2132
+y(stricted.)630 2281 y Ft(shift_verbose)1110 2391 y Fu(If)g(this)g(is)g
+(set,)j(the)d Ft(shift)f Fu(builtin)h(prin)m(ts)f(an)h(error)g(message)
+i(when)d(the)1110 2500 y(shift)30 b(coun)m(t)h(exceeds)g(the)g(n)m(um)m
+(b)s(er)e(of)h(p)s(ositional)i(parameters.)630 2649 y
+Ft(sourcepath)1110 2759 y Fu(If)22 b(set,)j(the)e Ft(source)e
+Fu(builtin)h(uses)g(the)h(v)-5 b(alue)23 b(of)g Ft(PATH)e
+Fu(to)j(\014nd)d(the)h(directory)1110 2869 y(con)m(taining)29
+b(the)e(\014le)h(supplied)e(as)h(an)g(argumen)m(t.)40
+b(This)27 b(option)h(is)f(enabled)1110 2978 y(b)m(y)j(default.)630
+3127 y Ft(xpg_echo)96 b Fu(If)31 b(set,)h(the)g Ft(echo)e
+Fu(builtin)h(expands)f(bac)m(kslash-escap)s(e)j(sequences)f(b)m(y)f
+(de-)1110 3237 y(fault.)630 3386 y(The)c(return)f(status)i(when)f
+(listing)h(options)g(is)f(zero)i(if)e(all)i Fr(optnames)i
+Fu(are)d(enabled,)g(non-)630 3496 y(zero)40 b(otherwise.)66
+b(When)39 b(setting)h(or)f(unsetting)g(options,)i(the)e(return)f
+(status)h(is)g(zero)630 3606 y(unless)30 b(an)g Fr(optname)36
+b Fu(is)30 b(not)h(a)g(v)-5 b(alid)30 b(shell)h(option.)150
+3836 y Fs(4.4)68 b(Sp)t(ecial)45 b(Builtins)150 3996
+y Fu(F)-8 b(or)35 b(historical)h(reasons,)g(the)e Fm(posix)g
+Fu(standard)f(has)i(classi\014ed)f(sev)m(eral)i(builtin)e(commands)g
+(as)h Fl(sp)-5 b(e-)150 4105 y(cial)p Fu(.)47 b(When)33
+b(Bash)f(is)h(executing)g(in)f Fm(posix)g Fu(mo)s(de,)h(the)g(sp)s
+(ecial)g(builtins)e(di\013er)i(from)f(other)g(builtin)150
+4215 y(commands)e(in)g(three)h(resp)s(ects:)199 4344
+y(1.)61 b(Sp)s(ecial)31 b(builtins)e(are)i(found)e(b)s(efore)h(shell)h
+(functions)f(during)f(command)h(lo)s(okup.)199 4474 y(2.)61
+b(If)30 b(a)h(sp)s(ecial)g(builtin)f(returns)f(an)h(error)g(status,)h
+(a)g(non-in)m(teractiv)m(e)i(shell)d(exits.)199 4603
+y(3.)61 b(Assignmen)m(t)30 b(statemen)m(ts)h(preceding)f(the)f(command)
+g(sta)m(y)i(in)e(e\013ect)i(in)e(the)h(shell)f(en)m(vironmen)m(t)330
+4713 y(after)i(the)f(command)h(completes.)275 4862 y(When)36
+b(Bash)g(is)h(not)f(executing)i(in)e Fm(posix)f Fu(mo)s(de,)j(these)f
+(builtins)f(b)s(eha)m(v)m(e)h(no)f(di\013eren)m(tly)h(than)150
+4972 y(the)31 b(rest)f(of)h(the)f(Bash)h(builtin)e(commands.)41
+b(The)30 b(Bash)g Fm(posix)g Fu(mo)s(de)g(is)g(describ)s(ed)f(in)h
+(Section)h(6.11)150 5081 y([Bash)g(POSIX)e(Mo)s(de],)i(page)g(99.)275
+5211 y(These)f(are)g(the)h Fm(posix)f Fu(sp)s(ecial)h(builtins:)390
+5340 y Ft(break)46 b(:)i(.)f(continue)f(eval)g(exec)h(exit)g(export)f
+(readonly)f(return)h(set)p eop end
+%%Page: 72 78
+TeXDict begin 72 77 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(72)390 299 y Ft(shift)46
+b(trap)h(unset)p eop end
+%%Page: 73 79
+TeXDict begin 73 78 bop 3659 -116 a Fu(73)150 299 y Fp(5)80
+b(Shell)53 b(V)-13 b(ariables)150 522 y Fu(This)21 b(c)m(hapter)i
+(describ)s(es)e(the)i(shell)f(v)-5 b(ariables)23 b(that)f(Bash)h(uses.)
+37 b(Bash)23 b(automatically)h(assigns)f(default)150
+631 y(v)-5 b(alues)31 b(to)g(a)g(n)m(um)m(b)s(er)e(of)h(v)-5
+b(ariables.)150 867 y Fs(5.1)68 b(Bourne)45 b(Shell)g(V)-11
+b(ariables)150 1027 y Fu(Bash)30 b(uses)g(certain)h(shell)g(v)-5
+b(ariables)31 b(in)f(the)g(same)h(w)m(a)m(y)g(as)g(the)f(Bourne)g
+(shell.)41 b(In)30 b(some)g(cases,)i(Bash)150 1136 y(assigns)f(a)f
+(default)h(v)-5 b(alue)31 b(to)g(the)f(v)-5 b(ariable.)150
+1291 y Ft(CDPATH)192 b Fu(A)39 b(colon-separated)i(list)e(of)g
+(directories)h(used)f(as)g(a)g(searc)m(h)h(path)e(for)h(the)g
+Ft(cd)f Fu(builtin)630 1401 y(command.)150 1556 y Ft(HOME)288
+b Fu(The)23 b(curren)m(t)h(user's)f(home)g(directory;)k(the)d(default)g
+(for)f(the)h Ft(cd)f Fu(builtin)g(command.)38 b(The)630
+1665 y(v)-5 b(alue)37 b(of)f(this)g(v)-5 b(ariable)37
+b(is)g(also)g(used)e(b)m(y)h(tilde)h(expansion)f(\(see)i(Section)f
+(3.5.2)h([Tilde)630 1775 y(Expansion],)30 b(page)h(23\).)150
+1930 y Ft(IFS)336 b Fu(A)25 b(list)i(of)e(c)m(haracters)i(that)f
+(separate)g(\014elds;)h(used)e(when)f(the)i(shell)f(splits)h(w)m(ords)e
+(as)i(part)630 2039 y(of)31 b(expansion.)150 2194 y Ft(MAIL)288
+b Fu(If)44 b(this)g(parameter)h(is)g(set)g(to)g(a)f(\014lename)h(or)f
+(directory)h(name)g(and)f(the)g Ft(MAILPATH)630 2304
+y Fu(v)-5 b(ariable)32 b(is)e(not)h(set,)h(Bash)f(informs)f(the)h(user)
+f(of)h(the)g(arriv)-5 b(al)31 b(of)g(mail)g(in)g(the)g(sp)s(eci\014ed)
+630 2413 y(\014le)f(or)h(Maildir-format)g(directory)-8
+b(.)150 2568 y Ft(MAILPATH)96 b Fu(A)33 b(colon-separated)i(list)f(of)f
+(\014lenames)h(whic)m(h)f(the)g(shell)g(p)s(erio)s(dically)h(c)m(hec)m
+(ks)g(for)f(new)630 2678 y(mail.)60 b(Eac)m(h)37 b(list)g(en)m(try)g
+(can)g(sp)s(ecify)f(the)h(message)h(that)f(is)g(prin)m(ted)f(when)f
+(new)h(mail)630 2787 y(arriv)m(es)31 b(in)g(the)g(mail)g(\014le)g(b)m
+(y)g(separating)h(the)f(\014lename)g(from)f(the)h(message)h(with)e(a)i
+(`)p Ft(?)p Fu('.)630 2897 y(When)g(used)f(in)h(the)g(text)i(of)e(the)g
+(message,)i Ft($_)e Fu(expands)f(to)i(the)f(name)g(of)h(the)f(curren)m
+(t)630 3006 y(mail)f(\014le.)150 3161 y Ft(OPTARG)192
+b Fu(The)30 b(v)-5 b(alue)31 b(of)f(the)h(last)g(option)g(argumen)m(t)g
+(pro)s(cessed)f(b)m(y)g(the)g Ft(getopts)f Fu(builtin.)150
+3316 y Ft(OPTIND)192 b Fu(The)30 b(index)g(of)g(the)h(last)g(option)g
+(argumen)m(t)g(pro)s(cessed)f(b)m(y)g(the)g Ft(getopts)f
+Fu(builtin.)150 3471 y Ft(PATH)288 b Fu(A)32 b(colon-separated)i(list)f
+(of)f(directories)h(in)e(whic)m(h)h(the)g(shell)g(lo)s(oks)h(for)f
+(commands.)45 b(A)630 3581 y(zero-length)e(\(n)m(ull\))g(directory)f
+(name)g(in)g(the)g(v)-5 b(alue)42 b(of)g Ft(PATH)f Fu(indicates)i(the)f
+(curren)m(t)630 3690 y(directory)-8 b(.)49 b(A)33 b(n)m(ull)f
+(directory)i(name)e(ma)m(y)i(app)s(ear)e(as)h(t)m(w)m(o)h(adjacen)m(t)g
+(colons,)g(or)f(as)g(an)630 3800 y(initial)f(or)e(trailing)h(colon.)150
+3955 y Ft(PS1)336 b Fu(The)35 b(primary)f(prompt)h(string.)55
+b(The)35 b(default)h(v)-5 b(alue)35 b(is)h(`)p Ft(\\s-\\v\\$)28
+b Fu('.)56 b(See)36 b(Section)g(6.9)630 4064 y([Con)m(trolling)42
+b(the)e(Prompt],)j(page)e(97,)j(for)c(the)g(complete)i(list)f(of)f
+(escap)s(e)h(sequences)630 4174 y(that)31 b(are)g(expanded)e(b)s(efore)
+h Ft(PS1)g Fu(is)g(displa)m(y)m(ed.)150 4329 y Ft(PS2)336
+b Fu(The)28 b(secondary)g(prompt)g(string.)40 b(The)28
+b(default)g(v)-5 b(alue)29 b(is)g(`)p Ft(>)h Fu('.)40
+b Ft(PS2)28 b Fu(is)g(expanded)g(in)g(the)630 4438 y(same)j(w)m(a)m(y)g
+(as)g Ft(PS1)e Fu(b)s(efore)h(b)s(eing)g(displa)m(y)m(ed.)150
+4674 y Fs(5.2)68 b(Bash)45 b(V)-11 b(ariables)150 4834
+y Fu(These)45 b(v)-5 b(ariables)46 b(are)g(set)g(or)f(used)f(b)m(y)h
+(Bash,)50 b(but)44 b(other)i(shells)f(do)h(not)f(normally)h(treat)g
+(them)150 4943 y(sp)s(ecially)-8 b(.)275 5076 y(A)24
+b(few)g(v)-5 b(ariables)24 b(used)g(b)m(y)f(Bash)i(are)f(describ)s(ed)f
+(in)h(di\013eren)m(t)g(c)m(hapters:)38 b(v)-5 b(ariables)25
+b(for)f(con)m(trolling)150 5185 y(the)31 b(job)f(con)m(trol)h
+(facilities)i(\(see)e(Section)g(7.3)h([Job)e(Con)m(trol)h(V)-8
+b(ariables],)32 b(page)g(106\).)150 5340 y Ft(BASH)288
+b Fu(The)30 b(full)g(pathname)g(used)g(to)h(execute)h(the)e(curren)m(t)
+g(instance)h(of)g(Bash.)p eop end
+%%Page: 74 80
+TeXDict begin 74 79 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(74)150 299 y Ft(BASHOPTS)96
+b Fu(A)31 b(colon-separated)h(list)f(of)g(enabled)f(shell)h(options.)41
+b(Eac)m(h)31 b(w)m(ord)f(in)g(the)h(list)g(is)g(a)g(v)-5
+b(alid)630 408 y(argumen)m(t)37 b(for)g(the)g Ft(-s)f
+Fu(option)i(to)f(the)g Ft(shopt)f Fu(builtin)g(command)h(\(see)g
+(Section)h(4.3.2)630 518 y([The)e(Shopt)g(Builtin],)i(page)f(65\).)60
+b(The)36 b(options)h(app)s(earing)f(in)g Ft(BASHOPTS)e
+Fu(are)i(those)630 628 y(rep)s(orted)e(as)h(`)p Ft(on)p
+Fu(')f(b)m(y)h(`)p Ft(shopt)p Fu('.)53 b(If)34 b(this)g(v)-5
+b(ariable)36 b(is)f(in)f(the)h(en)m(vironmen)m(t)g(when)f(Bash)630
+737 y(starts)25 b(up,)f(eac)m(h)i(shell)e(option)h(in)e(the)i(list)g
+(will)f(b)s(e)g(enabled)g(b)s(efore)g(reading)g(an)m(y)g(startup)630
+847 y(\014les.)41 b(This)29 b(v)-5 b(ariable)31 b(is)g(readonly)-8
+b(.)150 1044 y Ft(BASHPID)144 b Fu(Expands)35 b(to)i(the)f(pro)s(cess)f
+(ID)i(of)f(the)g(curren)m(t)g(Bash)g(pro)s(cess.)58 b(This)35
+b(di\013ers)h(from)g Ft($$)630 1154 y Fu(under)31 b(certain)j
+(circumstances,)h(suc)m(h)e(as)g(subshells)f(that)i(do)f(not)g(require)
+g(Bash)g(to)h(b)s(e)630 1263 y(re-initialized.)57 b(Assignmen)m(ts)35
+b(to)h Ft(BASHPID)d Fu(ha)m(v)m(e)j(no)f(e\013ect.)56
+b(If)34 b Ft(BASHPID)f Fu(is)i(unset,)h(it)630 1373 y(loses)31
+b(its)g(sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g
+(subsequen)m(tly)f(reset.)150 1570 y Ft(BASH_ALIASES)630
+1680 y Fu(An)40 b(asso)s(ciativ)m(e)j(arra)m(y)d(v)-5
+b(ariable)41 b(whose)f(mem)m(b)s(ers)f(corresp)s(ond)g(to)i(the)f(in)m
+(ternal)h(list)630 1789 y(of)c(aliases)h(as)f(main)m(tained)g(b)m(y)g
+(the)g Ft(alias)e Fu(builtin.)59 b(\(see)37 b(Section)h(4.1)f([Bourne)g
+(Shell)630 1899 y(Builtins],)31 b(page)g(43\).)42 b(Elemen)m(ts)31
+b(added)e(to)i(this)f(arra)m(y)h(app)s(ear)f(in)g(the)g(alias)h(list;)h
+(ho)m(w-)630 2008 y(ev)m(er,)k(unsetting)f(arra)m(y)g(elemen)m(ts)g
+(curren)m(tly)g(do)s(es)f(not)g(cause)h(aliases)h(to)f(b)s(e)f(remo)m
+(v)m(ed)630 2118 y(from)25 b(the)h(alias)h(list.)40 b(If)25
+b Ft(BASH_ALIASES)d Fu(is)k(unset,)g(it)g(loses)h(its)f(sp)s(ecial)g
+(prop)s(erties,)g(ev)m(en)630 2228 y(if)k(it)h(is)g(subsequen)m(tly)f
+(reset.)150 2425 y Ft(BASH_ARGC)630 2534 y Fu(An)39 b(arra)m(y)g(v)-5
+b(ariable)40 b(whose)f(v)-5 b(alues)39 b(are)h(the)f(n)m(um)m(b)s(er)f
+(of)h(parameters)g(in)g(eac)m(h)h(frame)630 2644 y(of)i(the)g(curren)m
+(t)g(bash)f(execution)i(call)g(stac)m(k.)76 b(The)42
+b(n)m(um)m(b)s(er)e(of)i(parameters)g(to)h(the)630 2754
+y(curren)m(t)38 b(subroutine)f(\(shell)i(function)e(or)i(script)f
+(executed)h(with)e Ft(.)h Fu(or)g Ft(source)p Fu(\))f(is)h(at)630
+2863 y(the)27 b(top)g(of)g(the)g(stac)m(k.)41 b(When)27
+b(a)g(subroutine)f(is)h(executed,)i(the)e(n)m(um)m(b)s(er)f(of)h
+(parameters)630 2973 y(passed)44 b(is)h(pushed)e(on)m(to)j
+Ft(BASH_ARGC)p Fu(.)81 b(The)44 b(shell)h(sets)g Ft(BASH_ARGC)e
+Fu(only)i(when)e(in)630 3082 y(extended)34 b(debugging)f(mo)s(de)g
+(\(see)i(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)i(page)g(65,)g(for)
+630 3192 y(a)e(description)g(of)f(the)h Ft(extdebug)d
+Fu(option)j(to)h(the)e Ft(shopt)g Fu(builtin\).)47 b(Setting)33
+b Ft(extdebug)630 3302 y Fu(after)c(the)g(shell)g(has)g(started)g(to)g
+(execute)i(a)e(script,)g(or)g(referencing)g(this)f(v)-5
+b(ariable)30 b(when)630 3411 y Ft(extdebug)e Fu(is)j(not)f(set,)h(ma)m
+(y)g(result)g(in)f(inconsisten)m(t)h(v)-5 b(alues.)150
+3608 y Ft(BASH_ARGV)630 3718 y Fu(An)24 b(arra)m(y)g(v)-5
+b(ariable)25 b(con)m(taining)h(all)f(of)f(the)h(parameters)f(in)g(the)g
+(curren)m(t)g(bash)g(execution)630 3828 y(call)35 b(stac)m(k.)53
+b(The)34 b(\014nal)g(parameter)g(of)g(the)g(last)h(subroutine)e(call)i
+(is)f(at)h(the)f(top)h(of)f(the)630 3937 y(stac)m(k;)28
+b(the)c(\014rst)f(parameter)i(of)f(the)g(initial)i(call)f(is)f(at)h
+(the)f(b)s(ottom.)39 b(When)24 b(a)g(subroutine)630 4047
+y(is)40 b(executed,)j(the)d(parameters)h(supplied)d(are)i(pushed)f(on)m
+(to)i Ft(BASH_ARGV)p Fu(.)66 b(The)40 b(shell)630 4156
+y(sets)28 b Ft(BASH_ARGV)e Fu(only)i(when)f(in)h(extended)g(debugging)g
+(mo)s(de)g(\(see)h(Section)f(4.3.2)i([The)630 4266 y(Shopt)g(Builtin],)
+h(page)g(65,)g(for)g(a)f(description)h(of)f(the)h Ft(extdebug)d
+Fu(option)j(to)g(the)f Ft(shopt)630 4376 y Fu(builtin\).)64
+b(Setting)38 b Ft(extdebug)e Fu(after)j(the)f(shell)g(has)g(started)g
+(to)h(execute)g(a)g(script,)h(or)630 4485 y(referencing)35
+b(this)f(v)-5 b(ariable)35 b(when)e Ft(extdebug)f Fu(is)j(not)f(set,)j
+(ma)m(y)e(result)f(in)g(inconsisten)m(t)630 4595 y(v)-5
+b(alues.)150 4792 y Ft(BASH_ARGV0)630 4902 y Fu(When)31
+b(referenced,)g(this)g(v)-5 b(ariable)32 b(expands)e(to)h(the)h(name)f
+(of)g(the)g(shell)g(or)g(shell)g(script)630 5011 y(\(iden)m(tical)42
+b(to)e Ft($0)p Fu(;)j(See)d(Section)g(3.4.2)i([Sp)s(ecial)e(P)m
+(arameters],)j(page)d(21,)j(for)c(the)h(de-)630 5121
+y(scription)32 b(of)g(sp)s(ecial)g(parameter)g(0\).)45
+b(Assignmen)m(t)32 b(to)h Ft(BASH_ARGV0)c Fu(causes)j(the)f(v)-5
+b(alue)630 5230 y(assigned)34 b(to)h(also)g(b)s(e)e(assigned)h(to)g
+Ft($0)p Fu(.)51 b(If)33 b Ft(BASH_ARGV0)f Fu(is)h(unset,)i(it)f(loses)h
+(its)f(sp)s(ecial)630 5340 y(prop)s(erties,)c(ev)m(en)h(if)f(it)h(is)g
+(subsequen)m(tly)f(reset.)p eop end
+%%Page: 75 81
+TeXDict begin 75 80 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(75)150 299 y Ft(BASH_CMDS)630
+408 y Fu(An)34 b(asso)s(ciativ)m(e)i(arra)m(y)f(v)-5
+b(ariable)35 b(whose)f(mem)m(b)s(ers)f(corresp)s(ond)g(to)i(the)f(in)m
+(ternal)h(hash)630 518 y(table)c(of)g(commands)f(as)g(main)m(tained)h
+(b)m(y)g(the)f Ft(hash)f Fu(builtin)h(\(see)h(Section)g(4.1)h([Bourne)
+630 628 y(Shell)42 b(Builtins],)k(page)d(43\).)77 b(Elemen)m(ts)43
+b(added)e(to)i(this)f(arra)m(y)h(app)s(ear)f(in)f(the)i(hash)630
+737 y(table;)k(ho)m(w)m(ev)m(er,)e(unsetting)c(arra)m(y)g(elemen)m(ts)i
+(curren)m(tly)d(do)s(es)h(not)g(cause)g(command)630 847
+y(names)36 b(to)g(b)s(e)f(remo)m(v)m(ed)i(from)e(the)h(hash)f(table.)58
+b(If)36 b Ft(BASH_CMDS)d Fu(is)j(unset,)h(it)f(loses)h(its)630
+956 y(sp)s(ecial)31 b(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g
+(subsequen)m(tly)f(reset.)150 1129 y Ft(BASH_COMMAND)630
+1238 y Fu(The)39 b(command)h(curren)m(tly)g(b)s(eing)f(executed)i(or)e
+(ab)s(out)h(to)g(b)s(e)f(executed,)44 b(unless)39 b(the)630
+1348 y(shell)g(is)g(executing)g(a)g(command)g(as)g(the)f(result)h(of)g
+(a)g(trap,)i(in)d(whic)m(h)g(case)i(it)f(is)g(the)630
+1457 y(command)30 b(executing)i(at)f(the)f(time)h(of)g(the)g(trap.)150
+1630 y Ft(BASH_COMPAT)630 1739 y Fu(The)i(v)-5 b(alue)34
+b(is)f(used)g(to)h(set)f(the)h(shell's)g(compatibilit)m(y)h(lev)m(el.)
+51 b(See)34 b(Section)g(4.3.2)h([The)630 1849 y(Shopt)40
+b(Builtin],)45 b(page)c(65,)k(for)c(a)g(description)g(of)g(the)g(v)-5
+b(arious)41 b(compatibilit)m(y)i(lev)m(els)630 1958 y(and)31
+b(their)g(e\013ects.)45 b(The)31 b(v)-5 b(alue)31 b(ma)m(y)h(b)s(e)f(a)
+h(decimal)g(n)m(um)m(b)s(er)e(\(e.g.,)j(4.2\))g(or)e(an)h(in)m(teger)
+630 2068 y(\(e.g.,)39 b(42\))f(corresp)s(onding)d(to)i(the)f(desired)f
+(compatibilit)m(y)k(lev)m(el.)59 b(If)36 b Ft(BASH_COMPAT)d
+Fu(is)630 2178 y(unset)k(or)g(set)h(to)g(the)g(empt)m(y)f(string,)j
+(the)d(compatibilit)m(y)j(lev)m(el)f(is)e(set)h(to)g(the)g(default)630
+2287 y(for)i(the)h(curren)m(t)f(v)m(ersion.)72 b(If)40
+b Ft(BASH_COMPAT)e Fu(is)i(set)h(to)h(a)e(v)-5 b(alue)41
+b(that)h(is)e(not)h(one)g(of)630 2397 y(the)f(v)-5 b(alid)40
+b(compatibilit)m(y)i(lev)m(els,)i(the)c(shell)g(prin)m(ts)f(an)h(error)
+f(message)i(and)f(sets)g(the)630 2506 y(compatibilit)m(y)23
+b(lev)m(el)f(to)f(the)f(default)h(for)f(the)g(curren)m(t)g(v)m(ersion.)
+38 b(The)20 b(v)-5 b(alid)21 b(compatibilit)m(y)630 2616
+y(lev)m(els)40 b(corresp)s(ond)e(to)h(the)g(compatibilit)m(y)i(options)
+e(accepted)h(b)m(y)f(the)g Ft(shopt)e Fu(builtin)630
+2725 y(describ)s(ed)20 b(ab)s(o)m(v)m(e)i(\(for)g(example,)h
+Fr(compat42)31 b Fu(means)21 b(that)g(4.2)i(and)d(42)i(are)g(v)-5
+b(alid)21 b(v)-5 b(alues\).)630 2835 y(The)30 b(curren)m(t)g(v)m
+(ersion)h(is)f(also)i(a)e(v)-5 b(alid)31 b(v)-5 b(alue.)150
+3007 y Ft(BASH_ENV)96 b Fu(If)28 b(this)g(v)-5 b(ariable)30
+b(is)e(set)h(when)f(Bash)g(is)h(in)m(v)m(ok)m(ed)h(to)f(execute)h(a)e
+(shell)h(script,)g(its)g(v)-5 b(alue)29 b(is)630 3117
+y(expanded)k(and)h(used)g(as)g(the)h(name)f(of)g(a)h(startup)f(\014le)g
+(to)h(read)f(b)s(efore)g(executing)i(the)630 3226 y(script.)41
+b(See)30 b(Section)h(6.2)h([Bash)f(Startup)e(Files],)j(page)f(87.)150
+3399 y Ft(BASH_EXECUTION_STRING)630 3508 y Fu(The)f(command)g(argumen)m
+(t)h(to)g(the)g Ft(-c)e Fu(in)m(v)m(o)s(cation)k(option.)150
+3680 y Ft(BASH_LINENO)630 3790 y Fu(An)62 b(arra)m(y)i(v)-5
+b(ariable)63 b(whose)g(mem)m(b)s(ers)e(are)j(the)e(line)h(n)m(um)m(b)s
+(ers)f(in)g(source)h(\014les)630 3900 y(where)46 b(eac)m(h)i(corresp)s
+(onding)d(mem)m(b)s(er)h(of)h Fr(FUNCNAME)53 b Fu(w)m(as)47
+b(in)m(v)m(ok)m(ed.)91 b Ft(${BASH_)630 4009 y(LINENO[$i]})39
+b Fu(is)i(the)h(line)g(n)m(um)m(b)s(er)e(in)i(the)f(source)h(\014le)g
+(\()p Ft(${BASH_SOURCE[$i+1]})p Fu(\))630 4119 y(where)d
+Ft(${FUNCNAME[$i]})c Fu(w)m(as)k(called)i(\(or)e Ft
+(${BASH_LINENO[$i-1]})34 b Fu(if)39 b(referenced)630
+4228 y(within)30 b(another)g(shell)h(function\).)41 b(Use)31
+b Ft(LINENO)d Fu(to)j(obtain)g(the)g(curren)m(t)f(line)h(n)m(um)m(b)s
+(er.)150 4401 y Ft(BASH_LOADABLES_PATH)630 4510 y Fu(A)39
+b(colon-separated)i(list)f(of)f(directories)h(in)f(whic)m(h)g(the)g
+(shell)h(lo)s(oks)f(for)g(dynamically)630 4620 y(loadable)32
+b(builtins)d(sp)s(eci\014ed)h(b)m(y)g(the)h Ft(enable)e
+Fu(command.)150 4792 y Ft(BASH_REMATCH)630 4902 y Fu(An)43
+b(arra)m(y)i(v)-5 b(ariable)44 b(whose)g(mem)m(b)s(ers)f(are)h
+(assigned)g(b)m(y)f(the)h(`)p Ft(=~)p Fu(')g(binary)f(op)s(erator)630
+5011 y(to)37 b(the)f Ft([[)g Fu(conditional)i(command)e(\(see)h
+(Section)g(3.2.4.2)i([Conditional)e(Constructs],)630
+5121 y(page)e(11\).)52 b(The)33 b(elemen)m(t)j(with)d(index)g(0)i(is)f
+(the)g(p)s(ortion)f(of)h(the)g(string)g(matc)m(hing)h(the)630
+5230 y(en)m(tire)29 b(regular)f(expression.)40 b(The)27
+b(elemen)m(t)j(with)d(index)h Fr(n)f Fu(is)h(the)g(p)s(ortion)g(of)g
+(the)g(string)630 5340 y(matc)m(hing)j(the)g Fr(n)p Fu(th)f(paren)m
+(thesized)h(sub)s(expression.)39 b(This)29 b(v)-5 b(ariable)31
+b(is)g(read-only)-8 b(.)p eop end
+%%Page: 76 82
+TeXDict begin 76 81 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(76)150 299 y Ft(BASH_SOURCE)630
+408 y Fu(An)40 b(arra)m(y)h(v)-5 b(ariable)41 b(whose)f(mem)m(b)s(ers)g
+(are)h(the)g(source)f(\014lenames)h(where)f(the)g(corre-)630
+518 y(sp)s(onding)27 b(shell)i(function)f(names)g(in)g(the)h
+Ft(FUNCNAME)d Fu(arra)m(y)j(v)-5 b(ariable)30 b(are)f(de\014ned.)38
+b(The)630 628 y(shell)26 b(function)g Ft(${FUNCNAME[$i]})c
+Fu(is)k(de\014ned)f(in)g(the)h(\014le)h Ft(${BASH_SOURCE[$i]})21
+b Fu(and)630 737 y(called)32 b(from)d Ft(${BASH_SOURCE[$i+1]})150
+892 y(BASH_SUBSHELL)630 1002 y Fu(Incremen)m(ted)24 b(b)m(y)f(one)h
+(within)f(eac)m(h)i(subshell)d(or)i(subshell)e(en)m(vironmen)m(t)i
+(when)f(the)h(shell)630 1112 y(b)s(egins)30 b(executing)h(in)f(that)h
+(en)m(vironmen)m(t.)42 b(The)30 b(initial)h(v)-5 b(alue)31
+b(is)f(0.)150 1267 y Ft(BASH_VERSINFO)630 1377 y Fu(A)36
+b(readonly)g(arra)m(y)g(v)-5 b(ariable)37 b(\(see)f(Section)h(6.7)g
+([Arra)m(ys],)h(page)e(94\))h(whose)f(mem)m(b)s(ers)630
+1486 y(hold)c(v)m(ersion)h(information)f(for)g(this)g(instance)h(of)g
+(Bash.)46 b(The)32 b(v)-5 b(alues)32 b(assigned)h(to)g(the)630
+1596 y(arra)m(y)e(mem)m(b)s(ers)e(are)i(as)g(follo)m(ws:)630
+1751 y Ft(BASH_VERSINFO[0])1110 1861 y Fu(The)f(ma)5
+b(jor)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(\(the)i Fr(release)5
+b Fu(\).)630 2016 y Ft(BASH_VERSINFO[1])1110 2125 y Fu(The)30
+b(minor)g(v)m(ersion)h(n)m(um)m(b)s(er)e(\(the)i Fr(v)m(ersion)p
+Fu(\).)630 2281 y Ft(BASH_VERSINFO[2])1110 2390 y Fu(The)f(patc)m(h)h
+(lev)m(el.)630 2545 y Ft(BASH_VERSINFO[3])1110 2655 y
+Fu(The)f(build)f(v)m(ersion.)630 2810 y Ft(BASH_VERSINFO[4])1110
+2920 y Fu(The)h(release)i(status)e(\(e.g.,)j Fr(b)s(eta1)7
+b Fu(\).)630 3075 y Ft(BASH_VERSINFO[5])1110 3185 y Fu(The)30
+b(v)-5 b(alue)31 b(of)f Ft(MACHTYPE)p Fu(.)150 3340 y
+Ft(BASH_VERSION)630 3450 y Fu(The)g(v)m(ersion)h(n)m(um)m(b)s(er)e(of)h
+(the)h(curren)m(t)f(instance)h(of)g(Bash.)150 3605 y
+Ft(BASH_XTRACEFD)630 3714 y Fu(If)f(set)h(to)h(an)e(in)m(teger)i
+(corresp)s(onding)e(to)h(a)g(v)-5 b(alid)31 b(\014le)g(descriptor,)g
+(Bash)g(will)g(write)g(the)630 3824 y(trace)37 b(output)f(generated)h
+(when)f(`)p Ft(set)29 b(-x)p Fu(')36 b(is)g(enabled)h(to)g(that)f
+(\014le)h(descriptor.)58 b(This)630 3934 y(allo)m(ws)29
+b(tracing)h(output)d(to)i(b)s(e)f(separated)g(from)g(diagnostic)h(and)f
+(error)f(messages.)41 b(The)630 4043 y(\014le)31 b(descriptor)f(is)h
+(closed)g(when)f Ft(BASH_XTRACEFD)d Fu(is)k(unset)f(or)g(assigned)h(a)g
+(new)f(v)-5 b(alue.)630 4153 y(Unsetting)45 b Ft(BASH_XTRACEFD)40
+b Fu(or)k(assigning)g(it)g(the)g(empt)m(y)h(string)e(causes)i(the)f
+(trace)630 4262 y(output)33 b(to)i(b)s(e)d(sen)m(t)j(to)f(the)g
+(standard)e(error.)50 b(Note)35 b(that)g(setting)f Ft(BASH_XTRACEFD)c
+Fu(to)630 4372 y(2)39 b(\(the)h(standard)e(error)g(\014le)h
+(descriptor\))h(and)e(then)h(unsetting)g(it)g(will)g(result)g(in)g(the)
+630 4482 y(standard)30 b(error)g(b)s(eing)f(closed.)150
+4637 y Ft(CHILD_MAX)630 4746 y Fu(Set)35 b(the)h(n)m(um)m(b)s(er)e(of)h
+(exited)h(c)m(hild)g(status)f(v)-5 b(alues)36 b(for)f(the)g(shell)g(to)
+h(remem)m(b)s(er.)55 b(Bash)630 4856 y(will)37 b(not)g(allo)m(w)i(this)
+e(v)-5 b(alue)37 b(to)h(b)s(e)e(decreased)i(b)s(elo)m(w)f(a)g
+Fm(posix)p Fu(-mandated)f(minim)m(um,)630 4966 y(and)30
+b(there)g(is)g(a)h(maxim)m(um)f(v)-5 b(alue)30 b(\(curren)m(tly)h
+(8192\))h(that)f(this)f(ma)m(y)g(not)h(exceed.)41 b(The)630
+5075 y(minim)m(um)30 b(v)-5 b(alue)30 b(is)h(system-dep)s(enden)m(t.)
+150 5230 y Ft(COLUMNS)144 b Fu(Used)32 b(b)m(y)f(the)h
+Ft(select)e Fu(command)h(to)i(determine)f(the)f(terminal)i(width)d
+(when)h(prin)m(ting)630 5340 y(selection)39 b(lists.)63
+b(Automatically)41 b(set)d(if)f(the)h Ft(checkwinsize)d
+Fu(option)j(is)f(enabled)h(\(see)p eop end
+%%Page: 77 83
+TeXDict begin 77 82 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(77)630 299 y(Section)44
+b(4.3.2)h([The)e(Shopt)g(Builtin],)k(page)d(65\),)k(or)43
+b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630 408
+y(receipt)31 b(of)g(a)g Ft(SIGWINCH)p Fu(.)150 555 y
+Ft(COMP_CWORD)630 664 y Fu(An)38 b(index)g(in)m(to)h
+Ft(${COMP_WORDS})c Fu(of)k(the)g(w)m(ord)f(con)m(taining)i(the)e
+(curren)m(t)g(cursor)g(p)s(o-)630 774 y(sition.)72 b(This)40
+b(v)-5 b(ariable)41 b(is)f(a)m(v)-5 b(ailable)43 b(only)e(in)f(shell)h
+(functions)f(in)m(v)m(ok)m(ed)i(b)m(y)e(the)h(pro-)630
+883 y(grammable)36 b(completion)g(facilities)i(\(see)e(Section)g(8.6)g
+([Programmable)g(Completion],)630 993 y(page)31 b(132\).)150
+1139 y Ft(COMP_LINE)630 1249 y Fu(The)38 b(curren)m(t)h(command)f
+(line.)66 b(This)37 b(v)-5 b(ariable)40 b(is)f(a)m(v)-5
+b(ailable)41 b(only)d(in)h(shell)f(functions)630 1358
+y(and)25 b(external)h(commands)f(in)m(v)m(ok)m(ed)h(b)m(y)f(the)h
+(programmable)f(completion)i(facilities)g(\(see)630 1468
+y(Section)k(8.6)h([Programmable)f(Completion],)g(page)g(132\).)150
+1614 y Ft(COMP_POINT)630 1724 y Fu(The)25 b(index)g(of)h(the)g(curren)m
+(t)f(cursor)g(p)s(osition)h(relativ)m(e)i(to)e(the)g(b)s(eginning)f(of)
+g(the)h(curren)m(t)630 1833 y(command.)40 b(If)27 b(the)h(curren)m(t)g
+(cursor)g(p)s(osition)g(is)g(at)g(the)g(end)g(of)g(the)g(curren)m(t)g
+(command,)630 1943 y(the)i(v)-5 b(alue)30 b(of)g(this)g(v)-5
+b(ariable)31 b(is)f(equal)g(to)h Ft(${#COMP_LINE})p Fu(.)37
+b(This)29 b(v)-5 b(ariable)31 b(is)f(a)m(v)-5 b(ailable)630
+2052 y(only)36 b(in)f(shell)h(functions)f(and)g(external)h(commands)g
+(in)m(v)m(ok)m(ed)h(b)m(y)e(the)h(programmable)630 2162
+y(completion)c(facilities)g(\(see)g(Section)f(8.6)g([Programmable)g
+(Completion],)h(page)f(132\).)150 2308 y Ft(COMP_TYPE)630
+2418 y Fu(Set)c(to)h(an)f(in)m(teger)h(v)-5 b(alue)28
+b(corresp)s(onding)e(to)h(the)h(t)m(yp)s(e)f(of)g(completion)h
+(attempted)g(that)630 2527 y(caused)e(a)h(completion)h(function)e(to)h
+(b)s(e)f(called:)40 b Fr(T)-8 b(AB)p Fu(,)27 b(for)g(normal)f
+(completion,)j(`)p Ft(?)p Fu(',)e(for)630 2637 y(listing)35
+b(completions)h(after)f(successiv)m(e)g(tabs,)h(`)p Ft(!)p
+Fu(',)g(for)e(listing)h(alternativ)m(es)i(on)d(partial)630
+2746 y(w)m(ord)22 b(completion,)k(`)p Ft(@)p Fu(',)f(to)e(list)g
+(completions)h(if)f(the)g(w)m(ord)f(is)h(not)g(unmo)s(di\014ed,)f(or)h
+(`)p Ft(\045)p Fu(',)h(for)630 2856 y(men)m(u)i(completion.)41
+b(This)25 b(v)-5 b(ariable)27 b(is)g(a)m(v)-5 b(ailable)28
+b(only)f(in)f(shell)g(functions)g(and)g(external)630
+2966 y(commands)32 b(in)m(v)m(ok)m(ed)i(b)m(y)e(the)g(programmable)h
+(completion)g(facilities)i(\(see)e(Section)g(8.6)630
+3075 y([Programmable)e(Completion],)h(page)f(132\).)150
+3221 y Ft(COMP_KEY)96 b Fu(The)29 b(k)m(ey)i(\(or)g(\014nal)e(k)m(ey)i
+(of)f(a)g(k)m(ey)h(sequence\))g(used)e(to)i(in)m(v)m(ok)m(e)h(the)e
+(curren)m(t)g(completion)630 3331 y(function.)150 3477
+y Ft(COMP_WORDBREAKS)630 3587 y Fu(The)f(set)i(of)e(c)m(haracters)j
+(that)e(the)g(Readline)g(library)g(treats)g(as)g(w)m(ord)g(separators)g
+(when)630 3696 y(p)s(erforming)i(w)m(ord)h(completion.)51
+b(If)33 b Ft(COMP_WORDBREAKS)c Fu(is)34 b(unset,)g(it)f(loses)i(its)e
+(sp)s(ecial)630 3806 y(prop)s(erties,)d(ev)m(en)h(if)f(it)h(is)g
+(subsequen)m(tly)f(reset.)150 3952 y Ft(COMP_WORDS)630
+4061 y Fu(An)36 b(arra)m(y)g(v)-5 b(ariable)37 b(consisting)g(of)f(the)
+g(individual)f(w)m(ords)h(in)f(the)h(curren)m(t)g(command)630
+4171 y(line.)94 b(The)47 b(line)i(is)f(split)g(in)m(to)h(w)m(ords)e(as)
+h(Readline)h(w)m(ould)f(split)g(it,)53 b(using)47 b Ft(COMP_)630
+4281 y(WORDBREAKS)34 b Fu(as)i(describ)s(ed)g(ab)s(o)m(v)m(e.)60
+b(This)36 b(v)-5 b(ariable)37 b(is)f(a)m(v)-5 b(ailable)39
+b(only)e(in)f(shell)h(func-)630 4390 y(tions)32 b(in)m(v)m(ok)m(ed)i(b)
+m(y)d(the)i(programmable)f(completion)h(facilities)h(\(see)f(Section)g
+(8.6)g([Pro-)630 4500 y(grammable)e(Completion],)g(page)g(132\).)150
+4646 y Ft(COMPREPLY)630 4756 y Fu(An)37 b(arra)m(y)h(v)-5
+b(ariable)38 b(from)f(whic)m(h)g(Bash)g(reads)g(the)h(p)s(ossible)e
+(completions)j(generated)630 4865 y(b)m(y)33 b(a)g(shell)h(function)f
+(in)m(v)m(ok)m(ed)h(b)m(y)f(the)g(programmable)h(completion)g(facilit)m
+(y)h(\(see)f(Sec-)630 4975 y(tion)g(8.6)g([Programmable)g(Completion],)
+h(page)f(132\).)51 b(Eac)m(h)34 b(arra)m(y)g(elemen)m(t)h(con)m(tains)
+630 5084 y(one)c(p)s(ossible)f(completion.)150 5230 y
+Ft(COPROC)192 b Fu(An)27 b(arra)m(y)g(v)-5 b(ariable)28
+b(created)g(to)f(hold)g(the)g(\014le)g(descriptors)g(for)g(output)f
+(from)h(and)f(input)630 5340 y(to)31 b(an)f(unnamed)f(copro)s(cess)i
+(\(see)g(Section)h(3.2.5)g([Copro)s(cesses],)f(page)g(15\).)p
+eop end
+%%Page: 78 84
+TeXDict begin 78 83 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(78)150 299 y Ft(DIRSTACK)96
+b Fu(An)26 b(arra)m(y)h(v)-5 b(ariable)28 b(con)m(taining)g(the)f
+(curren)m(t)f(con)m(ten)m(ts)j(of)e(the)f(directory)i(stac)m(k.)41
+b(Direc-)630 408 y(tories)33 b(app)s(ear)f(in)g(the)h(stac)m(k)h(in)e
+(the)h(order)f(they)h(are)g(displa)m(y)m(ed)g(b)m(y)f(the)h
+Ft(dirs)e Fu(builtin.)630 518 y(Assigning)f(to)h(mem)m(b)s(ers)f(of)g
+(this)g(arra)m(y)g(v)-5 b(ariable)31 b(ma)m(y)g(b)s(e)e(used)h(to)h(mo)
+s(dify)e(directories)630 628 y(already)41 b(in)f(the)h(stac)m(k,)k(but)
+40 b(the)h Ft(pushd)e Fu(and)h Ft(popd)f Fu(builtins)h(m)m(ust)h(b)s(e)
+e(used)h(to)i(add)630 737 y(and)37 b(remo)m(v)m(e)h(directories.)63
+b(Assignmen)m(t)37 b(to)h(this)f(v)-5 b(ariable)38 b(will)g(not)f(c)m
+(hange)i(the)e(cur-)630 847 y(ren)m(t)c(directory)-8
+b(.)47 b(If)32 b Ft(DIRSTACK)e Fu(is)i(unset,)g(it)h(loses)g(its)g(sp)s
+(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)630
+956 y(subsequen)m(tly)d(reset.)150 1115 y Ft(EMACS)240
+b Fu(If)31 b(Bash)h(\014nds)d(this)j(v)-5 b(ariable)32
+b(in)f(the)h(en)m(vironmen)m(t)g(when)e(the)i(shell)f(starts)h(with)f
+(v)-5 b(alue)630 1224 y(`)p Ft(t)p Fu(',)36 b(it)f(assumes)f(that)h
+(the)g(shell)f(is)h(running)e(in)h(an)g(Emacs)h(shell)g(bu\013er)e(and)
+h(disables)630 1334 y(line)d(editing.)150 1492 y Ft(ENV)336
+b Fu(Similar)35 b(to)g Ft(BASH_ENV)p Fu(;)h(used)e(when)g(the)h(shell)g
+(is)g(in)m(v)m(ok)m(ed)h(in)e Fm(posix)h Fu(Mo)s(de)g(\(see)g(Sec-)630
+1602 y(tion)c(6.11)h([Bash)f(POSIX)e(Mo)s(de],)i(page)g(99\).)150
+1760 y Ft(EPOCHREALTIME)630 1870 y Fu(Eac)m(h)38 b(time)f(this)g
+(parameter)h(is)f(referenced,)i(it)f(expands)e(to)i(the)f(n)m(um)m(b)s
+(er)f(of)h(seconds)630 1979 y(since)f(the)g(Unix)f(Ep)s(o)s(c)m(h)g(as)
+h(a)g(\015oating)h(p)s(oin)m(t)f(v)-5 b(alue)36 b(with)f(micro-second)i
+(gran)m(ularit)m(y)630 2089 y(\(see)42 b(the)g(do)s(cumen)m(tation)g
+(for)f(the)g(C)g(library)g(function)g Fr(time)47 b Fu(for)41
+b(the)h(de\014nition)f(of)630 2198 y(Ep)s(o)s(c)m(h\).)82
+b(Assignmen)m(ts)44 b(to)h Ft(EPOCHREALTIME)c Fu(are)j(ignored.)83
+b(If)43 b Ft(EPOCHREALTIME)e Fu(is)630 2308 y(unset,)30
+b(it)h(loses)g(its)g(sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h
+(is)g(subsequen)m(tly)f(reset.)150 2466 y Ft(EPOCHSECONDS)630
+2576 y Fu(Eac)m(h)38 b(time)f(this)g(parameter)h(is)f(referenced,)i(it)
+f(expands)e(to)i(the)f(n)m(um)m(b)s(er)f(of)h(seconds)630
+2685 y(since)e(the)g(Unix)f(Ep)s(o)s(c)m(h)g(\(see)i(the)f(do)s(cumen)m
+(tation)g(for)g(the)f(C)h(library)f(function)g Fr(time)630
+2795 y Fu(for)41 b(the)g(de\014nition)g(of)h(Ep)s(o)s(c)m(h\).)73
+b(Assignmen)m(ts)41 b(to)h Ft(EPOCHSECONDS)c Fu(are)k(ignored.)73
+b(If)630 2905 y Ft(EPOCHSECONDS)27 b Fu(is)j(unset,)g(it)g(loses)h(its)
+g(sp)s(ecial)f(prop)s(erties,)g(ev)m(en)h(if)f(it)g(is)g(subsequen)m
+(tly)630 3014 y(reset.)150 3173 y Ft(EUID)288 b Fu(The)30
+b(n)m(umeric)g(e\013ectiv)m(e)j(user)d(id)g(of)g(the)h(curren)m(t)f
+(user.)40 b(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8
+b(.)150 3331 y Ft(EXECIGNORE)630 3440 y Fu(A)29 b(colon-separated)h
+(list)f(of)g(shell)g(patterns)f(\(see)i(Section)f(3.5.8.1)i([P)m
+(attern)f(Matc)m(hing],)630 3550 y(page)j(33\))g(de\014ning)e(the)h
+(list)g(of)g(\014lenames)g(to)g(b)s(e)g(ignored)g(b)m(y)f(command)h
+(searc)m(h)g(using)630 3660 y Ft(PATH)p Fu(.)k(Files)22
+b(whose)f(full)g(pathnames)g(matc)m(h)h(one)f(of)g(these)h(patterns)e
+(are)i(not)f(considered)630 3769 y(executable)j(\014les)e(for)g(the)h
+(purp)s(oses)d(of)j(completion)h(and)d(command)i(execution)g(via)g
+Ft(PATH)630 3879 y Fu(lo)s(okup.)56 b(This)35 b(do)s(es)g(not)h
+(a\013ect)i(the)d(b)s(eha)m(vior)h(of)g(the)g Ft([)p
+Fu(,)h Ft(test)p Fu(,)f(and)f Ft([[)g Fu(commands.)630
+3988 y(F)-8 b(ull)42 b(pathnames)e(in)h(the)g(command)g(hash)f(table)i
+(are)g(not)f(sub)5 b(ject)41 b(to)g Ft(EXECIGNORE)p Fu(.)630
+4098 y(Use)30 b(this)f(v)-5 b(ariable)30 b(to)g(ignore)g(shared)f
+(library)g(\014les)g(that)h(ha)m(v)m(e)h(the)f(executable)h(bit)e(set,)
+630 4208 y(but)36 b(are)h(not)g(executable)i(\014les.)60
+b(The)36 b(pattern)h(matc)m(hing)h(honors)e(the)h(setting)h(of)f(the)
+630 4317 y Ft(extglob)28 b Fu(shell)j(option.)150 4475
+y Ft(FCEDIT)192 b Fu(The)30 b(editor)h(used)e(as)i(a)g(default)f(b)m(y)
+h(the)f Ft(-e)g Fu(option)h(to)g(the)f Ft(fc)g Fu(builtin)g(command.)
+150 4634 y Ft(FIGNORE)144 b Fu(A)35 b(colon-separated)i(list)f(of)g
+(su\016xes)e(to)i(ignore)g(when)e(p)s(erforming)g(\014lename)i(comple-)
+630 4743 y(tion.)k(A)27 b(\014lename)g(whose)f(su\016x)g(matc)m(hes)i
+(one)f(of)g(the)g(en)m(tries)g(in)g Ft(FIGNORE)d Fu(is)j(excluded)630
+4853 y(from)j(the)g(list)h(of)g(matc)m(hed)g(\014lenames.)41
+b(A)30 b(sample)h(v)-5 b(alue)31 b(is)f(`)p Ft(.o:~)p
+Fu(')150 5011 y Ft(FUNCNAME)96 b Fu(An)35 b(arra)m(y)i(v)-5
+b(ariable)36 b(con)m(taining)h(the)f(names)g(of)g(all)g(shell)g
+(functions)g(curren)m(tly)f(in)h(the)630 5121 y(execution)g(call)h
+(stac)m(k.)57 b(The)34 b(elemen)m(t)j(with)e(index)g(0)h(is)f(the)g
+(name)h(of)f(an)m(y)h(curren)m(tly-)630 5230 y(executing)f(shell)f
+(function.)51 b(The)34 b(b)s(ottom-most)h(elemen)m(t)g(\(the)g(one)f
+(with)g(the)g(highest)630 5340 y(index\))e(is)h Ft("main")p
+Fu(.)44 b(This)32 b(v)-5 b(ariable)33 b(exists)g(only)g(when)e(a)i
+(shell)f(function)g(is)g(executing.)p eop end
+%%Page: 79 85
+TeXDict begin 79 84 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(79)630 299 y(Assignmen)m(ts)23
+b(to)f Ft(FUNCNAME)e Fu(ha)m(v)m(e)k(no)e(e\013ect.)39
+b(If)22 b Ft(FUNCNAME)e Fu(is)i(unset,)h(it)g(loses)g(its)f(sp)s(ecial)
+630 408 y(prop)s(erties,)30 b(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)
+f(reset.)630 543 y(This)h(v)-5 b(ariable)32 b(can)f(b)s(e)g(used)g
+(with)g Ft(BASH_LINENO)d Fu(and)j Ft(BASH_SOURCE)p Fu(.)40
+b(Eac)m(h)32 b(elemen)m(t)630 653 y(of)g Ft(FUNCNAME)d
+Fu(has)j(corresp)s(onding)e(elemen)m(ts)j(in)f Ft(BASH_LINENO)c
+Fu(and)k Ft(BASH_SOURCE)c Fu(to)630 763 y(describ)s(e)39
+b(the)h(call)h(stac)m(k.)70 b(F)-8 b(or)41 b(instance,)i
+Ft(${FUNCNAME[$i]})35 b Fu(w)m(as)41 b(called)f(from)g(the)630
+872 y(\014le)27 b Ft(${BASH_SOURCE[$i+1]})21 b Fu(at)27
+b(line)h(n)m(um)m(b)s(er)d Ft(${BASH_LINENO[$i]})p Fu(.)34
+b(The)27 b Ft(caller)630 982 y Fu(builtin)j(displa)m(ys)g(the)h(curren)
+m(t)f(call)i(stac)m(k)g(using)d(this)i(information.)150
+1142 y Ft(FUNCNEST)96 b Fu(If)34 b(set)i(to)f(a)h(n)m(umeric)e(v)-5
+b(alue)36 b(greater)g(than)e(0,)j(de\014nes)d(a)h(maxim)m(um)g
+(function)g(nesting)630 1251 y(lev)m(el.)42 b(F)-8 b(unction)29
+b(in)m(v)m(o)s(cations)h(that)f(exceed)h(this)e(nesting)h(lev)m(el)h
+(will)f(cause)g(the)f(curren)m(t)630 1361 y(command)i(to)h(ab)s(ort.)
+150 1521 y Ft(GLOBIGNORE)630 1631 y Fu(A)k(colon-separated)i(list)f(of)
+f(patterns)g(de\014ning)f(the)i(set)f(of)g(\014le)h(names)f(to)g(b)s(e)
+g(ignored)630 1740 y(b)m(y)28 b(\014lename)h(expansion.)40
+b(If)28 b(a)h(\014le)g(name)g(matc)m(hed)g(b)m(y)g(a)g(\014lename)f
+(expansion)h(pattern)630 1850 y(also)k(matc)m(hes)g(one)f(of)g(the)g
+(patterns)g(in)f Ft(GLOBIGNORE)p Fu(,)f(it)i(is)g(remo)m(v)m(ed)h(from)
+e(the)h(list)h(of)630 1960 y(matc)m(hes.)41 b(The)27
+b(pattern)g(matc)m(hing)h(honors)f(the)g(setting)i(of)e(the)h
+Ft(extglob)d Fu(shell)i(option.)150 2120 y Ft(GROUPS)192
+b Fu(An)36 b(arra)m(y)g(v)-5 b(ariable)37 b(con)m(taining)g(the)f(list)
+h(of)f(groups)g(of)g(whic)m(h)f(the)i(curren)m(t)e(user)h(is)g(a)630
+2229 y(mem)m(b)s(er.)41 b(Assignmen)m(ts)30 b(to)i Ft(GROUPS)d
+Fu(ha)m(v)m(e)i(no)g(e\013ect.)42 b(If)30 b Ft(GROUPS)f
+Fu(is)i(unset,)f(it)h(loses)h(its)630 2339 y(sp)s(ecial)f(prop)s
+(erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f(reset.)150
+2499 y Ft(histchars)630 2609 y Fu(Up)c(to)g(three)g(c)m(haracters)i
+(whic)m(h)d(con)m(trol)j(history)d(expansion,)i(quic)m(k)g
+(substitution,)g(and)630 2718 y(tok)m(enization)k(\(see)f(Section)f
+(9.3)h([History)f(In)m(teraction],)i(page)f(143\).)41
+b(The)29 b(\014rst)e(c)m(harac-)630 2828 y(ter)j(is)f(the)g
+Fr(history)g(expansion)g Fu(c)m(haracter,)j(that)e(is,)f(the)h(c)m
+(haracter)h(whic)m(h)d(signi\014es)i(the)630 2937 y(start)25
+b(of)f(a)h(history)f(expansion,)i(normally)e(`)p Ft(!)p
+Fu('.)39 b(The)24 b(second)g(c)m(haracter)i(is)e(the)g(c)m(haracter)630
+3047 y(whic)m(h)36 b(signi\014es)g(`quic)m(k)h(substitution')f(when)f
+(seen)h(as)g(the)g(\014rst)f(c)m(haracter)j(on)e(a)g(line,)630
+3157 y(normally)27 b(`)p Ft(^)p Fu('.)39 b(The)26 b(optional)i(third)d
+(c)m(haracter)j(is)e(the)h(c)m(haracter)h(whic)m(h)e(indicates)h(that)
+630 3266 y(the)34 b(remainder)f(of)h(the)g(line)g(is)f(a)h(commen)m(t)h
+(when)e(found)f(as)i(the)g(\014rst)f(c)m(haracter)i(of)f(a)630
+3376 y(w)m(ord,)i(usually)f(`)p Ft(#)p Fu('.)55 b(The)34
+b(history)h(commen)m(t)h(c)m(haracter)h(causes)e(history)g
+(substitution)630 3485 y(to)27 b(b)s(e)f(skipp)s(ed)f(for)i(the)f
+(remaining)h(w)m(ords)f(on)h(the)f(line.)40 b(It)27 b(do)s(es)f(not)h
+(necessarily)g(cause)630 3595 y(the)k(shell)f(parser)g(to)h(treat)g
+(the)g(rest)g(of)f(the)h(line)f(as)h(a)g(commen)m(t.)150
+3755 y Ft(HISTCMD)144 b Fu(The)35 b(history)h(n)m(um)m(b)s(er,)g(or)f
+(index)g(in)h(the)g(history)f(list,)j(of)e(the)g(curren)m(t)f(command.)
+56 b(If)630 3865 y Ft(HISTCMD)28 b Fu(is)h(unset,)h(it)g(loses)h(its)f
+(sp)s(ecial)g(prop)s(erties,)g(ev)m(en)g(if)g(it)g(is)g(subsequen)m
+(tly)f(reset.)150 4025 y Ft(HISTCONTROL)630 4134 y Fu(A)40
+b(colon-separated)i(list)f(of)f(v)-5 b(alues)40 b(con)m(trolling)i(ho)m
+(w)e(commands)g(are)h(sa)m(v)m(ed)g(on)f(the)630 4244
+y(history)29 b(list.)41 b(If)28 b(the)h(list)h(of)f(v)-5
+b(alues)29 b(includes)f(`)p Ft(ignorespace)p Fu(',)f(lines)i(whic)m(h)g
+(b)s(egin)f(with)630 4354 y(a)39 b(space)g(c)m(haracter)i(are)e(not)g
+(sa)m(v)m(ed)g(in)g(the)g(history)f(list.)66 b(A)39 b(v)-5
+b(alue)39 b(of)g(`)p Ft(ignoredups)p Fu(')630 4463 y(causes)34
+b(lines)h(whic)m(h)f(matc)m(h)h(the)f(previous)f(history)h(en)m(try)h
+(to)g(not)f(b)s(e)f(sa)m(v)m(ed.)53 b(A)34 b(v)-5 b(alue)630
+4573 y(of)32 b(`)p Ft(ignoreboth)p Fu(')d(is)j(shorthand)e(for)i(`)p
+Ft(ignorespace)p Fu(')d(and)i(`)p Ft(ignoredups)p Fu('.)42
+b(A)32 b(v)-5 b(alue)32 b(of)630 4682 y(`)p Ft(erasedups)p
+Fu(')f(causes)i(all)h(previous)f(lines)g(matc)m(hing)h(the)f(curren)m
+(t)g(line)g(to)h(b)s(e)e(remo)m(v)m(ed)630 4792 y(from)42
+b(the)h(history)f(list)i(b)s(efore)e(that)h(line)g(is)g(sa)m(v)m(ed.)78
+b(An)m(y)43 b(v)-5 b(alue)43 b(not)g(in)f(the)h(ab)s(o)m(v)m(e)630
+4902 y(list)35 b(is)g(ignored.)53 b(If)34 b Ft(HISTCONTROL)e
+Fu(is)i(unset,)i(or)e(do)s(es)h(not)g(include)f(a)h(v)-5
+b(alid)35 b(v)-5 b(alue,)36 b(all)630 5011 y(lines)30
+b(read)g(b)m(y)g(the)g(shell)g(parser)g(are)g(sa)m(v)m(ed)h(on)f(the)g
+(history)g(list,)h(sub)5 b(ject)30 b(to)g(the)g(v)-5
+b(alue)630 5121 y(of)42 b Ft(HISTIGNORE)p Fu(.)73 b(The)42
+b(second)g(and)g(subsequen)m(t)f(lines)h(of)h(a)f(m)m(ulti-line)h(comp)
+s(ound)630 5230 y(command)33 b(are)h(not)g(tested,)i(and)d(are)h(added)
+f(to)h(the)g(history)g(regardless)g(of)g(the)f(v)-5 b(alue)630
+5340 y(of)31 b Ft(HISTCONTROL)p Fu(.)p eop end
+%%Page: 80 86
+TeXDict begin 80 85 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(80)150 299 y Ft(HISTFILE)96
+b Fu(The)27 b(name)h(of)g(the)g(\014le)g(to)h(whic)m(h)f(the)g(command)
+f(history)h(is)g(sa)m(v)m(ed.)41 b(The)27 b(default)h(v)-5
+b(alue)630 408 y(is)30 b Ft(~/.bash_history)p Fu(.)150
+569 y Ft(HISTFILESIZE)630 678 y Fu(The)c(maxim)m(um)f(n)m(um)m(b)s(er)g
+(of)h(lines)h(con)m(tained)g(in)f(the)g(history)g(\014le.)39
+b(When)26 b(this)g(v)-5 b(ariable)630 788 y(is)25 b(assigned)h(a)g(v)-5
+b(alue,)27 b(the)f(history)f(\014le)h(is)f(truncated,)i(if)e(necessary)
+-8 b(,)28 b(to)e(con)m(tain)g(no)g(more)630 897 y(than)37
+b(that)h(n)m(um)m(b)s(er)d(of)j(lines)f(b)m(y)g(remo)m(ving)h(the)f
+(oldest)h(en)m(tries.)62 b(The)37 b(history)g(\014le)g(is)630
+1007 y(also)i(truncated)f(to)h(this)e(size)i(after)g(writing)f(it)g
+(when)f(a)h(shell)h(exits.)64 b(If)37 b(the)h(v)-5 b(alue)39
+b(is)630 1117 y(0,)g(the)e(history)f(\014le)h(is)g(truncated)f(to)i
+(zero)f(size.)60 b(Non-n)m(umeric)37 b(v)-5 b(alues)37
+b(and)f(n)m(umeric)630 1226 y(v)-5 b(alues)31 b(less)f(than)g(zero)h
+(inhibit)f(truncation.)41 b(The)29 b(shell)i(sets)f(the)h(default)f(v)
+-5 b(alue)31 b(to)g(the)630 1336 y(v)-5 b(alue)31 b(of)f
+Ft(HISTSIZE)f Fu(after)h(reading)h(an)m(y)g(startup)f(\014les.)150
+1496 y Ft(HISTIGNORE)630 1606 y Fu(A)j(colon-separated)h(list)f(of)g
+(patterns)f(used)g(to)h(decide)g(whic)m(h)f(command)g(lines)h(should)
+630 1715 y(b)s(e)f(sa)m(v)m(ed)h(on)g(the)f(history)h(list.)47
+b(Eac)m(h)33 b(pattern)g(is)f(anc)m(hored)h(at)g(the)f(b)s(eginning)g
+(of)h(the)630 1825 y(line)43 b(and)e(m)m(ust)h(matc)m(h)h(the)g
+(complete)h(line)e(\(no)h(implicit)g(`)p Ft(*)p Fu(')f(is)g(app)s
+(ended\).)75 b(Eac)m(h)630 1934 y(pattern)42 b(is)g(tested)g(against)h
+(the)f(line)g(after)g(the)g(c)m(hec)m(ks)h(sp)s(eci\014ed)e(b)m(y)h
+Ft(HISTCONTROL)630 2044 y Fu(are)37 b(applied.)59 b(In)36
+b(addition)h(to)g(the)g(normal)g(shell)f(pattern)h(matc)m(hing)h(c)m
+(haracters,)i(`)p Ft(&)p Fu(')630 2153 y(matc)m(hes)d(the)f(previous)g
+(history)g(line.)57 b(`)p Ft(&)p Fu(')36 b(ma)m(y)h(b)s(e)e(escap)s(ed)
+h(using)g(a)g(bac)m(kslash;)k(the)630 2263 y(bac)m(kslash)34
+b(is)g(remo)m(v)m(ed)h(b)s(efore)e(attempting)i(a)g(matc)m(h.)51
+b(The)34 b(second)f(and)h(subsequen)m(t)630 2373 y(lines)e(of)h(a)g(m)m
+(ulti-line)g(comp)s(ound)e(command)h(are)h(not)f(tested,)i(and)e(are)g
+(added)g(to)h(the)630 2482 y(history)k(regardless)h(of)f(the)g(v)-5
+b(alue)38 b(of)f Ft(HISTIGNORE)p Fu(.)58 b(The)37 b(pattern)g(matc)m
+(hing)i(honors)630 2592 y(the)31 b(setting)g(of)g(the)f
+Ft(extglob)f Fu(shell)h(option.)630 2727 y Ft(HISTIGNORE)20
+b Fu(subsumes)g(the)j(function)f(of)h Ft(HISTCONTROL)p
+Fu(.)35 b(A)23 b(pattern)f(of)h(`)p Ft(&)p Fu(')g(is)f(iden)m(tical)630
+2836 y(to)k Ft(ignoredups)p Fu(,)e(and)h(a)h(pattern)g(of)f(`)p
+Ft([)31 b(]*)p Fu(')25 b(is)h(iden)m(tical)h(to)f Ft(ignorespace)p
+Fu(.)36 b(Com)m(bining)630 2946 y(these)30 b(t)m(w)m(o)h(patterns,)f
+(separating)g(them)g(with)f(a)h(colon,)h(pro)m(vides)e(the)h
+(functionalit)m(y)h(of)630 3055 y Ft(ignoreboth)p Fu(.)150
+3216 y Ft(HISTSIZE)96 b Fu(The)37 b(maxim)m(um)g(n)m(um)m(b)s(er)e(of)j
+(commands)f(to)g(remem)m(b)s(er)g(on)g(the)g(history)g(list.)62
+b(If)37 b(the)630 3325 y(v)-5 b(alue)26 b(is)g(0,)i(commands)d(are)h
+(not)h(sa)m(v)m(ed)g(in)e(the)h(history)g(list.)40 b(Numeric)26
+b(v)-5 b(alues)26 b(less)g(than)630 3435 y(zero)i(result)e(in)h(ev)m
+(ery)g(command)g(b)s(eing)f(sa)m(v)m(ed)i(on)f(the)g(history)f(list)i
+(\(there)f(is)g(no)g(limit\).)630 3544 y(The)j(shell)g(sets)h(the)g
+(default)f(v)-5 b(alue)31 b(to)g(500)h(after)f(reading)f(an)m(y)h
+(startup)f(\014les.)150 3705 y Ft(HISTTIMEFORMAT)630
+3814 y Fu(If)44 b(this)g(v)-5 b(ariable)45 b(is)f(set)g(and)g(not)g(n)m
+(ull,)k(its)d(v)-5 b(alue)44 b(is)g(used)g(as)g(a)h(format)f(string)g
+(for)630 3924 y Fr(strftime)c Fu(to)35 b(prin)m(t)f(the)h(time)g(stamp)
+f(asso)s(ciated)i(with)f(eac)m(h)g(history)g(en)m(try)f(displa)m(y)m
+(ed)630 4033 y(b)m(y)g(the)f Ft(history)f Fu(builtin.)50
+b(If)33 b(this)h(v)-5 b(ariable)34 b(is)g(set,)h(time)f(stamps)g(are)g
+(written)f(to)i(the)630 4143 y(history)26 b(\014le)g(so)g(they)g(ma)m
+(y)h(b)s(e)e(preserv)m(ed)g(across)i(shell)f(sessions.)39
+b(This)25 b(uses)h(the)g(history)630 4253 y(commen)m(t)31
+b(c)m(haracter)h(to)f(distinguish)f(timestamps)h(from)f(other)g
+(history)h(lines.)150 4413 y Ft(HOSTFILE)96 b Fu(Con)m(tains)33
+b(the)g(name)f(of)h(a)g(\014le)f(in)g(the)h(same)g(format)g(as)f
+Ft(/etc/hosts)e Fu(that)j(should)f(b)s(e)630 4522 y(read)21
+b(when)g(the)g(shell)h(needs)f(to)h(complete)h(a)e(hostname.)38
+b(The)21 b(list)h(of)g(p)s(ossible)f(hostname)630 4632
+y(completions)27 b(ma)m(y)f(b)s(e)f(c)m(hanged)h(while)f(the)h(shell)g
+(is)f(running;)h(the)g(next)f(time)i(hostname)630 4741
+y(completion)33 b(is)g(attempted)g(after)g(the)f(v)-5
+b(alue)33 b(is)f(c)m(hanged,)i(Bash)e(adds)f(the)i(con)m(ten)m(ts)h(of)
+630 4851 y(the)h(new)f(\014le)g(to)h(the)g(existing)h(list.)53
+b(If)34 b Ft(HOSTFILE)e Fu(is)j(set,)h(but)e(has)g(no)h(v)-5
+b(alue,)36 b(or)e(do)s(es)630 4961 y(not)d(name)f(a)h(readable)g
+(\014le,)g(Bash)f(attempts)i(to)f(read)f Ft(/etc/hosts)e
+Fu(to)j(obtain)g(the)f(list)630 5070 y(of)h(p)s(ossible)f(hostname)h
+(completions.)43 b(When)31 b Ft(HOSTFILE)d Fu(is)j(unset,)f(the)h
+(hostname)g(list)630 5180 y(is)f(cleared.)150 5340 y
+Ft(HOSTNAME)96 b Fu(The)30 b(name)g(of)h(the)f(curren)m(t)h(host.)p
+eop end
+%%Page: 81 87
+TeXDict begin 81 86 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(81)150 299 y Ft(HOSTTYPE)96
+b Fu(A)30 b(string)h(describing)f(the)g(mac)m(hine)h(Bash)g(is)f
+(running)f(on.)150 448 y Ft(IGNOREEOF)630 557 y Fu(Con)m(trols)e(the)h
+(action)g(of)f(the)g(shell)g(on)g(receipt)h(of)f(an)g
+Ft(EOF)f Fu(c)m(haracter)i(as)g(the)f(sole)h(input.)630
+667 y(If)i(set,)i(the)f(v)-5 b(alue)32 b(denotes)f(the)g(n)m(um)m(b)s
+(er)f(of)h(consecutiv)m(e)i Ft(EOF)d Fu(c)m(haracters)i(that)f(can)h(b)
+s(e)630 776 y(read)40 b(as)f(the)h(\014rst)f(c)m(haracter)i(on)f(an)f
+(input)g(line)h(b)s(efore)f(the)h(shell)g(will)g(exit.)70
+b(If)39 b(the)630 886 y(v)-5 b(ariable)39 b(exists)f(but)g(do)s(es)f
+(not)h(ha)m(v)m(e)h(a)g(n)m(umeric)f(v)-5 b(alue,)40
+b(or)e(has)g(no)g(v)-5 b(alue,)40 b(then)e(the)630 996
+y(default)31 b(is)g(10.)43 b(If)30 b(the)h(v)-5 b(ariable)31
+b(do)s(es)g(not)g(exist,)h(then)e Ft(EOF)g Fu(signi\014es)h(the)g(end)f
+(of)h(input)630 1105 y(to)g(the)g(shell.)41 b(This)29
+b(is)i(only)f(in)g(e\013ect)i(for)e(in)m(teractiv)m(e)j(shells.)150
+1254 y Ft(INPUTRC)144 b Fu(The)68 b(name)h(of)f(the)h(Readline)g
+(initialization)j(\014le,)78 b(o)m(v)m(erriding)69 b(the)g(default)g
+(of)630 1363 y Ft(~/.inputrc)p Fu(.)150 1512 y Ft(INSIDE_EMACS)630
+1622 y Fu(If)29 b(Bash)h(\014nds)e(this)h(v)-5 b(ariable)31
+b(in)e(the)h(en)m(vironmen)m(t)g(when)e(the)i(shell)g(starts,)g(it)g
+(assumes)630 1731 y(that)i(the)g(shell)g(is)f(running)f(in)i(an)f
+(Emacs)h(shell)g(bu\013er)e(and)h(ma)m(y)i(disable)e(line)h(editing)630
+1841 y(dep)s(ending)d(on)h(the)h(v)-5 b(alue)31 b(of)f
+Ft(TERM)p Fu(.)150 1990 y Ft(LANG)288 b Fu(Used)28 b(to)h(determine)f
+(the)g(lo)s(cale)h(category)h(for)e(an)m(y)h(category)h(not)e(sp)s
+(eci\014cally)g(selected)630 2099 y(with)i(a)h(v)-5 b(ariable)31
+b(starting)g(with)f Ft(LC_)p Fu(.)150 2248 y Ft(LC_ALL)192
+b Fu(This)28 b(v)-5 b(ariable)29 b(o)m(v)m(errides)h(the)f(v)-5
+b(alue)29 b(of)g Ft(LANG)f Fu(and)g(an)m(y)h(other)g
+Ft(LC_)f Fu(v)-5 b(ariable)29 b(sp)s(ecifying)630 2358
+y(a)i(lo)s(cale)h(category)-8 b(.)150 2506 y Ft(LC_COLLATE)630
+2616 y Fu(This)37 b(v)-5 b(ariable)38 b(determines)g(the)g(collation)i
+(order)d(used)g(when)f(sorting)i(the)g(results)g(of)630
+2725 y(\014lename)e(expansion,)i(and)e(determines)g(the)h(b)s(eha)m
+(vior)f(of)g(range)h(expressions,)h(equiv-)630 2835 y(alence)e
+(classes,)h(and)e(collating)i(sequences)e(within)f(\014lename)h
+(expansion)g(and)f(pattern)630 2945 y(matc)m(hing)d(\(see)h(Section)f
+(3.5.8)h([Filename)g(Expansion],)e(page)h(32\).)150 3093
+y Ft(LC_CTYPE)96 b Fu(This)36 b(v)-5 b(ariable)37 b(determines)f(the)h
+(in)m(terpretation)h(of)f(c)m(haracters)h(and)e(the)g(b)s(eha)m(vior)h
+(of)630 3203 y(c)m(haracter)46 b(classes)g(within)e(\014lename)h
+(expansion)g(and)f(pattern)h(matc)m(hing)h(\(see)f(Sec-)630
+3313 y(tion)31 b(3.5.8)h([Filename)g(Expansion],)e(page)h(32\).)150
+3461 y Ft(LC_MESSAGES)630 3571 y Fu(This)25 b(v)-5 b(ariable)27
+b(determines)f(the)g(lo)s(cale)i(used)d(to)i(translate)g(double-quoted)
+f(strings)g(pre-)630 3680 y(ceded)31 b(b)m(y)f(a)h(`)p
+Ft($)p Fu(')f(\(see)h(Section)h(3.1.2.5)g([Lo)s(cale)g(T)-8
+b(ranslation],)32 b(page)f(7\).)150 3829 y Ft(LC_NUMERIC)630
+3939 y Fu(This)f(v)-5 b(ariable)31 b(determines)f(the)h(lo)s(cale)h
+(category)g(used)e(for)g(n)m(um)m(b)s(er)f(formatting.)150
+4088 y Ft(LC_TIME)144 b Fu(This)25 b(v)-5 b(ariable)26
+b(determines)g(the)g(lo)s(cale)h(category)h(used)d(for)g(data)h(and)f
+(time)i(formatting.)150 4236 y Ft(LINENO)192 b Fu(The)30
+b(line)h(n)m(um)m(b)s(er)e(in)h(the)g(script)h(or)f(shell)g(function)h
+(curren)m(tly)f(executing.)150 4385 y Ft(LINES)240 b
+Fu(Used)43 b(b)m(y)g(the)g Ft(select)e Fu(command)i(to)g(determine)g
+(the)g(column)g(length)g(for)g(prin)m(ting)630 4495 y(selection)c
+(lists.)63 b(Automatically)41 b(set)d(if)f(the)h Ft(checkwinsize)d
+Fu(option)j(is)f(enabled)h(\(see)630 4604 y(Section)44
+b(4.3.2)h([The)e(Shopt)g(Builtin],)k(page)d(65\),)k(or)43
+b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630 4714
+y(receipt)31 b(of)g(a)g Ft(SIGWINCH)p Fu(.)150 4862 y
+Ft(MACHTYPE)96 b Fu(A)26 b(string)g(that)h(fully)f(describ)s(es)f(the)h
+(system)g(t)m(yp)s(e)h(on)f(whic)m(h)f(Bash)i(is)f(executing,)i(in)e
+(the)630 4972 y(standard)k Fm(gnu)g Fr(cpu-compan)m(y-system)h
+Fu(format.)150 5121 y Ft(MAILCHECK)630 5230 y Fu(Ho)m(w)d(often)g(\(in)
+g(seconds\))g(that)g(the)f(shell)h(should)f(c)m(hec)m(k)i(for)e(mail)h
+(in)f(the)h(\014les)g(sp)s(eci\014ed)630 5340 y(in)i(the)h
+Ft(MAILPATH)e Fu(or)i Ft(MAIL)e Fu(v)-5 b(ariables.)43
+b(The)30 b(default)h(is)f(60)i(seconds.)42 b(When)30
+b(it)h(is)g(time)p eop end
+%%Page: 82 88
+TeXDict begin 82 87 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(82)630 299 y(to)37
+b(c)m(hec)m(k)h(for)e(mail,)j(the)e(shell)f(do)s(es)g(so)h(b)s(efore)f
+(displa)m(ying)h(the)f(primary)g(prompt.)57 b(If)630
+408 y(this)37 b(v)-5 b(ariable)38 b(is)f(unset,)h(or)f(set)h(to)g(a)f
+(v)-5 b(alue)38 b(that)f(is)g(not)h(a)f(n)m(um)m(b)s(er)f(greater)i
+(than)f(or)630 518 y(equal)31 b(to)g(zero,)g(the)g(shell)g(disables)f
+(mail)h(c)m(hec)m(king.)150 682 y Ft(MAPFILE)144 b Fu(An)35
+b(arra)m(y)h(v)-5 b(ariable)36 b(created)g(to)h(hold)e(the)g(text)i
+(read)e(b)m(y)g(the)h Ft(mapfile)d Fu(builtin)i(when)630
+792 y(no)30 b(v)-5 b(ariable)31 b(name)g(is)f(supplied.)150
+956 y Ft(OLDPWD)192 b Fu(The)30 b(previous)g(w)m(orking)g(directory)h
+(as)g(set)g(b)m(y)f(the)h Ft(cd)e Fu(builtin.)150 1121
+y Ft(OPTERR)192 b Fu(If)35 b(set)i(to)f(the)h(v)-5 b(alue)36
+b(1,)i(Bash)e(displa)m(ys)g(error)f(messages)i(generated)g(b)m(y)f(the)
+g Ft(getopts)630 1230 y Fu(builtin)30 b(command.)150
+1395 y Ft(OSTYPE)192 b Fu(A)30 b(string)h(describing)f(the)g(op)s
+(erating)h(system)g(Bash)f(is)h(running)d(on.)150 1559
+y Ft(PIPESTATUS)630 1669 y Fu(An)23 b(arra)m(y)h(v)-5
+b(ariable)24 b(\(see)h(Section)f(6.7)h([Arra)m(ys],)g(page)f(94\))h
+(con)m(taining)g(a)f(list)g(of)g(exit)g(sta-)630 1778
+y(tus)h(v)-5 b(alues)27 b(from)e(the)h(pro)s(cesses)g(in)f(the)h
+(most-recen)m(tly-executed)j(foreground)c(pip)s(eline)630
+1888 y(\(whic)m(h)30 b(ma)m(y)h(con)m(tain)h(only)f(a)f(single)h
+(command\).)150 2052 y Ft(POSIXLY_CORRECT)630 2162 y
+Fu(If)h(this)g(v)-5 b(ariable)34 b(is)e(in)g(the)h(en)m(vironmen)m(t)g
+(when)e(Bash)i(starts,)g(the)g(shell)g(en)m(ters)g Fm(posix)630
+2271 y Fu(mo)s(de)22 b(\(see)h(Section)g(6.11)h([Bash)e(POSIX)f(Mo)s
+(de],)k(page)e(99\))g(b)s(efore)f(reading)g(the)g(startup)630
+2381 y(\014les,)36 b(as)e(if)h(the)f Ft(--posix)f Fu(in)m(v)m(o)s
+(cation)j(option)f(had)f(b)s(een)g(supplied.)51 b(If)34
+b(it)h(is)g(set)g(while)630 2491 y(the)c(shell)f(is)h(running,)d(Bash)j
+(enables)g Fm(posix)e Fu(mo)s(de,)h(as)h(if)f(the)h(command)870
+2628 y Ft(set)47 b(-o)g(posix)630 2765 y Fu(had)33 b(b)s(een)g
+(executed.)51 b(When)33 b(the)h(shell)f(en)m(ters)h Fm(posix)f
+Fu(mo)s(de,)h(it)g(sets)g(this)g(v)-5 b(ariable)34 b(if)630
+2874 y(it)d(w)m(as)g(not)f(already)h(set.)150 3039 y
+Ft(PPID)288 b Fu(The)30 b(pro)s(cess)g Fm(id)g Fu(of)h(the)f(shell's)h
+(paren)m(t)g(pro)s(cess.)40 b(This)30 b(v)-5 b(ariable)31
+b(is)f(readonly)-8 b(.)150 3203 y Ft(PROMPT_COMMAND)630
+3313 y Fu(If)32 b(set,)h(the)f(v)-5 b(alue)33 b(is)f(in)m(terpreted)g
+(as)g(a)h(command)f(to)h(execute)g(b)s(efore)f(the)g(prin)m(ting)g(of)
+630 3422 y(eac)m(h)g(primary)d(prompt)g(\()p Ft($PS1)p
+Fu(\).)150 3587 y Ft(PROMPT_DIRTRIM)630 3696 y Fu(If)e(set)g(to)h(a)g
+(n)m(um)m(b)s(er)e(greater)i(than)f(zero,)i(the)e(v)-5
+b(alue)28 b(is)f(used)g(as)g(the)h(n)m(um)m(b)s(er)e(of)h(trailing)630
+3806 y(directory)35 b(comp)s(onen)m(ts)g(to)h(retain)f(when)f
+(expanding)g(the)h Ft(\\w)f Fu(and)g Ft(\\W)g Fu(prompt)g(string)630
+3915 y(escap)s(es)21 b(\(see)h(Section)f(6.9)h([Con)m(trolling)g(the)f
+(Prompt],)h(page)f(97\).)39 b(Characters)21 b(remo)m(v)m(ed)630
+4025 y(are)31 b(replaced)g(with)f(an)g(ellipsis.)150
+4189 y Ft(PS0)336 b Fu(The)30 b(v)-5 b(alue)32 b(of)f(this)f(parameter)
+i(is)f(expanded)f(lik)m(e)i Fr(PS1)38 b Fu(and)30 b(displa)m(y)m(ed)h
+(b)m(y)g(in)m(teractiv)m(e)630 4299 y(shells)f(after)h(reading)g(a)g
+(command)f(and)f(b)s(efore)h(the)h(command)f(is)h(executed.)150
+4463 y Ft(PS3)336 b Fu(The)34 b(v)-5 b(alue)35 b(of)f(this)g(v)-5
+b(ariable)35 b(is)g(used)e(as)i(the)f(prompt)g(for)g(the)g
+Ft(select)f Fu(command.)52 b(If)630 4573 y(this)30 b(v)-5
+b(ariable)31 b(is)g(not)f(set,)i(the)e Ft(select)f Fu(command)h
+(prompts)f(with)h(`)p Ft(#?)g Fu(')150 4737 y Ft(PS4)336
+b Fu(The)37 b(v)-5 b(alue)37 b(of)g(this)g(parameter)h(is)f(expanded)f
+(lik)m(e)i Fr(PS1)44 b Fu(and)37 b(the)g(expanded)f(v)-5
+b(alue)38 b(is)630 4847 y(the)d(prompt)f(prin)m(ted)g(b)s(efore)g(the)h
+(command)f(line)h(is)g(ec)m(ho)s(ed)g(when)f(the)h Ft(-x)f
+Fu(option)h(is)630 4956 y(set)k(\(see)h(Section)g(4.3.1)g([The)f(Set)g
+(Builtin],)j(page)e(61\).)67 b(The)38 b(\014rst)g(c)m(haracter)j(of)e
+(the)630 5066 y(expanded)33 b(v)-5 b(alue)33 b(is)h(replicated)g(m)m
+(ultiple)g(times,)h(as)f(necessary)-8 b(,)35 b(to)f(indicate)g(m)m
+(ultiple)630 5176 y(lev)m(els)e(of)e(indirection.)42
+b(The)29 b(default)i(is)f(`)p Ft(+)h Fu('.)150 5340 y
+Ft(PWD)336 b Fu(The)30 b(curren)m(t)g(w)m(orking)h(directory)g(as)f
+(set)h(b)m(y)f(the)h Ft(cd)f Fu(builtin.)p eop end
+%%Page: 83 89
+TeXDict begin 83 88 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(83)150 299 y Ft(RANDOM)192
+b Fu(Eac)m(h)30 b(time)g(this)f(parameter)g(is)g(referenced,)h(a)f
+(random)g(in)m(teger)h(b)s(et)m(w)m(een)g(0)f(and)g(32767)630
+408 y(is)i(generated.)43 b(Assigning)31 b(a)g(v)-5 b(alue)31
+b(to)g(this)g(v)-5 b(ariable)31 b(seeds)g(the)g(random)f(n)m(um)m(b)s
+(er)f(gen-)630 518 y(erator.)150 675 y Ft(READLINE_LINE)630
+784 y Fu(The)e(con)m(ten)m(ts)i(of)f(the)g(Readline)g(line)g(bu\013er,)
+f(for)h(use)f(with)g(`)p Ft(bind)j(-x)p Fu(')d(\(see)h(Section)h(4.2)
+630 894 y([Bash)i(Builtins],)g(page)g(50\).)150 1050
+y Ft(READLINE_POINT)630 1160 y Fu(The)23 b(p)s(osition)g(of)g(the)h
+(insertion)f(p)s(oin)m(t)g(in)g(the)g(Readline)h(line)f(bu\013er,)h
+(for)f(use)g(with)g(`)p Ft(bind)630 1270 y(-x)p Fu(')30
+b(\(see)h(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(50\).)150
+1426 y Ft(REPLY)240 b Fu(The)30 b(default)g(v)-5 b(ariable)32
+b(for)e(the)g Ft(read)g Fu(builtin.)150 1583 y Ft(SECONDS)144
+b Fu(This)40 b(v)-5 b(ariable)41 b(expands)f(to)h(the)g(n)m(um)m(b)s
+(er)e(of)i(seconds)g(since)g(the)f(shell)h(w)m(as)g(started.)630
+1692 y(Assignmen)m(t)i(to)g(this)g(v)-5 b(ariable)43
+b(resets)g(the)g(coun)m(t)g(to)g(the)g(v)-5 b(alue)43
+b(assigned,)j(and)c(the)630 1802 y(expanded)35 b(v)-5
+b(alue)36 b(b)s(ecomes)h(the)f(v)-5 b(alue)36 b(assigned)g(plus)f(the)h
+(n)m(um)m(b)s(er)f(of)h(seconds)g(since)630 1911 y(the)31
+b(assignmen)m(t.)150 2068 y Ft(SHELL)240 b Fu(The)29
+b(full)h(pathname)g(to)h(the)f(shell)g(is)g(k)m(ept)g(in)g(this)g(en)m
+(vironmen)m(t)g(v)-5 b(ariable.)42 b(If)29 b(it)i(is)f(not)630
+2178 y(set)36 b(when)f(the)h(shell)g(starts,)i(Bash)e(assigns)h(to)f
+(it)h(the)f(full)f(pathname)h(of)g(the)g(curren)m(t)630
+2287 y(user's)30 b(login)h(shell.)150 2444 y Ft(SHELLOPTS)630
+2553 y Fu(A)g(colon-separated)h(list)f(of)g(enabled)f(shell)h(options.)
+41 b(Eac)m(h)31 b(w)m(ord)f(in)g(the)h(list)g(is)g(a)g(v)-5
+b(alid)630 2663 y(argumen)m(t)28 b(for)f(the)h Ft(-o)e
+Fu(option)i(to)g(the)g Ft(set)e Fu(builtin)h(command)g(\(see)i(Section)
+f(4.3.1)h([The)630 2772 y(Set)g(Builtin],)h(page)f(61\).)42
+b(The)28 b(options)h(app)s(earing)f(in)g Ft(SHELLOPTS)e
+Fu(are)j(those)h(rep)s(orted)630 2882 y(as)g(`)p Ft(on)p
+Fu(')f(b)m(y)h(`)p Ft(set)g(-o)p Fu('.)40 b(If)29 b(this)h(v)-5
+b(ariable)30 b(is)g(in)f(the)h(en)m(vironmen)m(t)g(when)f(Bash)h
+(starts)g(up,)630 2992 y(eac)m(h)41 b(shell)e(option)h(in)f(the)h(list)
+g(will)f(b)s(e)g(enabled)h(b)s(efore)f(reading)g(an)m(y)h(startup)f
+(\014les.)630 3101 y(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8
+b(.)150 3258 y Ft(SHLVL)240 b Fu(Incremen)m(ted)21 b(b)m(y)g(one)g(eac)
+m(h)h(time)f(a)h(new)e(instance)h(of)g(Bash)g(is)g(started.)38
+b(This)20 b(is)h(in)m(tended)630 3367 y(to)31 b(b)s(e)f(a)h(coun)m(t)g
+(of)f(ho)m(w)h(deeply)f(y)m(our)g(Bash)h(shells)f(are)h(nested.)150
+3524 y Ft(TIMEFORMAT)630 3634 y Fu(The)f(v)-5 b(alue)32
+b(of)f(this)g(parameter)g(is)g(used)f(as)h(a)g(format)h(string)f(sp)s
+(ecifying)f(ho)m(w)h(the)g(tim-)630 3743 y(ing)37 b(information)f(for)h
+(pip)s(elines)f(pre\014xed)f(with)h(the)h Ft(time)e Fu(reserv)m(ed)i(w)
+m(ord)f(should)g(b)s(e)630 3853 y(displa)m(y)m(ed.)k(The)27
+b(`)p Ft(\045)p Fu(')h(c)m(haracter)h(in)m(tro)s(duces)e(an)h(escap)s
+(e)g(sequence)g(that)g(is)f(expanded)g(to)630 3962 y(a)37
+b(time)g(v)-5 b(alue)36 b(or)h(other)f(information.)59
+b(The)36 b(escap)s(e)g(sequences)h(and)e(their)i(meanings)630
+4072 y(are)31 b(as)f(follo)m(ws;)i(the)f(braces)f(denote)h(optional)h
+(p)s(ortions.)630 4228 y Ft(\045\045)384 b Fu(A)30 b(literal)i(`)p
+Ft(\045)p Fu('.)630 4385 y Ft(\045[)p Fj(p)p Ft(][l]R)96
+b Fu(The)30 b(elapsed)h(time)g(in)f(seconds.)630 4542
+y Ft(\045[)p Fj(p)p Ft(][l]U)96 b Fu(The)30 b(n)m(um)m(b)s(er)f(of)h
+(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(user)f(mo)s(de.)630
+4698 y Ft(\045[)p Fj(p)p Ft(][l]S)96 b Fu(The)30 b(n)m(um)m(b)s(er)f
+(of)h(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(system)g(mo)s(de.)630
+4855 y Ft(\045P)384 b Fu(The)30 b(CPU)g(p)s(ercen)m(tage,)i(computed)e
+(as)h(\(\045U)f Ft(+)g Fu(\045S\))g(/)h(\045R.)630 5011
+y(The)23 b(optional)j Fr(p)g Fu(is)e(a)g(digit)h(sp)s(ecifying)e(the)h
+(precision,)i(the)e(n)m(um)m(b)s(er)f(of)h(fractional)h(digits)630
+5121 y(after)36 b(a)f(decimal)i(p)s(oin)m(t.)55 b(A)35
+b(v)-5 b(alue)36 b(of)f(0)h(causes)g(no)f(decimal)h(p)s(oin)m(t)f(or)h
+(fraction)g(to)g(b)s(e)630 5230 y(output.)48 b(A)m(t)34
+b(most)f(three)g(places)h(after)f(the)g(decimal)h(p)s(oin)m(t)f(ma)m(y)
+h(b)s(e)e(sp)s(eci\014ed;)i(v)-5 b(alues)630 5340 y(of)31
+b Fr(p)h Fu(greater)g(than)e(3)h(are)f(c)m(hanged)h(to)g(3.)42
+b(If)29 b Fr(p)k Fu(is)d(not)h(sp)s(eci\014ed,)f(the)h(v)-5
+b(alue)30 b(3)h(is)g(used.)p eop end
+%%Page: 84 90
+TeXDict begin 84 89 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(84)630 299 y(The)54
+b(optional)h Ft(l)f Fu(sp)s(eci\014es)g(a)h(longer)f(format,)61
+b(including)54 b(min)m(utes,)61 b(of)54 b(the)g(form)630
+408 y Fr(MM)10 b Fu(m)p Fr(SS)p Fu(.)p Fr(FF)d Fu(s.)103
+b(The)50 b(v)-5 b(alue)52 b(of)f Fr(p)j Fu(determines)d(whether)f(or)h
+(not)h(the)f(fraction)h(is)630 518 y(included.)630 653
+y(If)30 b(this)g(v)-5 b(ariable)31 b(is)g(not)f(set,)i(Bash)e(acts)h
+(as)g(if)f(it)h(had)f(the)h(v)-5 b(alue)870 787 y Ft
+($'\\nreal\\t\0453lR\\nuser\\t\0453)o(lU\\n)o(sys\\)o(t\0453)o(lS')630
+922 y Fu(If)37 b(the)g(v)-5 b(alue)38 b(is)f(n)m(ull,)i(no)f(timing)f
+(information)h(is)f(displa)m(y)m(ed.)62 b(A)37 b(trailing)i(newline)e
+(is)630 1031 y(added)30 b(when)f(the)i(format)f(string)h(is)f(displa)m
+(y)m(ed.)150 1191 y Ft(TMOUT)240 b Fu(If)22 b(set)h(to)g(a)g(v)-5
+b(alue)23 b(greater)h(than)e(zero,)j Ft(TMOUT)d Fu(is)g(treated)i(as)e
+(the)h(default)g(timeout)g(for)g(the)630 1300 y Ft(read)31
+b Fu(builtin)h(\(see)h(Section)f(4.2)i([Bash)e(Builtins],)h(page)g
+(50\).)47 b(The)32 b Ft(select)e Fu(command)630 1410
+y(\(see)f(Section)h(3.2.4.2)g([Conditional)g(Constructs],)e(page)i
+(11\))f(terminates)g(if)g(input)e(do)s(es)630 1519 y(not)k(arriv)m(e)g
+(after)g Ft(TMOUT)e Fu(seconds)h(when)f(input)h(is)g(coming)h(from)f(a)
+h(terminal.)630 1654 y(In)40 b(an)h(in)m(teractiv)m(e)i(shell,)h(the)d
+(v)-5 b(alue)41 b(is)g(in)m(terpreted)g(as)f(the)h(n)m(um)m(b)s(er)f
+(of)h(seconds)f(to)630 1763 y(w)m(ait)28 b(for)e(a)g(line)h(of)g(input)
+e(after)i(issuing)f(the)h(primary)e(prompt.)39 b(Bash)26
+b(terminates)h(after)630 1873 y(w)m(aiting)32 b(for)e(that)h(n)m(um)m
+(b)s(er)e(of)h(seconds)h(if)f(a)h(complete)h(line)e(of)h(input)e(do)s
+(es)h(not)h(arriv)m(e.)150 2032 y Ft(TMPDIR)192 b Fu(If)39
+b(set,)j(Bash)e(uses)f(its)h(v)-5 b(alue)40 b(as)f(the)h(name)f(of)h(a)
+g(directory)g(in)f(whic)m(h)g(Bash)h(creates)630 2142
+y(temp)s(orary)30 b(\014les)g(for)g(the)h(shell's)g(use.)150
+2301 y Ft(UID)336 b Fu(The)30 b(n)m(umeric)g(real)h(user)f(id)g(of)g
+(the)h(curren)m(t)f(user.)40 b(This)30 b(v)-5 b(ariable)31
+b(is)f(readonly)-8 b(.)p eop end
+%%Page: 85 91
+TeXDict begin 85 90 bop 3659 -116 a Fu(85)150 299 y Fp(6)80
+b(Bash)54 b(F)-13 b(eatures)150 502 y Fu(This)30 b(c)m(hapter)h
+(describ)s(es)e(features)i(unique)e(to)i(Bash.)150 731
+y Fs(6.1)68 b(In)l(v)l(oking)46 b(Bash)390 890 y Ft(bash)h([long-opt])e
+([-ir])h([-abefhkmnptuvxdBCDHP])c([-o)47 b Fj(option)p
+Ft(])581 1000 y([-O)g Fj(shopt_option)p Ft(])d([)p Fj(argument)h
+Ft(...)o(])390 1110 y(bash)i([long-opt])e([-abefhkmnptuvxdBCDHP])c([-o)
+47 b Fj(option)p Ft(])581 1219 y([-O)g Fj(shopt_option)p
+Ft(])d(-c)j Fj(string)f Ft([)p Fj(argument)g Ft(...)o(])390
+1329 y(bash)h([long-opt])e(-s)i([-abefhkmnptuvxdBCDHP])42
+b([-o)k Fj(option)p Ft(])581 1438 y([-O)h Fj(shopt_option)p
+Ft(])d([)p Fj(argument)h Ft(...)o(])275 1567 y Fu(All)31
+b(of)g(the)f(single-c)m(haracter)k(options)d(used)f(with)g(the)h
+Ft(set)f Fu(builtin)g(\(see)h(Section)h(4.3.1)g([The)f(Set)150
+1676 y(Builtin],)45 b(page)c(61\))i(can)e(b)s(e)f(used)h(as)g(options)g
+(when)f(the)i(shell)f(is)g(in)m(v)m(ok)m(ed.)74 b(In)41
+b(addition,)j(there)150 1786 y(are)38 b(sev)m(eral)h(m)m(ulti-c)m
+(haracter)h(options)d(that)h(y)m(ou)g(can)g(use.)61 b(These)38
+b(options)f(m)m(ust)h(app)s(ear)e(on)i(the)150 1896 y(command)30
+b(line)h(b)s(efore)f(the)g(single-c)m(haracter)j(options)e(to)g(b)s(e)f
+(recognized.)150 2043 y Ft(--debugger)630 2152 y Fu(Arrange)j(for)g
+(the)g(debugger)g(pro\014le)g(to)h(b)s(e)e(executed)i(b)s(efore)f(the)g
+(shell)g(starts.)49 b(T)-8 b(urns)630 2262 y(on)35 b(extended)g
+(debugging)f(mo)s(de)h(\(see)g(Section)h(4.3.2)h([The)d(Shopt)g
+(Builtin],)j(page)f(65,)630 2371 y(for)30 b(a)h(description)f(of)h(the)
+f Ft(extdebug)f Fu(option)h(to)h(the)g Ft(shopt)e Fu(builtin\).)150
+2519 y Ft(--dump-po-strings)630 2628 y Fu(A)37 b(list)g(of)f(all)i
+(double-quoted)e(strings)g(preceded)g(b)m(y)h(`)p Ft($)p
+Fu(')f(is)h(prin)m(ted)f(on)g(the)h(standard)630 2738
+y(output)29 b(in)g(the)g Fm(gnu)g Ft(gettext)f Fu(PO)g(\(p)s(ortable)i
+(ob)5 b(ject\))30 b(\014le)g(format.)40 b(Equiv)-5 b(alen)m(t)31
+b(to)f Ft(-D)630 2847 y Fu(except)h(for)f(the)h(output)f(format.)150
+2995 y Ft(--dump-strings)630 3104 y Fu(Equiv)-5 b(alen)m(t)31
+b(to)g Ft(-D)p Fu(.)150 3251 y Ft(--help)192 b Fu(Displa)m(y)32
+b(a)e(usage)h(message)h(on)e(standard)g(output)g(and)f(exit)j
+(successfully)-8 b(.)150 3399 y Ft(--init-file)27 b Fj(filename)150
+3508 y Ft(--rcfile)h Fj(filename)630 3618 y Fu(Execute)23
+b(commands)e(from)g Fr(\014lename)28 b Fu(\(instead)22
+b(of)g Ft(~/.bashrc)p Fu(\))e(in)h(an)h(in)m(teractiv)m(e)i(shell.)150
+3765 y Ft(--login)144 b Fu(Equiv)-5 b(alen)m(t)31 b(to)g
+Ft(-l)p Fu(.)150 3912 y Ft(--noediting)630 4022 y Fu(Do)h(not)e(use)h
+(the)g Fm(gnu)f Fu(Readline)i(library)e(\(see)h(Chapter)g(8)g([Command)
+f(Line)g(Editing],)630 4131 y(page)h(107\))h(to)f(read)g(command)f
+(lines)g(when)g(the)g(shell)h(is)f(in)m(teractiv)m(e.)150
+4278 y Ft(--noprofile)630 4388 y Fu(Don't)22 b(load)g(the)g
+(system-wide)f(startup)g(\014le)h Ft(/etc/profile)c Fu(or)j(an)m(y)h
+(of)f(the)h(p)s(ersonal)f(ini-)630 4498 y(tialization)34
+b(\014les)e Ft(~/.bash_profile)p Fu(,)c Ft(~/.bash_login)p
+Fu(,)g(or)k Ft(~/.profile)c Fu(when)j(Bash)630 4607 y(is)f(in)m(v)m(ok)
+m(ed)i(as)f(a)g(login)g(shell.)150 4754 y Ft(--norc)192
+b Fu(Don't)35 b(read)f(the)g Ft(~/.bashrc)e Fu(initialization)k(\014le)
+f(in)e(an)h(in)m(teractiv)m(e)j(shell.)52 b(This)33 b(is)h(on)630
+4864 y(b)m(y)c(default)h(if)f(the)h(shell)f(is)h(in)m(v)m(ok)m(ed)h(as)
+e Ft(sh)p Fu(.)150 5011 y Ft(--posix)144 b Fu(Change)24
+b(the)h(b)s(eha)m(vior)f(of)g(Bash)h(where)e(the)i(default)f(op)s
+(eration)h(di\013ers)f(from)f(the)i Fm(posix)630 5121
+y Fu(standard)35 b(to)h(matc)m(h)g(the)g(standard.)55
+b(This)35 b(is)h(in)m(tended)f(to)h(mak)m(e)h(Bash)f(b)s(eha)m(v)m(e)g
+(as)g(a)630 5230 y(strict)26 b(sup)s(erset)e(of)h(that)g(standard.)38
+b(See)26 b(Section)f(6.11)i([Bash)e(POSIX)f(Mo)s(de],)j(page)f(99,)630
+5340 y(for)k(a)h(description)f(of)h(the)f(Bash)h Fm(posix)f
+Fu(mo)s(de.)p eop end
+%%Page: 86 92
+TeXDict begin 86 91 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(86)150 299 y Ft(--restricted)630
+408 y Fu(Mak)m(e)54 b(the)e(shell)g(a)h(restricted)g(shell)f(\(see)h
+(Section)g(6.10)h([The)d(Restricted)j(Shell],)630 518
+y(page)31 b(99\).)150 677 y Ft(--verbose)630 787 y Fu(Equiv)-5
+b(alen)m(t)31 b(to)g Ft(-v)p Fu(.)41 b(Prin)m(t)30 b(shell)g(input)g
+(lines)g(as)h(they're)g(read.)150 946 y Ft(--version)630
+1056 y Fu(Sho)m(w)d(v)m(ersion)g(information)g(for)g(this)g(instance)h
+(of)f(Bash)g(on)g(the)g(standard)f(output)h(and)630 1166
+y(exit)j(successfully)-8 b(.)275 1325 y(There)28 b(are)i(sev)m(eral)g
+(single-c)m(haracter)i(options)d(that)h(ma)m(y)g(b)s(e)e(supplied)g(at)
+i(in)m(v)m(o)s(cation)h(whic)m(h)e(are)150 1435 y(not)i(a)m(v)-5
+b(ailable)32 b(with)e(the)h Ft(set)e Fu(builtin.)150
+1594 y Ft(-c)384 b Fu(Read)66 b(and)f(execute)i(commands)e(from)g(the)h
+(\014rst)e(non-option)i(argumen)m(t)g Fr(com-)630 1704
+y(mand)p 859 1704 28 4 v 39 w(string)p Fu(,)34 b(then)e(exit.)49
+b(If)32 b(there)h(are)g(argumen)m(ts)g(after)g(the)g
+Fr(command)p 3303 1704 V 40 w(string)p Fu(,)h(the)630
+1813 y(\014rst)e(argumen)m(t)h(is)g(assigned)g(to)h Ft($0)e
+Fu(and)h(an)m(y)g(remaining)g(argumen)m(ts)g(are)g(assigned)g(to)630
+1923 y(the)38 b(p)s(ositional)h(parameters.)65 b(The)37
+b(assignmen)m(t)i(to)g Ft($0)f Fu(sets)g(the)h(name)f(of)g(the)g
+(shell,)630 2032 y(whic)m(h)30 b(is)h(used)e(in)h(w)m(arning)g(and)g
+(error)g(messages.)150 2192 y Ft(-i)384 b Fu(F)-8 b(orce)22
+b(the)g(shell)f(to)g(run)f(in)m(teractiv)m(ely)-8 b(.)41
+b(In)m(teractiv)m(e)23 b(shells)e(are)h(describ)s(ed)d(in)i(Section)h
+(6.3)630 2301 y([In)m(teractiv)m(e)33 b(Shells],)e(page)g(88.)150
+2461 y Ft(-l)384 b Fu(Mak)m(e)33 b(this)e(shell)h(act)g(as)g(if)f(it)h
+(had)f(b)s(een)f(directly)i(in)m(v)m(ok)m(ed)h(b)m(y)f(login.)44
+b(When)31 b(the)h(shell)630 2570 y(is)37 b(in)m(teractiv)m(e,)43
+b(this)37 b(is)g(equiv)-5 b(alen)m(t)39 b(to)f(starting)h(a)e(login)i
+(shell)e(with)g(`)p Ft(exec)30 b(-l)g(bash)p Fu('.)630
+2680 y(When)h(the)g(shell)h(is)f(not)g(in)m(teractiv)m(e,)k(the)c
+(login)h(shell)g(startup)f(\014les)g(will)g(b)s(e)g(executed.)630
+2790 y(`)p Ft(exec)e(bash)h(-l)p Fu(')43 b(or)h(`)p Ft(exec)29
+b(bash)g(--login)p Fu(')42 b(will)i(replace)h(the)f(curren)m(t)f(shell)
+h(with)g(a)630 2899 y(Bash)26 b(login)g(shell.)39 b(See)26
+b(Section)g(6.2)h([Bash)e(Startup)g(Files],)j(page)e(87,)i(for)d(a)h
+(description)630 3009 y(of)31 b(the)f(sp)s(ecial)h(b)s(eha)m(vior)g(of)
+f(a)h(login)g(shell.)150 3168 y Ft(-r)384 b Fu(Mak)m(e)54
+b(the)e(shell)g(a)h(restricted)g(shell)f(\(see)h(Section)g(6.10)h([The)
+d(Restricted)j(Shell],)630 3278 y(page)31 b(99\).)150
+3437 y Ft(-s)384 b Fu(If)24 b(this)h(option)h(is)f(presen)m(t,)h(or)f
+(if)g(no)f(argumen)m(ts)i(remain)e(after)i(option)f(pro)s(cessing,)h
+(then)630 3547 y(commands)i(are)h(read)g(from)f(the)h(standard)f
+(input.)39 b(This)28 b(option)h(allo)m(ws)h(the)f(p)s(ositional)630
+3656 y(parameters)i(to)h(b)s(e)e(set)i(when)d(in)m(v)m(oking)k(an)d(in)
+m(teractiv)m(e)k(shell)d(or)g(when)f(reading)h(input)630
+3766 y(through)f(a)g(pip)s(e.)150 3925 y Ft(-D)384 b
+Fu(A)37 b(list)g(of)f(all)i(double-quoted)e(strings)g(preceded)g(b)m(y)
+h(`)p Ft($)p Fu(')f(is)h(prin)m(ted)f(on)g(the)h(standard)630
+4035 y(output.)63 b(These)38 b(are)g(the)g(strings)g(that)h(are)f(sub)5
+b(ject)38 b(to)h(language)g(translation)g(when)630 4144
+y(the)e(curren)m(t)g(lo)s(cale)h(is)f(not)g Ft(C)g Fu(or)f
+Ft(POSIX)g Fu(\(see)h(Section)h(3.1.2.5)h([Lo)s(cale)g(T)-8
+b(ranslation],)630 4254 y(page)31 b(7\).)42 b(This)29
+b(implies)i(the)f Ft(-n)g Fu(option;)h(no)f(commands)g(will)h(b)s(e)f
+(executed.)150 4413 y Ft([-+]O)f([)p Fj(shopt_option)p
+Ft(])630 4523 y Fr(shopt)p 854 4523 V 40 w(option)44
+b Fu(is)g(one)h(of)f(the)g(shell)h(options)f(accepted)h(b)m(y)f(the)h
+Ft(shopt)d Fu(builtin)i(\(see)630 4633 y(Section)32 b(4.3.2)h([The)e
+(Shopt)f(Builtin],)i(page)g(65\).)44 b(If)31 b Fr(shopt)p
+2724 4633 V 40 w(option)g Fu(is)g(presen)m(t,)h Ft(-O)f
+Fu(sets)630 4742 y(the)24 b(v)-5 b(alue)24 b(of)g(that)h(option;)h
+Ft(+O)e Fu(unsets)f(it.)39 b(If)23 b Fr(shopt)p 2423
+4742 V 40 w(option)h Fu(is)g(not)g(supplied,)g(the)g(names)630
+4852 y(and)31 b(v)-5 b(alues)32 b(of)g(the)g(shell)g(options)g
+(accepted)h(b)m(y)f Ft(shopt)e Fu(are)i(prin)m(ted)f(on)h(the)g
+(standard)630 4961 y(output.)40 b(If)29 b(the)h(in)m(v)m(o)s(cation)h
+(option)f(is)f Ft(+O)p Fu(,)h(the)f(output)g(is)h(displa)m(y)m(ed)g(in)
+f(a)h(format)f(that)630 5071 y(ma)m(y)i(b)s(e)f(reused)f(as)i(input.)
+150 5230 y Ft(--)384 b Fu(A)38 b Ft(--)g Fu(signals)g(the)h(end)e(of)i
+(options)f(and)g(disables)g(further)f(option)h(pro)s(cessing.)64
+b(An)m(y)630 5340 y(argumen)m(ts)31 b(after)g(the)f Ft(--)g
+Fu(are)h(treated)g(as)g(\014lenames)f(and)g(argumen)m(ts.)p
+eop end
+%%Page: 87 93
+TeXDict begin 87 92 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(87)275 299 y(A)27 b
+Fl(lo)-5 b(gin)35 b Fu(shell)27 b(is)g(one)h(whose)f(\014rst)f(c)m
+(haracter)j(of)e(argumen)m(t)h(zero)f(is)h(`)p Ft(-)p
+Fu(',)g(or)f(one)g(in)m(v)m(ok)m(ed)i(with)e(the)150
+408 y Ft(--login)h Fu(option.)275 555 y(An)g Fl(inter)-5
+b(active)37 b Fu(shell)30 b(is)f(one)g(started)h(without)f(non-option)h
+(argumen)m(ts,)g(unless)e Ft(-s)h Fu(is)g(sp)s(eci\014ed,)150
+665 y(without)k(sp)s(ecifying)h(the)f Ft(-c)g Fu(option,)i(and)e(whose)
+g(input)g(and)f(output)h(are)h(b)s(oth)f(connected)h(to)g(ter-)150
+774 y(minals)g(\(as)g(determined)f(b)m(y)h Ft(isatty\(3\))p
+Fu(\),)e(or)i(one)g(started)g(with)f(the)h Ft(-i)f Fu(option.)51
+b(See)33 b(Section)i(6.3)150 884 y([In)m(teractiv)m(e)e(Shells],)e
+(page)g(88,)g(for)f(more)h(information.)275 1031 y(If)i(argumen)m(ts)h
+(remain)g(after)h(option)f(pro)s(cessing,)h(and)e(neither)h(the)g
+Ft(-c)g Fu(nor)f(the)h Ft(-s)g Fu(option)g(has)150 1140
+y(b)s(een)44 b(supplied,)j(the)d(\014rst)g(argumen)m(t)h(is)g(assumed)e
+(to)j(b)s(e)d(the)i(name)g(of)f(a)h(\014le)g(con)m(taining)h(shell)150
+1250 y(commands)30 b(\(see)g(Section)h(3.8)g([Shell)f(Scripts],)g(page)
+h(41\).)41 b(When)30 b(Bash)g(is)g(in)m(v)m(ok)m(ed)i(in)d(this)h
+(fashion,)150 1359 y Ft($0)37 b Fu(is)g(set)h(to)h(the)e(name)h(of)f
+(the)h(\014le,)i(and)c(the)i(p)s(ositional)g(parameters)g(are)g(set)g
+(to)g(the)g(remaining)150 1469 y(argumen)m(ts.)h(Bash)26
+b(reads)f(and)g(executes)h(commands)f(from)g(this)g(\014le,)i(then)e
+(exits.)40 b(Bash's)25 b(exit)i(status)150 1579 y(is)f(the)h(exit)h
+(status)e(of)h(the)g(last)g(command)f(executed)h(in)g(the)f(script.)40
+b(If)26 b(no)g(commands)g(are)h(executed,)150 1688 y(the)k(exit)g
+(status)g(is)f(0.)150 1947 y Fs(6.2)68 b(Bash)45 b(Startup)g(Files)150
+2107 y Fu(This)23 b(section)j(describ)s(es)d(ho)m(w)i(Bash)f(executes)h
+(its)g(startup)f(\014les.)38 b(If)24 b(an)m(y)h(of)f(the)h(\014les)f
+(exist)h(but)e(cannot)150 2216 y(b)s(e)29 b(read,)i(Bash)f(rep)s(orts)f
+(an)h(error.)40 b(Tildes)30 b(are)g(expanded)f(in)h(\014lenames)g(as)g
+(describ)s(ed)f(ab)s(o)m(v)m(e)i(under)150 2326 y(Tilde)f(Expansion)g
+(\(see)h(Section)h(3.5.2)g([Tilde)e(Expansion],)h(page)g(23\).)275
+2473 y(In)m(teractiv)m(e)h(shells)f(are)g(describ)s(ed)e(in)h(Section)h
+(6.3)h([In)m(teractiv)m(e)h(Shells],)d(page)h(88.)150
+2684 y Fk(In)m(v)m(ok)m(ed)40 b(as)h(an)f(in)m(teractiv)m(e)f(login)j
+(shell,)g(or)g(with)e Fh(--login)150 2831 y Fu(When)c(Bash)f(is)h(in)m
+(v)m(ok)m(ed)h(as)f(an)g(in)m(teractiv)m(e)j(login)d(shell,)i(or)e(as)g
+(a)g(non-in)m(teractiv)m(e)i(shell)e(with)g(the)150 2940
+y Ft(--login)30 b Fu(option,)k(it)f(\014rst)e(reads)h(and)g(executes)i
+(commands)e(from)f(the)i(\014le)f Ft(/etc/profile)p Fu(,)e(if)i(that)
+150 3050 y(\014le)44 b(exists.)80 b(After)44 b(reading)g(that)g
+(\014le,)j(it)d(lo)s(oks)g(for)f Ft(~/.bash_profile)p
+Fu(,)g Ft(~/.bash_login)p Fu(,)h(and)150 3160 y Ft(~/.profile)p
+Fu(,)25 b(in)i(that)g(order,)h(and)e(reads)h(and)f(executes)j(commands)
+d(from)h(the)g(\014rst)f(one)i(that)f(exists)150 3269
+y(and)j(is)h(readable.)42 b(The)30 b Ft(--noprofile)d
+Fu(option)k(ma)m(y)g(b)s(e)f(used)g(when)g(the)h(shell)f(is)h(started)g
+(to)g(inhibit)150 3379 y(this)f(b)s(eha)m(vior.)275 3526
+y(When)h(an)g(in)m(teractiv)m(e)k(login)d(shell)g(exits,)h(or)f(a)g
+(non-in)m(teractiv)m(e)i(login)f(shell)e(executes)i(the)f
+Ft(exit)150 3635 y Fu(builtin)g(command,)i(Bash)e(reads)h(and)f
+(executes)i(commands)e(from)g(the)h(\014le)g Ft(~/.bash_logout)p
+Fu(,)d(if)i(it)150 3745 y(exists.)150 3956 y Fk(In)m(v)m(ok)m(ed)40
+b(as)h(an)f(in)m(teractiv)m(e)f(non-login)k(shell)150
+4103 y Fu(When)g(an)h(in)m(teractiv)m(e)i(shell)e(that)g(is)f(not)h(a)g
+(login)g(shell)g(is)f(started,)48 b(Bash)c(reads)f(and)g(executes)150
+4213 y(commands)31 b(from)g Ft(~/.bashrc)p Fu(,)f(if)h(that)h(\014le)g
+(exists.)44 b(This)31 b(ma)m(y)h(b)s(e)f(inhibited)g(b)m(y)g(using)g
+(the)h Ft(--norc)150 4322 y Fu(option.)40 b(The)27 b
+Ft(--rcfile)h Fj(file)e Fu(option)h(will)g(force)h(Bash)f(to)h(read)f
+(and)f(execute)j(commands)d(from)h Fr(\014le)150 4432
+y Fu(instead)k(of)f Ft(~/.bashrc)p Fu(.)275 4579 y(So,)g(t)m(ypically)
+-8 b(,)33 b(y)m(our)d Ft(~/.bash_profile)c Fu(con)m(tains)32
+b(the)f(line)390 4725 y Ft(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g
+(~/.bashrc;)e(fi)150 4872 y Fu(after)31 b(\(or)g(b)s(efore\))f(an)m(y)h
+(login-sp)s(eci\014c)g(initializations.)150 5083 y Fk(In)m(v)m(ok)m(ed)
+40 b(non-in)m(teractiv)m(ely)150 5230 y Fu(When)33 b(Bash)g(is)g
+(started)h(non-in)m(teractiv)m(ely)-8 b(,)37 b(to)d(run)e(a)h(shell)h
+(script,)g(for)f(example,)i(it)e(lo)s(oks)h(for)f(the)150
+5340 y(v)-5 b(ariable)35 b Ft(BASH_ENV)d Fu(in)i(the)h(en)m(vironmen)m
+(t,)h(expands)e(its)g(v)-5 b(alue)35 b(if)g(it)g(app)s(ears)e(there,)j
+(and)e(uses)g(the)p eop end
+%%Page: 88 94
+TeXDict begin 88 93 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(88)150 299 y(expanded)30
+b(v)-5 b(alue)30 b(as)h(the)g(name)f(of)h(a)f(\014le)h(to)g(read)f(and)
+g(execute.)42 b(Bash)31 b(b)s(eha)m(v)m(es)g(as)g(if)f(the)g(follo)m
+(wing)150 408 y(command)g(w)m(ere)h(executed:)390 552
+y Ft(if)47 b([)h(-n)f("$BASH_ENV")e(];)i(then)f(.)i("$BASH_ENV";)c(fi)
+150 696 y Fu(but)30 b(the)g(v)-5 b(alue)31 b(of)g(the)f
+Ft(PATH)f Fu(v)-5 b(ariable)32 b(is)e(not)h(used)e(to)i(searc)m(h)g
+(for)f(the)h(\014lename.)275 840 y(As)42 b(noted)g(ab)s(o)m(v)m(e,)47
+b(if)42 b(a)h(non-in)m(teractiv)m(e)i(shell)d(is)g(in)m(v)m(ok)m(ed)i
+(with)e(the)h Ft(--login)d Fu(option,)46 b(Bash)150 949
+y(attempts)31 b(to)g(read)g(and)e(execute)j(commands)e(from)g(the)h
+(login)g(shell)g(startup)e(\014les.)150 1158 y Fk(In)m(v)m(ok)m(ed)40
+b(with)g(name)h Fh(sh)150 1305 y Fu(If)c(Bash)g(is)g(in)m(v)m(ok)m(ed)i
+(with)e(the)g(name)g Ft(sh)p Fu(,)i(it)f(tries)f(to)h(mimic)g(the)f
+(startup)g(b)s(eha)m(vior)g(of)h(historical)150 1414
+y(v)m(ersions)31 b(of)f Ft(sh)g Fu(as)h(closely)h(as)e(p)s(ossible,)g
+(while)h(conforming)f(to)h(the)g Fm(posix)e Fu(standard)h(as)h(w)m
+(ell.)275 1558 y(When)50 b(in)m(v)m(ok)m(ed)j(as)f(an)f(in)m(teractiv)m
+(e)j(login)e(shell,)57 b(or)51 b(as)g(a)h(non-in)m(teractiv)m(e)h
+(shell)f(with)f(the)150 1668 y Ft(--login)31 b Fu(option,)k(it)e
+(\014rst)g(attempts)h(to)g(read)f(and)g(execute)h(commands)f(from)g
+Ft(/etc/profile)d Fu(and)150 1777 y Ft(~/.profile)p Fu(,)d(in)i(that)i
+(order.)39 b(The)30 b Ft(--noprofile)c Fu(option)k(ma)m(y)g(b)s(e)f
+(used)g(to)h(inhibit)f(this)h(b)s(eha)m(vior.)150 1887
+y(When)36 b(in)m(v)m(ok)m(ed)i(as)e(an)g(in)m(teractiv)m(e)j(shell)e
+(with)f(the)g(name)h Ft(sh)p Fu(,)g(Bash)f(lo)s(oks)h(for)f(the)h(v)-5
+b(ariable)37 b Ft(ENV)p Fu(,)150 1997 y(expands)29 b(its)i(v)-5
+b(alue)30 b(if)h(it)f(is)g(de\014ned,)g(and)f(uses)h(the)g(expanded)g
+(v)-5 b(alue)30 b(as)h(the)f(name)g(of)g(a)h(\014le)f(to)h(read)150
+2106 y(and)g(execute.)46 b(Since)32 b(a)g(shell)g(in)m(v)m(ok)m(ed)h
+(as)f Ft(sh)f Fu(do)s(es)g(not)h(attempt)h(to)g(read)e(and)g(execute)i
+(commands)150 2216 y(from)39 b(an)m(y)g(other)h(startup)e(\014les,)k
+(the)d Ft(--rcfile)e Fu(option)j(has)f(no)g(e\013ect.)69
+b(A)39 b(non-in)m(teractiv)m(e)j(shell)150 2325 y(in)m(v)m(ok)m(ed)32
+b(with)e(the)g(name)h Ft(sh)f Fu(do)s(es)g(not)g(attempt)i(to)f(read)f
+(an)m(y)h(other)g(startup)e(\014les.)275 2469 y(When)h(in)m(v)m(ok)m
+(ed)h(as)g Ft(sh)p Fu(,)f(Bash)h(en)m(ters)g Fm(posix)e
+Fu(mo)s(de)h(after)h(the)g(startup)f(\014les)g(are)h(read.)150
+2678 y Fk(In)m(v)m(ok)m(ed)40 b(in)h Fg(posix)g Fk(mo)s(de)150
+2824 y Fu(When)28 b(Bash)h(is)g(started)g(in)g Fm(posix)f
+Fu(mo)s(de,)g(as)h(with)g(the)g Ft(--posix)d Fu(command)j(line)g
+(option,)h(it)f(follo)m(ws)150 2934 y(the)24 b Fm(posix)f
+Fu(standard)h(for)f(startup)h(\014les.)38 b(In)24 b(this)g(mo)s(de,)h
+(in)m(teractiv)m(e)i(shells)d(expand)f(the)h Ft(ENV)f
+Fu(v)-5 b(ariable)150 3044 y(and)30 b(commands)g(are)g(read)h(and)e
+(executed)j(from)d(the)i(\014le)f(whose)g(name)h(is)f(the)h(expanded)e
+(v)-5 b(alue.)41 b(No)150 3153 y(other)31 b(startup)f(\014les)g(are)h
+(read.)150 3362 y Fk(In)m(v)m(ok)m(ed)40 b(b)m(y)g(remote)h(shell)h
+(daemon)150 3509 y Fu(Bash)36 b(attempts)h(to)g(determine)f(when)f(it)i
+(is)f(b)s(eing)g(run)e(with)i(its)g(standard)g(input)f(connected)i(to)g
+(a)150 3618 y(net)m(w)m(ork)h(connection,)j(as)c(when)g(executed)h(b)m
+(y)f(the)h(remote)g(shell)g(daemon,)h(usually)e Ft(rshd)p
+Fu(,)h(or)g(the)150 3728 y(secure)c(shell)f(daemon)h
+Ft(sshd)p Fu(.)49 b(If)33 b(Bash)g(determines)h(it)g(is)f(b)s(eing)g
+(run)f(in)i(this)f(fashion,)h(it)g(reads)g(and)150 3837
+y(executes)29 b(commands)e(from)g Ft(~/.bashrc)p Fu(,)e(if)j(that)g
+(\014le)f(exists)h(and)f(is)g(readable.)41 b(It)27 b(will)h(not)f(do)h
+(this)f(if)150 3947 y(in)m(v)m(ok)m(ed)k(as)f Ft(sh)p
+Fu(.)40 b(The)29 b Ft(--norc)f Fu(option)i(ma)m(y)g(b)s(e)f(used)f(to)j
+(inhibit)e(this)g(b)s(eha)m(vior,)h(and)f(the)h Ft(--rcfile)150
+4057 y Fu(option)36 b(ma)m(y)g(b)s(e)e(used)h(to)h(force)g(another)f
+(\014le)h(to)g(b)s(e)e(read,)j(but)d(neither)i Ft(rshd)e
+Fu(nor)h Ft(sshd)f Fu(generally)150 4166 y(in)m(v)m(ok)m(e)e(the)f
+(shell)f(with)h(those)f(options)h(or)f(allo)m(w)i(them)f(to)g(b)s(e)e
+(sp)s(eci\014ed.)150 4375 y Fk(In)m(v)m(ok)m(ed)40 b(with)g(unequal)h
+(e\013ectiv)m(e)e(and)i(real)g Fg(uid/gid)p Fk(s)150
+4522 y Fu(If)34 b(Bash)h(is)g(started)g(with)f(the)h(e\013ectiv)m(e)i
+(user)d(\(group\))h(id)f(not)h(equal)g(to)g(the)g(real)g(user)f
+(\(group\))h(id,)150 4631 y(and)26 b(the)i Ft(-p)e Fu(option)h(is)g
+(not)h(supplied,)e(no)h(startup)g(\014les)g(are)g(read,)h(shell)f
+(functions)g(are)g(not)g(inherited)150 4741 y(from)41
+b(the)g(en)m(vironmen)m(t,)j(the)d Ft(SHELLOPTS)p Fu(,)h
+Ft(BASHOPTS)p Fu(,)g Ft(CDPATH)p Fu(,)g(and)e Ft(GLOBIGNORE)e
+Fu(v)-5 b(ariables,)45 b(if)150 4850 y(they)28 b(app)s(ear)f(in)h(the)g
+(en)m(vironmen)m(t,)i(are)e(ignored,)h(and)e(the)h(e\013ectiv)m(e)j
+(user)c(id)h(is)g(set)g(to)h(the)f(real)h(user)150 4960
+y(id.)62 b(If)38 b(the)f Ft(-p)h Fu(option)g(is)f(supplied)g(at)h(in)m
+(v)m(o)s(cation,)k(the)c(startup)f(b)s(eha)m(vior)h(is)g(the)g(same,)i
+(but)d(the)150 5070 y(e\013ectiv)m(e)c(user)d(id)g(is)g(not)h(reset.)
+150 5324 y Fs(6.3)68 b(In)l(teractiv)l(e)47 b(Shells)p
+eop end
+%%Page: 89 95
+TeXDict begin 89 94 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(89)150 299 y Fk(6.3.1)63
+b(What)40 b(is)h(an)g(In)m(teractiv)m(e)e(Shell?)150
+446 y Fu(An)g(in)m(teractiv)m(e)k(shell)d(is)g(one)g(started)g(without)
+g(non-option)g(argumen)m(ts,)j(unless)c Ft(-s)h Fu(is)f(sp)s
+(eci\014ed,)150 555 y(without)30 b(sp)s(ecifying)g(the)g
+Ft(-c)f Fu(option,)h(and)g(whose)f(input)g(and)g(error)h(output)f(are)h
+(b)s(oth)f(connected)i(to)150 665 y(terminals)g(\(as)g(determined)f(b)m
+(y)g Ft(isatty\(3\))p Fu(\),)e(or)j(one)f(started)h(with)f(the)h
+Ft(-i)f Fu(option.)275 797 y(An)g(in)m(teractiv)m(e)j(shell)d
+(generally)i(reads)e(from)g(and)g(writes)g(to)h(a)g(user's)f(terminal.)
+275 929 y(The)i Ft(-s)g Fu(in)m(v)m(o)s(cation)j(option)f(ma)m(y)f(b)s
+(e)g(used)f(to)i(set)f(the)g(p)s(ositional)h(parameters)f(when)f(an)h
+(in)m(ter-)150 1038 y(activ)m(e)g(shell)d(is)h(started.)150
+1232 y Fk(6.3.2)63 b(Is)41 b(this)g(Shell)g(In)m(teractiv)m(e?)150
+1379 y Fu(T)-8 b(o)30 b(determine)g(within)f(a)h(startup)g(script)f
+(whether)g(or)h(not)g(Bash)g(is)g(running)e(in)m(teractiv)m(ely)-8
+b(,)33 b(test)e(the)150 1489 y(v)-5 b(alue)30 b(of)g(the)f(`)p
+Ft(-)p Fu(')h(sp)s(ecial)g(parameter.)41 b(It)29 b(con)m(tains)i
+Ft(i)e Fu(when)g(the)g(shell)h(is)f(in)m(teractiv)m(e.)44
+b(F)-8 b(or)30 b(example:)390 1621 y Ft(case)47 b("$-")f(in)390
+1730 y(*i*\))h(echo)f(This)h(shell)f(is)h(interactive)e(;;)390
+1840 y(*\))i(echo)g(This)f(shell)h(is)g(not)g(interactive)e(;;)390
+1949 y(esac)275 2081 y Fu(Alternativ)m(ely)-8 b(,)28
+b(startup)23 b(scripts)h(ma)m(y)g(examine)g(the)g(v)-5
+b(ariable)25 b Ft(PS1)p Fu(;)g(it)g(is)e(unset)h(in)f(non-in)m
+(teractiv)m(e)150 2191 y(shells,)31 b(and)e(set)i(in)f(in)m(teractiv)m
+(e)k(shells.)40 b(Th)m(us:)390 2323 y Ft(if)47 b([)h(-z)f("$PS1")f(];)h
+(then)772 2432 y(echo)f(This)h(shell)f(is)i(not)f(interactive)390
+2542 y(else)772 2651 y(echo)f(This)h(shell)f(is)i(interactive)390
+2761 y(fi)150 2955 y Fk(6.3.3)63 b(In)m(teractiv)m(e)38
+b(Shell)k(Beha)m(vior)150 3102 y Fu(When)30 b(the)h(shell)f(is)h
+(running)d(in)m(teractiv)m(ely)-8 b(,)34 b(it)d(c)m(hanges)h(its)f(b)s
+(eha)m(vior)f(in)g(sev)m(eral)i(w)m(a)m(ys.)199 3234
+y(1.)61 b(Startup)37 b(\014les)g(are)h(read)f(and)g(executed)h(as)f
+(describ)s(ed)g(in)g(Section)h(6.2)g([Bash)g(Startup)e(Files],)330
+3343 y(page)31 b(87.)199 3475 y(2.)61 b(Job)32 b(Con)m(trol)h(\(see)g
+(Chapter)e(7)i([Job)f(Con)m(trol],)i(page)f(103\))h(is)e(enabled)g(b)m
+(y)g(default.)46 b(When)32 b(job)330 3585 y(con)m(trol)j(is)f(in)f
+(e\013ect,)k(Bash)d(ignores)g(the)g(k)m(eyb)s(oard-generated)h(job)e
+(con)m(trol)i(signals)g Ft(SIGTTIN)p Fu(,)330 3694 y
+Ft(SIGTTOU)p Fu(,)29 b(and)g Ft(SIGTSTP)p Fu(.)199 3826
+y(3.)61 b(Bash)25 b(expands)e(and)h(displa)m(ys)h Ft(PS1)e
+Fu(b)s(efore)h(reading)h(the)f(\014rst)g(line)h(of)f(a)h(command,)h
+(and)e(expands)330 3936 y(and)33 b(displa)m(ys)h Ft(PS2)f
+Fu(b)s(efore)h(reading)g(the)g(second)g(and)f(subsequen)m(t)g(lines)i
+(of)f(a)g(m)m(ulti-line)h(com-)330 4045 y(mand.)42 b(Bash)31
+b(expands)f(and)h(displa)m(ys)g Ft(PS0)f Fu(after)h(it)h(reads)f(a)g
+(command)g(but)f(b)s(efore)h(executing)330 4155 y(it.)62
+b(See)38 b(Section)g(6.9)h([Con)m(trolling)g(the)e(Prompt],)j(page)e
+(97,)i(for)d(a)h(complete)h(list)f(of)g(prompt)330 4265
+y(string)30 b(escap)s(e)h(sequences.)199 4396 y(4.)61
+b(Bash)26 b(executes)i(the)e(v)-5 b(alue)27 b(of)f(the)h
+Ft(PROMPT_COMMAND)22 b Fu(v)-5 b(ariable)27 b(as)g(a)f(command)g(b)s
+(efore)g(prin)m(ting)330 4506 y(the)31 b(primary)e(prompt,)h
+Ft($PS1)f Fu(\(see)i(Section)g(5.2)h([Bash)f(V)-8 b(ariables],)32
+b(page)f(73\).)199 4638 y(5.)61 b(Readline)27 b(\(see)g(Chapter)e(8)h
+([Command)g(Line)g(Editing],)h(page)g(107\))g(is)f(used)g(to)g(read)g
+(commands)330 4748 y(from)k(the)g(user's)g(terminal.)199
+4879 y(6.)61 b(Bash)36 b(insp)s(ects)g(the)h(v)-5 b(alue)37
+b(of)f(the)g Ft(ignoreeof)e Fu(option)j(to)g Ft(set)29
+b(-o)36 b Fu(instead)h(of)f(exiting)i(imme-)330 4989
+y(diately)f(when)e(it)i(receiv)m(es)h(an)e Ft(EOF)f Fu(on)h(its)g
+(standard)f(input)g(when)h(reading)g(a)g(command)g(\(see)330
+5099 y(Section)31 b(4.3.1)h([The)e(Set)h(Builtin],)g(page)g(61\).)199
+5230 y(7.)61 b(Command)43 b(history)h(\(see)h(Section)g(9.1)g([Bash)f
+(History)h(F)-8 b(acilities],)51 b(page)45 b(141\))h(and)d(history)330
+5340 y(expansion)h(\(see)i(Section)f(9.3)h([History)g(In)m(teraction],)
+k(page)45 b(143\))h(are)f(enabled)g(b)m(y)f(default.)p
+eop end
+%%Page: 90 96
+TeXDict begin 90 95 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(90)330 299 y(Bash)28
+b(will)g(sa)m(v)m(e)h(the)f(command)f(history)h(to)g(the)g(\014le)g
+(named)f(b)m(y)h Ft($HISTFILE)d Fu(when)h(a)i(shell)g(with)330
+408 y(history)i(enabled)h(exits.)199 541 y(8.)61 b(Alias)31
+b(expansion)g(\(see)g(Section)g(6.6)g([Aliases],)i(page)e(93\))h(is)e
+(p)s(erformed)f(b)m(y)h(default.)199 674 y(9.)61 b(In)24
+b(the)g(absence)h(of)f(an)m(y)h(traps,)g(Bash)g(ignores)f
+Ft(SIGTERM)f Fu(\(see)i(Section)g(3.7.6)h([Signals],)g(page)f(41\).)154
+807 y(10.)61 b(In)29 b(the)g(absence)h(of)g(an)m(y)g(traps,)f
+Ft(SIGINT)f Fu(is)h(caugh)m(t)i(and)e(handled)f(\(see)j(Section)f
+(3.7.6)h([Signals],)330 916 y(page)g(41\).)42 b Ft(SIGINT)29
+b Fu(will)h(in)m(terrupt)g(some)h(shell)g(builtins.)154
+1049 y(11.)61 b(An)40 b(in)m(teractiv)m(e)j(login)e(shell)g(sends)e(a)i
+Ft(SIGHUP)d Fu(to)j(all)g(jobs)f(on)g(exit)h(if)g(the)f
+Ft(huponexit)e Fu(shell)330 1159 y(option)31 b(has)f(b)s(een)g(enabled)
+g(\(see)h(Section)g(3.7.6)i([Signals],)e(page)g(41\).)154
+1291 y(12.)61 b(The)29 b Ft(-n)g Fu(in)m(v)m(o)s(cation)j(option)e(is)g
+(ignored,)g(and)f(`)p Ft(set)h(-n)p Fu(')f(has)h(no)f(e\013ect)j(\(see)
+e(Section)h(4.3.1)g([The)330 1401 y(Set)g(Builtin],)g(page)g(61\).)154
+1534 y(13.)61 b(Bash)32 b(will)g(c)m(hec)m(k)i(for)e(mail)g(p)s(erio)s
+(dically)-8 b(,)34 b(dep)s(ending)c(on)i(the)g(v)-5 b(alues)32
+b(of)g(the)h Ft(MAIL)p Fu(,)e Ft(MAILPATH)p Fu(,)330
+1643 y(and)f Ft(MAILCHECK)e Fu(shell)i(v)-5 b(ariables)31
+b(\(see)h(Section)f(5.2)g([Bash)g(V)-8 b(ariables],)32
+b(page)f(73\).)154 1776 y(14.)61 b(Expansion)32 b(errors)h(due)f(to)i
+(references)f(to)h(un)m(b)s(ound)c(shell)j(v)-5 b(ariables)34
+b(after)g(`)p Ft(set)29 b(-u)p Fu(')k(has)g(b)s(een)330
+1886 y(enabled)d(will)h(not)g(cause)g(the)f(shell)h(to)g(exit)g(\(see)g
+(Section)h(4.3.1)g([The)e(Set)h(Builtin],)g(page)g(61\).)154
+2018 y(15.)61 b(The)48 b(shell)h(will)f(not)h(exit)g(on)g(expansion)f
+(errors)g(caused)g(b)m(y)h Fr(v)-5 b(ar)54 b Fu(b)s(eing)48
+b(unset)g(or)h(n)m(ull)f(in)330 2128 y Ft(${)p Fj(var)p
+Ft(:?)p Fj(word)p Ft(})27 b Fu(expansions)j(\(see)h(Section)h(3.5.3)g
+([Shell)e(P)m(arameter)i(Expansion],)e(page)h(24\).)154
+2261 y(16.)61 b(Redirection)31 b(errors)f(encoun)m(tered)h(b)m(y)f
+(shell)h(builtins)f(will)g(not)h(cause)g(the)f(shell)h(to)g(exit.)154
+2393 y(17.)61 b(When)26 b(running)f(in)i Fm(posix)e Fu(mo)s(de,)j(a)f
+(sp)s(ecial)g(builtin)f(returning)g(an)g(error)h(status)g(will)g(not)f
+(cause)330 2503 y(the)31 b(shell)f(to)h(exit)h(\(see)f(Section)g(6.11)h
+([Bash)f(POSIX)e(Mo)s(de],)i(page)g(99\).)154 2636 y(18.)61
+b(A)34 b(failed)g Ft(exec)f Fu(will)h(not)g(cause)g(the)g(shell)g(to)g
+(exit)h(\(see)f(Section)h(4.1)g([Bourne)f(Shell)f(Builtins],)330
+2745 y(page)e(43\).)154 2878 y(19.)61 b(P)m(arser)31
+b(syn)m(tax)f(errors)g(will)h(not)g(cause)g(the)f(shell)h(to)g(exit.)
+154 3011 y(20.)61 b(Simple)21 b(sp)s(elling)h(correction)g(for)g
+(directory)g(argumen)m(ts)f(to)i(the)e Ft(cd)g Fu(builtin)g(is)h
+(enabled)f(b)m(y)h(default)330 3120 y(\(see)35 b(the)g(description)f
+(of)h(the)f Ft(cdspell)f Fu(option)h(to)i(the)e Ft(shopt)f
+Fu(builtin)h(in)g(Section)h(4.3.2)h([The)330 3230 y(Shopt)30
+b(Builtin],)h(page)g(65\).)154 3363 y(21.)61 b(The)42
+b(shell)h(will)g(c)m(hec)m(k)h(the)f(v)-5 b(alue)43 b(of)f(the)h
+Ft(TMOUT)e Fu(v)-5 b(ariable)44 b(and)e(exit)h(if)g(a)g(command)f(is)h
+(not)330 3472 y(read)30 b(within)g(the)g(sp)s(eci\014ed)f(n)m(um)m(b)s
+(er)g(of)i(seconds)f(after)g(prin)m(ting)g Ft($PS1)f
+Fu(\(see)i(Section)g(5.2)h([Bash)330 3582 y(V)-8 b(ariables],)32
+b(page)f(73\).)150 3819 y Fs(6.4)68 b(Bash)45 b(Conditional)h
+(Expressions)150 3979 y Fu(Conditional)26 b(expressions)g(are)g(used)f
+(b)m(y)g(the)h Ft([[)f Fu(comp)s(ound)g(command)g(and)g(the)h
+Ft(test)f Fu(and)g Ft([)g Fu(builtin)150 4088 y(commands.)50
+b(The)33 b Ft(test)g Fu(and)f Ft([)i Fu(commands)f(determine)h(their)f
+(b)s(eha)m(vior)h(based)f(on)h(the)f(n)m(um)m(b)s(er)g(of)150
+4198 y(argumen)m(ts;)28 b(see)f(the)f(descriptions)g(of)g(those)g
+(commands)g(for)g(an)m(y)g(other)h(command-sp)s(eci\014c)e(actions.)275
+4331 y(Expressions)d(ma)m(y)h(b)s(e)g(unary)f(or)h(binary)-8
+b(,)24 b(and)f(are)g(formed)g(from)g(the)g(follo)m(wing)h(primaries.)38
+b(Unary)150 4440 y(expressions)c(are)g(often)g(used)g(to)g(examine)h
+(the)f(status)g(of)h(a)f(\014le.)52 b(There)33 b(are)h(string)g(op)s
+(erators)h(and)150 4550 y(n)m(umeric)c(comparison)g(op)s(erators)h(as)f
+(w)m(ell.)44 b(Bash)31 b(handles)g(sev)m(eral)h(\014lenames)g(sp)s
+(ecially)g(when)e(they)150 4659 y(are)35 b(used)e(in)i(expressions.)52
+b(If)34 b(the)h(op)s(erating)f(system)h(on)f(whic)m(h)g(Bash)h(is)f
+(running)f(pro)m(vides)h(these)150 4769 y(sp)s(ecial)22
+b(\014les,)i(Bash)e(will)g(use)f(them;)k(otherwise)d(it)g(will)g(em)m
+(ulate)h(them)f(in)m(ternally)h(with)e(this)h(b)s(eha)m(vior:)150
+4878 y(If)27 b(the)g Fr(\014le)33 b Fu(argumen)m(t)27
+b(to)h(one)g(of)f(the)h(primaries)f(is)g(of)h(the)f(form)g
+Ft(/dev/fd/)p Fj(N)p Fu(,)e(then)i(\014le)h(descriptor)f
+Fr(N)150 4988 y Fu(is)g(c)m(hec)m(k)m(ed.)42 b(If)26
+b(the)h Fr(\014le)32 b Fu(argumen)m(t)c(to)f(one)h(of)f(the)g
+(primaries)f(is)h(one)h(of)f Ft(/dev/stdin)p Fu(,)e Ft(/dev/stdout)p
+Fu(,)150 5098 y(or)30 b Ft(/dev/stderr)p Fu(,)e(\014le)i(descriptor)h
+(0,)g(1,)g(or)f(2,)h(resp)s(ectiv)m(ely)-8 b(,)32 b(is)f(c)m(hec)m(k)m
+(ed.)275 5230 y(When)37 b(used)g(with)g Ft([[)p Fu(,)i(the)f(`)p
+Ft(<)p Fu(')g(and)f(`)p Ft(>)p Fu(')h(op)s(erators)g(sort)g
+(lexicographically)i(using)d(the)h(curren)m(t)150 5340
+y(lo)s(cale.)k(The)30 b Ft(test)f Fu(command)i(uses)f(ASCI)s(I)e
+(ordering.)p eop end
+%%Page: 91 97
+TeXDict begin 91 96 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(91)275 299 y(Unless)44
+b(otherwise)h(sp)s(eci\014ed,)j(primaries)c(that)h(op)s(erate)g(on)g
+(\014les)f(follo)m(w)i(sym)m(b)s(olic)f(links)g(and)150
+408 y(op)s(erate)31 b(on)f(the)h(target)h(of)e(the)h(link,)f(rather)h
+(than)f(the)g(link)h(itself.)150 564 y Ft(-a)f Fj(file)162
+b Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36 b Fu(exists.)150
+720 y Ft(-b)30 b Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+Fr(\014le)36 b Fu(exists)31 b(and)f(is)g(a)h(blo)s(c)m(k)g(sp)s(ecial)g
+(\014le.)150 876 y Ft(-c)f Fj(file)162 b Fu(T)-8 b(rue)30
+b(if)g Fr(\014le)36 b Fu(exists)31 b(and)f(is)g(a)h(c)m(haracter)h(sp)s
+(ecial)f(\014le.)150 1032 y Ft(-d)f Fj(file)162 b Fu(T)-8
+b(rue)30 b(if)g Fr(\014le)36 b Fu(exists)31 b(and)f(is)g(a)h(directory)
+-8 b(.)150 1188 y Ft(-e)30 b Fj(file)162 b Fu(T)-8 b(rue)30
+b(if)g Fr(\014le)36 b Fu(exists.)150 1344 y Ft(-f)30
+b Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36
+b Fu(exists)31 b(and)f(is)g(a)h(regular)f(\014le.)150
+1500 y Ft(-g)g Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+Fr(\014le)36 b Fu(exists)31 b(and)f(its)g(set-group-id)h(bit)g(is)f
+(set.)150 1656 y Ft(-h)g Fj(file)162 b Fu(T)-8 b(rue)30
+b(if)g Fr(\014le)36 b Fu(exists)31 b(and)f(is)g(a)h(sym)m(b)s(olic)g
+(link.)150 1812 y Ft(-k)f Fj(file)162 b Fu(T)-8 b(rue)30
+b(if)g Fr(\014le)36 b Fu(exists)31 b(and)f(its)g Ft(")p
+Fu(stic)m(ky)p Ft(")h Fu(bit)g(is)f(set.)150 1968 y Ft(-p)g
+Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36 b
+Fu(exists)31 b(and)f(is)g(a)h(named)f(pip)s(e)f(\(FIF)m(O\).)150
+2124 y Ft(-r)h Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+Fr(\014le)36 b Fu(exists)31 b(and)f(is)g(readable.)150
+2280 y Ft(-s)g Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+Fr(\014le)36 b Fu(exists)31 b(and)f(has)g(a)g(size)i(greater)f(than)f
+(zero.)150 2436 y Ft(-t)g Fj(fd)258 b Fu(T)-8 b(rue)30
+b(if)g(\014le)h(descriptor)f Fr(fd)j Fu(is)e(op)s(en)e(and)h(refers)g
+(to)h(a)g(terminal.)150 2592 y Ft(-u)f Fj(file)162 b
+Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36 b Fu(exists)31 b(and)f(its)g
+(set-user-id)h(bit)f(is)h(set.)150 2748 y Ft(-w)f Fj(file)162
+b Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36 b Fu(exists)31
+b(and)f(is)g(writable.)150 2904 y Ft(-x)g Fj(file)162
+b Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36 b Fu(exists)31
+b(and)f(is)g(executable.)150 3060 y Ft(-G)g Fj(file)162
+b Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36 b Fu(exists)31
+b(and)f(is)g(o)m(wned)g(b)m(y)h(the)f(e\013ectiv)m(e)j(group)d(id.)150
+3216 y Ft(-L)g Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+Fr(\014le)36 b Fu(exists)31 b(and)f(is)g(a)h(sym)m(b)s(olic)g(link.)150
+3372 y Ft(-N)f Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+Fr(\014le)36 b Fu(exists)31 b(and)f(has)g(b)s(een)f(mo)s(di\014ed)h
+(since)g(it)h(w)m(as)g(last)g(read.)150 3528 y Ft(-O)f
+Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36 b
+Fu(exists)31 b(and)f(is)g(o)m(wned)g(b)m(y)h(the)f(e\013ectiv)m(e)j
+(user)d(id.)150 3683 y Ft(-S)g Fj(file)162 b Fu(T)-8
+b(rue)30 b(if)g Fr(\014le)36 b Fu(exists)31 b(and)f(is)g(a)h(so)s(c)m
+(k)m(et.)150 3839 y Fj(file1)e Ft(-ef)g Fj(file2)630
+3949 y Fu(T)-8 b(rue)30 b(if)g Fr(\014le1)38 b Fu(and)30
+b Fr(\014le2)38 b Fu(refer)30 b(to)i(the)e(same)h(device)g(and)f(ino)s
+(de)g(n)m(um)m(b)s(ers.)150 4105 y Fj(file1)f Ft(-nt)g
+Fj(file2)630 4215 y Fu(T)-8 b(rue)23 b(if)h Fr(\014le1)32
+b Fu(is)24 b(new)m(er)g(\(according)h(to)g(mo)s(di\014cation)f(date\))h
+(than)f Fr(\014le2)p Fu(,)i(or)e(if)g Fr(\014le1)31 b
+Fu(exists)630 4324 y(and)f Fr(\014le2)38 b Fu(do)s(es)30
+b(not.)150 4480 y Fj(file1)f Ft(-ot)g Fj(file2)630 4590
+y Fu(T)-8 b(rue)30 b(if)g Fr(\014le1)38 b Fu(is)31 b(older)f(than)g
+Fr(\014le2)p Fu(,)i(or)e(if)g Fr(\014le2)38 b Fu(exists)31
+b(and)f Fr(\014le1)38 b Fu(do)s(es)30 b(not.)150 4746
+y Ft(-o)g Fj(optname)630 4855 y Fu(T)-8 b(rue)41 b(if)g(the)g(shell)h
+(option)f Fr(optname)47 b Fu(is)41 b(enabled.)73 b(The)41
+b(list)h(of)f(options)h(app)s(ears)e(in)630 4965 y(the)33
+b(description)h(of)f(the)g Ft(-o)g Fu(option)g(to)h(the)g
+Ft(set)e Fu(builtin)h(\(see)h(Section)g(4.3.1)h([The)e(Set)630
+5074 y(Builtin],)e(page)g(61\).)150 5230 y Ft(-v)f Fj(varname)630
+5340 y Fu(T)-8 b(rue)30 b(if)g(the)h(shell)f(v)-5 b(ariable)32
+b Fr(v)-5 b(arname)35 b Fu(is)30 b(set)h(\(has)g(b)s(een)e(assigned)i
+(a)g(v)-5 b(alue\).)p eop end
+%%Page: 92 98
+TeXDict begin 92 97 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(92)150 299 y Ft(-R)30
+b Fj(varname)630 408 y Fu(T)-8 b(rue)30 b(if)g(the)h(shell)f(v)-5
+b(ariable)32 b Fr(v)-5 b(arname)35 b Fu(is)30 b(set)h(and)f(is)h(a)f
+(name)h(reference.)150 571 y Ft(-z)f Fj(string)66 b Fu(T)-8
+b(rue)30 b(if)g(the)h(length)g(of)f Fr(string)38 b Fu(is)31
+b(zero.)150 734 y Ft(-n)f Fj(string)150 844 y(string)192
+b Fu(T)-8 b(rue)30 b(if)g(the)h(length)g(of)f Fr(string)38
+b Fu(is)31 b(non-zero.)150 1006 y Fj(string1)d Ft(==)i
+Fj(string2)150 1116 y(string1)e Ft(=)i Fj(string2)630
+1225 y Fu(T)-8 b(rue)43 b(if)h(the)g(strings)g(are)g(equal.)82
+b(When)44 b(used)f(with)g(the)h Ft([[)g Fu(command,)j(this)d(p)s(er-)
+630 1335 y(forms)d(pattern)g(matc)m(hing)i(as)f(describ)s(ed)e(ab)s(o)m
+(v)m(e)j(\(see)f(Section)g(3.2.4.2)i([Conditional)630
+1445 y(Constructs],)30 b(page)h(11\).)630 1581 y(`)p
+Ft(=)p Fu(')g(should)e(b)s(e)h(used)f(with)h(the)h Ft(test)e
+Fu(command)h(for)g Fm(posix)g Fu(conformance.)150 1743
+y Fj(string1)e Ft(!=)i Fj(string2)630 1853 y Fu(T)-8
+b(rue)30 b(if)g(the)h(strings)f(are)h(not)f(equal.)150
+2016 y Fj(string1)e Ft(<)i Fj(string2)630 2125 y Fu(T)-8
+b(rue)30 b(if)g Fr(string1)38 b Fu(sorts)31 b(b)s(efore)f
+Fr(string2)38 b Fu(lexicographically)-8 b(.)150 2288
+y Fj(string1)28 b Ft(>)i Fj(string2)630 2398 y Fu(T)-8
+b(rue)30 b(if)g Fr(string1)38 b Fu(sorts)31 b(after)g
+Fr(string2)38 b Fu(lexicographically)-8 b(.)150 2560
+y Fj(arg1)29 b Ft(OP)h Fj(arg2)630 2670 y Ft(OP)j Fu(is)h(one)g(of)h(`)
+p Ft(-eq)p Fu(',)f(`)p Ft(-ne)p Fu(',)h(`)p Ft(-lt)p
+Fu(',)g(`)p Ft(-le)p Fu(',)f(`)p Ft(-gt)p Fu(',)h(or)f(`)p
+Ft(-ge)p Fu('.)51 b(These)34 b(arithmetic)h(binary)630
+2780 y(op)s(erators)h(return)e(true)i(if)f Fr(arg1)44
+b Fu(is)36 b(equal)g(to,)i(not)e(equal)g(to,)i(less)e(than,)h(less)f
+(than)f(or)630 2889 y(equal)29 b(to,)g(greater)h(than,)e(or)g(greater)i
+(than)d(or)i(equal)f(to)h Fr(arg2)p Fu(,)h(resp)s(ectiv)m(ely)-8
+b(.)42 b Fr(Arg1)36 b Fu(and)630 2999 y Fr(arg2)41 b
+Fu(ma)m(y)34 b(b)s(e)f(p)s(ositiv)m(e)h(or)f(negativ)m(e)j(in)m
+(tegers.)50 b(When)33 b(used)g(with)g(the)g Ft([[)g Fu(command,)630
+3108 y Fr(Arg1)41 b Fu(and)33 b Fr(Arg2)41 b Fu(are)33
+b(ev)-5 b(aluated)35 b(as)e(arithmetic)i(expressions)d(\(see)j(Section)
+f(6.5)g([Shell)630 3218 y(Arithmetic],)e(page)f(92\).)150
+3464 y Fs(6.5)68 b(Shell)45 b(Arithmetic)150 3623 y Fu(The)26
+b(shell)h(allo)m(ws)h(arithmetic)f(expressions)g(to)g(b)s(e)f(ev)-5
+b(aluated,)29 b(as)d(one)h(of)g(the)g(shell)f(expansions)h(or)f(b)m(y)
+150 3733 y(using)h(the)g Ft(\(\()g Fu(comp)s(ound)e(command,)j(the)g
+Ft(let)e Fu(builtin,)i(or)f(the)g Ft(-i)g Fu(option)h(to)f(the)h
+Ft(declare)d Fu(builtin.)275 3870 y(Ev)-5 b(aluation)27
+b(is)g(done)f(in)g(\014xed-width)g(in)m(tegers)i(with)e(no)h(c)m(hec)m
+(k)h(for)e(o)m(v)m(er\015o)m(w,)j(though)d(division)h(b)m(y)150
+3980 y(0)g(is)g(trapp)s(ed)f(and)h(\015agged)g(as)h(an)f(error.)39
+b(The)26 b(op)s(erators)h(and)g(their)g(precedence,)h(asso)s(ciativit)m
+(y)-8 b(,)32 b(and)150 4090 y(v)-5 b(alues)35 b(are)h(the)f(same)g(as)h
+(in)e(the)h(C)g(language.)56 b(The)35 b(follo)m(wing)h(list)g(of)f(op)s
+(erators)g(is)g(group)s(ed)f(in)m(to)150 4199 y(lev)m(els)27
+b(of)f(equal-precedence)i(op)s(erators.)39 b(The)25 b(lev)m(els)j(are)e
+(listed)h(in)e(order)h(of)g(decreasing)g(precedence.)150
+4364 y Fj(id)p Ft(++)j Fj(id)p Ft(--)67 b Fu(v)-5 b(ariable)31
+b(p)s(ost-incremen)m(t)g(and)f(p)s(ost-decremen)m(t)150
+4526 y Ft(++)p Fj(id)f Ft(--)p Fj(id)67 b Fu(v)-5 b(ariable)31
+b(pre-incremen)m(t)g(and)f(pre-decremen)m(t)150 4689
+y Ft(-)g(+)354 b Fu(unary)29 b(min)m(us)h(and)g(plus)150
+4852 y Ft(!)g(~)354 b Fu(logical)33 b(and)d(bit)m(wise)h(negation)150
+5015 y Ft(**)384 b Fu(exp)s(onen)m(tiation)150 5177 y
+Ft(*)30 b(/)g(\045)276 b Fu(m)m(ultiplication,)33 b(division,)d
+(remainder)150 5340 y Ft(+)g(-)354 b Fu(addition,)31
+b(subtraction)p eop end
+%%Page: 93 99
+TeXDict begin 93 98 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(93)150 299 y Ft(<<)30
+b(>>)258 b Fu(left)31 b(and)f(righ)m(t)h(bit)m(wise)g(shifts)150
+456 y Ft(<=)f(>=)g(<)g(>)102 b Fu(comparison)150 612
+y Ft(==)30 b(!=)258 b Fu(equalit)m(y)32 b(and)e(inequalit)m(y)150
+769 y Ft(&)432 b Fu(bit)m(wise)31 b(AND)150 926 y Ft(^)432
+b Fu(bit)m(wise)31 b(exclusiv)m(e)h(OR)150 1082 y Ft(|)432
+b Fu(bit)m(wise)31 b(OR)150 1239 y Ft(&&)384 b Fu(logical)33
+b(AND)150 1396 y Ft(||)384 b Fu(logical)33 b(OR)150 1552
+y Ft(expr)c(?)h(expr)f(:)h(expr)630 1662 y Fu(conditional)i(op)s
+(erator)150 1819 y Ft(=)e(*=)g(/=)g(\045=)f(+=)h(-=)g(<<=)f(>>=)h(&=)g
+(^=)f(|=)630 1928 y Fu(assignmen)m(t)150 2085 y Ft(expr1)g(,)h(expr2)
+630 2195 y Fu(comma)275 2351 y(Shell)38 b(v)-5 b(ariables)39
+b(are)g(allo)m(w)m(ed)i(as)e(op)s(erands;)i(parameter)e(expansion)g(is)
+f(p)s(erformed)g(b)s(efore)g(the)150 2461 y(expression)g(is)g(ev)-5
+b(aluated.)66 b(Within)38 b(an)h(expression,)h(shell)e(v)-5
+b(ariables)39 b(ma)m(y)g(also)g(b)s(e)f(referenced)g(b)m(y)150
+2570 y(name)31 b(without)f(using)g(the)h(parameter)g(expansion)f(syn)m
+(tax.)42 b(A)31 b(shell)f(v)-5 b(ariable)32 b(that)f(is)f(n)m(ull)h(or)
+f(unset)150 2680 y(ev)-5 b(aluates)41 b(to)f(0)g(when)e(referenced)h(b)
+m(y)g(name)h(without)f(using)g(the)g(parameter)h(expansion)f(syn)m
+(tax.)150 2790 y(The)c(v)-5 b(alue)37 b(of)f(a)h(v)-5
+b(ariable)36 b(is)g(ev)-5 b(aluated)38 b(as)e(an)g(arithmetic)h
+(expression)f(when)f(it)h(is)g(referenced,)i(or)150 2899
+y(when)31 b(a)i(v)-5 b(ariable)33 b(whic)m(h)f(has)g(b)s(een)f(giv)m
+(en)j(the)e Fr(in)m(teger)40 b Fu(attribute)33 b(using)f(`)p
+Ft(declare)d(-i)p Fu(')i(is)i(assigned)150 3009 y(a)j(v)-5
+b(alue.)58 b(A)36 b(n)m(ull)f(v)-5 b(alue)37 b(ev)-5
+b(aluates)37 b(to)g(0.)57 b(A)36 b(shell)g(v)-5 b(ariable)37
+b(need)e(not)h(ha)m(v)m(e)h(its)f Fr(in)m(teger)44 b
+Fu(attribute)150 3118 y(turned)29 b(on)h(to)i(b)s(e)d(used)h(in)g(an)g
+(expression.)275 3252 y(Constan)m(ts)41 b(with)g(a)h(leading)f(0)h(are)
+g(in)m(terpreted)f(as)g(o)s(ctal)i(n)m(um)m(b)s(ers.)72
+b(A)41 b(leading)h(`)p Ft(0x)p Fu(')f(or)g(`)p Ft(0X)p
+Fu(')150 3361 y(denotes)30 b(hexadecimal.)42 b(Otherwise,)30
+b(n)m(um)m(b)s(ers)f(tak)m(e)i(the)f(form)g([)p Fr(base)5
+b Ft(#)p Fu(])p Fr(n)p Fu(,)30 b(where)f(the)i(optional)g
+Fr(base)150 3471 y Fu(is)e(a)h(decimal)g(n)m(um)m(b)s(er)e(b)s(et)m(w)m
+(een)h(2)h(and)e(64)i(represen)m(ting)g(the)f(arithmetic)i(base,)e(and)
+g Fr(n)g Fu(is)g(a)g(n)m(um)m(b)s(er)150 3580 y(in)c(that)g(base.)39
+b(If)25 b Fr(base)5 b Ft(#)24 b Fu(is)h(omitted,)j(then)c(base)h(10)h
+(is)f(used.)38 b(When)25 b(sp)s(ecifying)f Fr(n)p Fu(,)i(the)f(digits)h
+(greater)150 3690 y(than)33 b(9)h(are)g(represen)m(ted)g(b)m(y)f(the)h
+(lo)m(w)m(ercase)i(letters,)g(the)d(upp)s(ercase)g(letters,)j(`)p
+Ft(@)p Fu(',)e(and)f(`)p Ft(_)p Fu(',)i(in)e(that)150
+3800 y(order.)69 b(If)39 b Fr(base)45 b Fu(is)40 b(less)g(than)g(or)f
+(equal)i(to)f(36,)k(lo)m(w)m(ercase)e(and)d(upp)s(ercase)g(letters)i
+(ma)m(y)g(b)s(e)e(used)150 3909 y(in)m(terc)m(hangeably)32
+b(to)f(represen)m(t)g(n)m(um)m(b)s(ers)e(b)s(et)m(w)m(een)i(10)g(and)f
+(35.)275 4042 y(Op)s(erators)44 b(are)h(ev)-5 b(aluated)46
+b(in)f(order)f(of)h(precedence.)85 b(Sub-expressions)44
+b(in)g(paren)m(theses)i(are)150 4152 y(ev)-5 b(aluated)32
+b(\014rst)d(and)h(ma)m(y)h(o)m(v)m(erride)g(the)g(precedence)g(rules)f
+(ab)s(o)m(v)m(e.)150 4390 y Fs(6.6)68 b(Aliases)150 4549
+y Fr(Aliases)41 b Fu(allo)m(w)d(a)f(string)f(to)h(b)s(e)f(substituted)g
+(for)g(a)g(w)m(ord)g(when)g(it)h(is)f(used)f(as)i(the)g(\014rst)e(w)m
+(ord)h(of)h(a)150 4659 y(simple)32 b(command.)45 b(The)31
+b(shell)i(main)m(tains)f(a)h(list)f(of)g(aliases)i(that)e(ma)m(y)h(b)s
+(e)e(set)h(and)g(unset)f(with)h(the)150 4768 y Ft(alias)d
+Fu(and)h Ft(unalias)e Fu(builtin)i(commands.)275 4902
+y(The)f(\014rst)f(w)m(ord)i(of)f(eac)m(h)i(simple)f(command,)g(if)f
+(unquoted,)g(is)h(c)m(hec)m(k)m(ed)h(to)g(see)f(if)g(it)g(has)f(an)g
+(alias.)150 5011 y(If)24 b(so,)i(that)g(w)m(ord)e(is)h(replaced)g(b)m
+(y)f(the)h(text)h(of)e(the)h(alias.)40 b(The)24 b(c)m(haracters)i(`)p
+Ft(/)p Fu(',)h(`)p Ft($)p Fu(',)f(`)p Ft(`)p Fu(',)g(`)p
+Ft(=)p Fu(')f(and)f(an)m(y)h(of)150 5121 y(the)e(shell)g(metac)m
+(haracters)i(or)e(quoting)g(c)m(haracters)h(listed)g(ab)s(o)m(v)m(e)g
+(ma)m(y)f(not)g(app)s(ear)f(in)h(an)g(alias)h(name.)150
+5230 y(The)e(replacemen)m(t)h(text)g(ma)m(y)g(con)m(tain)h(an)m(y)e(v)
+-5 b(alid)23 b(shell)f(input,)h(including)f(shell)g(metac)m(haracters.)
+40 b(The)150 5340 y(\014rst)35 b(w)m(ord)g(of)h(the)g(replacemen)m(t)i
+(text)e(is)g(tested)h(for)e(aliases,)k(but)c(a)h(w)m(ord)g(that)g(is)g
+(iden)m(tical)i(to)e(an)p eop end
+%%Page: 94 100
+TeXDict begin 94 99 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(94)150 299 y(alias)32
+b(b)s(eing)f(expanded)f(is)h(not)g(expanded)f(a)h(second)g(time.)43
+b(This)30 b(means)h(that)g(one)g(ma)m(y)h(alias)g Ft(ls)e
+Fu(to)150 408 y Ft("ls)f(-F")p Fu(,)f(for)f(instance,)i(and)d(Bash)i
+(do)s(es)f(not)h(try)f(to)h(recursiv)m(ely)g(expand)e(the)i(replacemen)
+m(t)h(text.)40 b(If)150 518 y(the)31 b(last)h(c)m(haracter)h(of)e(the)h
+(alias)g(v)-5 b(alue)31 b(is)h(a)f Fr(blank)p Fu(,)g(then)g(the)g(next)
+h(command)e(w)m(ord)h(follo)m(wing)i(the)150 628 y(alias)f(is)e(also)h
+(c)m(hec)m(k)m(ed)i(for)d(alias)h(expansion.)275 770
+y(Aliases)e(are)f(created)i(and)d(listed)i(with)f(the)g
+Ft(alias)f Fu(command,)h(and)g(remo)m(v)m(ed)h(with)f(the)g
+Ft(unalias)150 880 y Fu(command.)275 1023 y(There)44
+b(is)h(no)g(mec)m(hanism)g(for)f(using)h(argumen)m(ts)g(in)f(the)h
+(replacemen)m(t)i(text,)i(as)d(in)e Ft(csh)p Fu(.)83
+b(If)150 1132 y(argumen)m(ts)37 b(are)h(needed,)g(a)g(shell)f(function)
+f(should)g(b)s(e)h(used)f(\(see)i(Section)g(3.3)g([Shell)f(F)-8
+b(unctions],)150 1242 y(page)31 b(17\).)275 1385 y(Aliases)i(are)h(not)
+e(expanded)g(when)g(the)h(shell)g(is)g(not)g(in)m(teractiv)m(e,)j
+(unless)c(the)h Ft(expand_aliases)150 1494 y Fu(shell)e(option)f(is)h
+(set)g(using)f Ft(shopt)f Fu(\(see)i(Section)g(4.3.2)h([The)e(Shopt)g
+(Builtin],)h(page)g(65\).)275 1637 y(The)38 b(rules)h(concerning)h(the)
+f(de\014nition)g(and)g(use)g(of)g(aliases)i(are)e(somewhat)h
+(confusing.)67 b(Bash)150 1747 y(alw)m(a)m(ys)37 b(reads)f(at)h(least)g
+(one)f(complete)i(line)e(of)g(input,)h(and)e(all)i(lines)f(that)g(mak)m
+(e)h(up)e(a)h(comp)s(ound)150 1856 y(command,)29 b(b)s(efore)g
+(executing)i(an)m(y)e(of)h(the)f(commands)g(on)g(that)h(line)f(or)h
+(the)f(comp)s(ound)f(command.)150 1966 y(Aliases)g(are)g(expanded)e
+(when)g(a)i(command)f(is)g(read,)h(not)f(when)f(it)i(is)f(executed.)41
+b(Therefore,)28 b(an)f(alias)150 2075 y(de\014nition)36
+b(app)s(earing)h(on)f(the)h(same)g(line)g(as)g(another)g(command)f(do)s
+(es)g(not)h(tak)m(e)i(e\013ect)f(un)m(til)f(the)150 2185
+y(next)i(line)g(of)g(input)f(is)h(read.)66 b(The)38 b(commands)h(follo)
+m(wing)h(the)f(alias)h(de\014nition)e(on)h(that)g(line)h(are)150
+2295 y(not)33 b(a\013ected)h(b)m(y)f(the)g(new)f(alias.)49
+b(This)32 b(b)s(eha)m(vior)h(is)g(also)g(an)g(issue)g(when)e(functions)
+i(are)g(executed.)150 2404 y(Aliases)c(are)g(expanded)e(when)g(a)i
+(function)e(de\014nition)h(is)g(read,)h(not)f(when)g(the)g(function)g
+(is)g(executed,)150 2514 y(b)s(ecause)36 b(a)h(function)f(de\014nition)
+f(is)i(itself)g(a)f(command.)58 b(As)36 b(a)h(consequence,)h(aliases)g
+(de\014ned)d(in)h(a)150 2623 y(function)28 b(are)h(not)g(a)m(v)-5
+b(ailable)31 b(un)m(til)e(after)g(that)g(function)f(is)g(executed.)41
+b(T)-8 b(o)29 b(b)s(e)f(safe,)i(alw)m(a)m(ys)g(put)e(alias)150
+2733 y(de\014nitions)i(on)g(a)h(separate)g(line,)g(and)f(do)g(not)h
+(use)f Ft(alias)f Fu(in)h(comp)s(ound)f(commands.)275
+2876 y(F)-8 b(or)31 b(almost)g(ev)m(ery)g(purp)s(ose,)e(shell)i
+(functions)f(are)g(preferred)g(o)m(v)m(er)h(aliases.)150
+3129 y Fs(6.7)68 b(Arra)l(ys)150 3288 y Fu(Bash)33 b(pro)m(vides)g
+(one-dimensional)g(indexed)f(and)h(asso)s(ciativ)m(e)i(arra)m(y)e(v)-5
+b(ariables.)49 b(An)m(y)33 b(v)-5 b(ariable)33 b(ma)m(y)150
+3398 y(b)s(e)e(used)h(as)g(an)g(indexed)f(arra)m(y;)j(the)e
+Ft(declare)e Fu(builtin)h(will)i(explicitly)g(declare)g(an)f(arra)m(y)
+-8 b(.)46 b(There)32 b(is)150 3507 y(no)h(maxim)m(um)g(limit)h(on)f
+(the)g(size)h(of)g(an)f(arra)m(y)-8 b(,)35 b(nor)d(an)m(y)i(requiremen)
+m(t)f(that)h(mem)m(b)s(ers)e(b)s(e)g(indexed)150 3617
+y(or)26 b(assigned)h(con)m(tiguously)-8 b(.)41 b(Indexed)25
+b(arra)m(ys)i(are)f(referenced)g(using)g(in)m(tegers)i(\(including)e
+(arithmetic)150 3727 y(expressions)38 b(\(see)h(Section)g(6.5)h([Shell)
+e(Arithmetic],)k(page)d(92\)\))h(and)d(are)i(zero-based;)k(asso)s
+(ciativ)m(e)150 3836 y(arra)m(ys)37 b(use)f(arbitrary)g(strings.)59
+b(Unless)36 b(otherwise)h(noted,)h(indexed)e(arra)m(y)h(indices)f(m)m
+(ust)g(b)s(e)g(non-)150 3946 y(negativ)m(e)d(in)m(tegers.)275
+4088 y(An)26 b(indexed)h(arra)m(y)h(is)f(created)h(automatically)j(if)c
+(an)m(y)g(v)-5 b(ariable)28 b(is)g(assigned)f(to)h(using)f(the)g(syn)m
+(tax)390 4231 y Fj(name)p Ft([)p Fj(subscript)p Ft(]=)p
+Fj(value)150 4374 y Fu(The)34 b Fr(subscript)h Fu(is)g(treated)g(as)g
+(an)f(arithmetic)i(expression)e(that)h(m)m(ust)g(ev)-5
+b(aluate)36 b(to)f(a)g(n)m(um)m(b)s(er.)51 b(T)-8 b(o)150
+4484 y(explicitly)32 b(declare)f(an)g(arra)m(y)-8 b(,)31
+b(use)390 4626 y Ft(declare)46 b(-a)h Fj(name)150 4769
+y Fu(The)30 b(syn)m(tax)390 4912 y Ft(declare)46 b(-a)h
+Fj(name)p Ft([)p Fj(subscript)p Ft(])150 5054 y Fu(is)30
+b(also)i(accepted;)g(the)e Fr(subscript)h Fu(is)g(ignored.)150
+5197 y(Asso)s(ciativ)m(e)i(arra)m(ys)d(are)h(created)h(using)390
+5340 y Ft(declare)46 b(-A)h Fj(name)p Ft(.)p eop end
+%%Page: 95 101
+TeXDict begin 95 100 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(95)275 299 y(A)m(ttributes)46
+b(ma)m(y)h(b)s(e)e(sp)s(eci\014ed)g(for)h(an)g(arra)m(y)g(v)-5
+b(ariable)47 b(using)e(the)h Ft(declare)e Fu(and)h Ft(readonly)150
+408 y Fu(builtins.)40 b(Eac)m(h)31 b(attribute)g(applies)g(to)g(all)g
+(mem)m(b)s(ers)f(of)g(an)h(arra)m(y)-8 b(.)275 548 y(Arra)m(ys)30
+b(are)h(assigned)f(to)h(using)f(comp)s(ound)f(assignmen)m(ts)i(of)g
+(the)f(form)390 687 y Fj(name)p Ft(=\()p Fj(value1)44
+b(value2)j Ft(...)f(\))150 827 y Fu(where)38 b(eac)m(h)i
+Fr(v)-5 b(alue)44 b Fu(is)39 b(of)g(the)g(form)f Ft([)p
+Fj(subscript)p Ft(]=)p Fr(string)p Fu(.)63 b(Indexed)37
+b(arra)m(y)j(assignmen)m(ts)f(do)g(not)150 936 y(require)31
+b(an)m(ything)g(but)f Fr(string)p Fu(.)43 b(When)31 b(assigning)g(to)h
+(indexed)e(arra)m(ys,)i(if)f(the)g(optional)h(subscript)e(is)150
+1046 y(supplied,)i(that)h(index)f(is)h(assigned)g(to;)h(otherwise)f
+(the)g(index)f(of)h(the)g(elemen)m(t)h(assigned)f(is)f(the)h(last)150
+1156 y(index)d(assigned)h(to)g(b)m(y)f(the)g(statemen)m(t)j(plus)c
+(one.)41 b(Indexing)30 b(starts)h(at)g(zero.)275 1295
+y(When)f(assigning)h(to)g(an)f(asso)s(ciativ)m(e)j(arra)m(y)-8
+b(,)32 b(the)e(subscript)f(is)i(required.)275 1435 y(This)f(syn)m(tax)j
+(is)e(also)i(accepted)g(b)m(y)f(the)f Ft(declare)f Fu(builtin.)44
+b(Individual)31 b(arra)m(y)h(elemen)m(ts)h(ma)m(y)g(b)s(e)150
+1544 y(assigned)e(to)g(using)f(the)g Fj(name)p Ft([)p
+Fj(subscript)p Ft(]=)p Fj(value)25 b Fu(syn)m(tax)31
+b(in)m(tro)s(duced)e(ab)s(o)m(v)m(e.)275 1684 y(When)h(assigning)h(to)h
+(an)e(indexed)g(arra)m(y)-8 b(,)32 b(if)f Fr(name)36
+b Fu(is)31 b(subscripted)e(b)m(y)i(a)g(negativ)m(e)i(n)m(um)m(b)s(er,)c
+(that)150 1793 y(n)m(um)m(b)s(er)43 b(is)h(in)m(terpreted)h(as)f
+(relativ)m(e)j(to)e(one)f(greater)i(than)e(the)g(maxim)m(um)g(index)g
+(of)h Fr(name)p Fu(,)j(so)150 1903 y(negativ)m(e)30 b(indices)d(coun)m
+(t)h(bac)m(k)g(from)f(the)g(end)g(of)g(the)h(arra)m(y)-8
+b(,)29 b(and)e(an)g(index)g(of)g(-1)h(references)g(the)f(last)150
+2012 y(elemen)m(t.)275 2152 y(An)m(y)h(elemen)m(t)h(of)g(an)f(arra)m(y)
+g(ma)m(y)h(b)s(e)f(referenced)g(using)g Ft(${)p Fj(name)p
+Ft([)p Fj(subscript)p Ft(]})p Fu(.)35 b(The)27 b(braces)i(are)150
+2262 y(required)f(to)j(a)m(v)m(oid)f(con\015icts)g(with)f(the)h
+(shell's)f(\014lename)h(expansion)f(op)s(erators.)41
+b(If)28 b(the)i Fr(subscript)g Fu(is)150 2371 y(`)p Ft(@)p
+Fu(')f(or)h(`)p Ft(*)p Fu(',)f(the)h(w)m(ord)f(expands)f(to)i(all)g
+(mem)m(b)s(ers)e(of)i(the)f(arra)m(y)h Fr(name)p Fu(.)40
+b(These)29 b(subscripts)f(di\013er)h(only)150 2481 y(when)36
+b(the)g(w)m(ord)g(app)s(ears)g(within)g(double)g(quotes.)60
+b(If)36 b(the)h(w)m(ord)f(is)g(double-quoted,)j Ft(${)p
+Fj(name)p Ft([*]})150 2590 y Fu(expands)25 b(to)h(a)g(single)h(w)m(ord)
+e(with)g(the)h(v)-5 b(alue)26 b(of)g(eac)m(h)h(arra)m(y)f(mem)m(b)s(er)
+f(separated)h(b)m(y)g(the)f(\014rst)g(c)m(harac-)150
+2700 y(ter)j(of)g(the)h Ft(IFS)e Fu(v)-5 b(ariable,)29
+b(and)f Ft(${)p Fj(name)p Ft([@]})d Fu(expands)i(eac)m(h)i(elemen)m(t)h
+(of)e Fr(name)33 b Fu(to)c(a)f(separate)h(w)m(ord.)150
+2809 y(When)j(there)h(are)f(no)g(arra)m(y)h(mem)m(b)s(ers,)f
+Ft(${)p Fj(name)p Ft([@]})e Fu(expands)h(to)i(nothing.)47
+b(If)31 b(the)i(double-quoted)150 2919 y(expansion)39
+b(o)s(ccurs)h(within)f(a)h(w)m(ord,)i(the)d(expansion)h(of)g(the)f
+(\014rst)g(parameter)h(is)g(joined)f(with)h(the)150 3029
+y(b)s(eginning)29 b(part)g(of)h(the)f(original)i(w)m(ord,)e(and)g(the)h
+(expansion)f(of)h(the)f(last)i(parameter)e(is)h(joined)f(with)150
+3138 y(the)g(last)h(part)f(of)g(the)g(original)h(w)m(ord.)40
+b(This)28 b(is)h(analogous)h(to)f(the)h(expansion)e(of)h(the)g(sp)s
+(ecial)h(param-)150 3248 y(eters)g(`)p Ft(@)p Fu(')f(and)g(`)p
+Ft(*)p Fu('.)41 b Ft(${#)p Fj(name)p Ft([)p Fj(subscript)p
+Ft(]})24 b Fu(expands)k(to)i(the)g(length)g(of)f Ft(${)p
+Fj(name)p Ft([)p Fj(subscript)p Ft(]})p Fu(.)35 b(If)150
+3357 y Fr(subscript)28 b Fu(is)g(`)p Ft(@)p Fu(')f(or)h(`)p
+Ft(*)p Fu(',)g(the)g(expansion)f(is)g(the)h(n)m(um)m(b)s(er)e(of)i
+(elemen)m(ts)g(in)f(the)h(arra)m(y)-8 b(.)41 b(If)27
+b(the)g Fr(subscript)150 3467 y Fu(used)34 b(to)h(reference)g(an)f
+(elemen)m(t)i(of)f(an)f(indexed)g(arra)m(y)h(ev)-5 b(aluates)36
+b(to)f(a)g(n)m(um)m(b)s(er)e(less)i(than)f(zero,)i(it)150
+3577 y(is)c(in)m(terpreted)h(as)f(relativ)m(e)i(to)f(one)f(greater)h
+(than)f(the)h(maxim)m(um)f(index)f(of)h(the)h(arra)m(y)-8
+b(,)33 b(so)g(negativ)m(e)150 3686 y(indices)d(coun)m(t)h(bac)m(k)h
+(from)e(the)g(end)g(of)g(the)h(arra)m(y)-8 b(,)31 b(and)f(an)g(index)g
+(of)h(-1)g(refers)f(to)h(the)g(last)g(elemen)m(t.)275
+3826 y(Referencing)41 b(an)f(arra)m(y)h(v)-5 b(ariable)42
+b(without)e(a)h(subscript)e(is)i(equiv)-5 b(alen)m(t)42
+b(to)f(referencing)g(with)g(a)150 3935 y(subscript)35
+b(of)h(0.)57 b(An)m(y)36 b(reference)g(to)h(a)f(v)-5
+b(ariable)36 b(using)g(a)g(v)-5 b(alid)36 b(subscript)f(is)h(legal,)j
+(and)c Ft(bash)g Fu(will)150 4045 y(create)d(an)e(arra)m(y)h(if)f
+(necessary)-8 b(.)275 4184 y(An)35 b(arra)m(y)i(v)-5
+b(ariable)37 b(is)g(considered)f(set)h(if)f(a)h(subscript)e(has)h(b)s
+(een)g(assigned)g(a)h(v)-5 b(alue.)59 b(The)36 b(n)m(ull)150
+4294 y(string)30 b(is)h(a)g(v)-5 b(alid)30 b(v)-5 b(alue.)275
+4433 y(It)29 b(is)h(p)s(ossible)f(to)h(obtain)g(the)f(k)m(eys)i
+(\(indices\))f(of)f(an)h(arra)m(y)g(as)f(w)m(ell)i(as)f(the)f(v)-5
+b(alues.)41 b($)p Fi({)p Fu(!)p Fr(name)5 b Fu([@])p
+Fi(})150 4543 y Fu(and)39 b($)p Fi({)p Fu(!)p Fr(name)5
+b Fu([*])p Fi(})43 b Fu(expand)c(to)i(the)f(indices)h(assigned)f(in)g
+(arra)m(y)g(v)-5 b(ariable)41 b Fr(name)p Fu(.)70 b(The)39
+b(treatmen)m(t)150 4653 y(when)i(in)g(double)g(quotes)h(is)f(similar)h
+(to)h(the)e(expansion)h(of)f(the)h(sp)s(ecial)g(parameters)g(`)p
+Ft(@)p Fu(')g(and)f(`)p Ft(*)p Fu(')150 4762 y(within)30
+b(double)g(quotes.)275 4902 y(The)25 b Ft(unset)g Fu(builtin)g(is)h
+(used)f(to)i(destro)m(y)f(arra)m(ys.)40 b Ft(unset)29
+b Fj(name)p Ft([)p Fj(subscript)p Ft(])22 b Fu(destro)m(ys)k(the)g
+(arra)m(y)150 5011 y(elemen)m(t)40 b(at)e(index)g Fr(subscript)p
+Fu(.)62 b(Negativ)m(e)41 b(subscripts)c(to)i(indexed)e(arra)m(ys)i(are)
+f(in)m(terpreted)h(as)f(de-)150 5121 y(scrib)s(ed)30
+b(ab)s(o)m(v)m(e.)42 b(Unsetting)31 b(the)g(last)g(elemen)m(t)h(of)f
+(an)g(arra)m(y)g(v)-5 b(ariable)31 b(do)s(es)f(not)h(unset)f(the)h(v)-5
+b(ariable.)150 5230 y Ft(unset)29 b Fj(name)p Fu(,)e(where)h
+Fr(name)33 b Fu(is)28 b(an)g(arra)m(y)-8 b(,)30 b(remo)m(v)m(es)f(the)f
+(en)m(tire)h(arra)m(y)-8 b(.)41 b(A)28 b(subscript)f(of)h(`)p
+Ft(*)p Fu(')g(or)g(`)p Ft(@)p Fu(')g(also)150 5340 y(remo)m(v)m(es)k
+(the)e(en)m(tire)i(arra)m(y)-8 b(.)p eop end
+%%Page: 96 102
+TeXDict begin 96 101 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(96)275 299 y(When)35
+b(using)g(a)i(v)-5 b(ariable)36 b(name)g(with)g(a)g(subscript)e(as)i
+(an)g(argumen)m(t)g(to)h(a)f(command,)h(suc)m(h)f(as)150
+408 y(with)k Ft(unset)p Fu(,)h(without)e(using)h(the)g(w)m(ord)f
+(expansion)h(syn)m(tax)g(describ)s(ed)f(ab)s(o)m(v)m(e,)44
+b(the)c(argumen)m(t)g(is)150 518 y(sub)5 b(ject)25 b(to)h(the)g
+(shell's)g(\014lename)f(expansion.)39 b(If)25 b(\014lename)h(expansion)
+f(is)g(not)h(desired,)g(the)f(argumen)m(t)150 628 y(should)k(b)s(e)h
+(quoted.)275 773 y(The)20 b Ft(declare)p Fu(,)h Ft(local)p
+Fu(,)h(and)e Ft(readonly)f Fu(builtins)h(eac)m(h)i(accept)g(a)g
+Ft(-a)e Fu(option)h(to)h(sp)s(ecify)f(an)f(indexed)150
+883 y(arra)m(y)28 b(and)f(a)h Ft(-A)e Fu(option)i(to)g(sp)s(ecify)f(an)
+h(asso)s(ciativ)m(e)i(arra)m(y)-8 b(.)40 b(If)27 b(b)s(oth)g(options)h
+(are)g(supplied,)f Ft(-A)f Fu(tak)m(es)150 992 y(precedence.)55
+b(The)35 b Ft(read)f Fu(builtin)h(accepts)h(a)g Ft(-a)e
+Fu(option)i(to)g(assign)f(a)g(list)h(of)f(w)m(ords)g(read)g(from)g(the)
+150 1102 y(standard)h(input)g(to)i(an)f(arra)m(y)-8 b(,)40
+b(and)c(can)h(read)g(v)-5 b(alues)38 b(from)e(the)h(standard)g(input)f
+(in)m(to)i(individual)150 1212 y(arra)m(y)f(elemen)m(ts.)62
+b(The)36 b Ft(set)g Fu(and)h Ft(declare)d Fu(builtins)j(displa)m(y)g
+(arra)m(y)g(v)-5 b(alues)37 b(in)g(a)g(w)m(a)m(y)h(that)g(allo)m(ws)150
+1321 y(them)30 b(to)h(b)s(e)f(reused)g(as)g(input.)150
+1579 y Fs(6.8)68 b(The)45 b(Directory)g(Stac)l(k)150
+1738 y Fu(The)21 b(directory)h(stac)m(k)h(is)e(a)h(list)g(of)f(recen)m
+(tly-visited)j(directories.)39 b(The)20 b Ft(pushd)g
+Fu(builtin)h(adds)g(directories)150 1848 y(to)42 b(the)f(stac)m(k)i(as)
+e(it)h(c)m(hanges)g(the)f(curren)m(t)g(directory)-8 b(,)45
+b(and)40 b(the)i Ft(popd)e Fu(builtin)g(remo)m(v)m(es)j(sp)s(eci\014ed)
+150 1957 y(directories)29 b(from)f(the)h(stac)m(k)h(and)d(c)m(hanges)j
+(the)e(curren)m(t)g(directory)h(to)g(the)g(directory)f(remo)m(v)m(ed.)
+41 b(The)150 2067 y Ft(dirs)34 b Fu(builtin)g(displa)m(ys)h(the)g(con)m
+(ten)m(ts)i(of)e(the)g(directory)h(stac)m(k.)56 b(The)34
+b(curren)m(t)h(directory)g(is)g(alw)m(a)m(ys)150 2176
+y(the)c Ft(")p Fu(top)p Ft(")f Fu(of)g(the)h(directory)g(stac)m(k.)275
+2322 y(The)k(con)m(ten)m(ts)i(of)f(the)h(directory)f(stac)m(k)h(are)f
+(also)h(visible)g(as)f(the)g(v)-5 b(alue)36 b(of)g(the)g
+Ft(DIRSTACK)e Fu(shell)150 2432 y(v)-5 b(ariable.)150
+2642 y Fk(6.8.1)63 b(Directory)40 b(Stac)m(k)g(Builtins)150
+2819 y Ft(dirs)870 2959 y(dirs)47 b([-clpv])e([+)p Fj(N)i
+Ft(|)h(-)p Fj(N)p Ft(])630 3099 y Fu(Displa)m(y)35 b(the)f(list)g(of)g
+(curren)m(tly)g(remem)m(b)s(ered)f(directories.)51 b(Directories)36
+b(are)e(added)f(to)630 3209 y(the)28 b(list)h(with)f(the)g
+Ft(pushd)f Fu(command;)i(the)f Ft(popd)f Fu(command)h(remo)m(v)m(es)h
+(directories)g(from)630 3319 y(the)i(list.)41 b(The)30
+b(curren)m(t)g(directory)h(is)f(alw)m(a)m(ys)i(the)f(\014rst)e
+(directory)i(in)f(the)h(stac)m(k.)630 3489 y Ft(-c)384
+b Fu(Clears)31 b(the)f(directory)h(stac)m(k)h(b)m(y)e(deleting)h(all)h
+(of)e(the)h(elemen)m(ts.)630 3659 y Ft(-l)384 b Fu(Pro)s(duces)31
+b(a)h(listing)h(using)e(full)h(pathnames;)h(the)f(default)g(listing)h
+(format)1110 3769 y(uses)d(a)h(tilde)g(to)g(denote)g(the)f(home)h
+(directory)-8 b(.)630 3940 y Ft(-p)384 b Fu(Causes)30
+b Ft(dirs)f Fu(to)i(prin)m(t)f(the)h(directory)g(stac)m(k)h(with)e(one)
+g(en)m(try)h(p)s(er)e(line.)630 4110 y Ft(-v)384 b Fu(Causes)36
+b Ft(dirs)f Fu(to)i(prin)m(t)f(the)g(directory)h(stac)m(k)h(with)e(one)
+h(en)m(try)f(p)s(er)f(line,)1110 4220 y(pre\014xing)30
+b(eac)m(h)h(en)m(try)g(with)f(its)h(index)e(in)i(the)f(stac)m(k.)630
+4390 y Ft(+)p Fj(N)384 b Fu(Displa)m(ys)23 b(the)f Fr(N)10
+b Fu(th)21 b(directory)h(\(coun)m(ting)h(from)e(the)h(left)g(of)g(the)g
+(list)g(prin)m(ted)1110 4500 y(b)m(y)30 b Ft(dirs)f Fu(when)h(in)m(v)m
+(ok)m(ed)i(without)e(options\),)h(starting)g(with)g(zero.)630
+4670 y Ft(-)p Fj(N)384 b Fu(Displa)m(ys)47 b(the)g Fr(N)10
+b Fu(th)46 b(directory)h(\(coun)m(ting)g(from)f(the)g(righ)m(t)h(of)g
+(the)f(list)1110 4780 y(prin)m(ted)25 b(b)m(y)g Ft(dirs)g
+Fu(when)f(in)m(v)m(ok)m(ed)j(without)f(options\),)h(starting)g(with)e
+(zero.)150 4950 y Ft(popd)870 5090 y(popd)47 b([-n])f([+)p
+Fj(N)h Ft(|)h(-)p Fj(N)p Ft(])630 5230 y Fu(When)32 b(no)g(argumen)m
+(ts)h(are)g(giv)m(en,)h Ft(popd)d Fu(remo)m(v)m(es)j(the)f(top)f
+(directory)h(from)f(the)g(stac)m(k)630 5340 y(and)f(p)s(erforms)e(a)j
+Ft(cd)f Fu(to)h(the)f(new)g(top)h(directory)-8 b(.)44
+b(The)31 b(elemen)m(ts)i(are)e(n)m(um)m(b)s(ered)f(from)p
+eop end
+%%Page: 97 103
+TeXDict begin 97 102 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(97)630 299 y(0)33 b(starting)g(at)g
+(the)f(\014rst)g(directory)g(listed)h(with)f Ft(dirs)p
+Fu(;)g(that)h(is,)g Ft(popd)e Fu(is)i(equiv)-5 b(alen)m(t)33
+b(to)630 408 y Ft(popd)c(+0)p Fu(.)630 570 y Ft(-n)384
+b Fu(Suppresses)27 b(the)j(normal)g(c)m(hange)g(of)g(directory)g(when)e
+(remo)m(ving)j(directo-)1110 679 y(ries)f(from)g(the)h(stac)m(k,)h(so)f
+(that)g(only)f(the)h(stac)m(k)g(is)g(manipulated.)630
+841 y Ft(+)p Fj(N)384 b Fu(Remo)m(v)m(es)22 b(the)f Fr(N)10
+b Fu(th)20 b(directory)g(\(coun)m(ting)i(from)e(the)g(left)h(of)g(the)f
+(list)h(prin)m(ted)1110 950 y(b)m(y)30 b Ft(dirs)p Fu(\),)g(starting)h
+(with)f(zero.)630 1111 y Ft(-)p Fj(N)384 b Fu(Remo)m(v)m(es)46
+b(the)g Fr(N)10 b Fu(th)44 b(directory)h(\(coun)m(ting)h(from)f(the)g
+(righ)m(t)g(of)g(the)g(list)1110 1221 y(prin)m(ted)30
+b(b)m(y)g Ft(dirs)p Fu(\),)g(starting)h(with)f(zero.)150
+1382 y Ft(pushd)870 1518 y(pushd)46 b([-n])h([+)p Fj(N)g
+Ft(|)g Fj(-N)h Ft(|)f Fj(dir)p Ft(])630 1653 y Fu(Sa)m(v)m(e)30
+b(the)e(curren)m(t)g(directory)h(on)f(the)h(top)f(of)h(the)f(directory)
+h(stac)m(k)h(and)e(then)g Ft(cd)f Fu(to)i Fr(dir)p Fu(.)630
+1763 y(With)39 b(no)f(argumen)m(ts,)j Ft(pushd)c Fu(exc)m(hanges)j(the)
+f(top)f(t)m(w)m(o)i(directories)g(and)d(mak)m(es)j(the)630
+1872 y(new)30 b(top)g(the)h(curren)m(t)f(directory)-8
+b(.)630 2033 y Ft(-n)384 b Fu(Suppresses)24 b(the)j(normal)f(c)m(hange)
+h(of)g(directory)f(when)g(rotating)h(or)f(adding)1110
+2143 y(directories)31 b(to)h(the)e(stac)m(k,)i(so)f(that)g(only)f(the)h
+(stac)m(k)h(is)e(manipulated.)630 2304 y Ft(+)p Fj(N)384
+b Fu(Brings)29 b(the)f Fr(N)10 b Fu(th)29 b(directory)g(\(coun)m(ting)h
+(from)e(the)g(left)i(of)e(the)h(list)g(prin)m(ted)1110
+2414 y(b)m(y)34 b Ft(dirs)p Fu(,)g(starting)h(with)f(zero\))i(to)f(the)
+f(top)g(of)h(the)f(list)h(b)m(y)f(rotating)i(the)1110
+2523 y(stac)m(k.)630 2685 y Ft(-)p Fj(N)384 b Fu(Brings)23
+b(the)g Fr(N)10 b Fu(th)23 b(directory)h(\(coun)m(ting)g(from)e(the)i
+(righ)m(t)f(of)g(the)h(list)f(prin)m(ted)1110 2794 y(b)m(y)34
+b Ft(dirs)p Fu(,)g(starting)h(with)f(zero\))i(to)f(the)f(top)g(of)h
+(the)f(list)h(b)m(y)f(rotating)i(the)1110 2904 y(stac)m(k.)630
+3065 y Fj(dir)336 b Fu(Mak)m(es)28 b Fr(dir)33 b Fu(b)s(e)27
+b(the)g(top)g(of)g(the)h(stac)m(k,)h(making)e(it)h(the)f(new)g(curren)m
+(t)g(direc-)1110 3175 y(tory)k(as)f(if)h(it)g(had)e(b)s(een)h(supplied)
+f(as)i(an)f(argumen)m(t)h(to)g(the)f Ft(cd)g Fu(builtin.)150
+3418 y Fs(6.9)68 b(Con)l(trolling)47 b(the)e(Prompt)150
+3578 y Fu(The)24 b(v)-5 b(alue)24 b(of)h(the)f(v)-5 b(ariable)25
+b Ft(PROMPT_COMMAND)20 b Fu(is)25 b(examined)f(just)g(b)s(efore)f(Bash)
+i(prin)m(ts)e(eac)m(h)j(primary)150 3687 y(prompt.)39
+b(If)28 b Ft(PROMPT_COMMAND)d Fu(is)j(set)h(and)f(has)g(a)h(non-n)m
+(ull)f(v)-5 b(alue,)29 b(then)f(the)h(v)-5 b(alue)29
+b(is)f(executed)i(just)150 3797 y(as)h(if)f(it)h(had)f(b)s(een)f(t)m
+(yp)s(ed)h(on)h(the)f(command)g(line.)275 3933 y(In)d(addition,)j(the)f
+(follo)m(wing)h(table)f(describ)s(es)f(the)h(sp)s(ecial)g(c)m
+(haracters)h(whic)m(h)f(can)f(app)s(ear)g(in)h(the)150
+4043 y(prompt)g(v)-5 b(ariables)32 b Ft(PS0)p Fu(,)d
+Ft(PS1)p Fu(,)h Ft(PS2)p Fu(,)g(and)f Ft(PS4)p Fu(:)150
+4205 y Ft(\\a)384 b Fu(A)30 b(b)s(ell)h(c)m(haracter.)150
+4366 y Ft(\\d)384 b Fu(The)30 b(date,)h(in)f Ft(")p Fu(W)-8
+b(eekda)m(y)32 b(Mon)m(th)f(Date)p Ft(")h Fu(format)f(\(e.g.,)h
+Ft(")p Fu(T)-8 b(ue)30 b(Ma)m(y)h(26)p Ft(")p Fu(\).)150
+4527 y Ft(\\D{)p Fj(format)p Ft(})630 4637 y Fu(The)c
+Fr(format)i Fu(is)f(passed)e(to)i Ft(strftime)p Fu(\(3\))f(and)f(the)i
+(result)f(is)g(inserted)g(in)m(to)h(the)g(prompt)630
+4747 y(string;)42 b(an)d(empt)m(y)f Fr(format)j Fu(results)d(in)g(a)h
+(lo)s(cale-sp)s(eci\014c)h(time)f(represen)m(tation.)65
+b(The)630 4856 y(braces)31 b(are)f(required.)150 5017
+y Ft(\\e)384 b Fu(An)30 b(escap)s(e)h(c)m(haracter.)150
+5179 y Ft(\\h)384 b Fu(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e
+(`.'.)150 5340 y Ft(\\H)384 b Fu(The)30 b(hostname.)p
+eop end
+%%Page: 98 104
+TeXDict begin 98 103 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(98)150 299 y Ft(\\j)384
+b Fu(The)30 b(n)m(um)m(b)s(er)f(of)h(jobs)g(curren)m(tly)h(managed)g(b)
+m(y)f(the)g(shell.)150 489 y Ft(\\l)384 b Fu(The)30 b(basename)h(of)f
+(the)h(shell's)f(terminal)h(device)g(name.)150 678 y
+Ft(\\n)384 b Fu(A)30 b(newline.)150 868 y Ft(\\r)384
+b Fu(A)30 b(carriage)i(return.)150 1058 y Ft(\\s)384
+b Fu(The)22 b(name)g(of)h(the)f(shell,)i(the)f(basename)f(of)h
+Ft($0)f Fu(\(the)g(p)s(ortion)g(follo)m(wing)i(the)f(\014nal)e
+(slash\).)150 1248 y Ft(\\t)384 b Fu(The)30 b(time,)h(in)f(24-hour)h
+(HH:MM:SS)g(format.)150 1437 y Ft(\\T)384 b Fu(The)30
+b(time,)h(in)f(12-hour)h(HH:MM:SS)g(format.)150 1627
+y Ft(\\@)384 b Fu(The)30 b(time,)h(in)f(12-hour)h(am/pm)f(format.)150
+1817 y Ft(\\A)384 b Fu(The)30 b(time,)h(in)f(24-hour)h(HH:MM)g(format.)
+150 2006 y Ft(\\u)384 b Fu(The)30 b(username)g(of)g(the)h(curren)m(t)f
+(user.)150 2196 y Ft(\\v)384 b Fu(The)30 b(v)m(ersion)h(of)f(Bash)h
+(\(e.g.,)h(2.00\))150 2386 y Ft(\\V)384 b Fu(The)30 b(release)i(of)e
+(Bash,)h(v)m(ersion)g Ft(+)f Fu(patc)m(hlev)m(el)i(\(e.g.,)h(2.00.0\))
+150 2576 y Ft(\\w)384 b Fu(The)34 b(curren)m(t)h(w)m(orking)g
+(directory)-8 b(,)37 b(with)e Ft($HOME)e Fu(abbreviated)j(with)e(a)h
+(tilde)h(\(uses)f(the)630 2685 y Ft($PROMPT_DIRTRIM)26
+b Fu(v)-5 b(ariable\).)150 2875 y Ft(\\W)384 b Fu(The)30
+b(basename)h(of)f Ft($PWD)p Fu(,)g(with)g Ft($HOME)f
+Fu(abbreviated)h(with)g(a)h(tilde.)150 3065 y Ft(\\!)384
+b Fu(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i(this)f(command.)150
+3254 y Ft(\\#)384 b Fu(The)30 b(command)g(n)m(um)m(b)s(er)f(of)i(this)f
+(command.)150 3444 y Ft(\\$)384 b Fu(If)30 b(the)g(e\013ectiv)m(e)j
+(uid)d(is)g(0,)h Ft(#)p Fu(,)g(otherwise)g Ft($)p Fu(.)150
+3634 y Ft(\\)p Fj(nnn)288 b Fu(The)30 b(c)m(haracter)i(whose)e(ASCI)s
+(I)f(co)s(de)h(is)h(the)f(o)s(ctal)i(v)-5 b(alue)31 b
+Fr(nnn)p Fu(.)150 3824 y Ft(\\\\)384 b Fu(A)30 b(bac)m(kslash.)150
+4013 y Ft(\\[)384 b Fu(Begin)38 b(a)f(sequence)g(of)g(non-prin)m(ting)g
+(c)m(haracters.)61 b(This)36 b(could)h(b)s(e)g(used)f(to)h(em)m(b)s(ed)
+g(a)630 4123 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e
+(prompt.)150 4313 y Ft(\\])384 b Fu(End)29 b(a)i(sequence)g(of)f
+(non-prin)m(ting)g(c)m(haracters.)275 4518 y(The)25 b(command)h(n)m(um)
+m(b)s(er)f(and)h(the)g(history)g(n)m(um)m(b)s(er)f(are)i(usually)f
+(di\013eren)m(t:)39 b(the)26 b(history)g(n)m(um)m(b)s(er)150
+4627 y(of)h(a)f(command)h(is)f(its)h(p)s(osition)f(in)g(the)h(history)f
+(list,)i(whic)m(h)f(ma)m(y)g(include)f(commands)g(restored)g(from)150
+4737 y(the)39 b(history)h(\014le)f(\(see)h(Section)g(9.1)h([Bash)e
+(History)h(F)-8 b(acilities],)45 b(page)40 b(141\),)j(while)d(the)f
+(command)150 4846 y(n)m(um)m(b)s(er)j(is)h(the)h(p)s(osition)f(in)g
+(the)g(sequence)h(of)f(commands)g(executed)h(during)e(the)i(curren)m(t)
+f(shell)150 4956 y(session.)275 5121 y(After)35 b(the)g(string)g(is)g
+(deco)s(ded,)h(it)f(is)g(expanded)f(via)i(parameter)f(expansion,)i
+(command)d(substi-)150 5230 y(tution,)k(arithmetic)f(expansion,)g(and)e
+(quote)h(remo)m(v)-5 b(al,)39 b(sub)5 b(ject)35 b(to)i(the)f(v)-5
+b(alue)36 b(of)g(the)g Ft(promptvars)150 5340 y Fu(shell)31
+b(option)f(\(see)i(Section)f(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g
+(65\).)p eop end
+%%Page: 99 105
+TeXDict begin 99 104 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(99)150 299 y Fs(6.10)68
+b(The)45 b(Restricted)h(Shell)150 458 y Fu(If)34 b(Bash)g(is)g(started)
+g(with)g(the)g(name)h Ft(rbash)p Fu(,)e(or)h(the)h Ft(--restricted)30
+b Fu(or)k Ft(-r)g Fu(option)g(is)g(supplied)f(at)150
+568 y(in)m(v)m(o)s(cation,)d(the)d(shell)g(b)s(ecomes)h(restricted.)40
+b(A)27 b(restricted)h(shell)f(is)g(used)f(to)i(set)f(up)f(an)h(en)m
+(vironmen)m(t)150 677 y(more)g(con)m(trolled)i(than)e(the)g(standard)g
+(shell.)40 b(A)27 b(restricted)h(shell)f(b)s(eha)m(v)m(es)h(iden)m
+(tically)h(to)f Ft(bash)e Fu(with)150 787 y(the)31 b(exception)g(that)g
+(the)g(follo)m(wing)h(are)e(disallo)m(w)m(ed)i(or)e(not)h(p)s
+(erformed:)225 931 y Fq(\017)60 b Fu(Changing)30 b(directories)h(with)g
+(the)f Ft(cd)g Fu(builtin.)225 1070 y Fq(\017)60 b Fu(Setting)31
+b(or)f(unsetting)h(the)g(v)-5 b(alues)30 b(of)h(the)f
+Ft(SHELL)p Fu(,)g Ft(PATH)p Fu(,)f Ft(ENV)p Fu(,)h(or)g
+Ft(BASH_ENV)e Fu(v)-5 b(ariables.)225 1210 y Fq(\017)60
+b Fu(Sp)s(ecifying)30 b(command)g(names)g(con)m(taining)i(slashes.)225
+1349 y Fq(\017)60 b Fu(Sp)s(ecifying)30 b(a)h(\014lename)f(con)m
+(taining)i(a)f(slash)f(as)h(an)f(argumen)m(t)h(to)g(the)f
+Ft(.)h Fu(builtin)e(command.)225 1488 y Fq(\017)60 b
+Fu(Sp)s(ecifying)32 b(a)g(\014lename)h(con)m(taining)h(a)e(slash)g(as)h
+(an)f(argumen)m(t)h(to)g(the)f Ft(-p)g Fu(option)h(to)g(the)f
+Ft(hash)330 1598 y Fu(builtin)e(command.)225 1737 y Fq(\017)60
+b Fu(Imp)s(orting)30 b(function)g(de\014nitions)g(from)f(the)i(shell)g
+(en)m(vironmen)m(t)g(at)g(startup.)225 1876 y Fq(\017)60
+b Fu(P)m(arsing)31 b(the)f(v)-5 b(alue)31 b(of)g Ft(SHELLOPTS)d
+Fu(from)h(the)i(shell)g(en)m(vironmen)m(t)g(at)g(startup.)225
+2016 y Fq(\017)60 b Fu(Redirecting)31 b(output)f(using)g(the)h(`)p
+Ft(>)p Fu(',)g(`)p Ft(>|)p Fu(',)f(`)p Ft(<>)p Fu(',)h(`)p
+Ft(>&)p Fu(',)f(`)p Ft(&>)p Fu(',)h(and)e(`)p Ft(>>)p
+Fu(')i(redirection)g(op)s(erators.)225 2155 y Fq(\017)60
+b Fu(Using)31 b(the)f Ft(exec)f Fu(builtin)h(to)h(replace)h(the)e
+(shell)h(with)f(another)h(command.)225 2294 y Fq(\017)60
+b Fu(Adding)24 b(or)g(deleting)i(builtin)e(commands)g(with)h(the)f
+Ft(-f)g Fu(and)g Ft(-d)g Fu(options)h(to)h(the)e Ft(enable)f
+Fu(builtin.)225 2433 y Fq(\017)60 b Fu(Using)31 b(the)f
+Ft(enable)f Fu(builtin)h(command)g(to)h(enable)g(disabled)f(shell)g
+(builtins.)225 2573 y Fq(\017)60 b Fu(Sp)s(ecifying)30
+b(the)g Ft(-p)g Fu(option)h(to)g(the)g Ft(command)d Fu(builtin.)225
+2712 y Fq(\017)60 b Fu(T)-8 b(urning)29 b(o\013)i(restricted)g(mo)s(de)
+f(with)g(`)p Ft(set)g(+r)p Fu(')g(or)g(`)p Ft(set)g(+o)g(restricted)p
+Fu('.)275 2886 y(These)g(restrictions)h(are)g(enforced)f(after)h(an)m
+(y)g(startup)f(\014les)g(are)h(read.)275 3030 y(When)j(a)i(command)e
+(that)i(is)f(found)f(to)h(b)s(e)g(a)g(shell)g(script)g(is)g(executed)h
+(\(see)g(Section)g(3.8)g([Shell)150 3139 y(Scripts],)25
+b(page)e(41\),)j Ft(rbash)c Fu(turns)g(o\013)i(an)m(y)f(restrictions)h
+(in)f(the)g(shell)h(spa)m(wned)e(to)i(execute)g(the)g(script.)150
+3394 y Fs(6.11)68 b(Bash)45 b(POSIX)f(Mo)t(de)150 3554
+y Fu(Starting)39 b(Bash)f(with)g(the)h Ft(--posix)d Fu(command-line)j
+(option)g(or)f(executing)h(`)p Ft(set)30 b(-o)g(posix)p
+Fu(')37 b(while)150 3663 y(Bash)26 b(is)g(running)e(will)j(cause)f
+(Bash)g(to)h(conform)f(more)g(closely)h(to)g(the)f Fm(posix)f
+Fu(standard)g(b)m(y)h(c)m(hanging)150 3773 y(the)31 b(b)s(eha)m(vior)f
+(to)h(matc)m(h)g(that)g(sp)s(eci\014ed)f(b)m(y)g Fm(posix)g
+Fu(in)g(areas)h(where)f(the)h(Bash)f(default)h(di\013ers.)275
+3917 y(When)f(in)m(v)m(ok)m(ed)h(as)g Ft(sh)p Fu(,)f(Bash)h(en)m(ters)g
+Fm(posix)e Fu(mo)s(de)h(after)h(reading)g(the)f(startup)g(\014les.)275
+4061 y(The)f(follo)m(wing)j(list)f(is)g(what's)f(c)m(hanged)h(when)e(`)
+p Fm(posix)h Fu(mo)s(de')h(is)f(in)g(e\013ect:)199 4205
+y(1.)61 b(Bash)31 b(ensures)e(that)i(the)f Ft(POSIXLY_CORRECT)d
+Fu(v)-5 b(ariable)31 b(is)f(set.)199 4345 y(2.)61 b(When)28
+b(a)i(command)e(in)g(the)h(hash)f(table)i(no)e(longer)h(exists,)h(Bash)
+f(will)g(re-searc)m(h)h Ft($PATH)d Fu(to)i(\014nd)330
+4454 y(the)i(new)e(lo)s(cation.)43 b(This)29 b(is)i(also)g(a)m(v)-5
+b(ailable)33 b(with)d(`)p Ft(shopt)f(-s)h(checkhash)p
+Fu('.)199 4593 y(3.)61 b(The)42 b(message)h(prin)m(ted)e(b)m(y)h(the)g
+(job)g(con)m(trol)i(co)s(de)e(and)f(builtins)h(when)f(a)h(job)g(exits)h
+(with)f(a)330 4703 y(non-zero)31 b(status)g(is)f(`Done\(status\)'.)199
+4842 y(4.)61 b(The)40 b(message)h(prin)m(ted)f(b)m(y)g(the)h(job)f(con)
+m(trol)h(co)s(de)g(and)f(builtins)f(when)h(a)g(job)g(is)h(stopp)s(ed)e
+(is)330 4952 y(`Stopp)s(ed\()p Fr(signame)5 b Fu(\)',)31
+b(where)f Fr(signame)36 b Fu(is,)31 b(for)f(example,)h
+Ft(SIGTSTP)p Fu(.)199 5091 y(5.)61 b(Alias)31 b(expansion)g(is)f(alw)m
+(a)m(ys)i(enabled,)e(ev)m(en)i(in)e(non-in)m(teractiv)m(e)j(shells.)199
+5230 y(6.)61 b(Reserv)m(ed)40 b(w)m(ords)g(app)s(earing)f(in)h(a)g(con)
+m(text)i(where)d(reserv)m(ed)h(w)m(ords)f(are)i(recognized)g(do)f(not)
+330 5340 y(undergo)30 b(alias)h(expansion.)p eop end
+%%Page: 100 106
+TeXDict begin 100 105 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(100)199 299 y(7.)61
+b(The)38 b Fm(posix)h Ft(PS1)f Fu(and)g Ft(PS2)g Fu(expansions)g(of)i
+(`)p Ft(!)p Fu(')f(to)g(the)g(history)g(n)m(um)m(b)s(er)f(and)g(`)p
+Ft(!!)p Fu(')h(to)g(`)p Ft(!)p Fu(')h(are)330 408 y(enabled,)26
+b(and)f(parameter)g(expansion)g(is)g(p)s(erformed)e(on)i(the)g(v)-5
+b(alues)25 b(of)g Ft(PS1)f Fu(and)h Ft(PS2)f Fu(regardless)330
+518 y(of)31 b(the)f(setting)i(of)e(the)h Ft(promptvars)c
+Fu(option.)199 651 y(8.)61 b(The)30 b Fm(posix)g Fu(startup)f(\014les)i
+(are)g(executed)g(\()p Ft($ENV)p Fu(\))f(rather)g(than)g(the)h(normal)f
+(Bash)g(\014les.)199 783 y(9.)61 b(Tilde)30 b(expansion)g(is)f(only)h
+(p)s(erformed)f(on)h(assignmen)m(ts)g(preceding)g(a)g(command)g(name,)g
+(rather)330 893 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h(on)
+e(the)h(line.)154 1026 y(10.)61 b(The)30 b(default)g(history)h(\014le)f
+(is)h Ft(~/.sh_history)26 b Fu(\(this)31 b(is)f(the)h(default)g(v)-5
+b(alue)30 b(of)h Ft($HISTFILE)p Fu(\).)154 1158 y(11.)61
+b(Redirection)25 b(op)s(erators)f(do)g(not)g(p)s(erform)f(\014lename)h
+(expansion)g(on)g(the)g(w)m(ord)f(in)h(the)g(redirection)330
+1268 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154
+1401 y(12.)61 b(Redirection)31 b(op)s(erators)g(do)f(not)h(p)s(erform)e
+(w)m(ord)h(splitting)h(on)f(the)h(w)m(ord)f(in)g(the)g(redirection.)154
+1533 y(13.)61 b(F)-8 b(unction)35 b(names)g(m)m(ust)f(b)s(e)g(v)-5
+b(alid)35 b(shell)f Ft(name)p Fu(s.)52 b(That)34 b(is,)i(they)f(ma)m(y)
+g(not)g(con)m(tain)g(c)m(haracters)330 1643 y(other)e(than)g(letters,)h
+(digits,)h(and)d(underscores,)h(and)f(ma)m(y)h(not)g(start)h(with)e(a)h
+(digit.)49 b(Declaring)330 1752 y(a)31 b(function)f(with)g(an)g(in)m(v)
+-5 b(alid)31 b(name)g(causes)f(a)h(fatal)h(syn)m(tax)f(error)f(in)g
+(non-in)m(teractiv)m(e)j(shells.)154 1885 y(14.)61 b(F)-8
+b(unction)31 b(names)f(ma)m(y)h(not)g(b)s(e)f(the)g(same)h(as)g(one)f
+(of)h(the)f Fm(posix)g Fu(sp)s(ecial)h(builtins.)154
+2018 y(15.)61 b Fm(posix)30 b Fu(sp)s(ecial)h(builtins)e(are)i(found)e
+(b)s(efore)h(shell)h(functions)f(during)f(command)h(lo)s(okup.)154
+2150 y(16.)61 b(When)48 b(prin)m(ting)g(shell)h(function)f
+(de\014nitions)g(\(e.g.,)55 b(b)m(y)48 b Ft(type)p Fu(\),)k(Bash)d(do)s
+(es)f(not)h(prin)m(t)f(the)330 2260 y Ft(function)28
+b Fu(k)m(eyw)m(ord.)154 2393 y(17.)61 b(Literal)28 b(tildes)g(that)f
+(app)s(ear)f(as)i(the)f(\014rst)f(c)m(haracter)j(in)d(elemen)m(ts)j(of)
+e(the)g Ft(PATH)f Fu(v)-5 b(ariable)27 b(are)h(not)330
+2502 y(expanded)i(as)g(describ)s(ed)f(ab)s(o)m(v)m(e)j(under)d(Section)
+i(3.5.2)h([Tilde)f(Expansion],)f(page)h(23.)154 2635
+y(18.)61 b(The)29 b Ft(time)g Fu(reserv)m(ed)h(w)m(ord)g(ma)m(y)g(b)s
+(e)g(used)f(b)m(y)h(itself)g(as)g(a)h(command.)40 b(When)30
+b(used)f(in)g(this)h(w)m(a)m(y)-8 b(,)330 2744 y(it)33
+b(displa)m(ys)g(timing)g(statistics)h(for)e(the)h(shell)g(and)f(its)g
+(completed)i(c)m(hildren.)47 b(The)32 b Ft(TIMEFORMAT)330
+2854 y Fu(v)-5 b(ariable)31 b(con)m(trols)h(the)e(format)h(of)g(the)f
+(timing)h(information.)154 2987 y(19.)61 b(When)33 b(parsing)g(and)f
+(expanding)h(a)h($)p Fi({)6 b Fu(.)22 b(.)h(.)11 b Fi(})33
+b Fu(expansion)g(that)h(app)s(ears)f(within)f(double)h(quotes,)330
+3096 y(single)42 b(quotes)g(are)g(no)g(longer)g(sp)s(ecial)g(and)f
+(cannot)i(b)s(e)e(used)g(to)h(quote)g(a)g(closing)h(brace)f(or)330
+3206 y(other)31 b(sp)s(ecial)h(c)m(haracter,)i(unless)c(the)i(op)s
+(erator)f(is)g(one)h(of)f(those)h(de\014ned)e(to)i(p)s(erform)e
+(pattern)330 3315 y(remo)m(v)-5 b(al.)42 b(In)30 b(this)g(case,)i(they)
+e(do)g(not)h(ha)m(v)m(e)h(to)f(app)s(ear)e(as)i(matc)m(hed)g(pairs.)154
+3448 y(20.)61 b(The)29 b(parser)g(do)s(es)g(not)h(recognize)h
+Ft(time)d Fu(as)i(a)g(reserv)m(ed)f(w)m(ord)g(if)h(the)f(next)h(tok)m
+(en)h(b)s(egins)d(with)i(a)330 3558 y(`)p Ft(-)p Fu('.)154
+3690 y(21.)61 b(The)30 b(`)p Ft(!)p Fu(')h(c)m(haracter)h(do)s(es)e
+(not)h(in)m(tro)s(duce)g(history)f(expansion)h(within)f(a)h
+(double-quoted)g(string,)330 3800 y(ev)m(en)g(if)f(the)h
+Ft(histexpand)d Fu(option)i(is)h(enabled.)154 3933 y(22.)61
+b(If)24 b(a)g Fm(posix)g Fu(sp)s(ecial)h(builtin)f(returns)f(an)h
+(error)g(status,)i(a)e(non-in)m(teractiv)m(e)j(shell)e(exits.)39
+b(The)24 b(fatal)330 4042 y(errors)30 b(are)h(those)f(listed)h(in)f
+(the)h Fm(posix)e Fu(standard,)h(and)g(include)g(things)g(lik)m(e)i
+(passing)e(incorrect)330 4152 y(options,)43 b(redirection)d(errors,)i
+(v)-5 b(ariable)41 b(assignmen)m(t)g(errors)e(for)g(assignmen)m(ts)i
+(preceding)f(the)330 4261 y(command)30 b(name,)h(and)f(so)g(on.)154
+4394 y(23.)61 b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e
+(an)h(error)g(status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g
+(error)e(o)s(ccurs)330 4504 y(when)38 b(no)h(command)g(name)g(follo)m
+(ws)i(the)e(assignmen)m(t)h(statemen)m(ts.)69 b(A)39
+b(v)-5 b(ariable)40 b(assignmen)m(t)330 4613 y(error)30
+b(o)s(ccurs,)g(for)g(example,)i(when)d(trying)i(to)g(assign)f(a)h(v)-5
+b(alue)31 b(to)g(a)g(readonly)f(v)-5 b(ariable.)154 4746
+y(24.)61 b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e(an)h
+(error)g(status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g(error)e
+(o)s(ccurs)330 4855 y(in)g(an)g(assignmen)m(t)i(statemen)m(t)g
+(preceding)e(a)h(sp)s(ecial)g(builtin,)f(but)g(not)g(with)h(an)m(y)f
+(other)h(simple)330 4965 y(command.)154 5098 y(25.)61
+b(A)43 b(non-in)m(teractiv)m(e)i(shell)e(exits)h(with)f(an)f(error)h
+(status)g(if)g(the)g(iteration)h(v)-5 b(ariable)44 b(in)f(a)g
+Ft(for)330 5207 y Fu(statemen)m(t)32 b(or)f(the)f(selection)i(v)-5
+b(ariable)32 b(in)e(a)g Ft(select)f Fu(statemen)m(t)j(is)f(a)f
+(readonly)h(v)-5 b(ariable.)154 5340 y(26.)61 b(Non-in)m(teractiv)m(e)
+34 b(shells)c(exit)h(if)g Fr(\014lename)k Fu(in)30 b
+Ft(.)g Fr(\014lename)36 b Fu(is)31 b(not)f(found.)p eop
+end
+%%Page: 101 107
+TeXDict begin 101 106 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(101)154 299 y(27.)61
+b(Non-in)m(teractiv)m(e)41 b(shells)d(exit)h(if)f(a)g(syn)m(tax)g
+(error)g(in)f(an)h(arithmetic)h(expansion)f(results)f(in)h(an)330
+408 y(in)m(v)-5 b(alid)31 b(expression.)154 541 y(28.)61
+b(Non-in)m(teractiv)m(e)34 b(shells)c(exit)h(if)g(a)f(parameter)h
+(expansion)g(error)f(o)s(ccurs.)154 674 y(29.)61 b(Non-in)m(teractiv)m
+(e)27 b(shells)c(exit)i(if)e(there)h(is)f(a)h(syn)m(tax)g(error)f(in)g
+(a)h(script)f(read)g(with)h(the)f Ft(.)g Fu(or)h Ft(source)330
+783 y Fu(builtins,)30 b(or)g(in)g(a)h(string)g(pro)s(cessed)e(b)m(y)i
+(the)f Ft(eval)f Fu(builtin.)154 916 y(30.)61 b(Pro)s(cess)30
+b(substitution)g(is)h(not)f(a)m(v)-5 b(ailable.)154 1049
+y(31.)61 b(While)32 b(v)-5 b(ariable)32 b(indirection)f(is)g(a)m(v)-5
+b(ailable,)34 b(it)d(ma)m(y)h(not)f(b)s(e)g(applied)g(to)g(the)h(`)p
+Ft(#)p Fu(')f(and)f(`)p Ft(?)p Fu(')h(sp)s(ecial)330
+1158 y(parameters.)154 1291 y(32.)61 b(When)28 b(expanding)g(the)g(`)p
+Ft(*)p Fu(')g(sp)s(ecial)h(parameter)f(in)g(a)h(pattern)f(con)m(text)i
+(where)e(the)g(expansion)g(is)330 1401 y(double-quoted)i(do)s(es)g(not)
+h(treat)h(the)e Ft($*)g Fu(as)h(if)f(it)h(w)m(ere)g(double-quoted.)154
+1533 y(33.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e
+Fm(posix)f Fu(sp)s(ecial)i(builtins)f(p)s(ersist)g(in)f(the)i(shell)f
+(en)m(vironmen)m(t)330 1643 y(after)31 b(the)f(builtin)g(completes.)154
+1775 y(34.)61 b(Assignmen)m(t)35 b(statemen)m(ts)h(preceding)f(shell)f
+(function)g(calls)i(p)s(ersist)e(in)g(the)h(shell)f(en)m(vironmen)m(t)
+330 1885 y(after)d(the)f(function)h(returns,)e(as)i(if)f(a)h
+Fm(posix)e Fu(sp)s(ecial)i(builtin)f(command)g(had)g(b)s(een)g
+(executed.)154 2018 y(35.)61 b(The)31 b Ft(command)e
+Fu(builtin)i(do)s(es)g(not)h(prev)m(en)m(t)f(builtins)g(that)h(tak)m(e)
+h(assignmen)m(t)f(statemen)m(ts)h(as)f(ar-)330 2127 y(gumen)m(ts)40
+b(from)e(expanding)h(them)g(as)h(assignmen)m(t)g(statemen)m(ts;)46
+b(when)38 b(not)i(in)f Fm(posix)f Fu(mo)s(de,)330 2237
+y(assignmen)m(t)k(builtins)e(lose)h(their)g(assignmen)m(t)h(statemen)m
+(t)h(expansion)d(prop)s(erties)g(when)g(pre-)330 2346
+y(ceded)31 b(b)m(y)f Ft(command)p Fu(.)154 2479 y(36.)61
+b(The)27 b Ft(bg)g Fu(builtin)g(uses)g(the)h(required)f(format)h(to)g
+(describ)s(e)f(eac)m(h)i(job)e(placed)h(in)f(the)h(bac)m(kground,)330
+2589 y(whic)m(h)h(do)s(es)g(not)g(include)g(an)g(indication)h(of)f
+(whether)f(the)h(job)g(is)g(the)h(curren)m(t)e(or)h(previous)g(job.)154
+2721 y(37.)61 b(The)23 b(output)f(of)i(`)p Ft(kill)29
+b(-l)p Fu(')23 b(prin)m(ts)f(all)i(the)g(signal)f(names)g(on)g(a)h
+(single)g(line,)h(separated)e(b)m(y)g(spaces,)330 2831
+y(without)30 b(the)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154
+2964 y(38.)61 b(The)30 b Ft(kill)f Fu(builtin)h(do)s(es)g(not)h(accept)
+h(signal)f(names)f(with)g(a)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154
+3096 y(39.)61 b(The)38 b Ft(export)f Fu(and)g Ft(readonly)f
+Fu(builtin)i(commands)g(displa)m(y)h(their)f(output)g(in)g(the)h
+(format)g(re-)330 3206 y(quired)30 b(b)m(y)g Fm(posix)p
+Fu(.)154 3339 y(40.)61 b(The)30 b Ft(trap)f Fu(builtin)h(displa)m(ys)g
+(signal)i(names)e(without)g(the)h(leading)g Ft(SIG)p
+Fu(.)154 3471 y(41.)61 b(The)39 b Ft(trap)e Fu(builtin)i(do)s(esn't)g
+(c)m(hec)m(k)h(the)g(\014rst)e(argumen)m(t)i(for)e(a)i(p)s(ossible)e
+(signal)i(sp)s(eci\014cation)330 3581 y(and)30 b(rev)m(ert)i(the)e
+(signal)i(handling)e(to)h(the)g(original)h(disp)s(osition)e(if)h(it)g
+(is,)g(unless)f(that)h(argumen)m(t)330 3690 y(consists)e(solely)g(of)g
+(digits)g(and)f(is)g(a)h(v)-5 b(alid)29 b(signal)g(n)m(um)m(b)s(er.)38
+b(If)28 b(users)g(w)m(an)m(t)h(to)g(reset)g(the)g(handler)330
+3800 y(for)h(a)g(giv)m(en)h(signal)g(to)f(the)h(original)g(disp)s
+(osition,)f(they)g(should)f(use)h(`)p Ft(-)p Fu(')g(as)g(the)g(\014rst)
+f(argumen)m(t.)154 3933 y(42.)61 b(The)21 b Ft(.)h Fu(and)f
+Ft(source)f Fu(builtins)h(do)g(not)h(searc)m(h)h(the)f(curren)m(t)f
+(directory)h(for)g(the)g(\014lename)f(argumen)m(t)330
+4042 y(if)30 b(it)h(is)g(not)f(found)f(b)m(y)i(searc)m(hing)g
+Ft(PATH)p Fu(.)154 4175 y(43.)61 b(Enabling)21 b Fm(posix)g
+Fu(mo)s(de)g(has)g(the)g(e\013ect)i(of)e(setting)i(the)e
+Ft(inherit_errexit)d Fu(option,)23 b(so)f(subshells)330
+4284 y(spa)m(wned)27 b(to)i(execute)g(command)e(substitutions)h
+(inherit)f(the)h(v)-5 b(alue)28 b(of)g(the)g Ft(-e)f
+Fu(option)h(from)g(the)330 4394 y(paren)m(t)37 b(shell.)62
+b(When)37 b(the)g Ft(inherit_errexit)c Fu(option)38 b(is)f(not)h
+(enabled,)h(Bash)e(clears)h(the)g Ft(-e)330 4504 y Fu(option)31
+b(in)f(suc)m(h)g(subshells.)154 4636 y(44.)61 b(Enabling)32
+b Fm(posix)f Fu(mo)s(de)h(has)g(the)h(e\013ect)g(of)g(setting)g(the)g
+Ft(shift_verbose)28 b Fu(option,)34 b(so)e(n)m(umeric)330
+4746 y(argumen)m(ts)f(to)g Ft(shift)f Fu(that)h(exceed)h(the)e(n)m(um)m
+(b)s(er)g(of)h(p)s(ositional)g(parameters)g(will)g(result)g(in)f(an)330
+4855 y(error)g(message.)154 4988 y(45.)61 b(When)43 b(the)g
+Ft(alias)f Fu(builtin)g(displa)m(ys)i(alias)g(de\014nitions,)i(it)d(do)
+s(es)g(not)g(displa)m(y)h(them)f(with)g(a)330 5098 y(leading)31
+b(`)p Ft(alias)e Fu(')i(unless)f(the)g Ft(-p)g Fu(option)h(is)f
+(supplied.)154 5230 y(46.)61 b(When)40 b(the)g Ft(set)f
+Fu(builtin)h(is)g(in)m(v)m(ok)m(ed)h(without)f(options,)j(it)e(do)s(es)
+f(not)g(displa)m(y)g(shell)g(function)330 5340 y(names)30
+b(and)g(de\014nitions.)p eop end
+%%Page: 102 108
+TeXDict begin 102 107 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(102)154 299 y(47.)61
+b(When)36 b(the)g Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok)m(ed)i
+(without)e(options,)i(it)f(displa)m(ys)f(v)-5 b(ariable)37
+b(v)-5 b(alues)37 b(without)330 408 y(quotes,)26 b(unless)d(they)i(con)
+m(tain)g(shell)f(metac)m(haracters,)k(ev)m(en)d(if)f(the)g(result)g
+(con)m(tains)i(nonprin)m(ting)330 518 y(c)m(haracters.)154
+653 y(48.)61 b(When)35 b(the)g Ft(cd)f Fu(builtin)h(is)g(in)m(v)m(ok)m
+(ed)i(in)d Fr(logical)41 b Fu(mo)s(de,)36 b(and)f(the)g(pathname)g
+(constructed)g(from)330 762 y Ft($PWD)i Fu(and)h(the)h(directory)f
+(name)h(supplied)e(as)i(an)f(argumen)m(t)h(do)s(es)f(not)g(refer)h(to)g
+(an)f(existing)330 872 y(directory)-8 b(,)32 b Ft(cd)d
+Fu(will)i(fail)g(instead)g(of)f(falling)h(bac)m(k)h(to)f
+Fr(ph)m(ysical)j Fu(mo)s(de.)154 1006 y(49.)61 b(When)37
+b(the)h Ft(cd)f Fu(builtin)g(cannot)h(c)m(hange)h(a)f(directory)g(b)s
+(ecause)g(the)g(length)g(of)f(the)h(pathname)330 1116
+y(constructed)52 b(from)f Ft($PWD)f Fu(and)g(the)i(directory)g(name)f
+(supplied)f(as)i(an)f(argumen)m(t)h(exceeds)330 1225
+y Fr(P)-8 b(A)g(TH)p 584 1225 28 4 v 41 w(MAX)42 b Fu(when)31
+b(all)j(sym)m(b)s(olic)e(links)h(are)f(expanded,)h Ft(cd)f
+Fu(will)g(fail)h(instead)g(of)g(attempting)330 1335 y(to)e(use)f(only)h
+(the)f(supplied)f(directory)i(name.)154 1469 y(50.)61
+b(The)36 b Ft(pwd)f Fu(builtin)h(v)m(eri\014es)h(that)g(the)f(v)-5
+b(alue)37 b(it)g(prin)m(ts)e(is)i(the)f(same)h(as)f(the)h(curren)m(t)f
+(directory)-8 b(,)330 1579 y(ev)m(en)31 b(if)f(it)h(is)g(not)f(ask)m
+(ed)h(to)g(c)m(hec)m(k)h(the)f(\014le)f(system)h(with)f(the)h
+Ft(-P)e Fu(option.)154 1714 y(51.)61 b(When)35 b(listing)g(the)g
+(history)-8 b(,)36 b(the)f Ft(fc)g Fu(builtin)f(do)s(es)g(not)h
+(include)g(an)f(indication)i(of)f(whether)f(or)330 1823
+y(not)d(a)f(history)h(en)m(try)f(has)g(b)s(een)g(mo)s(di\014ed.)154
+1958 y(52.)61 b(The)30 b(default)g(editor)h(used)f(b)m(y)g
+Ft(fc)g Fu(is)g Ft(ed)p Fu(.)154 2092 y(53.)61 b(The)37
+b Ft(type)g Fu(and)g Ft(command)f Fu(builtins)i(will)g(not)g(rep)s(ort)
+f(a)i(non-executable)g(\014le)f(as)g(ha)m(ving)h(b)s(een)330
+2202 y(found,)26 b(though)h(the)g(shell)g(will)g(attempt)h(to)g
+(execute)g(suc)m(h)f(a)g(\014le)g(if)g(it)g(is)g(the)g(only)g(so-named)
+g(\014le)330 2311 y(found)i(in)h Ft($PATH)p Fu(.)154
+2446 y(54.)61 b(The)33 b Ft(vi)f Fu(editing)i(mo)s(de)f(will)g(in)m(v)m
+(ok)m(e)i(the)e Ft(vi)g Fu(editor)h(directly)f(when)f(the)i(`)p
+Ft(v)p Fu(')f(command)g(is)g(run,)330 2555 y(instead)e(of)f(c)m(hec)m
+(king)i Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 2690
+y(55.)61 b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j
+(Bash)d(do)s(es)g(not)g(attempt)h(to)g(in)m(terpret)f(an)m(y)h(ar-)330
+2800 y(gumen)m(ts)35 b(to)g Ft(echo)e Fu(as)i(options.)54
+b(Eac)m(h)35 b(argumen)m(t)g(is)f(displa)m(y)m(ed,)j(after)e(escap)s(e)
+g(c)m(haracters)h(are)330 2909 y(con)m(v)m(erted.)154
+3044 y(56.)61 b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m
+(k)g(size)g(of)g(512)g(b)m(ytes)g(for)f(the)h Ft(-c)f
+Fu(and)g Ft(-f)f Fu(options.)154 3178 y(57.)61 b(The)39
+b(arriv)-5 b(al)41 b(of)f Ft(SIGCHLD)e Fu(when)h(a)h(trap)g(is)g(set)h
+(on)f Ft(SIGCHLD)e Fu(do)s(es)h(not)h(in)m(terrupt)g(the)g
+Ft(wait)330 3288 y Fu(builtin)c(and)h(cause)g(it)h(to)f(return)f
+(immediately)-8 b(.)62 b(The)37 b(trap)f(command)h(is)g(run)e(once)j
+(for)f(eac)m(h)330 3397 y(c)m(hild)31 b(that)g(exits.)154
+3532 y(58.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m
+(terrupted)h(b)m(y)g(a)h(signal)f(for)g(whic)m(h)g(a)h(trap)f(has)g(b)s
+(een)f(set.)40 b(If)27 b(Bash)330 3641 y(receiv)m(es)41
+b(a)f(trapp)s(ed)e(signal)i(while)f(executing)h Ft(read)p
+Fu(,)h(the)e(trap)h(handler)e(executes)i(and)f Ft(read)330
+3751 y Fu(returns)29 b(an)h(exit)i(status)e(greater)i(than)e(128.)154
+3885 y(59.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e
+(pro)s(cess's)h(status)g(from)f(the)h(list)g(of)g(suc)m(h)f(statuses)h
+(after)330 3995 y(the)k Ft(wait)e Fu(builtin)h(is)g(used)g(to)h(obtain)
+g(it.)275 4154 y(There)j(is)g(other)h Fm(posix)f Fu(b)s(eha)m(vior)h
+(that)g(Bash)g(do)s(es)f(not)h(implemen)m(t)g(b)m(y)g(default)f(ev)m
+(en)i(when)d(in)150 4264 y Fm(posix)d Fu(mo)s(de.)40
+b(Sp)s(eci\014cally:)199 4399 y(1.)61 b(The)30 b Ft(fc)f
+Fu(builtin)h(c)m(hec)m(ks)i Ft($EDITOR)c Fu(as)j(a)f(program)g(to)h
+(edit)g(history)f(en)m(tries)h(if)f Ft(FCEDIT)f Fu(is)h(unset,)330
+4508 y(rather)g(than)g(defaulting)h(directly)g(to)g Ft(ed)p
+Fu(.)40 b Ft(fc)30 b Fu(uses)g Ft(ed)g Fu(if)g Ft(EDITOR)f
+Fu(is)h(unset.)199 4643 y(2.)61 b(As)29 b(noted)g(ab)s(o)m(v)m(e,)i
+(Bash)e(requires)g(the)g Ft(xpg_echo)e Fu(option)j(to)g(b)s(e)e
+(enabled)h(for)g(the)g Ft(echo)f Fu(builtin)330 4752
+y(to)j(b)s(e)f(fully)g(conforman)m(t.)275 4912 y(Bash)c(can)g(b)s(e)f
+(con\014gured)h(to)g(b)s(e)g Fm(posix)p Fu(-conforman)m(t)g(b)m(y)g
+(default,)h(b)m(y)f(sp)s(ecifying)g(the)g Ft(--enable-)150
+5021 y(strict-posix-default)c Fu(to)27 b Ft(configure)e
+Fu(when)h(building)h(\(see)h(Section)g(10.8)g([Optional)g(F)-8
+b(eatures],)150 5131 y(page)31 b(150\).)p eop end
+%%Page: 103 109
+TeXDict begin 103 108 bop 3614 -116 a Fu(103)150 299
+y Fp(7)80 b(Job)54 b(Con)l(trol)150 518 y Fu(This)25
+b(c)m(hapter)i(discusses)f(what)g(job)f(con)m(trol)j(is,)f(ho)m(w)f(it)
+h(w)m(orks,)g(and)f(ho)m(w)g(Bash)g(allo)m(ws)h(y)m(ou)g(to)g(access)
+150 628 y(its)k(facilities.)150 863 y Fs(7.1)68 b(Job)45
+b(Con)l(trol)h(Basics)150 1022 y Fu(Job)27 b(con)m(trol)i(refers)e(to)h
+(the)g(abilit)m(y)h(to)f(selectiv)m(ely)j(stop)c(\(susp)s(end\))f(the)i
+(execution)h(of)e(pro)s(cesses)h(and)150 1132 y(con)m(tin)m(ue)38
+b(\(resume\))g(their)f(execution)h(at)g(a)g(later)g(p)s(oin)m(t.)61
+b(A)37 b(user)g(t)m(ypically)i(emplo)m(ys)f(this)f(facilit)m(y)150
+1241 y(via)27 b(an)e(in)m(teractiv)m(e)k(in)m(terface)f(supplied)d
+(join)m(tly)h(b)m(y)g(the)h(op)s(erating)f(system)g(k)m(ernel's)h
+(terminal)f(driv)m(er)150 1351 y(and)k(Bash.)275 1482
+y(The)23 b(shell)i(asso)s(ciates)h(a)f Fr(job)h Fu(with)e(eac)m(h)i
+(pip)s(eline.)38 b(It)25 b(k)m(eeps)f(a)h(table)h(of)e(curren)m(tly)h
+(executing)g(jobs,)150 1592 y(whic)m(h)33 b(ma)m(y)i(b)s(e)e(listed)h
+(with)f(the)h Ft(jobs)f Fu(command.)50 b(When)33 b(Bash)h(starts)g(a)g
+(job)g(async)m(hronously)-8 b(,)34 b(it)150 1701 y(prin)m(ts)c(a)h
+(line)f(that)h(lo)s(oks)g(lik)m(e:)390 1833 y Ft([1])47
+b(25647)150 1965 y Fu(indicating)34 b(that)g(this)f(job)g(is)g(job)g(n)
+m(um)m(b)s(er)f(1)i(and)f(that)g(the)h(pro)s(cess)f Fm(id)g
+Fu(of)g(the)h(last)g(pro)s(cess)f(in)g(the)150 2074 y(pip)s(eline)42
+b(asso)s(ciated)i(with)e(this)g(job)g(is)h(25647.)78
+b(All)43 b(of)g(the)g(pro)s(cesses)f(in)g(a)h(single)g(pip)s(eline)f
+(are)150 2184 y(mem)m(b)s(ers)30 b(of)g(the)h(same)f(job.)41
+b(Bash)30 b(uses)g(the)h Fr(job)h Fu(abstraction)f(as)g(the)g(basis)f
+(for)g(job)g(con)m(trol.)275 2315 y(T)-8 b(o)23 b(facilitate)j(the)d
+(implemen)m(tation)i(of)f(the)f(user)f(in)m(terface)j(to)f(job)f(con)m
+(trol,)j(the)d(op)s(erating)h(system)150 2425 y(main)m(tains)j(the)f
+(notion)h(of)f(a)g(curren)m(t)g(terminal)g(pro)s(cess)g(group)g
+Fm(id)p Fu(.)39 b(Mem)m(b)s(ers)26 b(of)g(this)g(pro)s(cess)f(group)150
+2534 y(\(pro)s(cesses)h(whose)g(pro)s(cess)g(group)g
+Fm(id)g Fu(is)h(equal)g(to)g(the)f(curren)m(t)g(terminal)h(pro)s(cess)f
+(group)f Fm(id)p Fu(\))i(receiv)m(e)150 2644 y(k)m(eyb)s
+(oard-generated)22 b(signals)g(suc)m(h)e(as)h Ft(SIGINT)p
+Fu(.)36 b(These)21 b(pro)s(cesses)g(are)g(said)g(to)g(b)s(e)g(in)f(the)
+h(foreground.)150 2754 y(Bac)m(kground)38 b(pro)s(cesses)f(are)h(those)
+g(whose)f(pro)s(cess)g(group)g Fm(id)h Fu(di\013ers)f(from)g(the)g
+(terminal's;)42 b(suc)m(h)150 2863 y(pro)s(cesses)24
+b(are)g(imm)m(une)g(to)g(k)m(eyb)s(oard-generated)h(signals.)40
+b(Only)23 b(foreground)g(pro)s(cesses)h(are)g(allo)m(w)m(ed)150
+2973 y(to)g(read)e(from)h(or,)h(if)f(the)g(user)f(so)i(sp)s(eci\014es)e
+(with)h Ft(stty)29 b(tostop)p Fu(,)23 b(write)g(to)g(the)h(terminal.)38
+b(Bac)m(kground)150 3082 y(pro)s(cesses)27 b(whic)m(h)g(attempt)h(to)f
+(read)g(from)g(\(write)g(to)h(when)e Ft(stty)j(tostop)d
+Fu(is)h(in)f(e\013ect\))j(the)e(terminal)150 3192 y(are)32
+b(sen)m(t)g(a)g Ft(SIGTTIN)e Fu(\()p Ft(SIGTTOU)p Fu(\))g(signal)i(b)m
+(y)g(the)g(k)m(ernel's)g(terminal)g(driv)m(er,)g(whic)m(h,)g(unless)f
+(caugh)m(t,)150 3302 y(susp)s(ends)d(the)i(pro)s(cess.)275
+3433 y(If)k(the)i(op)s(erating)g(system)f(on)h(whic)m(h)f(Bash)g(is)h
+(running)d(supp)s(orts)h(job)h(con)m(trol,)j(Bash)e(con)m(tains)150
+3543 y(facilities)30 b(to)f(use)f(it.)40 b(T)m(yping)28
+b(the)g Fr(susp)s(end)h Fu(c)m(haracter)h(\(t)m(ypically)g(`)p
+Ft(^Z)p Fu(',)f(Con)m(trol-Z\))g(while)f(a)g(pro)s(cess)150
+3652 y(is)42 b(running)f(causes)i(that)g(pro)s(cess)f(to)h(b)s(e)f
+(stopp)s(ed)f(and)h(returns)f(con)m(trol)j(to)f(Bash.)77
+b(T)m(yping)42 b(the)150 3762 y Fr(dela)m(y)m(ed)k(susp)s(end)f
+Fu(c)m(haracter)h(\(t)m(ypically)g(`)p Ft(^Y)p Fu(',)i(Con)m(trol-Y\))e
+(causes)e(the)h(pro)s(cess)e(to)i(b)s(e)f(stopp)s(ed)150
+3871 y(when)26 b(it)i(attempts)h(to)f(read)f(input)g(from)f(the)i
+(terminal,)h(and)e(con)m(trol)h(to)g(b)s(e)f(returned)f(to)j(Bash.)39
+b(The)150 3981 y(user)e(then)g(manipulates)h(the)g(state)h(of)f(this)f
+(job,)j(using)d(the)h Ft(bg)f Fu(command)g(to)h(con)m(tin)m(ue)h(it)f
+(in)g(the)150 4091 y(bac)m(kground,)g(the)f Ft(fg)g Fu(command)f(to)i
+(con)m(tin)m(ue)g(it)f(in)f(the)h(foreground,)h(or)f(the)g
+Ft(kill)f Fu(command)g(to)150 4200 y(kill)27 b(it.)40
+b(A)27 b(`)p Ft(^Z)p Fu(')g(tak)m(es)h(e\013ect)g(immediately)-8
+b(,)29 b(and)d(has)h(the)f(additional)i(side)e(e\013ect)j(of)d(causing)
+h(p)s(ending)150 4310 y(output)j(and)g(t)m(yp)s(eahead)h(to)g(b)s(e)e
+(discarded.)275 4441 y(There)j(are)g(a)h(n)m(um)m(b)s(er)e(of)i(w)m(a)m
+(ys)g(to)h(refer)e(to)h(a)g(job)f(in)g(the)h(shell.)47
+b(The)32 b(c)m(haracter)i(`)p Ft(\045)p Fu(')f(in)m(tro)s(duces)150
+4551 y(a)e(job)f(sp)s(eci\014cation)h(\()p Fr(jobsp)s(ec)6
+b Fu(\).)275 4682 y(Job)31 b(n)m(um)m(b)s(er)f Ft(n)h
+Fu(ma)m(y)h(b)s(e)f(referred)g(to)h(as)g(`)p Ft(\045n)p
+Fu('.)44 b(The)31 b(sym)m(b)s(ols)g(`)p Ft(\045\045)p
+Fu(')h(and)f(`)p Ft(\045+)p Fu(')g(refer)h(to)g(the)g(shell's)150
+4792 y(notion)k(of)f(the)g(curren)m(t)g(job,)h(whic)m(h)f(is)g(the)g
+(last)h(job)f(stopp)s(ed)f(while)h(it)h(w)m(as)g(in)e(the)i(foreground)
+e(or)150 4902 y(started)27 b(in)g(the)g(bac)m(kground.)40
+b(A)27 b(single)g(`)p Ft(\045)p Fu(')g(\(with)g(no)g(accompan)m(ying)i
+(job)d(sp)s(eci\014cation\))i(also)g(refers)150 5011
+y(to)k(the)e(curren)m(t)h(job.)42 b(The)30 b(previous)g(job)h(ma)m(y)g
+(b)s(e)f(referenced)h(using)f(`)p Ft(\045-)p Fu('.)42
+b(If)30 b(there)h(is)g(only)g(a)g(single)150 5121 y(job,)g(`)p
+Ft(\045+)p Fu(')g(and)f(`)p Ft(\045-)p Fu(')h(can)h(b)s(oth)e(b)s(e)g
+(used)h(to)g(refer)g(to)h(that)g(job.)42 b(In)30 b(output)h(p)s
+(ertaining)g(to)g(jobs)g(\(e.g.,)150 5230 y(the)39 b(output)f(of)g(the)
+h Ft(jobs)e Fu(command\),)k(the)d(curren)m(t)h(job)f(is)g(alw)m(a)m(ys)
+i(\015agged)f(with)f(a)h(`)p Ft(+)p Fu(',)i(and)d(the)150
+5340 y(previous)30 b(job)g(with)g(a)h(`)p Ft(-)p Fu('.)p
+eop end
+%%Page: 104 110
+TeXDict begin 104 109 bop 150 -116 a Fu(Chapter)30 b(7:)41
+b(Job)30 b(Con)m(trol)2526 b(104)275 299 y(A)38 b(job)g(ma)m(y)h(also)g
+(b)s(e)f(referred)f(to)j(using)d(a)i(pre\014x)e(of)i(the)f(name)h(used)
+e(to)i(start)g(it,)i(or)e(using)f(a)150 408 y(substring)29
+b(that)i(app)s(ears)f(in)g(its)h(command)f(line.)41 b(F)-8
+b(or)31 b(example,)g(`)p Ft(\045ce)p Fu(')f(refers)g(to)h(a)g(stopp)s
+(ed)e Ft(ce)h Fu(job.)150 518 y(Using)d(`)p Ft(\045?ce)p
+Fu(',)g(on)f(the)h(other)g(hand,)g(refers)f(to)h(an)m(y)g(job)g(con)m
+(taining)h(the)f(string)f(`)p Ft(ce)p Fu(')h(in)f(its)h(command)150
+628 y(line.)41 b(If)30 b(the)h(pre\014x)e(or)h(substring)f(matc)m(hes)j
+(more)e(than)h(one)f(job,)h(Bash)f(rep)s(orts)g(an)g(error.)275
+767 y(Simply)g(naming)h(a)g(job)g(can)g(b)s(e)f(used)h(to)g(bring)f(it)
+i(in)m(to)g(the)f(foreground:)41 b(`)p Ft(\0451)p Fu(')31
+b(is)g(a)h(synon)m(ym)e(for)150 876 y(`)p Ft(fg)g(\0451)p
+Fu(',)i(bringing)f(job)g(1)g(from)g(the)h(bac)m(kground)f(in)m(to)i
+(the)e(foreground.)44 b(Similarly)-8 b(,)32 b(`)p Ft(\0451)e(&)p
+Fu(')i(resumes)150 986 y(job)e(1)h(in)f(the)g(bac)m(kground,)h(equiv)-5
+b(alen)m(t)32 b(to)f(`)p Ft(bg)f(\0451)p Fu(')275 1125
+y(The)g(shell)i(learns)f(immediately)i(whenev)m(er)e(a)h(job)f(c)m
+(hanges)h(state.)45 b(Normally)-8 b(,)33 b(Bash)e(w)m(aits)i(un)m(til)
+150 1234 y(it)25 b(is)g(ab)s(out)f(to)i(prin)m(t)e(a)h(prompt)f(b)s
+(efore)g(rep)s(orting)h(c)m(hanges)g(in)g(a)g(job's)f(status)h(so)g(as)
+g(to)g(not)g(in)m(terrupt)150 1344 y(an)m(y)k(other)f(output.)40
+b(If)28 b(the)g Ft(-b)g Fu(option)g(to)h(the)g Ft(set)e
+Fu(builtin)h(is)g(enabled,)h(Bash)g(rep)s(orts)e(suc)m(h)h(c)m(hanges)
+150 1453 y(immediately)d(\(see)g(Section)g(4.3.1)g([The)f(Set)g
+(Builtin],)i(page)f(61\).)40 b(An)m(y)24 b(trap)f(on)h
+Ft(SIGCHLD)e Fu(is)i(executed)150 1563 y(for)30 b(eac)m(h)i(c)m(hild)e
+(pro)s(cess)g(that)h(exits.)275 1702 y(If)25 b(an)h(attempt)h(to)g
+(exit)g(Bash)f(is)h(made)f(while)g(jobs)f(are)i(stopp)s(ed,)f(\(or)h
+(running,)e(if)h(the)g Ft(checkjobs)150 1812 y Fu(option)e(is)f
+(enabled)h({)g(see)g(Section)g(4.3.2)h([The)e(Shopt)g(Builtin],)j(page)
+e(65\),)i(the)e(shell)f(prin)m(ts)g(a)h(w)m(arning)150
+1921 y(message,)k(and)c(if)i(the)f Ft(checkjobs)e Fu(option)j(is)f
+(enabled,)i(lists)e(the)h(jobs)f(and)f(their)i(statuses.)39
+b(The)25 b Ft(jobs)150 2031 y Fu(command)36 b(ma)m(y)h(then)f(b)s(e)f
+(used)g(to)i(insp)s(ect)f(their)g(status.)59 b(If)36
+b(a)g(second)g(attempt)i(to)f(exit)g(is)f(made)150 2140
+y(without)e(an)f(in)m(terv)m(ening)i(command,)f(Bash)g(do)s(es)f(not)h
+(prin)m(t)g(another)f(w)m(arning,)i(and)e(an)m(y)h(stopp)s(ed)150
+2250 y(jobs)c(are)h(terminated.)275 2389 y(When)f(the)h(shell)g(is)f(w)
+m(aiting)i(for)f(a)g(job)f(or)h(pro)s(cess)f(using)g(the)h
+Ft(wait)f Fu(builtin,)g(and)g(job)h(con)m(trol)h(is)150
+2498 y(enabled,)27 b Ft(wait)f Fu(will)g(return)g(when)f(the)h(job)g(c)
+m(hanges)i(state.)41 b(The)25 b Ft(-f)h Fu(option)h(will)g(force)g
+Ft(wait)e Fu(to)i(w)m(ait)150 2608 y(un)m(til)k(the)f(job)g(or)h(pro)s
+(cess)f(terminates)h(b)s(efore)f(returning.)150 2855
+y Fs(7.2)68 b(Job)45 b(Con)l(trol)h(Builtins)150 3042
+y Ft(bg)870 3179 y(bg)h([)p Fj(jobspec)f Ft(...)o(])630
+3315 y Fu(Resume)24 b(eac)m(h)h(susp)s(ended)d(job)i
+Fr(jobsp)s(ec)29 b Fu(in)24 b(the)g(bac)m(kground,)h(as)g(if)f(it)h
+(had)e(b)s(een)g(started)630 3425 y(with)32 b(`)p Ft(&)p
+Fu('.)45 b(If)31 b Fr(jobsp)s(ec)37 b Fu(is)32 b(not)g(supplied,)f(the)
+h(curren)m(t)g(job)f(is)h(used.)45 b(The)31 b(return)g(status)630
+3535 y(is)i(zero)g(unless)f(it)h(is)g(run)e(when)h(job)g(con)m(trol)i
+(is)f(not)g(enabled,)h(or,)f(when)f(run)f(with)h(job)630
+3644 y(con)m(trol)h(enabled,)g(an)m(y)f Fr(jobsp)s(ec)37
+b Fu(w)m(as)32 b(not)g(found)f(or)g(sp)s(eci\014es)h(a)g(job)g(that)g
+(w)m(as)g(started)630 3754 y(without)e(job)g(con)m(trol.)150
+3918 y Ft(fg)870 4054 y(fg)47 b([)p Fj(jobspec)p Ft(])630
+4191 y Fu(Resume)c(the)g(job)g Fr(jobsp)s(ec)48 b Fu(in)43
+b(the)g(foreground)g(and)f(mak)m(e)j(it)e(the)h(curren)m(t)f(job.)78
+b(If)630 4301 y Fr(jobsp)s(ec)41 b Fu(is)c(not)f(supplied,)h(the)f
+(curren)m(t)h(job)f(is)g(used.)58 b(The)36 b(return)f(status)h(is)h
+(that)g(of)630 4410 y(the)d(command)g(placed)h(in)m(to)g(the)f
+(foreground,)g(or)g(non-zero)h(if)f(run)f(when)g(job)g(con)m(trol)630
+4520 y(is)i(disabled)g(or,)i(when)d(run)g(with)h(job)g(con)m(trol)h
+(enabled,)h Fr(jobsp)s(ec)j Fu(do)s(es)35 b(not)h(sp)s(ecify)f(a)630
+4629 y(v)-5 b(alid)31 b(job)f(or)g Fr(jobsp)s(ec)35 b
+Fu(sp)s(eci\014es)30 b(a)h(job)f(that)h(w)m(as)g(started)g(without)f
+(job)g(con)m(trol.)150 4793 y Ft(jobs)870 4930 y(jobs)47
+b([-lnprs])e([)p Fj(jobspec)p Ft(])870 5039 y(jobs)i(-x)g
+Fj(command)f Ft([)p Fj(arguments)p Ft(])630 5176 y Fu(The)30
+b(\014rst)f(form)h(lists)h(the)g(activ)m(e)h(jobs.)41
+b(The)30 b(options)g(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630
+5340 y Ft(-l)384 b Fu(List)31 b(pro)s(cess)f Fm(id)p
+Fu(s)g(in)g(addition)h(to)g(the)f(normal)h(information.)p
+eop end
+%%Page: 105 111
+TeXDict begin 105 110 bop 150 -116 a Fu(Chapter)30 b(7:)41
+b(Job)30 b(Con)m(trol)2526 b(105)630 299 y Ft(-n)384
+b Fu(Displa)m(y)26 b(information)f(only)h(ab)s(out)e(jobs)h(that)g(ha)m
+(v)m(e)i(c)m(hanged)e(status)h(since)1110 408 y(the)31
+b(user)e(w)m(as)i(last)g(noti\014ed)f(of)h(their)f(status.)630
+570 y Ft(-p)384 b Fu(List)31 b(only)f(the)h(pro)s(cess)f
+Fm(id)g Fu(of)h(the)f(job's)g(pro)s(cess)g(group)g(leader.)630
+732 y Ft(-r)384 b Fu(Displa)m(y)32 b(only)e(running)f(jobs.)630
+894 y Ft(-s)384 b Fu(Displa)m(y)32 b(only)e(stopp)s(ed)f(jobs.)630
+1056 y(If)23 b Fr(jobsp)s(ec)28 b Fu(is)23 b(giv)m(en,)i(output)e(is)g
+(restricted)h(to)g(information)f(ab)s(out)g(that)h(job.)37
+b(If)23 b Fr(jobsp)s(ec)630 1165 y Fu(is)30 b(not)h(supplied,)e(the)i
+(status)g(of)f(all)h(jobs)f(is)h(listed.)630 1301 y(If)k(the)g
+Ft(-x)f Fu(option)i(is)f(supplied,)g Ft(jobs)f Fu(replaces)i(an)m(y)f
+Fr(jobsp)s(ec)40 b Fu(found)34 b(in)h Fr(command)j Fu(or)630
+1410 y Fr(argumen)m(ts)j Fu(with)c(the)h(corresp)s(onding)e(pro)s(cess)
+h(group)f Fm(id)p Fu(,)k(and)c(executes)j Fr(command)p
+Fu(,)630 1520 y(passing)30 b(it)h Fr(argumen)m(t)r Fu(s,)g(returning)f
+(its)g(exit)i(status.)150 1682 y Ft(kill)870 1817 y(kill)47
+b([-s)g Fj(sigspec)p Ft(])e([-n)i Fj(signum)p Ft(])f([-)p
+Fj(sigspec)p Ft(])f Fj(jobspec)h Ft(or)h Fj(pid)870 1927
+y Ft(kill)g(-l|-L)f([)p Fj(exit_status)p Ft(])630 2063
+y Fu(Send)22 b(a)i(signal)g(sp)s(eci\014ed)f(b)m(y)g
+Fr(sigsp)s(ec)29 b Fu(or)24 b Fr(sign)m(um)f Fu(to)h(the)g(pro)s(cess)f
+(named)g(b)m(y)g(job)g(sp)s(eci\014-)630 2172 y(cation)k
+Fr(jobsp)s(ec)j Fu(or)25 b(pro)s(cess)g Fm(id)h Fr(pid)p
+Fu(.)38 b Fr(sigsp)s(ec)31 b Fu(is)25 b(either)h(a)g(case-insensitiv)m
+(e)i(signal)e(name)630 2282 y(suc)m(h)37 b(as)g Ft(SIGINT)f
+Fu(\(with)h(or)g(without)g(the)g Ft(SIG)g Fu(pre\014x\))f(or)h(a)h
+(signal)g(n)m(um)m(b)s(er;)h Fr(sign)m(um)630 2392 y
+Fu(is)g(a)f(signal)i(n)m(um)m(b)s(er.)63 b(If)39 b Fr(sigsp)s(ec)44
+b Fu(and)38 b Fr(sign)m(um)g Fu(are)h(not)g(presen)m(t,)h
+Ft(SIGTERM)d Fu(is)h(used.)630 2501 y(The)27 b Ft(-l)h
+Fu(option)g(lists)h(the)f(signal)h(names.)39 b(If)28
+b(an)m(y)g(argumen)m(ts)h(are)f(supplied)f(when)g Ft(-l)g
+Fu(is)630 2611 y(giv)m(en,)32 b(the)g(names)e(of)i(the)f(signals)g
+(corresp)s(onding)f(to)i(the)f(argumen)m(ts)g(are)h(listed,)g(and)630
+2720 y(the)c(return)f(status)h(is)g(zero.)41 b Fr(exit)p
+1796 2720 28 4 v 41 w(status)32 b Fu(is)c(a)g(n)m(um)m(b)s(er)f(sp)s
+(ecifying)g(a)i(signal)f(n)m(um)m(b)s(er)f(or)630 2830
+y(the)h(exit)h(status)g(of)f(a)h(pro)s(cess)e(terminated)i(b)m(y)f(a)h
+(signal.)40 b(The)28 b Ft(-L)g Fu(option)g(is)g(equiv)-5
+b(alen)m(t)630 2939 y(to)34 b Ft(-l)p Fu(.)47 b(The)32
+b(return)g(status)h(is)g(zero)g(if)g(at)g(least)h(one)f(signal)h(w)m
+(as)f(successfully)g(sen)m(t,)h(or)630 3049 y(non-zero)d(if)f(an)h
+(error)f(o)s(ccurs)g(or)g(an)g(in)m(v)-5 b(alid)31 b(option)g(is)f
+(encoun)m(tered.)150 3211 y Ft(wait)870 3346 y(wait)47
+b([-fn])f([)p Fj(jobspec)g Ft(or)h Fj(pid)g Ft(...)o(])630
+3482 y Fu(W)-8 b(ait)28 b(un)m(til)f(the)f(c)m(hild)h(pro)s(cess)f(sp)s
+(eci\014ed)g(b)m(y)g(eac)m(h)h(pro)s(cess)f Fm(id)h Fr(pid)i
+Fu(or)d(job)g(sp)s(eci\014cation)630 3592 y Fr(jobsp)s(ec)j
+Fu(exits)c(and)f(return)g(the)g(exit)h(status)g(of)g(the)f(last)h
+(command)g(w)m(aited)g(for.)39 b(If)23 b(a)i(job)630
+3701 y(sp)s(ec)j(is)g(giv)m(en,)i(all)f(pro)s(cesses)f(in)g(the)g(job)g
+(are)h(w)m(aited)g(for.)40 b(If)27 b(no)i(argumen)m(ts)f(are)h(giv)m
+(en,)630 3811 y(all)f(curren)m(tly)g(activ)m(e)i(c)m(hild)e(pro)s
+(cesses)f(are)h(w)m(aited)g(for,)g(and)f(the)h(return)e(status)i(is)g
+(zero.)630 3921 y(If)36 b(the)g Ft(-n)f Fu(option)i(is)f(supplied,)g
+Ft(wait)f Fu(w)m(aits)i(for)f(an)m(y)g(job)g(to)h(terminate)g(and)e
+(returns)630 4030 y(its)i(exit)g(status.)60 b(If)36 b(the)g
+Ft(-f)g Fu(option)h(is)g(supplied,)f(and)g(job)g(con)m(trol)i(is)f
+(enabled,)h Ft(wait)630 4140 y Fu(forces)g(eac)m(h)h
+Fr(pid)i Fu(or)d Fr(jobsp)s(ec)43 b Fu(to)38 b(terminate)h(b)s(efore)e
+(returning)g(its)i(status,)h(in)m(tead)f(of)630 4249
+y(returning)29 b(when)f(it)i(c)m(hanges)h(status.)41
+b(If)29 b(neither)g Fr(jobsp)s(ec)35 b Fu(nor)29 b Fr(pid)j
+Fu(sp)s(eci\014es)d(an)h(activ)m(e)630 4359 y(c)m(hild)h(pro)s(cess)f
+(of)g(the)h(shell,)g(the)f(return)f(status)i(is)f(127.)150
+4521 y Ft(disown)870 4656 y(disown)46 b([-ar])g([-h])h([)p
+Fj(jobspec)f Ft(...)h(|)g Fj(pid)g Ft(...)g(])630 4792
+y Fu(Without)33 b(options,)h(remo)m(v)m(e)g(eac)m(h)f
+Fr(jobsp)s(ec)38 b Fu(from)32 b(the)h(table)g(of)g(activ)m(e)h(jobs.)47
+b(If)32 b(the)h Ft(-h)630 4902 y Fu(option)j(is)f(giv)m(en,)i(the)f
+(job)f(is)g(not)g(remo)m(v)m(ed)h(from)f(the)g(table,)j(but)c(is)i
+(mark)m(ed)f(so)g(that)630 5011 y Ft(SIGHUP)e Fu(is)j(not)f(sen)m(t)h
+(to)g(the)f(job)g(if)g(the)g(shell)h(receiv)m(es)h(a)e
+Ft(SIGHUP)p Fu(.)54 b(If)34 b Fr(jobsp)s(ec)40 b Fu(is)c(not)630
+5121 y(presen)m(t,)41 b(and)d(neither)h(the)g Ft(-a)f
+Fu(nor)g(the)h Ft(-r)f Fu(option)h(is)g(supplied,)g(the)g(curren)m(t)g
+(job)f(is)630 5230 y(used.)g(If)25 b(no)h Fr(jobsp)s(ec)k
+Fu(is)c(supplied,)f(the)h Ft(-a)f Fu(option)h(means)g(to)g(remo)m(v)m
+(e)h(or)e(mark)h(all)g(jobs;)630 5340 y(the)31 b Ft(-r)e
+Fu(option)i(without)g(a)f Fr(jobsp)s(ec)36 b Fu(argumen)m(t)30
+b(restricts)h(op)s(eration)g(to)g(running)e(jobs.)p eop
+end
+%%Page: 106 112
+TeXDict begin 106 111 bop 150 -116 a Fu(Chapter)30 b(7:)41
+b(Job)30 b(Con)m(trol)2526 b(106)150 299 y Ft(suspend)870
+433 y(suspend)46 b([-f])630 568 y Fu(Susp)s(end)31 b(the)i(execution)h
+(of)g(this)f(shell)g(un)m(til)h(it)g(receiv)m(es)h(a)e
+Ft(SIGCONT)f Fu(signal.)50 b(A)33 b(login)630 677 y(shell)28
+b(cannot)g(b)s(e)f(susp)s(ended;)g(the)g Ft(-f)g Fu(option)i(can)f(b)s
+(e)f(used)g(to)h(o)m(v)m(erride)h(this)e(and)g(force)630
+787 y(the)k(susp)s(ension.)275 946 y(When)f(job)f(con)m(trol)j(is)e
+(not)h(activ)m(e,)i(the)d Ft(kill)f Fu(and)h Ft(wait)f
+Fu(builtins)g(do)h(not)h(accept)h Fr(jobsp)s(ec)j Fu(argu-)150
+1056 y(men)m(ts.)41 b(They)30 b(m)m(ust)g(b)s(e)g(supplied)f(pro)s
+(cess)h Fm(id)p Fu(s.)150 1297 y Fs(7.3)68 b(Job)45 b(Con)l(trol)h(V)
+-11 b(ariables)150 1481 y Ft(auto_resume)630 1591 y Fu(This)31
+b(v)-5 b(ariable)32 b(con)m(trols)g(ho)m(w)g(the)f(shell)h(in)m
+(teracts)h(with)e(the)h(user)e(and)h(job)g(con)m(trol.)45
+b(If)630 1700 y(this)28 b(v)-5 b(ariable)30 b(exists)f(then)f(single)h
+(w)m(ord)f(simple)h(commands)f(without)g(redirections)i(are)630
+1810 y(treated)h(as)g(candidates)f(for)g(resumption)g(of)g(an)g
+(existing)h(job.)41 b(There)29 b(is)h(no)h(am)m(biguit)m(y)630
+1919 y(allo)m(w)m(ed;)f(if)d(there)g(is)g(more)g(than)f(one)h(job)g(b)s
+(eginning)f(with)g(the)h(string)g(t)m(yp)s(ed,)g(then)g(the)630
+2029 y(most)j(recen)m(tly)h(accessed)f(job)f(will)h(b)s(e)f(selected.)
+42 b(The)29 b(name)g(of)h(a)g(stopp)s(ed)e(job,)i(in)f(this)630
+2139 y(con)m(text,)h(is)e(the)g(command)g(line)g(used)f(to)h(start)g
+(it.)41 b(If)27 b(this)h(v)-5 b(ariable)28 b(is)g(set)g(to)h(the)e(v)-5
+b(alue)630 2248 y(`)p Ft(exact)p Fu(',)33 b(the)g(string)g(supplied)f
+(m)m(ust)h(matc)m(h)g(the)h(name)f(of)g(a)g(stopp)s(ed)f(job)h
+(exactly;)j(if)630 2358 y(set)29 b(to)h(`)p Ft(substring)p
+Fu(',)d(the)i(string)g(supplied)e(needs)i(to)g(matc)m(h)h(a)f
+(substring)f(of)h(the)g(name)630 2467 y(of)38 b(a)f(stopp)s(ed)g(job.)
+62 b(The)37 b(`)p Ft(substring)p Fu(')e(v)-5 b(alue)38
+b(pro)m(vides)f(functionalit)m(y)i(analogous)g(to)630
+2577 y(the)c(`)p Ft(\045?)p Fu(')g(job)g Fm(id)g Fu(\(see)h(Section)g
+(7.1)g([Job)e(Con)m(trol)i(Basics],)i(page)e(103\).)56
+b(If)34 b(set)i(to)g(an)m(y)630 2687 y(other)c(v)-5 b(alue,)32
+b(the)g(supplied)e(string)i(m)m(ust)f(b)s(e)g(a)h(pre\014x)f(of)h(a)g
+(stopp)s(ed)e(job's)i(name;)g(this)630 2796 y(pro)m(vides)e
+(functionalit)m(y)i(analogous)g(to)f(the)g(`)p Ft(\045)p
+Fu(')f(job)g Fm(id)p Fu(.)p eop end
+%%Page: 107 113
+TeXDict begin 107 112 bop 3614 -116 a Fu(107)150 299
+y Fp(8)80 b(Command)54 b(Line)f(Editing)150 635 y Fu(This)28
+b(c)m(hapter)i(describ)s(es)e(the)h(basic)g(features)h(of)f(the)g
+Fm(gnu)f Fu(command)h(line)g(editing)h(in)m(terface.)42
+b(Com-)150 745 y(mand)c(line)i(editing)f(is)g(pro)m(vided)g(b)m(y)g
+(the)g(Readline)h(library)-8 b(,)41 b(whic)m(h)e(is)g(used)f(b)m(y)h
+(sev)m(eral)h(di\013eren)m(t)150 855 y(programs,)34 b(including)e
+(Bash.)49 b(Command)32 b(line)i(editing)f(is)g(enabled)g(b)m(y)g
+(default)g(when)f(using)h(an)g(in-)150 964 y(teractiv)m(e)h(shell,)d
+(unless)g(the)g Ft(--noediting)d Fu(option)k(is)f(supplied)e(at)j
+(shell)f(in)m(v)m(o)s(cation.)45 b(Line)31 b(editing)150
+1074 y(is)g(also)h(used)f(when)f(using)h(the)g Ft(-e)g
+Fu(option)h(to)g(the)f Ft(read)f Fu(builtin)h(command)g(\(see)h
+(Section)g(4.2)h([Bash)150 1183 y(Builtins],)j(page)f(50\).)52
+b(By)35 b(default,)g(the)f(line)h(editing)f(commands)g(are)h(similar)f
+(to)h(those)f(of)g(Emacs.)150 1293 y(A)h(vi-st)m(yle)h(line)f(editing)g
+(in)m(terface)h(is)e(also)i(a)m(v)-5 b(ailable.)55 b(Line)34
+b(editing)h(can)g(b)s(e)f(enabled)g(at)h(an)m(y)g(time)150
+1402 y(using)h(the)g Ft(-o)30 b(emacs)35 b Fu(or)h Ft(-o)30
+b(vi)35 b Fu(options)i(to)g(the)f Ft(set)f Fu(builtin)h(command)g
+(\(see)h(Section)g(4.3.1)h([The)150 1512 y(Set)31 b(Builtin],)g(page)g
+(61\),)h(or)e(disabled)g(using)g(the)h Ft(+o)e(emacs)g
+Fu(or)i Ft(+o)e(vi)h Fu(options)h(to)g Ft(set)p Fu(.)150
+1804 y Fs(8.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)150
+1963 y Fu(The)30 b(follo)m(wing)i(paragraphs)d(describ)s(e)h(the)h
+(notation)g(used)f(to)h(represen)m(t)f(k)m(eystrok)m(es.)275
+2132 y(The)35 b(text)i Fj(C-k)f Fu(is)g(read)g(as)h(`Con)m(trol-K')g
+(and)f(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)h
+Ft(k)150 2242 y Fu(k)m(ey)31 b(is)g(pressed)e(while)h(the)h(Con)m(trol)
+g(k)m(ey)g(is)g(depressed.)275 2410 y(The)g(text)i Fj(M-k)e
+Fu(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s(es)f(the)h(c)m(haracter)
+h(pro)s(duced)e(when)f(the)i(Meta)150 2520 y(k)m(ey)i(\(if)f(y)m(ou)h
+(ha)m(v)m(e)g(one\))g(is)f(depressed,)g(and)f(the)h Ft(k)g
+Fu(k)m(ey)h(is)f(pressed.)48 b(The)32 b(Meta)j(k)m(ey)e(is)h(lab)s
+(eled)f Ft(ALT)150 2629 y Fu(on)c(man)m(y)h(k)m(eyb)s(oards.)40
+b(On)29 b(k)m(eyb)s(oards)g(with)h(t)m(w)m(o)h(k)m(eys)f(lab)s(eled)g
+Ft(ALT)e Fu(\(usually)i(to)g(either)g(side)g(of)g(the)150
+2739 y(space)h(bar\),)f(the)g Ft(ALT)f Fu(on)h(the)g(left)h(side)f(is)g
+(generally)h(set)f(to)h(w)m(ork)f(as)g(a)h(Meta)g(k)m(ey)-8
+b(.)42 b(The)29 b Ft(ALT)g Fu(k)m(ey)i(on)150 2849 y(the)c(righ)m(t)h
+(ma)m(y)g(also)g(b)s(e)f(con\014gured)f(to)i(w)m(ork)f(as)h(a)f(Meta)i
+(k)m(ey)f(or)f(ma)m(y)h(b)s(e)e(con\014gured)h(as)g(some)h(other)150
+2958 y(mo)s(di\014er,)i(suc)m(h)g(as)g(a)h(Comp)s(ose)f(k)m(ey)h(for)f
+(t)m(yping)h(accen)m(ted)h(c)m(haracters.)275 3127 y(If)23
+b(y)m(ou)i(do)f(not)h(ha)m(v)m(e)h(a)f(Meta)g(or)g Ft(ALT)e
+Fu(k)m(ey)-8 b(,)27 b(or)e(another)f(k)m(ey)i(w)m(orking)e(as)h(a)g
+(Meta)h(k)m(ey)-8 b(,)27 b(the)d(iden)m(tical)150 3236
+y(k)m(eystrok)m(e)30 b(can)f(b)s(e)f(generated)h(b)m(y)g(t)m(yping)g
+Ft(ESC)e Fl(\014rst)p Fu(,)j(and)e(then)g(t)m(yping)h
+Ft(k)p Fu(.)40 b(Either)28 b(pro)s(cess)g(is)g(kno)m(wn)150
+3346 y(as)j Fr(metafying)39 b Fu(the)30 b Ft(k)g Fu(k)m(ey)-8
+b(.)275 3515 y(The)39 b(text)j Fj(M-C-k)d Fu(is)h(read)g(as)h
+(`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g(c)m(haracter)i
+(pro)s(duced)d(b)m(y)150 3624 y Fr(metafying)g Fj(C-k)p
+Fu(.)275 3793 y(In)c(addition,)j(sev)m(eral)f(k)m(eys)g(ha)m(v)m(e)g
+(their)f(o)m(wn)g(names.)58 b(Sp)s(eci\014cally)-8 b(,)38
+b Ft(DEL)p Fu(,)f Ft(ESC)p Fu(,)g Ft(LFD)p Fu(,)g Ft(SPC)p
+Fu(,)g Ft(RET)p Fu(,)150 3902 y(and)d Ft(TAB)f Fu(all)j(stand)e(for)g
+(themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init)
+h(\014le)f(\(see)i(Section)f(8.3)150 4012 y([Readline)f(Init)g(File],)i
+(page)e(110\).)52 b(If)33 b(y)m(our)g(k)m(eyb)s(oard)h(lac)m(ks)g(a)g
+Ft(LFD)f Fu(k)m(ey)-8 b(,)36 b(t)m(yping)e Ft(C-j)e Fu(will)i(pro)s
+(duce)150 4122 y(the)d(desired)e(c)m(haracter.)43 b(The)30
+b Ft(RET)f Fu(k)m(ey)i(ma)m(y)g(b)s(e)f(lab)s(eled)h
+Ft(Return)d Fu(or)j Ft(Enter)d Fu(on)j(some)g(k)m(eyb)s(oards.)150
+4413 y Fs(8.2)68 b(Readline)47 b(In)l(teraction)150 4573
+y Fu(Often)32 b(during)g(an)g(in)m(teractiv)m(e)j(session)e(y)m(ou)g(t)
+m(yp)s(e)g(in)f(a)h(long)g(line)g(of)f(text,)j(only)d(to)i(notice)g
+(that)f(the)150 4682 y(\014rst)f(w)m(ord)g(on)g(the)g(line)h(is)g
+(missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g
+(a)g(set)g(of)f(commands)g(for)150 4792 y(manipulating)e(the)g(text)h
+(as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h
+(just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150
+4902 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29
+b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m
+(ou)h(mo)m(v)m(e)g(the)g(cursor)150 5011 y(to)35 b(the)f(place)i(that)e
+(needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g
+(the)f(corrections.)54 b(Then,)150 5121 y(when)24 b(y)m(ou)h(are)g
+(satis\014ed)g(with)g(the)g(line,)i(y)m(ou)e(simply)f(press)g
+Ft(RET)p Fu(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e
+(at)h(the)h(end)150 5230 y(of)33 b(the)h(line)g(to)g(press)e
+Ft(RET)p Fu(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g
+(of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 5340
+y(within)c(the)g(line.)p eop end
+%%Page: 108 114
+TeXDict begin 108 113 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(108)150 299 y Fk(8.2.1)63
+b(Readline)40 b(Bare)h(Essen)m(tials)150 446 y Fu(In)31
+b(order)h(to)h(en)m(ter)g(c)m(haracters)g(in)m(to)g(the)g(line,)g
+(simply)e(t)m(yp)s(e)i(them.)46 b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i
+(app)s(ears)150 555 y(where)e(the)h(cursor)e(w)m(as,)j(and)e(then)g
+(the)h(cursor)e(mo)m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47
+b(If)32 b(y)m(ou)h(mist)m(yp)s(e)g(a)150 665 y(c)m(haracter,)f(y)m(ou)f
+(can)g(use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)f
+(delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)275 806
+y(Sometimes)i(y)m(ou)g(ma)m(y)h(mist)m(yp)s(e)e(a)i(c)m(haracter,)g
+(and)e(not)i(notice)g(the)f(error)f(un)m(til)h(y)m(ou)g(ha)m(v)m(e)h(t)
+m(yp)s(ed)150 916 y(sev)m(eral)e(other)f(c)m(haracters.)42
+b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h
+Fj(C-b)d Fu(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150
+1026 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31
+b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g
+(with)f Fj(C-f)p Fu(.)275 1167 y(When)i(y)m(ou)h(add)f(text)h(in)f(the)
+h(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m
+(haracters)h(to)g(the)e(righ)m(t)150 1277 y(of)d(the)g(cursor)f(are)h
+(`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h
+(that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150
+1386 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m
+(haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled)
+150 1496 y(bac)m(k')24 b(to)f(\014ll)g(in)f(the)h(blank)f(space)i
+(created)f(b)m(y)g(the)g(remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39
+b(A)23 b(list)g(of)g(the)g(bare)f(essen)m(tials)150 1605
+y(for)30 b(editing)h(the)g(text)g(of)g(an)f(input)f(line)i(follo)m(ws.)
+150 1775 y Fj(C-b)336 b Fu(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m
+(haracter.)150 1941 y Fj(C-f)336 b Fu(Mo)m(v)m(e)32 b(forw)m(ard)e(one)
+h(c)m(haracter.)150 2108 y Ft(DEL)e Fu(or)i Ft(Backspace)630
+2217 y Fu(Delete)i(the)d(c)m(haracter)i(to)f(the)g(left)g(of)f(the)h
+(cursor.)150 2384 y Fj(C-d)336 b Fu(Delete)33 b(the)d(c)m(haracter)i
+(underneath)d(the)i(cursor.)150 2550 y(Prin)m(ting)g(c)m(haracters)630
+2660 y(Insert)f(the)g(c)m(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g
+(cursor.)150 2826 y Fj(C-_)e Fu(or)i Fj(C-x)e(C-u)630
+2936 y Fu(Undo)k(the)h(last)g(editing)g(command.)50 b(Y)-8
+b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)m(y)i(bac)m(k)f(to)g(an)g
+(empt)m(y)630 3045 y(line.)150 3215 y(\(Dep)s(ending)29
+b(on)h(y)m(our)f(con\014guration,)i(the)e Ft(Backspace)e
+Fu(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the)
+150 3324 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g
+Ft(DEL)g Fu(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i
+(underneath)d(the)h(cursor,)i(lik)m(e)150 3434 y Fj(C-d)p
+Fu(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g
+(the)f(cursor.\))150 3640 y Fk(8.2.2)63 b(Readline)40
+b(Mo)m(v)m(emen)m(t)h(Commands)150 3787 y Fu(The)27 b(ab)s(o)m(v)m(e)i
+(table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f
+(y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150
+3897 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m
+(enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g
+(in)h(addition)150 4006 y(to)j Fj(C-b)p Fu(,)f Fj(C-f)p
+Fu(,)g Fj(C-d)p Fu(,)h(and)e Ft(DEL)p Fu(.)54 b(Here)35
+b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h
+(the)150 4116 y(line.)150 4286 y Fj(C-a)336 b Fu(Mo)m(v)m(e)32
+b(to)g(the)e(start)h(of)g(the)f(line.)150 4452 y Fj(C-e)336
+b Fu(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150
+4618 y Fj(M-f)336 b Fu(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m(ord,)f
+(where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d(digits.)
+150 4785 y Fj(M-b)336 b Fu(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m
+(ord.)150 4951 y Fj(C-l)336 b Fu(Clear)31 b(the)f(screen,)h(reprin)m
+(ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275
+5121 y(Notice)c(ho)m(w)f Fj(C-f)e Fu(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m
+(haracter,)j(while)d Fj(M-f)e Fu(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m
+(ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 5230 y(con)m(v)m(en)m(tion)32
+b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m
+(haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150
+5340 y(w)m(ords.)p eop end
+%%Page: 109 115
+TeXDict begin 109 114 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(109)150 299 y Fk(8.2.3)63
+b(Readline)40 b(Killing)i(Commands)150 446 y Fr(Killing)35
+b Fu(text)28 b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i
+(but)e(to)h(sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f
+(usually)150 555 y(b)m(y)g Fr(y)m(anking)35 b Fu(\(re-inserting\))28
+b(it)g(bac)m(k)f(in)m(to)h(the)f(line.)40 b(\(`Cut')27
+b(and)g(`paste')h(are)f(more)g(recen)m(t)h(jargon)f(for)150
+665 y(`kill')32 b(and)d(`y)m(ank'.\))275 801 y(If)g(the)i(description)f
+(for)g(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g(text,)h(then)e(y)m
+(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 911 y(can)g(get)g(the)g
+(text)g(bac)m(k)g(in)f(a)h(di\013eren)m(t)g(\(or)g(the)f(same\))h
+(place)h(later.)275 1047 y(When)23 b(y)m(ou)g(use)g(a)h(kill)g
+(command,)g(the)g(text)g(is)f(sa)m(v)m(ed)i(in)e(a)g
+Fr(kill-ring)p Fu(.)39 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h(consecutiv)
+m(e)150 1157 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g(killed)h(text)g
+(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f(bac)m(k,)h(y)m
+(ou)g(get)g(it)f(all.)43 b(The)150 1267 y(kill)33 b(ring)f(is)g(not)h
+(line)g(sp)s(eci\014c;)g(the)g(text)g(that)g(y)m(ou)g(killed)f(on)h(a)f
+(previously)g(t)m(yp)s(ed)h(line)f(is)h(a)m(v)-5 b(ailable)150
+1376 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac)m(k)g(later,)h(when)d(y)m(ou)
+i(are)g(t)m(yping)f(another)h(line.)275 1513 y(Here)f(is)h(the)f(list)h
+(of)g(commands)f(for)g(killing)h(text.)150 1675 y Fj(C-k)336
+b Fu(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g(cursor)g(p)s
+(osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 1836
+y Fj(M-d)336 b Fu(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g(of)h
+(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m(ords,)
+g(to)g(the)630 1946 y(end)j(of)g(the)h(next)f(w)m(ord.)41
+b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used)
+f(b)m(y)g Fj(M-f)p Fu(.)150 2107 y Fj(M-DEL)240 b Fu(Kill)31
+b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,)
+h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630
+2217 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8
+b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m
+(y)630 2326 y Fj(M-b)p Fu(.)150 2487 y Fj(C-w)336 b Fu(Kill)35
+b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55
+b(This)34 b(is)h(di\013eren)m(t)h(than)e Fj(M-DEL)630
+2597 y Fu(b)s(ecause)c(the)h(w)m(ord)f(b)s(oundaries)f(di\013er.)275
+2759 y(Here)42 b(is)f(ho)m(w)h(to)g Fr(y)m(ank)47 b Fu(the)42
+b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74 b(Y)-8 b(anking)43
+b(means)e(to)h(cop)m(y)h(the)e(most-)150 2869 y(recen)m(tly-killed)33
+b(text)e(from)f(the)g(kill)i(bu\013er.)150 3031 y Fj(C-y)336
+b Fu(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h(killed)f(text)g(bac)m
+(k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f(cursor.)150
+3192 y Fj(M-y)336 b Fu(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h
+(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h
+(the)g(prior)630 3302 y(command)30 b(is)h Fj(C-y)e Fu(or)h
+Fj(M-y)p Fu(.)150 3503 y Fk(8.2.4)63 b(Readline)40 b(Argumen)m(ts)150
+3650 y Fu(Y)-8 b(ou)40 b(can)f(pass)g(n)m(umeric)f(argumen)m(ts)i(to)f
+(Readline)h(commands.)67 b(Sometimes)39 b(the)g(argumen)m(t)h(acts)150
+3760 y(as)g(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g
+Fl(sign)47 b Fu(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m
+(t.)71 b(If)40 b(y)m(ou)150 3869 y(pass)33 b(a)h(negativ)m(e)i(argumen)
+m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m
+(ard)f(direction,)i(that)150 3979 y(command)g(will)h(act)g(in)f(a)h
+(bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g
+(text)g(bac)m(k)g(to)g(the)g(start)g(of)150 4088 y(the)31
+b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Ft(M--)f(C-k)p
+Fu('.)275 4225 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g
+(argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i
+(digits)e(b)s(efore)150 4334 y(the)j(command.)42 b(If)30
+b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h
+(\(`)p Ft(-)p Fu('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150
+4444 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m
+(e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h
+(started,)i(y)m(ou)150 4554 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f
+(of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40
+b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fj(C-d)150
+4663 y Fu(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f
+(t)m(yp)s(e)h(`)p Ft(M-1)29 b(0)h(C-d)p Fu(',)39 b(whic)m(h)e(will)h
+(delete)h(the)e(next)h(ten)150 4773 y(c)m(haracters)32
+b(on)e(the)h(input)e(line.)150 4974 y Fk(8.2.5)63 b(Searc)m(hing)40
+b(for)i(Commands)g(in)f(the)g(History)150 5121 y Fu(Readline)35
+b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)e(the)i
+(command)f(history)g(\(see)h(Section)g(9.1)150 5230 y([Bash)i(History)h
+(F)-8 b(acilities],)42 b(page)37 b(141\))i(for)d(lines)h(con)m(taining)
+i(a)e(sp)s(eci\014ed)f(string.)60 b(There)36 b(are)i(t)m(w)m(o)150
+5340 y(searc)m(h)31 b(mo)s(des:)40 b Fr(incremen)m(tal)35
+b Fu(and)30 b Fr(non-incremen)m(tal)p Fu(.)p eop end
+%%Page: 110 116
+TeXDict begin 110 115 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(110)275 299 y(Incremen)m(tal)26
+b(searc)m(hes)h(b)s(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e
+(t)m(yping)i(the)g(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150
+408 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s
+(ed,)g(Readline)g(displa)m(ys)g(the)f(next)h(en)m(try)g(from)e(the)i
+(history)150 518 y(matc)m(hing)25 b(the)f(string)g(t)m(yp)s(ed)g(so)g
+(far.)39 b(An)23 b(incremen)m(tal)j(searc)m(h)e(requires)g(only)g(as)g
+(man)m(y)g(c)m(haracters)i(as)150 628 y(needed)i(to)i(\014nd)d(the)i
+(desired)f(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29
+b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history)g(for)f(a)i
+(particular)150 737 y(string,)g(t)m(yp)s(e)f Fj(C-r)p
+Fu(.)40 b(T)m(yping)29 b Fj(C-s)g Fu(searc)m(hes)h(forw)m(ard)f
+(through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m
+(t)150 847 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g
+Ft(isearch-terminators)33 b Fu(v)-5 b(ariable)39 b(are)f(used)f(to)i
+(terminate)g(an)f(incremen)m(tal)150 956 y(searc)m(h.)71
+b(If)40 b(that)h(v)-5 b(ariable)41 b(has)f(not)h(b)s(een)e(assigned)i
+(a)f(v)-5 b(alue,)44 b(the)c Ft(ESC)g Fu(and)f Fj(C-J)h
+Fu(c)m(haracters)i(will)150 1066 y(terminate)h(an)g(incremen)m(tal)g
+(searc)m(h.)78 b Fj(C-g)41 b Fu(will)i(ab)s(ort)f(an)g(incremen)m(tal)i
+(searc)m(h)f(and)f(restore)h(the)150 1176 y(original)30
+b(line.)41 b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f
+(history)g(en)m(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150
+1285 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 1414
+y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h
+(history)g(list,)h(t)m(yp)s(e)g Fj(C-r)e Fu(or)h Fj(C-s)f
+Fu(as)h(appropriate.)43 b(This)150 1524 y(will)26 b(searc)m(h)h(bac)m
+(kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g
+(en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)150
+1633 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i
+(sequence)f(b)s(ound)e(to)i(a)g(Readline)h(command)e(will)h(terminate)h
+(the)150 1743 y(searc)m(h)26 b(and)f(execute)i(that)f(command.)39
+b(F)-8 b(or)26 b(instance,)h(a)f Ft(RET)f Fu(will)g(terminate)i(the)f
+(searc)m(h)g(and)e(accept)150 1852 y(the)30 b(line,)g(thereb)m(y)f
+(executing)i(the)e(command)g(from)g(the)h(history)f(list.)41
+b(A)29 b(mo)m(v)m(emen)m(t)j(command)d(will)150 1962
+y(terminate)i(the)g(searc)m(h,)g(mak)m(e)h(the)e(last)h(line)g(found)e
+(the)i(curren)m(t)f(line,)h(and)f(b)s(egin)g(editing.)275
+2091 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h(incremen)m(tal)g
+(searc)m(h)f(string.)54 b(If)34 b(t)m(w)m(o)j Fj(C-r)p
+Fu(s)c(are)i(t)m(yp)s(ed)g(without)150 2200 y(an)m(y)i(in)m(terv)m
+(ening)g(c)m(haracters)h(de\014ning)e(a)h(new)f(searc)m(h)h(string,)h
+(an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i(string)g(is)150
+2310 y(used.)275 2439 y(Non-incremen)m(tal)48 b(searc)m(hes)g(read)e
+(the)h(en)m(tire)h(searc)m(h)f(string)g(b)s(efore)f(starting)h(to)h
+(searc)m(h)f(for)150 2548 y(matc)m(hing)d(history)e(lines.)78
+b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f(t)m(yp)s(ed)g(b)m(y)g
+(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 2658 y(con)m(ten)m(ts)32
+b(of)f(the)f(curren)m(t)g(line.)150 2887 y Fs(8.3)68
+b(Readline)47 b(Init)e(File)150 3046 y Fu(Although)f(the)g(Readline)g
+(library)f(comes)i(with)e(a)h(set)h(of)f(Emacs-lik)m(e)h(k)m
+(eybindings)f(installed)g(b)m(y)150 3156 y(default,)26
+b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren)m(t)f(set)g(of)g(k)
+m(eybindings.)38 b(An)m(y)25 b(user)f(can)h(customize)h(programs)150
+3266 y(that)45 b(use)f(Readline)h(b)m(y)f(putting)g(commands)g(in)g(an)
+g Fr(inputrc)49 b Fu(\014le,)g(con)m(v)m(en)m(tionally)e(in)d(his)g
+(home)150 3375 y(directory)-8 b(.)59 b(The)35 b(name)i(of)f(this)g
+(\014le)g(is)g(tak)m(en)h(from)f(the)g(v)-5 b(alue)37
+b(of)f(the)g(shell)h(v)-5 b(ariable)36 b Ft(INPUTRC)p
+Fu(.)56 b(If)150 3485 y(that)36 b(v)-5 b(ariable)36 b(is)f(unset,)h
+(the)f(default)h(is)f Ft(~/.inputrc)p Fu(.)52 b(If)35
+b(that)g(\014le)h(do)s(es)e(not)i(exist)g(or)f(cannot)h(b)s(e)150
+3594 y(read,)31 b(the)f(ultimate)i(default)e(is)h Ft(/etc/inputrc)p
+Fu(.)275 3723 y(When)e(a)h(program)f(whic)m(h)h(uses)f(the)h(Readline)g
+(library)f(starts)h(up,)f(the)h(init)g(\014le)f(is)h(read,)g(and)f(the)
+150 3833 y(k)m(ey)i(bindings)e(are)i(set.)275 3961 y(In)26
+b(addition,)i(the)f Ft(C-x)i(C-r)d Fu(command)h(re-reads)g(this)f(init)
+h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m(hanges)150
+4071 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g(it.)150
+4259 y Fk(8.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150
+4406 y Fu(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w)
+m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41
+b(lines)h(are)150 4515 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h
+(a)g(`)p Ft(#)p Fu(')g(are)h(commen)m(ts.)73 b(Lines)41
+b(b)s(eginning)f(with)g(a)i(`)p Ft($)p Fu(')f(indicate)150
+4625 y(conditional)e(constructs)f(\(see)g(Section)h(8.3.2)g
+([Conditional)g(Init)e(Constructs],)j(page)e(118\).)64
+b(Other)150 4735 y(lines)31 b(denote)g(v)-5 b(ariable)31
+b(settings)g(and)f(k)m(ey)h(bindings.)150 4882 y(V)-8
+b(ariable)32 b(Settings)630 4992 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e
+(the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h
+(the)g(v)-5 b(alues)41 b(of)630 5102 y(v)-5 b(ariables)34
+b(in)f(Readline)i(using)e(the)g Ft(set)g Fu(command)g(within)g(the)h
+(init)g(\014le.)50 b(The)33 b(syn)m(tax)630 5211 y(is)d(simple:)870
+5340 y Ft(set)47 b Fj(variable)e(value)p eop end
+%%Page: 111 117
+TeXDict begin 111 116 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(111)630 299 y(Here,)29
+b(for)e(example,)h(is)g(ho)m(w)f(to)h(c)m(hange)g(from)f(the)g(default)
+h(Emacs-lik)m(e)h(k)m(ey)f(binding)e(to)630 408 y(use)k
+Ft(vi)g Fu(line)h(editing)g(commands:)870 541 y Ft(set)47
+b(editing-mode)d(vi)630 674 y Fu(V)-8 b(ariable)36 b(names)f(and)g(v)-5
+b(alues,)36 b(where)f(appropriate,)h(are)g(recognized)g(without)f
+(regard)630 783 y(to)c(case.)42 b(Unrecognized)31 b(v)-5
+b(ariable)31 b(names)g(are)f(ignored.)630 916 y(Bo)s(olean)c(v)-5
+b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f(set)i(to)g(on)f(or)g
+(o\013)7 b(\))25 b(are)h(set)f(to)h(on)f(if)g(the)g(v)-5
+b(alue)26 b(is)630 1026 y(n)m(ull)e(or)g(empt)m(y)-8
+b(,)27 b Fr(on)d Fu(\(case-insensitiv)m(e\),)29 b(or)24
+b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v)
+-5 b(ariable)630 1135 y(b)s(eing)30 b(set)h(to)g(o\013.)630
+1268 y(The)37 b Ft(bind)30 b(-V)37 b Fu(command)g(lists)i(the)f(curren)
+m(t)f(Readline)i(v)-5 b(ariable)38 b(names)g(and)f(v)-5
+b(alues.)630 1377 y(See)31 b(Section)g(4.2)g([Bash)g(Builtins],)g(page)
+g(50.)630 1510 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g
+(is)g(c)m(hangeable)j(with)d(the)g(follo)m(wing)i(v)-5
+b(ariables.)630 1666 y Ft(bell-style)1110 1775 y Fu(Con)m(trols)44
+b(what)g(happ)s(ens)e(when)h(Readline)i(w)m(an)m(ts)f(to)h(ring)e(the)h
+(termi-)1110 1885 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p
+Ft(none)p Fu(',)g(Readline)g(nev)m(er)g(rings)e(the)i(b)s(ell.)61
+b(If)36 b(set)i(to)1110 1995 y(`)p Ft(visible)p Fu(',)32
+b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g(one)g(is)g(a)m(v)-5
+b(ailable.)51 b(If)33 b(set)g(to)1110 2104 y(`)p Ft(audible)p
+Fu(')j(\(the)i(default\),)i(Readline)e(attempts)g(to)h(ring)e(the)g
+(terminal's)1110 2214 y(b)s(ell.)630 2370 y Ft(bind-tty-special-chars)
+1110 2479 y Fu(If)e(set)g(to)h(`)p Ft(on)p Fu(')f(\(the)g(default\),)i
+(Readline)f(attempts)g(to)g(bind)d(the)i(con)m(trol)1110
+2589 y(c)m(haracters)30 b(treated)g(sp)s(ecially)g(b)m(y)f(the)g(k)m
+(ernel's)h(terminal)f(driv)m(er)g(to)h(their)1110 2698
+y(Readline)h(equiv)-5 b(alen)m(ts.)630 2854 y Ft(blink-matching-paren)
+1110 2964 y Fu(If)36 b(set)g(to)h(`)p Ft(on)p Fu(',)h(Readline)f
+(attempts)g(to)g(brie\015y)e(mo)m(v)m(e)j(the)f(cursor)e(to)i(an)1110
+3073 y(op)s(ening)k(paren)m(thesis)h(when)f(a)h(closing)h(paren)m
+(thesis)e(is)h(inserted.)74 b(The)1110 3183 y(default)31
+b(is)f(`)p Ft(off)p Fu('.)630 3339 y Ft(colored-completion-prefi)o(x)
+1110 3448 y Fu(If)f(set)h(to)g(`)p Ft(on)p Fu(',)g(when)e(listing)i
+(completions,)h(Readline)f(displa)m(ys)g(the)f(com-)1110
+3558 y(mon)c(pre\014x)f(of)i(the)f(set)h(of)g(p)s(ossible)f
+(completions)h(using)f(a)h(di\013eren)m(t)g(color.)1110
+3667 y(The)39 b(color)i(de\014nitions)f(are)g(tak)m(en)h(from)f(the)g
+(v)-5 b(alue)40 b(of)g(the)g Ft(LS_COLORS)1110 3777 y
+Fu(en)m(vironmen)m(t)31 b(v)-5 b(ariable.)41 b(The)30
+b(default)h(is)f(`)p Ft(off)p Fu('.)630 3933 y Ft(colored-stats)1110
+4042 y Fu(If)c(set)h(to)g(`)p Ft(on)p Fu(',)h(Readline)f(displa)m(ys)g
+(p)s(ossible)f(completions)h(using)f(di\013eren)m(t)1110
+4152 y(colors)40 b(to)g(indicate)g(their)f(\014le)h(t)m(yp)s(e.)67
+b(The)38 b(color)j(de\014nitions)d(are)i(tak)m(en)1110
+4261 y(from)24 b(the)h(v)-5 b(alue)25 b(of)g(the)g Ft(LS_COLORS)d
+Fu(en)m(vironmen)m(t)j(v)-5 b(ariable.)40 b(The)24 b(default)1110
+4371 y(is)30 b(`)p Ft(off)p Fu('.)630 4527 y Ft(comment-begin)1110
+4636 y Fu(The)62 b(string)g(to)h(insert)f(at)h(the)g(b)s(eginning)e(of)
+h(the)h(line)f(when)g(the)1110 4746 y Ft(insert-comment)26
+b Fu(command)31 b(is)f(executed.)42 b(The)30 b(default)g(v)-5
+b(alue)31 b(is)f Ft("#")p Fu(.)630 4902 y Ft(completion-display-width)
+1110 5011 y Fu(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used)
+g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 5121
+y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 b(v)-5
+b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110
+5230 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39
+b(A)26 b(v)-5 b(alue)27 b(of)f(0)h(will)f(cause)1110
+5340 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e
+(line.)41 b(The)30 b(default)h(v)-5 b(alue)31 b(is)f(-1.)p
+eop end
+%%Page: 112 118
+TeXDict begin 112 117 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(112)630 299 y Ft
+(completion-ignore-case)1110 408 y Fu(If)27 b(set)h(to)g(`)p
+Ft(on)p Fu(',)g(Readline)g(p)s(erforms)e(\014lename)h(matc)m(hing)i
+(and)e(completion)1110 518 y(in)j(a)h(case-insensitiv)m(e)i(fashion.)40
+b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Ft(off)p
+Fu('.)630 682 y Ft(completion-map-case)1110 792 y Fu(If)22
+b(set)g(to)h(`)p Ft(on)p Fu(',)h(and)e Fr(completion-ignore-case)31
+b Fu(is)22 b(enabled,)i(Readline)f(treats)1110 902 y(h)m(yphens)29
+b(\(`)p Ft(-)p Fu('\))j(and)e(underscores)g(\(`)p Ft(_)p
+Fu('\))i(as)f(equiv)-5 b(alen)m(t)32 b(when)e(p)s(erforming)1110
+1011 y(case-insensitiv)m(e)47 b(\014lename)e(matc)m(hing)g(and)f
+(completion.)85 b(The)44 b(default)1110 1121 y(v)-5 b(alue)31
+b(is)f(`)p Ft(off)p Fu('.)630 1285 y Ft(completion-prefix-displa)o
+(y-le)o(ngth)1110 1395 y Fu(The)h(length)g(in)g(c)m(haracters)i(of)f
+(the)f(common)h(pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110
+1504 y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s
+(di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 1614
+y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e
+(longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 1724
+y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible)
+f(completions.)630 1888 y Ft(completion-query-items)1110
+1998 y Fu(The)c(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h
+(that)g(determines)f(when)f(the)i(user)1110 2107 y(is)i(ask)m(ed)h
+(whether)f(the)h(list)g(of)f(p)s(ossibilities)h(should)e(b)s(e)h
+(displa)m(y)m(ed.)41 b(If)29 b(the)1110 2217 y(n)m(um)m(b)s(er)d(of)h
+(p)s(ossible)f(completions)i(is)f(greater)h(than)e(this)h(v)-5
+b(alue,)28 b(Readline)1110 2326 y(will)f(ask)g(the)f(user)g(whether)g
+(or)g(not)h(he)f(wishes)g(to)i(view)e(them;)i(otherwise,)1110
+2436 y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5
+b(ariable)25 b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m(teger)g(v)-5
+b(alue)1110 2545 y(greater)26 b(than)f(or)f(equal)i(to)f(0.)40
+b(A)24 b(negativ)m(e)j(v)-5 b(alue)26 b(means)e(Readline)i(should)1110
+2655 y(nev)m(er)31 b(ask.)41 b(The)29 b(default)i(limit)g(is)g
+Ft(100)p Fu(.)630 2819 y Ft(convert-meta)1110 2929 y
+Fu(If)22 b(set)g(to)h(`)p Ft(on)p Fu(',)h(Readline)f(will)f(con)m(v)m
+(ert)i(c)m(haracters)f(with)f(the)g(eigh)m(th)h(bit)f(set)1110
+3039 y(to)33 b(an)e Fm(asci)r(i)h Fu(k)m(ey)h(sequence)f(b)m(y)g
+(stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)1110
+3148 y(an)24 b Ft(ESC)g Fu(c)m(haracter,)j(con)m(v)m(erting)f(them)f
+(to)g(a)g(meta-pre\014xed)f(k)m(ey)h(sequence.)1110 3258
+y(The)i(default)h(v)-5 b(alue)28 b(is)f(`)p Ft(on)p Fu(',)i(but)d(will)
+i(b)s(e)f(set)h(to)g(`)p Ft(off)p Fu(')g(if)f(the)h(lo)s(cale)h(is)f
+(one)1110 3367 y(that)j(con)m(tains)h(eigh)m(t-bit)g(c)m(haracters.)630
+3532 y Ft(disable-completion)1110 3641 y Fu(If)k(set)h(to)h(`)p
+Ft(On)p Fu(',)g(Readline)f(will)g(inhibit)f(w)m(ord)h(completion.)60
+b(Completion)1110 3751 y(c)m(haracters)28 b(will)e(b)s(e)f(inserted)h
+(in)m(to)h(the)g(line)f(as)g(if)g(they)h(had)e(b)s(een)g(mapp)s(ed)1110
+3861 y(to)31 b Ft(self-insert)p Fu(.)38 b(The)30 b(default)g(is)h(`)p
+Ft(off)p Fu('.)630 4025 y Ft(echo-control-characters)1110
+4134 y Fu(When)f(set)h(to)g(`)p Ft(on)p Fu(',)f(on)g(op)s(erating)h
+(systems)f(that)h(indicate)g(they)g(supp)s(ort)1110 4244
+y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m(haracter)h(corresp)s(onding)d
+(to)j(a)f(signal)g(generated)1110 4354 y(from)e(the)g(k)m(eyb)s(oard.)
+41 b(The)30 b(default)g(is)h(`)p Ft(on)p Fu('.)630 4518
+y Ft(editing-mode)1110 4628 y Fu(The)d Ft(editing-mode)e
+Fu(v)-5 b(ariable)29 b(con)m(trols)h(whic)m(h)e(default)h(set)h(of)e(k)
+m(ey)i(bind-)1110 4737 y(ings)25 b(is)g(used.)38 b(By)26
+b(default,)g(Readline)g(starts)f(up)f(in)h(Emacs)g(editing)h(mo)s(de,)
+1110 4847 y(where)j(the)g(k)m(eystrok)m(es)i(are)e(most)h(similar)f(to)
+h(Emacs.)40 b(This)29 b(v)-5 b(ariable)30 b(can)1110
+4956 y(b)s(e)g(set)h(to)g(either)g(`)p Ft(emacs)p Fu(')e(or)h(`)p
+Ft(vi)p Fu('.)630 5121 y Ft(emacs-mode-string)1110 5230
+y Fu(If)j(the)h Fr(sho)m(w-mo)s(de-in-prompt)h Fu(v)-5
+b(ariable)35 b(is)e(enabled,)i(this)f(string)f(is)h(dis-)1110
+5340 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the)g(last)h(line)f
+(of)h(the)f(primary)f(prompt)g(when)p eop end
+%%Page: 113 119
+TeXDict begin 113 118 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(113)1110 299 y(emacs)22
+b(editing)h(mo)s(de)e(is)h(activ)m(e.)40 b(The)21 b(v)-5
+b(alue)22 b(is)g(expanded)f(lik)m(e)h(a)h(k)m(ey)f(bind-)1110
+408 y(ing,)27 b(so)f(the)f(standard)g(set)h(of)f(meta-)i(and)e(con)m
+(trol)i(pre\014xes)d(and)h(bac)m(kslash)1110 518 y(escap)s(e)f
+(sequences)h(is)e(a)m(v)-5 b(ailable.)41 b(Use)25 b(the)f(`)p
+Ft(\\1)p Fu(')f(and)h(`)p Ft(\\2)p Fu(')g(escap)s(es)g(to)g(b)s(egin)
+1110 628 y(and)37 b(end)g(sequences)h(of)f(non-prin)m(ting)h(c)m
+(haracters,)j(whic)m(h)c(can)h(b)s(e)f(used)1110 737
+y(to)h(em)m(b)s(ed)f(a)g(terminal)h(con)m(trol)h(sequence)f(in)m(to)g
+(the)f(mo)s(de)g(string.)61 b(The)1110 847 y(default)31
+b(is)f(`)p Ft(@)p Fu('.)630 1019 y Ft(enable-bracketed-paste)1110
+1129 y Fu(When)24 b(set)h(to)h(`)p Ft(On)p Fu(',)g(Readline)f(will)g
+(con\014gure)f(the)h(terminal)g(in)f(a)h(w)m(a)m(y)g(that)1110
+1238 y(will)k(enable)f(it)h(to)g(insert)g(eac)m(h)g(paste)g(in)m(to)g
+(the)g(editing)g(bu\013er)e(as)i(a)f(single)1110 1348
+y(string)33 b(of)f(c)m(haracters,)j(instead)e(of)g(treating)h(eac)m(h)g
+(c)m(haracter)g(as)f(if)f(it)i(had)1110 1457 y(b)s(een)e(read)i(from)e
+(the)i(k)m(eyb)s(oard.)49 b(This)32 b(can)h(prev)m(en)m(t)h(pasted)f(c)
+m(haracters)1110 1567 y(from)d(b)s(eing)g(in)m(terpreted)h(as)f
+(editing)h(commands.)41 b(The)29 b(default)i(is)f(`)p
+Ft(off)p Fu('.)630 1739 y Ft(enable-keypad)1110 1849
+y Fu(When)23 b(set)h(to)g(`)p Ft(on)p Fu(',)h(Readline)f(will)g(try)f
+(to)h(enable)g(the)f(application)i(k)m(eypad)1110 1958
+y(when)h(it)h(is)f(called.)41 b(Some)27 b(systems)f(need)h(this)f(to)h
+(enable)g(the)g(arro)m(w)g(k)m(eys.)1110 2068 y(The)j(default)g(is)h(`)
+p Ft(off)p Fu('.)630 2240 y Ft(enable-meta-key)1110 2350
+y Fu(When)40 b(set)g(to)g(`)p Ft(on)p Fu(',)j(Readline)d(will)g(try)g
+(to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 2459
+y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h(is)g
+(called.)76 b(On)41 b(man)m(y)1110 2569 y(terminals,)c(the)e(meta)h(k)m
+(ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56
+b(The)1110 2679 y(default)31 b(is)f(`)p Ft(on)p Fu('.)630
+2851 y Ft(expand-tilde)1110 2960 y Fu(If)d(set)h(to)h(`)p
+Ft(on)p Fu(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h
+(Readline)h(attempts)1110 3070 y(w)m(ord)i(completion.)42
+b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630 3242
+y Ft(history-preserve-point)1110 3352 y Fu(If)41 b(set)h(to)h(`)p
+Ft(on)p Fu(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f
+(p)s(oin)m(t)f(\(the)1110 3461 y(curren)m(t)35 b(cursor)g(p)s
+(osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g
+(line)1110 3571 y(retriev)m(ed)h(with)f Ft(previous-history)c
+Fu(or)37 b Ft(next-history)p Fu(.)55 b(The)36 b(default)1110
+3680 y(is)30 b(`)p Ft(off)p Fu('.)630 3853 y Ft(history-size)1110
+3962 y Fu(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g
+(en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 4072
+y(list.)51 b(If)34 b(set)g(to)h(zero,)g(an)m(y)f(existing)h(history)f
+(en)m(tries)g(are)g(deleted)h(and)e(no)1110 4181 y(new)e(en)m(tries)i
+(are)f(sa)m(v)m(ed.)46 b(If)31 b(set)h(to)h(a)f(v)-5
+b(alue)32 b(less)g(than)f(zero,)i(the)f(n)m(um)m(b)s(er)1110
+4291 y(of)f(history)f(en)m(tries)h(is)g(not)g(limited.)42
+b(By)30 b(default,)h(the)g(n)m(um)m(b)s(er)e(of)i(history)1110
+4401 y(en)m(tries)j(is)f(not)g(limited.)49 b(If)32 b(an)h(attempt)h(is)
+f(made)g(to)h(set)f Fr(history-size)39 b Fu(to)1110 4510
+y(a)34 b(non-n)m(umeric)f(v)-5 b(alue,)34 b(the)g(maxim)m(um)f(n)m(um)m
+(b)s(er)f(of)h(history)h(en)m(tries)g(will)1110 4620
+y(b)s(e)c(set)h(to)g(500.)630 4792 y Ft(horizontal-scroll-mode)1110
+4902 y Fu(This)k(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f
+(`)p Ft(on)p Fu(')g(or)g(`)p Ft(off)p Fu('.)57 b(Setting)36
+b(it)g(to)h(`)p Ft(on)p Fu(')1110 5011 y(means)26 b(that)h(the)f(text)h
+(of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m
+(tally)1110 5121 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i
+(are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 5230
+y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g
+(line.)39 b(By)27 b(default,)g(this)1110 5340 y(v)-5
+b(ariable)31 b(is)g(set)f(to)i(`)p Ft(off)p Fu('.)p eop
+end
+%%Page: 114 120
+TeXDict begin 114 119 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(114)630 299 y Ft(input-meta)1110
+408 y Fu(If)31 b(set)g(to)h(`)p Ft(on)p Fu(',)g(Readline)g(will)f
+(enable)h(eigh)m(t-bit)h(input)d(\(it)i(will)f(not)h(clear)1110
+518 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h(c)m(haracters)h(it)f
+(reads\),)j(regardless)c(of)h(what)g(the)1110 628 y(terminal)k(claims)h
+(it)f(can)g(supp)s(ort.)79 b(The)44 b(default)g(v)-5
+b(alue)44 b(is)g(`)p Ft(off)p Fu(',)j(but)1110 737 y(Readline)24
+b(will)h(set)f(it)g(to)h(`)p Ft(on)p Fu(')e(if)h(the)g(lo)s(cale)i(con)
+m(tains)f(eigh)m(t-bit)g(c)m(haracters.)1110 847 y(The)30
+b(name)g Ft(meta-flag)e Fu(is)j(a)f(synon)m(ym)g(for)g(this)h(v)-5
+b(ariable.)630 1029 y Ft(isearch-terminators)1110 1139
+y Fu(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e(terminate)j
+(an)f(incremen)m(tal)1110 1249 y(searc)m(h)25 b(without)g(subsequen)m
+(tly)g(executing)h(the)f(c)m(haracter)h(as)f(a)g(command)1110
+1358 y(\(see)38 b(Section)g(8.2.5)h([Searc)m(hing],)h(page)e(109\).)62
+b(If)37 b(this)g(v)-5 b(ariable)38 b(has)f(not)1110 1468
+y(b)s(een)e(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h
+Ft(ESC)d Fu(and)h Fj(C-J)g Fu(will)h(terminate)g(an)1110
+1577 y(incremen)m(tal)c(searc)m(h.)630 1760 y Ft(keymap)192
+b Fu(Sets)64 b(Readline's)i(idea)f(of)f(the)h(curren)m(t)f(k)m(eymap)h
+(for)f(k)m(ey)h(binding)1110 1870 y(commands.)71 b(Built-in)41
+b Ft(keymap)e Fu(names)h(are)h Ft(emacs)p Fu(,)h Ft(emacs-standard)p
+Fu(,)1110 1979 y Ft(emacs-meta)p Fu(,)99 b Ft(emacs-ctlx)p
+Fu(,)f Ft(vi)p Fu(,)j Ft(vi-move)p Fu(,)f Ft(vi-command)p
+Fu(,)f(and)1110 2089 y Ft(vi-insert)p Fu(.)81 b Ft(vi)44
+b Fu(is)h(equiv)-5 b(alen)m(t)46 b(to)g Ft(vi-command)c
+Fu(\()p Ft(vi-move)h Fu(is)i(also)h(a)1110 2198 y(synon)m(ym\);)41
+b Ft(emacs)c Fu(is)h(equiv)-5 b(alen)m(t)39 b(to)f Ft(emacs-standard)p
+Fu(.)59 b(Applications)1110 2308 y(ma)m(y)32 b(add)e(additional)i
+(names.)43 b(The)30 b(default)h(v)-5 b(alue)32 b(is)f
+Ft(emacs)p Fu(.)41 b(The)30 b(v)-5 b(alue)1110 2418 y(of)31
+b(the)f Ft(editing-mode)d Fu(v)-5 b(ariable)31 b(also)h(a\013ects)f
+(the)g(default)g(k)m(eymap.)630 2600 y Ft(keyseq-timeout)1110
+2710 y Fu(Sp)s(eci\014es)25 b(the)g(duration)g(Readline)h(will)g(w)m
+(ait)g(for)g(a)f(c)m(haracter)i(when)e(read-)1110 2819
+y(ing)30 b(an)g(am)m(biguous)g(k)m(ey)h(sequence)f(\(one)g(that)h(can)f
+(form)g(a)g(complete)h(k)m(ey)1110 2929 y(sequence)j(using)e(the)i
+(input)e(read)h(so)g(far,)h(or)g(can)f(tak)m(e)i(additional)f(input)
+1110 3039 y(to)g(complete)g(a)f(longer)h(k)m(ey)f(sequence\).)49
+b(If)33 b(no)f(input)g(is)h(receiv)m(ed)h(within)1110
+3148 y(the)43 b(timeout,)48 b(Readline)43 b(will)g(use)g(the)g(shorter)
+g(but)f(complete)j(k)m(ey)e(se-)1110 3258 y(quence.)c(Readline)26
+b(uses)f(this)h(v)-5 b(alue)26 b(to)g(determine)g(whether)f(or)g(not)h
+(input)1110 3367 y(is)31 b(a)m(v)-5 b(ailable)33 b(on)d(the)h(curren)m
+(t)f(input)g(source)h(\()p Ft(rl_instream)d Fu(b)m(y)i(default\).)1110
+3477 y(The)25 b(v)-5 b(alue)26 b(is)f(sp)s(eci\014ed)f(in)h
+(milliseconds,)j(so)d(a)h(v)-5 b(alue)26 b(of)f(1000)i(means)e(that)
+1110 3587 y(Readline)e(will)g(w)m(ait)g(one)g(second)f(for)g
+(additional)i(input.)37 b(If)22 b(this)g(v)-5 b(ariable)23
+b(is)1110 3696 y(set)28 b(to)h(a)f(v)-5 b(alue)29 b(less)f(than)g(or)f
+(equal)i(to)f(zero,)i(or)e(to)g(a)h(non-n)m(umeric)e(v)-5
+b(alue,)1110 3806 y(Readline)30 b(will)f(w)m(ait)i(un)m(til)e(another)h
+(k)m(ey)g(is)f(pressed)g(to)h(decide)f(whic)m(h)g(k)m(ey)1110
+3915 y(sequence)i(to)g(complete.)42 b(The)30 b(default)g(v)-5
+b(alue)31 b(is)g Ft(500)p Fu(.)630 4098 y Ft(mark-directories)1110
+4208 y Fu(If)38 b(set)g(to)h(`)p Ft(on)p Fu(',)i(completed)e(directory)
+f(names)g(ha)m(v)m(e)i(a)e(slash)g(app)s(ended.)1110
+4317 y(The)30 b(default)g(is)h(`)p Ft(on)p Fu('.)630
+4500 y Ft(mark-modified-lines)1110 4609 y Fu(This)k(v)-5
+b(ariable,)38 b(when)d(set)h(to)h(`)p Ft(on)p Fu(',)g(causes)g
+(Readline)f(to)h(displa)m(y)f(an)f(as-)1110 4719 y(terisk)f(\(`)p
+Ft(*)p Fu('\))h(at)f(the)g(start)g(of)g(history)g(lines)g(whic)m(h)f
+(ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 4829 y(This)d(v)-5
+b(ariable)31 b(is)f(`)p Ft(off)p Fu(')g(b)m(y)g(default.)630
+5011 y Ft(mark-symlinked-directori)o(es)1110 5121 y Fu(If)59
+b(set)h(to)g(`)p Ft(on)p Fu(',)67 b(completed)60 b(names)f(whic)m(h)g
+(are)h(sym)m(b)s(olic)g(links)f(to)1110 5230 y(directories)71
+b(ha)m(v)m(e)f(a)g(slash)f(app)s(ended)f(\(sub)5 b(ject)70
+b(to)g(the)g(v)-5 b(alue)70 b(of)1110 5340 y Ft(mark-directories)p
+Fu(\).)37 b(The)30 b(default)g(is)g(`)p Ft(off)p Fu('.)p
+eop end
+%%Page: 115 121
+TeXDict begin 115 120 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(115)630 299 y Ft
+(match-hidden-files)1110 408 y Fu(This)21 b(v)-5 b(ariable,)25
+b(when)d(set)g(to)h(`)p Ft(on)p Fu(',)h(causes)f(Readline)g(to)g(matc)m
+(h)g(\014les)f(whose)1110 518 y(names)44 b(b)s(egin)g(with)g(a)g(`)p
+Ft(.)p Fu(')g(\(hidden)f(\014les\))i(when)e(p)s(erforming)g(\014lename)
+1110 628 y(completion.)75 b(If)41 b(set)g(to)h(`)p Ft(off)p
+Fu(',)i(the)e(leading)g(`)p Ft(.)p Fu(')f(m)m(ust)g(b)s(e)g(supplied)f
+(b)m(y)1110 737 y(the)34 b(user)g(in)g(the)g(\014lename)g(to)h(b)s(e)f
+(completed.)53 b(This)33 b(v)-5 b(ariable)35 b(is)f(`)p
+Ft(on)p Fu(')g(b)m(y)1110 847 y(default.)630 1011 y Ft
+(menu-complete-display-pr)o(efix)1110 1121 y Fu(If)f(set)h(to)g(`)p
+Ft(on)p Fu(',)h(men)m(u)e(completion)i(displa)m(ys)e(the)h(common)g
+(pre\014x)e(of)i(the)1110 1230 y(list)k(of)g(p)s(ossible)f(completions)
+i(\(whic)m(h)e(ma)m(y)h(b)s(e)f(empt)m(y\))i(b)s(efore)e(cycling)1110
+1340 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p
+Ft(off)p Fu('.)630 1504 y Ft(output-meta)1110 1614 y
+Fu(If)35 b(set)h(to)g(`)p Ft(on)p Fu(',)h(Readline)f(will)g(displa)m(y)
+f(c)m(haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 1724
+y(set)h(directly)g(rather)f(than)g(as)h(a)g(meta-pre\014xed)f(escap)s
+(e)h(sequence.)59 b(The)1110 1833 y(default)26 b(is)f(`)p
+Ft(off)p Fu(',)i(but)e(Readline)h(will)g(set)g(it)g(to)h(`)p
+Ft(on)p Fu(')e(if)h(the)f(lo)s(cale)j(con)m(tains)1110
+1943 y(eigh)m(t-bit)k(c)m(haracters.)630 2107 y Ft(page-completions)
+1110 2217 y Fu(If)h(set)i(to)f(`)p Ft(on)p Fu(',)h(Readline)g(uses)e
+(an)h(in)m(ternal)h Ft(more)p Fu(-lik)m(e)f(pager)g(to)h(displa)m(y)
+1110 2326 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g
+(time.)47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Ft(on)p
+Fu(')1110 2436 y(b)m(y)e(default.)630 2600 y Ft
+(print-completions-horizo)o(ntal)o(ly)1110 2710 y Fu(If)23
+b(set)i(to)g(`)p Ft(on)p Fu(',)g(Readline)g(will)f(displa)m(y)g
+(completions)h(with)f(matc)m(hes)h(sorted)1110 2819 y(horizon)m(tally)
+45 b(in)e(alphab)s(etical)i(order,)i(rather)c(than)g(do)m(wn)g(the)h
+(screen.)1110 2929 y(The)30 b(default)g(is)h(`)p Ft(off)p
+Fu('.)630 3093 y Ft(revert-all-at-newline)1110 3203 y
+Fu(If)e(set)h(to)g(`)p Ft(on)p Fu(',)g(Readline)g(will)g(undo)f(all)h
+(c)m(hanges)h(to)f(history)g(lines)f(b)s(efore)1110 3313
+y(returning)f(when)f Ft(accept-line)f Fu(is)j(executed.)41
+b(By)29 b(default,)g(history)g(lines)1110 3422 y(ma)m(y)42
+b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i(individual)e(undo)g(lists)h
+(across)g(calls)h(to)1110 3532 y Ft(readline)p Fu(.)38
+b(The)30 b(default)h(is)f(`)p Ft(off)p Fu('.)630 3696
+y Ft(show-all-if-ambiguous)1110 3806 y Fu(This)f(alters)i(the)f
+(default)g(b)s(eha)m(vior)g(of)g(the)h(completion)g(functions.)40
+b(If)29 b(set)1110 3915 y(to)f(`)p Ft(on)p Fu(',)g(w)m(ords)f(whic)m(h)
+g(ha)m(v)m(e)i(more)f(than)f(one)h(p)s(ossible)f(completion)h(cause)
+1110 4025 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i
+(instead)e(of)g(ringing)g(the)g(b)s(ell.)1110 4134 y(The)30
+b(default)g(v)-5 b(alue)31 b(is)g(`)p Ft(off)p Fu('.)630
+4299 y Ft(show-all-if-unmodified)1110 4408 y Fu(This)38
+b(alters)h(the)g(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h
+(functions)e(in)h(a)1110 4518 y(fashion)25 b(similar)h(to)g
+Fr(sho)m(w-all-if-am)m(biguous)p Fu(.)41 b(If)25 b(set)h(to)h(`)p
+Ft(on)p Fu(',)f(w)m(ords)f(whic)m(h)1110 4628 y(ha)m(v)m(e)32
+b(more)f(than)f(one)i(p)s(ossible)e(completion)i(without)f(an)m(y)g(p)s
+(ossible)f(par-)1110 4737 y(tial)43 b(completion)h(\(the)f(p)s(ossible)
+f(completions)h(don't)f(share)g(a)h(common)1110 4847
+y(pre\014x\))30 b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g
+(immediately)i(instead)e(of)h(ring-)1110 4956 y(ing)g(the)f(b)s(ell.)41
+b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Ft(off)p
+Fu('.)630 5121 y Ft(show-mode-in-prompt)1110 5230 y Fu(If)24
+b(set)h(to)g(`)p Ft(on)p Fu(',)g(add)f(a)h(string)f(to)h(the)f(b)s
+(eginning)g(of)g(the)h(prompt)e(indicating)1110 5340
+y(the)33 b(editing)h(mo)s(de:)46 b(emacs,)35 b(vi)e(command,)h(or)f(vi)
+h(insertion.)49 b(The)32 b(mo)s(de)p eop end
+%%Page: 116 122
+TeXDict begin 116 121 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(116)1110 299 y(strings)45
+b(are)h(user-settable)g(\(e.g.,)51 b Fr(emacs-mo)s(de-string)8
+b Fu(\).)87 b(The)45 b(default)1110 408 y(v)-5 b(alue)31
+b(is)f(`)p Ft(off)p Fu('.)630 558 y Ft(skip-completed-text)1110
+667 y Fu(If)i(set)i(to)f(`)p Ft(on)p Fu(',)h(this)f(alters)g(the)g
+(default)g(completion)h(b)s(eha)m(vior)f(when)f(in-)1110
+777 y(serting)d(a)h(single)g(matc)m(h)f(in)m(to)h(the)g(line.)40
+b(It's)30 b(only)f(activ)m(e)i(when)d(p)s(erform-)1110
+887 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f(w)m(ord.)53
+b(If)35 b(enabled,)g(readline)g(do)s(es)1110 996 y(not)41
+b(insert)f(c)m(haracters)i(from)e(the)h(completion)h(that)f(matc)m(h)g
+(c)m(haracters)1110 1106 y(after)c(p)s(oin)m(t)g(in)g(the)g(w)m(ord)f
+(b)s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g(w)m(ord)1110
+1215 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g(duplicated.)45
+b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110
+1325 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g
+(after)h(the)g(`)p Ft(e)p Fu(')f(in)1110 1435 y(`)p Ft(Makefile)p
+Fu(')c(will)i(result)f(in)g(`)p Ft(Makefile)p Fu(')f(rather)h(than)h(`)
+p Ft(Makefilefile)p Fu(',)1110 1544 y(assuming)d(there)g(is)h(a)f
+(single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5
+b(alue)1110 1654 y(is)30 b(`)p Ft(off)p Fu('.)630 1803
+y Ft(vi-cmd-mode-string)1110 1913 y Fu(If)j(the)h Fr(sho)m(w-mo)s
+(de-in-prompt)h Fu(v)-5 b(ariable)35 b(is)e(enabled,)i(this)f(string)f
+(is)h(dis-)1110 2022 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the)
+g(last)h(line)f(of)h(the)f(primary)f(prompt)g(when)1110
+2132 y(vi)32 b(editing)h(mo)s(de)f(is)g(activ)m(e)j(and)c(in)h(command)
+g(mo)s(de.)46 b(The)31 b(v)-5 b(alue)33 b(is)f(ex-)1110
+2242 y(panded)26 b(lik)m(e)i(a)f(k)m(ey)h(binding,)e(so)i(the)f
+(standard)f(set)h(of)g(meta-)h(and)e(con)m(trol)1110
+2351 y(pre\014xes)34 b(and)g(bac)m(kslash)i(escap)s(e)g(sequences)f(is)
+g(a)m(v)-5 b(ailable.)57 b(Use)35 b(the)g(`)p Ft(\\1)p
+Fu(')1110 2461 y(and)23 b(`)p Ft(\\2)p Fu(')h(escap)s(es)h(to)f(b)s
+(egin)g(and)f(end)g(sequences)i(of)f(non-prin)m(ting)f(c)m(harac-)1110
+2570 y(ters,)31 b(whic)m(h)g(can)g(b)s(e)f(used)g(to)h(em)m(b)s(ed)f(a)
+h(terminal)h(con)m(trol)g(sequence)f(in)m(to)1110 2680
+y(the)g(mo)s(de)f(string.)40 b(The)30 b(default)h(is)f(`)p
+Ft(\(cmd\))p Fu('.)630 2829 y Ft(vi-ins-mode-string)1110
+2939 y Fu(If)j(the)h Fr(sho)m(w-mo)s(de-in-prompt)h Fu(v)-5
+b(ariable)35 b(is)e(enabled,)i(this)f(string)f(is)h(dis-)1110
+3049 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the)g(last)h(line)f
+(of)h(the)f(primary)f(prompt)g(when)1110 3158 y(vi)35
+b(editing)h(mo)s(de)e(is)i(activ)m(e)h(and)d(in)h(insertion)g(mo)s(de.)
+54 b(The)35 b(v)-5 b(alue)35 b(is)g(ex-)1110 3268 y(panded)26
+b(lik)m(e)i(a)f(k)m(ey)h(binding,)e(so)i(the)f(standard)f(set)h(of)g
+(meta-)h(and)e(con)m(trol)1110 3377 y(pre\014xes)34 b(and)g(bac)m
+(kslash)i(escap)s(e)g(sequences)f(is)g(a)m(v)-5 b(ailable.)57
+b(Use)35 b(the)g(`)p Ft(\\1)p Fu(')1110 3487 y(and)23
+b(`)p Ft(\\2)p Fu(')h(escap)s(es)h(to)f(b)s(egin)g(and)f(end)g
+(sequences)i(of)f(non-prin)m(ting)f(c)m(harac-)1110 3597
+y(ters,)31 b(whic)m(h)g(can)g(b)s(e)f(used)g(to)h(em)m(b)s(ed)f(a)h
+(terminal)h(con)m(trol)g(sequence)f(in)m(to)1110 3706
+y(the)g(mo)s(de)f(string.)40 b(The)30 b(default)h(is)f(`)p
+Ft(\(ins\))p Fu('.)630 3856 y Ft(visible-stats)1110 3965
+y Fu(If)h(set)i(to)f(`)p Ft(on)p Fu(',)h(a)f(c)m(haracter)i(denoting)e
+(a)g(\014le's)g(t)m(yp)s(e)g(is)g(app)s(ended)e(to)j(the)1110
+4075 y(\014lename)e(when)e(listing)i(p)s(ossible)f(completions.)42
+b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)150 4224
+y(Key)f(Bindings)630 4334 y(The)41 b(syn)m(tax)i(for)f(con)m(trolling)h
+(k)m(ey)g(bindings)e(in)h(the)g(init)g(\014le)g(is)g(simple.)75
+b(First)43 b(y)m(ou)630 4443 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)
+h(the)g(command)f(that)i(y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41
+b(The)27 b(follo)m(wing)630 4553 y(sections)37 b(con)m(tain)g(tables)g
+(of)f(the)g(command)f(name,)j(the)e(default)g(k)m(eybinding,)h(if)f(an)
+m(y)-8 b(,)630 4663 y(and)30 b(a)h(short)f(description)g(of)h(what)f
+(the)g(command)h(do)s(es.)630 4792 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g
+(name)g(of)g(the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g
+(the)g(init)630 4902 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m
+(ou)g(wish)f(to)h(bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then)
+630 5011 y(the)f(name)h(of)f(the)g(command.)46 b(There)32
+b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g
+(and)630 5121 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m
+(terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72
+b(The)40 b(name)h(of)630 5230 y(the)35 b(k)m(ey)g(can)g(b)s(e)f
+(expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,)h(dep)s(ending)d(on)h
+(what)h(y)m(ou)g(\014nd)e(most)630 5340 y(comfortable.)p
+eop end
+%%Page: 117 123
+TeXDict begin 117 122 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(117)630 299 y(In)35
+b(addition)h(to)h(command)f(names,)i(readline)e(allo)m(ws)h(k)m(eys)g
+(to)g(b)s(e)e(b)s(ound)f(to)j(a)f(string)630 408 y(that)31
+b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g(\(a)h
+Fr(macro)5 b Fu(\).)630 538 y(The)42 b Ft(bind)30 b(-p)42
+b Fu(command)h(displa)m(ys)g(Readline)g(function)g(names)g(and)f
+(bindings)g(in)h(a)630 647 y(format)37 b(that)h(can)f(put)f(directly)i
+(in)m(to)g(an)f(initialization)j(\014le.)60 b(See)38
+b(Section)f(4.2)i([Bash)630 757 y(Builtins],)31 b(page)g(50.)630
+906 y Fr(k)m(eyname)5 b Fu(:)42 b Fr(function-name)35
+b Fu(or)c Fr(macro)1110 1015 y(k)m(eyname)k Fu(is)29
+b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s(elled)e(out)h(in)g(English.)39
+b(F)-8 b(or)30 b(example:)1350 1144 y Ft(Control-u:)45
+b(universal-argument)1350 1254 y(Meta-Rubout:)f(backward-kill-word)1350
+1363 y(Control-o:)h(">)i(output")1110 1493 y Fu(In)94
+b(the)g(example)h(ab)s(o)m(v)m(e,)112 b Fj(C-u)94 b Fu(is)g(b)s(ound)f
+(to)i(the)f(function)1110 1602 y Ft(universal-argument)p
+Fu(,)124 b Fj(M-DEL)107 b Fu(is)i(b)s(ound)e(to)j(the)f(function)1110
+1712 y Ft(backward-kill-word)p Fu(,)75 b(and)69 b Fj(C-o)g
+Fu(is)h(b)s(ound)e(to)j(run)d(the)i(macro)1110 1821 y(expressed)45
+b(on)h(the)g(righ)m(t)g(hand)e(side)i(\(that)h(is,)i(to)e(insert)e(the)
+h(text)h(`)p Ft(>)1110 1931 y(output)p Fu(')29 b(in)m(to)i(the)g
+(line\).)1110 2060 y(A)62 b(n)m(um)m(b)s(er)e(of)i(sym)m(b)s(olic)h(c)m
+(haracter)g(names)f(are)g(recognized)h(while)1110 2170
+y(pro)s(cessing)40 b(this)f(k)m(ey)i(binding)e(syn)m(tax:)60
+b Fr(DEL)p Fu(,)42 b Fr(ESC)p Fu(,)g Fr(ESCAPE)p Fu(,)f
+Fr(LFD)p Fu(,)1110 2279 y Fr(NEWLINE)p Fu(,)31 b Fr(RET)p
+Fu(,)f Fr(RETURN)p Fu(,)g Fr(R)m(UBOUT)p Fu(,)h Fr(SP)-8
+b(A)m(CE)p Fu(,)31 b Fr(SPC)p Fu(,)e(and)h Fr(T)-8 b(AB)p
+Fu(.)630 2428 y Ft(")p Fr(k)m(eyseq)r Ft(")p Fu(:)41
+b Fr(function-name)36 b Fu(or)30 b Fr(macro)1110 2538
+y(k)m(eyseq)k Fu(di\013ers)d(from)f Fr(k)m(eyname)37
+b Fu(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f(denoting)g(an)g(en-)1110
+2647 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s(e)f(sp)s(eci\014ed,)h(b)m
+(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in)1110 2757
+y(double)29 b(quotes.)41 b(Some)29 b Fm(gnu)h Fu(Emacs)f(st)m(yle)i(k)m
+(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as)1110 2866
+y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s(ecial)h(c)m
+(haracter)g(names)f(are)g(not)1110 2976 y(recognized.)1350
+3105 y Ft("\\C-u":)46 b(universal-argument)1350 3215
+y("\\C-x\\C-r":)f(re-read-init-file)1350 3324 y("\\e[11~":)g("Function)
+h(Key)g(1")1110 3453 y Fu(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74
+b Fj(C-u)64 b Fu(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110
+3563 y Ft(universal-argument)39 b Fu(\(just)k(as)h(it)g(w)m(as)g(in)g
+(the)f(\014rst)g(example\),)49 b(`)p Fj(C-x)1110 3673
+y(C-r)p Fu(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f
+Ft(re-read-init-file)p Fu(,)c(and)j(`)p Ft(ESC)h([)g(1)g(1)1110
+3782 y(~)p Fu(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p
+Ft(Function)e(Key)g(1)p Fu('.)630 3931 y(The)g(follo)m(wing)i
+Fm(gnu)f Fu(Emacs)g(st)m(yle)h(escap)s(e)f(sequences)g(are)g(a)m(v)-5
+b(ailable)32 b(when)d(sp)s(ecifying)630 4041 y(k)m(ey)i(sequences:)630
+4189 y Fj(\\C-)336 b Fu(con)m(trol)32 b(pre\014x)630
+4338 y Fj(\\M-)336 b Fu(meta)31 b(pre\014x)630 4487 y
+Fj(\\e)384 b Fu(an)30 b(escap)s(e)h(c)m(haracter)630
+4635 y Fj(\\\\)384 b Fu(bac)m(kslash)630 4784 y Fj(\\)p
+Ft(")g(")p Fu(,)30 b(a)h(double)f(quotation)i(mark)630
+4933 y Fj(\\')384 b Ft(')p Fu(,)30 b(a)h(single)g(quote)g(or)f(ap)s
+(ostrophe)630 5082 y(In)d(addition)h(to)g(the)g Fm(gnu)f
+Fu(Emacs)h(st)m(yle)h(escap)s(e)f(sequences,)h(a)f(second)f(set)h(of)g
+(bac)m(kslash)630 5191 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630
+5340 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))p eop end
+%%Page: 118 124
+TeXDict begin 118 123 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(118)630 299 y Ft(\\b)384
+b Fu(bac)m(kspace)630 456 y Ft(\\d)g Fu(delete)630 613
+y Ft(\\f)g Fu(form)30 b(feed)630 770 y Ft(\\n)384 b Fu(newline)630
+928 y Ft(\\r)g Fu(carriage)32 b(return)630 1085 y Ft(\\t)384
+b Fu(horizon)m(tal)32 b(tab)630 1242 y Ft(\\v)384 b Fu(v)m(ertical)32
+b(tab)630 1399 y Ft(\\)p Fj(nnn)288 b Fu(the)35 b(eigh)m(t-bit)h(c)m
+(haracter)g(whose)e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5
+b(alue)35 b Fr(nnn)e Fu(\(one)i(to)1110 1509 y(three)c(digits\))630
+1666 y Ft(\\x)p Fj(HH)288 b Fu(the)38 b(eigh)m(t-bit)i(c)m(haracter)g
+(whose)e(v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5
+b(alue)39 b Fr(HH)1110 1775 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e
+(digits\))630 1933 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g
+(macro,)i(single)e(or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to)
+630 2042 y(indicate)23 b(a)e(macro)h(de\014nition.)38
+b(Unquoted)21 b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f
+(name.)38 b(In)630 2152 y(the)22 b(macro)f(b)s(o)s(dy)-8
+b(,)23 b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m
+(e)j(are)e(expanded.)37 b(Bac)m(kslash)630 2261 y(will)j(quote)h(an)m
+(y)f(other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k(including)39
+b(`)p Ft(")p Fu(')h(and)g(`)p Ft(')p Fu('.)69 b(F)-8
+b(or)630 2371 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i
+(mak)m(e)h(`)p Fj(C-x)j Ft(\\)p Fu(')c(insert)f(a)h(single)h(`)p
+Ft(\\)p Fu(')f(in)m(to)g(the)g(line:)870 2504 y Ft("\\C-x\\\\":)45
+b("\\\\")150 2701 y Fk(8.3.2)63 b(Conditional)41 b(Init)g(Constructs)
+150 2848 y Fu(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f
+(in)g(spirit)f(to)i(the)f(conditional)h(compilation)g(features)f(of)150
+2958 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g
+(bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s
+(erformed)f(as)i(the)150 3067 y(result)f(of)h(tests.)41
+b(There)30 b(are)h(four)f(parser)f(directiv)m(es)j(used.)150
+3225 y Ft($if)336 b Fu(The)31 b Ft($if)f Fu(construct)i(allo)m(ws)h
+(bindings)d(to)i(b)s(e)e(made)i(based)f(on)g(the)g(editing)h(mo)s(de,)g
+(the)630 3334 y(terminal)37 b(b)s(eing)f(used,)h(or)f(the)h
+(application)g(using)f(Readline.)59 b(The)36 b(text)h(of)f(the)h(test,)
+630 3444 y(after)30 b(an)m(y)g(comparison)g(op)s(erator,)g(extends)f
+(to)h(the)g(end)f(of)h(the)f(line;)i(unless)e(otherwise)630
+3553 y(noted,)i(no)f(c)m(haracters)i(are)f(required)e(to)i(isolate)i
+(it.)630 3711 y Ft(mode)288 b Fu(The)30 b Ft(mode=)e
+Fu(form)i(of)g(the)h Ft($if)e Fu(directiv)m(e)j(is)e(used)f(to)i(test)g
+(whether)e(Read-)1110 3820 y(line)44 b(is)f(in)g Ft(emacs)f
+Fu(or)h Ft(vi)g Fu(mo)s(de.)79 b(This)42 b(ma)m(y)i(b)s(e)e(used)h(in)g
+(conjunction)1110 3930 y(with)c(the)h(`)p Ft(set)29 b(keymap)p
+Fu(')38 b(command,)k(for)d(instance,)j(to)e(set)g(bindings)e(in)1110
+4039 y(the)32 b Ft(emacs-standard)c Fu(and)j Ft(emacs-ctlx)d
+Fu(k)m(eymaps)k(only)g(if)g(Readline)g(is)1110 4149 y(starting)f(out)g
+(in)f Ft(emacs)f Fu(mo)s(de.)630 4306 y Ft(term)288 b
+Fu(The)26 b Ft(term=)g Fu(form)g(ma)m(y)i(b)s(e)e(used)g(to)i(include)f
+(terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 4416 y(ings,)38
+b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f(output)g(b)m(y)g
+(the)g(terminal's)1110 4525 y(function)24 b(k)m(eys.)39
+b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g(the)g(`)p
+Ft(=)p Fu(')g(is)g(tested)h(against)1110 4635 y(b)s(oth)k(the)h(full)g
+(name)g(of)g(the)g(terminal)h(and)e(the)i(p)s(ortion)e(of)h(the)g
+(terminal)1110 4744 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p
+Ft(-)p Fu('.)50 b(This)33 b(allo)m(ws)i Ft(sun)e Fu(to)h(matc)m(h)g(b)s
+(oth)f Ft(sun)g Fu(and)1110 4854 y Ft(sun-cmd)p Fu(,)c(for)h(instance.)
+630 5011 y Ft(version)144 b Fu(The)44 b Ft(version)f
+Fu(test)i(ma)m(y)h(b)s(e)e(used)f(to)j(p)s(erform)d(comparisons)i
+(against)1110 5121 y(sp)s(eci\014c)c(Readline)i(v)m(ersions.)74
+b(The)42 b Ft(version)d Fu(expands)i(to)h(the)g(curren)m(t)1110
+5230 y(Readline)25 b(v)m(ersion.)39 b(The)23 b(set)h(of)g(comparison)h
+(op)s(erators)f(includes)f(`)p Ft(=)p Fu(')h(\(and)1110
+5340 y(`)p Ft(==)p Fu('\),)33 b(`)p Ft(!=)p Fu(',)f(`)p
+Ft(<=)p Fu(',)h(`)p Ft(>=)p Fu(',)f(`)p Ft(<)p Fu(',)h(and)e(`)p
+Ft(>)p Fu('.)46 b(The)31 b(v)m(ersion)i(n)m(um)m(b)s(er)d(supplied)h
+(on)p eop end
+%%Page: 119 125
+TeXDict begin 119 124 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(119)1110 299 y(the)34
+b(righ)m(t)h(side)f(of)g(the)g(op)s(erator)g(consists)h(of)f(a)g(ma)5
+b(jor)35 b(v)m(ersion)f(n)m(um)m(b)s(er,)1110 408 y(an)45
+b(optional)i(decimal)f(p)s(oin)m(t,)k(and)44 b(an)i(optional)g(minor)f
+(v)m(ersion)h(\(e.g.,)1110 518 y(`)p Ft(7.1)p Fu('\).)40
+b(If)27 b(the)h(minor)f(v)m(ersion)h(is)g(omitted,)h(it)f(is)g(assumed)
+f(to)h(b)s(e)f(`)p Ft(0)p Fu('.)40 b(The)1110 628 y(op)s(erator)34
+b(ma)m(y)g(b)s(e)f(separated)g(from)g(the)h(string)f
+Ft(version)f Fu(and)h(from)g(the)1110 737 y(v)m(ersion)39
+b(n)m(um)m(b)s(er)f(argumen)m(t)h(b)m(y)f(whitespace.)67
+b(The)38 b(follo)m(wing)i(example)1110 847 y(sets)31
+b(a)g(v)-5 b(ariable)31 b(if)f(the)h(Readline)g(v)m(ersion)f(b)s(eing)g
+(used)g(is)g(7.0)i(or)e(new)m(er:)1350 981 y Ft($if)47
+b(version)f(>=)h(7.0)1350 1091 y(set)g(show-mode-in-prompt)42
+b(on)1350 1200 y($endif)630 1360 y(application)1110 1469
+y Fu(The)21 b Fr(application)j Fu(construct)e(is)g(used)f(to)i(include)
+f(application-sp)s(eci\014c)h(set-)1110 1579 y(tings.)39
+b(Eac)m(h)26 b(program)e(using)g(the)h(Readline)g(library)g(sets)g(the)
+g Fr(application)1110 1689 y(name)p Fu(,)g(and)e(y)m(ou)g(can)h(test)g
+(for)f(a)g(particular)h(v)-5 b(alue.)39 b(This)22 b(could)h(b)s(e)g
+(used)f(to)1110 1798 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e
+(useful)g(for)h(a)g(sp)s(eci\014c)f(program.)48 b(F)-8
+b(or)1110 1908 y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f
+(a)i(k)m(ey)f(sequence)h(that)f(quotes)1110 2017 y(the)e(curren)m(t)f
+(or)g(previous)g(w)m(ord)g(in)g(Bash:)1350 2152 y Ft($if)47
+b(Bash)1350 2262 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)
+1350 2371 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 2481 y($endif)630
+2640 y(variable)96 b Fu(The)33 b Fr(v)-5 b(ariable)39
+b Fu(construct)33 b(pro)m(vides)g(simple)g(equalit)m(y)i(tests)e(for)g
+(Readline)1110 2750 y(v)-5 b(ariables)32 b(and)f(v)-5
+b(alues.)45 b(The)32 b(p)s(ermitted)f(comparison)h(op)s(erators)f(are)i
+(`)p Ft(=)p Fu(',)1110 2859 y(`)p Ft(==)p Fu(',)49 b(and)44
+b(`)p Ft(!=)p Fu('.)85 b(The)44 b(v)-5 b(ariable)46 b(name)f(m)m(ust)g
+(b)s(e)g(separated)g(from)g(the)1110 2969 y(comparison)25
+b(op)s(erator)g(b)m(y)g(whitespace;)j(the)d(op)s(erator)g(ma)m(y)g(b)s
+(e)f(separated)1110 3078 y(from)33 b(the)h(v)-5 b(alue)35
+b(on)f(the)g(righ)m(t)g(hand)f(side)h(b)m(y)f(whitespace.)52
+b(Both)35 b(string)1110 3188 y(and)i(b)s(o)s(olean)g(v)-5
+b(ariables)38 b(ma)m(y)h(b)s(e)d(tested.)63 b(Bo)s(olean)39
+b(v)-5 b(ariables)38 b(m)m(ust)g(b)s(e)1110 3298 y(tested)46
+b(against)g(the)f(v)-5 b(alues)46 b Fr(on)f Fu(and)f
+Fr(o\013)p Fu(.)85 b(The)45 b(follo)m(wing)h(example)g(is)1110
+3407 y(equiv)-5 b(alen)m(t)32 b(to)f(the)f Ft(mode=emacs)e
+Fu(test)j(describ)s(ed)f(ab)s(o)m(v)m(e:)1350 3542 y
+Ft($if)47 b(editing-mode)d(==)k(emacs)1350 3651 y(set)f
+(show-mode-in-prompt)42 b(on)1350 3761 y($endif)150 3920
+y($endif)192 b Fu(This)29 b(command,)i(as)f(seen)h(in)f(the)g(previous)
+g(example,)h(terminates)g(an)g Ft($if)e Fu(command.)150
+4080 y Ft($else)240 b Fu(Commands)29 b(in)h(this)h(branc)m(h)e(of)i
+(the)f Ft($if)g Fu(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g
+(fails.)150 4239 y Ft($include)96 b Fu(This)43 b(directiv)m(e)i(tak)m
+(es)g(a)e(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g
+(commands)630 4349 y(and)38 b(bindings)f(from)h(that)i(\014le.)65
+b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e
+(from)630 4458 y Ft(/etc/inputrc)p Fu(:)870 4593 y Ft($include)46
+b(/etc/inputrc)150 4792 y Fk(8.3.3)63 b(Sample)41 b(Init)g(File)150
+4939 y Fu(Here)27 b(is)f(an)h(example)g(of)f(an)h Fr(inputrc)k
+Fu(\014le.)39 b(This)26 b(illustrates)h(k)m(ey)h(binding,)e(v)-5
+b(ariable)27 b(assignmen)m(t,)i(and)150 5049 y(conditional)j(syn)m
+(tax.)p eop end
+%%Page: 120 126
+TeXDict begin 120 125 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(120)390 408 y Ft(#)47
+b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h
+(editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h
+(Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include)
+g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g
+(re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390
+956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390
+1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(system-wide)e
+(bindings)h(and)g(variable)390 1285 y(#)h(assignments)e(from)i
+(/etc/Inputrc)390 1395 y($include)f(/etc/Inputrc)390
+1614 y(#)390 1724 y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.)
+390 1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390
+2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the)
+h(function)f(name)g(is)h(ignored)390 2600 y(#)390 2710
+y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 2819 y(#)390
+2929 y(#"\\M-OD":)379 b(backward-char)390 3039 y(#"\\M-OC":)g
+(forward-char)390 3148 y(#"\\M-OA":)g(previous-history)390
+3258 y(#"\\M-OB":)g(next-history)390 3367 y(#)390 3477
+y(#)47 b(Arrow)g(keys)f(in)i(ANSI)e(mode)390 3587 y(#)390
+3696 y("\\M-[D":)380 b(backward-char)390 3806 y("\\M-[C":)g
+(forward-char)390 3915 y("\\M-[A":)g(previous-history)390
+4025 y("\\M-[B":)g(next-history)390 4134 y(#)390 4244
+y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode)390
+4354 y(#)390 4463 y(#"\\M-\\C-OD":)331 b(backward-char)390
+4573 y(#"\\M-\\C-OC":)g(forward-char)390 4682 y(#"\\M-\\C-OA":)g
+(previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390
+4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode)
+390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390
+5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end
+%%Page: 121 127
+TeXDict begin 121 126 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(121)390 299 y Ft(#"\\M-\\C-[A":)
+331 b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390
+628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066
+y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the)
+g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f
+(are)h(convenient)e(for)i(shell)f(interaction)390 1504
+y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724
+y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390
+1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390
+1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390
+2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390
+2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g
+(backslash)e(\(testing)h(backslash)f(escapes)390 2381
+y(#)i(in)h(sequences)d(and)i(macros\))390 2491 y("\\C-x\\\\":)e("\\\\")
+390 2600 y(#)i(Quote)g(the)g(current)f(or)h(previous)e(word)390
+2710 y("\\C-xq":)h("\\eb\\"\\ef\\"")390 2819 y(#)h(Add)g(a)h(binding)e
+(to)h(refresh)f(the)h(line,)f(which)g(is)h(unbound)390
+2929 y("\\C-xr":)f(redraw-current-line)390 3039 y(#)h(Edit)g(variable)f
+(on)h(current)f(line.)390 3148 y("\\M-\\C-v":)f
+("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-)o(a\\C-)o(y=")390 3258
+y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h
+(available)390 3587 y(set)f(bell-style)e(visible)390
+3806 y(#)i(don't)g(strip)f(characters)f(to)i(7)h(bits)e(when)h(reading)
+390 3915 y(set)g(input-meta)e(on)390 4134 y(#)i(allow)g(iso-latin1)e
+(characters)g(to)i(be)g(inserted)f(rather)390 4244 y(#)h(than)g
+(converted)e(to)j(prefix-meta)c(sequences)390 4354 y(set)j
+(convert-meta)d(off)390 4573 y(#)j(display)f(characters)f(with)i(the)g
+(eighth)f(bit)h(set)g(directly)390 4682 y(#)g(rather)g(than)f(as)h
+(meta-prefixed)e(characters)390 4792 y(set)i(output-meta)e(on)390
+5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f
+(completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g
+(he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f
+(completion-query-items)42 b(150)p eop end
+%%Page: 122 128
+TeXDict begin 122 127 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(122)390 299 y Ft(#)47
+b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390
+628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390
+847 y($endif)150 1089 y Fs(8.4)68 b(Bindable)45 b(Readline)i(Commands)
+150 1248 y Fu(This)32 b(section)h(describ)s(es)f(Readline)h(commands)f
+(that)h(ma)m(y)h(b)s(e)d(b)s(ound)g(to)i(k)m(ey)g(sequences.)48
+b(Y)-8 b(ou)33 b(can)150 1358 y(list)40 b(y)m(our)f(k)m(ey)i(bindings)d
+(b)m(y)h(executing)i Ft(bind)29 b(-P)39 b Fu(or,)j(for)d(a)h(more)g
+(terse)g(format,)i(suitable)e(for)f(an)150 1468 y Fr(inputrc)34
+b Fu(\014le,)29 b Ft(bind)g(-p)p Fu(.)40 b(\(See)30 b(Section)f(4.2)h
+([Bash)g(Builtins],)g(page)g(50.\))41 b(Command)28 b(names)h(without)
+150 1577 y(an)h(accompan)m(ying)i(k)m(ey)f(sequence)g(are)g(un)m(b)s
+(ound)d(b)m(y)i(default.)275 1713 y(In)25 b(the)h(follo)m(wing)i
+(descriptions,)f Fr(p)s(oin)m(t)h Fu(refers)e(to)h(the)f(curren)m(t)g
+(cursor)g(p)s(osition,)h(and)f Fr(mark)31 b Fu(refers)150
+1822 y(to)40 b(a)f(cursor)f(p)s(osition)h(sa)m(v)m(ed)h(b)m(y)f(the)g
+Ft(set-mark)d Fu(command.)66 b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f
+(p)s(oin)m(t)g(and)150 1932 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f
+Fr(region)p Fu(.)150 2132 y Fk(8.4.1)63 b(Commands)42
+b(F)-10 b(or)41 b(Mo)m(ving)150 2304 y Ft(beginning-of-line)26
+b(\(C-a\))630 2414 y Fu(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f
+(curren)m(t)g(line.)150 2574 y Ft(end-of-line)d(\(C-e\))630
+2684 y Fu(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150
+2844 y Ft(forward-char)c(\(C-f\))630 2954 y Fu(Mo)m(v)m(e)32
+b(forw)m(ard)e(a)h(c)m(haracter.)150 3114 y Ft(backward-char)c(\(C-b\))
+630 3223 y Fu(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150
+3384 y Ft(forward-word)d(\(M-f\))630 3493 y Fu(Mo)m(v)m(e)32
+b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41
+b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630
+3603 y(digits.)150 3763 y Ft(backward-word)27 b(\(M-b\))630
+3873 y Fu(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g
+(curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34
+b(are)g(comp)s(osed)630 3982 y(of)d(letters)g(and)f(digits.)150
+4143 y Ft(shell-forward-word)25 b(\(\))630 4252 y Fu(Mo)m(v)m(e)30
+b(forw)m(ard)e(to)h(the)f(end)f(of)h(the)h(next)f(w)m(ord.)40
+b(W)-8 b(ords)28 b(are)g(delimited)h(b)m(y)f(non-quoted)630
+4362 y(shell)j(metac)m(haracters.)150 4522 y Ft(shell-backward-word)25
+b(\(\))630 4632 y Fu(Mo)m(v)m(e)37 b(bac)m(k)e(to)h(the)f(start)g(of)g
+(the)g(curren)m(t)g(or)f(previous)h(w)m(ord.)53 b(W)-8
+b(ords)35 b(are)g(delimited)630 4741 y(b)m(y)30 b(non-quoted)h(shell)f
+(metac)m(haracters.)150 4902 y Ft(previous-screen-line)25
+b(\(\))630 5011 y Fu(A)m(ttempt)41 b(to)g(mo)m(v)m(e)h(p)s(oin)m(t)e
+(to)h(the)f(same)h(ph)m(ysical)g(screen)f(column)g(on)g(the)g(previous)
+630 5121 y(ph)m(ysical)26 b(screen)f(line.)39 b(This)24
+b(will)i(not)f(ha)m(v)m(e)h(the)f(desired)g(e\013ect)h(if)f(the)h
+(curren)m(t)e(Readline)630 5230 y(line)k(do)s(es)f(not)g(tak)m(e)i(up)d
+(more)i(than)f(one)g(ph)m(ysical)h(line)g(or)f(if)g(p)s(oin)m(t)h(is)f
+(not)h(greater)g(than)630 5340 y(the)j(length)f(of)h(the)f(prompt)g
+(plus)f(the)i(screen)f(width.)p eop end
+%%Page: 123 129
+TeXDict begin 123 128 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(123)150 299 y Ft(next-screen-line)
+26 b(\(\))630 408 y Fu(A)m(ttempt)g(to)f(mo)m(v)m(e)i(p)s(oin)m(t)d(to)
+i(the)e(same)i(ph)m(ysical)f(screen)g(column)f(on)h(the)f(next)h(ph)m
+(ysical)630 518 y(screen)e(line.)39 b(This)23 b(will)g(not)h(ha)m(v)m
+(e)h(the)e(desired)g(e\013ect)i(if)e(the)g(curren)m(t)h(Readline)g
+(line)f(do)s(es)630 628 y(not)k(tak)m(e)i(up)e(more)g(than)g(one)g(ph)m
+(ysical)h(line)g(or)f(if)g(the)h(length)f(of)h(the)f(curren)m(t)g
+(Readline)630 737 y(line)k(is)f(not)h(greater)g(than)f(the)h(length)g
+(of)f(the)h(prompt)e(plus)h(the)g(screen)h(width.)150
+893 y Ft(clear-screen)c(\(C-l\))630 1003 y Fu(Clear)g(the)g(screen)f
+(and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f
+(curren)m(t)g(line)g(at)g(the)g(top)630 1112 y(of)k(the)f(screen.)150
+1268 y Ft(redraw-current-line)25 b(\(\))630 1378 y Fu(Refresh)30
+b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s
+(ound.)150 1574 y Fk(8.4.2)63 b(Commands)42 b(F)-10 b(or)41
+b(Manipulating)h(The)f(History)150 1744 y Ft(accept-line)27
+b(\(Newline)h(or)i(Return\))630 1854 y Fu(Accept)25 b(the)e(line)h
+(regardless)g(of)f(where)g(the)h(cursor)e(is.)39 b(If)23
+b(this)g(line)h(is)f(non-empt)m(y)-8 b(,)26 b(add)c(it)630
+1963 y(to)27 b(the)f(history)g(list)h(according)g(to)g(the)f(setting)i
+(of)e(the)g Ft(HISTCONTROL)d Fu(and)j Ft(HISTIGNORE)630
+2073 y Fu(v)-5 b(ariables.)42 b(If)30 b(this)h(line)g(is)g(a)g(mo)s
+(di\014ed)e(history)i(line,)g(then)f(restore)i(the)f(history)f(line)h
+(to)630 2182 y(its)g(original)g(state.)150 2338 y Ft(previous-history)
+26 b(\(C-p\))630 2448 y Fu(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g
+(history)h(list,)g(fetc)m(hing)g(the)g(previous)f(command.)150
+2604 y Ft(next-history)d(\(C-n\))630 2714 y Fu(Mo)m(v)m(e)32
+b(`forw)m(ard')f(through)e(the)i(history)f(list,)i(fetc)m(hing)f(the)g
+(next)f(command.)150 2870 y Ft(beginning-of-history)25
+b(\(M-<\))630 2979 y Fu(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)
+h(the)f(history)-8 b(.)150 3135 y Ft(end-of-history)26
+b(\(M->\))630 3245 y Fu(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h
+(input)e(history)-8 b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s
+(eing)f(en)m(tered.)150 3401 y Ft(reverse-search-history)24
+b(\(C-r\))630 3510 y Fu(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g
+(the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g
+(his-)630 3620 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29
+b(is)i(an)f(incremen)m(tal)i(searc)m(h.)150 3776 y Ft
+(forward-search-history)24 b(\(C-s\))630 3886 y Fu(Searc)m(h)44
+b(forw)m(ard)f(starting)h(at)h(the)e(curren)m(t)h(line)g(and)f(mo)m
+(ving)h(`do)m(wn')g(through)f(the)630 3995 y(history)30
+b(as)h(necessary)-8 b(.)41 b(This)30 b(is)g(an)h(incremen)m(tal)g
+(searc)m(h.)150 4151 y Ft(non-incremental-reverse-)o(sear)o(ch-h)o(ist)
+o(ory)24 b(\(M-p\))630 4261 y Fu(Searc)m(h)31 b(bac)m(kw)m(ard)h
+(starting)g(at)g(the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e
+(through)h(the)g(his-)630 4370 y(tory)36 b(as)g(necessary)h(using)e(a)i
+(non-incremen)m(tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h
+(the)630 4480 y(user.)k(The)30 b(searc)m(h)h(string)f(ma)m(y)h(matc)m
+(h)g(an)m(ywhere)g(in)f(a)h(history)f(line.)150 4636
+y Ft(non-incremental-forward-)o(sear)o(ch-h)o(ist)o(ory)24
+b(\(M-n\))630 4746 y Fu(Searc)m(h)44 b(forw)m(ard)f(starting)h(at)h
+(the)e(curren)m(t)h(line)g(and)f(mo)m(ving)h(`do)m(wn')g(through)f(the)
+630 4855 y(history)27 b(as)f(necessary)i(using)e(a)h(non-incremen)m
+(tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i(the)630
+4965 y(user.)40 b(The)30 b(searc)m(h)h(string)f(ma)m(y)h(matc)m(h)g(an)
+m(ywhere)g(in)f(a)h(history)f(line.)150 5121 y Ft
+(history-search-forward)24 b(\(\))630 5230 y Fu(Searc)m(h)42
+b(forw)m(ard)f(through)f(the)i(history)f(for)g(the)h(string)f(of)h(c)m
+(haracters)h(b)s(et)m(w)m(een)f(the)630 5340 y(start)36
+b(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m(t.)58
+b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the)p
+eop end
+%%Page: 124 130
+TeXDict begin 124 129 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(124)630 299 y(b)s(eginning)32
+b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i
+(searc)m(h.)48 b(By)33 b(default,)g(this)630 408 y(command)d(is)h(un)m
+(b)s(ound.)150 581 y Ft(history-search-backward)24 b(\(\))630
+690 y Fu(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)
+g(the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630
+800 y(start)g(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m(t.)
+58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the)630
+910 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32
+b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33
+b(default,)g(this)630 1019 y(command)d(is)h(un)m(b)s(ound.)150
+1192 y Ft(history-substring-search)o(-for)o(ward)24 b(\(\))630
+1301 y Fu(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g
+(the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630
+1411 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m
+(t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere)
+630 1520 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h
+(non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e
+(command)630 1630 y(is)e(un)m(b)s(ound.)150 1802 y Ft
+(history-substring-search)o(-bac)o(kwar)o(d)24 b(\(\))630
+1912 y Fu(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g
+(for)g(the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630
+2021 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m
+(t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere)
+630 2131 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h
+(non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e
+(command)630 2241 y(is)e(un)m(b)s(ound.)150 2413 y Ft(yank-nth-arg)d
+(\(M-C-y\))630 2523 y Fu(Insert)37 b(the)g(\014rst)f(argumen)m(t)i(to)f
+(the)h(previous)e(command)h(\(usually)g(the)g(second)g(w)m(ord)630
+2632 y(on)32 b(the)g(previous)f(line\))i(at)f(p)s(oin)m(t.)46
+b(With)32 b(an)g(argumen)m(t)g Fr(n)p Fu(,)g(insert)g(the)g
+Fr(n)p Fu(th)f(w)m(ord)g(from)630 2742 y(the)k(previous)f(command)h
+(\(the)g(w)m(ords)g(in)f(the)h(previous)g(command)f(b)s(egin)h(with)f
+(w)m(ord)630 2851 y(0\).)69 b(A)40 b(negativ)m(e)h(argumen)m(t)f
+(inserts)g(the)f Fr(n)p Fu(th)g(w)m(ord)g(from)g(the)h(end)f(of)h(the)f
+(previous)630 2961 y(command.)48 b(Once)33 b(the)g(argumen)m(t)h
+Fr(n)e Fu(is)h(computed,)h(the)f(argumen)m(t)g(is)g(extracted)i(as)e
+(if)630 3070 y(the)e(`)p Ft(!)p Fj(n)p Fu(')f(history)g(expansion)g
+(had)g(b)s(een)g(sp)s(eci\014ed.)150 3243 y Ft(yank-last-arg)d(\(M-.)i
+(or)h(M-_\))630 3352 y Fu(Insert)k(last)i(argumen)m(t)g(to)g(the)f
+(previous)f(command)h(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630
+3462 y(history)e(en)m(try\).)51 b(With)34 b(a)g(n)m(umeric)g(argumen)m
+(t,)h(b)s(eha)m(v)m(e)f(exactly)h(lik)m(e)g Ft(yank-nth-arg)p
+Fu(.)630 3572 y(Successiv)m(e)26 b(calls)g(to)f Ft(yank-last-arg)c
+Fu(mo)m(v)m(e)27 b(bac)m(k)e(through)f(the)h(history)g(list,)i
+(inserting)630 3681 y(the)c(last)g(w)m(ord)f(\(or)h(the)g(w)m(ord)f(sp)
+s(eci\014ed)g(b)m(y)g(the)h(argumen)m(t)g(to)g(the)g(\014rst)f(call\))i
+(of)f(eac)m(h)h(line)630 3791 y(in)36 b(turn.)58 b(An)m(y)36
+b(n)m(umeric)h(argumen)m(t)f(supplied)g(to)h(these)g(successiv)m(e)g
+(calls)h(determines)630 3900 y(the)d(direction)g(to)h(mo)m(v)m(e)g
+(through)e(the)h(history)-8 b(.)54 b(A)35 b(negativ)m(e)i(argumen)m(t)e
+(switc)m(hes)h(the)630 4010 y(direction)23 b(through)g(the)g(history)f
+(\(bac)m(k)i(or)f(forw)m(ard\).)38 b(The)22 b(history)h(expansion)g
+(facilities)630 4120 y(are)28 b(used)f(to)h(extract)h(the)f(last)g
+(argumen)m(t,)h(as)e(if)h(the)g(`)p Ft(!$)p Fu(')f(history)g(expansion)
+h(had)f(b)s(een)630 4229 y(sp)s(eci\014ed.)150 4441 y
+Fk(8.4.3)63 b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10
+b(ext)150 4620 y Fj(end-of-file)27 b Ft(\(usually)h(C-d\))630
+4729 y Fu(The)e(c)m(haracter)h(indicating)h(end-of-\014le)e(as)h(set,)g
+(for)f(example,)i(b)m(y)e Ft(stty)p Fu(.)39 b(If)25 b(this)h(c)m
+(harac-)630 4839 y(ter)c(is)g(read)g(when)e(there)i(are)h(no)e(c)m
+(haracters)j(on)d(the)h(line,)i(and)d(p)s(oin)m(t)h(is)g(at)h(the)f(b)s
+(eginning)630 4948 y(of)31 b(the)f(line,)h(Readline)g(in)m(terprets)g
+(it)g(as)f(the)h(end)f(of)g(input)f(and)h(returns)f Fm(eof)p
+Fu(.)150 5121 y Ft(delete-char)e(\(C-d\))630 5230 y Fu(Delete)35
+b(the)f(c)m(haracter)h(at)f(p)s(oin)m(t.)49 b(If)33 b(this)g(function)g
+(is)g(b)s(ound)e(to)j(the)g(same)f(c)m(haracter)630 5340
+y(as)e(the)f(tt)m(y)i Fm(eof)d Fu(c)m(haracter,)j(as)f
+Fj(C-d)e Fu(commonly)i(is,)g(see)g(ab)s(o)m(v)m(e)h(for)e(the)g
+(e\013ects.)p eop end
+%%Page: 125 131
+TeXDict begin 125 130 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(125)150 299 y Ft
+(backward-delete-char)25 b(\(Rubout\))630 408 y Fu(Delete)32
+b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40 b(A)30
+b(n)m(umeric)g(argumen)m(t)h(means)f(to)h(kill)g(the)630
+518 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150
+682 y Ft(forward-backward-delete-)o(char)24 b(\(\))630
+792 y Fu(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h
+(unless)d(the)i(cursor)e(is)h(at)h(the)g(end)e(of)i(the)630
+902 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s(ehind)
+d(the)i(cursor)f(is)g(deleted.)46 b(By)32 b(default,)g(this)630
+1011 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150
+1176 y Ft(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 1285
+y Fu(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)h
+(v)m(erbatim.)53 b(This)33 b(is)i(ho)m(w)f(to)h(insert)f(k)m(ey)630
+1395 y(sequences)d(lik)m(e)g Fj(C-q)p Fu(,)f(for)g(example.)150
+1559 y Ft(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o(\))630
+1669 y Fu(Insert)g(y)m(ourself.)150 1833 y Ft(bracketed-paste-begin)25
+b(\(\))630 1943 y Fu(This)f(function)h(is)f(in)m(tended)h(to)h(b)s(e)e
+(b)s(ound)f(to)i(the)g Ft(")p Fu(brac)m(k)m(eted)h(paste)p
+Ft(")f Fu(escap)s(e)h(sequence)630 2052 y(sen)m(t)38
+b(b)m(y)f(some)h(terminals,)i(and)d(suc)m(h)g(a)h(binding)e(is)i
+(assigned)f(b)m(y)h(default.)62 b(It)38 b(allo)m(ws)630
+2162 y(Readline)33 b(to)g(insert)g(the)f(pasted)h(text)g(as)g(a)g
+(single)g(unit)f(without)h(treating)h(eac)m(h)f(c)m(har-)630
+2271 y(acter)40 b(as)f(if)g(it)g(had)f(b)s(een)g(read)h(from)f(the)h(k)
+m(eyb)s(oard.)66 b(The)39 b(c)m(haracters)h(are)f(inserted)630
+2381 y(as)44 b(if)g(eac)m(h)i(one)e(w)m(as)g(b)s(ound)e(to)j
+Ft(self-insert)c Fu(instead)j(of)h(executing)g(an)m(y)f(editing)630
+2491 y(commands.)150 2655 y Ft(transpose-chars)26 b(\(C-t\))630
+2765 y Fu(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)g(cursor)f
+(forw)m(ard)h(o)m(v)m(er)h(the)f(c)m(haracter)i(at)e(the)g(cursor,)630
+2874 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m(ell.)57
+b(If)35 b(the)h(insertion)g(p)s(oin)m(t)f(is)g(at)i(the)e(end)g(of)h
+(the)630 2984 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h(last)h
+(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 b(Negativ)m(e)25
+b(argumen)m(ts)630 3093 y(ha)m(v)m(e)32 b(no)e(e\013ect.)150
+3258 y Ft(transpose-words)c(\(M-t\))630 3367 y Fu(Drag)33
+b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)g(past)g(the)h(w)m(ord)f
+(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin)m(t)f(past)g(that)630
+3477 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 b(the)i(insertion)f(p)s(oin)m
+(t)h(is)f(at)h(the)g(end)e(of)i(the)f(line,)i(this)e(transp)s(oses)g
+(the)630 3587 y(last)j(t)m(w)m(o)h(w)m(ords)e(on)g(the)h(line.)150
+3751 y Ft(upcase-word)c(\(M-u\))630 3861 y Fu(Upp)s(ercase)32
+b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i(w)m(ord.)45
+b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630
+3970 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h
+(the)e(cursor.)150 4134 y Ft(downcase-word)d(\(M-l\))630
+4244 y Fu(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i
+(w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m
+(ercase)630 4354 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m
+(v)m(e)i(the)f(cursor.)150 4518 y Ft(capitalize-word)26
+b(\(M-c\))630 4628 y Fu(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m
+(wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h
+(capitalize)630 4737 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f
+(mo)m(v)m(e)i(the)f(cursor.)150 4902 y Ft(overwrite-mode)26
+b(\(\))630 5011 y Fu(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48
+b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,)
+h(switc)m(hes)630 5121 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37
+b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m
+(t,)i(switc)m(hes)e(to)630 5230 y(insert)30 b(mo)s(de.)41
+b(This)30 b(command)h(a\013ects)h(only)e Ft(emacs)f Fu(mo)s(de;)i
+Ft(vi)f Fu(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 5340
+y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f
+Ft(readline\(\))c Fu(starts)k(in)f(insert)g(mo)s(de.)p
+eop end
+%%Page: 126 132
+TeXDict begin 126 131 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(126)630 299 y(In)52
+b(o)m(v)m(erwrite)h(mo)s(de,)58 b(c)m(haracters)c(b)s(ound)c(to)j
+Ft(self-insert)c Fu(replace)k(the)g(text)g(at)630 408
+y(p)s(oin)m(t)59 b(rather)f(than)h(pushing)e(the)i(text)g(to)h(the)f
+(righ)m(t.)126 b(Characters)59 b(b)s(ound)d(to)630 518
+y Ft(backward-delete-char)25 b Fu(replace)31 b(the)g(c)m(haracter)h(b)s
+(efore)e(p)s(oin)m(t)g(with)g(a)h(space.)630 647 y(By)g(default,)f
+(this)h(command)f(is)g(un)m(b)s(ound.)150 835 y Fk(8.4.4)63
+b(Killing)42 b(And)e(Y)-10 b(anking)150 1001 y Ft(kill-line)28
+b(\(C-k\))630 1111 y Fu(Kill)j(the)f(text)i(from)e(p)s(oin)m(t)g(to)h
+(the)g(end)e(of)i(the)f(line.)150 1259 y Ft(backward-kill-line)25
+b(\(C-x)30 b(Rubout\))630 1369 y Fu(Kill)h(bac)m(kw)m(ard)g(from)e(the)
+i(cursor)f(to)h(the)f(b)s(eginning)g(of)h(the)f(curren)m(t)g(line.)150
+1517 y Ft(unix-line-discard)c(\(C-u\))630 1627 y Fu(Kill)31
+b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f(to)h(the)f(b)s(eginning)g(of)h
+(the)f(curren)m(t)g(line.)150 1775 y Ft(kill-whole-line)c(\(\))630
+1885 y Fu(Kill)37 b(all)g(c)m(haracters)h(on)f(the)f(curren)m(t)h
+(line,)h(no)f(matter)g(where)f(p)s(oin)m(t)h(is.)59 b(By)36
+b(default,)630 1994 y(this)30 b(is)h(un)m(b)s(ound.)150
+2142 y Ft(kill-word)d(\(M-d\))630 2252 y Fu(Kill)i(from)f(p)s(oin)m(t)g
+(to)h(the)g(end)e(of)i(the)f(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m
+(w)m(een)g(w)m(ords,)f(to)h(the)g(end)630 2362 y(of)h(the)f(next)h(w)m
+(ord.)40 b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f
+Ft(forward-word)p Fu(.)150 2510 y Ft(backward-kill-word)25
+b(\(M-DEL\))630 2620 y Fu(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m
+(t.)40 b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h(the)g(same)g(as)g
+Ft(backward-word)p Fu(.)150 2768 y Ft(shell-kill-word)d(\(\))630
+2877 y Fu(Kill)k(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f
+(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h
+(the)g(end)630 2987 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8
+b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Ft
+(shell-forward-word)p Fu(.)150 3135 y Ft(shell-backward-kill-word)24
+b(\(\))630 3245 y Fu(Kill)e(the)h(w)m(ord)e(b)s(ehind)g(p)s(oin)m(t.)38
+b(W)-8 b(ord)22 b(b)s(oundaries)f(are)h(the)g(same)h(as)f
+Ft(shell-backward-)630 3354 y(word)p Fu(.)150 3503 y
+Ft(unix-word-rubout)k(\(C-w\))630 3612 y Fu(Kill)32 b(the)g(w)m(ord)f
+(b)s(ehind)f(p)s(oin)m(t,)i(using)f(white)h(space)g(as)g(a)g(w)m(ord)f
+(b)s(oundary)-8 b(.)43 b(The)31 b(killed)630 3722 y(text)g(is)g(sa)m(v)
+m(ed)g(on)g(the)f(kill-ring.)150 3870 y Ft(unix-filename-rubout)25
+b(\(\))630 3980 y Fu(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m
+(t,)j(using)e(white)g(space)h(and)f(the)g(slash)g(c)m(haracter)i(as)f
+(the)630 4089 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30
+b(killed)h(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f(kill-ring.)150
+4238 y Ft(delete-horizontal-space)24 b(\(\))630 4347
+y Fu(Delete)33 b(all)e(spaces)g(and)e(tabs)i(around)e(p)s(oin)m(t.)41
+b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 4495
+y Ft(kill-region)d(\(\))630 4605 y Fu(Kill)k(the)f(text)i(in)e(the)g
+(curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g(un)
+m(b)s(ound.)150 4753 y Ft(copy-region-as-kill)25 b(\(\))630
+4863 y Fu(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f
+(kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)f
+(a)m(w)m(a)m(y)-8 b(.)630 4973 y(By)31 b(default,)f(this)h(command)f
+(is)g(un)m(b)s(ound.)150 5121 y Ft(copy-backward-word)25
+b(\(\))630 5230 y Fu(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m
+(t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries)
+f(are)i(the)630 5340 y(same)31 b(as)f Ft(backward-word)p
+Fu(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)p
+eop end
+%%Page: 127 133
+TeXDict begin 127 132 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(127)150 299 y Ft
+(copy-forward-word)26 b(\(\))630 408 y Fu(Cop)m(y)31
+b(the)g(w)m(ord)g(follo)m(wing)h(p)s(oin)m(t)f(to)h(the)f(kill)h
+(bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)e(are)j(the)630
+518 y(same)f(as)f Ft(forward-word)p Fu(.)38 b(By)30 b(default,)h(this)g
+(command)f(is)g(un)m(b)s(ound.)150 671 y Ft(yank)f(\(C-y\))630
+781 y Fu(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)h(ring)f(in)m(to)i
+(the)e(bu\013er)g(at)h(p)s(oin)m(t.)150 934 y Ft(yank-pop)d(\(M-y\))630
+1044 y Fu(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h(the)f(new)g
+(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h(the)g(prior)630
+1153 y(command)30 b(is)h Ft(yank)e Fu(or)h Ft(yank-pop)p
+Fu(.)150 1347 y Fk(8.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m
+(ts)150 1515 y Ft(digit-argument)26 b(\()p Fj(M-0)p Ft(,)j
+Fj(M-1)p Ft(,)h(...)f Fj(M--)p Ft(\))630 1625 y Fu(Add)d(this)h(digit)g
+(to)h(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f
+(new)f(argumen)m(t.)630 1735 y Fj(M--)j Fu(starts)i(a)g(negativ)m(e)i
+(argumen)m(t.)150 1888 y Ft(universal-argument)25 b(\(\))630
+1998 y Fu(This)g(is)g(another)h(w)m(a)m(y)g(to)h(sp)s(ecify)e(an)g
+(argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m
+(y)f(one)630 2107 y(or)k(more)f(digits,)i(optionally)g(with)e(a)h
+(leading)h(min)m(us)e(sign,)h(those)g(digits)g(de\014ne)f(the)h(ar-)630
+2217 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)g(follo)m(w)m(ed)h(b)
+m(y)f(digits,)i(executing)f Ft(universal-argument)630
+2326 y Fu(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h
+(otherwise)g(ignored.)45 b(As)32 b(a)g(sp)s(ecial)h(case,)630
+2436 y(if)g(this)g(command)f(is)h(immediately)h(follo)m(w)m(ed)h(b)m(y)
+d(a)h(c)m(haracter)i(that)e(is)g(neither)g(a)g(digit)630
+2545 y(nor)41 b(min)m(us)f(sign,)k(the)e(argumen)m(t)f(coun)m(t)h(for)f
+(the)h(next)f(command)g(is)g(m)m(ultiplied)h(b)m(y)630
+2655 y(four.)54 b(The)35 b(argumen)m(t)g(coun)m(t)h(is)f(initially)h
+(one,)h(so)e(executing)i(this)e(function)f(the)i(\014rst)630
+2765 y(time)29 b(mak)m(es)h(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)h
+(second)g(time)g(mak)m(es)h(the)e(argumen)m(t)h(coun)m(t)630
+2874 y(sixteen,)i(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g
+(not)h(b)s(ound)d(to)k(a)e(k)m(ey)-8 b(.)150 3067 y Fk(8.4.6)63
+b(Letting)40 b(Readline)h(T)m(yp)s(e)g(F)-10 b(or)42
+b(Y)-10 b(ou)150 3236 y Ft(complete)28 b(\(TAB\))630
+3346 y Fu(A)m(ttempt)c(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g
+(b)s(efore)f(p)s(oin)m(t.)39 b(The)22 b(actual)i(completion)630
+3455 y(p)s(erformed)33 b(is)h(application-sp)s(eci\014c.)53
+b(Bash)35 b(attempts)g(completion)g(treating)h(the)e(text)630
+3565 y(as)39 b(a)h(v)-5 b(ariable)39 b(\(if)h(the)f(text)h(b)s(egins)e
+(with)h(`)p Ft($)p Fu('\),)j(username)c(\(if)i(the)f(text)h(b)s(egins)e
+(with)630 3675 y(`)p Ft(~)p Fu('\),)31 b(hostname)f(\(if)g(the)g(text)h
+(b)s(egins)e(with)h(`)p Ft(@)p Fu('\),)h(or)f(command)f(\(including)h
+(aliases)i(and)630 3784 y(functions\))j(in)f(turn.)53
+b(If)34 b(none)g(of)h(these)h(pro)s(duces)d(a)i(matc)m(h,)i(\014lename)
+e(completion)h(is)630 3894 y(attempted.)150 4047 y Ft
+(possible-completions)25 b(\(M-?\))630 4157 y Fu(List)35
+b(the)g(p)s(ossible)f(completions)i(of)e(the)h(text)h(b)s(efore)e(p)s
+(oin)m(t.)54 b(When)34 b(displa)m(ying)h(com-)630 4266
+y(pletions,)f(Readline)f(sets)f(the)h(n)m(um)m(b)s(er)e(of)i(columns)f
+(used)f(for)i(displa)m(y)f(to)h(the)g(v)-5 b(alue)33
+b(of)630 4376 y Ft(completion-display-width)o Fu(,)g(the)j(v)-5
+b(alue)37 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)38
+b Ft(COLUMNS)p Fu(,)630 4485 y(or)30 b(the)h(screen)f(width,)g(in)g
+(that)h(order.)150 4639 y Ft(insert-completions)25 b(\(M-*\))630
+4748 y Fu(Insert)30 b(all)h(completions)h(of)f(the)g(text)g(b)s(efore)f
+(p)s(oin)m(t)h(that)g(w)m(ould)f(ha)m(v)m(e)i(b)s(een)e(generated)630
+4858 y(b)m(y)g Ft(possible-completions)p Fu(.)150 5011
+y Ft(menu-complete)d(\(\))630 5121 y Fu(Similar)d(to)g
+Ft(complete)p Fu(,)f(but)h(replaces)g(the)g(w)m(ord)g(to)g(b)s(e)f
+(completed)i(with)e(a)i(single)f(matc)m(h)630 5230 y(from)37
+b(the)h(list)h(of)f(p)s(ossible)f(completions.)64 b(Rep)s(eated)39
+b(execution)g(of)f Ft(menu-complete)630 5340 y Fu(steps)i(through)g
+(the)g(list)h(of)f(p)s(ossible)g(completions,)k(inserting)c(eac)m(h)i
+(matc)m(h)f(in)f(turn.)p eop end
+%%Page: 128 134
+TeXDict begin 128 133 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(128)630 299 y(A)m(t)38
+b(the)f(end)f(of)h(the)g(list)g(of)g(completions,)i(the)e(b)s(ell)g(is)
+g(rung)f(\(sub)5 b(ject)36 b(to)i(the)f(setting)630 408
+y(of)f Ft(bell-style)p Fu(\))e(and)h(the)h(original)i(text)f(is)f
+(restored.)57 b(An)36 b(argumen)m(t)h(of)f Fr(n)f Fu(mo)m(v)m(es)i
+Fr(n)630 518 y Fu(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e
+(matc)m(hes;)39 b(a)c(negativ)m(e)i(argumen)m(t)e(ma)m(y)g(b)s(e)f
+(used)g(to)630 628 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g
+(list.)65 b(This)38 b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s
+(ound)e(to)630 737 y Ft(TAB)p Fu(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m
+(y)i(default.)150 906 y Ft(menu-complete-backward)24
+b(\(\))630 1015 y Fu(Iden)m(tical)36 b(to)g Ft(menu-complete)p
+Fu(,)d(but)h(mo)m(v)m(es)j(bac)m(kw)m(ard)e(through)f(the)i(list)f(of)g
+(p)s(ossible)630 1125 y(completions,)d(as)e(if)h Ft(menu-complete)26
+b Fu(had)k(b)s(een)g(giv)m(en)h(a)g(negativ)m(e)i(argumen)m(t.)150
+1294 y Ft(delete-char-or-list)25 b(\(\))630 1403 y Fu(Deletes)41
+b(the)e(c)m(haracter)h(under)e(the)h(cursor)f(if)h(not)g(at)g(the)h(b)s
+(eginning)e(or)h(end)f(of)h(the)630 1513 y(line)50 b(\(lik)m(e)h
+Ft(delete-char)p Fu(\).)96 b(If)49 b(at)h(the)g(end)f(of)h(the)f(line,)
+55 b(b)s(eha)m(v)m(es)c(iden)m(tically)g(to)630 1622
+y Ft(possible-completions)p Fu(.)35 b(This)30 b(command)g(is)g(un)m(b)s
+(ound)e(b)m(y)i(default.)150 1791 y Ft(complete-filename)c(\(M-/\))630
+1901 y Fu(A)m(ttempt)32 b(\014lename)e(completion)i(on)e(the)h(text)g
+(b)s(efore)f(p)s(oin)m(t.)150 2069 y Ft(possible-filename-comple)o
+(tion)o(s)24 b(\(C-x)30 b(/\))630 2179 y Fu(List)f(the)g(p)s(ossible)f
+(completions)h(of)g(the)g(text)g(b)s(efore)g(p)s(oin)m(t,)g(treating)h
+(it)f(as)g(a)f(\014lename.)150 2347 y Ft(complete-username)e(\(M-~\))
+630 2457 y Fu(A)m(ttempt)32 b(completion)f(on)g(the)f(text)i(b)s(efore)
+e(p)s(oin)m(t,)g(treating)i(it)f(as)f(a)h(username.)150
+2626 y Ft(possible-username-comple)o(tion)o(s)24 b(\(C-x)30
+b(~\))630 2735 y Fu(List)25 b(the)g(p)s(ossible)g(completions)h(of)f
+(the)g(text)h(b)s(efore)f(p)s(oin)m(t,)h(treating)g(it)g(as)f(a)g
+(username.)150 2904 y Ft(complete-variable)h(\(M-$\))630
+3013 y Fu(A)m(ttempt)32 b(completion)f(on)g(the)f(text)i(b)s(efore)e(p)
+s(oin)m(t,)g(treating)i(it)f(as)f(a)h(shell)g(v)-5 b(ariable.)150
+3182 y Ft(possible-variable-comple)o(tion)o(s)24 b(\(C-x)30
+b($\))630 3292 y Fu(List)42 b(the)g(p)s(ossible)g(completions)h(of)f
+(the)g(text)h(b)s(efore)e(p)s(oin)m(t,)46 b(treating)d(it)f(as)g(a)h
+(shell)630 3401 y(v)-5 b(ariable.)150 3570 y Ft(complete-hostname)26
+b(\(M-@\))630 3679 y Fu(A)m(ttempt)32 b(completion)f(on)g(the)f(text)i
+(b)s(efore)e(p)s(oin)m(t,)g(treating)i(it)f(as)f(a)h(hostname.)150
+3848 y Ft(possible-hostname-comple)o(tion)o(s)24 b(\(C-x)30
+b(@\))630 3957 y Fu(List)25 b(the)g(p)s(ossible)f(completions)h(of)g
+(the)g(text)g(b)s(efore)g(p)s(oin)m(t,)h(treating)g(it)f(as)f(a)h
+(hostname.)150 4126 y Ft(complete-command)h(\(M-!\))630
+4236 y Fu(A)m(ttempt)32 b(completion)g(on)f(the)g(text)h(b)s(efore)e(p)
+s(oin)m(t,)h(treating)h(it)g(as)f(a)g(command)g(name.)630
+4345 y(Command)46 b(completion)i(attempts)g(to)f(matc)m(h)h(the)f(text)
+h(against)g(aliases,)53 b(reserv)m(ed)630 4455 y(w)m(ords,)36
+b(shell)g(functions,)h(shell)e(builtins,)i(and)e(\014nally)g
+(executable)i(\014lenames,)g(in)e(that)630 4564 y(order.)150
+4733 y Ft(possible-command-complet)o(ions)24 b(\(C-x)29
+b(!\))630 4843 y Fu(List)d(the)h(p)s(ossible)f(completions)h(of)f(the)h
+(text)g(b)s(efore)f(p)s(oin)m(t,)h(treating)g(it)g(as)g(a)f(command)630
+4952 y(name.)150 5121 y Ft(dynamic-complete-history)e(\(M-TAB\))630
+5230 y Fu(A)m(ttempt)31 b(completion)h(on)e(the)g(text)h(b)s(efore)f(p)
+s(oin)m(t,)g(comparing)h(the)f(text)h(against)h(lines)630
+5340 y(from)e(the)g(history)h(list)g(for)f(p)s(ossible)g(completion)i
+(matc)m(hes.)p eop end
+%%Page: 129 135
+TeXDict begin 129 134 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(129)150 299 y Ft(dabbrev-expand)26
+b(\(\))630 408 y Fu(A)m(ttempt)i(men)m(u)e(completion)i(on)f(the)g
+(text)g(b)s(efore)f(p)s(oin)m(t,)i(comparing)f(the)g(text)h(against)630
+518 y(lines)j(from)e(the)i(history)f(list)h(for)g(p)s(ossible)e
+(completion)j(matc)m(hes.)150 683 y Ft(complete-into-braces)25
+b(\(M-{\))630 793 y Fu(P)m(erform)f(\014lename)f(completion)i(and)f
+(insert)f(the)h(list)g(of)g(p)s(ossible)f(completions)i(enclosed)630
+902 y(within)34 b(braces)h(so)f(the)h(list)g(is)g(a)m(v)-5
+b(ailable)37 b(to)e(the)g(shell)g(\(see)g(Section)h(3.5.1)g([Brace)g
+(Ex-)630 1012 y(pansion],)30 b(page)h(23\).)150 1217
+y Fk(8.4.7)63 b(Keyb)s(oard)41 b(Macros)150 1392 y Ft(start-kbd-macro)
+26 b(\(C-x)j(\(\))630 1501 y Fu(Begin)i(sa)m(ving)h(the)e(c)m
+(haracters)i(t)m(yp)s(ed)e(in)m(to)h(the)g(curren)m(t)f(k)m(eyb)s(oard)
+g(macro.)150 1666 y Ft(end-kbd-macro)d(\(C-x)i(\)\))630
+1776 y Fu(Stop)e(sa)m(ving)h(the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m
+(to)i(the)e(curren)m(t)g(k)m(eyb)s(oard)g(macro)h(and)f(sa)m(v)m(e)i
+(the)630 1886 y(de\014nition.)150 2051 y Ft(call-last-kbd-macro)c
+(\(C-x)k(e\))630 2160 y Fu(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard)
+f(macro)h(de\014ned,)f(b)m(y)h(making)f(the)g(c)m(haracters)i(in)e(the)
+630 2270 y(macro)c(app)s(ear)f(as)g(if)h(t)m(yp)s(ed)f(at)h(the)f(k)m
+(eyb)s(oard.)150 2435 y Ft(print-last-kbd-macro)25 b(\(\))630
+2545 y Fu(Prin)m(t)30 b(the)h(last)g(k)m(eb)s(oard)f(macro)h(de\014ned)
+e(in)i(a)f(format)h(suitable)g(for)f(the)h Fr(inputrc)k
+Fu(\014le.)150 2750 y Fk(8.4.8)63 b(Some)41 b(Miscellaneous)i(Commands)
+150 2924 y Ft(re-read-init-file)26 b(\(C-x)j(C-r\))630
+3034 y Fu(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f(the)g
+Fr(inputrc)27 b Fu(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h(bindings)d
+(or)i(v)-5 b(ariable)630 3144 y(assignmen)m(ts)31 b(found)e(there.)150
+3309 y Ft(abort)g(\(C-g\))630 3418 y Fu(Ab)s(ort)d(the)h(curren)m(t)f
+(editing)h(command)f(and)g(ring)h(the)f(terminal's)h(b)s(ell)g(\(sub)5
+b(ject)26 b(to)i(the)630 3528 y(setting)j(of)g Ft(bell-style)p
+Fu(\).)150 3693 y Ft(do-lowercase-version)25 b(\(M-A,)k(M-B,)g(M-)p
+Fj(x)p Ft(,)g(...)o(\))630 3803 y Fu(If)35 b(the)g(meta\014ed)g(c)m
+(haracter)i Fr(x)k Fu(is)35 b(upp)s(er)e(case,)k(run)d(the)h(command)g
+(that)g(is)g(b)s(ound)e(to)630 3912 y(the)g(corresp)s(onding)f
+(meta\014ed)h(lo)m(w)m(er)i(case)f(c)m(haracter.)50 b(The)32
+b(b)s(eha)m(vior)h(is)g(unde\014ned)e(if)630 4022 y Fr(x)37
+b Fu(is)30 b(already)h(lo)m(w)m(er)h(case.)150 4187 y
+Ft(prefix-meta)27 b(\(ESC\))630 4297 y Fu(Metafy)39 b(the)e(next)h(c)m
+(haracter)h(t)m(yp)s(ed.)62 b(This)37 b(is)g(for)h(k)m(eyb)s(oards)f
+(without)g(a)h(meta)g(k)m(ey)-8 b(.)630 4406 y(T)m(yping)30
+b(`)p Ft(ESC)g(f)p Fu(')g(is)h(equiv)-5 b(alen)m(t)31
+b(to)g(t)m(yping)g Fj(M-f)p Fu(.)150 4571 y Ft(undo)e(\(C-_)g(or)h(C-x)
+g(C-u\))630 4681 y Fu(Incremen)m(tal)h(undo,)f(separately)h(remem)m(b)s
+(ered)f(for)g(eac)m(h)i(line.)150 4846 y Ft(revert-line)27
+b(\(M-r\))630 4956 y Fu(Undo)33 b(all)h(c)m(hanges)g(made)f(to)h(this)f
+(line.)49 b(This)32 b(is)h(lik)m(e)i(executing)f(the)f
+Ft(undo)f Fu(command)630 5065 y(enough)e(times)h(to)g(get)h(bac)m(k)f
+(to)g(the)f(b)s(eginning.)150 5230 y Ft(tilde-expand)d(\(M-&\))630
+5340 y Fu(P)m(erform)j(tilde)h(expansion)g(on)f(the)g(curren)m(t)h(w)m
+(ord.)p eop end
+%%Page: 130 136
+TeXDict begin 130 135 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(130)150 299 y Ft(set-mark)28
+b(\(C-@\))630 408 y Fu(Set)33 b(the)g(mark)f(to)i(the)f(p)s(oin)m(t.)48
+b(If)32 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h(mark)g
+(is)f(set)630 518 y(to)f(that)g(p)s(osition.)150 696
+y Ft(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630
+806 y Fu(Sw)m(ap)i(the)g(p)s(oin)m(t)g(with)g(the)g(mark.)43
+b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)i(is)f(set)h(to)f(the)h
+(sa)m(v)m(ed)630 915 y(p)s(osition,)f(and)e(the)i(old)g(cursor)e(p)s
+(osition)i(is)f(sa)m(v)m(ed)i(as)e(the)h(mark.)150 1093
+y Ft(character-search)26 b(\(C-]\))630 1203 y Fu(A)f(c)m(haracter)h(is)
+f(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g(o)s
+(ccurrence)g(of)g(that)g(c)m(haracter.)630 1313 y(A)30
+b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s
+(ccurrences.)150 1491 y Ft(character-search-backwar)o(d)24
+b(\(M-C-]\))630 1600 y Fu(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s
+(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)f(the)g(previous)f(o)s(ccurrence)h(of)
+g(that)630 1710 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f
+(searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150
+1888 y Ft(skip-csi-sequence)d(\(\))630 1998 y Fu(Read)i(enough)f(c)m
+(haracters)h(to)g(consume)f(a)h(m)m(ulti-k)m(ey)h(sequence)f(suc)m(h)f
+(as)g(those)h(de\014ned)630 2107 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g
+(and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m
+(trol)g(Sequence)630 2217 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59
+b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Ft("\\)p
+Fu(e[)p Ft(")p Fu(,)g(k)m(eys)f(pro-)630 2326 y(ducing)31
+b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e
+(explicitly)j(b)s(ound)c(to)i(a)h(readline)630 2436 y(command,)f
+(instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f
+(editing)h(bu\013er.)44 b(This)31 b(is)630 2545 y(un)m(b)s(ound)d(b)m
+(y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)150
+2724 y Ft(insert-comment)26 b(\(M-#\))630 2833 y Fu(Without)36
+b(a)g(n)m(umeric)g(argumen)m(t,)h(the)f(v)-5 b(alue)36
+b(of)g(the)g Ft(comment-begin)c Fu(v)-5 b(ariable)36
+b(is)g(in-)630 2943 y(serted)c(at)g(the)g(b)s(eginning)f(of)h(the)f
+(curren)m(t)h(line.)45 b(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is)g
+(supplied,)630 3052 y(this)k(command)h(acts)g(as)g(a)g(toggle:)55
+b(if)37 b(the)f(c)m(haracters)i(at)g(the)e(b)s(eginning)g(of)h(the)g
+(line)630 3162 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5
+b(alue)31 b(of)f Ft(comment-begin)p Fu(,)e(the)i(v)-5
+b(alue)31 b(is)g(inserted,)g(otherwise)g(the)630 3271
+y(c)m(haracters)42 b(in)d Ft(comment-begin)e Fu(are)j(deleted)h(from)f
+(the)g(b)s(eginning)g(of)g(the)g(line.)71 b(In)630 3381
+y(either)37 b(case,)j(the)e(line)f(is)g(accepted)i(as)e(if)g(a)g
+(newline)g(had)g(b)s(een)f(t)m(yp)s(ed.)60 b(The)37 b(default)630
+3491 y(v)-5 b(alue)32 b(of)g Ft(comment-begin)c Fu(causes)k(this)f
+(command)h(to)g(mak)m(e)h(the)e(curren)m(t)h(line)g(a)g(shell)630
+3600 y(commen)m(t.)40 b(If)26 b(a)h(n)m(umeric)f(argumen)m(t)h(causes)g
+(the)f(commen)m(t)i(c)m(haracter)g(to)f(b)s(e)f(remo)m(v)m(ed,)630
+3710 y(the)31 b(line)f(will)h(b)s(e)f(executed)h(b)m(y)f(the)h(shell.)
+150 3888 y Ft(dump-functions)26 b(\(\))630 3998 y Fu(Prin)m(t)g(all)i
+(of)e(the)h(functions)f(and)g(their)g(k)m(ey)h(bindings)e(to)j(the)e
+(Readline)h(output)f(stream.)630 4107 y(If)31 b(a)h(n)m(umeric)g
+(argumen)m(t)g(is)g(supplied,)f(the)h(output)f(is)h(formatted)g(in)f
+(suc)m(h)h(a)g(w)m(a)m(y)g(that)630 4217 y(it)f(can)g(b)s(e)e(made)i
+(part)f(of)g(an)h Fr(inputrc)k Fu(\014le.)41 b(This)29
+b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k(default.)150
+4395 y Ft(dump-variables)26 b(\(\))630 4504 y Fu(Prin)m(t)21
+b(all)h(of)g(the)f(settable)i(v)-5 b(ariables)22 b(and)f(their)g(v)-5
+b(alues)22 b(to)g(the)f(Readline)h(output)f(stream.)630
+4614 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h
+(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m(y)g(that)630
+4724 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fr(inputrc)k
+Fu(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k
+(default.)150 4902 y Ft(dump-macros)c(\(\))630 5011 y
+Fu(Prin)m(t)34 b(all)g(of)g(the)g(Readline)g(k)m(ey)h(sequences)f(b)s
+(ound)e(to)i(macros)g(and)f(the)h(strings)g(they)630
+5121 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e
+(supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630
+5230 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e
+Fr(inputrc)35 b Fu(\014le.)41 b(This)29 b(command)h(is)g(un)m(b)s(ound)
+d(b)m(y)630 5340 y(default.)p eop end
+%%Page: 131 137
+TeXDict begin 131 136 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(131)150 299 y Ft
+(glob-complete-word)25 b(\(M-g\))630 408 y Fu(The)i(w)m(ord)h(b)s
+(efore)f(p)s(oin)m(t)h(is)g(treated)h(as)f(a)h(pattern)f(for)f
+(pathname)h(expansion,)g(with)g(an)630 518 y(asterisk)d(implicitly)h
+(app)s(ended.)37 b(This)23 b(pattern)i(is)f(used)g(to)h(generate)h(a)e
+(list)h(of)g(matc)m(hing)630 628 y(\014le)30 b(names)h(for)f(p)s
+(ossible)g(completions.)150 781 y Ft(glob-expand-word)c(\(C-x)j(*\))630
+891 y Fu(The)40 b(w)m(ord)g(b)s(efore)g(p)s(oin)m(t)h(is)g(treated)g
+(as)g(a)g(pattern)g(for)f(pathname)g(expansion,)k(and)630
+1000 y(the)c(list)g(of)f(matc)m(hing)i(\014le)e(names)g(is)h(inserted,)
+h(replacing)g(the)e(w)m(ord.)67 b(If)39 b(a)h(n)m(umeric)630
+1110 y(argumen)m(t)31 b(is)f(supplied,)g(a)g(`)p Ft(*)p
+Fu(')h(is)f(app)s(ended)f(b)s(efore)h(pathname)g(expansion.)150
+1263 y Ft(glob-list-expansions)25 b(\(C-x)k(g\))630 1373
+y Fu(The)k(list)h(of)f(expansions)g(that)h(w)m(ould)f(ha)m(v)m(e)h(b)s
+(een)f(generated)h(b)m(y)f Ft(glob-expand-word)630 1482
+y Fu(is)h(displa)m(y)m(ed,)h(and)e(the)h(line)g(is)f(redra)m(wn.)50
+b(If)33 b(a)h(n)m(umeric)g(argumen)m(t)g(is)f(supplied,)h(a)g(`)p
+Ft(*)p Fu(')630 1592 y(is)c(app)s(ended)f(b)s(efore)h(pathname)g
+(expansion.)150 1746 y Ft(display-shell-version)25 b(\(C-x)k(C-v\))630
+1855 y Fu(Displa)m(y)j(v)m(ersion)e(information)h(ab)s(out)f(the)h
+(curren)m(t)f(instance)h(of)f(Bash.)150 2009 y Ft(shell-expand-line)c
+(\(M-C-e\))630 2118 y Fu(Expand)34 b(the)h(line)h(as)g(the)f(shell)h
+(do)s(es.)55 b(This)34 b(p)s(erforms)g(alias)i(and)f(history)g
+(expansion)630 2228 y(as)f(w)m(ell)g(as)g(all)h(of)e(the)h(shell)g(w)m
+(ord)f(expansions)g(\(see)i(Section)f(3.5)h([Shell)e(Expansions],)630
+2337 y(page)e(22\).)150 2491 y Ft(history-expand-line)25
+b(\(M-^\))630 2600 y Fu(P)m(erform)30 b(history)h(expansion)f(on)g(the)
+h(curren)m(t)f(line.)150 2754 y Ft(magic-space)d(\(\))630
+2863 y Fu(P)m(erform)c(history)g(expansion)g(on)g(the)g(curren)m(t)g
+(line)g(and)g(insert)g(a)g(space)h(\(see)g(Section)g(9.3)630
+2973 y([History)31 b(In)m(teraction],)i(page)e(143\).)150
+3126 y Ft(alias-expand-line)26 b(\(\))630 3236 y Fu(P)m(erform)i(alias)
+i(expansion)e(on)g(the)h(curren)m(t)f(line)h(\(see)g(Section)g(6.6)h
+([Aliases],)g(page)f(93\).)150 3390 y Ft(history-and-alias-expand)o
+(-lin)o(e)24 b(\(\))630 3499 y Fu(P)m(erform)30 b(history)h(and)e
+(alias)j(expansion)e(on)g(the)h(curren)m(t)f(line.)150
+3653 y Ft(insert-last-argument)25 b(\(M-.)k(or)h(M-_\))630
+3762 y Fu(A)g(synon)m(ym)g(for)g Ft(yank-last-arg)p Fu(.)150
+3916 y Ft(operate-and-get-next)25 b(\(C-o\))630 4025
+y Fu(Accept)42 b(the)e(curren)m(t)h(line)f(for)h(execution)g(and)f
+(fetc)m(h)i(the)e(next)h(line)g(relativ)m(e)i(to)e(the)630
+4135 y(curren)m(t)h(line)h(from)g(the)f(history)h(for)f(editing.)79
+b(A)42 b(n)m(umeric)h(argumen)m(t,)j(if)d(supplied,)630
+4244 y(sp)s(eci\014es)30 b(the)h(history)f(en)m(try)h(to)g(use)f
+(instead)g(of)h(the)f(curren)m(t)h(line.)150 4398 y Ft
+(edit-and-execute-command)24 b(\(C-x)29 b(C-e\))630 4507
+y Fu(In)m(v)m(ok)m(e)34 b(an)f(editor)g(on)g(the)g(curren)m(t)f
+(command)h(line,)h(and)e(execute)i(the)f(result)g(as)g(shell)630
+4617 y(commands.)81 b(Bash)44 b(attempts)h(to)g(in)m(v)m(ok)m(e)h
+Ft($VISUAL)p Fu(,)f Ft($EDITOR)p Fu(,)h(and)d Ft(emacs)g
+Fu(as)h(the)630 4727 y(editor,)31 b(in)f(that)h(order.)150
+4961 y Fs(8.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 5121
+y Fu(While)32 b(the)g(Readline)g(library)f(do)s(es)g(not)h(ha)m(v)m(e)h
+(a)f(full)f(set)h(of)g Ft(vi)f Fu(editing)h(functions,)f(it)h(do)s(es)g
+(con)m(tain)150 5230 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f
+(the)g(line.)52 b(The)34 b(Readline)g Ft(vi)g Fu(mo)s(de)f(b)s(eha)m(v)
+m(es)i(as)f(sp)s(eci\014ed)f(in)150 5340 y(the)e Fm(posix)e
+Fu(standard.)p eop end
+%%Page: 132 138
+TeXDict begin 132 137 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(132)275 299 y(In)35
+b(order)g(to)i(switc)m(h)f(in)m(teractiv)m(ely)j(b)s(et)m(w)m(een)d
+Ft(emacs)f Fu(and)g Ft(vi)g Fu(editing)h(mo)s(des,)h(use)f(the)g(`)p
+Ft(set)30 b(-o)150 408 y(emacs)p Fu(')43 b(and)h(`)p
+Ft(set)30 b(-o)f(vi)p Fu(')44 b(commands)g(\(see)i(Section)f(4.3.1)h
+([The)e(Set)h(Builtin],)j(page)e(61\).)83 b(The)150 518
+y(Readline)31 b(default)g(is)f Ft(emacs)f Fu(mo)s(de.)275
+650 y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f(in)g Ft(vi)f
+Fu(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f(in)g(`insertion')g(mo)s
+(de,)g(as)h(if)f(y)m(ou)150 759 y(had)f(t)m(yp)s(ed)g(an)g(`)p
+Ft(i)p Fu('.)41 b(Pressing)29 b Ft(ESC)f Fu(switc)m(hes)i(y)m(ou)g(in)m
+(to)h(`command')e(mo)s(de,)h(where)e(y)m(ou)i(can)g(edit)g(the)150
+869 y(text)35 b(of)f(the)g(line)g(with)f(the)h(standard)f
+Ft(vi)g Fu(mo)m(v)m(emen)m(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)g
+(history)f(lines)h(with)150 978 y(`)p Ft(k)p Fu(')d(and)e(subsequen)m
+(t)h(lines)h(with)f(`)p Ft(j)p Fu(',)g(and)g(so)h(forth.)150
+1213 y Fs(8.6)68 b(Programmable)47 b(Completion)150 1373
+y Fu(When)25 b(w)m(ord)g(completion)i(is)f(attempted)g(for)g(an)f
+(argumen)m(t)h(to)g(a)g(command)f(for)h(whic)m(h)f(a)h(completion)150
+1482 y(sp)s(eci\014cation)40 b(\(a)h Fr(compsp)s(ec)6
+b Fu(\))39 b(has)h(b)s(een)f(de\014ned)f(using)h(the)h
+Ft(complete)d Fu(builtin)j(\(see)g(Section)h(8.7)150
+1592 y([Programmable)h(Completion)f(Builtins],)k(page)d(134\),)j(the)c
+(programmable)g(completion)i(facilities)150 1701 y(are)31
+b(in)m(v)m(ok)m(ed.)275 1833 y(First,)23 b(the)e(command)g(name)g(is)h
+(iden)m(ti\014ed.)37 b(If)21 b(a)g(compsp)s(ec)g(has)g(b)s(een)f
+(de\014ned)g(for)h(that)h(command,)150 1943 y(the)44
+b(compsp)s(ec)g(is)g(used)f(to)h(generate)i(the)e(list)g(of)g(p)s
+(ossible)g(completions)h(for)e(the)h(w)m(ord.)81 b(If)44
+b(the)150 2052 y(command)36 b(w)m(ord)g(is)g(the)g(empt)m(y)h(string)f
+(\(completion)i(attempted)f(at)g(the)g(b)s(eginning)e(of)h(an)h(empt)m
+(y)150 2162 y(line\),)30 b(an)m(y)g(compsp)s(ec)f(de\014ned)f(with)h
+(the)h Ft(-E)e Fu(option)i(to)g Ft(complete)d Fu(is)i(used.)40
+b(If)29 b(the)g(command)g(w)m(ord)150 2271 y(is)e(a)h(full)e(pathname,)
+i(a)g(compsp)s(ec)e(for)h(the)g(full)g(pathname)g(is)g(searc)m(hed)h
+(for)f(\014rst.)39 b(If)26 b(no)h(compsp)s(ec)g(is)150
+2381 y(found)22 b(for)g(the)h(full)g(pathname,)h(an)f(attempt)h(is)f
+(made)g(to)g(\014nd)f(a)h(compsp)s(ec)f(for)h(the)g(p)s(ortion)f(follo)
+m(wing)150 2490 y(the)34 b(\014nal)g(slash.)53 b(If)34
+b(those)g(searc)m(hes)i(do)e(not)g(result)h(in)f(a)g(compsp)s(ec,)h(an)
+m(y)g(compsp)s(ec)f(de\014ned)f(with)150 2600 y(the)k
+Ft(-D)g Fu(option)g(to)h Ft(complete)d Fu(is)i(used)g(as)g(the)g
+(default.)61 b(If)37 b(there)g(is)h(no)f(default)g(compsp)s(ec,)i(Bash)
+150 2710 y(attempts)e(alias)h(expansion)e(on)g(the)h(command)f(w)m(ord)
+g(as)h(a)f(\014nal)g(resort,)j(and)c(attempts)j(to)f(\014nd)e(a)150
+2819 y(compsp)s(ec)30 b(for)g(the)h(command)f(w)m(ord)g(from)g(an)m(y)h
+(successful)f(expansion)275 2951 y(Once)k(a)g(compsp)s(ec)g(has)g(b)s
+(een)f(found,)h(it)h(is)f(used)f(to)i(generate)h(the)e(list)h(of)f
+(matc)m(hing)h(w)m(ords.)51 b(If)150 3060 y(a)37 b(compsp)s(ec)f(is)g
+(not)h(found,)f(the)h(default)f(Bash)h(completion)g(describ)s(ed)e(ab)s
+(o)m(v)m(e)j(\(see)f(Section)g(8.4.6)150 3170 y([Commands)30
+b(F)-8 b(or)31 b(Completion],)g(page)g(127\))h(is)f(p)s(erformed.)275
+3302 y(First,)g(the)g(actions)g(sp)s(eci\014ed)f(b)m(y)h(the)f(compsp)s
+(ec)h(are)g(used.)40 b(Only)30 b(matc)m(hes)i(whic)m(h)e(are)h
+(pre\014xed)150 3411 y(b)m(y)h(the)f(w)m(ord)h(b)s(eing)f(completed)h
+(are)g(returned.)44 b(When)31 b(the)h Ft(-f)f Fu(or)h
+Ft(-d)f Fu(option)h(is)f(used)g(for)h(\014lename)150
+3521 y(or)e(directory)h(name)f(completion,)i(the)e(shell)h(v)-5
+b(ariable)31 b Ft(FIGNORE)d Fu(is)i(used)f(to)i(\014lter)g(the)f(matc)m
+(hes.)42 b(See)150 3630 y(Section)31 b(5.2)h([Bash)e(V)-8
+b(ariables],)33 b(page)e(73,)g(for)f(a)h(description)g(of)f
+Ft(FIGNORE)p Fu(.)275 3762 y(An)m(y)22 b(completions)h(sp)s(eci\014ed)f
+(b)m(y)g(a)h(\014lename)f(expansion)h(pattern)f(to)h(the)g
+Ft(-G)e Fu(option)i(are)g(generated)150 3871 y(next.)41
+b(The)29 b(w)m(ords)g(generated)h(b)m(y)g(the)g(pattern)f(need)h(not)f
+(matc)m(h)i(the)f(w)m(ord)f(b)s(eing)g(completed.)41
+b(The)150 3981 y Ft(GLOBIGNORE)29 b Fu(shell)i(v)-5 b(ariable)32
+b(is)g(not)g(used)e(to)i(\014lter)g(the)g(matc)m(hes,)h(but)d(the)i
+Ft(FIGNORE)e Fu(shell)h(v)-5 b(ariable)150 4091 y(is)30
+b(used.)275 4222 y(Next,)39 b(the)f(string)f(sp)s(eci\014ed)f(as)h(the)
+g(argumen)m(t)h(to)g(the)f Ft(-W)f Fu(option)i(is)f(considered.)60
+b(The)37 b(string)150 4332 y(is)c(\014rst)e(split)i(using)f(the)h(c)m
+(haracters)h(in)e(the)h Ft(IFS)e Fu(sp)s(ecial)j(v)-5
+b(ariable)33 b(as)g(delimiters.)48 b(Shell)32 b(quoting)h(is)150
+4441 y(honored)f(within)h(the)g(string,)h(in)f(order)f(to)i(pro)m(vide)
+f(a)h(mec)m(hanism)f(for)g(the)g(w)m(ords)g(to)g(con)m(tain)i(shell)150
+4551 y(metac)m(haracters)e(or)e(c)m(haracters)i(in)e(the)g(v)-5
+b(alue)31 b(of)g Ft(IFS)p Fu(.)42 b(Eac)m(h)32 b(w)m(ord)e(is)h(then)g
+(expanded)f(using)h(brace)150 4660 y(expansion,)g(tilde)h(expansion,)f
+(parameter)g(and)g(v)-5 b(ariable)32 b(expansion,)f(command)f
+(substitution,)i(and)150 4770 y(arithmetic)c(expansion,)f(as)g(describ)
+s(ed)e(ab)s(o)m(v)m(e)i(\(see)h(Section)f(3.5)g([Shell)g(Expansions],)g
+(page)g(22\).)40 b(The)150 4880 y(results)23 b(are)h(split)g(using)f
+(the)h(rules)f(describ)s(ed)f(ab)s(o)m(v)m(e)j(\(see)g(Section)f(3.5.7)
+h([W)-8 b(ord)24 b(Splitting],)i(page)e(31\).)150 4989
+y(The)j(results)h(of)f(the)h(expansion)g(are)g(pre\014x-matc)m(hed)g
+(against)h(the)f(w)m(ord)f(b)s(eing)g(completed,)j(and)d(the)150
+5099 y(matc)m(hing)k(w)m(ords)f(b)s(ecome)h(the)g(p)s(ossible)f
+(completions.)275 5230 y(After)f(these)g(matc)m(hes)i(ha)m(v)m(e)f(b)s
+(een)f(generated,)h(an)m(y)g(shell)f(function)g(or)g(command)g(sp)s
+(eci\014ed)f(with)150 5340 y(the)36 b Ft(-F)f Fu(and)g
+Ft(-C)g Fu(options)h(is)g(in)m(v)m(ok)m(ed.)59 b(When)35
+b(the)h(command)g(or)f(function)h(is)g(in)m(v)m(ok)m(ed,)i(the)e
+Ft(COMP_)p eop end
+%%Page: 133 139
+TeXDict begin 133 138 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(133)150 299 y Ft(LINE)p
+Fu(,)42 b Ft(COMP_POINT)p Fu(,)d Ft(COMP_KEY)p Fu(,)i(and)e
+Ft(COMP_TYPE)f Fu(v)-5 b(ariables)41 b(are)f(assigned)g(v)-5
+b(alues)41 b(as)f(describ)s(ed)150 408 y(ab)s(o)m(v)m(e)34
+b(\(see)g(Section)g(5.2)g([Bash)f(V)-8 b(ariables],)36
+b(page)d(73\).)50 b(If)33 b(a)g(shell)g(function)g(is)g(b)s(eing)f(in)m
+(v)m(ok)m(ed,)k(the)150 518 y Ft(COMP_WORDS)j Fu(and)i
+Ft(COMP_CWORD)d Fu(v)-5 b(ariables)42 b(are)g(also)h(set.)74
+b(When)41 b(the)h(function)f(or)h(command)f(is)150 628
+y(in)m(v)m(ok)m(ed,)c(the)e(\014rst)f(argumen)m(t)h(\($1\))h(is)e(the)h
+(name)g(of)f(the)h(command)f(whose)h(argumen)m(ts)f(are)h(b)s(eing)150
+737 y(completed,)30 b(the)f(second)f(argumen)m(t)h(\($2\))h(is)f(the)g
+(w)m(ord)f(b)s(eing)g(completed,)i(and)e(the)h(third)e(argumen)m(t)150
+847 y(\($3\))40 b(is)f(the)f(w)m(ord)h(preceding)f(the)h(w)m(ord)f(b)s
+(eing)g(completed)i(on)e(the)h(curren)m(t)f(command)h(line.)65
+b(No)150 956 y(\014ltering)33 b(of)h(the)f(generated)h(completions)g
+(against)h(the)e(w)m(ord)g(b)s(eing)f(completed)i(is)g(p)s(erformed;)f
+(the)150 1066 y(function)d(or)g(command)h(has)f(complete)i(freedom)e
+(in)g(generating)h(the)g(matc)m(hes.)275 1200 y(An)m(y)j(function)h(sp)
+s(eci\014ed)f(with)g Ft(-F)g Fu(is)h(in)m(v)m(ok)m(ed)h(\014rst.)53
+b(The)35 b(function)f(ma)m(y)h(use)g(an)m(y)g(of)g(the)g(shell)150
+1310 y(facilities,)50 b(including)44 b(the)h Ft(compgen)d
+Fu(and)i Ft(compopt)e Fu(builtins)i(describ)s(ed)f(b)s(elo)m(w)h(\(see)
+i(Section)f(8.7)150 1419 y([Programmable)31 b(Completion)h(Builtins],)f
+(page)h(134\),)g(to)g(generate)g(the)f(matc)m(hes.)42
+b(It)31 b(m)m(ust)g(put)f(the)150 1529 y(p)s(ossible)g(completions)h
+(in)f(the)h Ft(COMPREPLY)d Fu(arra)m(y)j(v)-5 b(ariable,)31
+b(one)g(p)s(er)e(arra)m(y)i(elemen)m(t.)275 1663 y(Next,)26
+b(an)m(y)f(command)f(sp)s(eci\014ed)g(with)g(the)h Ft(-C)f
+Fu(option)h(is)f(in)m(v)m(ok)m(ed)i(in)e(an)g(en)m(vironmen)m(t)h
+(equiv)-5 b(alen)m(t)150 1772 y(to)26 b(command)e(substitution.)39
+b(It)25 b(should)f(prin)m(t)h(a)g(list)h(of)f(completions,)i(one)e(p)s
+(er)f(line,)j(to)f(the)f(standard)150 1882 y(output.)40
+b(Bac)m(kslash)32 b(ma)m(y)f(b)s(e)f(used)g(to)h(escap)s(e)g(a)f
+(newline,)h(if)f(necessary)-8 b(.)275 2016 y(After)24
+b(all)i(of)f(the)f(p)s(ossible)g(completions)i(are)f(generated,)i(an)m
+(y)e(\014lter)g(sp)s(eci\014ed)e(with)i(the)g Ft(-X)e
+Fu(option)150 2125 y(is)34 b(applied)g(to)g(the)h(list.)52
+b(The)33 b(\014lter)h(is)g(a)h(pattern)f(as)g(used)f(for)h(pathname)g
+(expansion;)i(a)e(`)p Ft(&)p Fu(')g(in)g(the)150 2235
+y(pattern)28 b(is)f(replaced)h(with)g(the)f(text)i(of)f(the)f(w)m(ord)h
+(b)s(eing)f(completed.)40 b(A)28 b(literal)h(`)p Ft(&)p
+Fu(')f(ma)m(y)g(b)s(e)f(escap)s(ed)150 2345 y(with)38
+b(a)h(bac)m(kslash;)k(the)38 b(bac)m(kslash)h(is)g(remo)m(v)m(ed)g(b)s
+(efore)f(attempting)h(a)g(matc)m(h.)65 b(An)m(y)39 b(completion)150
+2454 y(that)32 b(matc)m(hes)g(the)g(pattern)g(will)f(b)s(e)g(remo)m(v)m
+(ed)h(from)f(the)h(list.)44 b(A)32 b(leading)g(`)p Ft(!)p
+Fu(')f(negates)i(the)f(pattern;)150 2564 y(in)d(this)g(case)h(an)m(y)g
+(completion)h(not)e(matc)m(hing)h(the)g(pattern)f(will)h(b)s(e)e(remo)m
+(v)m(ed.)42 b(If)29 b(the)g Ft(nocasematch)150 2673 y
+Fu(shell)k(option)f(\(see)i(the)e(description)g(of)h
+Ft(shopt)e Fu(in)h(Section)h(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g
+(65\))h(is)150 2783 y(enabled,)d(the)f(matc)m(h)h(is)g(p)s(erformed)e
+(without)h(regard)g(to)h(the)g(case)g(of)g(alphab)s(etic)g(c)m
+(haracters.)275 2917 y(Finally)-8 b(,)42 b(an)m(y)c(pre\014x)g(and)f
+(su\016x)h(sp)s(eci\014ed)f(with)i(the)f Ft(-P)g Fu(and)g
+Ft(-S)f Fu(options)i(are)g(added)f(to)h(eac)m(h)150 3026
+y(mem)m(b)s(er)31 b(of)g(the)h(completion)h(list,)f(and)f(the)h(result)
+f(is)h(returned)e(to)i(the)g(Readline)g(completion)h(co)s(de)150
+3136 y(as)e(the)f(list)h(of)g(p)s(ossible)f(completions.)275
+3270 y(If)d(the)h(previously-applied)f(actions)i(do)f(not)g(generate)h
+(an)m(y)f(matc)m(hes,)i(and)d(the)h Ft(-o)h(dirnames)d
+Fu(op-)150 3380 y(tion)j(w)m(as)f(supplied)f(to)i Ft(complete)d
+Fu(when)h(the)h(compsp)s(ec)g(w)m(as)g(de\014ned,)g(directory)g(name)h
+(completion)150 3489 y(is)h(attempted.)275 3623 y(If)35
+b(the)g Ft(-o)30 b(plusdirs)j Fu(option)j(w)m(as)g(supplied)e(to)i
+Ft(complete)e Fu(when)g(the)i(compsp)s(ec)f(w)m(as)h(de\014ned,)150
+3733 y(directory)g(name)f(completion)i(is)e(attempted)h(and)f(an)m(y)h
+(matc)m(hes)g(are)g(added)f(to)h(the)f(results)g(of)h(the)150
+3842 y(other)31 b(actions.)275 3976 y(By)g(default,)i(if)e(a)h(compsp)s
+(ec)f(is)h(found,)f(whatev)m(er)h(it)g(generates)h(is)e(returned)g(to)h
+(the)g(completion)150 4086 y(co)s(de)21 b(as)g(the)g(full)g(set)g(of)g
+(p)s(ossible)f(completions.)39 b(The)20 b(default)h(Bash)g(completions)
+h(are)g(not)f(attempted,)150 4195 y(and)30 b(the)g(Readline)h(default)f
+(of)g(\014lename)h(completion)g(is)f(disabled.)41 b(If)29
+b(the)i Ft(-o)e(bashdefault)e Fu(option)150 4305 y(w)m(as)d(supplied)e
+(to)j Ft(complete)c Fu(when)i(the)g(compsp)s(ec)h(w)m(as)g(de\014ned,)g
+(the)f(default)h(Bash)g(completions)h(are)150 4415 y(attempted)j(if)f
+(the)h(compsp)s(ec)f(generates)h(no)f(matc)m(hes.)41
+b(If)27 b(the)g Ft(-o)j(default)25 b Fu(option)j(w)m(as)f(supplied)f
+(to)150 4524 y Ft(complete)f Fu(when)h(the)h(compsp)s(ec)f(w)m(as)i
+(de\014ned,)e(Readline's)i(default)f(completion)h(will)f(b)s(e)f(p)s
+(erformed)150 4634 y(if)k(the)h(compsp)s(ec)f(\(and,)g(if)h(attempted,)
+g(the)g(default)f(Bash)h(completions\))h(generate)g(no)e(matc)m(hes.)
+275 4768 y(When)20 b(a)i(compsp)s(ec)e(indicates)i(that)g(directory)g
+(name)f(completion)h(is)f(desired,)i(the)e(programmable)150
+4877 y(completion)31 b(functions)e(force)i(Readline)f(to)h(app)s(end)d
+(a)i(slash)g(to)g(completed)h(names)e(whic)m(h)h(are)g(sym-)150
+4987 y(b)s(olic)40 b(links)g(to)h(directories,)j(sub)5
+b(ject)40 b(to)h(the)f(v)-5 b(alue)41 b(of)f(the)g Fr(mark-directories)
+45 b Fu(Readline)c(v)-5 b(ariable,)150 5096 y(regardless)31
+b(of)f(the)h(setting)g(of)g(the)f Fr(mark-symlink)m(ed-directories)36
+b Fu(Readline)31 b(v)-5 b(ariable.)275 5230 y(There)25
+b(is)i(some)g(supp)s(ort)e(for)h(dynamically)h(mo)s(difying)f
+(completions.)40 b(This)26 b(is)g(most)h(useful)f(when)150
+5340 y(used)40 b(in)h(com)m(bination)i(with)e(a)g(default)h(completion)
+g(sp)s(eci\014ed)f(with)g Ft(-D)p Fu(.)72 b(It's)42 b(p)s(ossible)f
+(for)g(shell)p eop end
+%%Page: 134 140
+TeXDict begin 134 139 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(134)150 299 y(functions)28
+b(executed)h(as)f(completion)i(handlers)d(to)i(indicate)g(that)g
+(completion)g(should)e(b)s(e)h(retried)g(b)m(y)150 408
+y(returning)j(an)i(exit)g(status)f(of)h(124.)48 b(If)31
+b(a)i(shell)f(function)g(returns)f(124,)k(and)c(c)m(hanges)j(the)e
+(compsp)s(ec)150 518 y(asso)s(ciated)43 b(with)e(the)g(command)g(on)g
+(whic)m(h)g(completion)i(is)e(b)s(eing)g(attempted)h(\(supplied)e(as)i
+(the)150 628 y(\014rst)29 b(argumen)m(t)h(when)e(the)i(function)f(is)g
+(executed\),)j(programmable)d(completion)i(restarts)f(from)f(the)150
+737 y(b)s(eginning,)e(with)g(an)h(attempt)g(to)g(\014nd)e(a)i(new)e
+(compsp)s(ec)i(for)f(that)h(command.)39 b(This)27 b(allo)m(ws)h(a)g
+(set)g(of)150 847 y(completions)33 b(to)f(b)s(e)g(built)f(dynamically)i
+(as)f(completion)h(is)f(attempted,)h(rather)f(than)f(b)s(eing)g(loaded)
+150 956 y(all)g(at)g(once.)275 1088 y(F)-8 b(or)38 b(instance,)h
+(assuming)e(that)h(there)f(is)h(a)f(library)g(of)g(compsp)s(ecs,)i(eac)
+m(h)g(k)m(ept)e(in)g(a)h(\014le)f(corre-)150 1198 y(sp)s(onding)g(to)j
+(the)f(name)f(of)h(the)g(command,)i(the)e(follo)m(wing)h(default)f
+(completion)h(function)e(w)m(ould)150 1307 y(load)31
+b(completions)g(dynamically:)390 1439 y Ft(_completion_loader\(\))390
+1548 y({)581 1658 y(.)47 b("/etc/bash_completion.d/$1)o(.sh)o(")42
+b(>/dev/null)j(2>&1)i(&&)g(return)f(124)390 1767 y(})390
+1877 y(complete)g(-D)h(-F)g(_completion_loader)c(-o)k(bashdefault)e(-o)
+i(default)150 2112 y Fs(8.7)68 b(Programmable)47 b(Completion)f
+(Builtins)150 2271 y Fu(Three)21 b(builtin)g(commands)f(are)i(a)m(v)-5
+b(ailable)24 b(to)e(manipulate)f(the)h(programmable)f(completion)h
+(facilities:)150 2381 y(one)34 b(to)g(sp)s(ecify)f(ho)m(w)h(the)f
+(argumen)m(ts)h(to)g(a)g(particular)g(command)f(are)h(to)g(b)s(e)f
+(completed,)j(and)d(t)m(w)m(o)150 2490 y(to)e(mo)s(dify)f(the)g
+(completion)i(as)e(it)h(is)g(happ)s(ening.)150 2644 y
+Ft(compgen)870 2775 y(compgen)46 b([)p Fj(option)p Ft(])f([)p
+Fj(word)p Ft(])630 2907 y Fu(Generate)27 b(p)s(ossible)e(completion)i
+(matc)m(hes)g(for)e Fr(w)m(ord)k Fu(according)e(to)f(the)g
+Fr(option)p Fu(s,)h(whic)m(h)630 3017 y(ma)m(y)32 b(b)s(e)f(an)m(y)h
+(option)g(accepted)g(b)m(y)g(the)f Ft(complete)f Fu(builtin)h(with)g
+(the)g(exception)i(of)f Ft(-p)630 3126 y Fu(and)39 b
+Ft(-r)p Fu(,)i(and)e(write)h(the)g(matc)m(hes)g(to)g(the)g(standard)f
+(output.)68 b(When)39 b(using)g(the)h Ft(-F)630 3236
+y Fu(or)33 b Ft(-C)f Fu(options,)i(the)e(v)-5 b(arious)33
+b(shell)g(v)-5 b(ariables)33 b(set)g(b)m(y)g(the)g(programmable)g
+(completion)630 3345 y(facilities,)g(while)d(a)m(v)-5
+b(ailable,)33 b(will)e(not)g(ha)m(v)m(e)g(useful)f(v)-5
+b(alues.)630 3477 y(The)34 b(matc)m(hes)h(will)g(b)s(e)f(generated)h
+(in)f(the)h(same)g(w)m(a)m(y)g(as)g(if)f(the)h(programmable)f(com-)630
+3586 y(pletion)d(co)s(de)g(had)f(generated)i(them)e(directly)i(from)e
+(a)h(completion)h(sp)s(eci\014cation)f(with)630 3696
+y(the)e(same)h(\015ags.)40 b(If)29 b Fr(w)m(ord)j Fu(is)d(sp)s
+(eci\014ed,)g(only)g(those)h(completions)g(matc)m(hing)g
+Fr(w)m(ord)j Fu(will)630 3806 y(b)s(e)d(displa)m(y)m(ed.)630
+3937 y(The)24 b(return)g(v)-5 b(alue)25 b(is)g(true)f(unless)g(an)h(in)
+m(v)-5 b(alid)25 b(option)g(is)g(supplied,)f(or)h(no)g(matc)m(hes)g(w)m
+(ere)630 4047 y(generated.)150 4200 y Ft(complete)870
+4332 y(complete)46 b([-abcdefgjksuv])d([-o)k Fj(comp-option)p
+Ft(])e([-DEI])h([-A)h Fj(action)p Ft(])e([-)870 4441
+y(G)i Fj(globpat)p Ft(])870 4551 y([-W)g Fj(wordlist)p
+Ft(])e([-F)i Fj(function)p Ft(])e([-C)i Fj(command)p
+Ft(])f([-X)h Fj(filterpat)p Ft(])870 4660 y([-P)g Fj(prefix)p
+Ft(])f([-S)h Fj(suffix)p Ft(])e Fj(name)i Ft([)p Fj(name)f
+Ft(...])870 4770 y(complete)g(-pr)g([-DEI])h([)p Fj(name)f
+Ft(...)o(])630 4902 y Fu(Sp)s(ecify)37 b(ho)m(w)h(argumen)m(ts)f(to)i
+(eac)m(h)g Fr(name)j Fu(should)37 b(b)s(e)g(completed.)63
+b(If)38 b(the)f Ft(-p)g Fu(option)630 5011 y(is)30 b(supplied,)e(or)i
+(if)g(no)f(options)h(are)g(supplied,)f(existing)h(completion)h(sp)s
+(eci\014cations)g(are)630 5121 y(prin)m(ted)24 b(in)h(a)g(w)m(a)m(y)g
+(that)h(allo)m(ws)g(them)e(to)i(b)s(e)e(reused)f(as)i(input.)38
+b(The)24 b Ft(-r)g Fu(option)i(remo)m(v)m(es)630 5230
+y(a)i(completion)h(sp)s(eci\014cation)f(for)g(eac)m(h)h
+Fr(name)p Fu(,)f(or,)h(if)e(no)h Fr(name)5 b Fu(s)27
+b(are)h(supplied,)g(all)g(com-)630 5340 y(pletion)i(sp)s
+(eci\014cations.)42 b(The)29 b Ft(-D)g Fu(option)h(indicates)h(that)f
+(other)g(supplied)e(options)j(and)p eop end
+%%Page: 135 141
+TeXDict begin 135 140 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(135)630 299 y(actions)27
+b(should)e(apply)g(to)i(the)f(\\default")h(command)e(completion;)k
+(that)e(is,)g(completion)630 408 y(attempted)g(on)f(a)h(command)f(for)g
+(whic)m(h)g(no)g(completion)i(has)d(previously)h(b)s(een)g(de\014ned.)
+630 518 y(The)e Ft(-E)g Fu(option)h(indicates)g(that)g(other)g
+(supplied)e(options)h(and)g(actions)i(should)d(apply)h(to)630
+628 y(\\empt)m(y")33 b(command)e(completion;)i(that)f(is,)g(completion)
+h(attempted)f(on)g(a)f(blank)g(line.)630 737 y(The)24
+b Ft(-I)g Fu(option)h(indicates)g(that)g(other)g(supplied)e(options)h
+(and)g(actions)i(should)d(apply)h(to)630 847 y(completion)32
+b(on)e(the)g(inital)i(non-assignmen)m(t)f(w)m(ord)f(on)g(the)g(line,)h
+(or)g(after)f(a)h(command)630 956 y(delimiter)41 b(suc)m(h)g(as)f(`)p
+Ft(;)p Fu(')h(or)g(`)p Ft(|)p Fu(',)i(whic)m(h)e(is)f(usually)h
+(command)f(name)h(completion.)72 b(If)630 1066 y(m)m(ultiple)26
+b(options)g(are)g(supplied,)g(the)f Ft(-D)g Fu(option)h(tak)m(es)i
+(precedence)e(o)m(v)m(er)g Ft(-E)p Fu(,)h(and)e(b)s(oth)630
+1176 y(tak)m(e)34 b(precedence)f(o)m(v)m(er)h Ft(-I)p
+Fu(.)47 b(If)32 b(an)m(y)h(of)g Ft(-D)p Fu(,)g Ft(-E)p
+Fu(,)f(or)h Ft(-I)f Fu(are)h(supplied,)f(an)m(y)h(other)g
+Fr(name)630 1285 y Fu(argumen)m(ts)k(are)g(ignored;)j(these)d
+(completions)h(only)e(apply)g(to)i(the)f(case)g(sp)s(eci\014ed)f(b)m(y)
+630 1395 y(the)31 b(option.)630 1541 y(The)e(pro)s(cess)g(of)h
+(applying)g(these)g(completion)g(sp)s(eci\014cations)h(when)d(w)m(ord)i
+(completion)630 1650 y(is)35 b(attempted)h(is)f(describ)s(ed)f(ab)s(o)m
+(v)m(e)j(\(see)f(Section)g(8.6)g([Programmable)g(Completion],)630
+1760 y(page)31 b(132\).)630 1906 y(Other)d(options,)i(if)f(sp)s
+(eci\014ed,)g(ha)m(v)m(e)h(the)f(follo)m(wing)i(meanings.)40
+b(The)29 b(argumen)m(ts)g(to)h(the)630 2016 y Ft(-G)p
+Fu(,)41 b Ft(-W)p Fu(,)h(and)c Ft(-X)h Fu(options)h(\(and,)h(if)f
+(necessary)-8 b(,)42 b(the)e Ft(-P)f Fu(and)f Ft(-S)h
+Fu(options\))h(should)f(b)s(e)630 2125 y(quoted)28 b(to)h(protect)g
+(them)f(from)f(expansion)h(b)s(efore)g(the)g Ft(complete)e
+Fu(builtin)h(is)h(in)m(v)m(ok)m(ed.)630 2308 y Ft(-o)i
+Fj(comp-option)1110 2418 y Fu(The)c Fr(comp-option)i
+Fu(con)m(trols)g(sev)m(eral)h(asp)s(ects)e(of)g(the)g(compsp)s(ec's)g
+(b)s(eha)m(v-)1110 2527 y(ior)g(b)s(ey)m(ond)f(the)g(simple)h
+(generation)h(of)e(completions.)41 b Fr(comp-option)27
+b Fu(ma)m(y)1110 2637 y(b)s(e)j(one)g(of:)1110 2819 y
+Ft(bashdefault)1590 2929 y Fu(P)m(erform)d(the)h(rest)f(of)h(the)g
+(default)f(Bash)h(completions)g(if)g(the)1590 3039 y(compsp)s(ec)i
+(generates)i(no)e(matc)m(hes.)1110 3221 y Ft(default)144
+b Fu(Use)22 b(Readline's)g(default)g(\014lename)g(completion)g(if)g
+(the)g(comp-)1590 3331 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110
+3513 y Ft(dirnames)96 b Fu(P)m(erform)46 b(directory)g(name)h
+(completion)g(if)f(the)g(compsp)s(ec)1590 3623 y(generates)32
+b(no)e(matc)m(hes.)1110 3806 y Ft(filenames)1590 3915
+y Fu(T)-8 b(ell)40 b(Readline)f(that)h(the)f(compsp)s(ec)f(generates)j
+(\014lenames,)1590 4025 y(so)29 b(it)h(can)f(p)s(erform)f(an)m(y)h
+(\014lename-sp)s(eci\014c)h(pro)s(cessing)e(\(lik)m(e)1590
+4134 y(adding)22 b(a)g(slash)g(to)h(directory)f(names,)i(quoting)f(sp)s
+(ecial)f(c)m(har-)1590 4244 y(acters,)39 b(or)d(suppressing)f(trailing)
+i(spaces\).)59 b(This)35 b(option)i(is)1590 4354 y(in)m(tended)30
+b(to)g(b)s(e)g(used)f(with)g(shell)i(functions)e(sp)s(eci\014ed)g(with)
+1590 4463 y Ft(-F)p Fu(.)1110 4646 y Ft(noquote)144 b
+Fu(T)-8 b(ell)28 b(Readline)g(not)g(to)g(quote)g(the)g(completed)g(w)m
+(ords)f(if)h(they)1590 4756 y(are)j(\014lenames)f(\(quoting)h
+(\014lenames)g(is)f(the)h(default\).)1110 4938 y Ft(nosort)192
+b Fu(T)-8 b(ell)23 b(Readline)g(not)f(to)h(sort)g(the)f(list)h(of)f(p)s
+(ossible)g(completions)1590 5048 y(alphab)s(etically)-8
+b(.)1110 5230 y Ft(nospace)144 b Fu(T)-8 b(ell)40 b(Readline)g(not)g
+(to)g(app)s(end)d(a)j(space)g(\(the)f(default\))h(to)1590
+5340 y(w)m(ords)30 b(completed)h(at)g(the)g(end)f(of)g(the)h(line.)p
+eop end
+%%Page: 136 142
+TeXDict begin 136 141 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(136)1110 299 y Ft(plusdirs)96
+b Fu(After)30 b(an)m(y)h(matc)m(hes)g(de\014ned)d(b)m(y)i(the)g(compsp)
+s(ec)g(are)g(gener-)1590 408 y(ated,)g(directory)f(name)g(completion)i
+(is)d(attempted)i(and)f(an)m(y)1590 518 y(matc)m(hes)j(are)e(added)g
+(to)h(the)g(results)f(of)g(the)h(other)g(actions.)630
+677 y Ft(-A)f Fj(action)66 b Fu(The)25 b Fr(action)h
+Fu(ma)m(y)g(b)s(e)e(one)h(of)h(the)f(follo)m(wing)i(to)e(generate)i(a)e
+(list)h(of)f(p)s(ossible)1110 787 y(completions:)1110
+946 y Ft(alias)240 b Fu(Alias)31 b(names.)41 b(Ma)m(y)31
+b(also)h(b)s(e)e(sp)s(eci\014ed)f(as)i Ft(-a)p Fu(.)1110
+1106 y Ft(arrayvar)96 b Fu(Arra)m(y)31 b(v)-5 b(ariable)31
+b(names.)1110 1265 y Ft(binding)144 b Fu(Readline)30
+b(k)m(ey)f(binding)f(names)h(\(see)h(Section)f(8.4)h([Bindable)1590
+1375 y(Readline)h(Commands],)f(page)h(122\).)1110 1534
+y Ft(builtin)144 b Fu(Names)21 b(of)g(shell)f(builtin)h(commands.)37
+b(Ma)m(y)21 b(also)h(b)s(e)e(sp)s(eci\014ed)1590 1644
+y(as)31 b Ft(-b)p Fu(.)1110 1803 y Ft(command)144 b Fu(Command)29
+b(names.)41 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f(as)i
+Ft(-c)p Fu(.)1110 1963 y Ft(directory)1590 2072 y Fu(Directory)h
+(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)g(as)g
+Ft(-d)p Fu(.)1110 2232 y Ft(disabled)96 b Fu(Names)31
+b(of)g(disabled)f(shell)g(builtins.)1110 2391 y Ft(enabled)144
+b Fu(Names)31 b(of)g(enabled)f(shell)g(builtins.)1110
+2550 y Ft(export)192 b Fu(Names)34 b(of)f(exp)s(orted)f(shell)h(v)-5
+b(ariables.)49 b(Ma)m(y)35 b(also)e(b)s(e)g(sp)s(eci-)1590
+2660 y(\014ed)d(as)g Ft(-e)p Fu(.)1110 2819 y Ft(file)288
+b Fu(File)32 b(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f
+(as)i Ft(-f)p Fu(.)1110 2979 y Ft(function)96 b Fu(Names)31
+b(of)g(shell)f(functions.)1110 3138 y Ft(group)240 b
+Fu(Group)30 b(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)g
+(as)g Ft(-g)p Fu(.)1110 3298 y Ft(helptopic)1590 3407
+y Fu(Help)37 b(topics)g(as)g(accepted)h(b)m(y)e(the)h
+Ft(help)f Fu(builtin)g(\(see)h(Sec-)1590 3517 y(tion)31
+b(4.2)g([Bash)g(Builtins],)g(page)g(50\).)1110 3676 y
+Ft(hostname)96 b Fu(Hostnames,)89 b(as)76 b(tak)m(en)h(from)f(the)g
+(\014le)h(sp)s(eci\014ed)e(b)m(y)1590 3786 y(the)55 b
+Ft(HOSTFILE)e Fu(shell)j(v)-5 b(ariable)56 b(\(see)g(Section)g(5.2)h
+([Bash)1590 3895 y(V)-8 b(ariables],)32 b(page)f(73\).)1110
+4055 y Ft(job)336 b Fu(Job)31 b(names,)h(if)g(job)f(con)m(trol)i(is)f
+(activ)m(e.)46 b(Ma)m(y)33 b(also)g(b)s(e)e(sp)s(eci-)1590
+4164 y(\014ed)f(as)g Ft(-j)p Fu(.)1110 4324 y Ft(keyword)144
+b Fu(Shell)30 b(reserv)m(ed)h(w)m(ords.)40 b(Ma)m(y)32
+b(also)f(b)s(e)f(sp)s(eci\014ed)f(as)i Ft(-k)p Fu(.)1110
+4483 y Ft(running)144 b Fu(Names)31 b(of)g(running)d(jobs,)i(if)h(job)f
+(con)m(trol)h(is)g(activ)m(e.)1110 4643 y Ft(service)144
+b Fu(Service)31 b(names.)41 b(Ma)m(y)31 b(also)g(b)s(e)f(sp)s
+(eci\014ed)g(as)g Ft(-s)p Fu(.)1110 4802 y Ft(setopt)192
+b Fu(V)-8 b(alid)39 b(argumen)m(ts)g(for)f(the)h Ft(-o)e
+Fu(option)i(to)g(the)g Ft(set)e Fu(builtin)1590 4912
+y(\(see)31 b(Section)h(4.3.1)g([The)e(Set)g(Builtin],)i(page)f(61\).)
+1110 5071 y Ft(shopt)240 b Fu(Shell)40 b(option)g(names)g(as)g
+(accepted)i(b)m(y)e(the)g Ft(shopt)e Fu(builtin)1590
+5181 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(50\).)
+1110 5340 y Ft(signal)192 b Fu(Signal)31 b(names.)p eop
+end
+%%Page: 137 143
+TeXDict begin 137 142 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(137)1110 299 y Ft(stopped)144
+b Fu(Names)31 b(of)g(stopp)s(ed)e(jobs,)h(if)g(job)g(con)m(trol)i(is)f
+(activ)m(e.)1110 454 y Ft(user)288 b Fu(User)30 b(names.)41
+b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f(as)i Ft(-u)p
+Fu(.)1110 609 y Ft(variable)96 b Fu(Names)36 b(of)g(all)g(shell)g(v)-5
+b(ariables.)56 b(Ma)m(y)37 b(also)f(b)s(e)f(sp)s(eci\014ed)g(as)1590
+719 y Ft(-v)p Fu(.)630 874 y Ft(-C)30 b Fj(command)1110
+984 y Fr(command)35 b Fu(is)e(executed)g(in)e(a)i(subshell)e(en)m
+(vironmen)m(t,)i(and)f(its)g(output)g(is)1110 1093 y(used)e(as)g(the)h
+(p)s(ossible)f(completions.)630 1249 y Ft(-F)g Fj(function)1110
+1358 y Fu(The)39 b(shell)g(function)g Fr(function)g Fu(is)g(executed)h
+(in)f(the)g(curren)m(t)g(shell)g(en)m(vi-)1110 1468 y(ronmen)m(t.)72
+b(When)41 b(it)g(is)g(executed,)k($1)c(is)g(the)g(name)g(of)g(the)g
+(command)1110 1577 y(whose)34 b(argumen)m(ts)h(are)g(b)s(eing)f
+(completed,)j($2)e(is)f(the)h(w)m(ord)f(b)s(eing)g(com-)1110
+1687 y(pleted,)44 b(and)c($3)i(is)e(the)h(w)m(ord)g(preceding)f(the)h
+(w)m(ord)f(b)s(eing)h(completed,)1110 1797 y(as)g(describ)s(ed)f(ab)s
+(o)m(v)m(e)i(\(see)g(Section)f(8.6)h([Programmable)g(Completion],)1110
+1906 y(page)30 b(132\).)42 b(When)29 b(it)h(\014nishes,)e(the)h(p)s
+(ossible)g(completions)h(are)g(retriev)m(ed)1110 2016
+y(from)g(the)g(v)-5 b(alue)31 b(of)g(the)f Ft(COMPREPLY)e
+Fu(arra)m(y)j(v)-5 b(ariable.)630 2171 y Ft(-G)30 b Fj(globpat)1110
+2281 y Fu(The)39 b(\014lename)h(expansion)g(pattern)g
+Fr(globpat)j Fu(is)d(expanded)f(to)h(generate)1110 2390
+y(the)31 b(p)s(ossible)e(completions.)630 2545 y Ft(-P)h
+Fj(prefix)66 b Fr(pre\014x)39 b Fu(is)34 b(added)f(at)i(the)f(b)s
+(eginning)f(of)i(eac)m(h)g(p)s(ossible)e(completion)i(after)1110
+2655 y(all)c(other)g(options)g(ha)m(v)m(e)g(b)s(een)f(applied.)630
+2810 y Ft(-S)g Fj(suffix)66 b Fr(su\016x)26 b Fu(is)20
+b(app)s(ended)f(to)i(eac)m(h)h(p)s(ossible)e(completion)i(after)f(all)g
+(other)g(options)1110 2920 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630
+3075 y Ft(-W)h Fj(wordlist)1110 3185 y Fu(The)24 b Fr(w)m(ordlist)k
+Fu(is)d(split)g(using)f(the)h(c)m(haracters)i(in)d(the)i
+Ft(IFS)e Fu(sp)s(ecial)h(v)-5 b(ariable)1110 3294 y(as)36
+b(delimiters,)i(and)e(eac)m(h)h(resultan)m(t)g(w)m(ord)e(is)h
+(expanded.)57 b(The)35 b(p)s(ossible)1110 3404 y(completions)c(are)e
+(the)h(mem)m(b)s(ers)f(of)g(the)h(resultan)m(t)g(list)g(whic)m(h)f
+(matc)m(h)i(the)1110 3513 y(w)m(ord)f(b)s(eing)g(completed.)630
+3669 y Ft(-X)g Fj(filterpat)1110 3778 y Fr(\014lterpat)d
+Fu(is)e(a)g(pattern)g(as)f(used)g(for)h(\014lename)g(expansion.)38
+b(It)25 b(is)g(applied)f(to)1110 3888 y(the)30 b(list)f(of)h(p)s
+(ossible)f(completions)h(generated)h(b)m(y)e(the)g(preceding)h(options)
+1110 3998 y(and)d(argumen)m(ts,)i(and)e(eac)m(h)i(completion)g(matc)m
+(hing)g Fr(\014lterpat)h Fu(is)e(remo)m(v)m(ed)1110 4107
+y(from)i(the)h(list.)42 b(A)30 b(leading)i(`)p Ft(!)p
+Fu(')e(in)g Fr(\014lterpat)j Fu(negates)f(the)f(pattern;)g(in)f(this)
+1110 4217 y(case,)i(an)m(y)e(completion)i(not)f(matc)m(hing)g
+Fr(\014lterpat)i Fu(is)d(remo)m(v)m(ed.)630 4372 y(The)35
+b(return)g(v)-5 b(alue)37 b(is)f(true)f(unless)h(an)f(in)m(v)-5
+b(alid)37 b(option)f(is)g(supplied,)g(an)g(option)h(other)630
+4482 y(than)h Ft(-p)g Fu(or)g Ft(-r)f Fu(is)h(supplied)f(without)i(a)f
+Fr(name)44 b Fu(argumen)m(t,)c(an)e(attempt)i(is)e(made)g(to)630
+4591 y(remo)m(v)m(e)32 b(a)e(completion)i(sp)s(eci\014cation)f(for)f(a)
+h Fr(name)k Fu(for)30 b(whic)m(h)g(no)g(sp)s(eci\014cation)h(exists,)
+630 4701 y(or)f(an)h(error)f(o)s(ccurs)g(adding)g(a)g(completion)i(sp)s
+(eci\014cation.)150 4856 y Ft(compopt)870 4988 y(compopt)46
+b([-o)h Fj(option)p Ft(])f([-DEI])g([+o)h Fj(option)p
+Ft(])e([)p Fj(name)p Ft(])630 5121 y Fu(Mo)s(dify)33
+b(completion)h(options)g(for)f(eac)m(h)h Fr(name)39 b
+Fu(according)34 b(to)g(the)f Fr(option)p Fu(s,)i(or)e(for)g(the)630
+5230 y(curren)m(tly-executing)46 b(completion)f(if)f(no)f
+Fr(name)5 b Fu(s)44 b(are)h(supplied.)80 b(If)43 b(no)h
+Fr(option)p Fu(s)h(are)630 5340 y(giv)m(en,)30 b(displa)m(y)e(the)g
+(completion)h(options)g(for)e(eac)m(h)i Fr(name)34 b
+Fu(or)27 b(the)i(curren)m(t)e(completion.)p eop end
+%%Page: 138 144
+TeXDict begin 138 143 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(138)630 299 y(The)26
+b(p)s(ossible)g(v)-5 b(alues)27 b(of)f Fr(option)h Fu(are)g(those)g(v)
+-5 b(alid)26 b(for)g(the)h Ft(complete)d Fu(builtin)i(describ)s(ed)630
+408 y(ab)s(o)m(v)m(e.)41 b(The)27 b Ft(-D)f Fu(option)i(indicates)g
+(that)g(other)f(supplied)f(options)i(should)e(apply)h(to)h(the)630
+518 y(\\default")33 b(command)f(completion;)i(that)f(is,)g(completion)g
+(attempted)g(on)f(a)g(command)630 628 y(for)g(whic)m(h)g(no)g
+(completion)i(has)e(previously)g(b)s(een)g(de\014ned.)45
+b(The)32 b Ft(-E)f Fu(option)i(indicates)630 737 y(that)23
+b(other)f(supplied)e(options)j(should)e(apply)g(to)i(\\empt)m(y")g
+(command)f(completion;)k(that)630 847 y(is,)36 b(completion)g
+(attempted)g(on)e(a)h(blank)g(line.)54 b(The)34 b Ft(-I)g
+Fu(option)h(indicates)g(that)h(other)630 956 y(supplied)26
+b(options)h(should)g(apply)f(to)i(completion)h(on)e(the)g(inital)i
+(non-assignmen)m(t)e(w)m(ord)630 1066 y(on)37 b(the)f(line,)j(or)e
+(after)g(a)g(command)f(delimiter)i(suc)m(h)e(as)h(`)p
+Ft(;)p Fu(')g(or)f(`)p Ft(|)p Fu(',)j(whic)m(h)e(is)f(usually)630
+1176 y(command)30 b(name)h(completion.)630 1310 y(If)k(m)m(ultiple)i
+(options)f(are)g(supplied,)g(the)g Ft(-D)g Fu(option)g(tak)m(es)h
+(precedence)g(o)m(v)m(er)g Ft(-E)p Fu(,)g(and)630 1419
+y(b)s(oth)30 b(tak)m(e)i(precedence)e(o)m(v)m(er)i Ft(-I)630
+1554 y Fu(The)23 b(return)g(v)-5 b(alue)25 b(is)f(true)g(unless)f(an)h
+(in)m(v)-5 b(alid)24 b(option)h(is)f(supplied,)g(an)g(attempt)h(is)f
+(made)630 1663 y(to)32 b(mo)s(dify)f(the)g(options)h(for)f(a)h
+Fr(name)k Fu(for)31 b(whic)m(h)g(no)g(completion)i(sp)s(eci\014cation)f
+(exists,)630 1773 y(or)e(an)h(output)f(error)g(o)s(ccurs.)150
+2013 y Fs(8.8)68 b(A)44 b(Programmable)j(Completion)f(Example)150
+2173 y Fu(The)37 b(most)g(common)g(w)m(a)m(y)i(to)e(obtain)h
+(additional)g(completion)g(functionalit)m(y)h(b)s(ey)m(ond)d(the)i
+(default)150 2282 y(actions)29 b Ft(complete)d Fu(and)i
+Ft(compgen)e Fu(pro)m(vide)i(is)h(to)f(use)g(a)h(shell)f(function)g
+(and)g(bind)e(it)j(to)g(a)g(particular)150 2392 y(command)h(using)g
+Ft(complete)e(-F)p Fu(.)275 2526 y(The)j(follo)m(wing)j(function)e(pro)
+m(vides)g(completions)i(for)e(the)g Ft(cd)g Fu(builtin.)46
+b(It)32 b(is)h(a)f(reasonably)h(go)s(o)s(d)150 2636 y(example)41
+b(of)g(what)f(shell)h(functions)f(m)m(ust)g(do)h(when)e(used)h(for)g
+(completion.)73 b(This)39 b(function)h(uses)150 2745
+y(the)32 b(w)m(ord)f(passed)g(as)h Ft($2)f Fu(to)h(determine)g(the)f
+(directory)h(name)g(to)g(complete.)46 b(Y)-8 b(ou)32
+b(can)g(also)g(use)g(the)150 2855 y Ft(COMP_WORDS)c Fu(arra)m(y)i(v)-5
+b(ariable;)32 b(the)e(curren)m(t)h(w)m(ord)f(is)g(indexed)g(b)m(y)g
+(the)h Ft(COMP_CWORD)c Fu(v)-5 b(ariable.)275 2989 y(The)42
+b(function)h(relies)h(on)e(the)i Ft(complete)c Fu(and)j
+Ft(compgen)e Fu(builtins)h(to)i(do)f(m)m(uc)m(h)g(of)g(the)h(w)m(ork,)
+150 3099 y(adding)25 b(only)h(the)g(things)g(that)g(the)g(Bash)g
+Ft(cd)f Fu(do)s(es)g(b)s(ey)m(ond)g(accepting)j(basic)e(directory)g
+(names:)38 b(tilde)150 3208 y(expansion)22 b(\(see)h(Section)g(3.5.2)g
+([Tilde)g(Expansion],)g(page)g(23\),)i(searc)m(hing)e(directories)g(in)
+e Fr($CDP)-8 b(A)g(TH)p Fu(,)150 3318 y(whic)m(h)21 b(is)h(describ)s
+(ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)h(4.1)f([Bourne)g(Shell)f
+(Builtins],)j(page)e(43\),)j(and)c(basic)h(supp)s(ort)150
+3428 y(for)31 b(the)h Ft(cdable_vars)d Fu(shell)i(option)h(\(see)h
+(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)i(page)f(65\).)46
+b Ft(_comp_)150 3537 y(cd)30 b Fu(mo)s(di\014es)g(the)h(v)-5
+b(alue)31 b(of)g Fr(IFS)36 b Fu(so)31 b(that)g(it)g(con)m(tains)h(only)
+f(a)g(newline)g(to)h(accommo)s(date)g(\014le)f(names)150
+3647 y(con)m(taining)i(spaces)g(and)e(tabs)h({)g Ft(compgen)e
+Fu(prin)m(ts)h(the)h(p)s(ossible)f(completions)i(it)g(generates)g(one)f
+(p)s(er)150 3756 y(line.)275 3891 y(P)m(ossible)24 b(completions)h(go)g
+(in)m(to)g(the)f Fr(COMPREPL)-8 b(Y)36 b Fu(arra)m(y)24
+b(v)-5 b(ariable,)26 b(one)e(completion)i(p)s(er)c(arra)m(y)150
+4000 y(elemen)m(t.)42 b(The)30 b(programmable)g(completion)i(system)e
+(retriev)m(es)h(the)g(completions)g(from)f(there)g(when)150
+4110 y(the)h(function)f(returns.)390 4244 y Ft(#)47 b(A)h(completion)d
+(function)g(for)i(the)g(cd)g(builtin)390 4354 y(#)g(based)g(on)g(the)g
+(cd)g(completion)e(function)h(from)g(the)h(bash_completion)d(package)
+390 4463 y(_comp_cd\(\))390 4573 y({)581 4682 y(local)i(IFS=$')g
+(\\t\\n')190 b(#)47 b(normalize)f(IFS)581 4792 y(local)g(cur)h
+(_skipdot)f(_cdpath)581 4902 y(local)g(i)i(j)f(k)581
+5121 y(#)g(Tilde)g(expansion,)e(which)h(also)h(expands)f(tilde)g(to)h
+(full)g(pathname)581 5230 y(case)g("$2")f(in)581 5340
+y(\\~*\))190 b(eval)46 b(cur="$2")g(;;)p eop end
+%%Page: 139 145
+TeXDict begin 139 144 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(139)581 299 y Ft(*\))286
+b(cur=$2)46 b(;;)581 408 y(esac)581 628 y(#)h(no)h(cdpath)e(or)h
+(absolute)e(pathname)h(--)h(straight)f(directory)f(completion)581
+737 y(if)i([[)g(-z)g("${CDPATH:-}")e(]])i(||)g([[)g("$cur")f(==)h
+(@\(./*|../*|/*\))d(]];)j(then)772 847 y(#)g(compgen)f(prints)g(paths)h
+(one)f(per)h(line;)g(could)f(also)h(use)g(while)f(loop)772
+956 y(IFS=$'\\n')772 1066 y(COMPREPLY=\()f($\(compgen)g(-d)i(--)g
+("$cur"\))f(\))772 1176 y(IFS=$')g(\\t\\n')581 1285 y(#)h
+(CDPATH+directories)c(in)k(the)g(current)f(directory)f(if)j(not)e(in)i
+(CDPATH)581 1395 y(else)772 1504 y(IFS=$'\\n')772 1614
+y(_skipdot=false)772 1724 y(#)f(preprocess)e(CDPATH)h(to)i(convert)d
+(null)i(directory)e(names)i(to)g(.)772 1833 y(_cdpath=${CDPATH/#:/.:})
+772 1943 y(_cdpath=${_cdpath//::/:.)o(:})772 2052 y
+(_cdpath=${_cdpath/\045:/:.})772 2162 y(for)g(i)g(in)g
+(${_cdpath//:/$'\\n'};)c(do)963 2271 y(if)k([[)g($i)g(-ef)g(.)h(]];)f
+(then)f(_skipdot=true;)e(fi)963 2381 y(k="${#COMPREPLY[@]}")963
+2491 y(for)j(j)g(in)g($\()g(compgen)f(-d)h(--)h("$i/$cur")d(\);)i(do)
+1154 2600 y(COMPREPLY[k++]=${j#$i/})375 b(#)48 b(cut)f(off)f(directory)
+963 2710 y(done)772 2819 y(done)772 2929 y($_skipdot)f(||)i
+(COMPREPLY+=\()e($\(compgen)g(-d)i(--)g("$cur"\))f(\))772
+3039 y(IFS=$')g(\\t\\n')581 3148 y(fi)581 3367 y(#)h(variable)f(names)g
+(if)h(appropriate)e(shell)i(option)f(set)h(and)f(no)i(completions)581
+3477 y(if)f(shopt)f(-q)i(cdable_vars)c(&&)k([[)f(${#COMPREPLY[@]})c
+(-eq)k(0)g(]];)g(then)772 3587 y(COMPREPLY=\()e($\(compgen)g(-v)i(--)g
+("$cur"\))f(\))581 3696 y(fi)581 3915 y(return)g(0)390
+4025 y(})275 4171 y Fu(W)-8 b(e)31 b(install)g(the)g(completion)h
+(function)e(using)f(the)i Ft(-F)f Fu(option)h(to)g Ft(complete)p
+Fu(:)390 4317 y Ft(#)47 b(Tell)g(readline)f(to)h(quote)f(appropriate)f
+(and)i(append)f(slashes)g(to)h(directories;)390 4427
+y(#)g(use)g(the)g(bash)g(default)f(completion)f(for)i(other)f
+(arguments)390 4536 y(complete)g(-o)h(filenames)e(-o)i(nospace)f(-o)h
+(bashdefault)e(-F)i(_comp_cd)f(cd)150 4682 y Fu(Since)33
+b(w)m(e'd)g(lik)m(e)i(Bash)e(and)f(Readline)i(to)g(tak)m(e)g(care)g(of)
+f(some)h(of)f(the)g(other)h(details)g(for)e(us,)i(w)m(e)f(use)150
+4792 y(sev)m(eral)43 b(other)g(options)f(to)h(tell)g(Bash)f(and)f
+(Readline)i(what)f(to)g(do.)76 b(The)41 b Ft(-o)30 b(filenames)39
+b Fu(option)150 4902 y(tells)j(Readline)g(that)g(the)f(p)s(ossible)g
+(completions)h(should)f(b)s(e)f(treated)i(as)g(\014lenames,)i(and)d
+(quoted)150 5011 y(appropriately)-8 b(.)53 b(That)34
+b(option)h(will)g(also)g(cause)g(Readline)g(to)g(app)s(end)e(a)h(slash)
+g(to)h(\014lenames)g(it)g(can)150 5121 y(determine)i(are)g(directories)
+h(\(whic)m(h)g(is)f(wh)m(y)f(w)m(e)i(migh)m(t)f(w)m(an)m(t)h(to)g
+(extend)f Ft(_comp_cd)e Fu(to)i(app)s(end)f(a)150 5230
+y(slash)22 b(if)g(w)m(e're)h(using)f(directories)h(found)e(via)i
+Fr(CDP)-8 b(A)g(TH)10 b Fu(:)37 b(Readline)23 b(can't)g(tell)g(those)g
+(completions)h(are)150 5340 y(directories\).)45 b(The)31
+b Ft(-o)f(nospace)f Fu(option)j(tells)g(Readline)g(to)h(not)e(app)s
+(end)f(a)i(space)g(c)m(haracter)h(to)f(the)p eop end
+%%Page: 140 146
+TeXDict begin 140 145 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(140)150 299 y(directory)28
+b(name,)h(in)f(case)h(w)m(e)f(w)m(an)m(t)h(to)f(app)s(end)f(to)h(it.)41
+b(The)27 b Ft(-o)j(bashdefault)25 b Fu(option)j(brings)f(in)h(the)150
+408 y(rest)h(of)f(the)h Ft(")p Fu(Bash)f(default)p Ft(")h
+Fu(completions)g({)g(p)s(ossible)f(completion)i(that)f(Bash)f(adds)g
+(to)h(the)g(default)150 518 y(Readline)40 b(set.)68 b(These)39
+b(include)g(things)g(lik)m(e)i(command)e(name)g(completion,)44
+b(v)-5 b(ariable)40 b(completion)150 628 y(for)i(w)m(ords)g(b)s
+(eginning)f(with)h(`)p Ft({)p Fu(',)k(completions)e(con)m(taining)f
+(pathname)g(expansion)f(patterns)g(\(see)150 737 y(Section)31
+b(3.5.8)h([Filename)g(Expansion],)e(page)i(32\),)f(and)f(so)h(on.)275
+872 y(Once)39 b(installed)i(using)e Ft(complete)p Fu(,)h
+Ft(_comp_cd)d Fu(will)j(b)s(e)g(called)g(ev)m(ery)h(time)f(w)m(e)g
+(attempt)h(w)m(ord)150 981 y(completion)32 b(for)e(a)h
+Ft(cd)e Fu(command.)275 1116 y(Man)m(y)34 b(more)g(examples)g({)g(an)g
+(extensiv)m(e)h(collection)i(of)c(completions)i(for)f(most)g(of)g(the)g
+(common)150 1225 y(GNU,)g(Unix,)h(and)d(Lin)m(ux)h(commands)g({)h(are)g
+(a)m(v)-5 b(ailable)36 b(as)e(part)f(of)h(the)f(bash)p
+2943 1225 28 4 v 39 w(completion)i(pro)5 b(ject.)150
+1335 y(This)33 b(is)h(installed)h(b)m(y)f(default)g(on)g(man)m(y)h
+(GNU/Lin)m(ux)f(distributions.)51 b(Originally)35 b(written)f(b)m(y)g
+(Ian)150 1445 y(Macdonald,)44 b(the)d(pro)5 b(ject)41
+b(no)m(w)f(liv)m(es)i(at)f Ft(http:)8 b(/)g(/)g(bash-completion)g(.)g
+(alioth)g(.)g(debi)o(an)g(.)g(org)f(/)h Fu(.)150 1554
+y(There)30 b(are)h(p)s(orts)e(for)h(other)h(systems)f(suc)m(h)g(as)h
+(Solaris)g(and)f(Mac)h(OS)f(X.)275 1689 y(An)54 b(older)h(v)m(ersion)h
+(of)f(the)g(bash)p 1532 1689 V 40 w(completion)h(pac)m(k)-5
+b(age)57 b(is)e(distributed)f(with)h(bash)f(in)h(the)150
+1798 y Ft(examples/complete)26 b Fu(sub)s(directory)-8
+b(.)p eop end
+%%Page: 141 147
+TeXDict begin 141 146 bop 3614 -116 a Fu(141)150 299
+y Fp(9)80 b(Using)53 b(History)g(In)l(teractiv)l(ely)150
+554 y Fu(This)42 b(c)m(hapter)h(describ)s(es)f(ho)m(w)g(to)h(use)g(the)
+f Fm(gnu)h Fu(History)g(Library)e(in)m(teractiv)m(ely)-8
+b(,)50 b(from)42 b(a)h(user's)150 664 y(standp)s(oin)m(t.)76
+b(It)42 b(should)f(b)s(e)h(considered)g(a)g(user's)g(guide.)76
+b(F)-8 b(or)43 b(information)f(on)g(using)g(the)g Fm(gnu)150
+774 y Fu(History)31 b(Library)f(in)g(other)g(programs,)g(see)h(the)g
+Fm(gnu)f Fu(Readline)h(Library)f(Man)m(ual.)150 1025
+y Fs(9.1)68 b(Bash)45 b(History)h(F)-11 b(acilities)150
+1184 y Fu(When)44 b(the)g Ft(-o)30 b(history)42 b Fu(option)i(to)h(the)
+f Ft(set)f Fu(builtin)h(is)g(enabled)g(\(see)g(Section)h(4.3.1)h([The)e
+(Set)150 1294 y(Builtin],)32 b(page)g(61\),)h(the)e(shell)h(pro)m
+(vides)f(access)h(to)g(the)f Fr(command)g(history)p Fu(,)h(the)f(list)h
+(of)f(commands)150 1404 y(previously)h(t)m(yp)s(ed.)47
+b(The)33 b(v)-5 b(alue)33 b(of)f(the)h Ft(HISTSIZE)e
+Fu(shell)h(v)-5 b(ariable)34 b(is)f(used)e(as)i(the)g(n)m(um)m(b)s(er)e
+(of)i(com-)150 1513 y(mands)i(to)i(sa)m(v)m(e)h(in)e(a)g(history)h
+(list.)58 b(The)36 b(text)h(of)g(the)f(last)h Ft($HISTSIZE)d
+Fu(commands)i(\(default)g(500\))150 1623 y(is)h(sa)m(v)m(ed.)61
+b(The)36 b(shell)h(stores)h(eac)m(h)g(command)e(in)h(the)g(history)g
+(list)g(prior)f(to)i(parameter)f(and)f(v)-5 b(ari-)150
+1732 y(able)33 b(expansion)g(but)f(after)h(history)f(expansion)h(is)g
+(p)s(erformed,)e(sub)5 b(ject)33 b(to)g(the)g(v)-5 b(alues)33
+b(of)g(the)g(shell)150 1842 y(v)-5 b(ariables)31 b Ft(HISTIGNORE)d
+Fu(and)h Ft(HISTCONTROL)p Fu(.)275 1984 y(When)g(the)g(shell)h(starts)g
+(up,)f(the)h(history)f(is)h(initialized)h(from)e(the)h(\014le)f(named)g
+(b)m(y)h(the)f Ft(HISTFILE)150 2093 y Fu(v)-5 b(ariable)26
+b(\(default)g Ft(~/.bash_history)p Fu(\).)35 b(The)24
+b(\014le)i(named)e(b)m(y)h(the)h(v)-5 b(alue)25 b(of)h
+Ft(HISTFILE)c Fu(is)k(truncated,)150 2203 y(if)42 b(necessary)-8
+b(,)45 b(to)e(con)m(tain)g(no)f(more)g(than)f(the)h(n)m(um)m(b)s(er)f
+(of)h(lines)g(sp)s(eci\014ed)f(b)m(y)h(the)g(v)-5 b(alue)42
+b(of)g(the)150 2312 y Ft(HISTFILESIZE)28 b Fu(v)-5 b(ariable.)46
+b(When)31 b(a)h(shell)g(with)g(history)f(enabled)h(exits,)h(the)f(last)
+h Ft($HISTSIZE)c Fu(lines)150 2422 y(are)35 b(copied)g(from)g(the)g
+(history)f(list)i(to)f(the)g(\014le)g(named)f(b)m(y)h
+Ft($HISTFILE)p Fu(.)51 b(If)35 b(the)g Ft(histappend)d
+Fu(shell)150 2532 y(option)26 b(is)g(set)g(\(see)h(Section)f(4.2)h
+([Bash)f(Builtins],)h(page)g(50\),)h(the)e(lines)g(are)g(app)s(ended)e
+(to)i(the)g(history)150 2641 y(\014le,)36 b(otherwise)f(the)g(history)f
+(\014le)h(is)f(o)m(v)m(erwritten.)55 b(If)34 b Ft(HISTFILE)e
+Fu(is)j(unset,)g(or)g(if)f(the)h(history)f(\014le)h(is)150
+2751 y(un)m(writable,)f(the)f(history)g(is)g(not)h(sa)m(v)m(ed.)49
+b(After)34 b(sa)m(ving)g(the)f(history)-8 b(,)34 b(the)g(history)f
+(\014le)g(is)g(truncated)150 2860 y(to)g(con)m(tain)h(no)f(more)g(than)
+f Ft($HISTFILESIZE)d Fu(lines.)48 b(If)33 b Ft(HISTFILESIZE)c
+Fu(is)k(unset,)g(or)f(set)i(to)f(n)m(ull,)h(a)150 2970
+y(non-n)m(umeric)c(v)-5 b(alue,)31 b(or)f(a)h(n)m(umeric)f(v)-5
+b(alue)31 b(less)g(than)f(zero,)h(the)g(history)f(\014le)h(is)f(not)h
+(truncated.)275 3112 y(If)g(the)h Ft(HISTTIMEFORMAT)d
+Fu(is)j(set,)h(the)f(time)h(stamp)f(information)g(asso)s(ciated)i(with)
+e(eac)m(h)h(history)150 3221 y(en)m(try)d(is)h(written)f(to)h(the)f
+(history)h(\014le,)f(mark)m(ed)h(with)f(the)g(history)g(commen)m(t)h(c)
+m(haracter.)43 b(When)30 b(the)150 3331 y(history)22
+b(\014le)h(is)g(read,)h(lines)f(b)s(eginning)e(with)i(the)f(history)h
+(commen)m(t)g(c)m(haracter)h(follo)m(w)m(ed)h(immediately)150
+3440 y(b)m(y)30 b(a)h(digit)g(are)g(in)m(terpreted)g(as)f(timestamps)h
+(for)f(the)h(follo)m(wing)h(history)e(en)m(try)-8 b(.)275
+3582 y(The)19 b(builtin)h(command)g Ft(fc)g Fu(ma)m(y)h(b)s(e)f(used)f
+(to)i(list)g(or)g(edit)g(and)e(re-execute)j(a)f(p)s(ortion)f(of)g(the)h
+(history)150 3692 y(list.)41 b(The)27 b Ft(history)f
+Fu(builtin)i(ma)m(y)h(b)s(e)e(used)g(to)i(displa)m(y)g(or)f(mo)s(dify)f
+(the)h(history)g(list)h(and)f(manipulate)150 3801 y(the)j(history)g
+(\014le.)42 b(When)31 b(using)f(command-line)h(editing,)h(searc)m(h)f
+(commands)g(are)g(a)m(v)-5 b(ailable)33 b(in)e(eac)m(h)150
+3911 y(editing)45 b(mo)s(de)g(that)g(pro)m(vide)g(access)h(to)f(the)g
+(history)f(list)i(\(see)f(Section)h(8.4.2)g([Commands)e(F)-8
+b(or)150 4020 y(History],)31 b(page)h(123\).)275 4162
+y(The)47 b(shell)i(allo)m(ws)h(con)m(trol)f(o)m(v)m(er)h(whic)m(h)e
+(commands)g(are)h(sa)m(v)m(ed)g(on)f(the)h(history)f(list.)95
+b(The)150 4272 y Ft(HISTCONTROL)25 b Fu(and)j Ft(HISTIGNORE)e
+Fu(v)-5 b(ariables)29 b(ma)m(y)h(b)s(e)d(set)j(to)f(cause)g(the)g
+(shell)f(to)i(sa)m(v)m(e)g(only)f(a)g(subset)150 4381
+y(of)e(the)g(commands)f(en)m(tered.)40 b(The)26 b Ft(cmdhist)f
+Fu(shell)i(option,)h(if)f(enabled,)g(causes)h(the)e(shell)h(to)h
+(attempt)150 4491 y(to)23 b(sa)m(v)m(e)h(eac)m(h)f(line)g(of)f(a)h(m)m
+(ulti-line)g(command)f(in)g(the)h(same)f(history)g(en)m(try)-8
+b(,)25 b(adding)d(semicolons)h(where)150 4600 y(necessary)37
+b(to)f(preserv)m(e)h(syn)m(tactic)h(correctness.)58 b(The)36
+b Ft(lithist)e Fu(shell)i(option)h(causes)g(the)f(shell)g(to)150
+4710 y(sa)m(v)m(e)41 b(the)e(command)g(with)f(em)m(b)s(edded)g
+(newlines)h(instead)g(of)g(semicolons.)68 b(The)39 b
+Ft(shopt)e Fu(builtin)i(is)150 4820 y(used)30 b(to)i(set)g(these)g
+(options.)43 b(See)32 b(Section)g(4.3.2)h([The)e(Shopt)f(Builtin],)j
+(page)f(65,)g(for)f(a)h(description)150 4929 y(of)f Ft(shopt)p
+Fu(.)150 5181 y Fs(9.2)68 b(Bash)45 b(History)h(Builtins)150
+5340 y Fu(Bash)31 b(pro)m(vides)f(t)m(w)m(o)i(builtin)e(commands)g
+(whic)m(h)g(manipulate)g(the)h(history)f(list)h(and)f(history)g
+(\014le.)p eop end
+%%Page: 142 148
+TeXDict begin 142 147 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(142)150
+299 y Ft(fc)870 425 y(fc)47 b([-e)g Fj(ename)p Ft(])f([-lnr])g([)p
+Fj(first)p Ft(])g([)p Fj(last)p Ft(])870 535 y(fc)h(-s)g([)p
+Fj(pat)p Ft(=)p Fj(rep)p Ft(])f([)p Fj(command)p Ft(])630
+661 y Fu(The)22 b(\014rst)g(form)f(selects)j(a)f(range)g(of)f(commands)
+g(from)g Fr(\014rst)i Fu(to)f Fr(last)i Fu(from)d(the)h(history)f(list)
+630 771 y(and)i(displa)m(ys)h(or)g(edits)h(and)e(re-executes)j(them.)39
+b(Both)25 b Fr(\014rst)h Fu(and)f Fr(last)j Fu(ma)m(y)d(b)s(e)g(sp)s
+(eci\014ed)630 881 y(as)31 b(a)g(string)f(\(to)i(lo)s(cate)h(the)d
+(most)h(recen)m(t)h(command)f(b)s(eginning)e(with)i(that)g(string\))g
+(or)630 990 y(as)d(a)g(n)m(um)m(b)s(er)f(\(an)h(index)f(in)m(to)i(the)f
+(history)g(list,)h(where)e(a)h(negativ)m(e)i(n)m(um)m(b)s(er)d(is)h
+(used)f(as)630 1100 y(an)f(o\013set)g(from)g(the)g(curren)m(t)f
+(command)h(n)m(um)m(b)s(er\).)38 b(If)25 b Fr(last)k
+Fu(is)d(not)g(sp)s(eci\014ed,)g(it)g(is)g(set)g(to)630
+1209 y Fr(\014rst)p Fu(.)43 b(If)30 b Fr(\014rst)j Fu(is)e(not)h(sp)s
+(eci\014ed,)f(it)g(is)h(set)f(to)h(the)g(previous)f(command)g(for)g
+(editing)h(and)630 1319 y Fq(\000)p Fu(16)37 b(for)g(listing.)61
+b(If)36 b(the)h Ft(-l)f Fu(\015ag)i(is)e(giv)m(en,)k(the)d(commands)f
+(are)i(listed)f(on)g(standard)630 1428 y(output.)59 b(The)36
+b Ft(-n)h Fu(\015ag)g(suppresses)e(the)h(command)h(n)m(um)m(b)s(ers)e
+(when)h(listing.)60 b(The)37 b Ft(-r)630 1538 y Fu(\015ag)e(rev)m
+(erses)f(the)h(order)e(of)i(the)f(listing.)53 b(Otherwise,)35
+b(the)f(editor)h(giv)m(en)g(b)m(y)f Fr(ename)40 b Fu(is)630
+1648 y(in)m(v)m(ok)m(ed)33 b(on)f(a)g(\014le)g(con)m(taining)h(those)f
+(commands.)44 b(If)31 b Fr(ename)38 b Fu(is)31 b(not)h(giv)m(en,)i(the)
+d(v)-5 b(alue)630 1757 y(of)29 b(the)g(follo)m(wing)i(v)-5
+b(ariable)29 b(expansion)g(is)g(used:)39 b Ft(${FCEDIT:-${EDITOR:-vi}})
+p Fu(.)34 b(This)630 1867 y(sa)m(ys)g(to)g(use)f(the)h(v)-5
+b(alue)34 b(of)f(the)h Ft(FCEDIT)e Fu(v)-5 b(ariable)34
+b(if)f(set,)i(or)f(the)f(v)-5 b(alue)34 b(of)g(the)g
+Ft(EDITOR)630 1976 y Fu(v)-5 b(ariable)40 b(if)e(that)i(is)f(set,)i(or)
+e Ft(vi)f Fu(if)h(neither)g(is)g(set.)66 b(When)39 b(editing)g(is)g
+(complete,)k(the)630 2086 y(edited)31 b(commands)f(are)g(ec)m(ho)s(ed)h
+(and)f(executed.)630 2212 y(In)k(the)g(second)g(form,)h
+Fr(command)j Fu(is)c(re-executed)i(after)f(eac)m(h)g(instance)g(of)f
+Fr(pat)j Fu(in)d(the)630 2322 y(selected)e(command)e(is)h(replaced)g(b)
+m(y)f Fr(rep)p Fu(.)41 b Fr(command)34 b Fu(is)c(in)m(tepreted)h(the)g
+(same)g(as)g Fr(\014rst)630 2432 y Fu(ab)s(o)m(v)m(e.)630
+2558 y(A)g(useful)f(alias)i(to)g(use)e(with)h(the)g Ft(fc)f
+Fu(command)h(is)g Ft(r='fc)e(-s')p Fu(,)h(so)h(that)h(t)m(yping)f(`)p
+Ft(r)f(cc)p Fu(')630 2668 y(runs)35 b(the)h(last)h(command)f(b)s
+(eginning)g(with)g Ft(cc)f Fu(and)h(t)m(yping)g(`)p Ft(r)p
+Fu(')h(re-executes)h(the)e(last)630 2777 y(command)30
+b(\(see)h(Section)h(6.6)f([Aliases],)h(page)g(93\).)150
+2921 y Ft(history)870 3047 y(history)46 b([)p Fj(n)p
+Ft(])870 3157 y(history)g(-c)870 3266 y(history)g(-d)h
+Fj(offset)870 3376 y Ft(history)f(-d)h Fj(start)p Ft(-)p
+Fj(end)870 3485 y Ft(history)f([-anrw])g([)p Fj(filename)p
+Ft(])870 3595 y(history)g(-ps)h Fj(arg)630 3721 y Fu(With)26
+b(no)g(options,)h(displa)m(y)f(the)g(history)g(list)g(with)f(line)h(n)m
+(um)m(b)s(ers.)38 b(Lines)26 b(pre\014xed)e(with)630
+3831 y(a)35 b(`)p Ft(*)p Fu(')g(ha)m(v)m(e)h(b)s(een)e(mo)s(di\014ed.)
+53 b(An)34 b(argumen)m(t)h(of)g Fr(n)f Fu(lists)i(only)f(the)g(last)g
+Fr(n)f Fu(lines.)54 b(If)35 b(the)630 3941 y(shell)30
+b(v)-5 b(ariable)31 b Ft(HISTTIMEFORMAT)26 b Fu(is)k(set)h(and)e(not)i
+(n)m(ull,)f(it)h(is)f(used)f(as)h(a)h(format)f(string)630
+4050 y(for)36 b Fr(strftime)41 b Fu(to)36 b(displa)m(y)g(the)g(time)h
+(stamp)f(asso)s(ciated)h(with)f(eac)m(h)h(displa)m(y)m(ed)f(history)630
+4160 y(en)m(try)-8 b(.)47 b(No)33 b(in)m(terv)m(ening)g(blank)f(is)g
+(prin)m(ted)g(b)s(et)m(w)m(een)h(the)g(formatted)f(time)h(stamp)g(and)
+630 4269 y(the)e(history)f(line.)630 4396 y(Options,)g(if)h(supplied,)e
+(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)630 4539
+y Ft(-c)384 b Fu(Clear)23 b(the)g(history)g(list.)39
+b(This)22 b(ma)m(y)i(b)s(e)e(com)m(bined)h(with)f(the)h(other)h
+(options)1110 4649 y(to)31 b(replace)g(the)g(history)f(list)h
+(completely)-8 b(.)630 4792 y Ft(-d)30 b Fj(offset)66
+b Fu(Delete)38 b(the)f(history)f(en)m(try)h(at)f(p)s(osition)h
+Fr(o\013set)p Fu(.)59 b(If)36 b Fr(o\013set)j Fu(is)d(p)s(ositiv)m(e,)j
+(it)1110 4902 y(should)32 b(b)s(e)h(sp)s(eci\014ed)f(as)i(it)g(app)s
+(ears)e(when)g(the)i(history)f(is)g(displa)m(y)m(ed.)50
+b(If)1110 5011 y Fr(o\013set)26 b Fu(is)d(negativ)m(e,)k(it)c(is)g(in)m
+(terpreted)h(as)f(relativ)m(e)i(to)f(one)f(greater)h(than)f(the)1110
+5121 y(last)36 b(history)f(p)s(osition,)h(so)f(negativ)m(e)i(indices)e
+(coun)m(t)h(bac)m(k)f(from)g(the)g(end)1110 5230 y(of)h(the)g(history)
+-8 b(,)37 b(and)e(an)h(index)f(of)h(`)p Ft(-1)p Fu(')f(refers)g(to)i
+(the)f(curren)m(t)f Ft(history)1110 5340 y(-d)30 b Fu(command.)p
+eop end
+%%Page: 143 149
+TeXDict begin 143 148 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(143)630
+299 y Ft(-d)30 b Fj(start)p Ft(-)p Fj(end)1110 408 y
+Fu(Delete)23 b(the)d(history)h(en)m(tries)g(b)s(et)m(w)m(een)g(p)s
+(ositions)g Fr(start)i Fu(and)d Fr(end)p Fu(,)i(inclusiv)m(e.)1110
+518 y(P)m(ositiv)m(e)41 b(and)c(negativ)m(e)k(v)-5 b(alues)38
+b(for)h Fr(start)h Fu(and)e Fr(end)j Fu(are)e(in)m(terpreted)g(as)1110
+628 y(describ)s(ed)29 b(ab)s(o)m(v)m(e.)630 789 y Ft(-a)384
+b Fu(App)s(end)28 b(the)i(new)f(history)g(lines)h(to)h(the)e(history)h
+(\014le.)41 b(These)29 b(are)h(history)1110 899 y(lines)36
+b(en)m(tered)g(since)f(the)h(b)s(eginning)f(of)g(the)h(curren)m(t)f
+(Bash)h(session,)h(but)1110 1008 y(not)31 b(already)g(app)s(ended)d(to)
+j(the)g(history)f(\014le.)630 1170 y Ft(-n)384 b Fu(App)s(end)32
+b(the)i(history)f(lines)h(not)g(already)g(read)g(from)f(the)h(history)f
+(\014le)h(to)1110 1280 y(the)26 b(curren)m(t)f(history)g(list.)40
+b(These)25 b(are)h(lines)g(app)s(ended)e(to)i(the)f(history)h(\014le)
+1110 1389 y(since)31 b(the)f(b)s(eginning)g(of)g(the)h(curren)m(t)f
+(Bash)h(session.)630 1551 y Ft(-r)384 b Fu(Read)31 b(the)f(history)g
+(\014le)h(and)f(app)s(end)e(its)j(con)m(ten)m(ts)h(to)f(the)g(history)f
+(list.)630 1713 y Ft(-w)384 b Fu(W)-8 b(rite)32 b(out)e(the)h(curren)m
+(t)f(history)g(list)h(to)h(the)e(history)g(\014le.)630
+1874 y Ft(-p)384 b Fu(P)m(erform)31 b(history)f(substitution)h(on)f
+(the)h Fr(arg)8 b Fu(s)31 b(and)f(displa)m(y)h(the)f(result)h(on)1110
+1984 y(the)d(standard)f(output,)i(without)f(storing)g(the)g(results)g
+(in)g(the)g(history)g(list.)630 2146 y Ft(-s)384 b Fu(The)30
+b Fr(arg)8 b Fu(s)30 b(are)h(added)f(to)h(the)f(end)g(of)h(the)f
+(history)h(list)g(as)f(a)h(single)g(en)m(try)-8 b(.)630
+2307 y(When)26 b(an)m(y)h(of)f(the)g Ft(-w)p Fu(,)h Ft(-r)p
+Fu(,)g Ft(-a)p Fu(,)g(or)f Ft(-n)f Fu(options)i(is)f(used,)h(if)f
+Fr(\014lename)32 b Fu(is)26 b(giv)m(en,)i(then)e(it)h(is)630
+2417 y(used)h(as)g(the)h(history)f(\014le.)40 b(If)28
+b(not,)i(then)e(the)g(v)-5 b(alue)29 b(of)g(the)g Ft(HISTFILE)d
+Fu(v)-5 b(ariable)29 b(is)f(used.)150 2661 y Fs(9.3)68
+b(History)46 b(Expansion)150 2820 y Fu(The)f(History)h(library)e(pro)m
+(vides)i(a)f(history)g(expansion)g(feature)h(that)g(is)f(similar)h(to)g
+(the)f(history)150 2930 y(expansion)g(pro)m(vided)f(b)m(y)h
+Ft(csh)p Fu(.)83 b(This)44 b(section)i(describ)s(es)e(the)h(syn)m(tax)h
+(used)e(to)i(manipulate)f(the)150 3040 y(history)30 b(information.)275
+3176 y(History)h(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g(the)h
+(history)f(list)h(in)m(to)g(the)g(input)f(stream,)h(making)150
+3286 y(it)g(easy)g(to)g(rep)s(eat)g(commands,)f(insert)g(the)h(argumen)
+m(ts)f(to)h(a)g(previous)f(command)g(in)m(to)i(the)e(curren)m(t)150
+3395 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g
+(quic)m(kly)-8 b(.)275 3532 y(History)24 b(expansion)f(is)h(p)s
+(erformed)e(immediately)j(after)f(a)g(complete)h(line)f(is)g(read,)h(b)
+s(efore)e(the)h(shell)150 3642 y(breaks)32 b(it)i(in)m(to)f(w)m(ords,)g
+(and)f(is)h(p)s(erformed)e(on)h(eac)m(h)i(line)f(individually)-8
+b(.)48 b(Bash)33 b(attempts)g(to)h(inform)150 3751 y(the)d(history)f
+(expansion)g(functions)g(ab)s(out)g(quoting)h(still)g(in)f(e\013ect)i
+(from)e(previous)g(lines.)275 3888 y(History)37 b(expansion)f(tak)m(es)
+i(place)g(in)e(t)m(w)m(o)i(parts.)59 b(The)36 b(\014rst)g(is)h(to)g
+(determine)g(whic)m(h)f(line)h(from)150 3998 y(the)42
+b(history)f(list)h(should)e(b)s(e)h(used)f(during)g(substitution.)74
+b(The)40 b(second)i(is)f(to)h(select)h(p)s(ortions)e(of)150
+4107 y(that)31 b(line)g(for)f(inclusion)h(in)m(to)g(the)g(curren)m(t)f
+(one.)42 b(The)30 b(line)h(selected)h(from)e(the)h(history)f(is)h
+(called)h(the)150 4217 y Fr(ev)m(en)m(t)p Fu(,)e(and)c(the)i(p)s
+(ortions)e(of)i(that)f(line)h(that)g(are)f(acted)i(up)s(on)c(are)j
+(called)g Fr(w)m(ords)p Fu(.)39 b(V)-8 b(arious)28 b
+Fr(mo)s(di\014ers)150 4327 y Fu(are)33 b(a)m(v)-5 b(ailable)36
+b(to)d(manipulate)h(the)f(selected)h(w)m(ords.)48 b(The)32
+b(line)i(is)f(brok)m(en)f(in)m(to)i(w)m(ords)f(in)f(the)i(same)150
+4436 y(fashion)23 b(that)g(Bash)g(do)s(es,)h(so)f(that)h(sev)m(eral)g
+(w)m(ords)e(surrounded)e(b)m(y)j(quotes)g(are)g(considered)g(one)g(w)m
+(ord.)150 4546 y(History)37 b(expansions)g(are)g(in)m(tro)s(duced)f(b)m
+(y)h(the)g(app)s(earance)g(of)g(the)g(history)f(expansion)h(c)m
+(haracter,)150 4655 y(whic)m(h)30 b(is)h(`)p Ft(!)p Fu(')f(b)m(y)g
+(default.)275 4792 y(History)c(expansion)g(implemen)m(ts)h(shell-lik)m
+(e)h(quoting)f(con)m(v)m(en)m(tions:)40 b(a)27 b(bac)m(kslash)g(can)f
+(b)s(e)g(used)f(to)150 4902 y(remo)m(v)m(e)h(the)e(sp)s(ecial)g
+(handling)g(for)g(the)g(next)g(c)m(haracter;)k(single)d(quotes)g
+(enclose)g(v)m(erbatim)g(sequences)150 5011 y(of)k(c)m(haracters,)i
+(and)e(can)g(b)s(e)g(used)f(to)i(inhibit)f(history)g(expansion;)g(and)g
+(c)m(haracters)i(enclosed)e(within)150 5121 y(double)h(quotes)i(ma)m(y)
+f(b)s(e)f(sub)5 b(ject)31 b(to)h(history)f(expansion,)g(since)g(bac)m
+(kslash)g(can)h(escap)s(e)f(the)g(history)150 5230 y(expansion)e(c)m
+(haracter,)j(but)d(single)h(quotes)g(ma)m(y)h(not,)f(since)g(they)g
+(are)g(not)f(treated)i(sp)s(ecially)f(within)150 5340
+y(double)g(quotes.)p eop end
+%%Page: 144 150
+TeXDict begin 144 149 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(144)275
+299 y(When)41 b(using)g(the)h(shell,)i(only)e(`)p Ft(\\)p
+Fu(')g(and)e(`)p Ft(')p Fu(')i(ma)m(y)g(b)s(e)f(used)g(to)h(escap)s(e)g
+(the)g(history)f(expansion)150 408 y(c)m(haracter,)e(but)34
+b(the)i(history)g(expansion)f(c)m(haracter)i(is)f(also)g(treated)h(as)e
+(quoted)h(if)g(it)g(immediately)150 518 y(precedes)30
+b(the)h(closing)g(double)f(quote)h(in)f(a)h(double-quoted)g(string.)275
+658 y(Sev)m(eral)48 b(shell)g(options)h(settable)g(with)e(the)h
+Ft(shopt)f Fu(builtin)g(\(see)i(Section)f(4.3.2)i([The)e(Shopt)150
+767 y(Builtin],)24 b(page)e(65\))h(ma)m(y)e(b)s(e)g(used)g(to)h(tailor)
+g(the)g(b)s(eha)m(vior)f(of)h(history)f(expansion.)37
+b(If)21 b(the)h Ft(histverify)150 877 y Fu(shell)35 b(option)f(is)h
+(enabled,)g(and)f(Readline)h(is)f(b)s(eing)g(used,)h(history)g
+(substitutions)e(are)i(not)g(immedi-)150 987 y(ately)i(passed)d(to)i
+(the)g(shell)f(parser.)55 b(Instead,)37 b(the)e(expanded)g(line)g(is)h
+(reloaded)g(in)m(to)g(the)f(Readline)150 1096 y(editing)29
+b(bu\013er)f(for)h(further)e(mo)s(di\014cation.)41 b(If)28
+b(Readline)h(is)g(b)s(eing)f(used,)h(and)f(the)h Ft(histreedit)d
+Fu(shell)150 1206 y(option)e(is)g(enabled,)h(a)g(failed)f(history)g
+(expansion)g(will)g(b)s(e)f(reloaded)h(in)m(to)h(the)f(Readline)g
+(editing)h(bu\013er)150 1315 y(for)31 b(correction.)43
+b(The)30 b Ft(-p)g Fu(option)h(to)h(the)f Ft(history)e
+Fu(builtin)h(command)h(ma)m(y)g(b)s(e)f(used)g(to)i(see)f(what)g(a)150
+1425 y(history)25 b(expansion)g(will)g(do)g(b)s(efore)g(using)f(it.)40
+b(The)24 b Ft(-s)h Fu(option)g(to)h(the)f Ft(history)e
+Fu(builtin)i(ma)m(y)g(b)s(e)g(used)150 1534 y(to)36 b(add)f(commands)g
+(to)h(the)g(end)f(of)g(the)h(history)f(list)i(without)e(actually)i
+(executing)g(them,)g(so)e(that)150 1644 y(they)c(are)f(a)m(v)-5
+b(ailable)33 b(for)d(subsequen)m(t)g(recall.)42 b(This)29
+b(is)i(most)g(useful)e(in)h(conjunction)h(with)f(Readline.)275
+1784 y(The)j(shell)h(allo)m(ws)h(con)m(trol)h(of)e(the)g(v)-5
+b(arious)34 b(c)m(haracters)h(used)f(b)m(y)f(the)h(history)g(expansion)
+g(mec)m(h-)150 1893 y(anism)h(with)g(the)g Ft(histchars)d
+Fu(v)-5 b(ariable,)38 b(as)d(explained)g(ab)s(o)m(v)m(e)i(\(see)f
+(Section)f(5.2)i([Bash)e(V)-8 b(ariables],)150 2003 y(page)32
+b(73\).)44 b(The)31 b(shell)g(uses)g(the)g(history)g(commen)m(t)i(c)m
+(haracter)f(to)g(mark)f(history)g(timestamps)h(when)150
+2112 y(writing)e(the)h(history)f(\014le.)150 2317 y Fk(9.3.1)63
+b(Ev)m(en)m(t)39 b(Designators)150 2464 y Fu(An)32 b(ev)m(en)m(t)j
+(designator)e(is)g(a)g(reference)g(to)h(a)f(command)f(line)h(en)m(try)g
+(in)g(the)g(history)g(list.)48 b(Unless)33 b(the)150
+2573 y(reference)e(is)f(absolute,)i(ev)m(en)m(ts)f(are)g(relativ)m(e)i
+(to)e(the)f(curren)m(t)g(p)s(osition)h(in)f(the)h(history)f(list.)150
+2741 y Ft(!)432 b Fu(Start)34 b(a)f(history)h(substitution,)g(except)g
+(when)f(follo)m(w)m(ed)i(b)m(y)e(a)h(space,)h(tab,)f(the)g(end)f(of)630
+2850 y(the)i(line,)g(`)p Ft(=)p Fu(')g(or)f(`)p Ft(\()p
+Fu(')h(\(when)e(the)i Ft(extglob)d Fu(shell)j(option)f(is)h(enabled)f
+(using)g(the)g Ft(shopt)630 2960 y Fu(builtin\).)150
+3124 y Ft(!)p Fj(n)384 b Fu(Refer)30 b(to)i(command)e(line)g
+Fr(n)p Fu(.)150 3289 y Ft(!-)p Fj(n)336 b Fu(Refer)30
+b(to)i(the)e(command)g Fr(n)g Fu(lines)h(bac)m(k.)150
+3454 y Ft(!!)384 b Fu(Refer)30 b(to)i(the)e(previous)g(command.)40
+b(This)30 b(is)g(a)h(synon)m(ym)f(for)g(`)p Ft(!-1)p
+Fu('.)150 3618 y Ft(!)p Fj(string)144 b Fu(Refer)25 b(to)h(the)f(most)h
+(recen)m(t)g(command)f(preceding)g(the)g(curren)m(t)g(p)s(osition)g(in)
+g(the)g(history)630 3728 y(list)31 b(starting)g(with)f
+Fr(string)p Fu(.)150 3892 y Ft(!?)p Fj(string)p Ft([?])630
+4002 y Fu(Refer)25 b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)
+g(the)g(curren)m(t)g(p)s(osition)g(in)g(the)g(history)630
+4111 y(list)32 b(con)m(taining)i Fr(string)p Fu(.)45
+b(The)31 b(trailing)i(`)p Ft(?)p Fu(')f(ma)m(y)g(b)s(e)f(omitted)i(if)f
+(the)g Fr(string)39 b Fu(is)32 b(follo)m(w)m(ed)630 4221
+y(immediately)g(b)m(y)e(a)h(newline.)150 4386 y Ft(^)p
+Fj(string1)p Ft(^)p Fj(string2)p Ft(^)630 4495 y Fu(Quic)m(k)h
+(Substitution.)44 b(Rep)s(eat)32 b(the)g(last)h(command,)f(replacing)g
+Fr(string1)40 b Fu(with)31 b Fr(string2)p Fu(.)630 4605
+y(Equiv)-5 b(alen)m(t)31 b(to)g Ft(!!:s/)p Fj(string1)p
+Ft(/)p Fj(string2)p Ft(/)p Fu(.)150 4769 y Ft(!#)384
+b Fu(The)30 b(en)m(tire)h(command)f(line)h(t)m(yp)s(ed)f(so)h(far.)150
+4974 y Fk(9.3.2)63 b(W)-10 b(ord)41 b(Designators)150
+5121 y Fu(W)-8 b(ord)27 b(designators)h(are)g(used)e(to)i(select)h
+(desired)d(w)m(ords)h(from)f(the)i(ev)m(en)m(t.)41 b(A)27
+b(`)p Ft(:)p Fu(')g(separates)h(the)f(ev)m(en)m(t)150
+5230 y(sp)s(eci\014cation)38 b(from)e(the)h(w)m(ord)f(designator.)61
+b(It)37 b(ma)m(y)h(b)s(e)e(omitted)i(if)e(the)h(w)m(ord)g(designator)g
+(b)s(egins)150 5340 y(with)30 b(a)g(`)p Ft(^)p Fu(',)g(`)p
+Ft($)p Fu(',)g(`)p Ft(*)p Fu(',)h(`)p Ft(-)p Fu(',)f(or)g(`)p
+Ft(\045)p Fu('.)41 b(W)-8 b(ords)30 b(are)g(n)m(um)m(b)s(ered)e(from)i
+(the)g(b)s(eginning)f(of)h(the)g(line,)g(with)g(the)p
+eop end
+%%Page: 145 151
+TeXDict begin 145 150 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(145)150
+299 y(\014rst)29 b(w)m(ord)f(b)s(eing)h(denoted)h(b)m(y)f(0)h
+(\(zero\).)41 b(W)-8 b(ords)30 b(are)g(inserted)f(in)m(to)h(the)g
+(curren)m(t)f(line)g(separated)h(b)m(y)150 408 y(single)h(spaces.)275
+552 y(F)-8 b(or)31 b(example,)150 725 y Ft(!!)384 b Fu(designates)37
+b(the)f(preceding)g(command.)57 b(When)35 b(y)m(ou)i(t)m(yp)s(e)f
+(this,)h(the)f(preceding)g(com-)630 834 y(mand)30 b(is)g(rep)s(eated)g
+(in)g(toto.)150 1002 y Ft(!!:$)288 b Fu(designates)23
+b(the)g(last)g(argumen)m(t)g(of)f(the)h(preceding)f(command.)38
+b(This)22 b(ma)m(y)h(b)s(e)e(shortened)630 1112 y(to)31
+b Ft(!$)p Fu(.)150 1280 y Ft(!fi:2)240 b Fu(designates)30
+b(the)g(second)f(argumen)m(t)h(of)f(the)h(most)f(recen)m(t)i(command)e
+(starting)h(with)f(the)630 1390 y(letters)j Ft(fi)p Fu(.)275
+1563 y(Here)e(are)h(the)g(w)m(ord)f(designators:)150
+1735 y Ft(0)g(\(zero\))114 b Fu(The)30 b Ft(0)p Fu(th)g(w)m(ord.)40
+b(F)-8 b(or)31 b(man)m(y)g(applications,)h(this)e(is)g(the)h(command)f
+(w)m(ord.)150 1904 y Fj(n)432 b Fu(The)30 b Fr(n)p Fu(th)g(w)m(ord.)150
+2072 y Ft(^)432 b Fu(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m
+(ord)g(1.)150 2240 y Ft($)432 b Fu(The)30 b(last)h(argumen)m(t.)150
+2409 y Ft(\045)432 b Fu(The)30 b(w)m(ord)g(matc)m(hed)h(b)m(y)f(the)h
+(most)g(recen)m(t)g(`)p Ft(?)p Fj(string)p Ft(?)p Fu(')e(searc)m(h.)150
+2577 y Fj(x)p Ft(-)p Fj(y)336 b Fu(A)30 b(range)h(of)g(w)m(ords;)f(`)p
+Ft(-)p Fj(y)p Fu(')g(abbreviates)h(`)p Ft(0-)p Fj(y)p
+Fu('.)150 2745 y Ft(*)432 b Fu(All)28 b(of)g(the)g(w)m(ords,)g(except)h
+(the)e Ft(0)p Fu(th.)40 b(This)27 b(is)g(a)h(synon)m(ym)f(for)h(`)p
+Ft(1-$)p Fu('.)39 b(It)28 b(is)g(not)g(an)f(error)630
+2855 y(to)j(use)g(`)p Ft(*)p Fu(')f(if)h(there)g(is)g(just)f(one)h(w)m
+(ord)f(in)g(the)h(ev)m(en)m(t;)i(the)d(empt)m(y)i(string)e(is)h
+(returned)e(in)630 2964 y(that)j(case.)150 3133 y Fj(x)p
+Ft(*)384 b Fu(Abbreviates)31 b(`)p Fj(x)p Ft(-$)p Fu(')150
+3301 y Fj(x)p Ft(-)384 b Fu(Abbreviates)31 b(`)p Fj(x)p
+Ft(-$)p Fu(')f(lik)m(e)h(`)p Fj(x)p Ft(*)p Fu(',)g(but)f(omits)h(the)f
+(last)h(w)m(ord.)275 3474 y(If)i(a)h(w)m(ord)g(designator)g(is)g
+(supplied)f(without)h(an)g(ev)m(en)m(t)h(sp)s(eci\014cation,)h(the)e
+(previous)f(command)150 3583 y(is)d(used)g(as)h(the)f(ev)m(en)m(t.)150
+3791 y Fk(9.3.3)63 b(Mo)s(di\014ers)150 3938 y Fu(After)29
+b(the)g(optional)g(w)m(ord)g(designator,)g(y)m(ou)g(can)g(add)f(a)h
+(sequence)g(of)g(one)g(or)f(more)h(of)g(the)f(follo)m(wing)150
+4048 y(mo)s(di\014ers,)h(eac)m(h)j(preceded)e(b)m(y)g(a)h(`)p
+Ft(:)p Fu('.)150 4221 y Ft(h)432 b Fu(Remo)m(v)m(e)32
+b(a)f(trailing)g(pathname)g(comp)s(onen)m(t,)g(lea)m(ving)h(only)e(the)
+h(head.)150 4389 y Ft(t)432 b Fu(Remo)m(v)m(e)32 b(all)f(leading)h
+(pathname)e(comp)s(onen)m(ts,)h(lea)m(ving)h(the)e(tail.)150
+4557 y Ft(r)432 b Fu(Remo)m(v)m(e)32 b(a)f(trailing)g(su\016x)f(of)g
+(the)h(form)f(`)p Ft(.)p Fj(suffix)p Fu(',)f(lea)m(ving)j(the)f
+(basename.)150 4726 y Ft(e)432 b Fu(Remo)m(v)m(e)32 b(all)f(but)f(the)h
+(trailing)g(su\016x.)150 4894 y Ft(p)432 b Fu(Prin)m(t)30
+b(the)h(new)f(command)g(but)g(do)g(not)g(execute)i(it.)150
+5062 y Ft(q)432 b Fu(Quote)31 b(the)f(substituted)g(w)m(ords,)g
+(escaping)h(further)e(substitutions.)150 5230 y Ft(x)432
+b Fu(Quote)32 b(the)f(substituted)g(w)m(ords)f(as)i(with)f(`)p
+Ft(q)p Fu(',)h(but)e(break)h(in)m(to)i(w)m(ords)d(at)i(spaces,)h(tabs,)
+630 5340 y(and)d(newlines.)p eop end
+%%Page: 146 152
+TeXDict begin 146 151 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(146)150
+299 y Ft(s/)p Fj(old)p Ft(/)p Fj(new)p Ft(/)630 408 y
+Fu(Substitute)32 b Fr(new)40 b Fu(for)32 b(the)h(\014rst)f(o)s
+(ccurrence)h(of)f Fr(old)37 b Fu(in)32 b(the)h(ev)m(en)m(t)h(line.)48
+b(An)m(y)32 b(delimiter)630 518 y(ma)m(y)25 b(b)s(e)g(used)f(in)g
+(place)i(of)f(`)p Ft(/)p Fu('.)39 b(The)24 b(delimiter)h(ma)m(y)h(b)s
+(e)e(quoted)h(in)f Fr(old)29 b Fu(and)24 b Fr(new)32
+b Fu(with)25 b(a)630 628 y(single)k(bac)m(kslash.)40
+b(If)28 b(`)p Ft(&)p Fu(')g(app)s(ears)g(in)f Fr(new)p
+Fu(,)i(it)f(is)h(replaced)f(b)m(y)g Fr(old)p Fu(.)40
+b(A)28 b(single)h(bac)m(kslash)630 737 y(will)35 b(quote)g(the)g(`)p
+Ft(&)p Fu('.)54 b(The)34 b(\014nal)g(delimiter)i(is)e(optional)i(if)f
+(it)g(is)f(the)h(last)h(c)m(haracter)g(on)630 847 y(the)31
+b(input)e(line.)150 1006 y Ft(&)432 b Fu(Rep)s(eat)31
+b(the)f(previous)g(substitution.)150 1166 y Ft(g)150
+1275 y(a)432 b Fu(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f(applied)h(o)m(v)
+m(er)h(the)f(en)m(tire)g(ev)m(en)m(t)h(line.)66 b(Used)39
+b(in)f(conjunction)630 1385 y(with)30 b(`)p Ft(s)p Fu(',)h(as)f(in)h
+Ft(gs/)p Fj(old)p Ft(/)p Fj(new)p Ft(/)p Fu(,)c(or)j(with)h(`)p
+Ft(&)p Fu('.)150 1544 y Ft(G)432 b Fu(Apply)30 b(the)g(follo)m(wing)i
+(`)p Ft(s)p Fu(')f(mo)s(di\014er)e(once)i(to)g(eac)m(h)h(w)m(ord)e(in)g
+(the)g(ev)m(en)m(t.)p eop end
+%%Page: 147 153
+TeXDict begin 147 152 bop 3614 -116 a Fu(147)150 299
+y Fp(10)80 b(Installing)52 b(Bash)150 534 y Fu(This)31
+b(c)m(hapter)h(pro)m(vides)g(basic)g(instructions)f(for)g(installing)i
+(Bash)f(on)f(the)h(v)-5 b(arious)31 b(supp)s(orted)f(plat-)150
+643 y(forms.)40 b(The)28 b(distribution)h(supp)s(orts)e(the)j
+Fm(gnu)f Fu(op)s(erating)h(systems,)f(nearly)h(ev)m(ery)g(v)m(ersion)f
+(of)h(Unix,)150 753 y(and)d(sev)m(eral)j(non-Unix)d(systems)h(suc)m(h)g
+(as)g(BeOS)g(and)f(In)m(terix.)40 b(Other)28 b(indep)s(enden)m(t)e(p)s
+(orts)h(exist)i(for)150 862 y Fm(ms-dos)p Fu(,)h Fm(os/2)p
+Fu(,)g(and)g(Windo)m(ws)g(platforms.)150 1103 y Fs(10.1)68
+b(Basic)45 b(Installation)150 1263 y Fu(These)30 b(are)h(installation)h
+(instructions)e(for)h(Bash.)275 1398 y(The)e(simplest)i(w)m(a)m(y)g(to)
+g(compile)h(Bash)e(is:)199 1532 y(1.)61 b Ft(cd)38 b
+Fu(to)h(the)f(directory)h(con)m(taining)h(the)f(source)f(co)s(de)h(and)
+f(t)m(yp)s(e)g(`)p Ft(./configure)p Fu(')e(to)j(con\014gure)330
+1642 y(Bash)c(for)f(y)m(our)h(system.)54 b(If)34 b(y)m(ou're)h(using)f
+Ft(csh)g Fu(on)g(an)h(old)g(v)m(ersion)g(of)g(System)f(V,)h(y)m(ou)g
+(migh)m(t)330 1751 y(need)21 b(to)g(t)m(yp)s(e)g(`)p
+Ft(sh)30 b(./configure)p Fu(')18 b(instead)j(to)g(prev)m(en)m(t)h
+Ft(csh)e Fu(from)g(trying)h(to)g(execute)h Ft(configure)330
+1861 y Fu(itself.)330 1996 y(Running)30 b Ft(configure)f
+Fu(tak)m(es)k(some)e(time.)45 b(While)32 b(running,)e(it)i(prin)m(ts)f
+(messages)h(telling)h(whic)m(h)330 2105 y(features)e(it)g(is)f(c)m(hec)
+m(king)i(for.)199 2240 y(2.)61 b(T)m(yp)s(e)30 b(`)p
+Ft(make)p Fu(')g(to)h(compile)g(Bash)g(and)e(build)h(the)g
+Ft(bashbug)f Fu(bug)g(rep)s(orting)h(script.)199 2374
+y(3.)61 b(Optionally)-8 b(,)32 b(t)m(yp)s(e)e(`)p Ft(make)g(tests)p
+Fu(')f(to)i(run)e(the)h(Bash)h(test)g(suite.)199 2509
+y(4.)61 b(T)m(yp)s(e)36 b(`)p Ft(make)29 b(install)p
+Fu(')35 b(to)i(install)h Ft(bash)d Fu(and)h Ft(bashbug)p
+Fu(.)57 b(This)35 b(will)i(also)h(install)f(the)g(man)m(ual)330
+2619 y(pages)31 b(and)f(Info)g(\014le.)275 2778 y(The)20
+b Ft(configure)f Fu(shell)i(script)g(attempts)h(to)g(guess)f(correct)i
+(v)-5 b(alues)21 b(for)g(v)-5 b(arious)21 b(system-dep)s(enden)m(t)150
+2888 y(v)-5 b(ariables)31 b(used)e(during)g(compilation.)42
+b(It)31 b(uses)e(those)i(v)-5 b(alues)30 b(to)h(create)h(a)e
+Ft(Makefile)e Fu(in)i(eac)m(h)i(direc-)150 2998 y(tory)k(of)g(the)g
+(pac)m(k)-5 b(age)38 b(\(the)e(top)g(directory)-8 b(,)38
+b(the)e Ft(builtins)p Fu(,)f Ft(doc)p Fu(,)i(and)e Ft(support)e
+Fu(directories,)39 b(eac)m(h)150 3107 y(directory)29
+b(under)d Ft(lib)p Fu(,)j(and)e(sev)m(eral)j(others\).)40
+b(It)29 b(also)g(creates)h(a)e Ft(config.h)e Fu(\014le)j(con)m(taining)
+g(system-)150 3217 y(dep)s(enden)m(t)e(de\014nitions.)40
+b(Finally)-8 b(,)31 b(it)d(creates)i(a)f(shell)g(script)f(named)g
+Ft(config.status)d Fu(that)k(y)m(ou)g(can)150 3326 y(run)h(in)h(the)h
+(future)f(to)h(recreate)h(the)f(curren)m(t)f(con\014guration,)i(a)f
+(\014le)f Ft(config.cache)e Fu(that)j(sa)m(v)m(es)h(the)150
+3436 y(results)39 b(of)g(its)h(tests)g(to)g(sp)s(eed)e(up)g
+(recon\014guring,)j(and)e(a)g(\014le)g Ft(config.log)e
+Fu(con)m(taining)j(compiler)150 3545 y(output)30 b(\(useful)h(mainly)g
+(for)f(debugging)h Ft(configure)p Fu(\).)40 b(If)30 b(at)h(some)h(p)s
+(oin)m(t)e Ft(config.cache)e Fu(con)m(tains)150 3655
+y(results)i(y)m(ou)h(don't)f(w)m(an)m(t)h(to)h(k)m(eep,)f(y)m(ou)g(ma)m
+(y)g(remo)m(v)m(e)g(or)g(edit)g(it.)275 3790 y(T)-8 b(o)37
+b(\014nd)f(out)i(more)f(ab)s(out)h(the)f(options)h(and)f(argumen)m(ts)g
+(that)h(the)g Ft(configure)d Fu(script)i(under-)150 3899
+y(stands,)30 b(t)m(yp)s(e)390 4034 y Ft(bash-4.2$)45
+b(./configure)g(--help)150 4169 y Fu(at)31 b(the)g(Bash)f(prompt)g(in)g
+(y)m(our)g(Bash)h(source)f(directory)-8 b(.)275 4303
+y(If)34 b(y)m(ou)h(w)m(an)m(t)g(to)g(build)f(Bash)g(in)h(a)g(directory)
+g(separate)g(from)f(the)h(source)g(directory)g({)g(to)g(build)150
+4413 y(for)30 b(m)m(ultiple)i(arc)m(hitectures,)g(for)e(example)h({)g
+(just)f(use)h(the)f(full)h(path)f(to)h(the)g(con\014gure)f(script.)41
+b(The)150 4523 y(follo)m(wing)24 b(commands)f(will)g(build)f(bash)g(in)
+g(a)h(directory)h(under)d Ft(/usr/local/build)d Fu(from)23
+b(the)g(source)150 4632 y(co)s(de)31 b(in)f Ft(/usr/local/src/bash-4.4)
+o Fu(:)390 4767 y Ft(mkdir)46 b(/usr/local/build/bash-4.4)390
+4877 y(cd)h(/usr/local/build/bash-4.4)390 4986 y(bash)g
+(/usr/local/src/bash-4.4)o(/con)o(fig)o(ure)390 5096
+y(make)275 5230 y Fu(See)27 b(Section)h(10.3)g([Compiling)g(F)-8
+b(or)27 b(Multiple)h(Arc)m(hitectures],)i(page)d(148,)j(for)c(more)i
+(information)150 5340 y(ab)s(out)i(building)g(in)g(a)g(directory)h
+(separate)h(from)e(the)g(source.)p eop end
+%%Page: 148 154
+TeXDict begin 148 153 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(148)275 299 y(If)53 b(y)m(ou)h(need)f(to)
+i(do)e(un)m(usual)g(things)g(to)i(compile)g(Bash,)k(please)c(try)e(to)i
+(\014gure)e(out)h(ho)m(w)150 408 y Ft(configure)47 b
+Fu(could)j(c)m(hec)m(k)h(whether)e(or)g(not)h(to)h(do)e(them,)55
+b(and)49 b(mail)h(di\013s)f(or)h(instructions)f(to)150
+518 y Ft(bash-maintainers@gnu.org)24 b Fu(so)30 b(they)h(can)g(b)s(e)e
+(considered)i(for)f(the)g(next)h(release.)275 658 y(The)e(\014le)g
+Ft(configure.ac)d Fu(is)k(used)e(to)j(create)g Ft(configure)c
+Fu(b)m(y)i(a)h(program)f(called)i(Auto)s(conf.)40 b(Y)-8
+b(ou)150 768 y(only)34 b(need)g Ft(configure.ac)d Fu(if)i(y)m(ou)i(w)m
+(an)m(t)g(to)f(c)m(hange)i(it)e(or)g(regenerate)i Ft(configure)31
+b Fu(using)j(a)g(new)m(er)150 878 y(v)m(ersion)25 b(of)f(Auto)s(conf.)
+39 b(If)24 b(y)m(ou)h(do)f(this,)i(mak)m(e)f(sure)f(y)m(ou)h(are)f
+(using)g(Auto)s(conf)h(v)m(ersion)f(2.50)i(or)f(new)m(er.)275
+1018 y(Y)-8 b(ou)29 b(can)f(remo)m(v)m(e)i(the)f(program)g(binaries)f
+(and)g(ob)5 b(ject)29 b(\014les)g(from)f(the)h(source)f(co)s(de)h
+(directory)g(b)m(y)150 1127 y(t)m(yping)j(`)p Ft(make)d(clean)p
+Fu('.)42 b(T)-8 b(o)32 b(also)g(remo)m(v)m(e)g(the)g(\014les)f(that)g
+Ft(configure)e Fu(created)j(\(so)g(y)m(ou)g(can)f(compile)150
+1237 y(Bash)g(for)f(a)g(di\013eren)m(t)h(kind)f(of)g(computer\),)h(t)m
+(yp)s(e)g(`)p Ft(make)e(distclean)p Fu('.)150 1487 y
+Fs(10.2)68 b(Compilers)46 b(and)f(Options)150 1646 y
+Fu(Some)28 b(systems)h(require)f(un)m(usual)f(options)i(for)f
+(compilation)i(or)f(linking)f(that)h(the)g Ft(configure)d
+Fu(script)150 1756 y(do)s(es)32 b(not)g(kno)m(w)g(ab)s(out.)44
+b(Y)-8 b(ou)33 b(can)f(giv)m(e)h Ft(configure)d Fu(initial)j(v)-5
+b(alues)32 b(for)g(v)-5 b(ariables)32 b(b)m(y)g(setting)h(them)150
+1865 y(in)k(the)g(en)m(vironmen)m(t.)62 b(Using)38 b(a)f
+(Bourne-compatible)i(shell,)g(y)m(ou)f(can)g(do)f(that)h(on)f(the)g
+(command)150 1975 y(line)31 b(lik)m(e)g(this:)390 2115
+y Ft(CC=c89)46 b(CFLAGS=-O2)f(LIBS=-lposix)g(./configure)275
+2255 y Fu(On)29 b(systems)h(that)h(ha)m(v)m(e)h(the)f
+Ft(env)e Fu(program,)h(y)m(ou)h(can)g(do)f(it)h(lik)m(e)h(this:)390
+2396 y Ft(env)47 b(CPPFLAGS=-I/usr/local/in)o(clud)o(e)42
+b(LDFLAGS=-s)j(./configure)275 2536 y Fu(The)29 b(con\014guration)i
+(pro)s(cess)f(uses)g(GCC)g(to)h(build)e(Bash)i(if)f(it)h(is)g(a)m(v)-5
+b(ailable.)150 2786 y Fs(10.3)68 b(Compiling)46 b(F)-11
+b(or)45 b(Multiple)g(Arc)l(hitectures)150 2945 y Fu(Y)-8
+b(ou)27 b(can)g(compile)g(Bash)g(for)f(more)h(than)f(one)h(kind)f(of)g
+(computer)h(at)g(the)g(same)g(time,)h(b)m(y)e(placing)i(the)150
+3055 y(ob)5 b(ject)31 b(\014les)f(for)g(eac)m(h)i(arc)m(hitecture)f(in)
+f(their)g(o)m(wn)h(directory)-8 b(.)41 b(T)-8 b(o)31
+b(do)f(this,)g(y)m(ou)h(m)m(ust)f(use)g(a)g(v)m(ersion)150
+3164 y(of)36 b Ft(make)e Fu(that)i(supp)s(orts)e(the)i
+Ft(VPATH)e Fu(v)-5 b(ariable,)38 b(suc)m(h)d(as)h(GNU)g
+Ft(make)p Fu(.)55 b Ft(cd)35 b Fu(to)i(the)e(directory)h(where)150
+3274 y(y)m(ou)k(w)m(an)m(t)h(the)g(ob)5 b(ject)41 b(\014les)f(and)f
+(executables)j(to)e(go)h(and)f(run)e(the)j Ft(configure)c
+Fu(script)j(from)g(the)150 3383 y(source)32 b(directory)h(\(see)g
+(Section)f(10.1)i([Basic)f(Installation],)i(page)e(147\).)47
+b(Y)-8 b(ou)32 b(ma)m(y)h(need)f(to)g(supply)150 3493
+y(the)43 b Ft(--srcdir=PATH)c Fu(argumen)m(t)k(to)h(tell)g
+Ft(configure)c Fu(where)i(the)h(source)g(\014les)g(are.)78
+b Ft(configure)150 3603 y Fu(automatically)33 b(c)m(hec)m(ks)f(for)e
+(the)h(source)f(co)s(de)h(in)f(the)h(directory)f(that)h
+Ft(configure)d Fu(is)j(in)f(and)f(in)h(`..'.)275 3743
+y(If)20 b(y)m(ou)h(ha)m(v)m(e)i(to)e(use)g(a)g Ft(make)f
+Fu(that)i(do)s(es)e(not)i(supp)s(orts)d(the)i Ft(VPATH)e
+Fu(v)-5 b(ariable,)24 b(y)m(ou)e(can)f(compile)h(Bash)150
+3853 y(for)33 b(one)h(arc)m(hitecture)h(at)f(a)g(time)g(in)f(the)h
+(source)g(co)s(de)f(directory)-8 b(.)51 b(After)34 b(y)m(ou)g(ha)m(v)m
+(e)h(installed)f(Bash)150 3962 y(for)c(one)h(arc)m(hitecture,)h(use)e
+(`)p Ft(make)g(distclean)p Fu(')e(b)s(efore)i(recon\014guring)g(for)g
+(another)g(arc)m(hitecture.)275 4102 y(Alternativ)m(ely)-8
+b(,)30 b(if)c(y)m(our)g(system)h(supp)s(orts)d(sym)m(b)s(olic)j(links,)
+g(y)m(ou)g(can)g(use)f(the)g Ft(support/mkclone)150 4212
+y Fu(script)d(to)h(create)g(a)f(build)f(tree)i(whic)m(h)f(has)f(sym)m
+(b)s(olic)i(links)e(bac)m(k)i(to)g(eac)m(h)g(\014le)f(in)g(the)g
+(source)g(directory)-8 b(.)150 4322 y(Here's)41 b(an)f(example)i(that)f
+(creates)h(a)e(build)g(directory)h(in)f(the)h(curren)m(t)f(directory)h
+(from)f(a)h(source)150 4431 y(directory)31 b Ft(/usr/gnu/src/bash-2.0)p
+Fu(:)390 4572 y Ft(bash)47 b(/usr/gnu/src/bash-2.0/s)o(uppo)o(rt/)o
+(mkcl)o(one)41 b(-s)47 b(/usr/gnu/src/bash-2.0)42 b(.)150
+4712 y Fu(The)c Ft(mkclone)e Fu(script)i(requires)g(Bash,)i(so)f(y)m
+(ou)f(m)m(ust)h(ha)m(v)m(e)g(already)g(built)f(Bash)g(for)g(at)h(least)
+h(one)150 4821 y(arc)m(hitecture)32 b(b)s(efore)e(y)m(ou)h(can)f
+(create)i(build)e(directories)h(for)f(other)h(arc)m(hitectures.)150
+5071 y Fs(10.4)68 b(Installation)47 b(Names)150 5230
+y Fu(By)37 b(default,)i(`)p Ft(make)29 b(install)p Fu(')35
+b(will)j(install)f(in)m(to)h Ft(/usr/local/bin)p Fu(,)d
+Ft(/usr/local/man)p Fu(,)f(etc.)61 b(Y)-8 b(ou)150 5340
+y(can)35 b(sp)s(ecify)f(an)h(installation)i(pre\014x)c(other)j(than)e
+Ft(/usr/local)e Fu(b)m(y)j(giving)g Ft(configure)e Fu(the)h(option)p
+eop end
+%%Page: 149 155
+TeXDict begin 149 154 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(149)150 299 y Ft(--prefix=)p
+Fj(PATH)p Fu(,)41 b(or)g(b)m(y)g(sp)s(ecifying)h(a)f(v)-5
+b(alue)42 b(for)f(the)h Ft(DESTDIR)d Fu(`)p Ft(make)p
+Fu(')i(v)-5 b(ariable)42 b(when)f(running)150 408 y(`)p
+Ft(make)29 b(install)p Fu('.)275 566 y(Y)-8 b(ou)71 b(can)h(sp)s(ecify)
+f(separate)h(installation)h(pre\014xes)d(for)h(arc)m(hitecture-sp)s
+(eci\014c)i(\014les)f(and)150 676 y(arc)m(hitecture-indep)s(enden)m(t)
+44 b(\014les.)80 b(If)43 b(y)m(ou)h(giv)m(e)h Ft(configure)c
+Fu(the)j(option)g Ft(--exec-prefix=)p Fj(PATH)p Fu(,)150
+785 y(`)p Ft(make)29 b(install)p Fu(')63 b(will)h(use)f
+Fr(P)-8 b(A)g(TH)75 b Fu(as)64 b(the)g(pre\014x)e(for)i(installing)h
+(programs)e(and)h(libraries.)150 895 y(Do)s(cumen)m(tation)32
+b(and)e(other)h(data)g(\014les)f(will)h(still)g(use)f(the)h(regular)f
+(pre\014x.)150 1171 y Fs(10.5)68 b(Sp)t(ecifying)45 b(the)g(System)h(T)
+l(yp)t(e)150 1330 y Fu(There)f(ma)m(y)g(b)s(e)f(some)i(features)f
+Ft(configure)e Fu(can)i(not)g(\014gure)g(out)g(automatically)-8
+b(,)52 b(but)44 b(need)h(to)150 1440 y(determine)26 b(b)m(y)g(the)g(t)m
+(yp)s(e)g(of)g(host)g(Bash)g(will)g(run)f(on.)39 b(Usually)26
+b Ft(configure)d Fu(can)k(\014gure)e(that)h(out,)i(but)150
+1549 y(if)g(it)g(prin)m(ts)f(a)h(message)g(sa)m(ying)h(it)f(can)g(not)f
+(guess)h(the)g(host)f(t)m(yp)s(e,)i(giv)m(e)g(it)f(the)g
+Ft(--host=TYPE)c Fu(option.)150 1659 y(`)p Ft(TYPE)p
+Fu(')29 b(can)h(either)g(b)s(e)g(a)g(short)f(name)h(for)f(the)h(system)
+g(t)m(yp)s(e,)h(suc)m(h)e(as)h(`)p Ft(sun4)p Fu(',)g(or)f(a)h
+(canonical)i(name)150 1768 y(with)e(three)h(\014elds:)40
+b(`)p Ft(CPU-COMPANY-SYSTEM)p Fu(')26 b(\(e.g.,)32 b(`)p
+Ft(i386-unknown-freebsd4.2)p Fu('\).)275 1926 y(See)e(the)h(\014le)f
+Ft(support/config.sub)c Fu(for)k(the)g(p)s(ossible)g(v)-5
+b(alues)31 b(of)f(eac)m(h)i(\014eld.)150 2202 y Fs(10.6)68
+b(Sharing)45 b(Defaults)150 2361 y Fu(If)d(y)m(ou)i(w)m(an)m(t)g(to)f
+(set)h(default)f(v)-5 b(alues)43 b(for)g Ft(configure)d
+Fu(scripts)j(to)h(share,)i(y)m(ou)d(can)g(create)i(a)e(site)150
+2471 y(shell)48 b(script)f(called)i Ft(config.site)44
+b Fu(that)k(giv)m(es)h(default)f(v)-5 b(alues)48 b(for)f(v)-5
+b(ariables)48 b(lik)m(e)h Ft(CC)p Fu(,)j Ft(cache_)150
+2580 y(file)p Fu(,)c(and)d Ft(prefix)p Fu(.)85 b Ft(configure)43
+b Fu(lo)s(oks)j(for)f Ft(PREFIX/share/config.site)39
+b Fu(if)46 b(it)g(exists,)k(then)150 2690 y Ft(PREFIX/etc/config.site)
+24 b Fu(if)31 b(it)g(exists.)42 b(Or,)30 b(y)m(ou)h(can)g(set)g(the)g
+Ft(CONFIG_SITE)c Fu(en)m(vironmen)m(t)k(v)-5 b(ari-)150
+2800 y(able)40 b(to)g(the)g(lo)s(cation)h(of)e(the)h(site)g(script.)67
+b(A)40 b(w)m(arning:)58 b(the)40 b(Bash)g Ft(configure)c
+Fu(lo)s(oks)k(for)f(a)h(site)150 2909 y(script,)31 b(but)e(not)i(all)g
+Ft(configure)d Fu(scripts)i(do.)150 3185 y Fs(10.7)68
+b(Op)t(eration)46 b(Con)l(trols)150 3344 y Ft(configure)28
+b Fu(recognizes)k(the)e(follo)m(wing)i(options)f(to)g(con)m(trol)h(ho)m
+(w)e(it)h(op)s(erates.)150 3538 y Ft(--cache-file=)p
+Fj(file)630 3648 y Fu(Use)d(and)g(sa)m(v)m(e)h(the)f(results)g(of)g
+(the)h(tests)f(in)g Fr(\014le)33 b Fu(instead)28 b(of)h
+Ft(./config.cache)p Fu(.)36 b(Set)28 b Fr(\014le)630
+3758 y Fu(to)j Ft(/dev/null)d Fu(to)j(disable)g(cac)m(hing,)h(for)e
+(debugging)g Ft(configure)p Fu(.)150 3940 y Ft(--help)192
+b Fu(Prin)m(t)30 b(a)h(summary)e(of)i(the)f(options)h(to)g
+Ft(configure)p Fu(,)d(and)i(exit.)150 4123 y Ft(--quiet)150
+4232 y(--silent)150 4342 y(-q)384 b Fu(Do)31 b(not)g(prin)m(t)f
+(messages)h(sa)m(ying)g(whic)m(h)g(c)m(hec)m(ks)g(are)g(b)s(eing)f
+(made.)150 4525 y Ft(--srcdir=)p Fj(dir)630 4634 y Fu(Lo)s(ok)i(for)g
+(the)g(Bash)g(source)h(co)s(de)f(in)g(directory)g Fr(dir)p
+Fu(.)45 b(Usually)33 b Ft(configure)c Fu(can)j(deter-)630
+4744 y(mine)e(that)h(directory)g(automatically)-8 b(.)150
+4927 y Ft(--version)630 5036 y Fu(Prin)m(t)29 b(the)h(v)m(ersion)g(of)g
+(Auto)s(conf)f(used)g(to)h(generate)h(the)f Ft(configure)d
+Fu(script,)j(and)f(exit.)275 5230 y Ft(configure)34 b
+Fu(also)k(accepts)g(some)g(other,)h(not)e(widely)g(used,)h(b)s
+(oilerplate)g(options.)61 b(`)p Ft(configure)150 5340
+y(--help)p Fu(')29 b(prin)m(ts)h(the)g(complete)i(list.)p
+eop end
+%%Page: 150 156
+TeXDict begin 150 155 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(150)150 299 y Fs(10.8)68
+b(Optional)46 b(F)-11 b(eatures)150 458 y Fu(The)29 b(Bash)h
+Ft(configure)d Fu(has)j(a)g(n)m(um)m(b)s(er)f(of)h Ft(--enable-)p
+Fj(feature)25 b Fu(options,)30 b(where)g Fr(feature)35
+b Fu(indicates)150 568 y(an)e(optional)i(part)e(of)h(Bash.)50
+b(There)33 b(are)g(also)i(sev)m(eral)g Ft(--with-)p Fj(package)29
+b Fu(options,)35 b(where)e Fr(pac)m(k)-5 b(age)150 677
+y Fu(is)32 b(something)h(lik)m(e)h(`)p Ft(bash-malloc)p
+Fu(')c(or)i(`)p Ft(purify)p Fu('.)45 b(T)-8 b(o)33 b(turn)e(o\013)i
+(the)f(default)h(use)f(of)g(a)h(pac)m(k)-5 b(age,)35
+b(use)150 787 y Ft(--without-)p Fj(package)p Fu(.)46
+b(T)-8 b(o)34 b(con\014gure)g(Bash)g(without)f(a)i(feature)f(that)g(is)
+g(enabled)g(b)m(y)f(default,)i(use)150 897 y Ft(--disable-)p
+Fj(feature)p Fu(.)275 1033 y(Here)28 b(is)g(a)h(complete)g(list)g(of)f
+(the)h Ft(--enable-)c Fu(and)j Ft(--with-)e Fu(options)i(that)h(the)f
+(Bash)g Ft(configure)150 1143 y Fu(recognizes.)150 1306
+y Ft(--with-afs)630 1415 y Fu(De\014ne)j(if)f(y)m(ou)h(are)f(using)g
+(the)h(Andrew)e(File)j(System)e(from)g(T)-8 b(ransarc.)150
+1577 y Ft(--with-bash-malloc)630 1686 y Fu(Use)34 b(the)g(Bash)h(v)m
+(ersion)f(of)g Ft(malloc)e Fu(in)i(the)g(directory)h
+Ft(lib/malloc)p Fu(.)48 b(This)34 b(is)g(not)g(the)630
+1796 y(same)e Ft(malloc)e Fu(that)j(app)s(ears)e(in)g
+Fm(gnu)h Fu(lib)s(c,)g(but)f(an)h(older)f(v)m(ersion)i(originally)g
+(deriv)m(ed)630 1905 y(from)f(the)h(4.2)g Fm(bsd)f Ft(malloc)p
+Fu(.)45 b(This)31 b Ft(malloc)g Fu(is)i(v)m(ery)f(fast,)i(but)e(w)m
+(astes)h(some)g(space)g(on)630 2015 y(eac)m(h)j(allo)s(cation.)58
+b(This)34 b(option)i(is)f(enabled)g(b)m(y)g(default.)56
+b(The)34 b Ft(NOTES)g Fu(\014le)h(con)m(tains)i(a)630
+2125 y(list)29 b(of)f(systems)f(for)h(whic)m(h)g(this)g(should)e(b)s(e)
+i(turned)e(o\013,)j(and)f Ft(configure)d Fu(disables)j(this)630
+2234 y(option)j(automatically)i(for)d(a)h(n)m(um)m(b)s(er)e(of)i
+(systems.)150 2396 y Ft(--with-curses)630 2505 y Fu(Use)h(the)h(curses)
+e(library)h(instead)g(of)h(the)f(termcap)g(library)-8
+b(.)46 b(This)32 b(should)f(b)s(e)g(supplied)630 2615
+y(if)f(y)m(our)h(system)f(has)g(an)h(inadequate)g(or)f(incomplete)i
+(termcap)e(database.)150 2777 y Ft(--with-gnu-malloc)630
+2886 y Fu(A)g(synon)m(ym)g(for)g Ft(--with-bash-malloc)p
+Fu(.)150 3048 y Ft(--with-installed-readlin)o(e[=)p Fj(P)o(REFI)o(X)p
+Ft(])630 3157 y Fu(De\014ne)c(this)f(to)h(mak)m(e)h(Bash)f(link)f(with)
+g(a)h(lo)s(cally-installed)i(v)m(ersion)e(of)g(Readline)g(rather)630
+3267 y(than)f(the)h(v)m(ersion)g(in)f Ft(lib/readline)p
+Fu(.)36 b(This)25 b(w)m(orks)g(only)h(with)f(Readline)h(5.0)h(and)e
+(later)630 3376 y(v)m(ersions.)46 b(If)32 b Fr(PREFIX)41
+b Fu(is)32 b Ft(yes)f Fu(or)i(not)f(supplied,)f Ft(configure)f
+Fu(uses)i(the)g(v)-5 b(alues)32 b(of)h(the)630 3486 y(mak)m(e)28
+b(v)-5 b(ariables)29 b Ft(includedir)24 b Fu(and)j Ft(libdir)p
+Fu(,)g(whic)m(h)g(are)h(sub)s(directories)f(of)g Ft(prefix)f
+Fu(b)m(y)630 3596 y(default,)44 b(to)d(\014nd)f(the)h(installed)g(v)m
+(ersion)h(of)f(Readline)g(if)g(it)g(is)g(not)g(in)g(the)g(standard)630
+3705 y(system)35 b(include)f(and)g(library)g(directories.)54
+b(If)34 b Fr(PREFIX)43 b Fu(is)35 b Ft(no)p Fu(,)g(Bash)f(links)h(with)
+f(the)630 3815 y(v)m(ersion)42 b(in)e Ft(lib/readline)p
+Fu(.)70 b(If)40 b Fr(PREFIX)51 b Fu(is)41 b(set)g(to)h(an)m(y)g(other)f
+(v)-5 b(alue,)44 b Ft(configure)630 3924 y Fu(treats)27
+b(it)g(as)f(a)h(directory)g(pathname)f(and)f(lo)s(oks)i(for)f(the)g
+(installed)h(v)m(ersion)g(of)f(Readline)630 4034 y(in)34
+b(sub)s(directories)f(of)h(that)h(directory)g(\(include)f(\014les)g(in)
+g Fr(PREFIX)9 b Fu(/)p Ft(include)32 b Fu(and)i(the)630
+4144 y(library)c(in)g Fr(PREFIX)9 b Fu(/)p Ft(lib)p Fu(\).)150
+4305 y Ft(--with-purify)630 4415 y Fu(De\014ne)23 b(this)g(to)h(use)f
+(the)g(Purify)f(memory)h(allo)s(cation)i(c)m(hec)m(k)m(er)g(from)e
+(Rational)i(Soft)m(w)m(are.)150 4576 y Ft(--enable-minimal-config)630
+4686 y Fu(This)e(pro)s(duces)f(a)i(shell)g(with)f(minimal)h(features,)h
+(close)g(to)f(the)g(historical)h(Bourne)e(shell.)275
+4849 y(There)k(are)i(sev)m(eral)g Ft(--enable-)d Fu(options)i(that)h
+(alter)g(ho)m(w)f(Bash)g(is)g(compiled)h(and)e(link)m(ed,)i(rather)150
+4958 y(than)h(c)m(hanging)h(run-time)f(features.)150
+5121 y Ft(--enable-largefile)630 5230 y Fu(Enable)36
+b(supp)s(ort)f(for)g(large)j(\014les)e(\()p Ft(http:)5
+b(/)g(/)g(www)g(.)g(unix)g(.)g(org)t(/)g(v)o(ersi)o(on2)t(/)g(w)o(hats)
+o(new)t(/)630 5340 y(lfs20mar)h(.)g(html)p Fu(\))35 b(if)j(the)g(op)s
+(erating)g(system)g(requires)f(sp)s(ecial)i(compiler)f(options)g(to)p
+eop end
+%%Page: 151 157
+TeXDict begin 151 156 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(151)630 299 y(build)33
+b(programs)g(whic)m(h)h(can)g(access)h(large)g(\014les.)51
+b(This)33 b(is)h(enabled)g(b)m(y)g(default,)h(if)f(the)630
+408 y(op)s(erating)d(system)f(pro)m(vides)h(large)g(\014le)g(supp)s
+(ort.)150 570 y Ft(--enable-profiling)630 680 y Fu(This)g(builds)f(a)i
+(Bash)g(binary)f(that)h(pro)s(duces)e(pro\014ling)h(information)h(to)h
+(b)s(e)d(pro)s(cessed)630 790 y(b)m(y)g Ft(gprof)f Fu(eac)m(h)j(time)f
+(it)g(is)f(executed.)150 951 y Ft(--enable-static-link)630
+1061 y Fu(This)37 b(causes)h(Bash)f(to)h(b)s(e)f(link)m(ed)h
+(statically)-8 b(,)43 b(if)37 b Ft(gcc)g Fu(is)g(b)s(eing)g(used.)61
+b(This)37 b(could)h(b)s(e)630 1171 y(used)30 b(to)h(build)e(a)i(v)m
+(ersion)g(to)g(use)f(as)g(ro)s(ot's)h(shell.)275 1334
+y(The)f(`)p Ft(minimal-config)p Fu(')d(option)k(can)g(b)s(e)f(used)f
+(to)j(disable)e(all)i(of)f(the)f(follo)m(wing)i(options,)g(but)d(it)150
+1443 y(is)h(pro)s(cessed)g(\014rst,)g(so)h(individual)f(options)g(ma)m
+(y)h(b)s(e)f(enabled)g(using)g(`)p Ft(enable-)p Fj(feature)p
+Fu('.)275 1580 y(All)c(of)f(the)h(follo)m(wing)h(options)f(except)g
+(for)g(`)p Ft(disabled-builtins)p Fu(',)c(`)p Ft(direxpand-default)p
+Fu(',)h(and)150 1690 y(`)p Ft(xpg-echo-default)p Fu(')28
+b(are)33 b(enabled)f(b)m(y)g(default,)h(unless)e(the)i(op)s(erating)f
+(system)h(do)s(es)e(not)i(pro)m(vide)150 1800 y(the)e(necessary)f(supp)
+s(ort.)150 1963 y Ft(--enable-alias)630 2072 y Fu(Allo)m(w)41
+b(alias)g(expansion)f(and)f(include)g(the)h Ft(alias)f
+Fu(and)g Ft(unalias)e Fu(builtins)j(\(see)g(Sec-)630
+2182 y(tion)31 b(6.6)g([Aliases],)i(page)e(93\).)150
+2344 y Ft(--enable-arith-for-comma)o(nd)630 2453 y Fu(Include)21
+b(supp)s(ort)g(for)g(the)i(alternate)g(form)f(of)g(the)g
+Ft(for)f Fu(command)h(that)h(b)s(eha)m(v)m(es)f(lik)m(e)i(the)630
+2563 y(C)30 b(language)i Ft(for)d Fu(statemen)m(t)j(\(see)g(Section)f
+(3.2.4.1)i([Lo)s(oping)d(Constructs],)h(page)g(10\).)150
+2725 y Ft(--enable-array-variables)630 2834 y Fu(Include)h(supp)s(ort)g
+(for)h(one-dimensional)h(arra)m(y)f(shell)h(v)-5 b(ariables)33
+b(\(see)h(Section)g(6.7)h([Ar-)630 2944 y(ra)m(ys],)c(page)g(94\).)150
+3106 y Ft(--enable-bang-history)630 3215 y Fu(Include)36
+b(supp)s(ort)f(for)h Ft(csh)p Fu(-lik)m(e)h(history)g(substitution)f
+(\(see)h(Section)g(9.3)h([History)f(In-)630 3325 y(teraction],)c(page)e
+(143\).)150 3487 y Ft(--enable-brace-expansion)630 3597
+y Fu(Include)40 b Ft(csh)p Fu(-lik)m(e)h(brace)f(expansion)g(\()h
+Ft(b{a,b}c)d Fq(7!)i Ft(bac)30 b(bbc)39 b Fu(\).)71 b(See)40
+b(Section)h(3.5.1)630 3706 y([Brace)32 b(Expansion],)e(page)h(23,)h
+(for)e(a)g(complete)i(description.)150 3868 y Ft
+(--enable-casemod-attribu)o(tes)630 3978 y Fu(Include)37
+b(supp)s(ort)g(for)g(case-mo)s(difying)i(attributes)g(in)e(the)h
+Ft(declare)e Fu(builtin)i(and)f(as-)630 4087 y(signmen)m(t)29
+b(statemen)m(ts.)41 b(V)-8 b(ariables)30 b(with)e(the)g
+Fr(upp)s(ercase)k Fu(attribute,)e(for)e(example,)i(will)630
+4197 y(ha)m(v)m(e)i(their)e(v)-5 b(alues)31 b(con)m(v)m(erted)h(to)f
+(upp)s(ercase)e(up)s(on)g(assignmen)m(t.)150 4359 y Ft
+(--enable-casemod-expansi)o(on)630 4468 y Fu(Include)h(supp)s(ort)e
+(for)i(case-mo)s(difying)i(w)m(ord)e(expansions.)150
+4630 y Ft(--enable-command-timing)630 4740 y Fu(Include)43
+b(supp)s(ort)f(for)h(recognizing)i Ft(time)e Fu(as)g(a)h(reserv)m(ed)g
+(w)m(ord)f(and)g(for)h(displa)m(ying)630 4849 y(timing)37
+b(statistics)h(for)e(the)g(pip)s(eline)g(follo)m(wing)i
+Ft(time)d Fu(\(see)i(Section)g(3.2.2)h([Pip)s(elines],)630
+4959 y(page)24 b(8\).)39 b(This)23 b(allo)m(ws)h(pip)s(elines)f(as)h(w)
+m(ell)g(as)g(shell)f(builtins)g(and)g(functions)g(to)h(b)s(e)e(timed.)
+150 5121 y Ft(--enable-cond-command)630 5230 y Fu(Include)33
+b(supp)s(ort)f(for)i(the)g Ft([[)f Fu(conditional)i(command.)51
+b(\(see)34 b(Section)h(3.2.4.2)h([Condi-)630 5340 y(tional)c
+(Constructs],)e(page)h(11\).)p eop end
+%%Page: 152 158
+TeXDict begin 152 157 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(152)150 299 y Ft(--enable-cond-regexp)630
+408 y Fu(Include)35 b(supp)s(ort)f(for)i(matc)m(hing)h
+Fm(posix)e Fu(regular)h(expressions)g(using)f(the)h(`)p
+Ft(=~)p Fu(')g(binary)630 518 y(op)s(erator)25 b(in)f(the)h
+Ft([[)f Fu(conditional)h(command.)39 b(\(see)25 b(Section)h(3.2.4.2)h
+([Conditional)e(Con-)630 628 y(structs],)31 b(page)g(11\).)150
+774 y Ft(--enable-coprocesses)630 883 y Fu(Include)23
+b(supp)s(ort)f(for)i(copro)s(cesses)g(and)f(the)h Ft(coproc)e
+Fu(reserv)m(ed)i(w)m(ord)g(\(see)h(Section)f(3.2.2)630
+993 y([Pip)s(elines],)31 b(page)g(8\).)150 1139 y Ft(--enable-debugger)
+630 1249 y Fu(Include)f(supp)s(ort)e(for)i(the)h(bash)f(debugger)g
+(\(distributed)g(separately\).)150 1395 y Ft(--enable-dev-fd-stat-bro)o
+(ken)630 1504 y Fu(If)c(calling)j Ft(stat)d Fu(on)g(/dev/fd/)p
+Fr(N)38 b Fu(returns)25 b(di\013eren)m(t)j(results)f(than)f(calling)j
+Ft(fstat)c Fu(on)i(\014le)630 1614 y(descriptor)g Fr(N)p
+Fu(,)i(supply)c(this)j(option)g(to)g(enable)f(a)h(w)m(ork)-5
+b(around.)39 b(This)27 b(has)g(implications)630 1724
+y(for)j(conditional)i(commands)e(that)h(test)g(\014le)g(attributes.)150
+1870 y Ft(--enable-direxpand-defau)o(lt)630 1979 y Fu(Cause)53
+b(the)g Ft(direxpand)d Fu(shell)j(option)h(\(see)g(Section)f(4.3.2)i
+([The)e(Shopt)f(Builtin],)630 2089 y(page)29 b(65\))g(to)f(b)s(e)f
+(enabled)h(b)m(y)g(default)g(when)e(the)i(shell)g(starts.)41
+b(It)27 b(is)h(normally)g(disabled)630 2198 y(b)m(y)i(default.)150
+2345 y Ft(--enable-directory-stack)630 2454 y Fu(Include)j(supp)s(ort)g
+(for)h(a)g Ft(csh)p Fu(-lik)m(e)h(directory)f(stac)m(k)i(and)d(the)i
+Ft(pushd)p Fu(,)f Ft(popd)p Fu(,)g(and)f Ft(dirs)630
+2564 y Fu(builtins)d(\(see)h(Section)g(6.8)h([The)e(Directory)i(Stac)m
+(k],)g(page)f(96\).)150 2710 y Ft(--enable-disabled-builti)o(ns)630
+2819 y Fu(Allo)m(w)40 b(builtin)e(commands)g(to)h(b)s(e)f(in)m(v)m(ok)m
+(ed)i(via)f(`)p Ft(builtin)29 b(xxx)p Fu(')37 b(ev)m(en)j(after)f
+Ft(xxx)e Fu(has)630 2929 y(b)s(een)31 b(disabled)g(using)g(`)p
+Ft(enable)d(-n)i(xxx)p Fu('.)43 b(See)32 b(Section)g(4.2)h([Bash)e
+(Builtins],)i(page)f(50,)630 3039 y(for)e(details)i(of)e(the)h
+Ft(builtin)d Fu(and)i Ft(enable)e Fu(builtin)i(commands.)150
+3185 y Ft(--enable-dparen-arithmet)o(ic)630 3294 y Fu(Include)42
+b(supp)s(ort)f(for)h(the)h Ft(\(\(...)o(\)\))f Fu(command)g(\(see)i
+(Section)f(3.2.4.2)i([Conditional)630 3404 y(Constructs],)30
+b(page)h(11\).)150 3550 y Ft(--enable-extended-glob)630
+3660 y Fu(Include)40 b(supp)s(ort)e(for)i(the)h(extended)f(pattern)h
+(matc)m(hing)g(features)g(describ)s(ed)e(ab)s(o)m(v)m(e)630
+3769 y(under)29 b(Section)i(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i
+(page)e(33.)150 3915 y Ft(--enable-extended-glob-d)o(efau)o(lt)630
+4025 y Fu(Set)40 b(the)g(default)g(v)-5 b(alue)41 b(of)f(the)g
+Fr(extglob)j Fu(shell)d(option)g(describ)s(ed)f(ab)s(o)m(v)m(e)i(under)
+d(Sec-)630 4134 y(tion)31 b(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g
+(65,)h(to)f(b)s(e)f(enabled.)150 4281 y Ft(--enable-function-import)630
+4390 y Fu(Include)23 b(supp)s(ort)g(for)g(imp)s(orting)h(function)g
+(de\014nitions)f(exp)s(orted)h(b)m(y)g(another)g(instance)630
+4500 y(of)31 b(the)f(shell)h(from)f(the)g(en)m(vironmen)m(t.)41
+b(This)30 b(option)h(is)f(enabled)h(b)m(y)f(default.)150
+4646 y Ft(--enable-glob-asciirange)o(-def)o(ault)630
+4756 y Fu(Set)h(the)g(default)f(v)-5 b(alue)31 b(of)g(the)g
+Fr(globasciiranges)36 b Fu(shell)31 b(option)g(describ)s(ed)f(ab)s(o)m
+(v)m(e)h(under)630 4865 y(Section)39 b(4.3.2)h([The)e(Shopt)g
+(Builtin],)j(page)e(65,)i(to)f(b)s(e)d(enabled.)65 b(This)37
+b(con)m(trols)j(the)630 4975 y(b)s(eha)m(vior)21 b(of)g(c)m(haracter)h
+(ranges)f(when)f(used)g(in)g(pattern)h(matc)m(hing)h(brac)m(k)m(et)g
+(expressions.)150 5121 y Ft(--enable-help-builtin)630
+5230 y Fu(Include)i(the)h Ft(help)f Fu(builtin,)h(whic)m(h)g(displa)m
+(ys)f(help)h(on)f(shell)h(builtins)f(and)h(v)-5 b(ariables)25
+b(\(see)630 5340 y(Section)31 b(4.2)h([Bash)e(Builtins],)i(page)f
+(50\).)p eop end
+%%Page: 153 159
+TeXDict begin 153 158 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(153)150 299 y Ft(--enable-history)630
+408 y Fu(Include)29 b(command)g(history)h(and)f(the)h
+Ft(fc)f Fu(and)g Ft(history)e Fu(builtin)j(commands)f(\(see)h(Sec-)630
+518 y(tion)h(9.1)g([Bash)g(History)g(F)-8 b(acilities],)34
+b(page)d(141\).)150 664 y Ft(--enable-job-control)630
+774 y Fu(This)h(enables)i(the)f(job)g(con)m(trol)i(features)e(\(see)i
+(Chapter)d(7)i([Job)f(Con)m(trol],)i(page)f(103\),)630
+883 y(if)c(the)h(op)s(erating)g(system)f(supp)s(orts)f(them.)150
+1029 y Ft(--enable-multibyte)630 1139 y Fu(This)g(enables)i(supp)s(ort)
+d(for)i(m)m(ultib)m(yte)h(c)m(haracters)g(if)f(the)g(op)s(erating)h
+(system)f(pro)m(vides)630 1249 y(the)h(necessary)f(supp)s(ort.)150
+1395 y Ft(--enable-net-redirection)o(s)630 1504 y Fu(This)23
+b(enables)h(the)g(sp)s(ecial)h(handling)e(of)h(\014lenames)g(of)g(the)g
+(form)g Ft(/dev/tcp/)p Fj(host)p Ft(/)p Fj(port)630 1614
+y Fu(and)31 b Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)26
+b Fu(when)31 b(used)g(in)g(redirections)h(\(see)g(Section)g(3.6)h
+([Redirec-)630 1724 y(tions],)e(page)g(34\).)150 1870
+y Ft(--enable-process-substit)o(utio)o(n)630 1979 y Fu(This)49
+b(enables)i(pro)s(cess)f(substitution)g(\(see)h(Section)g(3.5.6)h([Pro)
+s(cess)e(Substitution],)630 2089 y(page)31 b(31\))h(if)e(the)h(op)s
+(erating)f(system)h(pro)m(vides)f(the)h(necessary)g(supp)s(ort.)150
+2235 y Ft(--enable-progcomp)630 2345 y Fu(Enable)d(the)g(programmable)g
+(completion)i(facilities)g(\(see)f(Section)g(8.6)g([Programmable)630
+2454 y(Completion],)i(page)h(132\).)42 b(If)30 b(Readline)h(is)f(not)h
+(enabled,)f(this)h(option)g(has)f(no)g(e\013ect.)150
+2600 y Ft(--enable-prompt-string-d)o(ecod)o(ing)630 2710
+y Fu(T)-8 b(urn)30 b(on)i(the)f(in)m(terpretation)i(of)f(a)g(n)m(um)m
+(b)s(er)e(of)i(bac)m(kslash-escap)s(ed)g(c)m(haracters)i(in)d(the)630
+2819 y Ft($PS0)p Fu(,)36 b Ft($PS1)p Fu(,)g Ft($PS2)p
+Fu(,)h(and)e Ft($PS4)f Fu(prompt)h(strings.)57 b(See)36
+b(Section)h(6.9)g([Con)m(trolling)g(the)630 2929 y(Prompt],)30
+b(page)h(97,)h(for)e(a)h(complete)h(list)f(of)f(prompt)g(string)g
+(escap)s(e)h(sequences.)150 3075 y Ft(--enable-readline)630
+3185 y Fu(Include)d(supp)s(ort)f(for)h(command-line)h(editing)g(and)f
+(history)g(with)g(the)h(Bash)g(v)m(ersion)g(of)630 3294
+y(the)i(Readline)g(library)f(\(see)h(Chapter)f(8)g([Command)g(Line)g
+(Editing],)h(page)g(107\).)150 3440 y Ft(--enable-restricted)630
+3550 y Fu(Include)41 b(supp)s(ort)f(for)i(a)g Fr(restricted)g(shell)p
+Fu(.)75 b(If)42 b(this)f(is)h(enabled,)j(Bash,)g(when)c(called)630
+3660 y(as)f Ft(rbash)p Fu(,)h(en)m(ters)f(a)g(restricted)h(mo)s(de.)68
+b(See)40 b(Section)h(6.10)g([The)f(Restricted)h(Shell],)630
+3769 y(page)31 b(99,)h(for)e(a)g(description)h(of)f(restricted)h(mo)s
+(de.)150 3915 y Ft(--enable-select)630 4025 y Fu(Include)25
+b(the)h Ft(select)f Fu(comp)s(ound)f(command,)j(whic)m(h)e(allo)m(ws)j
+(the)e(generation)h(of)f(simple)630 4134 y(men)m(us)k(\(see)h(Section)g
+(3.2.4.2)i([Conditional)e(Constructs],)g(page)g(11\).)150
+4281 y Ft(--enable-separate-helpfi)o(les)630 4390 y Fu(Use)h(external)h
+(\014les)f(for)g(the)g(do)s(cumen)m(tation)h(displa)m(y)m(ed)f(b)m(y)g
+(the)g Ft(help)f Fu(builtin)h(instead)630 4500 y(of)f(storing)f(the)h
+(text)g(in)m(ternally)-8 b(.)150 4646 y Ft(--enable-single-help-str)o
+(ings)630 4756 y Fu(Store)40 b(the)g(text)h(displa)m(y)m(ed)g(b)m(y)e
+(the)i Ft(help)d Fu(builtin)i(as)g(a)g(single)h(string)f(for)f(eac)m(h)
+i(help)630 4865 y(topic.)54 b(This)33 b(aids)i(in)f(translating)h(the)g
+(text)g(to)g(di\013eren)m(t)g(languages.)54 b(Y)-8 b(ou)35
+b(ma)m(y)g(need)630 4975 y(to)c(disable)g(this)f(if)g(y)m(our)h
+(compiler)g(cannot)f(handle)g(v)m(ery)h(long)g(string)f(literals.)150
+5121 y Ft(--enable-strict-posix-de)o(faul)o(t)630 5230
+y Fu(Mak)m(e)c(Bash)f Fm(posix)p Fu(-conforman)m(t)g(b)m(y)f(default)h
+(\(see)g(Section)h(6.11)g([Bash)f(POSIX)e(Mo)s(de],)630
+5340 y(page)31 b(99\).)p eop end
+%%Page: 154 160
+TeXDict begin 154 159 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(154)150 299 y Ft
+(--enable-usg-echo-defaul)o(t)630 408 y Fu(A)30 b(synon)m(ym)g(for)g
+Ft(--enable-xpg-echo-default)p Fu(.)150 568 y Ft
+(--enable-xpg-echo-defaul)o(t)630 677 y Fu(Mak)m(e)c(the)f
+Ft(echo)e Fu(builtin)i(expand)f(bac)m(kslash-escap)s(ed)h(c)m
+(haracters)h(b)m(y)f(default,)h(without)630 787 y(requiring)d(the)h
+Ft(-e)f Fu(option.)39 b(This)23 b(sets)h(the)g(default)g(v)-5
+b(alue)24 b(of)g(the)g Ft(xpg_echo)e Fu(shell)h(option)630
+897 y(to)28 b Ft(on)p Fu(,)g(whic)m(h)f(mak)m(es)h(the)g(Bash)f
+Ft(echo)f Fu(b)s(eha)m(v)m(e)i(more)g(lik)m(e)h(the)e(v)m(ersion)h(sp)s
+(eci\014ed)f(in)g(the)630 1006 y(Single)35 b(Unix)f(Sp)s
+(eci\014cation,)i(v)m(ersion)e(3.)53 b(See)35 b(Section)g(4.2)g([Bash)g
+(Builtins],)h(page)f(50,)630 1116 y(for)30 b(a)h(description)f(of)h
+(the)f(escap)s(e)h(sequences)g(that)g Ft(echo)e Fu(recognizes.)275
+1275 y(The)f(\014le)i Ft(config-top.h)c Fu(con)m(tains)31
+b(C)d(Prepro)s(cessor)h(`)p Ft(#define)p Fu(')f(statemen)m(ts)j(for)f
+(options)f(whic)m(h)150 1385 y(are)35 b(not)g(settable)i(from)d
+Ft(configure)p Fu(.)51 b(Some)35 b(of)g(these)g(are)h(not)f(mean)m(t)g
+(to)h(b)s(e)e(c)m(hanged;)k(b)s(ew)m(are)d(of)150 1494
+y(the)h(consequences)g(if)f(y)m(ou)h(do.)55 b(Read)36
+b(the)g(commen)m(ts)g(asso)s(ciated)h(with)e(eac)m(h)i(de\014nition)e
+(for)g(more)150 1604 y(information)c(ab)s(out)f(its)h(e\013ect.)p
+eop end
+%%Page: 155 161
+TeXDict begin 155 160 bop 3614 -116 a Fu(155)150 299
+y Fp(App)t(endix)52 b(A)81 b(Rep)t(orting)53 b(Bugs)150
+533 y Fu(Please)33 b(rep)s(ort)e(all)h(bugs)f(y)m(ou)h(\014nd)e(in)i
+(Bash.)44 b(But)32 b(\014rst,)g(y)m(ou)g(should)e(mak)m(e)j(sure)e
+(that)h(it)g(really)h(is)f(a)150 643 y(bug,)d(and)g(that)h(it)g(app)s
+(ears)f(in)g(the)h(latest)h(v)m(ersion)f(of)g(Bash.)40
+b(The)29 b(latest)j(v)m(ersion)e(of)f(Bash)h(is)f(alw)m(a)m(ys)150
+752 y(a)m(v)-5 b(ailable)33 b(for)d(FTP)g(from)g Ft
+(ftp://ftp.gnu.org/pub/gn)o(u/ba)o(sh/)o Fu(.)275 887
+y(Once)41 b(y)m(ou)g(ha)m(v)m(e)h(determined)f(that)h(a)f(bug)g
+(actually)h(exists,)j(use)c(the)g Ft(bashbug)e Fu(command)i(to)150
+996 y(submit)25 b(a)h(bug)g(rep)s(ort.)38 b(If)26 b(y)m(ou)g(ha)m(v)m
+(e)h(a)f(\014x,)h(y)m(ou)f(are)g(encouraged)h(to)f(mail)h(that)f(as)g
+(w)m(ell!)40 b(Suggestions)150 1106 y(and)j(`philosophical')i(bug)e
+(rep)s(orts)f(ma)m(y)j(b)s(e)e(mailed)h(to)g Ft(bug-bash@gnu)11
+b(.)g(org)39 b Fu(or)k(p)s(osted)g(to)i(the)150 1215
+y(Usenet)31 b(newsgroup)e Ft(gnu.bash.bug)p Fu(.)275
+1350 y(All)i(bug)e(rep)s(orts)h(should)f(include:)225
+1484 y Fq(\017)60 b Fu(The)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(of)h
+(Bash.)225 1619 y Fq(\017)60 b Fu(The)30 b(hardw)m(are)g(and)g(op)s
+(erating)g(system.)225 1753 y Fq(\017)60 b Fu(The)30
+b(compiler)h(used)e(to)i(compile)h(Bash.)225 1888 y Fq(\017)60
+b Fu(A)30 b(description)h(of)f(the)h(bug)f(b)s(eha)m(viour.)225
+2022 y Fq(\017)60 b Fu(A)30 b(short)h(script)f(or)g(`recip)s(e')h(whic)
+m(h)f(exercises)i(the)e(bug)g(and)g(ma)m(y)h(b)s(e)f(used)f(to)i(repro)
+s(duce)e(it.)150 2182 y Ft(bashbug)d Fu(inserts)i(the)h(\014rst)f
+(three)g(items)h(automatically)i(in)m(to)f(the)e(template)i(it)f(pro)m
+(vides)f(for)g(\014ling)h(a)150 2291 y(bug)h(rep)s(ort.)275
+2426 y(Please)h(send)f(all)h(rep)s(orts)f(concerning)g(this)h(man)m
+(ual)f(to)h Ft(bug-bash@gnu.org)p Fu(.)p eop end
+%%Page: 156 162
+TeXDict begin 156 161 bop 3614 -116 a Fu(156)150 141
+y Fp(App)t(endix)58 b(B)81 b(Ma)9 b(jor)54 b(Di\013erences)d(F)-13
+b(rom)54 b(The)g(Bourne)1088 299 y(Shell)150 530 y Fu(Bash)26
+b(implemen)m(ts)h(essen)m(tially)g(the)g(same)f(grammar,)h(parameter)f
+(and)g(v)-5 b(ariable)27 b(expansion,)g(redirec-)150
+640 y(tion,)i(and)e(quoting)g(as)h(the)g(Bourne)f(Shell.)40
+b(Bash)27 b(uses)g(the)h Fm(posix)f Fu(standard)f(as)i(the)g(sp)s
+(eci\014cation)g(of)150 749 y(ho)m(w)34 b(these)h(features)g(are)g(to)g
+(b)s(e)f(implemen)m(ted.)53 b(There)34 b(are)h(some)g(di\013erences)g
+(b)s(et)m(w)m(een)g(the)g(tradi-)150 859 y(tional)e(Bourne)e(shell)h
+(and)f(Bash;)i(this)f(section)g(quic)m(kly)h(details)g(the)e
+(di\013erences)h(of)g(signi\014cance.)46 b(A)150 969
+y(n)m(um)m(b)s(er)24 b(of)h(these)h(di\013erences)f(are)h(explained)f
+(in)g(greater)h(depth)f(in)g(previous)f(sections.)40
+b(This)25 b(section)150 1078 y(uses)33 b(the)i(v)m(ersion)f(of)g
+Ft(sh)f Fu(included)g(in)h(SVR4.2)h(\(the)f(last)h(v)m(ersion)f(of)g
+(the)g(historical)i(Bourne)d(shell\))150 1188 y(as)e(the)f(baseline)h
+(reference.)225 1322 y Fq(\017)60 b Fu(Bash)32 b(is)h
+Fm(posix)p Fu(-conforman)m(t,)g(ev)m(en)g(where)f(the)g
+Fm(posix)g Fu(sp)s(eci\014cation)h(di\013ers)f(from)g(traditional)330
+1431 y Ft(sh)e Fu(b)s(eha)m(vior)g(\(see)i(Section)f(6.11)h([Bash)e
+(POSIX)g(Mo)s(de],)h(page)g(99\).)225 1565 y Fq(\017)60
+b Fu(Bash)26 b(has)g(m)m(ulti-c)m(haracter)i(in)m(v)m(o)s(cation)g
+(options)f(\(see)f(Section)h(6.1)g([In)m(v)m(oking)g(Bash],)h(page)e
+(85\).)225 1699 y Fq(\017)60 b Fu(Bash)40 b(has)f(command-line)h
+(editing)g(\(see)h(Chapter)e(8)h([Command)f(Line)g(Editing],)k(page)d
+(107\))330 1809 y(and)30 b(the)g Ft(bind)g Fu(builtin.)225
+1943 y Fq(\017)60 b Fu(Bash)46 b(pro)m(vides)g(a)g(programmable)g(w)m
+(ord)f(completion)i(mec)m(hanism)f(\(see)h(Section)g(8.6)g([Pro-)330
+2052 y(grammable)39 b(Completion],)i(page)e(132\),)i(and)d(builtin)g
+(commands)f Ft(complete)p Fu(,)h Ft(compgen)p Fu(,)h(and)330
+2162 y Ft(compopt)p Fu(,)29 b(to)i(manipulate)g(it.)225
+2296 y Fq(\017)60 b Fu(Bash)26 b(has)f(command)h(history)f(\(see)i
+(Section)f(9.1)h([Bash)f(History)h(F)-8 b(acilities],)30
+b(page)c(141\))i(and)d(the)330 2405 y Ft(history)k Fu(and)h
+Ft(fc)g Fu(builtins)g(to)h(manipulate)g(it.)42 b(The)30
+b(Bash)h(history)g(list)g(main)m(tains)g(timestamp)330
+2515 y(information)g(and)e(uses)h(the)h(v)-5 b(alue)31
+b(of)f(the)h Ft(HISTTIMEFORMAT)26 b Fu(v)-5 b(ariable)32
+b(to)f(displa)m(y)f(it.)225 2649 y Fq(\017)60 b Fu(Bash)48
+b(implemen)m(ts)h Ft(csh)p Fu(-lik)m(e)g(history)f(expansion)g(\(see)h
+(Section)g(9.3)h([History)f(In)m(teraction],)330 2759
+y(page)31 b(143\).)225 2892 y Fq(\017)60 b Fu(Bash)33
+b(has)g(one-dimensional)h(arra)m(y)f(v)-5 b(ariables)34
+b(\(see)g(Section)g(6.7)g([Arra)m(ys],)g(page)g(94\),)h(and)e(the)330
+3002 y(appropriate)39 b(v)-5 b(ariable)40 b(expansions)f(and)g
+(assignmen)m(t)h(syn)m(tax)g(to)g(use)f(them.)67 b(Sev)m(eral)40
+b(of)g(the)330 3112 y(Bash)32 b(builtins)f(tak)m(e)j(options)e(to)h
+(act)g(on)e(arra)m(ys.)46 b(Bash)32 b(pro)m(vides)g(a)g(n)m(um)m(b)s
+(er)f(of)h(built-in)f(arra)m(y)330 3221 y(v)-5 b(ariables.)225
+3355 y Fq(\017)60 b Fu(The)37 b Ft($'...)n(')g Fu(quoting)g(syn)m(tax,)
+j(whic)m(h)d(expands)f(ANSI-C)h(bac)m(kslash-escap)s(ed)h(c)m
+(haracters)g(in)330 3465 y(the)26 b(text)h(b)s(et)m(w)m(een)g(the)g
+(single)f(quotes,)i(is)e(supp)s(orted)f(\(see)i(Section)g(3.1.2.4)h
+([ANSI-C)e(Quoting],)330 3574 y(page)31 b(6\).)225 3708
+y Fq(\017)60 b Fu(Bash)30 b(supp)s(orts)f(the)h Ft($"...)o(")f
+Fu(quoting)i(syn)m(tax)g(to)f(do)g(lo)s(cale-sp)s(eci\014c)i
+(translation)g(of)e(the)g(c)m(har-)330 3818 y(acters)g(b)s(et)m(w)m
+(een)f(the)f(double)g(quotes.)41 b(The)28 b Ft(-D)p Fu(,)h
+Ft(--dump-strings)p Fu(,)c(and)j Ft(--dump-po-strings)330
+3927 y Fu(in)m(v)m(o)s(cation)42 b(options)d(list)i(the)e(translatable)
+i(strings)f(found)e(in)h(a)h(script)g(\(see)g(Section)g(3.1.2.5)330
+4037 y([Lo)s(cale)32 b(T)-8 b(ranslation],)31 b(page)h(7\).)225
+4171 y Fq(\017)60 b Fu(Bash)44 b(implemen)m(ts)g(the)f
+Ft(!)h Fu(k)m(eyw)m(ord)g(to)g(negate)h(the)f(return)e(v)-5
+b(alue)44 b(of)g(a)g(pip)s(eline)f(\(see)h(Sec-)330 4281
+y(tion)33 b(3.2.2)i([Pip)s(elines],)f(page)g(8\).)49
+b(V)-8 b(ery)33 b(useful)f(when)g(an)h Ft(if)f Fu(statemen)m(t)j(needs)
+d(to)i(act)g(only)f(if)330 4390 y(a)k(test)h(fails.)60
+b(The)36 b(Bash)g(`)p Ft(-o)30 b(pipefail)p Fu(')35 b(option)i(to)h
+Ft(set)d Fu(will)i(cause)g(a)g(pip)s(eline)g(to)g(return)f(a)330
+4500 y(failure)31 b(status)f(if)h(an)m(y)f(command)g(fails.)225
+4634 y Fq(\017)60 b Fu(Bash)34 b(has)g(the)g Ft(time)f
+Fu(reserv)m(ed)h(w)m(ord)g(and)f(command)h(timing)h(\(see)g(Section)g
+(3.2.2)g([Pip)s(elines],)330 4743 y(page)g(8\).)52 b(The)33
+b(displa)m(y)i(of)f(the)g(timing)g(statistics)i(ma)m(y)f(b)s(e)e(con)m
+(trolled)j(with)e(the)g Ft(TIMEFORMAT)330 4853 y Fu(v)-5
+b(ariable.)225 4987 y Fq(\017)60 b Fu(Bash)28 b(implemen)m(ts)g(the)f
+Ft(for)j(\(\()g Fj(expr1)f Ft(;)h Fj(expr2)f Ft(;)h Fj(expr3)f
+Ft(\)\))e Fu(arithmetic)h(for)g(command,)g(sim-)330 5096
+y(ilar)j(to)g(the)g(C)f(language)h(\(see)h(Section)f(3.2.4.1)i([Lo)s
+(oping)d(Constructs],)h(page)g(10\).)225 5230 y Fq(\017)60
+b Fu(Bash)31 b(includes)f(the)g Ft(select)f Fu(comp)s(ound)g(command,)i
+(whic)m(h)f(allo)m(ws)i(the)f(generation)g(of)g(simple)330
+5340 y(men)m(us)f(\(see)h(Section)g(3.2.4.2)i([Conditional)e
+(Constructs],)g(page)g(11\).)p eop end
+%%Page: 157 163
+TeXDict begin 157 162 bop 150 -116 a Fu(App)s(endix)29
+b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31
+b(The)f(Bourne)g(Shell)1258 b(157)225 299 y Fq(\017)60
+b Fu(Bash)40 b(includes)g(the)g Ft([[)g Fu(comp)s(ound)e(command,)43
+b(whic)m(h)c(mak)m(es)i(conditional)h(testing)f(part)f(of)330
+408 y(the)f(shell)g(grammar)g(\(see)h(Section)f(3.2.4.2)j([Conditional)
+d(Constructs],)i(page)f(11\),)i(including)330 518 y(optional)32
+b(regular)e(expression)g(matc)m(hing.)225 653 y Fq(\017)60
+b Fu(Bash)31 b(pro)m(vides)f(optional)h(case-insensitiv)m(e)i(matc)m
+(hing)f(for)e(the)g Ft(case)g Fu(and)f Ft([[)h Fu(constructs.)225
+789 y Fq(\017)60 b Fu(Bash)27 b(includes)g(brace)h(expansion)f(\(see)h
+(Section)g(3.5.1)i([Brace)e(Expansion],)g(page)g(23\))h(and)d(tilde)330
+898 y(expansion)k(\(see)i(Section)f(3.5.2)h([Tilde)f(Expansion],)f
+(page)h(23\).)225 1034 y Fq(\017)60 b Fu(Bash)24 b(implemen)m(ts)h
+(command)e(aliases)j(and)d(the)i Ft(alias)d Fu(and)i
+Ft(unalias)e Fu(builtins)h(\(see)i(Section)g(6.6)330
+1143 y([Aliases],)32 b(page)f(93\).)225 1279 y Fq(\017)60
+b Fu(Bash)32 b(pro)m(vides)g(shell)g(arithmetic,)i(the)e
+Ft(\(\()g Fu(comp)s(ound)e(command)i(\(see)h(Section)f(3.2.4.2)j([Con-)
+330 1388 y(ditional)d(Constructs],)e(page)i(11\),)g(and)e(arithmetic)i
+(expansion)e(\(see)i(Section)f(6.5)h([Shell)f(Arith-)330
+1498 y(metic],)h(page)f(92\).)225 1633 y Fq(\017)60 b
+Fu(V)-8 b(ariables)31 b(presen)m(t)e(in)g(the)g(shell's)h(initial)g(en)
+m(vironmen)m(t)g(are)g(automatically)i(exp)s(orted)d(to)h(c)m(hild)330
+1743 y(pro)s(cesses.)38 b(The)23 b(Bourne)g(shell)g(do)s(es)g(not)g
+(normally)g(do)g(this)g(unless)g(the)g(v)-5 b(ariables)24
+b(are)f(explicitly)330 1852 y(mark)m(ed)30 b(using)g(the)h
+Ft(export)e Fu(command.)225 1988 y Fq(\017)60 b Fu(Bash)26
+b(supp)s(orts)d(the)j(`)p Ft(+=)p Fu(')f(assignmen)m(t)i(op)s(erator,)g
+(whic)m(h)e(app)s(ends)f(to)i(the)g(v)-5 b(alue)26 b(of)f(the)h(v)-5
+b(ariable)330 2097 y(named)30 b(on)g(the)h(left)g(hand)e(side.)225
+2233 y Fq(\017)60 b Fu(Bash)36 b(includes)g(the)g Fm(posix)f
+Fu(pattern)h(remo)m(v)-5 b(al)37 b(`)p Ft(\045)p Fu(',)h(`)p
+Ft(#)p Fu(',)g(`)p Ft(\045\045)p Fu(')e(and)f(`)p Ft(##)p
+Fu(')h(expansions)g(to)g(remo)m(v)m(e)330 2342 y(leading)f(or)f
+(trailing)h(substrings)e(from)g(v)-5 b(ariable)35 b(v)-5
+b(alues)35 b(\(see)g(Section)g(3.5.3)g([Shell)g(P)m(arameter)330
+2452 y(Expansion],)30 b(page)h(24\).)225 2587 y Fq(\017)60
+b Fu(The)46 b(expansion)g Ft(${#xx})p Fu(,)j(whic)m(h)d(returns)f(the)i
+(length)f(of)h Ft(${xx})p Fu(,)i(is)e(supp)s(orted)d(\(see)j(Sec-)330
+2697 y(tion)31 b(3.5.3)h([Shell)f(P)m(arameter)g(Expansion],)f(page)i
+(24\).)225 2832 y Fq(\017)60 b Fu(The)30 b(expansion)g
+Ft(${var:)p Fr(o\013set)r Ft([:)p Fr(length)p Ft(]})p
+Fu(,)g(whic)m(h)g(expands)g(to)h(the)g(substring)e(of)i
+Ft(var)p Fu('s)e(v)-5 b(alue)330 2942 y(of)43 b(length)g
+Fr(length)p Fu(,)k(b)s(eginning)42 b(at)i Fr(o\013set)p
+Fu(,)j(is)c(presen)m(t)g(\(see)g(Section)h(3.5.3)h([Shell)e(P)m
+(arameter)330 3051 y(Expansion],)30 b(page)h(24\).)225
+3187 y Fq(\017)60 b Fu(The)21 b(expansion)f Ft(${var/[/])p
+Fr(pattern)p Ft([/)p Fr(replacemen)m(t)r Ft(]})p Fu(,)i(whic)m(h)e
+(matc)m(hes)j Fr(pattern)e Fu(and)f(replaces)330 3296
+y(it)29 b(with)e Fr(replacemen)m(t)32 b Fu(in)c(the)g(v)-5
+b(alue)29 b(of)f Ft(var)p Fu(,)g(is)g(a)m(v)-5 b(ailable)31
+b(\(see)e(Section)f(3.5.3)i([Shell)f(P)m(arameter)330
+3406 y(Expansion],)h(page)h(24\).)225 3541 y Fq(\017)60
+b Fu(The)33 b(expansion)g Ft(${!)p Fj(prefix)p Ft(*})d
+Fu(expansion,)k(whic)m(h)e(expands)h(to)h(the)f(names)g(of)g(all)h
+(shell)f(v)-5 b(ari-)330 3651 y(ables)36 b(whose)g(names)g(b)s(egin)g
+(with)g Fr(pre\014x)p Fu(,)g(is)g(a)m(v)-5 b(ailable)39
+b(\(see)e(Section)g(3.5.3)g([Shell)g(P)m(arameter)330
+3761 y(Expansion],)30 b(page)h(24\).)225 3896 y Fq(\017)60
+b Fu(Bash)22 b(has)f Fr(indirect)j Fu(v)-5 b(ariable)22
+b(expansion)g(using)f Ft(${!word})e Fu(\(see)k(Section)f(3.5.3)i
+([Shell)e(P)m(arameter)330 4006 y(Expansion],)30 b(page)h(24\).)225
+4141 y Fq(\017)60 b Fu(Bash)31 b(can)f(expand)g(p)s(ositional)h
+(parameters)g(b)s(ey)m(ond)e Ft($9)h Fu(using)g Ft(${)p
+Fj(num)p Ft(})p Fu(.)225 4276 y Fq(\017)60 b Fu(The)27
+b Fm(posix)g Ft($\(\))g Fu(form)g(of)h(command)g(substitution)f(is)h
+(implemen)m(ted)g(\(see)h(Section)f(3.5.4)i([Com-)330
+4386 y(mand)38 b(Substitution],)k(page)e(30\),)j(and)38
+b(preferred)g(to)i(the)g(Bourne)f(shell's)h Ft(``)e Fu(\(whic)m(h)i(is)
+f(also)330 4495 y(implemen)m(ted)31 b(for)f(bac)m(kw)m(ards)h
+(compatibilit)m(y\).)225 4631 y Fq(\017)60 b Fu(Bash)31
+b(has)f(pro)s(cess)g(substitution)g(\(see)h(Section)g(3.5.6)h([Pro)s
+(cess)f(Substitution],)f(page)h(31\).)225 4766 y Fq(\017)60
+b Fu(Bash)55 b(automatically)j(assigns)e(v)-5 b(ariables)55
+b(that)h(pro)m(vide)f(information)h(ab)s(out)f(the)g(curren)m(t)330
+4876 y(user)40 b(\()p Ft(UID)p Fu(,)i Ft(EUID)p Fu(,)g(and)e
+Ft(GROUPS)p Fu(\),)h(the)g(curren)m(t)f(host)g(\()p Ft(HOSTTYPE)p
+Fu(,)h Ft(OSTYPE)p Fu(,)h Ft(MACHTYPE)p Fu(,)f(and)330
+4985 y Ft(HOSTNAME)p Fu(\),)55 b(and)c(the)g(instance)h(of)g(Bash)f
+(that)h(is)f(running)f(\()p Ft(BASH)p Fu(,)56 b Ft(BASH_VERSION)p
+Fu(,)e(and)330 5095 y Ft(BASH_VERSINFO)p Fu(\).)37 b(See)31
+b(Section)g(5.2)h([Bash)e(V)-8 b(ariables],)33 b(page)e(73,)g(for)f
+(details.)225 5230 y Fq(\017)60 b Fu(The)44 b Ft(IFS)f
+Fu(v)-5 b(ariable)45 b(is)f(used)f(to)i(split)f(only)g(the)g(results)g
+(of)h(expansion,)i(not)d(all)h(w)m(ords)f(\(see)330 5340
+y(Section)29 b(3.5.7)h([W)-8 b(ord)29 b(Splitting],)h(page)f(31\).)41
+b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h(hole.)p
+eop end
+%%Page: 158 164
+TeXDict begin 158 163 bop 150 -116 a Fu(App)s(endix)29
+b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31
+b(The)f(Bourne)g(Shell)1258 b(158)225 299 y Fq(\017)60
+b Fu(The)36 b(\014lename)h(expansion)f(brac)m(k)m(et)i(expression)f(co)
+s(de)f(uses)g(`)p Ft(!)p Fu(')h(and)f(`)p Ft(^)p Fu(')h(to)g(negate)h
+(the)f(set)g(of)330 408 y(c)m(haracters)32 b(b)s(et)m(w)m(een)f(the)f
+(brac)m(k)m(ets.)43 b(The)29 b(Bourne)i(shell)f(uses)g(only)h(`)p
+Ft(!)p Fu('.)225 536 y Fq(\017)60 b Fu(Bash)38 b(implemen)m(ts)g(the)g
+(full)g(set)g(of)g Fm(posix)f Fu(\014lename)h(expansion)g(op)s
+(erators,)i(including)d Fr(c)m(har-)330 646 y(acter)i(classes)p
+Fu(,)j Fr(equiv)-5 b(alence)39 b(classes)p Fu(,)j(and)37
+b Fr(collating)k(sym)m(b)s(ols)g Fu(\(see)e(Section)g(3.5.8)h
+([Filename)330 756 y(Expansion],)30 b(page)h(32\).)225
+883 y Fq(\017)60 b Fu(Bash)35 b(implemen)m(ts)g(extended)g(pattern)g
+(matc)m(hing)h(features)f(when)f(the)h Ft(extglob)d Fu(shell)j(option)
+330 993 y(is)30 b(enabled)h(\(see)g(Section)g(3.5.8.1)i([P)m(attern)f
+(Matc)m(hing],)g(page)f(33\).)225 1121 y Fq(\017)60 b
+Fu(It)22 b(is)g(p)s(ossible)g(to)h(ha)m(v)m(e)g(a)f(v)-5
+b(ariable)23 b(and)f(a)g(function)g(with)g(the)g(same)g(name;)j
+Ft(sh)d Fu(do)s(es)g(not)g(separate)330 1230 y(the)31
+b(t)m(w)m(o)g(name)g(spaces.)225 1358 y Fq(\017)60 b
+Fu(Bash)30 b(functions)e(are)i(p)s(ermitted)f(to)h(ha)m(v)m(e)h(lo)s
+(cal)g(v)-5 b(ariables)30 b(using)f(the)g Ft(local)f
+Fu(builtin,)i(and)e(th)m(us)330 1468 y(useful)i(recursiv)m(e)g
+(functions)g(ma)m(y)h(b)s(e)f(written)g(\(see)i(Section)f(4.2)g([Bash)g
+(Builtins],)g(page)h(50\).)225 1596 y Fq(\017)60 b Fu(V)-8
+b(ariable)25 b(assignmen)m(ts)g(preceding)e(commands)h(a\013ect)h(only)
+f(that)g(command,)h(ev)m(en)f(builtins)g(and)330 1705
+y(functions)36 b(\(see)h(Section)g(3.7.4)h([En)m(vironmen)m(t],)h(page)
+e(40\).)60 b(In)35 b Ft(sh)p Fu(,)j(all)f(v)-5 b(ariable)37
+b(assignmen)m(ts)330 1815 y(preceding)30 b(commands)g(are)h(global)h
+(unless)d(the)i(command)f(is)h(executed)g(from)f(the)g(\014le)h
+(system.)225 1943 y Fq(\017)60 b Fu(Bash)44 b(p)s(erforms)e(\014lename)
+i(expansion)f(on)h(\014lenames)g(sp)s(eci\014ed)f(as)h(op)s(erands)e
+(to)j(input)e(and)330 2052 y(output)30 b(redirection)h(op)s(erators)g
+(\(see)g(Section)g(3.6)h([Redirections],)g(page)f(34\).)225
+2180 y Fq(\017)60 b Fu(Bash)29 b(con)m(tains)h(the)f(`)p
+Ft(<>)p Fu(')f(redirection)i(op)s(erator,)f(allo)m(wing)i(a)e(\014le)g
+(to)g(b)s(e)f(op)s(ened)g(for)h(b)s(oth)f(read-)330 2290
+y(ing)35 b(and)f(writing,)i(and)e(the)h(`)p Ft(&>)p Fu(')g(redirection)
+g(op)s(erator,)h(for)f(directing)g(standard)f(output)h(and)330
+2399 y(standard)30 b(error)g(to)h(the)f(same)h(\014le)f(\(see)i
+(Section)f(3.6)g([Redirections],)h(page)g(34\).)225 2527
+y Fq(\017)60 b Fu(Bash)21 b(includes)f(the)h(`)p Ft(<<<)p
+Fu(')g(redirection)g(op)s(erator,)i(allo)m(wing)g(a)e(string)f(to)i(b)s
+(e)e(used)g(as)h(the)g(standard)330 2637 y(input)29 b(to)j(a)e
+(command.)225 2765 y Fq(\017)60 b Fu(Bash)32 b(implemen)m(ts)f(the)h(`)
+p Ft([n]<&)p Fj(word)p Fu(')d(and)i(`)p Ft([n]>&)p Fj(word)p
+Fu(')e(redirection)j(op)s(erators,)g(whic)m(h)f(mo)m(v)m(e)330
+2874 y(one)g(\014le)f(descriptor)g(to)h(another.)225
+3002 y Fq(\017)60 b Fu(Bash)25 b(treats)h(a)f(n)m(um)m(b)s(er)e(of)i
+(\014lenames)g(sp)s(ecially)g(when)f(they)h(are)g(used)f(in)g
+(redirection)i(op)s(erators)330 3112 y(\(see)31 b(Section)h(3.6)f
+([Redirections],)h(page)f(34\).)225 3240 y Fq(\017)60
+b Fu(Bash)33 b(can)f(op)s(en)g(net)m(w)m(ork)i(connections)f(to)h
+(arbitrary)e(mac)m(hines)h(and)f(services)h(with)f(the)h(redi-)330
+3349 y(rection)e(op)s(erators)g(\(see)g(Section)g(3.6)h
+([Redirections],)g(page)f(34\).)225 3477 y Fq(\017)60
+b Fu(The)29 b Ft(noclobber)e Fu(option)j(is)g(a)m(v)-5
+b(ailable)32 b(to)e(a)m(v)m(oid)h(o)m(v)m(erwriting)g(existing)g
+(\014les)e(with)h(output)f(redi-)330 3587 y(rection)39
+b(\(see)h(Section)f(4.3.1)h([The)e(Set)h(Builtin],)i(page)e(61\).)66
+b(The)38 b(`)p Ft(>|)p Fu(')h(redirection)g(op)s(erator)330
+3696 y(ma)m(y)31 b(b)s(e)f(used)f(to)i(o)m(v)m(erride)h
+Ft(noclobber)p Fu(.)225 3824 y Fq(\017)60 b Fu(The)34
+b(Bash)g Ft(cd)g Fu(and)f Ft(pwd)g Fu(builtins)h(\(see)h(Section)g(4.1)
+g([Bourne)g(Shell)f(Builtins],)h(page)g(43\))h(eac)m(h)330
+3934 y(tak)m(e)c Ft(-L)e Fu(and)f Ft(-P)h Fu(options)h(to)g(switc)m(h)g
+(b)s(et)m(w)m(een)g(logical)i(and)c(ph)m(ysical)i(mo)s(des.)225
+4061 y Fq(\017)60 b Fu(Bash)25 b(allo)m(ws)h(a)g(function)e(to)i(o)m(v)
+m(erride)g(a)g(builtin)e(with)h(the)g(same)g(name,)i(and)d(pro)m(vides)
+h(access)h(to)330 4171 y(that)34 b(builtin's)f(functionalit)m(y)h
+(within)f(the)g(function)g(via)h(the)f Ft(builtin)f Fu(and)g
+Ft(command)g Fu(builtins)330 4281 y(\(see)f(Section)h(4.2)f([Bash)g
+(Builtins],)g(page)g(50\).)225 4408 y Fq(\017)60 b Fu(The)35
+b Ft(command)e Fu(builtin)i(allo)m(ws)i(selectiv)m(e)h(disabling)e(of)f
+(functions)g(when)g(command)g(lo)s(okup)g(is)330 4518
+y(p)s(erformed)29 b(\(see)i(Section)g(4.2)h([Bash)f(Builtins],)g(page)g
+(50\).)225 4646 y Fq(\017)60 b Fu(Individual)23 b(builtins)g(ma)m(y)i
+(b)s(e)e(enabled)h(or)g(disabled)g(using)f(the)h Ft(enable)f
+Fu(builtin)g(\(see)i(Section)g(4.2)330 4756 y([Bash)31
+b(Builtins],)g(page)g(50\).)225 4883 y Fq(\017)60 b Fu(The)26
+b(Bash)h Ft(exec)e Fu(builtin)h(tak)m(es)i(additional)f(options)g(that)
+g(allo)m(w)h(users)d(to)j(con)m(trol)g(the)e(con)m(ten)m(ts)330
+4993 y(of)35 b(the)f(en)m(vironmen)m(t)h(passed)f(to)h(the)g(executed)g
+(command,)h(and)d(what)i(the)f(zeroth)h(argumen)m(t)330
+5103 y(to)c(the)g(command)f(is)g(to)h(b)s(e)f(\(see)h(Section)h(4.1)f
+([Bourne)f(Shell)h(Builtins],)g(page)g(43\).)225 5230
+y Fq(\017)60 b Fu(Shell)29 b(functions)g(ma)m(y)h(b)s(e)f(exp)s(orted)g
+(to)h(c)m(hildren)f(via)h(the)g(en)m(vironmen)m(t)g(using)f
+Ft(export)f(-f)h Fu(\(see)330 5340 y(Section)i(3.3)h([Shell)e(F)-8
+b(unctions],)32 b(page)f(17\).)p eop end
+%%Page: 159 165
+TeXDict begin 159 164 bop 150 -116 a Fu(App)s(endix)29
+b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31
+b(The)f(Bourne)g(Shell)1258 b(159)225 299 y Fq(\017)60
+b Fu(The)40 b(Bash)h Ft(export)p Fu(,)h Ft(readonly)p
+Fu(,)f(and)g Ft(declare)d Fu(builtins)j(can)g(tak)m(e)h(a)f
+Ft(-f)f Fu(option)i(to)f(act)h(on)330 408 y(shell)30
+b(functions,)f(a)h Ft(-p)f Fu(option)g(to)i(displa)m(y)e(v)-5
+b(ariables)30 b(with)f(v)-5 b(arious)30 b(attributes)g(set)g(in)f(a)h
+(format)330 518 y(that)g(can)g(b)s(e)f(used)g(as)g(shell)h(input,)f(a)h
+Ft(-n)f Fu(option)h(to)g(remo)m(v)m(e)h(v)-5 b(arious)30
+b(v)-5 b(ariable)30 b(attributes,)h(and)330 628 y(`)p
+Ft(name=value)p Fu(')d(argumen)m(ts)j(to)g(set)g(v)-5
+b(ariable)31 b(attributes)g(and)f(v)-5 b(alues)30 b(sim)m(ultaneously)
+-8 b(.)225 765 y Fq(\017)60 b Fu(The)42 b(Bash)h Ft(hash)f
+Fu(builtin)g(allo)m(ws)j(a)e(name)g(to)g(b)s(e)f(asso)s(ciated)j(with)d
+(an)h(arbitrary)f(\014lename,)330 874 y(ev)m(en)30 b(when)e(that)h
+(\014lename)g(cannot)h(b)s(e)e(found)g(b)m(y)h(searc)m(hing)g(the)g
+Ft($PATH)p Fu(,)g(using)f(`)p Ft(hash)h(-p)p Fu(')g(\(see)330
+984 y(Section)i(4.1)h([Bourne)e(Shell)g(Builtins],)h(page)h(43\).)225
+1121 y Fq(\017)60 b Fu(Bash)27 b(includes)f(a)i Ft(help)d
+Fu(builtin)i(for)f(quic)m(k)h(reference)h(to)f(shell)g(facilities)i
+(\(see)f(Section)g(4.2)g([Bash)330 1230 y(Builtins],)j(page)g(50\).)225
+1367 y Fq(\017)60 b Fu(The)42 b Ft(printf)g Fu(builtin)g(is)h(a)m(v)-5
+b(ailable)45 b(to)f(displa)m(y)f(formatted)g(output)g(\(see)h(Section)g
+(4.2)g([Bash)330 1477 y(Builtins],)31 b(page)g(50\).)225
+1614 y Fq(\017)60 b Fu(The)26 b(Bash)h Ft(read)f Fu(builtin)g(\(see)i
+(Section)g(4.2)g([Bash)f(Builtins],)h(page)g(50\))g(will)f(read)g(a)g
+(line)g(ending)330 1724 y(in)i(`)p Ft(\\)p Fu(')h(with)f(the)g
+Ft(-r)g Fu(option,)i(and)d(will)i(use)f(the)h Ft(REPLY)e
+Fu(v)-5 b(ariable)30 b(as)g(a)f(default)h(if)f(no)h(non-option)330
+1833 y(argumen)m(ts)h(are)h(supplied.)42 b(The)30 b(Bash)i
+Ft(read)e Fu(builtin)g(also)j(accepts)f(a)g(prompt)e(string)h(with)g
+(the)330 1943 y Ft(-p)c Fu(option)h(and)f(will)g(use)h(Readline)g(to)g
+(obtain)g(the)g(line)f(when)g(giv)m(en)h(the)g Ft(-e)f
+Fu(option.)40 b(The)27 b Ft(read)330 2052 y Fu(builtin)h(also)i(has)e
+(additional)i(options)f(to)g(con)m(trol)h(input:)39 b(the)29
+b Ft(-s)f Fu(option)h(will)g(turn)e(o\013)j(ec)m(hoing)330
+2162 y(of)f(input)f(c)m(haracters)j(as)e(they)g(are)h(read,)f(the)g
+Ft(-t)g Fu(option)g(will)h(allo)m(w)g Ft(read)e Fu(to)i(time)g(out)f
+(if)g(input)330 2271 y(do)s(es)i(not)h(arriv)m(e)g(within)f(a)h(sp)s
+(eci\014ed)f(n)m(um)m(b)s(er)f(of)i(seconds,)g(the)f
+Ft(-n)g Fu(option)h(will)g(allo)m(w)h(reading)330 2381
+y(only)38 b(a)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)f(of)i(c)m(haracters)h
+(rather)e(than)g(a)h(full)g(line,)i(and)d(the)h Ft(-d)f
+Fu(option)h(will)330 2491 y(read)30 b(un)m(til)h(a)g(particular)f(c)m
+(haracter)i(rather)f(than)f(newline.)225 2628 y Fq(\017)60
+b Fu(The)33 b Ft(return)e Fu(builtin)i(ma)m(y)g(b)s(e)g(used)f(to)i(ab)
+s(ort)f(execution)h(of)f(scripts)g(executed)h(with)f(the)g
+Ft(.)g Fu(or)330 2737 y Ft(source)c Fu(builtins)g(\(see)j(Section)f
+(4.1)g([Bourne)g(Shell)f(Builtins],)h(page)g(43\).)225
+2874 y Fq(\017)60 b Fu(Bash)43 b(includes)g(the)g Ft(shopt)f
+Fu(builtin,)k(for)d(\014ner)f(con)m(trol)j(of)e(shell)h(optional)g
+(capabilities)h(\(see)330 2984 y(Section)c(4.3.2)g([The)f(Shopt)f
+(Builtin],)k(page)d(65\),)k(and)39 b(allo)m(ws)i(these)f(options)h(to)f
+(b)s(e)f(set)i(and)330 3093 y(unset)30 b(at)h(shell)g(in)m(v)m(o)s
+(cation)h(\(see)f(Section)h(6.1)f([In)m(v)m(oking)g(Bash],)g(page)h
+(85\).)225 3230 y Fq(\017)60 b Fu(Bash)45 b(has)f(m)m(uc)m(h)g(more)h
+(optional)h(b)s(eha)m(vior)e(con)m(trollable)j(with)e(the)f
+Ft(set)g Fu(builtin)g(\(see)h(Sec-)330 3340 y(tion)31
+b(4.3.1)h([The)e(Set)h(Builtin],)g(page)g(61\).)225 3477
+y Fq(\017)60 b Fu(The)31 b(`)p Ft(-x)p Fu(')g(\()p Ft(xtrace)p
+Fu(\))g(option)h(displa)m(ys)f(commands)h(other)f(than)h(simple)f
+(commands)g(when)g(p)s(er-)330 3587 y(forming)f(an)g(execution)i(trace)
+f(\(see)h(Section)f(4.3.1)h([The)e(Set)h(Builtin],)g(page)g(61\).)225
+3724 y Fq(\017)60 b Fu(The)28 b Ft(test)g Fu(builtin)h(\(see)h(Section)
+f(4.1)h([Bourne)f(Shell)g(Builtins],)h(page)g(43\))g(is)f(sligh)m(tly)h
+(di\013eren)m(t,)330 3833 y(as)23 b(it)g(implemen)m(ts)f(the)h
+Fm(posix)f Fu(algorithm,)j(whic)m(h)d(sp)s(eci\014es)g(the)h(b)s(eha)m
+(vior)f(based)g(on)h(the)f(n)m(um)m(b)s(er)330 3943 y(of)31
+b(argumen)m(ts.)225 4080 y Fq(\017)60 b Fu(Bash)31 b(includes)g(the)h
+Ft(caller)d Fu(builtin,)j(whic)m(h)f(displa)m(ys)g(the)g(con)m(text)i
+(of)f(an)m(y)g(activ)m(e)h(subroutine)330 4189 y(call)28
+b(\(a)f(shell)f(function)h(or)f(a)h(script)f(executed)h(with)f(the)h
+Ft(.)f Fu(or)g Ft(source)f Fu(builtins\).)39 b(This)26
+b(supp)s(orts)330 4299 y(the)31 b(bash)e(debugger.)225
+4436 y Fq(\017)60 b Fu(The)42 b Ft(trap)f Fu(builtin)h(\(see)i(Section)
+f(4.1)h([Bourne)e(Shell)g(Builtins],)47 b(page)c(43\))h(allo)m(ws)g(a)e
+Ft(DEBUG)330 4545 y Fu(pseudo-signal)c(sp)s(eci\014cation,)i(similar)e
+(to)g Ft(EXIT)p Fu(.)62 b(Commands)36 b(sp)s(eci\014ed)h(with)g(a)h
+Ft(DEBUG)e Fu(trap)330 4655 y(are)k(executed)g(b)s(efore)f(ev)m(ery)h
+(simple)f(command,)j Ft(for)c Fu(command,)k Ft(case)c
+Fu(command,)k Ft(select)330 4765 y Fu(command,)35 b(ev)m(ery)g
+(arithmetic)g Ft(for)e Fu(command,)i(and)f(b)s(efore)g(the)g(\014rst)f
+(command)h(executes)h(in)330 4874 y(a)29 b(shell)g(function.)40
+b(The)28 b Ft(DEBUG)g Fu(trap)g(is)h(not)g(inherited)f(b)m(y)h(shell)g
+(functions)f(unless)g(the)h(function)330 4984 y(has)35
+b(b)s(een)g(giv)m(en)i(the)f Ft(trace)e Fu(attribute)i(or)g(the)g
+Ft(functrace)d Fu(option)j(has)f(b)s(een)g(enabled)g(using)330
+5093 y(the)28 b Ft(shopt)e Fu(builtin.)39 b(The)27 b
+Ft(extdebug)f Fu(shell)i(option)g(has)f(additional)h(e\013ects)h(on)f
+(the)g Ft(DEBUG)e Fu(trap.)330 5230 y(The)21 b Ft(trap)e
+Fu(builtin)i(\(see)h(Section)g(4.1)g([Bourne)f(Shell)g(Builtins],)j
+(page)e(43\))g(allo)m(ws)g(an)f Ft(ERR)f Fu(pseudo-)330
+5340 y(signal)30 b(sp)s(eci\014cation,)h(similar)f(to)g
+Ft(EXIT)f Fu(and)g Ft(DEBUG)p Fu(.)39 b(Commands)28 b(sp)s(eci\014ed)h
+(with)g(an)g Ft(ERR)g Fu(trap)p eop end
+%%Page: 160 166
+TeXDict begin 160 165 bop 150 -116 a Fu(App)s(endix)29
+b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31
+b(The)f(Bourne)g(Shell)1258 b(160)330 299 y(are)40 b(executed)g(after)g
+(a)f(simple)h(command)f(fails,)j(with)d(a)h(few)f(exceptions.)68
+b(The)39 b Ft(ERR)g Fu(trap)g(is)330 408 y(not)g(inherited)f(b)m(y)h
+(shell)g(functions)f(unless)g(the)h Ft(-o)29 b(errtrace)37
+b Fu(option)i(to)g(the)g Ft(set)f Fu(builtin)g(is)330
+518 y(enabled.)330 650 y(The)g Ft(trap)g Fu(builtin)h(\(see)g(Section)h
+(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(43\))g(allo)m(ws)g(a)g
+Ft(RETURN)330 759 y Fu(pseudo-signal)35 b(sp)s(eci\014cation,)j
+(similar)d(to)h Ft(EXIT)e Fu(and)g Ft(DEBUG)p Fu(.)54
+b(Commands)34 b(sp)s(eci\014ed)g(with)h(an)330 869 y
+Ft(RETURN)k Fu(trap)i(are)g(executed)h(b)s(efore)e(execution)i(resumes)
+e(after)h(a)g(shell)g(function)g(or)g(a)g(shell)330 978
+y(script)36 b(executed)g(with)g Ft(.)f Fu(or)h Ft(source)e
+Fu(returns.)56 b(The)35 b Ft(RETURN)f Fu(trap)i(is)g(not)g(inherited)f
+(b)m(y)h(shell)330 1088 y(functions)k(unless)h(the)g(function)f(has)h
+(b)s(een)f(giv)m(en)i(the)f Ft(trace)e Fu(attribute)j(or)e(the)h
+Ft(functrace)330 1198 y Fu(option)31 b(has)f(b)s(een)g(enabled)g(using)
+g(the)g Ft(shopt)f Fu(builtin.)225 1329 y Fq(\017)60
+b Fu(The)30 b(Bash)g Ft(type)f Fu(builtin)h(is)g(more)g(extensiv)m(e)i
+(and)d(giv)m(es)j(more)e(information)h(ab)s(out)f(the)g(names)330
+1439 y(it)h(\014nds)e(\(see)i(Section)g(4.2)h([Bash)e(Builtins],)i
+(page)f(50\).)225 1570 y Fq(\017)60 b Fu(The)27 b(Bash)h
+Ft(umask)e Fu(builtin)h(p)s(ermits)g(a)h Ft(-p)f Fu(option)h(to)h
+(cause)f(the)g(output)f(to)h(b)s(e)f(displa)m(y)m(ed)h(in)g(the)330
+1680 y(form)i(of)h(a)g Ft(umask)f Fu(command)g(that)i(ma)m(y)f(b)s(e)f
+(reused)g(as)h(input)f(\(see)i(Section)f(4.1)h([Bourne)f(Shell)330
+1789 y(Builtins],)g(page)g(43\).)225 1921 y Fq(\017)60
+b Fu(Bash)34 b(implemen)m(ts)h(a)g Ft(csh)p Fu(-lik)m(e)g(directory)f
+(stac)m(k,)j(and)d(pro)m(vides)g(the)g Ft(pushd)p Fu(,)g
+Ft(popd)p Fu(,)g(and)g Ft(dirs)330 2030 y Fu(builtins)g(to)i
+(manipulate)f(it)h(\(see)f(Section)h(6.8)g([The)f(Directory)h(Stac)m
+(k],)i(page)d(96\).)56 b(Bash)35 b(also)330 2140 y(mak)m(es)c(the)g
+(directory)g(stac)m(k)g(visible)g(as)g(the)f(v)-5 b(alue)31
+b(of)g(the)f Ft(DIRSTACK)f Fu(shell)h(v)-5 b(ariable.)225
+2272 y Fq(\017)60 b Fu(Bash)28 b(in)m(terprets)h(sp)s(ecial)g(bac)m
+(kslash-escap)s(ed)g(c)m(haracters)g(in)f(the)h(prompt)e(strings)h
+(when)f(in)m(ter-)330 2381 y(activ)m(e)33 b(\(see)e(Section)g(6.9)h
+([Con)m(trolling)f(the)g(Prompt],)f(page)h(97\).)225
+2513 y Fq(\017)60 b Fu(The)46 b(Bash)h(restricted)g(mo)s(de)f(is)h
+(more)f(useful)g(\(see)h(Section)h(6.10)g([The)e(Restricted)i(Shell],)
+330 2622 y(page)31 b(99\);)h(the)f(SVR4.2)g(shell)f(restricted)h(mo)s
+(de)f(is)h(to)s(o)g(limited.)225 2754 y Fq(\017)60 b
+Fu(The)30 b Ft(disown)f Fu(builtin)h(can)h(remo)m(v)m(e)h(a)f(job)f
+(from)g(the)h(in)m(ternal)g(shell)g(job)f(table)i(\(see)f(Section)h
+(7.2)330 2863 y([Job)e(Con)m(trol)h(Builtins],)g(page)g(104\))g(or)g
+(suppress)d(the)i(sending)g(of)g Ft(SIGHUP)e Fu(to)j(a)g(job)f(when)f
+(the)330 2973 y(shell)i(exits)g(as)f(the)h(result)f(of)h(a)f
+Ft(SIGHUP)p Fu(.)225 3104 y Fq(\017)60 b Fu(Bash)31 b(includes)f(a)g(n)
+m(um)m(b)s(er)f(of)i(features)g(to)g(supp)s(ort)d(a)j(separate)g
+(debugger)f(for)h(shell)f(scripts.)225 3236 y Fq(\017)60
+b Fu(The)28 b(SVR4.2)h(shell)f(has)g(t)m(w)m(o)i(privilege-related)g
+(builtins)e(\()p Ft(mldmode)e Fu(and)i Ft(priv)p Fu(\))f(not)i(presen)m
+(t)f(in)330 3346 y(Bash.)225 3477 y Fq(\017)60 b Fu(Bash)31
+b(do)s(es)f(not)g(ha)m(v)m(e)i(the)e Ft(stop)g Fu(or)g
+Ft(newgrp)f Fu(builtins.)225 3609 y Fq(\017)60 b Fu(Bash)31
+b(do)s(es)f(not)g(use)g(the)h Ft(SHACCT)d Fu(v)-5 b(ariable)32
+b(or)e(p)s(erform)f(shell)i(accoun)m(ting.)225 3740 y
+Fq(\017)60 b Fu(The)30 b(SVR4.2)h Ft(sh)f Fu(uses)g(a)g
+Ft(TIMEOUT)f Fu(v)-5 b(ariable)31 b(lik)m(e)h(Bash)e(uses)g
+Ft(TMOUT)p Fu(.)150 3894 y(More)h(features)g(unique)e(to)i(Bash)g(ma)m
+(y)g(b)s(e)f(found)f(in)h(Chapter)f(6)i([Bash)g(F)-8
+b(eatures],)32 b(page)f(85.)150 4128 y Fs(B.1)67 b(Implemen)l(tation)48
+b(Di\013erences)e(F)-11 b(rom)44 b(The)h(SVR4.2)g(Shell)150
+4288 y Fu(Since)33 b(Bash)h(is)f(a)g(completely)i(new)e(implemen)m
+(tation,)j(it)e(do)s(es)e(not)i(su\013er)e(from)h(man)m(y)g(of)h(the)f
+(limi-)150 4397 y(tations)f(of)e(the)h(SVR4.2)g(shell.)41
+b(F)-8 b(or)31 b(instance:)225 4529 y Fq(\017)60 b Fu(Bash)32
+b(do)s(es)f(not)h(fork)f(a)h(subshell)e(when)h(redirecting)h(in)m(to)h
+(or)e(out)h(of)g(a)g(shell)f(con)m(trol)i(structure)330
+4639 y(suc)m(h)d(as)h(an)f Ft(if)g Fu(or)g Ft(while)f
+Fu(statemen)m(t.)225 4770 y Fq(\017)60 b Fu(Bash)29 b(do)s(es)f(not)h
+(allo)m(w)h(un)m(balanced)f(quotes.)41 b(The)28 b(SVR4.2)h(shell)g
+(will)g(silen)m(tly)i(insert)d(a)h(needed)330 4880 y(closing)g(quote)g
+(at)f Ft(EOF)f Fu(under)g(certain)h(circumstances.)41
+b(This)27 b(can)h(b)s(e)g(the)g(cause)g(of)g(some)h(hard-)330
+4989 y(to-\014nd)h(errors.)225 5121 y Fq(\017)60 b Fu(The)45
+b(SVR4.2)h(shell)f(uses)g(a)g(baro)s(que)g(memory)g(managemen)m(t)i(sc)
+m(heme)e(based)g(on)g(trapping)330 5230 y Ft(SIGSEGV)p
+Fu(.)57 b(If)35 b(the)i(shell)f(is)h(started)g(from)e(a)i(pro)s(cess)f
+(with)g Ft(SIGSEGV)e Fu(blo)s(c)m(k)m(ed)k(\(e.g.,)h(b)m(y)d(using)330
+5340 y(the)31 b Ft(system\(\))d Fu(C)i(library)g(function)g(call\),)i
+(it)f(misb)s(eha)m(v)m(es)g(badly)-8 b(.)p eop end
+%%Page: 161 167
+TeXDict begin 161 166 bop 150 -116 a Fu(App)s(endix)29
+b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31
+b(The)f(Bourne)g(Shell)1258 b(161)225 299 y Fq(\017)60
+b Fu(In)30 b(a)i(questionable)g(attempt)g(at)g(securit)m(y)-8
+b(,)33 b(the)e(SVR4.2)h(shell,)g(when)e(in)m(v)m(ok)m(ed)j(without)e
+(the)h Ft(-p)330 408 y Fu(option,)39 b(will)d(alter)i(its)e(real)h(and)
+f(e\013ectiv)m(e)j Fm(uid)d Fu(and)g Fm(gid)h Fu(if)f(they)h(are)f
+(less)h(than)f(some)h(magic)330 518 y(threshold)30 b(v)-5
+b(alue,)31 b(commonly)g(100.)42 b(This)29 b(can)i(lead)g(to)g(unexp)s
+(ected)f(results.)225 653 y Fq(\017)60 b Fu(The)30 b(SVR4.2)h(shell)g
+(do)s(es)f(not)g(allo)m(w)i(users)e(to)h(trap)f Ft(SIGSEGV)p
+Fu(,)f Ft(SIGALRM)p Fu(,)f(or)j Ft(SIGCHLD)p Fu(.)225
+787 y Fq(\017)60 b Fu(The)34 b(SVR4.2)h(shell)g(do)s(es)g(not)f(allo)m
+(w)j(the)d Ft(IFS)p Fu(,)h Ft(MAILCHECK)p Fu(,)f Ft(PATH)p
+Fu(,)h Ft(PS1)p Fu(,)g(or)f Ft(PS2)g Fu(v)-5 b(ariables)35
+b(to)330 897 y(b)s(e)30 b(unset.)225 1031 y Fq(\017)60
+b Fu(The)30 b(SVR4.2)h(shell)g(treats)g(`)p Ft(^)p Fu(')f(as)h(the)g
+(undo)s(cumen)m(ted)e(equiv)-5 b(alen)m(t)31 b(of)g(`)p
+Ft(|)p Fu('.)225 1166 y Fq(\017)60 b Fu(Bash)37 b(allo)m(ws)h(m)m
+(ultiple)f(option)g(argumen)m(ts)g(when)e(it)i(is)g(in)m(v)m(ok)m(ed)h
+(\()p Ft(-x)30 b(-v)p Fu(\);)40 b(the)c(SVR4.2)i(shell)330
+1275 y(allo)m(ws)c(only)f(one)g(option)g(argumen)m(t)g(\()p
+Ft(-xv)p Fu(\).)47 b(In)32 b(fact,)i(some)f(v)m(ersions)g(of)g(the)g
+(shell)f(dump)f(core)330 1385 y(if)f(the)h(second)f(argumen)m(t)h(b)s
+(egins)f(with)g(a)h(`)p Ft(-)p Fu('.)225 1519 y Fq(\017)60
+b Fu(The)26 b(SVR4.2)i(shell)f(exits)g(a)g(script)g(if)g(an)m(y)g
+(builtin)f(fails;)j(Bash)e(exits)g(a)g(script)g(only)g(if)g(one)g(of)g
+(the)330 1629 y Fm(posix)34 b Fu(sp)s(ecial)h(builtins)f(fails,)i(and)e
+(only)h(for)f(certain)h(failures,)h(as)f(en)m(umerated)g(in)f(the)h
+Fm(posix)330 1738 y Fu(standard.)225 1873 y Fq(\017)60
+b Fu(The)30 b(SVR4.2)h(shell)g(b)s(eha)m(v)m(es)f(di\013eren)m(tly)h
+(when)f(in)m(v)m(ok)m(ed)i(as)e Ft(jsh)g Fu(\(it)h(turns)e(on)h(job)g
+(con)m(trol\).)p eop end
+%%Page: 162 168
+TeXDict begin 162 167 bop 3614 -116 a Fu(162)150 299
+y Fp(App)t(endix)52 b(C)81 b(GNU)54 b(F)-13 b(ree)53
+b(Do)t(cumen)l(tation)e(License)1359 502 y Fu(V)-8 b(ersion)31
+b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 635 y(Cop)m(yrigh)m(t)842
+632 y(c)817 635 y Fq(\015)e Fu(2000,)j(2001,)f(2002,)g(2007,)h(2008)f
+(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31
+b(Inc.)390 745 y Ft(http://fsf.org/)390 964 y Fu(Ev)m(ery)m(one)g(is)g
+(p)s(ermitted)f(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)
+390 1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j
+(it)f(is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330
+1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g
+(a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330
+1450 y(useful)29 b(do)s(cumen)m(t)h Fr(free)36 b Fu(in)29
+b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j
+(the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f
+(redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i
+(either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8
+b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f
+(the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778
+y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g
+(considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330
+1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a)
+h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5
+b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330
+2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g
+(sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330
+2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed)
+e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31
+b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h
+(for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330
+2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:)
+65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330
+2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w)
+m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g
+(to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g
+(for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5
+b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i
+(a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h
+(License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d
+(is)j(instruction)f(or)g(reference.)199 3054 y(1.)61
+b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39
+b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i
+(in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297
+y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying)
+h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330
+3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f
+(a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d
+(in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j
+(conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330
+3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h
+(or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g
+(a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40
+b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8
+b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330
+3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop)
+m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8
+b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f
+(con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f
+(of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s
+(di\014cations)f(and/or)h(translated)g(in)m(to)330 4197
+y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is)
+f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f
+(the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e
+(the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f
+(Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m
+(erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con)
+m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f
+(that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42
+b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330
+4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section)
+h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40
+b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e
+(historical)i(connection)f(with)f(the)h(sub)5 b(ject)27
+b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i
+(commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s
+(osition)f(regarding)330 5097 y(them.)330 5230 y(The)25
+b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g
+(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330
+5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27
+b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s
+(cumen)m(t)g(is)g(released)p eop end
+%%Page: 163 169
+TeXDict begin 163 168 bop 150 -116 a Fu(App)s(endix)29
+b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560
+b(163)330 299 y(under)26 b(this)i(License.)40 b(If)27
+b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h
+(de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408
+y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5
+b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero)
+e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25
+b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v)
+-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330
+669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short)
+g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8
+b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er)
+j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f
+(Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40
+b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26
+b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m
+(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m
+(ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g
+(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8
+b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s
+(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g
+(public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s
+(cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors)
+f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g
+(generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g
+(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587
+y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g
+(formatters)f(or)g(for)g(automatic)i(translation)f(to)330
+1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input)
+g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g
+(otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g
+(whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f
+(arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g
+(subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8
+b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35
+b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g
+(substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g
+(is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i
+(\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T)
+-8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fm(asci)r(i)g
+Fu(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j
+(LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j
+Ff(SGML)f Fu(or)f Ff(XML)g Fu(using)g(a)g(publicly)330
+2504 y(a)m(v)-5 b(ailable)42 b Ff(DTD)p Fu(,)h(and)c
+(standard-conforming)g(simple)h Ff(HTML)p Fu(,)i(P)m(ostScript)e(or)f
+Ff(PDF)h Fu(designed)330 2614 y(for)e(h)m(uman)f(mo)s(di\014cation.)65
+b(Examples)38 b(of)h(transparen)m(t)f(image)h(formats)g(include)f
+Ff(PNG)p Fu(,)i Ff(X)n(CF)330 2724 y Fu(and)e Ff(JPG)p
+Fu(.)64 b(Opaque)38 b(formats)h(include)f(proprietary)h(formats)f(that)
+h(can)g(b)s(e)f(read)h(and)f(edited)330 2833 y(only)54
+b(b)m(y)f(proprietary)h(w)m(ord)f(pro)s(cessors,)59 b
+Ff(SGML)54 b Fu(or)f Ff(XML)h Fu(for)g(whic)m(h)f(the)h
+Ff(DTD)g Fu(and/or)330 2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g
+(generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m
+(hine-generated)j Ff(HTML)p Fu(,)330 3052 y(P)m(ostScript)31
+b(or)f Ff(PDF)h Fu(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s
+(cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330
+3203 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m(ted)f(b)
+s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f(follo)m
+(wing)330 3313 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8
+b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f
+(in)h(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28
+b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e
+(title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330
+3532 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s
+(earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330
+3641 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330
+3792 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit)
+m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330
+3902 y(to)c(the)g(public.)330 4052 y(A)f(section)h(\\En)m(titled)g
+(XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h
+(whose)e(title)i(either)330 4162 y(is)d(precisely)g(XYZ)g(or)f(con)m
+(tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f
+(translates)h(XYZ)e(in)330 4271 y(another)e(language.)40
+b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f
+(men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4381 y(as)i(\\Ac)m(kno)m
+(wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f
+(\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4491
+y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s
+(dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330
+4600 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g
+(de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W)
+-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m
+(h)e(states)i(that)330 4861 y(this)34 b(License)g(applies)g(to)h(the)f
+(Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36
+b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m
+(y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f
+(disclaiming)i(w)m(arran)m(ties:)330 5080 y(an)m(y)e(other)g
+(implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39
+b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330
+5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199
+5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end
+%%Page: 164 170
+TeXDict begin 164 169 bop 150 -116 a Fu(App)s(endix)29
+b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560
+b(164)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h
+(the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h
+(or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42
+b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j
+(and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e
+(License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e
+(in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h
+(other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f
+(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330
+737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h
+(the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330
+847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28
+b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d
+(copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f
+(n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g
+(the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200
+y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g
+(conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g
+(publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443
+y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25
+b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g
+(that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330
+1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f
+(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330
+1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i
+(the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36
+b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m
+(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41
+b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44
+b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330
+2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m)
+m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f
+(the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34
+b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i
+(with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e
+(prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g
+(other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330
+2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v)
+m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the)
+330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d
+(b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330
+2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e
+(either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g
+(legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f
+(ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the)
+g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330
+2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051
+y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f
+(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330
+3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g
+(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque)
+330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h
+(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d
+(whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e
+(has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m
+(ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8
+b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g
+(added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h
+(option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e
+(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g
+(Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38
+b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330
+3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s
+(cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h
+(time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i
+(\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h
+(of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330
+4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g
+(con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330
+4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s
+(er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m
+(vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g
+(the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8
+b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a)
+h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under)
+e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v)
+m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f
+(V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29
+b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30
+b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f
+(licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h
+(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s
+(ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30
+b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s
+(di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33
+b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e
+(an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510
+5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m
+(ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8
+b(,)p eop end
+%%Page: 165 171
+TeXDict begin 165 170 bop 150 -116 a Fu(App)s(endix)29
+b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560
+b(165)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g
+(the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same)
+h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original)
+i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360
+545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h
+(one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c
+(for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g
+(Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h
+(\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s
+(cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g
+(few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g
+(y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60
+b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g
+(publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32
+b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31
+b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.)
+363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i
+(notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g
+(other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641
+y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g
+(notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510
+1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8
+b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g
+(form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353
+1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f
+(full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e
+(required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f
+(the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244
+y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.)
+392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g
+(\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g
+(item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d
+(authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8
+b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45
+b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e
+(the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f
+(title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s
+(cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i
+(then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8
+b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m
+(tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s
+(cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m
+(t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30
+b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net)
+m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m
+(t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45
+b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395
+y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net)
+m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h
+(published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e
+(the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher)
+d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s
+(ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m
+(titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k
+(Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d
+(preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone)
+h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m
+(wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368
+4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5
+b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f
+(in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58
+b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5
+b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510
+4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33
+b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42
+b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510
+4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357
+4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f
+(to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g
+(in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31
+b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8
+b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g
+(V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f
+(app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g
+(Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h
+(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h
+(designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5
+b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p
+eop end
+%%Page: 166 172
+TeXDict begin 166 171 bop 150 -116 a Fu(App)s(endix)29
+b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560
+b(166)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5
+b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8
+b(ersion's)36 b(license)g(notice.)57 b(These)330 408
+y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g
+(section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section)
+i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g
+(nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s
+(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30
+b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770
+y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro)
+m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330
+880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8
+b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m
+(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8
+b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e
+(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i
+(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s
+(di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f
+(F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m
+(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351
+y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\))
+g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t)
+g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g
+(same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m
+(y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m
+(y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g
+(not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the)
+f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e
+(publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330
+1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s
+(cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s
+(ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g
+(for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g
+(Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61
+b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m
+(bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h
+(released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g
+(de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f
+(v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655
+y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5
+b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s
+(cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g
+(as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined)
+g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32
+b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8
+b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m
+(ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,)
+i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5
+b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h
+(single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m
+(v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g
+(but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f
+(eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f
+(at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g
+(the)g(original)h(author)f(or)330 3455 y(publisher)23
+b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m
+(um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330
+3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5
+b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h
+(com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m
+(bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g
+(En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330
+3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h
+(En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330
+4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31
+b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47
+b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m
+(titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28
+b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f
+(collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g
+(do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k
+(and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f
+(the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single)
+g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48
+b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38
+b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g
+(of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330
+4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32
+b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h
+(collection,)i(and)d(distribute)g(it)h(individu-)330
+5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g
+(a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330
+5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g
+(other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330
+5340 y(that)d(do)s(cumen)m(t.)p eop end
+%%Page: 167 173
+TeXDict begin 167 172 bop 150 -116 a Fu(App)s(endix)29
+b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560
+b(167)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h
+(W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f
+(its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep)
+s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h
+(on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g
+(is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i
+(resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g
+(the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e
+(b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39
+b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g
+(aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g
+(other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h
+(not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h
+(Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8
+b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f
+(these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241
+y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f
+(of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m
+(er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m
+(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h
+(aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5
+b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f
+(in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330
+1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f
+(brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61
+b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a)
+i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e
+(translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h
+(terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5
+b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f
+(sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i
+(holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24
+b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25
+b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330
+2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44
+b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f
+(License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the)
+h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42
+b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513
+y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g
+(License)h(and)e(the)h(original)h(v)m(ersions)g(of)330
+2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33
+b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f
+(translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f
+(License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m
+(ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28
+b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m
+(kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330
+3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m
+(e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330
+3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61
+b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8
+b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h
+(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38
+b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g
+(cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330
+3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically)
+i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330
+3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i
+(of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h
+(particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h
+(\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g
+(cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h
+(terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8
+b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34
+b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h
+(reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288
+y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d
+(license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h
+(reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h
+(holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g
+(reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m
+(ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f
+(License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330
+4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g
+(violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h
+(of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28
+b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h
+(terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38
+b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g
+(under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e)
+330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g
+(reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f
+(the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f
+(an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end
+%%Page: 168 174
+TeXDict begin 168 173 bop 150 -116 a Fu(App)s(endix)29
+b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560
+b(168)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)
+330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8
+b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g
+(the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34
+b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31
+b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330
+653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f
+(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330
+762 y(See)c Ft(http://www.gnu.org/copy)o(left)o(/)p Fu(.)330
+897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g
+(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29
+b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g
+(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h
+(\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33
+b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i
+(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330
+1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m
+(ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g
+(b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8
+b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s
+(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445
+y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m
+(ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the)
+h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46
+b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f
+(can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f
+(License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen)
+m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m
+(tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g
+(for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330
+2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or)
+e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330
+2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m
+(table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h
+(facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g
+(w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i
+(edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33
+b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s
+(oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330
+2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m
+(orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330
+2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m
+(ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330
+2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a)
+g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330
+2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29
+b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions)
+f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g
+(organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e
+(or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h
+(as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330
+3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h
+(licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330
+3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h
+(License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330
+3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f
+(part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts)
+330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j
+(w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s
+(er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h
+(Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site)
+g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g
+(time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is)
+330 4005 y(eligible)h(for)e(relicensing.)p eop end
+%%Page: 169 175
+TeXDict begin 169 174 bop 150 -116 a Fu(App)s(endix)29
+b(C:)h(GNU)h(F)-8 b(ree)31 b(Do)s(cumen)m(tation)i(License)1560
+b(169)150 299 y Fs(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f
+(for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fu(T)-8 b(o)35
+b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e)
+i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150
+568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh)
+m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468
+680 y Fe(Copyright)42 b(\(C\))79 b Fd(year)g(your)40
+b(name)p Fe(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h
+(distribute)g(and/or)g(modify)f(this)g(document)468 854
+y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i
+(License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h
+(published)h(by)d(the)h(Free)g(Software)h(Foundation;)468
+1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g
+(and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f
+(license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468
+1203 y(Free)g(Documentation)h(License''.)275 1337 y Fu(If)d(y)m(ou)h
+(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8
+b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k
+(T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6
+b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547
+1559 y Fe(with)40 b(the)g(Invariant)h(Sections)g(being)g
+Fd(list)f(their)g(titles)p Fe(,)h(with)547 1646 y(the)f(Front-Cover)i
+(Texts)e(being)g Fd(list)p Fe(,)h(and)f(with)g(the)g(Back-Cover)h
+(Texts)547 1733 y(being)f Fd(list)p Fe(.)275 1868 y Fu(If)34
+b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f
+(Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g
+(of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g
+(alternativ)m(es)i(to)e(suit)f(the)h(situation.)275 2112
+y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g
+(examples)g(of)f(program)f(co)s(de,)j(w)m(e)e(recommend)g(releasing)150
+2222 y(these)44 b(examples)f(in)g(parallel)h(under)e(y)m(our)h(c)m
+(hoice)i(of)e(free)g(soft)m(w)m(are)h(license,)k(suc)m(h)43
+b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s
+(ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p
+eop end
+%%Page: 170 176
+TeXDict begin 170 175 bop 3614 -116 a Fu(170)150 299
+y Fp(App)t(endix)52 b(D)81 b(Indexes)150 639 y Fs(D.1)68
+b(Index)45 b(of)g(Shell)g(Builtin)g(Commands)146 806
+y(.)150 923 y Fe(.)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)33 b Fb(43)146 1163 y Fs(:)150 1280 y Fe(:)19 b Fc(:)13
+b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(43)146
+1523 y Fs([)150 1640 y Fe([)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)33 b Fb(47)146 1881 y Fs(A)150 1998 y Fe(alias)9
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(50)146 2239 y
+Fs(B)150 2356 y Fe(bg)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)29
+b Fb(104)150 2443 y Fe(bind)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(50)150 2531 y Fe(break)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23
+b Fb(44)150 2618 y Fe(builtin)f Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35
+b Fb(52)146 2859 y Fs(C)150 2976 y Fe(caller)6 b Fc(:)15
+b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)20 b Fb(52)150 3063 y Fe(cd)c Fc(:)e(:)f(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)31 b Fb(44)150 3151 y Fe(command)22
+b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)35 b Fb(52)150 3238 y Fe(compgen)18
+b Fc(:)d(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)33 b Fb(134)150 3326 y Fe(complete)16
+b Fc(:)f(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)31 b Fb(134)150 3413 y Fe(compopt)18 b Fc(:)d(:)e(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)33
+b Fb(137)150 3501 y Fe(continue)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b
+Fb(44)146 3741 y Fs(D)150 3858 y Fe(declare)22 b Fc(:)13
+b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)35 b Fb(52)150 3946 y Fe(dirs)11 b Fc(:)j(:)f(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)25 b Fb(96)150 4033 y Fe(disown)d Fc(:)13
+b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)36 b Fb(105)146 4274 y Fs(E)150 4391 y Fe(echo)11
+b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b Fb(54)150 4478
+y Fe(enable)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 b Fb(55)150
+4566 y Fe(eval)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(44)150 4653 y Fe(exec)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(45)150 4741 y Fe(exit)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(45)150 4828 y Fe(export)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20
+b Fb(45)146 5080 y Fs(F)150 5197 y Fe(fc)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)29 b Fb(142)150 5284 y Fe(fg)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)29 b Fb(104)2021 871 y Fs(G)2025 988 y Fe(getopts)22
+b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)35 b Fb(45)2021 1250 y Fs(H)2025
+1369 y Fe(hash)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
+b Fb(46)2025 1457 y Fe(help)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
+b Fb(55)2025 1544 y Fe(history)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b
+Fb(142)2021 1806 y Fs(J)2025 1924 y Fe(jobs)9 b Fc(:)14
+b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(104)2021 2186 y Fs(K)2025
+2303 y Fe(kill)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24
+b Fb(105)2021 2554 y Fs(L)2025 2672 y Fe(let)14 b Fc(:)f(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)28 b Fb(55)2025 2760 y Fe(local)9 b Fc(:)14
+b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(55)2025 2848 y Fe(logout)6
+b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(56)2021 3110 y Fs(M)2025
+3227 y Fe(mapfile)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(56)2021
+3489 y Fs(P)2025 3608 y Fe(popd)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
+b Fb(96)2025 3696 y Fe(printf)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21
+b Fb(56)2025 3784 y Fe(pushd)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23
+b Fb(97)2025 3871 y Fe(pwd)14 b Fc(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28
+b Fb(46)2021 4133 y Fs(R)2025 4251 y Fe(read)11 b Fc(:)j(:)f(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)26 b Fb(57)2025 4339 y Fe(readarray)15 b
+Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)30 b Fb(59)2025 4427 y Fe(readonly)18 b Fc(:)d(:)e(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33
+b Fb(46)2025 4515 y Fe(return)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21
+b Fb(47)2021 4765 y Fs(S)2025 4884 y Fe(set)14 b Fc(:)f(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)28 b Fb(61)2025 4972 y Fe(shift)9 b Fc(:)14
+b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(47)2025 5060 y Fe(shopt)9
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(65)2025 5148
+y Fe(source)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(59)2025
+5235 y Fe(suspend)d Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(106)p eop end
+%%Page: 171 177
+TeXDict begin 171 176 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(171)146 294 y Fs(T)150 410 y Fe(test)11
+b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b Fb(47)150 497
+y Fe(times)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(49)150
+584 y Fe(trap)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(49)150 671 y Fe(type)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(59)150 758 y Fe(typeset)d Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35
+b Fb(59)146 1003 y Fs(U)150 1119 y Fe(ulimit)6 b Fc(:)15
+b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)20 b Fb(59)150 1206 y Fe(umask)9
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(50)150 1293 y
+Fe(unalias)f Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(61)150 1380 y
+Fe(unset)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(50)2021
+294 y Fs(W)2025 433 y Fe(wait)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24
+b Fb(105)150 2133 y Fs(D.2)68 b(Index)45 b(of)g(Shell)g(Reserv)l(ed)h
+(W)-11 b(ords)146 2704 y(!)150 2820 y Fe(!)21 b Fc(:)13
+b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(8)146
+3056 y Fs([)150 3172 y Fe([[)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)31 b Fb(12)146 3414 y Fs(])150 3530 y Fe(]])16 b
+Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(12)146
+3770 y Fa({)150 3886 y Fe({)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)33 b Fb(15)146 4125 y Fa(})150 4241 y Fe(})19
+b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b
+Fb(15)146 4475 y Fs(C)150 4591 y Fe(case)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)25 b Fb(11)146 4825 y Fs(D)150 4941 y Fe(do)16
+b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(10)150
+5028 y Fe(done)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(10)146 5261 y Fs(E)150 5377 y Fe(elif)11 b Fc(:)j(:)f(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)25 b Fb(11)150 5465 y Fe(else)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)25 b Fb(11)150 5552 y Fe(esac)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)25 b Fb(11)2021 2703 y Fs(F)2025 2836 y Fe(fi)16
+b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)31 b Fb(11)2025
+2928 y Fe(for)14 b Fc(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28
+b Fb(10)2025 3015 y Fe(function)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b
+Fb(17)2021 3359 y Fs(I)2025 3491 y Fe(if)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)31 b Fb(11)2025 3578 y Fe(in)16 b Fc(:)e(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)31 b Fb(11)2021 3921 y Fs(S)2025
+4048 y Fe(select)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b
+Fb(12)2021 4392 y Fs(T)2025 4524 y Fe(then)11 b Fc(:)j(:)f(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)26 b Fb(11)2025 4611 y Fe(time)13 b Fc(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)28 b Fb(8)2021 4954 y Fs(U)2025 5081 y
+Fe(until)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(10)2021
+5425 y Fs(W)2025 5552 y Fe(while)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23
+b Fb(10)p eop end
+%%Page: 172 178
+TeXDict begin 172 177 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(172)150 299 y Fs(D.3)68 b(P)l(arameter)47
+b(and)d(V)-11 b(ariable)46 b(Index)146 955 y(!)150 1073
+y Fe(!)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33
+b Fb(22)146 1327 y Fs(#)150 1445 y Fe(#)19 b Fc(:)13
+b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(21)146
+1701 y Fs($)150 1820 y Fe($)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)33 b Fb(22)150 1909 y Fe($!)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)31 b Fb(22)150 1997 y Fe($#)16 b Fc(:)e(:)f(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)31 b Fb(21)150 2085 y Fe($$)16 b Fc(:)e(:)f(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(22)150 2173 y Fe($*)16
+b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(21)150
+2261 y Fe($-)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31
+b Fb(22)150 2350 y Fe($?)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+31 b Fb(21)150 2438 y Fe($@)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)31 b Fb(21)150 2526 y Fe($_)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)31 b Fb(22)150 2613 y Fe($0)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)31 b Fb(22)146 2876 y Fs(*)150 2994 y Fe(*)19
+b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b
+Fb(21)146 3248 y Fs({)150 3366 y Fe(-)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)33 b Fb(22)146 3620 y Fs(?)150 3738
+y Fe(?)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33
+b Fb(21)146 3992 y Fs(@)150 4110 y Fe(@)19 b Fc(:)13
+b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(21)p
+156 4364 41 6 v 150 4482 a Fe(_)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)33 b Fb(22)146 4736 y Fs(0)150 4854 y
+Fe(0)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33
+b Fb(22)146 5108 y Fs(A)150 5226 y Fe(auto_resume)8 b
+Fc(:)16 b(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+23 b Fb(106)2021 954 y Fs(B)2025 1074 y Fe(BASH)11 b
+Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(73)2025 1163
+y Fe(BASH_ALIASES)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)22 b Fb(74)2025 1251 y Fe(BASH_ARGC)15
+b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)30 b Fb(74)2025 1340 y Fe(BASH_ARGV)15 b Fc(:)g(:)f(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30
+b Fb(74)2025 1429 y Fe(BASH_ARGV0)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(74)2025
+1517 y Fe(BASH_CMDS)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(75)2025 1606
+y Fe(BASH_COMMAND)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)22 b Fb(75)2025 1695 y Fe(BASH_COMPAT)10
+b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)25 b Fb(75)2025 1783 y Fe(BASH_ENV)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33
+b Fb(75)2025 1872 y Fe(BASH_EXECUTION_STRING)24 b Fc(:)13
+b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)34 b Fb(75)2025 1960 y Fe(BASH_LINENO)10
+b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)25 b Fb(75)2025 2049 y Fe(BASH_LOADABLES_PATH)7 b
+Fc(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(75)2025
+2138 y Fe(BASH_REMATCH)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(75)2025 2226 y Fe(BASH_SOURCE)10
+b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)25 b Fb(76)2025 2315 y Fe(BASH_SUBSHELL)g Fc(:)13
+b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37
+b Fb(76)2025 2403 y Fe(BASH_VERSINFO)25 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(76)2025 2492
+y Fe(BASH_VERSION)8 b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)22 b Fb(76)2025 2581 y Fe(BASH_XTRACEFD)j
+Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37
+b Fb(76)2025 2669 y Fe(BASHOPTS)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b
+Fb(74)2025 2758 y Fe(BASHPID)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35
+b Fb(74)2025 2847 y Fe(bell-style)11 b Fc(:)k(:)e(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)26 b Fb(111)2025
+2935 y Fe(bind-tty-special-chars)14 b Fc(:)k(:)13 b(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)29
+b Fb(111)2025 3022 y Fe(blink-matching-paren)24 b Fc(:)13
+b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)34 b Fb(111)2021 3297 y Fs(C)2025
+3417 y Fe(CDPATH)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b
+Fb(73)2025 3506 y Fe(CHILD_MAX)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(76)2025
+3595 y Fe(colored-completion-prefix)7 b Fc(:)18 b(:)13
+b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22
+b Fb(111)2025 3683 y Fe(colored-stats)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(111)2025 3772 y Fe(COLUMNS)22
+b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)35 b Fb(76)2025 3860 y Fe(comment-begin)23
+b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35
+b Fb(111)2025 3949 y Fe(COMP_CWORD)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(77)2025
+4038 y Fe(COMP_KEY)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(77)2025 4126
+y Fe(COMP_LINE)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(77)2025 4215 y Fe(COMP_POINT)13
+b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)27 b Fb(77)2025 4303 y Fe(COMP_TYPE)15 b Fc(:)g(:)f(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30
+b Fb(77)2025 4392 y Fe(COMP_WORDBREAKS)17 b Fc(:)g(:)c(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(77)2025 4481 y Fe(COMP_WORDS)13
+b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)27 b Fb(77)2025 4569 y Fe(completion-display-width)9
+b Fc(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)24 b Fb(111)2025 4658 y Fe(completion-ignore-case)14
+b Fc(:)k(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)29 b Fb(112)2025 4747 y Fe(completion-map-case)d
+Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(112)2025 4835
+y Fe(completion-prefix-display-leng)q(th)29 b Fc(:)13
+b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b Fb(112)2025 4924
+y Fe(completion-query-items)14 b Fc(:)k(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)29
+b Fb(112)2025 5012 y Fe(COMPREPLY)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b
+Fb(77)2025 5101 y Fe(convert-meta)25 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(112)2025 5188
+y Fe(COPROC)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(77)p
+eop end
+%%Page: 173 179
+TeXDict begin 173 178 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(173)146 294 y Fs(D)150 416 y Fe(DIRSTACK)18
+b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)32 b Fb(78)150 503 y Fe(disable-completion)7
+b Fc(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(112)146
+791 y Fs(E)150 913 y Fe(echo-control-characters)12 b
+Fc(:)18 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)26 b Fb(112)150 1002 y Fe(editing-mode)f
+Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)37
+b Fb(112)150 1092 y Fe(emacs-mode-string)10 b Fc(:)17
+b(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)25 b Fb(112)150 1181
+y Fe(EMACS)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(78)150
+1270 y Fe(enable-bracketed-paste)14 b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29
+b Fb(113)150 1359 y Fe(enable-keypad)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(113)150 1449 y Fe(ENV)14
+b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 b Fb(78)150
+1538 y Fe(EPOCHREALTIME)d Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)37 b Fb(78)150 1627 y Fe(EPOCHSECONDS)8
+b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+22 b Fb(78)150 1716 y Fe(EUID)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(78)150 1806 y Fe(EXECIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(78)150
+1893 y Fe(expand-tilde)e Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)37 b Fb(113)146 2180 y Fs(F)150 2303
+y Fe(FCEDIT)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 b Fb(78)150
+2392 y Fe(FIGNORE)i Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(78)150
+2481 y Fe(FUNCNAME)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(78)150 2568
+y Fe(FUNCNEST)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(79)146 2844 y
+Fs(G)150 2967 y Fe(GLOBIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(79)150
+3054 y Fe(GROUPS)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)20 b
+Fb(79)146 3330 y Fs(H)150 3452 y Fe(histchars)15 b Fc(:)h(:)d(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)30
+b Fb(79)150 3542 y Fe(HISTCMD)22 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35
+b Fb(79)150 3631 y Fe(HISTCONTROL)10 b Fc(:)16 b(:)d(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(79)150
+3720 y Fe(HISTFILE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(80)150 3809
+y Fe(HISTFILESIZE)8 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)22 b Fb(80)150 3899 y Fe(HISTIGNORE)13
+b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)27 b Fb(80)150 3988 y Fe(history-preserve-point)14
+b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)29 b Fb(113)150 4077 y Fe(history-size)c
+Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)37
+b Fb(113)150 4166 y Fe(HISTSIZE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b
+Fb(80)150 4256 y Fe(HISTTIMEFORMAT)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(80)150 4345 y Fe(HOME)11
+b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b Fb(73)150 4434
+y Fe(horizontal-scroll-mode)14 b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(113)150
+4523 y Fe(HOSTFILE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(80)150 4613
+y Fe(HOSTNAME)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(80)150 4700 y
+Fe(HOSTTYPE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)32 b Fb(81)2021 294 y Fs(I)2025
+420 y Fe(IFS)14 b Fc(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28
+b Fb(73)2025 510 y Fe(IGNOREEOF)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(81)2025
+600 y Fe(input-meta)11 b Fc(:)k(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)26 b Fb(114)2025 691 y Fe(INPUTRC)c
+Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)35 b Fb(81)2025 781 y Fe(INSIDE_EMACS)8
+b Fc(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+22 b Fb(81)2025 868 y Fe(isearch-terminators)k Fc(:)13
+b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(114)2021 1167 y Fs(K)2025
+1290 y Fe(keymap)22 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 b Fb(114)2021
+1601 y Fs(L)2025 1727 y Fe(LANG)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
+b Fb(81)2025 1817 y Fe(LC_ALL)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21
+b Fb(81)2025 1907 y Fe(LC_COLLATE)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(81)2025
+1998 y Fe(LC_CTYPE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(81)2025 2088
+y Fe(LC_MESSAGES)21 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)34 b Fb(7,)26 b(81)2025 2178 y Fe(LC_NUMERIC)13
+b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)27 b Fb(81)2025 2269 y Fe(LC_TIME)22 b Fc(:)13
+b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)35 b Fb(81)2025 2359 y Fe(LINENO)6 b Fc(:)14
+b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)21 b Fb(81)2025 2446 y Fe(LINES)9
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(81)2021 2746
+y Fs(M)2025 2872 y Fe(MACHTYPE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b
+Fb(81)2025 2962 y Fe(MAIL)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
+b Fb(73)2025 3052 y Fe(MAILCHECK)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(81)2025
+3143 y Fe(MAILPATH)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(73)2025 3233
+y Fe(MAPFILE)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(82)2025 3323
+y Fe(mark-modified-lines)26 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37
+b Fb(114)2025 3414 y Fe(mark-symlinked-directories)27
+b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+36 b Fb(114)2025 3504 y Fe(match-hidden-files)7 b Fc(:)17
+b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(115)2025 3594
+y Fe(menu-complete-display-prefix)17 b Fc(:)h(:)13 b(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)31 b Fb(115)2025 3681 y Fe(meta-flag)13
+b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)28 b Fb(114)2021 3992 y Fs(O)2025 4118 y Fe(OLDPWD)6
+b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(82)2025 4208 y Fe(OPTARG)6
+b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(73)2025 4299 y Fe(OPTERR)6
+b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(82)2025 4389 y Fe(OPTIND)6
+b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(73)2025 4480 y Fe(OSTYPE)6
+b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(82)2025 4567 y Fe(output-meta)8
+b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+23 b Fb(115)p eop end
+%%Page: 174 180
+TeXDict begin 174 179 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(174)146 294 y Fs(P)150 410 y Fe(page-completions)
+13 b Fc(:)j(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)27 b Fb(115)150
+497 y Fe(PATH)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)25
+b Fb(73)150 584 y Fe(PIPESTATUS)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(82)150
+671 y Fe(POSIXLY_CORRECT)17 b Fc(:)g(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)32 b Fb(82)150 758 y Fe(PPID)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)25 b Fb(82)150 846 y Fe(PROMPT_COMMAND)e Fc(:)13
+b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34
+b Fb(82)150 933 y Fe(PROMPT_DIRTRIM)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(82)150 1020 y Fe(PS0)14
+b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 b Fb(82)150
+1107 y Fe(PS1)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28
+b Fb(73)150 1194 y Fe(PS2)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28
+b Fb(73)150 1281 y Fe(PS3)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28
+b Fb(82)150 1369 y Fe(PS4)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28
+b Fb(82)150 1456 y Fe(PWD)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)28
+b Fb(82)146 1689 y Fs(R)150 1804 y Fe(RANDOM)6 b Fc(:)15
+b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)20 b Fb(83)150 1892 y Fe(READLINE_LINE)25
+b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37
+b Fb(83)150 1979 y Fe(READLINE_POINT)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(83)150 2066 y Fe(REPLY)9
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(83)150 2153 y
+Fe(revert-all-at-newline)17 b Fc(:)h(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)32
+b Fb(115)146 2386 y Fs(S)150 2502 y Fe(SECONDS)22 b Fc(:)13
+b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)35 b Fb(83)150 2589 y Fe(SHELL)9 b Fc(:)14
+b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(83)150 2676 y Fe(SHELLOPTS)15
+b Fc(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)30 b Fb(83)150 2763 y Fe(SHLVL)9 b Fc(:)14
+b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)23 b Fb(83)150 2851 y Fe(show-all-if-ambiguous)
+17 b Fc(:)h(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(115)150 2938 y Fe
+(show-all-if-unmodified)14 b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(115)2025
+260 y Fe(show-mode-in-prompt)d Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37
+b Fb(115)2025 347 y Fe(skip-completed-text)26 b Fc(:)13
+b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(116)2021 675 y Fs(T)2025
+803 y Fe(TEXTDOMAIN)15 b Fc(:)g(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)30 b Fb(7)2025 894 y
+Fe(TEXTDOMAINDIR)7 b Fc(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)23 b Fb(7)2025 985 y Fe(TIMEFORMAT)13
+b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)27 b Fb(83)2025 1076 y Fe(TMOUT)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)23 b Fb(84)2025 1164 y Fe(TMPDIR)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21
+b Fb(84)2021 1480 y Fs(U)2025 1604 y Fe(UID)14 b Fc(:)f(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)28 b Fb(84)2021 1920 y Fs(V)2025 2049
+y Fe(vi-cmd-mode-string)7 b Fc(:)17 b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22
+b Fb(116)2025 2140 y Fe(vi-ins-mode-string)7 b Fc(:)17
+b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(116)2025 2227
+y Fe(visible-stats)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)35 b Fb(116)150 3661 y Fs(D.4)68 b(F)-11 b(unction)44
+b(Index)146 4147 y(A)150 4273 y Fe(abort)27 b(\(C-g\))15
+b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)30
+b Fb(129)150 4363 y Fe(accept-line)e(\(Newline)g(or)e(Return\))12
+b Fc(:)i(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)27
+b Fb(123)150 4450 y Fe(alias-expand-line)i(\(\))9 b Fc(:)14
+b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(131)146 4762 y Fs(B)150
+4888 y Fe(backward-char)29 b(\(C-b\))12 b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)26 b Fb(122)150 4978 y Fe(backward-delete-char)k(\(Rubout\))22
+b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35
+b Fb(125)150 5069 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))e
+Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b
+Fb(126)150 5159 y Fe(backward-kill-word)30 b(\(M-DEL\))11
+b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+26 b Fb(126)150 5250 y Fe(backward-word)j(\(M-b\))12
+b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(122)150 5340
+y Fe(beginning-of-history)k(\(M-<\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(123)2025
+4117 y Fe(beginning-of-line)j(\(C-a\))20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34
+b Fb(122)2025 4204 y Fe(bracketed-paste-begin)c(\(\))16
+b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)31 b Fb(125)2021 4499 y Fs(C)2025 4623 y Fe
+(call-last-kbd-macro)f(\(C-x)c(e\))15 b Fc(:)f(:)f(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)30 b Fb(129)2025 4713
+y Fe(capitalize-word)f(\(M-c\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22
+b Fb(125)2025 4802 y Fe(character-search)29 b(\(C-]\))22
+b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)36 b Fb(130)2025 4892 y Fe
+(character-search-backward)31 b(\(M-C-]\))10 b Fc(:)15
+b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fb(130)2025 4981
+y Fe(clear-screen)j(\(C-l\))14 b Fc(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29
+b Fb(123)2025 5071 y Fe(complete)e(\(TAB\))7 b Fc(:)15
+b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)22
+b Fb(127)2025 5161 y Fe(complete-command)29 b(\(M-!\))22
+b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)36 b Fb(128)2025 5250 y Fe(complete-filename)29
+b(\(M-/\))20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(128)2025 5340 y Fe
+(complete-hostname)29 b(\(M-@\))20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34
+b Fb(128)p eop end
+%%Page: 175 181
+TeXDict begin 175 180 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(175)150 264 y Fe(complete-into-braces)30
+b(\(M-{\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)26 b Fb(129)150 354 y Fe(complete-username)j(\(M-~\))20
+b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)33 b Fb(128)150 444 y Fe(complete-variable)c(\(M-$\))20
+b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)33 b Fb(128)150 534 y Fe(copy-backward-word)d(\(\))7
+b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(126)150 624 y Fe(copy-forward-word)
+29 b(\(\))9 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(127)150
+711 y Fe(copy-region-as-kill)30 b(\(\))22 b Fc(:)13 b(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)36
+b Fb(126)146 1017 y Fs(D)150 1142 y Fe(dabbrev-expand)29
+b(\(\))17 b Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32
+b Fb(129)150 1232 y Fe(delete-char)c(\(C-d\))17 b Fc(:)d(:)f(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)32 b Fb(124)150 1322 y Fe(delete-char-or-list)e
+(\(\))22 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 b Fb(128)150 1412 y Fe
+(delete-horizontal-space)31 b(\(\))11 b Fc(:)i(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(126)150
+1502 y Fe(digit-argument)j(\()p Fd(M-0)p Fe(,)e Fd(M-1)p
+Fe(,)f(...)g Fd(M--)p Fe(\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)
+26 b Fb(127)150 1592 y Fe(display-shell-version)k(\(C-x)d(C-v\))c
+Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b
+Fb(131)150 1673 y Fe(do-lowercase-version)30 b(\(M-A,)227
+1761 y(M-B,)c(M-)p Fd(x)p Fe(,)h(...\))10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)25 b Fb(129)150 1851 y Fe(downcase-word)k(\(M-l\))
+12 b Fc(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(125)150 1941
+y Fe(dump-functions)j(\(\))17 b Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+32 b Fb(130)150 2031 y Fe(dump-macros)c(\(\))7 b Fc(:)14
+b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22
+b Fb(130)150 2121 y Fe(dump-variables)29 b(\(\))17 b
+Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(130)150
+2208 y Fe(dynamic-complete-history)f(\(M-TAB\))13 b Fc(:)i(:)e(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(128)146 2514 y Fs(E)150
+2639 y Fe(edit-and-execute-command)k(\(C-x)c(C-e\))14
+b Fc(:)g(:)f(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(131)150 2729
+y Fe(end-kbd-macro)g(\(C-x)d(\)\))13 b Fc(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)28
+b Fb(129)150 2819 y Fd(end-of-file)g Fe(\(usually)g(C-d\))21
+b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)35 b Fb(124)150 2909 y Fe(end-of-history)29 b(\(M->\))9
+b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(123)150 2999 y
+Fe(end-of-line)k(\(C-e\))17 b Fc(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32
+b Fb(122)150 3086 y Fe(exchange-point-and-mark)f(\(C-x)26
+b(C-x\))17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)32
+b Fb(130)146 3392 y Fs(F)150 3517 y Fe(forward-backward-delete-char)g
+(\(\))15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30
+b Fb(125)150 3607 y Fe(forward-char)e(\(C-f\))14 b Fc(:)h(:)e(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)29 b Fb(122)150 3697 y Fe(forward-search-history)i
+(\(C-s\))24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)38 b Fb(123)150 3784 y Fe(forward-word)28 b(\(M-f\))14
+b Fc(:)h(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(122)146 4079
+y Fs(G)150 4204 y Fe(glob-complete-word)h(\(M-g\))16
+b Fc(:)e(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)31 b Fb(131)150 4294 y Fe(glob-expand-word)e(\(C-x)e(*\))c
+Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)38 b Fb(131)150 4382 y Fe(glob-list-expansions)30
+b(\(C-x)d(g\))13 b Fc(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)27 b Fb(131)2021 294 y Fs(H)2025 422 y Fe
+(history-and-alias-expand-line)32 b(\(\))13 b Fc(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)28 b Fb(131)2025 513 y Fe(history-expand-line)i
+(\(M-^\))13 b Fc(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)28 b Fb(131)2025 604 y Fe(history-search-backward)j
+(\(\))11 b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)26 b Fb(124)2025 695 y Fe(history-search-forward)k(\(\))13
+b Fc(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)28 b Fb(123)2025 786 y Fe(history-substring-search-backw)q(ard)k
+(\(\))20 b Fc(:)13 b(:)g(:)g(:)g(:)35 b Fb(124)2025 874
+y Fe(history-substring-search-forwa)q(rd)d(\(\))22 b
+Fc(:)13 b(:)h(:)f(:)g(:)g(:)37 b Fb(124)2021 1200 y Fs(I)2025
+1329 y Fe(insert-comment)29 b(\(M-#\))9 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+24 b Fb(130)2025 1420 y Fe(insert-completions)29 b(\(M-*\))16
+b Fc(:)f(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)31 b Fb(127)2025 1507 y Fe(insert-last-argument)f(\(M-.)c(or)g
+(M-_\))7 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22
+b Fb(131)2021 1834 y Fs(K)2025 1962 y Fe(kill-line)27
+b(\(C-k\))c Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37
+b Fb(126)2025 2053 y Fe(kill-region)28 b(\(\))7 b Fc(:)14
+b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)22
+b Fb(126)2025 2144 y Fe(kill-whole-line)29 b(\(\))14
+b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(126)2025
+2231 y Fe(kill-word)e(\(M-d\))c Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)37 b Fb(126)2021 2548 y Fs(M)2025 2676 y
+Fe(magic-space)28 b(\(\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)22 b Fb(131)2025 2767 y Fe(menu-complete)28
+b(\(\))20 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34
+b Fb(127)2025 2854 y Fe(menu-complete-backward)c(\(\))13
+b Fc(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)28 b Fb(128)2021 3181 y Fs(N)2025 3309 y Fe(next-history)g(\(C-n\))
+14 b Fc(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(123)2025
+3401 y Fe(next-screen-line)g(\(\))12 b Fc(:)h(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+27 b Fb(123)2025 3472 y Fe(non-incremental-forward-)2102
+3560 y(search-history)h(\(M-n\))23 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37
+b Fb(123)2025 3647 y Fe(non-incremental-reverse-)2102
+3734 y(search-history)28 b(\(M-p\))23 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37
+b Fb(123)2021 4070 y Fs(O)2025 4198 y Fe(operate-and-get-next)30
+b(\(C-o\))11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)26 b Fb(131)2025 4285 y Fe(overwrite-mode)j(\(\))17
+b Fc(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(125)p
+eop end
+%%Page: 176 182
+TeXDict begin 176 181 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(176)146 294 y Fs(P)150 414 y Fe
+(possible-command-completions)32 b(\(C-x)26 b(!\))9 b
+Fc(:)14 b(:)g(:)f(:)g(:)g(:)24 b Fb(128)150 503 y Fe
+(possible-completions)30 b(\(M-?\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(127)150
+592 y Fe(possible-filename-completions)32 b(\(C-x)27
+b(/\))7 b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(128)150 680
+y Fe(possible-hostname-completions)32 b(\(C-x)27 b(@\))7
+b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(128)150 769 y Fe
+(possible-username-completions)32 b(\(C-x)27 b(~\))7
+b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(128)150 858 y Fe
+(possible-variable-completions)32 b(\(C-x)27 b($\))7
+b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(128)150 946 y Fe(prefix-meta)28
+b(\(ESC\))17 b Fc(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32
+b Fb(129)150 1035 y Fe(previous-history)d(\(C-p\))23
+b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)36 b Fb(123)150 1124 y Fe(previous-screen-line)30
+b(\(\))19 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(122)150 1211 y Fe
+(print-last-kbd-macro)d(\(\))19 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(129)146
+1487 y Fs(Q)150 1606 y Fe(quoted-insert)c(\(C-q)d(or)g(C-v\))8
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)22 b Fb(125)146 1881 y Fs(R)150 2002 y Fe(re-read-init-file)29
+b(\(C-x)e(C-r\))15 b Fc(:)f(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)30 b Fb(129)150 2091 y Fe(redraw-current-line)g(\(\))22
+b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)36 b Fb(123)150 2179 y Fe(reverse-search-history)31
+b(\(C-r\))24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)38 b Fb(123)150 2266 y Fe(revert-line)28 b(\(M-r\))17
+b Fc(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(129)146
+2532 y Fs(S)150 2652 y Fe(self-insert)c(\(a,)e(b,)g(A,)g(1,)h(!,)f
+(...\))13 b Fc(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)27
+b Fb(125)150 2741 y Fe(set-mark)g(\(C-@\))7 b Fc(:)15
+b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22
+b Fb(130)150 2830 y Fe(shell-backward-kill-word)31 b(\(\))8
+b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+23 b Fb(126)150 2918 y Fe(shell-backward-word)30 b(\(\))22
+b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)36 b Fb(122)150 3007 y Fe(shell-expand-line)29
+b(\(M-C-e\))13 b Fc(:)j(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)28 b Fb(131)150 3096 y Fe(shell-forward-word)i(\(\))
+7 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(122)150 3184 y
+Fe(shell-kill-word)29 b(\(\))14 b Fc(:)g(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29
+b Fb(126)2025 264 y Fe(skip-csi-sequence)g(\(\))9 b Fc(:)14
+b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(130)2025 351 y Fe(start-kbd-macro)29
+b(\(C-x)d(\(\))8 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)23 b Fb(129)2021
+821 y Fs(T)2025 972 y Fe(tilde-expand)28 b(\(M-&\))14
+b Fc(:)h(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(129)2025
+1070 y Fe(transpose-chars)g(\(C-t\))7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22
+b Fb(125)2025 1157 y Fe(transpose-words)29 b(\(M-t\))7
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(125)2021 1638 y Fs(U)2025
+1788 y Fe(undo)k(\(C-_)h(or)f(C-x)g(C-u\))10 b Fc(:)k(:)f(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)25 b Fb(129)2025 1887 y Fe(universal-argument)k(\(\))7
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(127)2025 1985 y Fe
+(unix-filename-rubout)30 b(\(\))19 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34
+b Fb(126)2025 2084 y Fe(unix-line-discard)29 b(\(C-u\))20
+b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)34 b Fb(126)2025 2182 y Fe(unix-word-rubout)29
+b(\(C-w\))22 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(126)2025 2269
+y Fe(upcase-word)28 b(\(M-u\))17 b Fc(:)d(:)f(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)32 b Fb(125)2021 2750 y Fs(Y)2025 2900 y Fe(yank)26
+b(\(C-y\))18 b Fc(:)c(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)33 b Fb(127)2025 2999 y Fe(yank-last-arg)28
+b(\(M-.)f(or)f(M-_\))8 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(124)2025 3097
+y Fe(yank-nth-arg)28 b(\(M-C-y\))9 b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24
+b Fb(124)2025 3184 y Fe(yank-pop)j(\(M-y\))7 b Fc(:)15
+b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)22
+b Fb(127)150 3933 y Fs(D.5)68 b(Concept)45 b(Index)146
+4527 y(A)150 4652 y Fb(alias)27 b(expansion)7 b Fc(:)14
+b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21
+b Fb(93)150 4742 y(arithmetic)26 b(ev)l(aluation)d Fc(:)13
+b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(92)150 4832 y(arithmetic)26
+b(expansion)11 b Fc(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)26
+b Fb(31)150 4923 y(arithmetic,)h(shell)6 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)20 b Fb(92)150 5010
+y(arra)n(ys)h Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(94)2021
+4527 y Fs(B)2025 4650 y Fb(bac)n(kground)13 b Fc(:)f(:)h(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)28 b Fb(103)2025
+4739 y(Bash)e(con\014guration)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)26 b Fb(147)2025 4829 y(Bash)g(installation)9
+b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)24
+b Fb(147)2025 4918 y(Bourne)i(shell)20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)35 b
+Fb(5)2025 5008 y(brace)26 b(expansion)9 b Fc(:)k(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)24 b Fb(23)2025 5095 y(builtin)15
+b Fc(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(3)p eop end
+%%Page: 177 183
+TeXDict begin 177 182 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(177)146 294 y Fs(C)150 418 y Fb(command)26
+b(editing)19 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)34
+b Fb(108)150 507 y(command)26 b(execution)12 b Fc(:)h(:)g(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)26 b Fb(38)150 597 y(command)g(expansion)c
+Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)36 b Fb(38)150
+687 y(command)26 b(history)18 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)33 b Fb(141)150 777 y(command)26 b(searc)n(h)16
+b Fc(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30
+b Fb(38)150 866 y(command)c(substitution)21 b Fc(:)13
+b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(30)150 956 y(command)26
+b(timing)13 b Fc(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)28 b Fb(8)150 1046 y(commands,)e(comp)r(ound)7 b Fc(:)14
+b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(9)150 1135
+y(commands,)k(conditional)10 b Fc(:)15 b(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)25
+b Fb(11)150 1225 y(commands,)h(grouping)15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)29 b Fb(14)150 1315 y(commands,)d(lists)12
+b Fc(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)27
+b Fb(9)150 1405 y(commands,)f(lo)r(oping)e Fc(:)13 b(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)37 b Fb(10)150 1494 y(commands,)26
+b(pip)r(elines)18 b Fc(:)c(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33
+b Fb(8)150 1584 y(commands,)26 b(shell)c Fc(:)13 b(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(8)150 1674 y(commands,)26
+b(simple)e Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38
+b Fb(8)150 1764 y(commen)n(ts,)26 b(shell)13 b Fc(:)i(:)e(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28 b Fb(7)150
+1853 y(completion)f(builtins)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)36 b Fb(134)150 1943 y(con\014guration)22 b Fc(:)13
+b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)36
+b Fb(147)150 2033 y(con)n(trol)26 b(op)r(erator)8 b Fc(:)15
+b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23
+b Fb(3)150 2120 y(copro)r(cess)18 b Fc(:)c(:)f(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)32 b
+Fb(15)146 2416 y Fs(D)150 2537 y Fb(directory)26 b(stac)n(k)11
+b Fc(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
+b Fb(96)146 2833 y Fs(E)150 2957 y Fb(editing)g(command)g(lines)17
+b Fc(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(108)150 3046 y(en)n(vironmen)n(t)18
+b Fc(:)12 b(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)32 b Fb(40)150 3136 y(ev)l(aluation,)26 b(arithmetic)12
+b Fc(:)i(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(92)150 3226
+y(ev)n(en)n(t)f(designators)c Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)34 b Fb(144)150 3316 y(execution)26 b(en)n(vironmen)n(t)17
+b Fc(:)12 b(:)h(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)31 b Fb(39)150 3405
+y(exit)25 b(status)7 b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(3,)k(40)150 3495 y(expansion)9
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)24 b Fb(22)150 3585 y(expansion,)i(arithmetic)18
+b Fc(:)c(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32 b Fb(31)150 3674
+y(expansion,)26 b(brace)16 b Fc(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)30 b Fb(23)150 3764 y(expansion,)c(\014lename)18
+b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32 b Fb(32)150
+3854 y(expansion,)26 b(parameter)21 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)34 b Fb(24)150 3944 y(expansion,)26 b(pathname)7
+b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(32)150
+4033 y(expansion,)k(tilde)14 b Fc(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)28 b Fb(23)150 4123 y(expressions,)f(arithmetic)13
+b Fc(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)27 b Fb(92)150 4210 y(expressions,)g
+(conditional)17 b Fc(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(90)2021
+294 y Fs(F)2025 415 y Fb(\014eld)21 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)36 b Fb(3)2025 504 y(\014lename)21 b Fc(:)14 b(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)36
+b Fb(3)2025 593 y(\014lename)26 b(expansion)11 b Fc(:)i(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)26 b Fb(32)2025 682 y(foreground)9
+b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)24 b Fb(103)2025 769 y(functions,)i(shell)9 b
+Fc(:)14 b(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)24
+b Fb(17)2021 1048 y Fs(H)2025 1170 y Fb(history)h(builtins)20
+b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)35
+b Fb(141)2025 1259 y(history)25 b(ev)n(en)n(ts)8 b Fc(:)13
+b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23
+b Fb(144)2025 1347 y(history)i(expansion)14 b Fc(:)g(:)f(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)29 b Fb(143)2025 1436 y(history)c(list)9
+b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)24 b Fb(141)2025 1524 y(History)-6 b(,)25 b(ho)n(w)h(to)g(use)
+19 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(140)2021
+1803 y Fs(I)2025 1924 y Fb(iden)n(ti\014er)12 b Fc(:)g(:)h(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)27
+b Fb(3)2025 2013 y(initialization)h(\014le,)e(readline)17
+b Fc(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)32 b Fb(110)2025 2102 y(installation)21
+b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)34 b Fb(147)2025 2191 y(in)n(teraction,)26 b(readline)7
+b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(107)2025
+2280 y(in)n(teractiv)n(e)k(shell)20 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)34 b Fb(87,)27 b(88)2025 2367 y(in)n(ternationalization)22
+b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35
+b Fb(7)2021 2637 y Fs(J)2025 2758 y Fb(job)23 b Fc(:)13
+b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(3)2025 2845
+y(job)26 b(con)n(trol)17 b Fc(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)31 b Fb(3,)c(103)2021 3124 y Fs(K)2025
+3246 y Fb(kill)f(ring)7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)22 b Fb(109)2025
+3333 y(killing)k(text)6 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(109)2021 3612
+y Fs(L)2025 3733 y Fb(lo)r(calization)i Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)35
+b Fb(7)2025 3821 y(login)26 b(shell)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)21
+b Fb(87)2021 4100 y Fs(M)2025 4221 y Fb(matc)n(hing,)26
+b(pattern)9 b Fc(:)k(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24
+b Fb(33)2025 4308 y(metac)n(haracter)7 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(3)p
+eop end
+%%Page: 178 184
+TeXDict begin 178 183 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(178)146 294 y Fs(N)150 410 y Fb(name)19
+b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(3)150 497
+y(nativ)n(e)25 b(languages)c Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)34 b Fb(7)150 584 y(notation,)27
+b(readline)13 b Fc(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)27
+b Fb(108)146 826 y Fs(O)150 942 y Fb(op)r(erator,)g(shell)c
+Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+37 b Fb(3)146 1184 y Fs(P)150 1300 y Fb(parameter)26
+b(expansion)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)28
+b Fb(24)150 1388 y(parameters)c Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)37 b Fb(19)150
+1475 y(parameters,)27 b(p)r(ositional)7 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)21 b Fb(21)150 1562 y(parameters,)27 b(sp)r(ecial)7
+b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)21
+b Fb(21)150 1649 y(pathname)k(expansion)18 b Fc(:)c(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)32 b Fb(32)150 1736 y(pattern)25 b(matc)n(hing)c
+Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34
+b Fb(33)150 1824 y(pip)r(eline)12 b Fc(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)27
+b Fb(8)150 1911 y(POSIX)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38
+b Fb(3)150 1998 y(POSIX)25 b(Mo)r(de)17 b Fc(:)c(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)31 b Fb(99)150
+2085 y(pro)r(cess)c(group)15 b Fc(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)30 b Fb(3)150 2172 y(pro)r(cess)d
+(group)e(ID)11 b Fc(:)i(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)26 b Fb(3)150 2259 y(pro)r(cess)h(substitution)11
+b Fc(:)h(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)25 b Fb(31)150
+2347 y(programmable)i(completion)8 b Fc(:)14 b(:)g(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)23
+b Fb(132)150 2434 y(prompting)17 b Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)31 b Fb(97)146
+2676 y Fs(Q)150 2792 y Fb(quoting)16 b Fc(:)d(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)31
+b Fb(6)150 2879 y(quoting,)26 b(ANSI)18 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 b Fb(6)146
+3121 y Fs(R)150 3237 y Fb(Readline,)26 b(ho)n(w)g(to)g(use)11
+b Fc(:)i(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(106)150 3325
+y(redirection)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)27 b Fb(34)150 3412 y(reserv)n(ed)f(w)n
+(ord)13 b Fc(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+(:)h(:)f(:)28 b Fb(3)150 3499 y(restricted)e(shell)14
+b Fc(:)g(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)29
+b Fb(99)150 3586 y(return)c(status)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fb(4)2021
+294 y Fs(S)2025 427 y Fb(shell)h(arithmetic)17 b Fc(:)d(:)f(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)31 b Fb(92)2025 520
+y(shell)26 b(function)18 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(17)2025 613 y(shell)26
+b(script)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(41)2025 706 y(shell)h(v)l(ariable)7
+b Fc(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)22 b Fb(19)2025 799 y(shell,)k(in)n(teractiv)n(e)21
+b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
+(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34
+b Fb(88)2025 892 y(signal)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)28
+b Fb(4)2025 984 y(signal)f(handling)6 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)21 b Fb(41)2025 1077
+y(sp)r(ecial)27 b(builtin)16 b Fc(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)31 b Fb(4,)26 b(71)2025 1170 y(startup)f(\014les)10
+b Fc(:)k(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)25 b Fb(87)2025 1257 y(susp)r(ending)g(jobs)10
+b Fc(:)k(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25
+b Fb(103)2021 1619 y Fs(T)2025 1752 y Fb(tilde)h(expansion)7
+b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)22
+b Fb(23)2025 1845 y(tok)n(en)17 b Fc(:)12 b(:)i(:)f(:)g(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
+f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)32
+b Fb(4)2025 1932 y(translation,)27 b(nativ)n(e)e(languages)c
+Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)34 b Fb(7)2021 2294 y Fs(V)2025 2427 y
+Fb(v)l(ariable,)26 b(shell)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
+g(:)g(:)g(:)h(:)f(:)g(:)g(:)28 b Fb(19)2025 2515 y(v)l(ariables,)f
+(readline)7 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)22
+b Fb(111)2021 2876 y Fs(W)2025 3010 y Fb(w)n(ord)10 b
+Fc(:)j(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
+g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(4)2025 3097
+y(w)n(ord)h(splitting)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(31)2021 3458 y Fs(Y)2025
+3586 y Fb(y)n(anking)h(text)13 b Fc(:)f(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)28 b Fb(109)p eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/doc/bashref.texi b/doc/bashref.texi
new file mode 100644
index 0000000..d33cd57
--- /dev/null
+++ b/doc/bashref.texi
@@ -0,0 +1,9246 @@
+\input texinfo.tex @c -*- texinfo -*-
+@c %**start of header
+@setfilename bashref.info
+@settitle Bash Reference Manual
+
+@include version.texi
+@c %**end of header
+
+@copying
+This text is a brief description of the features that are present in
+the Bash shell (version @value{VERSION}, @value{UPDATED}).
+
+This is Edition @value{EDITION}, last updated @value{UPDATED},
+of @cite{The GNU Bash Reference Manual},
+for @code{Bash}, Version @value{VERSION}.
+
+Copyright @copyright{} 1988--2018 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+@end quotation
+@end copying
+
+@defcodeindex bt
+@defcodeindex rw
+@set BashFeatures
+
+@dircategory Basics
+@direntry
+* Bash: (bash). The GNU Bourne-Again SHell.
+@end direntry
+
+@finalout
+
+@titlepage
+@title Bash Reference Manual
+@subtitle Reference Documentation for Bash
+@subtitle Edition @value{EDITION}, for @code{Bash} Version @value{VERSION}.
+@subtitle @value{UPDATED-MONTH}
+@author Chet Ramey, Case Western Reserve University
+@author Brian Fox, Free Software Foundation
+
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top, Introduction, (dir), (dir)
+@top Bash Features
+
+This text is a brief description of the features that are present in
+the Bash shell (version @value{VERSION}, @value{UPDATED}).
+The Bash home page is @url{http://www.gnu.org/software/bash/}.
+
+This is Edition @value{EDITION}, last updated @value{UPDATED},
+of @cite{The GNU Bash Reference Manual},
+for @code{Bash}, Version @value{VERSION}.
+
+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 (@file{sh}), the Korn Shell
+(@file{ksh}), and the C-shell (@file{csh} and its successor,
+@file{tcsh}). The following menu breaks the features up into
+categories, noting which features were inspired by other shells and
+which are specific to Bash.
+
+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.
+
+@menu
+* Introduction:: An introduction to the shell.
+* Definitions:: Some definitions used in the rest of this
+ manual.
+* Basic Shell Features:: The shell "building blocks".
+* Shell Builtin Commands:: Commands that are a part of the shell.
+* Shell Variables:: Variables used or set by Bash.
+* Bash Features:: Features found only in Bash.
+* Job Control:: What job control is and how Bash allows you
+ to use it.
+* Command Line Editing:: Chapter describing the command line
+ editing features.
+* Using History Interactively:: Command History Expansion
+* Installing Bash:: How to build and install Bash on your system.
+* Reporting Bugs:: How to report bugs in Bash.
+* Major Differences From The Bourne Shell:: A terse list of the differences
+ between Bash and historical
+ versions of /bin/sh.
+* GNU Free Documentation License:: Copying and sharing this documentation.
+* Indexes:: Various indexes for this manual.
+@end menu
+@end ifnottex
+
+@node Introduction
+@chapter Introduction
+@menu
+* What is Bash?:: A short description of Bash.
+* What is a shell?:: A brief introduction to shells.
+@end menu
+
+@node What is Bash?
+@section What is Bash?
+
+Bash is the shell, or command language interpreter,
+for the @sc{gnu} operating system.
+The name is an acronym for the @samp{Bourne-Again SHell},
+a pun on Stephen Bourne, the author of the direct ancestor of
+the current Unix shell @code{sh},
+which appeared in the Seventh Edition Bell Labs Research version
+of Unix.
+
+Bash is largely compatible with @code{sh} and incorporates useful
+features from the Korn shell @code{ksh} and the C shell @code{csh}.
+It is intended to be a conformant implementation of the @sc{ieee}
+@sc{posix} Shell and Tools portion of the @sc{ieee} @sc{posix}
+specification (@sc{ieee} Standard 1003.1).
+It offers functional improvements over @code{sh} for both interactive and
+programming use.
+
+While the @sc{gnu} operating system provides other shells, including
+a version of @code{csh}, Bash is the default shell.
+Like other @sc{gnu} software, Bash is quite portable. It currently runs
+on nearly every version of Unix and a few other operating systems @minus{}
+independently-supported ports exist for @sc{ms-dos}, @sc{os/2},
+and Windows platforms.
+
+@node What is a shell?
+@section What is a shell?
+
+At its base, a shell is simply a macro processor that executes
+commands. The term macro processor means functionality where text
+and symbols are expanded to create larger expressions.
+
+A Unix shell is both a command interpreter and a programming
+language. As a command interpreter, the shell provides the user
+interface to the rich set of @sc{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 @file{/bin}, allowing users
+or groups to establish custom environments to automate their common
+tasks.
+
+Shells may be used interactively or non-interactively. In
+interactive mode, they accept input typed from the keyboard.
+When executing non-interactively, shells execute commands read
+from a file.
+
+A shell allows execution of @sc{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 @dfn{redirection} constructs permit
+fine-grained control of the input and output of those commands.
+Moreover, the shell allows control over the contents of commands'
+environments.
+
+Shells also provide a small set of built-in
+commands (@dfn{builtins}) implementing functionality impossible
+or inconvenient to obtain via separate utilities.
+For example, @code{cd}, @code{break}, @code{continue}, and
+@code{exec} cannot be implemented outside of the shell because
+they directly manipulate the shell itself.
+The @code{history}, @code{getopts}, @code{kill}, or @code{pwd}
+builtins, among others, could be implemented in separate utilities,
+but they are more convenient to use as builtin commands.
+All of the shell builtins are described in
+subsequent sections.
+
+While executing commands is essential, most of the power (and
+complexity) of shells is due to their embedded programming
+languages. Like any high-level language, the shell provides
+variables, flow control constructs, quoting, and functions.
+
+Shells offer features geared specifically for
+interactive use rather than to augment the programming language.
+These interactive features include job control, command line
+editing, command history and aliases. Each of these features is
+described in this manual.
+
+@node Definitions
+@chapter Definitions
+These definitions are used throughout the remainder of this manual.
+
+@table @code
+
+@item POSIX
+@cindex POSIX
+A family of open system standards based on Unix. Bash
+is primarily concerned with the Shell and Utilities portion of the
+@sc{posix} 1003.1 standard.
+
+@item blank
+A space or tab character.
+
+@item builtin
+@cindex builtin
+A command that is implemented internally by the shell itself, rather
+than by an executable program somewhere in the file system.
+
+@item control operator
+@cindex control operator
+A @code{token} that performs a control function. It is a @code{newline}
+or one of the following:
+@samp{||}, @samp{&&}, @samp{&}, @samp{;}, @samp{;;}, @samp{;&}, @samp{;;&},
+@samp{|}, @samp{|&}, @samp{(}, or @samp{)}.
+
+@item exit status
+@cindex exit status
+The value returned by a command to its caller. The value is restricted
+to eight bits, so the maximum value is 255.
+
+@item field
+@cindex field
+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.
+
+@item filename
+@cindex filename
+A string of characters used to identify a file.
+
+@item job
+@cindex job
+A set of processes comprising a pipeline, and any processes descended
+from it, that are all in the same process group.
+
+@item job control
+@cindex job control
+A mechanism by which users can selectively stop (suspend) and restart
+(resume) execution of processes.
+
+@item metacharacter
+@cindex metacharacter
+A character that, when unquoted, separates words. A metacharacter is
+a @code{space}, @code{tab}, @code{newline}, or one of the following characters:
+@samp{|}, @samp{&}, @samp{;}, @samp{(}, @samp{)}, @samp{<}, or
+@samp{>}.
+
+@item name
+@cindex name
+@cindex identifier
+A @code{word} consisting solely of letters, numbers, and underscores,
+and beginning with a letter or underscore. @code{Name}s are used as
+shell variable and function names.
+Also referred to as an @code{identifier}.
+
+@item operator
+@cindex operator, shell
+A @code{control operator} or a @code{redirection operator}.
+@xref{Redirections}, for a list of redirection operators.
+Operators contain at least one unquoted @code{metacharacter}.
+
+@item process group
+@cindex process group
+A collection of related processes each having the same process
+group @sc{id}.
+
+@item process group ID
+@cindex process group ID
+A unique identifier that represents a @code{process group}
+during its lifetime.
+
+@item reserved word
+@cindex reserved word
+A @code{word} that has a special meaning to the shell. Most reserved
+words introduce shell flow control constructs, such as @code{for} and
+@code{while}.
+
+@item return status
+@cindex return status
+A synonym for @code{exit status}.
+
+@item signal
+@cindex signal
+A mechanism by which a process may be notified by the kernel
+of an event occurring in the system.
+
+@item special builtin
+@cindex special builtin
+A shell builtin command that has been classified as special by the
+@sc{posix} standard.
+
+@item token
+@cindex token
+A sequence of characters considered a single unit by the shell.
+It is either a @code{word} or an @code{operator}.
+
+@item word
+@cindex word
+A sequence of characters treated as a unit by the shell.
+Words may not include unquoted @code{metacharacters}.
+@end table
+
+@node Basic Shell Features
+@chapter Basic Shell Features
+@cindex Bourne shell
+
+Bash is an acronym for @samp{Bourne-Again SHell}.
+The Bourne shell is
+the traditional Unix shell originally written by Stephen Bourne.
+All of the Bourne shell builtin commands are available in Bash,
+The rules for evaluation and quoting are taken from the @sc{posix}
+specification for the `standard' Unix shell.
+
+This chapter briefly summarizes the shell's `building blocks':
+commands, control structures, shell functions, shell @i{parameters},
+shell expansions,
+@i{redirections}, which are a way to direct input and output from
+and to named files, and how the shell executes commands.
+
+@menu
+* Shell Syntax:: What your input means to the shell.
+* Shell Commands:: The types of commands you can use.
+* Shell Functions:: Grouping commands by name.
+* Shell Parameters:: How the shell stores values.
+* Shell Expansions:: How Bash expands parameters and the various
+ expansions available.
+* Redirections:: A way to control where input and output go.
+* Executing Commands:: What happens when you run a command.
+* Shell Scripts:: Executing files of shell commands.
+@end menu
+
+@node Shell Syntax
+@section Shell Syntax
+@menu
+* Shell Operation:: The basic operation of the shell.
+* Quoting:: How to remove the special meaning from characters.
+* Comments:: How to specify comments.
+@end menu
+
+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{#}), and the rest
+of that line.
+
+Otherwise, roughly speaking, the shell reads its input and
+divides the input into words and operators, employing the quoting rules
+to select which meanings to assign various words and characters.
+
+The shell then parses these tokens into commands and other constructs,
+removes the special meaning of certain words or characters, expands
+others, redirects input and output as needed, executes the specified
+command, waits for the command's exit status, and makes that exit status
+available for further inspection or processing.
+
+@node Shell Operation
+@subsection Shell Operation
+
+The following is a brief description of the shell's operation when it
+reads and executes a command. Basically, the shell does the
+following:
+
+@enumerate
+@item
+Reads its input from a file (@pxref{Shell Scripts}), from a string
+supplied as an argument to the @option{-c} invocation option
+(@pxref{Invoking Bash}), or from the user's terminal.
+
+@item
+Breaks the input into words and operators, obeying the quoting rules
+described in @ref{Quoting}. These tokens are separated by
+@code{metacharacters}. Alias expansion is performed by this step
+(@pxref{Aliases}).
+
+@item
+Parses the tokens into simple and compound commands
+(@pxref{Shell Commands}).
+
+@item
+Performs the various shell expansions (@pxref{Shell Expansions}), breaking
+the expanded tokens into lists of filenames (@pxref{Filename Expansion})
+and commands and arguments.
+
+@item
+Performs any necessary redirections (@pxref{Redirections}) and removes
+the redirection operators and their operands from the argument list.
+
+@item
+Executes the command (@pxref{Executing Commands}).
+
+@item
+Optionally waits for the command to complete and collects its exit
+status (@pxref{Exit Status}).
+
+@end enumerate
+
+@node Quoting
+@subsection Quoting
+@cindex quoting
+@menu
+* Escape Character:: How to remove the special meaning from a single
+ character.
+* Single Quotes:: How to inhibit all interpretation of a sequence
+ of characters.
+* Double Quotes:: How to suppress most of the interpretation of a
+ sequence of characters.
+* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
+* Locale Translation:: How to translate strings into different languages.
+@end menu
+
+Quoting is used to remove the special meaning of certain
+characters or words to the shell. Quoting can be used to
+disable special treatment for special characters, to prevent
+reserved words from being recognized as such, and to prevent
+parameter expansion.
+
+Each of the shell metacharacters (@pxref{Definitions})
+has special meaning to the shell and must be quoted if it is to
+represent itself.
+When the command history expansion facilities are being used
+(@pxref{History Interaction}), the
+@var{history expansion} character, usually @samp{!}, must be quoted
+to prevent history expansion. @xref{Bash History Facilities}, for
+more details concerning history expansion.
+
+There are three quoting mechanisms: the
+@var{escape character}, single quotes, and double quotes.
+
+@node Escape Character
+@subsubsection Escape Character
+A non-quoted backslash @samp{\} is the Bash escape character.
+It preserves the literal value of the next character that follows,
+with the exception of @code{newline}. If a @code{\newline} pair
+appears, and the backslash itself is not quoted, the @code{\newline}
+is treated as a line continuation (that is, it is removed from
+the input stream and effectively ignored).
+
+@node Single Quotes
+@subsubsection Single Quotes
+
+Enclosing characters in single quotes (@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.
+
+@node Double Quotes
+@subsubsection Double Quotes
+
+Enclosing characters in double quotes (@samp{"}) preserves the literal value
+of all characters within the quotes, with the exception of
+@samp{$}, @samp{`}, @samp{\},
+and, when history expansion is enabled, @samp{!}.
+When the shell is in
+@sc{posix} mode (@pxref{Bash POSIX Mode}),
+the @samp{!} has no special meaning
+within double quotes, even when history expansion is enabled.
+The characters @samp{$} and @samp{`}
+retain their special meaning within double quotes (@pxref{Shell Expansions}).
+The backslash retains its special meaning only when followed by one of
+the following characters:
+@samp{$}, @samp{`}, @samp{"}, @samp{\}, or @code{newline}.
+Within double quotes, backslashes that are followed by one of these
+characters are removed. Backslashes preceding characters without a
+special meaning are left unmodified.
+A double quote may be quoted within double quotes by preceding it with
+a backslash.
+If enabled, history expansion will be performed unless an @samp{!}
+appearing in double quotes is escaped using a backslash.
+The backslash preceding the @samp{!} is not removed.
+
+The special parameters @samp{*} and @samp{@@} have special meaning
+when in double quotes (@pxref{Shell Parameter Expansion}).
+
+@node ANSI-C Quoting
+@subsubsection ANSI-C Quoting
+@cindex quoting, ANSI
+
+Words of the form @code{$'@var{string}'} are treated specially. The
+word expands to @var{string}, with backslash-escaped characters replaced
+as specified by the ANSI C standard. Backslash escape sequences, if
+present, are decoded as follows:
+
+@table @code
+@item \a
+alert (bell)
+@item \b
+backspace
+@item \e
+@itemx \E
+an escape character (not ANSI C)
+@item \f
+form feed
+@item \n
+newline
+@item \r
+carriage return
+@item \t
+horizontal tab
+@item \v
+vertical tab
+@item \\
+backslash
+@item \'
+single quote
+@item \"
+double quote
+@item \?
+question mark
+@item \@var{nnn}
+the eight-bit character whose value is the octal value @var{nnn}
+(one to three octal digits)
+@item \x@var{HH}
+the eight-bit character whose value is the hexadecimal value @var{HH}
+(one or two hex digits)
+@item \u@var{HHHH}
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+@var{HHHH} (one to four hex digits)
+@item \U@var{HHHHHHHH}
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+@var{HHHHHHHH} (one to eight hex digits)
+@item \c@var{x}
+a control-@var{x} character
+@end table
+
+@noindent
+The expanded result is single-quoted, as if the dollar sign had not
+been present.
+
+@node Locale Translation
+@subsubsection Locale-Specific Translation
+@cindex localization
+@cindex internationalization
+@cindex native languages
+@cindex translation, native languages
+
+A double-quoted string preceded by a dollar sign (@samp{$}) will cause
+the string to be translated according to the current locale.
+If the current locale is @code{C} or @code{POSIX}, the dollar sign
+is ignored.
+If the string is translated and replaced, the replacement is
+double-quoted.
+
+@vindex LC_MESSAGES
+@vindex TEXTDOMAIN
+@vindex TEXTDOMAINDIR
+Some systems use the message catalog selected by the @env{LC_MESSAGES}
+shell variable. Others create the name of the message catalog from the
+value of the @env{TEXTDOMAIN} shell variable, possibly adding a
+suffix of @samp{.mo}. If you use the @env{TEXTDOMAIN} variable, you
+may need to set the @env{TEXTDOMAINDIR} variable to the location of
+the message catalog files. Still others use both variables in this
+fashion:
+@env{TEXTDOMAINDIR}/@env{LC_MESSAGES}/LC_MESSAGES/@env{TEXTDOMAIN}.mo.
+
+@node Comments
+@subsection Comments
+@cindex comments, shell
+
+In a non-interactive shell, or an interactive shell in which the
+@code{interactive_comments} option to the @code{shopt}
+builtin is enabled (@pxref{The Shopt Builtin}),
+a word beginning with @samp{#}
+causes that word and all remaining characters on that line to
+be ignored. An interactive shell without the @code{interactive_comments}
+option enabled does not allow comments. The @code{interactive_comments}
+option is on by default in interactive shells.
+@xref{Interactive Shells}, for a description of what makes
+a shell interactive.
+
+@node Shell Commands
+@section Shell Commands
+@cindex commands, shell
+
+A simple shell command such as @code{echo a b c} consists of the command
+itself followed by arguments, separated by spaces.
+
+More complex shell commands are composed of simple commands arranged together
+in a variety of ways: in a pipeline in which the output of one command
+becomes the input of a second, in a loop or conditional construct, or in
+some other grouping.
+
+@menu
+* Simple Commands:: The most common type of command.
+* Pipelines:: Connecting the input and output of several
+ commands.
+* Lists:: How to execute commands sequentially.
+* Compound Commands:: Shell commands for control flow.
+* Coprocesses:: Two-way communication between commands.
+* GNU Parallel:: Running commands in parallel.
+@end menu
+
+@node Simple Commands
+@subsection Simple Commands
+@cindex commands, simple
+
+A simple command is the kind of command encountered most often.
+It's just a sequence of words separated by @code{blank}s, terminated
+by one of the shell's control operators (@pxref{Definitions}). The
+first word generally specifies a command to be executed, with the
+rest of the words being that command's arguments.
+
+The return status (@pxref{Exit Status}) of a simple command is
+its exit status as provided
+by the @sc{posix} 1003.1 @code{waitpid} function, or 128+@var{n} if
+the command was terminated by signal @var{n}.
+
+@node Pipelines
+@subsection Pipelines
+@cindex pipeline
+@cindex commands, pipelines
+
+A @code{pipeline} is a sequence of one or more commands separated by
+one of the control operators @samp{|} or @samp{|&}.
+
+@rwindex time
+@rwindex !
+@cindex command timing
+The format for a pipeline is
+@example
+[time [-p]] [!] @var{command1} [ | or |& @var{command2} ] @dots{}
+@end example
+
+@noindent
+The output of each command in the pipeline is connected via a pipe
+to the input of the next command.
+That is, each command reads the previous command's output. This
+connection is performed before any redirections specified by the
+command.
+
+If @samp{|&} is used, @var{command1}'s standard error, in addition to
+its standard output, is connected to
+@var{command2}'s standard input through the pipe;
+it is shorthand for @code{2>&1 |}.
+This implicit redirection of the standard error to the standard output is
+performed after any redirections specified by the command.
+
+The reserved word @code{time} causes timing statistics
+to be printed for the pipeline once it finishes.
+The statistics currently consist of elapsed (wall-clock) time and
+user and system time consumed by the command's execution.
+The @option{-p} option changes the output format to that specified
+by @sc{posix}.
+When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}),
+it does not recognize @code{time} as a reserved word if the next
+token begins with a @samp{-}.
+The @env{TIMEFORMAT} variable may be set to a format string that
+specifies how the timing information should be displayed.
+@xref{Bash Variables}, for a description of the available formats.
+The use of @code{time} as a reserved word permits the timing of
+shell builtins, shell functions, and pipelines. An external
+@code{time} command cannot time these easily.
+
+When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}), @code{time}
+may be followed by a newline. In this case, the shell displays the
+total user and system time consumed by the shell and its children.
+The @env{TIMEFORMAT} variable may be used to specify the format of
+the time information.
+
+If the pipeline is not executed asynchronously (@pxref{Lists}), the
+shell waits for all commands in the pipeline to complete.
+
+Each command in a pipeline is executed in its own subshell, which is a
+separate process (@pxref{Command Execution Environment}).
+If the @code{lastpipe} option is enabled using the @code{shopt} builtin
+(@pxref{The Shopt Builtin}),
+the last element of a pipeline may be run by the shell process.
+
+The exit
+status of a pipeline is the exit status of the last command in the
+pipeline, unless the @code{pipefail} option is enabled
+(@pxref{The Set Builtin}).
+If @code{pipefail} is enabled, the pipeline's return status is the
+value of the last (rightmost) command to exit with a non-zero status,
+or zero if all commands exit successfully.
+If the reserved word @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.
+
+@node Lists
+@subsection Lists of Commands
+@cindex commands, lists
+
+A @code{list} is a sequence of one or more pipelines separated by one
+of the operators @samp{;}, @samp{&}, @samp{&&}, or @samp{||},
+and optionally terminated by one of @samp{;}, @samp{&}, or a
+@code{newline}.
+
+Of these list operators, @samp{&&} and @samp{||}
+have equal precedence, followed by @samp{;} and @samp{&},
+which have equal precedence.
+
+A sequence of one or more newlines may appear in a @code{list}
+to delimit commands, equivalent to a semicolon.
+
+If a command is terminated by the control operator @samp{&},
+the shell executes the command asynchronously in a subshell.
+This is known as executing the command in the @var{background},
+and these are referred to as @var{asynchronous} commands.
+The shell does not wait for the command to finish, and the return
+status is 0 (true).
+When job control is not active (@pxref{Job Control}),
+the standard input for asynchronous commands, in the absence of any
+explicit redirections, is redirected from @code{/dev/null}.
+
+Commands separated by a @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.
+
+@sc{and} and @sc{or} lists are sequences of one or more pipelines
+separated by the control operators @samp{&&} and @samp{||},
+respectively. @sc{and} and @sc{or} lists are executed with left
+associativity.
+
+An @sc{and} list has the form
+@example
+@var{command1} && @var{command2}
+@end example
+
+@noindent
+@var{command2} is executed if, and only if, @var{command1}
+returns an exit status of zero (success).
+
+An @sc{or} list has the form
+@example
+@var{command1} || @var{command2}
+@end example
+
+@noindent
+@var{command2} is executed if, and only if, @var{command1}
+returns a non-zero exit status.
+
+The return status of
+@sc{and} and @sc{or} lists is the exit status of the last command
+executed in the list.
+
+@node Compound Commands
+@subsection Compound Commands
+@cindex commands, compound
+
+@menu
+* Looping Constructs:: Shell commands for iterative action.
+* Conditional Constructs:: Shell commands for conditional execution.
+* Command Grouping:: Ways to group commands.
+@end menu
+
+Compound commands are the shell programming language constructs.
+Each construct begins with a reserved word or control operator and is
+terminated by a corresponding reserved word or operator.
+Any redirections (@pxref{Redirections}) associated with a compound command
+apply to all commands within that compound command unless explicitly overridden.
+
+In most cases a list of commands in a compound command's description may be
+separated from the rest of the command by one or more newlines, and may be
+followed by a newline in place of a semicolon.
+
+Bash provides looping constructs, conditional commands, and mechanisms
+to group commands and execute them as a unit.
+
+@node Looping Constructs
+@subsubsection Looping Constructs
+@cindex commands, looping
+
+Bash supports the following looping constructs.
+
+Note that wherever a @samp{;} appears in the description of a
+command's syntax, it may be replaced with one or more newlines.
+
+@table @code
+@item until
+@rwindex until
+@rwindex do
+@rwindex done
+The syntax of the @code{until} command is:
+
+@example
+until @var{test-commands}; do @var{consequent-commands}; done
+@end example
+
+Execute @var{consequent-commands} as long as
+@var{test-commands} has an exit status which is not zero.
+The return status is the exit status of the last command executed
+in @var{consequent-commands}, or zero if none was executed.
+
+@item while
+@rwindex while
+The syntax of the @code{while} command is:
+
+@example
+while @var{test-commands}; do @var{consequent-commands}; done
+@end example
+
+Execute @var{consequent-commands} as long as
+@var{test-commands} has an exit status of zero.
+The return status is the exit status of the last command executed
+in @var{consequent-commands}, or zero if none was executed.
+
+@item for
+@rwindex for
+The syntax of the @code{for} command is:
+
+@example
+for @var{name} [ [in [@var{words} @dots{}] ] ; ] do @var{commands}; done
+@end example
+
+Expand @var{words} (@pxref{Shell Expansions}), and execute @var{commands}
+once for each member
+in the resultant list, with @var{name} bound to the current member.
+If @samp{in @var{words}} is not present, the @code{for} command
+executes the @var{commands} once for each positional parameter that is
+set, as if @samp{in "$@@"} had been specified
+(@pxref{Special Parameters}).
+
+The return status is the exit status of the last command that executes.
+If there are no items in the expansion of @var{words}, no commands are
+executed, and the return status is zero.
+
+An alternate form of the @code{for} command is also supported:
+
+@example
+for (( @var{expr1} ; @var{expr2} ; @var{expr3} )) ; do @var{commands} ; done
+@end example
+
+First, the arithmetic expression @var{expr1} is evaluated according
+to the rules described below (@pxref{Shell Arithmetic}).
+The arithmetic expression @var{expr2} is then evaluated repeatedly
+until it evaluates to zero.
+Each time @var{expr2} evaluates to a non-zero value, @var{commands} are
+executed and the arithmetic expression @var{expr3} 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{commands}
+that is executed, or false if any of the expressions is invalid.
+@end table
+
+The @code{break} and @code{continue} builtins (@pxref{Bourne Shell Builtins})
+may be used to control loop execution.
+
+@node Conditional Constructs
+@subsubsection Conditional Constructs
+@cindex commands, conditional
+
+@table @code
+@item if
+@rwindex if
+@rwindex then
+@rwindex else
+@rwindex elif
+@rwindex fi
+The syntax of the @code{if} command is:
+
+@example
+if @var{test-commands}; then
+ @var{consequent-commands};
+[elif @var{more-test-commands}; then
+ @var{more-consequents};]
+[else @var{alternate-consequents};]
+fi
+@end example
+
+The @var{test-commands} list is executed, and if its return status is zero,
+the @var{consequent-commands} list is executed.
+If @var{test-commands} returns a non-zero status, each @code{elif} list
+is executed in turn, and if its exit status is zero,
+the corresponding @var{more-consequents} is executed and the
+command completes.
+If @samp{else @var{alternate-consequents}} is present, and
+the final command in the final @code{if} or @code{elif} clause
+has a non-zero exit status, then @var{alternate-consequents} is executed.
+The return status is the exit status of the last command executed, or
+zero if no condition tested true.
+
+@item case
+@rwindex case
+@rwindex in
+@rwindex esac
+The syntax of the @code{case} command is:
+
+@example
+case @var{word} in
+ [ [(] @var{pattern} [| @var{pattern}]@dots{}) @var{command-list} ;;]@dots{}
+esac
+@end example
+
+@code{case} will selectively execute the @var{command-list} corresponding to
+the first @var{pattern} that matches @var{word}.
+The match is performed according
+to the rules described below in @ref{Pattern Matching}.
+If the @code{nocasematch} shell option
+(see the description of @code{shopt} in @ref{The Shopt Builtin})
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+The @samp{|} is used to separate multiple patterns, and the @samp{)}
+operator terminates a pattern list.
+A list of patterns and an associated command-list is known
+as a @var{clause}.
+
+Each clause must be terminated with @samp{;;}, @samp{;&}, or @samp{;;&}.
+The @var{word} undergoes tilde expansion, parameter expansion, command
+substitution, arithmetic expansion, and quote removal
+(@pxref{Shell Parameter Expansion})
+before matching is
+attempted. Each @var{pattern} undergoes tilde expansion, parameter
+expansion, command substitution, and arithmetic expansion.
+
+There may be an arbitrary number of @code{case} clauses, each terminated
+by a @samp{;;}, @samp{;&}, or @samp{;;&}.
+The first pattern that matches determines the
+command-list that is executed.
+It's a common idiom to use @samp{*} as the final pattern to define the
+default case, since that pattern will always match.
+
+Here is an example using @code{case} in a script that could be used to
+describe one interesting feature of an animal:
+
+@example
+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."
+@end example
+
+@noindent
+
+If the @samp{;;} operator is used, no subsequent matches are attempted after
+the first pattern match.
+Using @samp{;&} in place of @samp{;;} causes execution to continue with
+the @var{command-list} associated with the next clause, if any.
+Using @samp{;;&} in place of @samp{;;} causes the shell to test the patterns
+in the next clause, if any, and execute any associated @var{command-list}
+on a successful match.
+
+The return status is zero if no @var{pattern} is matched. Otherwise, the
+return status is the exit status of the @var{command-list} executed.
+
+@item select
+@rwindex select
+
+The @code{select} construct allows the easy generation of menus.
+It has almost the same syntax as the @code{for} command:
+
+@example
+select @var{name} [in @var{words} @dots{}]; do @var{commands}; done
+@end example
+
+The list of words following @code{in} is expanded, generating a list
+of items. The set of expanded words is printed on the standard
+error output stream, each preceded by a number. If the
+@samp{in @var{words}} is omitted, the positional parameters are printed,
+as if @samp{in "$@@"} had been specified.
+The @env{PS3} prompt is then displayed and a line is read from the
+standard input.
+If the line consists of a number corresponding to one of the displayed
+words, then the value of @var{name} is set to that word.
+If the line is empty, the words and prompt are displayed again.
+If @code{EOF} is read, the @code{select} command completes.
+Any other value read causes @var{name} to be set to null.
+The line read is saved in the variable @env{REPLY}.
+
+The @var{commands} are executed after each selection until a
+@code{break} command is executed, at which
+point the @code{select} command completes.
+
+Here is an example that allows the user to pick a filename from the
+current directory, and displays the name and index of the file
+selected.
+
+@example
+select fname in *;
+do
+ echo you picked $fname \($REPLY\)
+ break;
+done
+@end example
+
+@item ((@dots{}))
+@example
+(( @var{expression} ))
+@end example
+
+The arithmetic @var{expression} is evaluated according to the rules
+described below (@pxref{Shell Arithmetic}).
+If the value of the expression is non-zero, the return status is 0;
+otherwise the return status is 1. This is exactly equivalent to
+@example
+let "@var{expression}"
+@end example
+@noindent
+@xref{Bash Builtins}, for a full description of the @code{let} builtin.
+
+@item [[@dots{}]]
+@rwindex [[
+@rwindex ]]
+@example
+[[ @var{expression} ]]
+@end example
+
+Return a status of 0 or 1 depending on the evaluation of
+the conditional expression @var{expression}.
+Expressions are composed of the primaries described below in
+@ref{Bash Conditional Expressions}.
+Word splitting and filename expansion are not performed on the words
+between the @code{[[} and @code{]]}; tilde expansion, parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal are performed.
+Conditional operators such as @samp{-f} must be unquoted to be recognized
+as primaries.
+
+When used with @code{[[}, the @samp{<} and @samp{>} operators sort
+lexicographically using the current locale.
+
+When the @samp{==} and @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 @ref{Pattern Matching},
+as if the @code{extglob} shell option were enabled.
+The @samp{=} operator is identical to @samp{==}.
+If the @code{nocasematch} shell option
+(see the description of @code{shopt} in @ref{The Shopt Builtin})
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+The return value is 0 if the string matches (@samp{==}) or does not
+match (@samp{!=}) the pattern, and 1 otherwise.
+Any part of the pattern may be quoted to force the quoted portion
+to be matched as a string.
+
+An additional binary operator, @samp{=~}, is available, with the same
+precedence as @samp{==} and @samp{!=}.
+When it is used, the string to the right of the operator is considered
+a @sc{POSIX} extended regular expression and matched accordingly
+(as in @i{regex}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 @code{nocasematch} shell option
+(see the description of @code{shopt} in @ref{The Shopt Builtin})
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+Any part of the pattern may be quoted to force the quoted portion
+to be matched as a string.
+Bracket expressions in regular expressions must be treated carefully,
+since normal quoting characters lose their meanings between brackets.
+If the pattern is stored in a shell variable, quoting the variable
+expansion forces the entire pattern to be matched as a string.
+Substrings matched by parenthesized subexpressions within the regular
+expression are saved in the array variable @code{BASH_REMATCH}.
+The element of @code{BASH_REMATCH} with index 0 is the portion of the string
+matching the entire regular expression.
+The element of @code{BASH_REMATCH} with index @var{n} is the portion of the
+string matching the @var{n}th parenthesized subexpression.
+
+For example, the following will match a line
+(stored in the shell variable @var{line})
+if there is a sequence of characters in the value consisting of
+any number, including zero, of
+space characters, zero or one instances of @samp{a}, then a @samp{b}:
+@example
+[[ $line =~ [[:space:]]*?(a)b ]]
+@end example
+
+@noindent
+That means values like @samp{aab} and @samp{ aaaaaab} will match, as
+will a line containing a @samp{b} anywhere in its value.
+
+Storing the regular expression in a shell variable is often a useful
+way to avoid problems with quoting characters that are special to the
+shell.
+It is sometimes difficult to specify a regular expression literally
+without using quotes, or to keep track of the quoting used by regular
+expressions while paying attention to the shell's quote removal.
+Using a shell variable to store the pattern decreases these problems.
+For example, the following is equivalent to the above:
+@example
+pattern='[[:space:]]*?(a)b'
+[[ $line =~ $pattern ]]
+@end example
+
+@noindent
+If you want to match a character that's special to the regular expression
+grammar, it has to be quoted to remove its special meaning.
+This means that in the pattern @samp{xxx.txt}, the @samp{.} matches any
+character in the string (its usual regular expression meaning), but in the
+pattern @samp{"xxx.txt"} it can only match a literal @samp{.}.
+Shell programmers should take special care with backslashes, since backslashes
+are used both by the shell and regular expressions to remove the special
+meaning from the following character.
+The following two sets of commands are @emph{not} equivalent:
+@example
+pattern='\.'
+
+[[ . =~ $pattern ]]
+[[ . =~ \. ]]
+
+[[ . =~ "$pattern" ]]
+[[ . =~ '\.' ]]
+@end example
+
+@noindent
+The first two matches will succeed, but the second two will not, because
+in the second two the backslash will be part of the pattern to be matched.
+In the first two examples, the backslash removes the special meaning from
+@samp{.}, so the literal @samp{.} matches.
+If the string in the first examples were anything other than @samp{.}, say
+@samp{a}, the pattern would not match, because the quoted @samp{.} in the
+pattern loses its special meaning of matching any single character.
+
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence:
+
+@table @code
+@item ( @var{expression} )
+Returns the value of @var{expression}.
+This may be used to override the normal precedence of operators.
+
+@item ! @var{expression}
+True if @var{expression} is false.
+
+@item @var{expression1} && @var{expression2}
+True if both @var{expression1} and @var{expression2} are true.
+
+@item @var{expression1} || @var{expression2}
+True if either @var{expression1} or @var{expression2} is true.
+@end table
+
+@noindent
+The @code{&&} and @code{||} operators do not evaluate @var{expression2} if the
+value of @var{expression1} is sufficient to determine the return
+value of the entire conditional expression.
+@end table
+
+@node Command Grouping
+@subsubsection Grouping Commands
+@cindex commands, grouping
+
+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.
+
+@table @code
+@item ()
+@example
+( @var{list} )
+@end example
+
+Placing a list of commands between parentheses causes a subshell
+environment to be created (@pxref{Command Execution Environment}), and each
+of the commands in @var{list} to be executed in that subshell. Since the
+@var{list} is executed in a subshell, variable assignments do not remain in
+effect after the subshell completes.
+
+@item @{@}
+@rwindex @{
+@rwindex @}
+@example
+@{ @var{list}; @}
+@end example
+
+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} is required.
+@end table
+
+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}, so they must be separated from the @var{list}
+by @code{blank}s or other shell metacharacters.
+The parentheses are @code{operators}, and are
+recognized as separate tokens by the shell even if they are not separated
+from the @var{list} by whitespace.
+
+The exit status of both of these constructs is the exit status of
+@var{list}.
+
+@node Coprocesses
+@subsection Coprocesses
+@cindex coprocess
+
+A @code{coprocess} is a shell command preceded by the @code{coproc}
+reserved word.
+A coprocess is executed asynchronously in a subshell, as if the command
+had been terminated with the @samp{&} control operator, with a two-way pipe
+established between the executing shell and the coprocess.
+
+The format for a coprocess is:
+@example
+coproc [@var{NAME}] @var{command} [@var{redirections}]
+@end example
+
+@noindent
+This creates a coprocess named @var{NAME}.
+If @var{NAME} is not supplied, the default name is @var{COPROC}.
+@var{NAME} must not be supplied if @var{command} is a simple
+command (@pxref{Simple Commands}); otherwise, it is interpreted as
+the first word of the simple command.
+
+When the coprocess is executed, the shell creates an array variable
+(@pxref{Arrays})
+named @env{NAME} in the context of the executing shell.
+The standard output of @var{command}
+is connected via a pipe to a file descriptor in the executing shell,
+and that file descriptor is assigned to @env{NAME}[0].
+The standard input of @var{command}
+is connected via a pipe to a file descriptor in the executing shell,
+and that file descriptor is assigned to @env{NAME}[1].
+This pipe is established before any redirections specified by the
+command (@pxref{Redirections}).
+The file descriptors can be utilized as arguments to shell commands
+and redirections using standard word expansions.
+Other than those created to execute command and process substitutions,
+the file descriptors are not available in subshells.
+
+The process ID of the shell spawned to execute the coprocess is
+available as the value of the variable @env{NAME}_PID.
+The @code{wait}
+builtin command may be used to wait for the coprocess to terminate.
+
+Since the coprocess is created as an asynchronous command,
+the @code{coproc} command always returns success.
+The return status of a coprocess is the exit status of @var{command}.
+
+@node GNU Parallel
+@subsection GNU Parallel
+
+There are ways to run commands in parallel that are not built into Bash.
+GNU Parallel is a tool to do just that.
+
+GNU Parallel, as its name suggests, can be used to build and run commands
+in parallel. You may run the same command with different arguments, whether
+they are filenames, usernames, hostnames, or lines read from files. GNU
+Parallel provides shorthand references to many of the most common operations
+(input lines, various portions of the input line, different ways to specify
+the input source, and so on). Parallel can replace @code{xargs} or feed
+commands from its input sources to several different instances of Bash.
+
+For a complete description, refer to the GNU Parallel documentation. A few
+examples should provide a brief introduction to its use.
+
+For example, it is easy to replace @code{xargs} to gzip all html files in the
+current directory and its subdirectories:
+@example
+find . -type f -name '*.html' -print | parallel gzip
+@end example
+@noindent
+If you need to protect special characters such as newlines in file names,
+use find's @option{-print0} option and parallel's @option{-0} option.
+
+You can use Parallel to move files from the current directory when the
+number of files is too large to process with one @code{mv} invocation:
+@example
+ls | parallel mv @{@} destdir
+@end example
+
+As you can see, the @{@} is replaced with each line read from standard input.
+While using @code{ls} will work in most instances, it is not sufficient to
+deal with all filenames.
+If you need to accommodate special characters in filenames, you can use
+
+@example
+find . -depth 1 \! -name '.*' -print0 | parallel -0 mv @{@} destdir
+@end example
+
+@noindent
+as alluded to above.
+
+This will run as many @code{mv} commands as there are files in the current
+directory.
+You can emulate a parallel @code{xargs} by adding the @option{-X} option:
+@example
+find . -depth 1 \! -name '.*' -print0 | parallel -0 -X mv @{@} destdir
+@end example
+
+GNU Parallel can replace certain common idioms that operate on lines read
+from a file (in this case, filenames listed one per line):
+@example
+ while IFS= read -r x; do
+ do-something1 "$x" "config-$x"
+ do-something2 < "$x"
+ done < file | process-output
+@end example
+
+@noindent
+with a more compact syntax reminiscent of lambdas:
+@example
+cat list | parallel "do-something1 @{@} config-@{@} ; do-something2 < @{@}" |
+ process-output
+@end example
+
+Parallel provides a built-in mechanism to remove filename extensions, which
+lends itself to batch file transformations or renaming:
+@example
+ls *.gz | parallel -j+0 "zcat @{@} | bzip2 >@{.@}.bz2 && rm @{@}"
+@end example
+@noindent
+This will recompress all files in the current directory with names ending
+in .gz using bzip2, running one job per CPU (-j+0) in parallel.
+(We use @code{ls} for brevity here; using @code{find} as above is more
+robust in the face of filenames containing unexpected characters.)
+Parallel can take arguments from the command line; the above can also be
+written as
+
+@example
+parallel "zcat @{@} | bzip2 >@{.@}.bz2 && rm @{@}" ::: *.gz
+@end example
+
+If a command generates output, you may want to preserve the input order in
+the output. For instance, the following command
+@example
+@{
+ echo foss.org.my ;
+ echo debian.org ;
+ echo freenetproject.org ;
+@} | parallel traceroute
+@end example
+@noindent
+will display as output the traceroute invocation that finishes first.
+Adding the @option{-k} option
+@example
+@{
+ echo foss.org.my ;
+ echo debian.org ;
+ echo freenetproject.org ;
+@} | parallel -k traceroute
+@end example
+@noindent
+will ensure that the output of @code{traceroute foss.org.my} is displayed first.
+
+Finally, Parallel can be used to run a sequence of shell commands in parallel,
+similar to @samp{cat file | bash}.
+It is not uncommon to take a list of filenames, create a series of shell
+commands to operate on them, and feed that list of commands to a shell.
+Parallel can speed this up. Assuming that @file{file} contains a list of
+shell commands, one per line,
+
+@example
+parallel -j 10 < file
+@end example
+
+@noindent
+will evaluate the commands using the shell (since no explicit command is
+supplied as an argument), in blocks of ten shell jobs at a time.
+
+@node Shell Functions
+@section Shell Functions
+@cindex shell function
+@cindex functions, shell
+
+Shell functions are a way to group commands for later execution
+using a single name for the group. They are executed just like
+a "regular" command.
+When the name of a shell function is used as a simple command name,
+the list of commands associated with that function name is executed.
+Shell functions are executed in the current
+shell context; no new process is created to interpret them.
+
+Functions are declared using this syntax:
+@rwindex function
+@example
+@var{name} () @var{compound-command} [ @var{redirections} ]
+@end example
+
+or
+
+@example
+function @var{name} [()] @var{compound-command} [ @var{redirections} ]
+@end example
+
+This defines a shell function named @var{name}. The reserved
+word @code{function} is optional.
+If the @code{function} reserved
+word is supplied, the parentheses are optional.
+The @var{body} of the function is the compound command
+@var{compound-command} (@pxref{Compound Commands}).
+That command is usually a @var{list} enclosed between @{ and @}, but
+may be any compound command listed above,
+with one exception: If the @code{function} reserved word is used, but the
+parentheses are not supplied, the braces are required.
+@var{compound-command} is executed whenever @var{name} is specified as the
+name of a command.
+When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}),
+@var{name} may not be the same as one of the special builtins
+(@pxref{Special Builtins}).
+Any redirections (@pxref{Redirections}) associated with the shell function
+are performed when the function is executed.
+
+A function definition may be deleted using the @option{-f} option to the
+@code{unset} builtin (@pxref{Bourne Shell Builtins}).
+
+The exit status of a function definition is zero unless a syntax error
+occurs or a readonly function with the same name already exists.
+When executed, the exit status of a function is the exit status of the
+last command executed in the body.
+
+Note that for historical reasons, in the most common usage the curly braces
+that surround the body of the function must be separated from the body by
+@code{blank}s or newlines.
+This is because the braces are reserved words and are only recognized
+as such when they are separated from the command list
+by whitespace or another shell metacharacter.
+Also, when using the braces, the @var{list} must be terminated by a semicolon,
+a @samp{&}, or a newline.
+
+When a function is executed, the arguments to the
+function become the positional parameters
+during its execution (@pxref{Positional Parameters}).
+The special parameter @samp{#} that expands to the number of
+positional parameters is updated to reflect the change.
+Special parameter @code{0} is unchanged.
+The first element of the @env{FUNCNAME} variable is set to the
+name of the function while the function is executing.
+
+All other aspects of the shell execution
+environment are identical between a function and its caller
+with these exceptions:
+the @env{DEBUG} and @env{RETURN} traps
+are not inherited unless the function has been given the
+@code{trace} attribute using the @code{declare} builtin or
+the @code{-o functrace} option has been enabled with
+the @code{set} builtin,
+(in which case all functions inherit the @env{DEBUG} and @env{RETURN} traps),
+and the @env{ERR} trap is not inherited unless the @code{-o errtrace}
+shell option has been enabled.
+@xref{Bourne Shell Builtins}, for the description of the
+@code{trap} builtin.
+
+The @env{FUNCNEST} variable, if set to a numeric value greater
+than 0, defines a maximum function nesting level. Function
+invocations that exceed the limit cause the entire command to
+abort.
+
+If the builtin command @code{return}
+is executed in a function, the function completes and
+execution resumes with the next command after the function
+call.
+Any command associated with the @code{RETURN} trap is executed
+before execution resumes.
+When a function completes, the values of the
+positional parameters and the special parameter @samp{#}
+are restored to the values they had prior to the function's
+execution. If a numeric argument is given to @code{return},
+that is the function's return status; otherwise the function's
+return status is the exit status of the last command executed
+before the @code{return}.
+
+Variables local to the function may be declared with the
+@code{local} builtin. These variables are visible only to
+the function and the commands it invokes. This is particularly
+important when a shell function calls other functions.
+
+Local variables "shadow" variables with the same name declared at
+previous scopes. For instance, a local variable declared in a function
+hides a global variable of the same name: references and assignments
+refer to the local variable, leaving the global variable unmodified.
+When the function returns, the global variable is once again visible.
+
+The shell uses @var{dynamic scoping} to control a variable's visibility
+within functions.
+With dynamic scoping, visible variables and their values
+are a result of the sequence of function calls that caused execution
+to reach the current function.
+The value of a variable that a function sees depends
+on its value within its caller, if any, whether that caller is
+the "global" scope or another shell function.
+This is also the value that a local variable
+declaration "shadows", and the value that is restored when the function
+returns.
+
+For example, if a variable @var{var} is declared as local in function
+@var{func1}, and @var{func1} calls another function @var{func2},
+references to @var{var} made from within @var{func2} will resolve to the
+local variable @var{var} from @var{func1}, shadowing any global variable
+named @var{var}.
+
+The following script demonstrates this behavior.
+When executed, the script displays
+
+@example
+In func2, var = func1 local
+@end example
+
+@example
+func1()
+@{
+ local var='func1 local'
+ func2
+@}
+
+func2()
+@{
+ echo "In func2, var = $var"
+@}
+
+var=global
+func1
+@end example
+
+The @code{unset} builtin also acts using the same dynamic scope: if a
+variable is local to the current scope, @code{unset} will unset it;
+otherwise the unset will refer to the variable found in any calling scope
+as described above.
+If a variable at the current local scope is unset, it will remain so
+until it is reset in that scope or until the function returns.
+Once the function returns, any instance of the variable at a previous
+scope will become visible.
+If the unset acts on a variable at a previous scope, any instance of a
+variable with that name that had been shadowed will become visible.
+
+Function names and definitions may be listed with the
+@option{-f} option to the @code{declare} (@code{typeset})
+builtin command (@pxref{Bash Builtins}).
+The @option{-F} option to @code{declare} or @code{typeset}
+will list the function names only
+(and optionally the source file and line number, if the @code{extdebug}
+shell option is enabled).
+Functions may be exported so that subshells
+automatically have them defined with the
+@option{-f} option to the @code{export} builtin
+(@pxref{Bourne Shell Builtins}).
+
+Functions may be recursive.
+The @code{FUNCNEST} variable may be used to limit the depth of the
+function call stack and restrict the number of function invocations.
+By default, no limit is placed on the number of recursive calls.
+
+@node Shell Parameters
+@section Shell Parameters
+@cindex parameters
+@cindex variable, shell
+@cindex shell variable
+
+@menu
+* Positional Parameters:: The shell's command-line arguments.
+* Special Parameters:: Parameters denoted by special characters.
+@end menu
+
+A @var{parameter} is an entity that stores values.
+It can be a @code{name}, a number, or one of the special characters
+listed below.
+A @var{variable} is a parameter denoted by a @code{name}.
+A variable has a @var{value} and zero or more @var{attributes}.
+Attributes are assigned using the @code{declare} builtin command
+(see the description of the @code{declare} builtin in @ref{Bash Builtins}).
+
+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} builtin command.
+
+A variable may be assigned to by a statement of the form
+@example
+@var{name}=[@var{value}]
+@end example
+@noindent
+If @var{value}
+is not given, the variable is assigned the null string. All
+@var{value}s undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote
+removal (detailed below). If the variable has its @code{integer}
+attribute set, then @var{value}
+is evaluated as an arithmetic expression even if the @code{$((@dots{}))}
+expansion is not used (@pxref{Arithmetic Expansion}).
+Word splitting is not performed, with the exception
+of @code{"$@@"} as explained below.
+Filename expansion is not performed.
+Assignment statements may also appear as arguments to the
+@code{alias},
+@code{declare}, @code{typeset}, @code{export}, @code{readonly},
+and @code{local} builtin commands (@var{declaration} commands).
+When in @sc{posix} mode (@pxref{Bash POSIX Mode}), these builtins may appear
+in a command after one or more instances of the @code{command} builtin
+and retain these assignment statement properties.
+
+In the context where an assignment statement is assigning a value
+to a shell variable or array index (@pxref{Arrays}), the @samp{+=}
+operator can be used to
+append to or add to the variable's previous value.
+This includes arguments to builtin commands such as @code{declare} that
+accept assignment statements (@var{declaration} commands).
+When @samp{+=} is applied to a variable for which the @var{integer} attribute
+has been set, @var{value} is evaluated as an arithmetic expression and
+added to the variable's current value, which is also evaluated.
+When @samp{+=} is applied to an array variable using compound assignment
+(@pxref{Arrays}), the
+variable's value is not unset (as it is when using @samp{=}), and new
+values are appended to the array beginning at one greater than the array's
+maximum index (for indexed arrays), or added as additional key-value pairs
+in an associative array.
+When applied to a string-valued variable, @var{value} is expanded and
+appended to the variable's value.
+
+A variable can be assigned the @var{nameref} attribute using the
+@option{-n} option to the @code{declare} or @code{local} builtin commands
+(@pxref{Bash Builtins})
+to create a @var{nameref}, or a reference to another variable.
+This allows variables to be manipulated indirectly.
+Whenever the nameref variable is referenced, assigned to, unset, or has
+its attributes modified (other than using or changing the nameref
+attribute itself), the
+operation is actually performed on the variable specified by the nameref
+variable's value.
+A nameref is commonly used within shell functions to refer to a variable
+whose name is passed as an argument to the function.
+For instance, if a variable name is passed to a shell function as its first
+argument, running
+@example
+declare -n ref=$1
+@end example
+@noindent
+inside the function creates a nameref variable @var{ref} whose value is
+the variable name passed as the first argument.
+References and assignments to @var{ref}, and changes to its attributes,
+are treated as references, assignments, and attribute modifications
+to the variable whose name was passed as @code{$1}.
+
+If the control variable in a @code{for} loop has the nameref attribute,
+the list of words can be a list of shell variables, and a name reference
+will be established for each word in the list, in turn, when the loop is
+executed.
+Array variables cannot be given the nameref attribute.
+However, nameref variables can reference array variables and subscripted
+array variables.
+Namerefs can be unset using the @option{-n} option to the @code{unset} builtin
+(@pxref{Bourne Shell Builtins}).
+Otherwise, if @code{unset} is executed with the name of a nameref variable
+as an argument, the variable referenced by the nameref variable will be unset.
+
+@node Positional Parameters
+@subsection Positional Parameters
+@cindex parameters, positional
+
+A @var{positional parameter} is a parameter denoted by one or more
+digits, other than the single digit @code{0}. Positional parameters are
+assigned from the shell's arguments when it is invoked,
+and may be reassigned using the @code{set} builtin command.
+Positional parameter @code{N} may be referenced as @code{$@{N@}}, or
+as @code{$N} when @code{N} consists of a single digit.
+Positional parameters may not be assigned to with assignment statements.
+The @code{set} and @code{shift} builtins are used to set and
+unset them (@pxref{Shell Builtin Commands}).
+The positional parameters are
+temporarily replaced when a shell function is executed
+(@pxref{Shell Functions}).
+
+When a positional parameter consisting of more than a single
+digit is expanded, it must be enclosed in braces.
+
+@node Special Parameters
+@subsection Special Parameters
+@cindex parameters, special
+
+The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+
+@vtable @code
+
+@item *
+@vindex $*
+($*) Expands to the positional parameters, starting from one.
+When the expansion is not within double quotes, each positional parameter
+expands to a separate word.
+In contexts where it is performed, those words
+are subject to further word splitting and pathname expansion.
+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
+@env{IFS} special variable. That is, @code{"$*"} is equivalent
+to @code{"$1@var{c}$2@var{c}@dots{}"}, where @var{c}
+is the first character of the value of the @code{IFS}
+variable.
+If @env{IFS} is unset, the parameters are separated by spaces.
+If @env{IFS} is null, the parameters are joined without intervening
+separators.
+
+@item @@
+@vindex $@@
+($@@) Expands to the positional parameters, starting from one.
+In contexts where word splitting is performed, this expands each
+positional parameter to a separate word; if not within double
+quotes, these words are subject to word splitting.
+In contexts where word splitting is not performed,
+this expands to a single word
+with each positional parameter separated by a space.
+When the
+expansion occurs within double quotes, and word splitting is performed,
+each parameter expands to a
+separate word. That is, @code{"$@@"} is equivalent to
+@code{"$1" "$2" @dots{}}.
+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{"$@@"} and
+@code{$@@}
+expand to nothing (i.e., they are removed).
+
+@item #
+@vindex $#
+($#) Expands to the number of positional parameters in decimal.
+
+@item ?
+@vindex $?
+($?) Expands to the exit status of the most recently executed foreground
+pipeline.
+
+@item -
+@vindex $-
+($-, a hyphen.) Expands to the current option flags as specified upon
+invocation, by the @code{set}
+builtin command, or those set by the shell itself
+(such as the @option{-i} option).
+
+@item $
+@vindex $$
+($$) Expands to the process @sc{id} of the shell. In a @code{()} subshell, it
+expands to the process @sc{id} of the invoking shell, not the subshell.
+
+@item !
+@vindex $!
+($!) Expands to the process @sc{id} of the job most recently placed into the
+background, whether executed as an asynchronous command or using
+the @code{bg} builtin (@pxref{Job Control Builtins}).
+
+@item 0
+@vindex $0
+($0) 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
+(@pxref{Shell Scripts}), @code{$0} is set to the name of that file.
+If Bash is started with the @option{-c} option (@pxref{Invoking Bash}),
+then @code{$0} is set to the first argument after the string to be
+executed, if one is present. Otherwise, it is set
+to the filename used to invoke Bash, as given by argument zero.
+
+@item _
+@vindex $_
+($_, 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 simple
+command executed in the foreground, 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.
+@end vtable
+
+@node Shell Expansions
+@section Shell Expansions
+@cindex expansion
+
+Expansion is performed on the command line after it has been split into
+@code{token}s. There are seven kinds of expansion performed:
+
+@itemize @bullet
+@item brace expansion
+@item tilde expansion
+@item parameter and variable expansion
+@item command substitution
+@item arithmetic expansion
+@item word splitting
+@item filename expansion
+@end itemize
+
+@menu
+* Brace Expansion:: Expansion of expressions within braces.
+* Tilde Expansion:: Expansion of the ~ character.
+* Shell Parameter Expansion:: How Bash expands variables to their values.
+* Command Substitution:: Using the output of a command as an argument.
+* Arithmetic Expansion:: How to use arithmetic in shell expansions.
+* Process Substitution:: A way to write and read to and from a
+ command.
+* Word Splitting:: How the results of expansion are split into separate
+ arguments.
+* Filename Expansion:: A shorthand for specifying filenames matching patterns.
+* Quote Removal:: How and when quote characters are removed from
+ words.
+@end menu
+
+The order of expansions is:
+brace expansion;
+tilde expansion, parameter and variable expansion, arithmetic expansion,
+and command substitution (done in a left-to-right fashion);
+word splitting;
+and filename expansion.
+
+On systems that can support it, there is an additional expansion
+available: @var{process substitution}.
+This is performed at the
+same time as tilde, parameter, variable, and arithmetic expansion and
+command substitution.
+
+After these expansions are performed, quote characters present in the
+original word are removed unless they have been quoted themselves
+(@var{quote removal}).
+
+Only brace expansion, word splitting, and filename expansion
+can increase 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{"$@@"} and @code{$*} (@pxref{Special Parameters}), and
+@code{"$@{@var{name}[@@]@}"} and @code{$@{@var{name}[*]@}}
+(@pxref{Arrays}).
+
+After all expansions, @code{quote removal} (@pxref{Quote Removal})
+is performed.
+
+@node Brace Expansion
+@subsection Brace Expansion
+@cindex brace expansion
+@cindex expansion, brace
+
+Brace expansion is a mechanism by which arbitrary strings may be generated.
+This mechanism is similar to
+@var{filename expansion} (@pxref{Filename Expansion}),
+but the filenames generated need not exist.
+Patterns to be brace expanded take the form of an optional @var{preamble},
+followed by either a series of comma-separated strings or a sequence expression
+between a pair of braces,
+followed by an optional @var{postscript}.
+The preamble is prefixed to each string contained within the braces, and
+the postscript is then appended to each resulting string, expanding left
+to right.
+
+Brace expansions may be nested.
+The results of each expanded string are not sorted; left to right order
+is preserved.
+For example,
+@example
+bash$ echo a@{d,c,b@}e
+ade ace abe
+@end example
+
+A sequence expression takes the form @code{@{@var{x}..@var{y}[..@var{incr}]@}},
+where @var{x} and @var{y} are either integers or single characters,
+and @var{incr}, an optional increment, is an integer.
+When integers are supplied, the expression expands to each number between
+@var{x} and @var{y}, inclusive.
+Supplied integers may be prefixed with @samp{0} to force each term to have the
+same width.
+When either @var{x} or @var{y} begins with a zero, the shell
+attempts to force all generated terms to contain the same number of digits,
+zero-padding where necessary.
+When characters are supplied, the expression expands to each character
+lexicographically between @var{x} and @var{y}, inclusive,
+using the default C locale.
+Note that both @var{x} and @var{y} must be of the same type.
+When the increment is supplied, it is used as the difference between
+each term. The default increment is 1 or -1 as appropriate.
+
+Brace expansion is performed before any other expansions,
+and any characters special to other expansions are preserved
+in the result. It is strictly textual. Bash
+does not apply any syntactic interpretation to the context of the
+expansion or the text between the braces.
+
+A correctly-formed brace expansion must contain unquoted opening
+and closing braces, and at least one unquoted comma or a valid
+sequence expression.
+Any incorrectly formed brace expansion is left unchanged.
+
+A @{ or @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{$@{}
+is not considered eligible for brace expansion,
+and inhibits brace expansion until the closing @samp{@}}..
+
+This construct is typically used as shorthand when the common
+prefix of the strings to be generated is longer than in the
+above example:
+@example
+mkdir /usr/local/src/bash/@{old,new,dist,bugs@}
+@end example
+or
+@example
+chown root /usr/@{ucb/@{ex,edit@},lib/@{ex?.?*,how_ex@}@}
+@end example
+
+@node Tilde Expansion
+@subsection Tilde Expansion
+@cindex tilde expansion
+@cindex expansion, tilde
+
+If a word begins with an unquoted tilde character (@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}.
+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}.
+If this login name is the null string, the tilde is replaced with the
+value of the @env{HOME} shell variable.
+If @env{HOME} is unset, the home directory of the user executing the
+shell is substituted instead.
+Otherwise, the tilde-prefix is replaced with the home directory
+associated with the specified login name.
+
+If the tilde-prefix is @samp{~+}, the value of
+the shell variable @env{PWD} replaces the tilde-prefix.
+If the tilde-prefix is @samp{~-}, the value of the shell variable
+@env{OLDPWD}, if it is set, is substituted.
+
+If the characters following the tilde in the tilde-prefix consist of a
+number @var{N}, optionally prefixed by a @samp{+} or a @samp{-},
+the tilde-prefix is replaced with the
+corresponding element from the directory stack, as it would be displayed
+by the @code{dirs} builtin invoked with the characters following tilde
+in the tilde-prefix as an argument (@pxref{The Directory Stack}).
+If the tilde-prefix, sans the tilde, consists of a number without a
+leading @samp{+} or @samp{-}, @samp{+} is assumed.
+
+If the login name is invalid, or the tilde expansion fails, the word is
+left unchanged.
+
+Each variable assignment is checked for unquoted tilde-prefixes immediately
+following a @samp{:} or the first @samp{=}.
+In these cases, tilde expansion is also performed.
+Consequently, one may use filenames with tildes in assignments to
+@env{PATH}, @env{MAILPATH}, and @env{CDPATH},
+and the shell assigns the expanded value.
+
+The following table shows how Bash treats unquoted tilde-prefixes:
+
+@table @code
+@item ~
+The value of @code{$HOME}
+@item ~/foo
+@file{$HOME/foo}
+
+@item ~fred/foo
+The subdirectory @code{foo} of the home directory of the user
+@code{fred}
+
+@item ~+/foo
+@file{$PWD/foo}
+
+@item ~-/foo
+@file{$@{OLDPWD-'~-'@}/foo}
+
+@item ~@var{N}
+The string that would be displayed by @samp{dirs +@var{N}}
+
+@item ~+@var{N}
+The string that would be displayed by @samp{dirs +@var{N}}
+
+@item ~-@var{N}
+The string that would be displayed by @samp{dirs -@var{N}}
+@end table
+
+Bash also performs tilde expansion on words satisfying the conditions of
+variable assignments (@pxref{Shell Parameters})
+when they appear as arguments to simple commands.
+Bash does not do this, except for the @var{declaration} commands listed
+above, when in @sc{posix} mode.
+
+@node Shell Parameter Expansion
+@subsection Shell Parameter Expansion
+@cindex parameter expansion
+@cindex expansion, parameter
+
+The @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.
+
+When braces are used, the matching ending brace is the first @samp{@}}
+not escaped by a backslash or within a quoted string, and not within an
+embedded arithmetic expansion, command substitution, or parameter
+expansion.
+
+The basic form of parameter expansion is $@{@var{parameter}@}.
+The value of @var{parameter} is substituted.
+The @var{parameter} is a shell parameter as described above
+(@pxref{Shell Parameters}) or an array reference (@pxref{Arrays}).
+The braces are required when @var{parameter}
+is a positional parameter with more than one digit,
+or when @var{parameter} is followed by a character that is not to be
+interpreted as part of its name.
+
+If the first character of @var{parameter} is an exclamation point (!),
+and @var{parameter} is not a @var{nameref},
+it introduces a level of indirection.
+Bash uses the value formed by expanding the rest of
+@var{parameter} as the new @var{parameter}; this is then
+expanded and that value is used in the rest of the expansion, rather
+than the expansion of the original @var{parameter}.
+This is known as @code{indirect expansion}.
+The value is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+If @var{parameter} is a nameref, this expands to the name of the
+variable referenced by @var{parameter} instead of performing the
+complete indirect expansion.
+The exceptions to this are the expansions of $@{!@var{prefix}*@}
+and $@{!@var{name}[@@]@}
+described below.
+The exclamation point must immediately follow the left brace in order to
+introduce indirection.
+
+In each of the cases below, @var{word} is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+
+When not performing substring expansion, using the form described
+below (e.g., @samp{:-}), 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 @var{parameter}'s existence and that its value
+is not null; if the colon is omitted, the operator tests only for existence.
+
+@table @code
+
+@item $@{@var{parameter}:@minus{}@var{word}@}
+If @var{parameter} is unset or null, the expansion of
+@var{word} is substituted. Otherwise, the value of
+@var{parameter} is substituted.
+
+@item $@{@var{parameter}:=@var{word}@}
+If @var{parameter}
+is unset or null, the expansion of @var{word}
+is assigned to @var{parameter}.
+The value of @var{parameter} is then substituted.
+Positional parameters and special parameters may not be assigned to
+in this way.
+
+@item $@{@var{parameter}:?@var{word}@}
+If @var{parameter}
+is null or unset, the expansion of @var{word} (or a message
+to that effect if @var{word}
+is not present) is written to the standard error and the shell, if it
+is not interactive, exits. Otherwise, the value of @var{parameter} is
+substituted.
+
+@item $@{@var{parameter}:+@var{word}@}
+If @var{parameter}
+is null or unset, nothing is substituted, otherwise the expansion of
+@var{word} is substituted.
+
+@item $@{@var{parameter}:@var{offset}@}
+@itemx $@{@var{parameter}:@var{offset}:@var{length}@}
+This is referred to as Substring Expansion.
+It expands to up to @var{length} characters of the value of @var{parameter}
+starting at the character specified by @var{offset}.
+If @var{parameter} is @samp{@@}, an indexed array subscripted by
+@samp{@@} or @samp{*}, or an associative array name, the results differ as
+described below.
+If @var{length} is omitted, it expands to the substring of the value of
+@var{parameter} starting at the character specified by @var{offset}
+and extending to the end of the value.
+@var{length} and @var{offset} are arithmetic expressions
+(@pxref{Shell Arithmetic}).
+
+If @var{offset} evaluates to a number less than zero, the value
+is used as an offset in characters
+from the end of the value of @var{parameter}.
+If @var{length} evaluates to a number less than zero,
+it is interpreted as an offset in characters
+from the end of the value of @var{parameter} rather than
+a number of characters, and the expansion is the characters between
+@var{offset} and that result.
+Note that a negative offset must be separated from the colon by at least
+one space to avoid being confused with the @samp{:-} expansion.
+
+Here are some examples illustrating substring expansion on parameters and
+subscripted arrays:
+
+@verbatim
+$ string=01234567890abcdefgh
+$ echo ${string:7}
+7890abcdefgh
+$ echo ${string:7:0}
+
+$ echo ${string:7:2}
+78
+$ echo ${string:7:-2}
+7890abcdef
+$ echo ${string: -7}
+bcdefgh
+$ echo ${string: -7:0}
+
+$ echo ${string: -7:2}
+bc
+$ echo ${string: -7:-2}
+bcdef
+$ set -- 01234567890abcdefgh
+$ echo ${1:7}
+7890abcdefgh
+$ echo ${1:7:0}
+
+$ echo ${1:7:2}
+78
+$ echo ${1:7:-2}
+7890abcdef
+$ echo ${1: -7}
+bcdefgh
+$ echo ${1: -7:0}
+
+$ echo ${1: -7:2}
+bc
+$ echo ${1: -7:-2}
+bcdef
+$ array[0]=01234567890abcdefgh
+$ echo ${array[0]:7}
+7890abcdefgh
+$ echo ${array[0]:7:0}
+
+$ echo ${array[0]:7:2}
+78
+$ echo ${array[0]:7:-2}
+7890abcdef
+$ echo ${array[0]: -7}
+bcdefgh
+$ echo ${array[0]: -7:0}
+
+$ echo ${array[0]: -7:2}
+bc
+$ echo ${array[0]: -7:-2}
+bcdef
+@end verbatim
+
+If @var{parameter} is @samp{@@}, the result is @var{length} positional
+parameters beginning at @var{offset}.
+A negative @var{offset} is taken relative to one greater than the greatest
+positional parameter, so an offset of -1 evaluates to the last positional
+parameter.
+It is an expansion error if @var{length} evaluates to a number less than zero.
+
+The following examples illustrate substring expansion using positional
+parameters:
+
+@verbatim
+$ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+$ echo ${@:7}
+7 8 9 0 a b c d e f g h
+$ echo ${@:7:0}
+
+$ echo ${@:7:2}
+7 8
+$ echo ${@:7:-2}
+bash: -2: substring expression < 0
+$ echo ${@: -7:2}
+b c
+$ echo ${@:0}
+./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+$ echo ${@:0:2}
+./bash 1
+$ echo ${@: -7:0}
+
+@end verbatim
+
+If @var{parameter} is an indexed array name subscripted
+by @samp{@@} or @samp{*}, the result is the @var{length}
+members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}.
+A negative @var{offset} is taken relative to one greater than the maximum
+index of the specified array.
+It is an expansion error if @var{length} evaluates to a number less than zero.
+
+These examples show how you can use substring expansion with indexed
+arrays:
+
+@verbatim
+$ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h)
+$ echo ${array[@]:7}
+7 8 9 0 a b c d e f g h
+$ echo ${array[@]:7:2}
+7 8
+$ echo ${array[@]: -7:2}
+b c
+$ echo ${array[@]: -7:-2}
+bash: -2: substring expression < 0
+$ echo ${array[@]:0}
+0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
+$ echo ${array[@]:0:2}
+0 1
+$ echo ${array[@]: -7:0}
+
+@end verbatim
+
+Substring expansion applied to an associative array produces undefined
+results.
+
+Substring indexing is zero-based unless the positional parameters
+are used, in which case the indexing starts at 1 by default.
+If @var{offset} is 0, and the positional parameters are used, @code{$@@} is
+prefixed to the list.
+
+@item $@{!@var{prefix}*@}
+@itemx $@{!@var{prefix}@@@}
+Expands to the names of variables whose names begin with @var{prefix},
+separated by the first character of the @env{IFS} special variable.
+When @samp{@@} is used and the expansion appears within double quotes, each
+variable name expands to a separate word.
+
+@item $@{!@var{name}[@@]@}
+@itemx $@{!@var{name}[*]@}
+If @var{name} is an array variable, expands to the list of array indices
+(keys) assigned in @var{name}.
+If @var{name} is not an array, expands to 0 if @var{name} is set and null
+otherwise.
+When @samp{@@} is used and the expansion appears within double quotes, each
+key expands to a separate word.
+
+@item $@{#@var{parameter}@}
+The length in characters of the expanded value of @var{parameter} is
+substituted.
+If @var{parameter} is @samp{*} or @samp{@@}, the value substituted
+is the number of positional parameters.
+If @var{parameter} is an array name subscripted by @samp{*} or @samp{@@},
+the value substituted is the number of elements in the array.
+If @var{parameter}
+is an indexed array name subscripted by a negative number, that number is
+interpreted as relative to one greater than the maximum index of
+@var{parameter}, so negative indices count back from the end of the
+array, and an index of -1 references the last element.
+
+@item $@{@var{parameter}#@var{word}@}
+@itemx $@{@var{parameter}##@var{word}@}
+The @var{word}
+is expanded to produce a pattern and matched according to the rules
+described below (@pxref{Pattern Matching}). If the pattern matches
+the beginning of the expanded value of @var{parameter},
+then the result of the expansion is the expanded value of @var{parameter}
+with the shortest matching pattern (the @samp{#} case) or the
+longest matching pattern (the @samp{##} case) deleted.
+If @var{parameter} is @samp{@@} or @samp{*},
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If @var{parameter} is an array variable subscripted with
+@samp{@@} or @samp{*},
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+@item $@{@var{parameter}%@var{word}@}
+@itemx $@{@var{parameter}%%@var{word}@}
+The @var{word}
+is expanded to produce a pattern and matched according to the rules
+described below (@pxref{Pattern Matching}). If the pattern matches
+If the pattern matches a trailing portion of the expanded value of
+@var{parameter}, then the result of the expansion is the value of
+@var{parameter} with the shortest matching pattern (the @samp{%} case)
+or the longest matching pattern (the @samp{%%} case) deleted.
+If @var{parameter} is @samp{@@} or @samp{*},
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If @var{parameter}
+is an array variable subscripted with @samp{@@} or @samp{*},
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+@item $@{@var{parameter}/@var{pattern}/@var{string}@}
+
+The @var{pattern} is expanded to produce a pattern just as in
+filename expansion.
+@var{Parameter} is expanded and the longest match of @var{pattern}
+against its value is replaced with @var{string}.
+The match is performed according to the rules described below
+(@pxref{Pattern Matching}).
+If @var{pattern} begins with @samp{/}, all matches of @var{pattern} are
+replaced with @var{string}. Normally only the first match is replaced.
+If @var{pattern} begins with @samp{#}, it must match at the beginning
+of the expanded value of @var{parameter}.
+If @var{pattern} begins with @samp{%}, it must match at the end
+of the expanded value of @var{parameter}.
+If @var{string} is null, matches of @var{pattern} are deleted
+and the @code{/} following @var{pattern} may be omitted.
+If the @code{nocasematch} shell option
+(see the description of @code{shopt} in @ref{The Shopt Builtin})
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+If @var{parameter} is @samp{@@} or @samp{*},
+the substitution operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If @var{parameter}
+is an array variable subscripted with @samp{@@} or @samp{*},
+the substitution operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+@item $@{@var{parameter}^@var{pattern}@}
+@itemx $@{@var{parameter}^^@var{pattern}@}
+@itemx $@{@var{parameter},@var{pattern}@}
+@itemx $@{@var{parameter},,@var{pattern}@}
+This expansion modifies the case of alphabetic characters in @var{parameter}.
+The @var{pattern} is expanded to produce a pattern just as in
+filename expansion.
+Each character in the expanded value of @var{parameter} is tested against
+@var{pattern}, and, if it matches the pattern, its case is converted.
+The pattern should not attempt to match more than one character.
+The @samp{^} operator converts lowercase letters matching @var{pattern}
+to uppercase; the @samp{,} operator converts matching uppercase letters
+to lowercase.
+The @samp{^^} and @samp{,,} expansions convert each matched character in the
+expanded value; the @samp{^} and @samp{,} expansions match and convert only
+the first character in the expanded value.
+If @var{pattern} is omitted, it is treated like a @samp{?}, which matches
+every character.
+If @var{parameter} is @samp{@@} or @samp{*},
+the case modification operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If @var{parameter}
+is an array variable subscripted with @samp{@@} or @samp{*},
+the case modification operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+@item $@{@var{parameter}@@@var{operator}@}
+The expansion is either a transformation of the value of @var{parameter}
+or information about @var{parameter} itself, depending on the value of
+@var{operator}. Each @var{operator} is a single letter:
+
+@table @code
+@item Q
+The expansion is a string that is the value of @var{parameter} quoted in a
+format that can be reused as input.
+@item E
+The expansion is a string that is the value of @var{parameter} with backslash
+escape sequences expanded as with the @code{$'@dots{}'} quoting mechanism.
+@item P
+The expansion is a string that is the result of expanding the value of
+@var{parameter} as if it were a prompt string (@pxref{Controlling the Prompt}).
+@item A
+The expansion is a string in the form of
+an assignment statement or @code{declare} command that, if
+evaluated, will recreate @var{parameter} with its attributes and value.
+@item a
+The expansion is a string consisting of flag values representing
+@var{parameter}'s attributes.
+@end table
+
+If @var{parameter} is @samp{@@} or @samp{*},
+the operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If @var{parameter}
+is an array variable subscripted with @samp{@@} or @samp{*},
+the operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+The result of the expansion is subject to word splitting and pathname
+expansion as described below.
+@end table
+
+@node Command Substitution
+@subsection Command Substitution
+@cindex command substitution
+
+Command substitution allows the output of a command to replace
+the command itself.
+Command substitution occurs when a command is enclosed as follows:
+@example
+$(@var{command})
+@end example
+@noindent
+or
+@example
+`@var{command}`
+@end example
+
+@noindent
+Bash performs the expansion by executing @var{command} in a subshell environment
+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})} can be
+replaced by the equivalent but faster @code{$(< @var{file})}.
+
+When the old-style backquote form of substitution is used,
+backslash retains its literal meaning except when followed by
+@samp{$}, @samp{`}, or @samp{\}.
+The first backquote not preceded by a backslash terminates the
+command substitution.
+When using the @code{$(@var{command})} form, all characters between
+the parentheses make up the command; none are treated specially.
+
+Command substitutions may be nested. To nest when using the backquoted
+form, escape the inner backquotes with backslashes.
+
+If the substitution appears within double quotes, word splitting and
+filename expansion are not performed on the results.
+
+@node Arithmetic Expansion
+@subsection Arithmetic Expansion
+@cindex expansion, arithmetic
+@cindex arithmetic expansion
+
+Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result. The format for arithmetic expansion is:
+
+@example
+$(( @var{expression} ))
+@end example
+
+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 and variable expansion,
+command substitution, and quote removal.
+The result is treated as the arithmetic expression to be evaluated.
+Arithmetic expansions may be nested.
+
+The evaluation is performed according to the rules listed below
+(@pxref{Shell Arithmetic}).
+If the expression is invalid, Bash prints a message indicating
+failure to the standard error and no substitution occurs.
+
+@node Process Substitution
+@subsection Process Substitution
+@cindex process substitution
+
+Process substitution allows a process's input or output to be
+referred to using a filename.
+It takes the form of
+@example
+<(@var{list})
+@end example
+@noindent
+or
+@example
+>(@var{list})
+@end example
+@noindent
+The process @var{list} is run asynchronously, and its input or output
+appears as a filename.
+This filename is
+passed as an argument to the current command as the result of the
+expansion.
+If the @code{>(@var{list})} form is used, writing to
+the file will provide input for @var{list}. If the
+@code{<(@var{list})} form is used, the file passed as an
+argument should be read to obtain the output of @var{list}.
+Note that no space may appear between the @code{<} or @code{>}
+and the left parenthesis, otherwise the construct would be interpreted
+as a redirection.
+Process substitution is supported on systems that support named
+pipes (@sc{fifo}s) or the @file{/dev/fd} method of naming open files.
+
+When available, process substitution is performed simultaneously with
+parameter and variable expansion, command substitution, and arithmetic
+expansion.
+
+@node Word Splitting
+@subsection Word Splitting
+@cindex word splitting
+
+The shell scans the results of parameter expansion, command substitution,
+and arithmetic expansion that did not occur within double quotes for
+word splitting.
+
+The shell treats each character of @env{$IFS} as a delimiter, and splits
+the results of the other expansions into words using these characters
+as field terminators.
+If @env{IFS} is unset, or its value is exactly @code{<space><tab><newline>},
+the default, then sequences of
+@code{ <space>}, @code{<tab>}, and @code{<newline>}
+at the beginning and end of the results of the previous
+expansions are ignored, and any sequence of @env{IFS}
+characters not at the beginning or end serves to delimit words.
+If @env{IFS} has a value other than the default, then sequences of
+the whitespace characters @code{space}, @code{tab}, and @code{newline}
+are ignored at the beginning and end of the
+word, as long as the whitespace character is in the
+value of @env{IFS} (an @env{IFS} whitespace character).
+Any character in @env{IFS} that is not @env{IFS}
+whitespace, along with any adjacent @env{IFS}
+whitespace characters, delimits a field. A sequence of @env{IFS}
+whitespace characters is also treated as a delimiter.
+If the value of @env{IFS} is null, no word splitting occurs.
+
+Explicit null arguments (@code{""} or @code{''}) are retained
+and passed to commands as empty strings.
+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
+and passed to a command as an empty string.
+When a quoted null argument appears as part of a word whose expansion is
+non-null, the null argument is removed.
+That is, the word
+@code{-d''} becomes @code{-d} after word splitting and
+null argument removal.
+
+Note that if no expansion occurs, no splitting
+is performed.
+
+@node Filename Expansion
+@subsection Filename Expansion
+@menu
+* Pattern Matching:: How the shell matches patterns.
+@end menu
+@cindex expansion, filename
+@cindex expansion, pathname
+@cindex filename expansion
+@cindex pathname expansion
+
+After word splitting, unless the @option{-f} option has been set
+(@pxref{The Set Builtin}), Bash scans each word for the characters
+@samp{*}, @samp{?}, and @samp{[}.
+If one of these characters appears, then the word is
+regarded as a @var{pattern},
+and replaced with an alphabetically sorted list of
+filenames matching the pattern (@pxref{Pattern Matching}).
+If no matching filenames are found,
+and the shell option @code{nullglob} is disabled, the word is left
+unchanged.
+If the @code{nullglob} option is set, and no matches are found, the word
+is removed.
+If the @code{failglob} shell option is set, and no matches are found,
+an error message is printed and the command is not executed.
+If the shell option @code{nocaseglob} is enabled, the match is performed
+without regard to the case of alphabetic characters.
+
+When a pattern is used for filename expansion, the character @samp{.}
+at the start of a filename or immediately following a slash
+must be matched explicitly, unless the shell option @code{dotglob} is set.
+The filenames @samp{.} and @samp{..} must always be matched explicitly,
+even if @code{dotglob} is set.
+In other cases, the @samp{.} character is not treated specially.
+
+When matching a filename, the slash character must always be
+matched explicitly by a slash in the pattern, but in other matching
+contexts it can be matched by a special pattern character as described
+below (@pxref{Pattern Matching}).
+
+See the description of @code{shopt} in @ref{The Shopt Builtin},
+for a description of the @code{nocaseglob}, @code{nullglob},
+@code{failglob}, and @code{dotglob} options.
+
+The @env{GLOBIGNORE}
+shell variable may be used to restrict the set of file names matching a
+pattern. If @env{GLOBIGNORE}
+is set, each matching file name that also matches one of the patterns in
+@env{GLOBIGNORE} is removed from the list of matches.
+If the @code{nocaseglob} option is set, the matching against the patterns in
+@env{GLOBIGNORE} is performed without regard to case.
+The filenames
+@file{.} and @file{..}
+are always ignored when @env{GLOBIGNORE}
+is set and not null.
+However, setting @env{GLOBIGNORE} to a non-null value has the effect of
+enabling the @code{dotglob}
+shell option, so all other filenames beginning with a
+@samp{.} will match.
+To get the old behavior of ignoring filenames beginning with a
+@samp{.}, make @samp{.*} one of the patterns in @env{GLOBIGNORE}.
+The @code{dotglob} option is disabled when @env{GLOBIGNORE}
+is unset.
+
+@node Pattern Matching
+@subsubsection Pattern Matching
+@cindex pattern matching
+@cindex matching, pattern
+
+Any character that appears in a pattern, other than the special pattern
+characters described below, matches itself.
+The @sc{nul} character may not occur in a pattern.
+A backslash escapes the following character; the
+escaping backslash is discarded when matching.
+The special pattern characters must be quoted if they are to be matched
+literally.
+
+The special pattern characters have the following meanings:
+@table @code
+@item *
+Matches any string, including the null string.
+When the @code{globstar} shell option is enabled, and @samp{*} is used in
+a filename expansion context, two adjacent @samp{*}s used as a single
+pattern will match all files and zero or more directories and
+subdirectories.
+If followed by a @samp{/}, two adjacent @samp{*}s will match only
+directories and subdirectories.
+@item ?
+Matches any single character.
+@item [@dots{}]
+Matches any one of the enclosed characters. A pair of characters
+separated by a hyphen denotes a @var{range expression};
+any character that falls between those two characters, inclusive,
+using the current locale's collating sequence and character set,
+is matched. If the first character following the
+@samp{[} is a @samp{!} or a @samp{^}
+then any character not enclosed is matched. A @samp{@minus{}}
+may be matched by including it as the first or last character
+in the set. A @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 values of the
+@env{LC_COLLATE} and @env{LC_ALL} shell variables, if set.
+
+For example, in the default C locale, @samp{[a-dx-z]} is equivalent to
+@samp{[abcdxyz]}. Many locales sort characters in dictionary order, and in
+these locales @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]};
+it might be equivalent to @samp{[aBbCcDdxXyYz]}, for example. To obtain
+the traditional interpretation of ranges in bracket expressions, you can
+force the use of the C locale by setting the @env{LC_COLLATE} or
+@env{LC_ALL} environment variable to the value @samp{C}, or enable the
+@code{globasciiranges} shell option.
+
+Within @samp{[} and @samp{]}, @var{character classes} can be specified
+using the syntax
+@code{[:}@var{class}@code{:]}, where @var{class} is one of the
+following classes defined in the @sc{posix} standard:
+@example
+alnum alpha ascii blank cntrl digit graph lower
+print punct space upper word xdigit
+@end example
+@noindent
+A character class matches any character belonging to that class.
+The @code{word} character class matches letters, digits, and the character
+@samp{_}.
+
+Within @samp{[} and @samp{]}, an @var{equivalence class} can be
+specified using the syntax @code{[=}@var{c}@code{=]}, which
+matches all characters with the same collation weight (as defined
+by the current locale) as the character @var{c}.
+
+Within @samp{[} and @samp{]}, the syntax @code{[.}@var{symbol}@code{.]}
+matches the collating symbol @var{symbol}.
+@end table
+
+If the @code{extglob} shell option is enabled using the @code{shopt}
+builtin, several extended pattern matching operators are recognized.
+In the following description, a @var{pattern-list} is a list of one
+or more patterns separated by a @samp{|}.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+
+@table @code
+@item ?(@var{pattern-list})
+Matches zero or one occurrence of the given patterns.
+
+@item *(@var{pattern-list})
+Matches zero or more occurrences of the given patterns.
+
+@item +(@var{pattern-list})
+Matches one or more occurrences of the given patterns.
+
+@item @@(@var{pattern-list})
+Matches one of the given patterns.
+
+@item !(@var{pattern-list})
+Matches anything except one of the given patterns.
+@end table
+
+Complicated extended pattern matching against long strings is slow,
+especially when the patterns contain alternations and the strings
+contain multiple matches.
+Using separate matches against shorter strings, or using arrays of
+strings instead of a single long string, may be faster.
+
+@node Quote Removal
+@subsection Quote Removal
+
+After the preceding expansions, all unquoted occurrences of the
+characters @samp{\}, @samp{'}, and @samp{"} that did not
+result from one of the above expansions are removed.
+
+@node Redirections
+@section Redirections
+@cindex redirection
+
+Before a command is executed, its input and output
+may be @var{redirected}
+using a special notation interpreted by the shell.
+Redirection allows commands' file handles to be
+duplicated, opened, closed,
+made to refer to different files,
+and can change the files the command reads from and writes to.
+Redirection may also be used to modify file handles in the
+current shell execution environment. The following redirection
+operators may precede or appear anywhere within a
+simple command or may follow a command.
+Redirections are processed in the order they appear, from
+left to right.
+
+Each redirection that may be preceded by a file descriptor number
+may instead be preceded by a word of the form @{@var{varname}@}.
+In this case, for each redirection operator except
+>&- and <&-, the shell will allocate a file descriptor greater
+than 10 and assign it to @{@var{varname}@}. If >&- or <&- is preceded
+by @{@var{varname}@}, the value of @var{varname} defines the file
+descriptor to close.
+If @{@var{varname}@} is supplied, the redirection persists beyond
+the scope of the command, allowing the shell programmer to manage
+the file descriptor himself.
+
+In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is
+@samp{<}, the redirection refers to the standard input (file
+descriptor 0). If the first character of the redirection operator
+is @samp{>}, the redirection refers to the standard output (file
+descriptor 1).
+
+The word following the redirection operator in the following
+descriptions, unless otherwise noted, is subjected to brace expansion,
+tilde expansion, parameter expansion, command substitution, arithmetic
+expansion, quote removal, filename expansion, and word splitting.
+If it expands to more than one word, Bash reports an error.
+
+Note that the order of redirections is significant. For example,
+the command
+@example
+ls > @var{dirlist} 2>&1
+@end example
+@noindent
+directs both standard output (file descriptor 1) and standard error
+(file descriptor 2) to the file @var{dirlist}, while the command
+@example
+ls 2>&1 > @var{dirlist}
+@end example
+@noindent
+directs only the standard output to file @var{dirlist},
+because the standard error was made a copy of the standard output
+before the standard output was redirected to @var{dirlist}.
+
+Bash handles several filenames specially when they are used in
+redirections, as described in the following table.
+If the operating system on which Bash is running provides these
+special files, bash will use them; otherwise it will emulate them
+internally with the behavior described below.
+
+@table @code
+@item /dev/fd/@var{fd}
+If @var{fd} is a valid integer, file descriptor @var{fd} is duplicated.
+
+@item /dev/stdin
+File descriptor 0 is duplicated.
+
+@item /dev/stdout
+File descriptor 1 is duplicated.
+
+@item /dev/stderr
+File descriptor 2 is duplicated.
+
+@item /dev/tcp/@var{host}/@var{port}
+If @var{host} is a valid hostname or Internet address, and @var{port}
+is an integer port number or service name, Bash attempts to open
+the corresponding TCP socket.
+
+@item /dev/udp/@var{host}/@var{port}
+If @var{host} is a valid hostname or Internet address, and @var{port}
+is an integer port number or service name, Bash attempts to open
+the corresponding UDP socket.
+@end table
+
+A failure to open or create a file causes the redirection to fail.
+
+Redirections using file descriptors greater than 9 should be used with
+care, as they may conflict with file descriptors the shell uses
+internally.
+
+@subsection Redirecting Input
+Redirection of input causes the file whose name results from
+the expansion of @var{word}
+to be opened for reading on file descriptor @code{n},
+or the standard input (file descriptor 0) if @code{n}
+is not specified.
+
+The general format for redirecting input is:
+@example
+[@var{n}]<@var{word}
+@end example
+
+@subsection Redirecting Output
+Redirection of output causes the file whose name results from
+the expansion of @var{word}
+to be opened for writing on file descriptor @var{n},
+or the standard output (file descriptor 1) if @var{n}
+is not specified. If the file does not exist it is created;
+if it does exist it is truncated to zero size.
+
+The general format for redirecting output is:
+@example
+[@var{n}]>[|]@var{word}
+@end example
+
+If the redirection operator is @samp{>}, and the @code{noclobber}
+option to the @code{set} builtin has been enabled, the redirection
+will fail if the file whose name results from the expansion of
+@var{word} exists and is a regular file.
+If the redirection operator is @samp{>|}, or the redirection operator is
+@samp{>} and the @code{noclobber} option is not enabled, the redirection
+is attempted even if the file named by @var{word} exists.
+
+@subsection Appending Redirected Output
+Redirection of output in this fashion
+causes the file whose name results from
+the expansion of @var{word}
+to be opened for appending on file descriptor @var{n},
+or the standard output (file descriptor 1) if @var{n}
+is not specified. If the file does not exist it is created.
+
+The general format for appending output is:
+@example
+[@var{n}]>>@var{word}
+@end example
+
+@subsection Redirecting Standard Output and Standard Error
+This construct 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}.
+
+There are two formats for redirecting standard output and
+standard error:
+@example
+&>@var{word}
+@end example
+@noindent
+and
+@example
+>&@var{word}
+@end example
+@noindent
+Of the two forms, the first is preferred.
+This is semantically equivalent to
+@example
+>@var{word} 2>&1
+@end example
+When using the second form, @var{word} may not expand to a number or
+@samp{-}. If it does, other redirection operators apply
+(see Duplicating File Descriptors below) for compatibility reasons.
+
+@subsection Appending Standard Output and Standard Error
+This construct allows both the
+standard output (file descriptor 1) and
+the standard error output (file descriptor 2)
+to be appended to the file whose name is the
+expansion of @var{word}.
+
+The format for appending standard output and standard error is:
+@example
+&>>@var{word}
+@end example
+@noindent
+This is semantically equivalent to
+@example
+>>@var{word} 2>&1
+@end example
+(see Duplicating File Descriptors below).
+
+@subsection Here Documents
+This type of redirection instructs the shell to read input from the
+current source until a line containing only @var{word}
+(with no trailing blanks) is seen. All of
+the lines read up to that point are then used as the standard
+input (or file descriptor @var{n} if @var{n} is specified) for a command.
+
+The format of here-documents is:
+@example
+[@var{n}]<<[@minus{}]@var{word}
+ @var{here-document}
+@var{delimiter}
+@end example
+
+No parameter and variable expansion, command substitution,
+arithmetic expansion, or filename expansion is performed on
+@var{word}. If any part of @var{word} is quoted, the
+@var{delimiter} is the result of quote removal on @var{word},
+and the lines in the here-document are not expanded.
+If @var{word} is unquoted,
+all lines of the here-document are subjected to
+parameter expansion, command substitution, and arithmetic expansion,
+the character sequence @code{\newline} is ignored, and @samp{\}
+must be used to quote the characters
+@samp{\}, @samp{$}, and @samp{`}.
+
+If the redirection operator is @samp{<<-},
+then all leading tab characters are stripped from input lines and the
+line containing @var{delimiter}.
+This allows here-documents within shell scripts to be indented in a
+natural fashion.
+
+@subsection Here Strings
+A variant of here documents, the format is:
+@example
+[@var{n}]<<< @var{word}
+@end example
+
+The @var{word} undergoes
+tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote removal.
+Pathname expansion and word splitting are not performed.
+The result is supplied as a single string,
+with a newline appended,
+to the command on its
+standard input (or file descriptor @var{n} if @var{n} is specified).
+
+@subsection Duplicating File Descriptors
+The redirection operator
+@example
+[@var{n}]<&@var{word}
+@end example
+@noindent
+is used to duplicate input file descriptors.
+If @var{word}
+expands to one or more digits, the file descriptor denoted by @var{n}
+is made to be a copy of that file descriptor.
+If the digits in @var{word} do not specify a file descriptor open for
+input, a redirection error occurs.
+If @var{word}
+evaluates to @samp{-}, file descriptor @var{n} is closed.
+If @var{n} is not specified, the standard input (file descriptor 0) is used.
+
+The operator
+@example
+[@var{n}]>&@var{word}
+@end example
+@noindent
+is used similarly to duplicate output file descriptors. If
+@var{n} is not specified, the standard output (file descriptor 1) is used.
+If the digits in @var{word} do not specify a file descriptor open for
+output, a redirection error occurs.
+If @var{word}
+evaluates to @samp{-}, file descriptor @var{n} is closed.
+As a special case, if @var{n} is omitted, and @var{word} does not
+expand to one or more digits or @samp{-}, the standard output and standard
+error are redirected as described previously.
+
+@subsection Moving File Descriptors
+The redirection operator
+@example
+[@var{n}]<&@var{digit}-
+@end example
+@noindent
+moves the file descriptor @var{digit} to file descriptor @var{n},
+or the standard input (file descriptor 0) if @var{n} is not specified.
+@var{digit} is closed after being duplicated to @var{n}.
+
+Similarly, the redirection operator
+@example
+[@var{n}]>&@var{digit}-
+@end example
+@noindent
+moves the file descriptor @var{digit} to file descriptor @var{n},
+or the standard output (file descriptor 1) if @var{n} is not specified.
+
+@subsection Opening File Descriptors for Reading and Writing
+The redirection operator
+@example
+[@var{n}]<>@var{word}
+@end example
+@noindent
+causes the file whose name is the expansion of @var{word}
+to be opened for both reading and writing on file descriptor
+@var{n}, or on file descriptor 0 if @var{n}
+is not specified. If the file does not exist, it is created.
+
+@node Executing Commands
+@section Executing Commands
+
+@menu
+* Simple Command Expansion:: How Bash expands simple commands before
+ executing them.
+* Command Search and Execution:: How Bash finds commands and runs them.
+* Command Execution Environment:: The environment in which Bash
+ executes commands that are not
+ shell builtins.
+* Environment:: The environment given to a command.
+* Exit Status:: The status returned by commands and how Bash
+ interprets it.
+* Signals:: What happens when Bash or a command it runs
+ receives a signal.
+@end menu
+
+@node Simple Command Expansion
+@subsection Simple Command Expansion
+@cindex command expansion
+
+When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+
+@enumerate
+@item
+The words that the parser has marked as variable assignments (those
+preceding the command name) and redirections are saved for later
+processing.
+
+@item
+The words that are not variable assignments or redirections are
+expanded (@pxref{Shell Expansions}).
+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.
+
+@item
+Redirections are performed as described above (@pxref{Redirections}).
+
+@item
+The text after the @samp{=} in each variable assignment undergoes tilde
+expansion, parameter expansion, command substitution, arithmetic expansion,
+and quote removal before being assigned to the variable.
+@end enumerate
+
+If no command name results, the variable assignments affect the current
+shell environment. Otherwise, the variables are added to the environment
+of the executed command and do not affect the current shell environment.
+If any of the assignments attempts to assign a value to a readonly variable,
+an error occurs, and the command exits with a non-zero status.
+
+If no command name results, redirections are performed, but do not
+affect the current shell environment. A redirection error causes the
+command to exit with a non-zero status.
+
+If there is a command name left after expansion, execution proceeds as
+described below. Otherwise, the command exits. If one of the expansions
+contained a command substitution, the exit status of the command is
+the exit status of the last command substitution performed. If there
+were no command substitutions, the command exits with a status of zero.
+
+@node Command Search and Execution
+@subsection Command Search and Execution
+@cindex command execution
+@cindex command search
+
+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.
+
+@enumerate
+@item
+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 @ref{Shell Functions}.
+
+@item
+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.
+
+@item
+If the name is neither a shell function nor a builtin,
+and contains no slashes, Bash searches each element of
+@env{$PATH} for a directory containing an executable file
+by that name. Bash uses a hash table to remember the full
+pathnames of executable files to avoid multiple @env{PATH} searches
+(see the description of @code{hash} in @ref{Bourne Shell Builtins}).
+A full search of the directories in @env{$PATH}
+is performed only if the command is not found in the hash table.
+If the search is unsuccessful, the shell searches for a defined shell
+function named @code{command_not_found_handle}.
+If that function exists, it is invoked in a separate execution environment
+with the original command and
+the original command's arguments as its arguments, and the function's
+exit status becomes the exit status of that subshell.
+If that function is not defined, the shell prints an error
+message and returns an exit status of 127.
+
+@item
+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.
+
+@item
+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} and the shell executes it as described in
+@ref{Shell Scripts}.
+
+@item
+If the command was not begun asynchronously, the shell waits for
+the command to complete and collects its exit status.
+
+@end enumerate
+
+@node Command Execution Environment
+@subsection Command Execution Environment
+@cindex execution environment
+
+The shell has an @var{execution environment}, which consists of the
+following:
+
+@itemize @bullet
+@item
+open files inherited by the shell at invocation, as modified by
+redirections supplied to the @code{exec} builtin
+
+@item
+the current working directory as set by @code{cd}, @code{pushd}, or
+@code{popd}, or inherited by the shell at invocation
+
+@item
+the file creation mode mask as set by @code{umask} or inherited from
+the shell's parent
+
+@item
+current traps set by @code{trap}
+
+@item
+shell parameters that are set by variable assignment or with @code{set}
+or inherited from the shell's parent in the environment
+
+@item
+shell functions defined during execution or inherited from the shell's
+parent in the environment
+
+@item
+options enabled at invocation (either by default or with command-line
+arguments) or by @code{set}
+
+@item
+options enabled by @code{shopt} (@pxref{The Shopt Builtin})
+
+@item
+shell aliases defined with @code{alias} (@pxref{Aliases})
+
+@item
+various process @sc{id}s, including those of background jobs
+(@pxref{Lists}), the value of @code{$$}, and the value of
+@env{$PPID}
+
+@end itemize
+
+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.
+
+@itemize @bullet
+@item
+the shell's open files, plus any modifications and additions specified
+by redirections to the command
+
+@item
+the current working directory
+
+@item
+the file creation mode mask
+
+@item
+shell variables and functions marked for export, along with variables
+exported for the command, passed in the environment (@pxref{Environment})
+
+@item
+traps caught by the shell are reset to the values inherited from the
+shell's parent, and traps ignored by the shell are ignored
+
+@end itemize
+
+A command invoked in this separate environment cannot affect the
+shell's execution environment.
+
+Command substitution, commands grouped with parentheses,
+and asynchronous commands are invoked in a
+subshell environment that is a duplicate of the shell environment,
+except that traps caught by the shell are reset to the values
+that the shell inherited from its parent at invocation. Builtin
+commands that are invoked as part of a pipeline are also executed
+in a subshell environment. Changes made to the subshell environment
+cannot affect the shell's execution environment.
+
+Subshells spawned to execute command substitutions inherit the value of
+the @option{-e} option from the parent shell. When not in @sc{posix} mode,
+Bash clears the @option{-e} option in such subshells.
+
+If a command is followed by a @samp{&} and job control is not active, the
+default standard input for the command is the empty file @file{/dev/null}.
+Otherwise, the invoked command inherits the file descriptors of the calling
+shell as modified by redirections.
+
+@node Environment
+@subsection Environment
+@cindex environment
+
+When a program is invoked it is given an array of strings
+called the @var{environment}.
+This is a list of name-value pairs, of the form @code{name=value}.
+
+Bash provides several ways to manipulate the environment.
+On invocation, the shell scans its own environment and
+creates a parameter for each name found, automatically marking
+it for @var{export}
+to child processes. Executed commands inherit the environment.
+The @code{export} and @samp{declare -x}
+commands allow parameters and functions to be added to and
+deleted from the environment. If the value of a parameter
+in the environment is modified, the new value becomes part
+of the environment, replacing the old. The environment
+inherited by any executed command consists of the shell's
+initial environment, whose values may be modified in the shell,
+less any pairs removed by the @code{unset} and @samp{export -n}
+commands, plus any additions via the @code{export} and
+@samp{declare -x} commands.
+
+The environment for any simple command
+or function may be augmented temporarily by prefixing it with
+parameter assignments, as described in @ref{Shell Parameters}.
+These assignment statements affect only the environment seen
+by that command.
+
+If the @option{-k} option is set (@pxref{The Set Builtin}), then all
+parameter assignments are placed in the environment for a command,
+not just those that precede the command name.
+
+When Bash invokes an external command, the variable @samp{$_}
+is set to the full pathname of the command and passed to that
+command in its environment.
+
+@node Exit Status
+@subsection Exit Status
+@cindex exit status
+
+The exit status of an executed command is the value returned by the
+@var{waitpid} system call or equivalent function. Exit statuses
+fall between 0 and 255, though, as explained below, the shell may
+use values above 125 specially. Exit statuses from shell builtins and
+compound commands are also limited to this range. Under certain
+circumstances, the shell will use special values to indicate specific
+failure modes.
+
+For the shell's purposes, a command which exits with a
+zero exit status has succeeded.
+A non-zero exit status indicates failure.
+This seemingly counter-intuitive scheme is used so there
+is one well-defined way to indicate success and a variety of
+ways to indicate various failure modes.
+When a command terminates on a fatal signal whose number is @var{N},
+Bash uses the value 128+@var{N} as the exit status.
+
+If a command is not found, the child process created to
+execute it returns a status of 127. If a command is found
+but is not executable, the return status is 126.
+
+If a command fails because of an error during expansion or redirection,
+the exit status is greater than zero.
+
+The exit status is used by the Bash conditional commands
+(@pxref{Conditional Constructs}) and some of the list
+constructs (@pxref{Lists}).
+
+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,
+generally invalid options or missing arguments.
+
+@node Signals
+@subsection Signals
+@cindex signal handling
+
+When Bash is interactive, in the absence of any traps, it ignores
+@code{SIGTERM} (so that @samp{kill 0} does not kill an interactive shell),
+and @code{SIGINT}
+is caught and handled (so that the @code{wait} builtin is interruptible).
+When Bash receives a @code{SIGINT}, it breaks out of any executing loops.
+In all cases, Bash ignores @code{SIGQUIT}.
+If job control is in effect (@pxref{Job Control}), Bash
+ignores @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
+
+Non-builtin commands started by Bash have signal handlers set to the
+values inherited by the shell from its parent.
+When job control is not in effect, asynchronous commands
+ignore @code{SIGINT} and @code{SIGQUIT} in addition to these inherited
+handlers.
+Commands run as a result of
+command substitution ignore the keyboard-generated job control signals
+@code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
+
+The shell exits by default upon receipt of a @code{SIGHUP}.
+Before exiting, an interactive shell resends the @code{SIGHUP} to
+all jobs, running or stopped.
+Stopped jobs are sent @code{SIGCONT} to ensure that they receive
+the @code{SIGHUP}.
+To prevent the shell from sending the @code{SIGHUP} signal to a
+particular job, it should be removed
+from the jobs table with the @code{disown}
+builtin (@pxref{Job Control Builtins}) or marked
+to not receive @code{SIGHUP} using @code{disown -h}.
+
+If the @code{huponexit} shell option has been set with @code{shopt}
+(@pxref{The Shopt Builtin}), Bash sends a @code{SIGHUP} to all jobs when
+an interactive login shell exits.
+
+If Bash is waiting for a command to complete and receives a signal
+for which a trap has been set, the trap will not be executed until
+the command completes.
+When Bash is waiting for an asynchronous
+command via the @code{wait} builtin, the reception of a signal for
+which a trap has been set will cause the @code{wait} builtin to return
+immediately with an exit status greater than 128, immediately after
+which the trap is executed.
+
+@node Shell Scripts
+@section Shell Scripts
+@cindex shell script
+
+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 @option{-c} nor @option{-s} option is supplied
+(@pxref{Invoking Bash}),
+Bash reads and executes commands from the file, then exits. This
+mode of operation creates a non-interactive shell. The shell first
+searches for the file in the current directory, and looks in the
+directories in @env{$PATH} if not found there.
+
+When Bash runs
+a shell script, it sets the special parameter @code{0} to the name
+of the file, rather than the name of the shell, and the positional
+parameters are set to the remaining arguments, if any are given.
+If no additional arguments are supplied, the positional parameters
+are unset.
+
+A shell script may be made executable by using the @code{chmod} command
+to turn on the execute bit. When Bash finds such a file while
+searching the @env{$PATH} for a command, it spawns a subshell to
+execute it. In other words, executing
+@example
+filename @var{arguments}
+@end example
+@noindent
+is equivalent to executing
+@example
+bash filename @var{arguments}
+@end example
+
+@noindent
+if @code{filename} is an executable shell script.
+This subshell reinitializes itself, so that the effect is as if a
+new shell had been invoked to interpret the script, with the
+exception that the locations of commands remembered by the parent
+(see the description of @code{hash} in @ref{Bourne Shell Builtins})
+are retained by the child.
+
+Most versions of Unix make this a part of the operating system's command
+execution mechanism. If the first line of a script begins with
+the two characters @samp{#!}, the remainder of the line specifies
+an interpreter for the program.
+Thus, you can specify Bash, @code{awk}, Perl, or some other
+interpreter and write the rest of the script file in that language.
+
+The arguments to the interpreter
+consist of a single optional argument following the interpreter
+name on the first line of the script file, followed by the name of
+the script file, followed by the rest of the arguments. Bash
+will perform this action on operating systems that do not handle it
+themselves. Note that some older versions of Unix limit the interpreter
+name and argument to a maximum of 32 characters.
+
+Bash scripts often begin with @code{#! /bin/bash} (assuming that
+Bash has been installed in @file{/bin}), since this ensures that
+Bash will be used to interpret the script, even if it is executed
+under another shell.
+
+@node Shell Builtin Commands
+@chapter Shell Builtin Commands
+
+@menu
+* Bourne Shell Builtins:: Builtin commands inherited from the Bourne
+ Shell.
+* Bash Builtins:: Table of builtins specific to Bash.
+* Modifying Shell Behavior:: Builtins to modify shell attributes and
+ optional behavior.
+* Special Builtins:: Builtin commands classified specially by
+ POSIX.
+@end menu
+
+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 (@pxref{Simple Commands}), the shell executes
+the command directly, without invoking another program.
+Builtin commands are necessary to implement functionality impossible
+or inconvenient to obtain with separate utilities.
+
+This section briefly describes the builtins which Bash inherits from
+the Bourne Shell, as well as the builtin commands which are unique
+to or have been extended in Bash.
+
+Several builtin commands are described in other chapters: builtin
+commands which provide the Bash interface to the job control
+facilities (@pxref{Job Control Builtins}), the directory stack
+(@pxref{Directory Stack Builtins}), the command history
+(@pxref{Bash History Builtins}), and the programmable completion
+facilities (@pxref{Programmable Completion Builtins}).
+
+Many of the builtins have been extended by @sc{posix} or Bash.
+
+Unless otherwise noted, each builtin command documented as accepting
+options preceded by @samp{-} accepts @samp{--}
+to signify the end of the options.
+The @code{:}, @code{true}, @code{false}, and @code{test}/@code{[}
+builtins do not accept options and do not treat @samp{--} specially.
+The @code{exit}, @code{logout}, @code{return},
+@code{break}, @code{continue}, @code{let},
+and @code{shift} builtins accept and process arguments beginning
+with @samp{-} without requiring @samp{--}.
+Other builtins that accept arguments but are not specified as accepting
+options interpret arguments beginning with @samp{-} as invalid options and
+require @samp{--} to prevent this interpretation.
+
+@node Bourne Shell Builtins
+@section Bourne Shell Builtins
+
+The following shell builtin commands are inherited from the Bourne Shell.
+These commands are implemented as specified by the @sc{posix} standard.
+
+@table @code
+@item : @r{(a colon)}
+@btindex :
+@example
+: [@var{arguments}]
+@end example
+
+Do nothing beyond expanding @var{arguments} and performing redirections.
+The return status is zero.
+
+@item . @r{(a period)}
+@btindex .
+@example
+. @var{filename} [@var{arguments}]
+@end example
+
+Read and execute commands from the @var{filename} argument in the
+current shell context. If @var{filename} does not contain a slash,
+the @env{PATH} variable is used to find @var{filename}.
+When Bash is not in @sc{posix} mode, the current directory is searched
+if @var{filename} is not found in @env{$PATH}.
+If any @var{arguments} are supplied, they become the positional
+parameters when @var{filename} is executed. Otherwise the positional
+parameters are unchanged.
+If the @option{-T} option is enabled, @code{source} inherits any trap on
+@code{DEBUG}; if it is not, any @code{DEBUG} trap string is saved and
+restored around the call to @code{source}, and @code{source} unsets the
+@code{DEBUG} trap while it executes.
+If @option{-T} is not set, and the sourced file changes
+the @code{DEBUG} trap, the new value is retained when @code{source} completes.
+The return status is the exit status of the last command executed, or
+zero if no commands are executed. If @var{filename} is not found, or
+cannot be read, the return status is non-zero.
+This builtin is equivalent to @code{source}.
+
+@item break
+@btindex break
+@example
+break [@var{n}]
+@end example
+
+Exit from a @code{for}, @code{while}, @code{until}, or @code{select} loop.
+If @var{n} is supplied, the @var{n}th enclosing loop is exited.
+@var{n} must be greater than or equal to 1.
+The return status is zero unless @var{n} is not greater than or equal to 1.
+
+@item cd
+@btindex cd
+@example
+cd [-L|[-P [-e]] [-@@] [@var{directory}]
+@end example
+
+Change the current working directory to @var{directory}.
+If @var{directory} is not supplied, the value of the @env{HOME}
+shell variable is used.
+Any additional arguments following @var{directory} are ignored.
+If the shell variable
+@env{CDPATH} exists, it is used as a search path:
+each directory name in @env{CDPATH} is searched for
+@var{directory}, with alternative directory names in @env{CDPATH}
+separated by a colon (@samp{:}).
+If @var{directory} begins with a slash, @env{CDPATH} is not used.
+
+The @option{-P} option means to not follow symbolic links: symbolic links
+are resolved while @code{cd} is traversing @var{directory} and before
+processing an instance of @samp{..} in @var{directory}.
+
+By default, or when the @option{-L} option is supplied, symbolic links
+in @var{directory} are resolved after @code{cd} processes an instance
+of @samp{..} in @var{directory}.
+
+If @samp{..} appears in @var{directory}, it is processed by removing the
+immediately preceding pathname component, back to a slash or the beginning
+of @var{directory}.
+
+If the @option{-e} option is supplied with @option{-P}
+and the current working directory cannot be successfully determined
+after a successful directory change, @code{cd} will return an unsuccessful
+status.
+
+On systems that support it, the @option{-@@} option presents the extended
+attributes associated with a file as a directory.
+
+If @var{directory} is @samp{-}, it is converted to @env{$OLDPWD}
+before the directory change is attempted.
+
+If a non-empty directory name from @env{CDPATH} is used, or if
+@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.
+
+The return status is zero if the directory is successfully changed,
+non-zero otherwise.
+
+@item continue
+@btindex continue
+@example
+continue [@var{n}]
+@end example
+
+Resume the next iteration of an enclosing @code{for}, @code{while},
+@code{until}, or @code{select} loop.
+If @var{n} is supplied, the execution of the @var{n}th enclosing loop
+is resumed.
+@var{n} must be greater than or equal to 1.
+The return status is zero unless @var{n} is not greater than or equal to 1.
+
+@item eval
+@btindex eval
+@example
+eval [@var{arguments}]
+@end example
+
+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}.
+If there are no arguments or only empty arguments, the return status is
+zero.
+
+@item exec
+@btindex exec
+@example
+exec [-cl] [-a @var{name}] [@var{command} [@var{arguments}]]
+@end example
+
+If @var{command}
+is supplied, it replaces the shell without creating a new process.
+If the @option{-l} option is supplied, the shell places a dash at the
+beginning of the zeroth argument passed to @var{command}.
+This is what the @code{login} program does.
+The @option{-c} option causes @var{command} to be executed with an empty
+environment.
+If @option{-a} is supplied, the shell passes @var{name} as the zeroth
+argument to @var{command}.
+If @var{command}
+cannot be executed for some reason, a non-interactive shell exits,
+unless the @code{execfail} shell option
+is enabled. In that case, it returns failure.
+An interactive shell returns failure if the file cannot be executed.
+A subshell exits unconditionally if @code{exec} fails.
+If no @var{command} is specified, redirections may be used to affect
+the current shell environment. If there are no redirection errors, the
+return status is zero; otherwise the return status is non-zero.
+
+@item exit
+@btindex exit
+@example
+exit [@var{n}]
+@end example
+
+Exit the shell, returning a status of @var{n} to the shell's parent.
+If @var{n} is omitted, the exit status is that of the last command executed.
+Any trap on @code{EXIT} is executed before the shell terminates.
+
+@item export
+@btindex export
+@example
+export [-fn] [-p] [@var{name}[=@var{value}]]
+@end example
+
+Mark each @var{name} to be passed to child processes
+in the environment. If the @option{-f} option is supplied, the @var{name}s
+refer to shell functions; otherwise the names refer to shell variables.
+The @option{-n} option means to no longer mark each @var{name} for export.
+If no @var{names} are supplied, or if the @option{-p} option is given, a
+list of names of all exported variables is displayed.
+The @option{-p} option displays output in a form that may be reused as input.
+If a variable name is followed by =@var{value}, the value of
+the variable is set to @var{value}.
+
+The return status is zero unless an invalid option is supplied, one of
+the names is not a valid shell variable name, or @option{-f} is supplied
+with a name that is not a shell function.
+
+@item getopts
+@btindex getopts
+@example
+getopts @var{optstring} @var{name} [@var{args}]
+@end example
+
+@code{getopts} is used by shell scripts to parse positional parameters.
+@var{optstring} contains the option characters to be recognized; if a
+character is followed by a colon, the option is expected to have an
+argument, which should be separated from it by whitespace.
+The colon (@samp{:}) and question mark (@samp{?}) may not be
+used as option characters.
+Each time it is invoked, @code{getopts}
+places the next option in the shell variable @var{name}, initializing
+@var{name} if it does not exist,
+and the index of the next argument to be processed into the
+variable @env{OPTIND}.
+@env{OPTIND} is initialized to 1 each time the shell or a shell script
+is invoked.
+When an option requires an argument,
+@code{getopts} places that argument into the variable @env{OPTARG}.
+The shell does not reset @env{OPTIND} automatically; it must be manually
+reset between multiple calls to @code{getopts} within the same shell
+invocation if a new set of parameters is to be used.
+
+When the end of options is encountered, @code{getopts} exits with a
+return value greater than zero.
+@env{OPTIND} is set to the index of the first non-option argument,
+and @var{name} is set to @samp{?}.
+
+@code{getopts}
+normally parses the positional parameters, but if more arguments are
+given in @var{args}, @code{getopts} parses those instead.
+
+@code{getopts} can report errors in two ways. If the first character of
+@var{optstring} is a colon, @var{silent}
+error reporting is used. In normal operation, diagnostic messages
+are printed when invalid options or missing option arguments are
+encountered.
+If the variable @env{OPTERR}
+is set to 0, no error messages will be displayed, even if the first
+character of @code{optstring} is not a colon.
+
+If an invalid option is seen,
+@code{getopts} places @samp{?} into @var{name} and, if not silent,
+prints an error message and unsets @env{OPTARG}.
+If @code{getopts} is silent, the option character found is placed in
+@env{OPTARG} and no diagnostic message is printed.
+
+If a required argument is not found, and @code{getopts}
+is not silent, a question mark (@samp{?}) is placed in @var{name},
+@code{OPTARG} is unset, and a diagnostic message is printed.
+If @code{getopts} is silent, then a colon (@samp{:}) is placed in
+@var{name} and @env{OPTARG} is set to the option character found.
+
+@item hash
+@btindex hash
+@example
+hash [-r] [-p @var{filename}] [-dt] [@var{name}]
+@end example
+
+Each time @code{hash} is invoked, it remembers the full pathnames of the
+commands specified as @var{name} arguments,
+so they need not be searched for on subsequent invocations.
+The commands are found by searching through the directories listed in
+@env{$PATH}.
+Any previously-remembered pathname is discarded.
+The @option{-p} option inhibits the path search, and @var{filename} is
+used as the location of @var{name}.
+The @option{-r} option causes the shell to forget all remembered locations.
+The @option{-d} option causes the shell to forget the remembered location
+of each @var{name}.
+If the @option{-t} option is supplied, the full pathname to which each
+@var{name} corresponds is printed. If multiple @var{name} arguments are
+supplied with @option{-t}, the @var{name} is printed before the hashed
+full pathname.
+The @option{-l} option causes output to be displayed in a format
+that may be reused as input.
+If no arguments are given, or if only @option{-l} is supplied,
+information about remembered commands is printed.
+The return status is zero unless a @var{name} is not found or an invalid
+option is supplied.
+
+@item pwd
+@btindex pwd
+@example
+pwd [-LP]
+@end example
+
+Print the absolute pathname of the current working directory.
+If the @option{-P} option is supplied, the pathname printed will not
+contain symbolic links.
+If the @option{-L} 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.
+
+@item readonly
+@btindex readonly
+@example
+readonly [-aAf] [-p] [@var{name}[=@var{value}]] @dots{}
+@end example
+
+Mark each @var{name} as readonly.
+The values of these names may not be changed by subsequent assignment.
+If the @option{-f} option is supplied, each @var{name} refers to a shell
+function.
+The @option{-a} option means each @var{name} refers to an indexed
+array variable; the @option{-A} option means each @var{name} refers
+to an associative array variable.
+If both options are supplied, @option{-A} takes precedence.
+If no @var{name} arguments are given, or if the @option{-p}
+option is supplied, a list of all readonly names is printed.
+The other options may be used to restrict the output to a subset of
+the set of readonly names.
+The @option{-p} option causes output to be displayed in a format that
+may be reused as input.
+If a variable name is followed by =@var{value}, the value of
+the variable is set to @var{value}.
+The return status is zero unless an invalid option is supplied, one of
+the @var{name} arguments is not a valid shell variable or function name,
+or the @option{-f} option is supplied with a name that is not a shell function.
+
+@item return
+@btindex return
+@example
+return [@var{n}]
+@end example
+
+Cause a shell function to stop executing and return the value @var{n}
+to its caller.
+If @var{n} is not supplied, the return value is the exit status of the
+last command executed in the function.
+If @code{return} is executed by a trap handler, the last command used to
+determine the status is the last command executed before the trap handler.
+If @code{return} is executed during a @code{DEBUG} trap, the last command
+used to determine the status is the last command executed by the trap
+handler before @code{return} was invoked.
+@code{return} may also be used to terminate execution of a script
+being executed with the @code{.} (@code{source}) builtin,
+returning either @var{n} or
+the exit status of the last command executed within the script as the exit
+status of the script.
+If @var{n} is supplied, the return value is its least significant
+8 bits.
+Any command associated with the @code{RETURN} trap is executed
+before execution resumes after the function or script.
+The return status is non-zero if @code{return} is supplied a non-numeric
+argument or is used outside a function
+and not during the execution of a script by @code{.} or @code{source}.
+
+@item shift
+@btindex shift
+@example
+shift [@var{n}]
+@end example
+
+Shift the positional parameters to the left by @var{n}.
+The positional parameters from @var{n}+1 @dots{} @code{$#} are
+renamed to @code{$1} @dots{} @code{$#}-@var{n}.
+Parameters represented by the numbers @code{$#} to @code{$#}-@var{n}+1
+are unset.
+@var{n} must be a non-negative number less than or equal to @code{$#}.
+If @var{n} is zero or greater than @code{$#}, the positional parameters
+are not changed.
+If @var{n} is not supplied, it is assumed to be 1.
+The return status is zero unless @var{n} is greater than @code{$#} or
+less than zero, non-zero otherwise.
+
+@item test
+@itemx [
+@btindex test
+@btindex [
+@example
+test @var{expr}
+@end example
+
+Evaluate a conditional expression @var{expr} and return a status of 0
+(true) or 1 (false).
+Each operator and operand must be a separate argument.
+Expressions are composed of the primaries described below in
+@ref{Bash Conditional Expressions}.
+@code{test} does not accept any options, nor does it accept and ignore
+an argument of @option{--} as signifying the end of options.
+
+When the @code{[} form is used, the last argument to the command must
+be a @code{]}.
+
+Expressions may be combined using the following operators, listed in
+decreasing order of precedence.
+The evaluation depends on the number of arguments; see below.
+Operator precedence is used when there are five or more arguments.
+
+@table @code
+@item ! @var{expr}
+True if @var{expr} is false.
+
+@item ( @var{expr} )
+Returns the value of @var{expr}.
+This may be used to override the normal precedence of operators.
+
+@item @var{expr1} -a @var{expr2}
+True if both @var{expr1} and @var{expr2} are true.
+
+@item @var{expr1} -o @var{expr2}
+True if either @var{expr1} or @var{expr2} is true.
+@end table
+
+The @code{test} and @code{[} builtins evaluate conditional
+expressions using a set of rules based on the number of arguments.
+
+@table @asis
+@item 0 arguments
+The expression is false.
+
+@item 1 argument
+The expression is true if, and only if, the argument is not null.
+
+@item 2 arguments
+If the first argument is @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
+(@pxref{Bash Conditional Expressions}), the expression
+is true if the unary test is true.
+If the first argument is not a valid unary operator, the expression is
+false.
+
+@item 3 arguments
+The following conditions are applied in the order listed.
+
+@enumerate
+@item
+If the second argument is one of the binary conditional
+operators (@pxref{Bash Conditional Expressions}), the
+result of the expression is the result of the binary test using the
+first and third arguments as operands.
+The @samp{-a} and @samp{-o} operators are considered binary operators
+when there are three arguments.
+@item
+If the first argument is @samp{!}, the value is the negation of
+the two-argument test using the second and third arguments.
+@item
+If the first argument is exactly @samp{(} and the third argument is
+exactly @samp{)}, the result is the one-argument test of the second
+argument.
+@item
+Otherwise, the expression is false.
+@end enumerate
+
+@item 4 arguments
+If the first argument is @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.
+
+@item 5 or more arguments
+The expression is parsed and evaluated according to precedence
+using the rules listed above.
+@end table
+
+When used with @code{test} or @samp{[}, the @samp{<} and @samp{>}
+operators sort lexicographically using ASCII ordering.
+
+@item times
+@btindex times
+@example
+times
+@end example
+
+Print out the user and system times used by the shell and its children.
+The return status is zero.
+
+@item trap
+@btindex trap
+@example
+trap [-lp] [@var{arg}] [@var{sigspec} @dots{}]
+@end example
+
+The commands in @var{arg} are to be read and executed when the
+shell receives signal @var{sigspec}. If @var{arg} is absent (and
+there is a single @var{sigspec}) or
+equal to @samp{-}, each specified signal's disposition is reset
+to the value it had when the shell was started.
+If @var{arg} is the null string, then the signal specified by
+each @var{sigspec} is ignored by the shell and commands it invokes.
+If @var{arg} is not present and @option{-p} has been supplied,
+the shell displays the trap commands associated with each @var{sigspec}.
+If no arguments are supplied, or
+only @option{-p} is given, @code{trap} prints the list of commands
+associated with each signal number in a form that may be reused as
+shell input.
+The @option{-l} option causes the shell to print a list of signal names
+and their corresponding numbers.
+Each @var{sigspec} is either a signal name or a signal number.
+Signal names are case insensitive and the @code{SIG} prefix is optional.
+
+If a @var{sigspec}
+is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits.
+If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed
+before every simple command, @code{for} command, @code{case} command,
+@code{select} command, every arithmetic @code{for} command, and before
+the first command executes in a shell function.
+Refer to the description of the @code{extdebug} option to the
+@code{shopt} builtin (@pxref{The Shopt Builtin}) for details of its
+effect on the @code{DEBUG} trap.
+If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed
+each time a shell function or a script executed with the @code{.} or
+@code{source} builtins finishes executing.
+
+If a @var{sigspec} is @code{ERR}, the command @var{arg}
+is executed whenever
+a pipeline (which may consist of a single simple
+command), a list, or a compound command returns a
+non-zero exit status,
+subject to the following conditions.
+The @code{ERR} trap is not executed if the failed command is part of the
+command list immediately following an @code{until} or @code{while} keyword,
+part of the test following the @code{if} or @code{elif} reserved words,
+part of a command executed in a @code{&&} or @code{||} list
+except the command following the final @code{&&} or @code{||},
+any command in a pipeline but the last,
+or if the command's return
+status is being inverted using @code{!}.
+These are the same conditions obeyed by the @code{errexit} (@option{-e})
+option.
+
+Signals ignored upon entry to the shell cannot be trapped or reset.
+Trapped signals that are not being ignored are reset to their original
+values in a subshell or subshell environment when one is created.
+
+The return status is zero unless a @var{sigspec} does not specify a
+valid signal.
+
+@item umask
+@btindex umask
+@example
+umask [-p] [-S] [@var{mode}]
+@end example
+
+Set the shell process's file creation mask to @var{mode}. If
+@var{mode} 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} command. If @var{mode} is
+omitted, the current value of the mask is printed. If the @option{-S}
+option is supplied without a @var{mode} argument, the mask is printed
+in a symbolic format.
+If the @option{-p} option is supplied, and @var{mode}
+is omitted, the output is in a form that may be reused as input.
+The return status is zero if the mode is successfully changed or if
+no @var{mode} argument is supplied, and non-zero otherwise.
+
+Note that when the mode is interpreted as an octal number, each number
+of the umask is subtracted from @code{7}. Thus, a umask of @code{022}
+results in permissions of @code{755}.
+
+@item unset
+@btindex unset
+@example
+unset [-fnv] [@var{name}]
+@end example
+
+Remove each variable or function @var{name}.
+If the @option{-v} option is given, each
+@var{name} refers to a shell variable and that variable is removed.
+If the @option{-f} option is given, the @var{name}s refer to shell
+functions, and the function definition is removed.
+If the @option{-n} option is supplied, and @var{name} is a variable with
+the @var{nameref} attribute, @var{name} will be unset rather than the
+variable it references.
+@option{-n} has no effect if the @option{-f} option is supplied.
+If no options are supplied, each @var{name} refers to a variable; if
+there is no variable by that name, any function with that name is
+unset.
+Readonly variables and functions may not be unset.
+The return status is zero unless a @var{name} is readonly.
+@end table
+
+@node Bash Builtins
+@section Bash Builtin Commands
+
+This section describes builtin commands which are unique to
+or have been extended in Bash.
+Some of these commands are specified in the @sc{posix} standard.
+
+@table @code
+
+@item alias
+@btindex alias
+@example
+alias [-p] [@var{name}[=@var{value}] @dots{}]
+@end example
+
+Without arguments or with the @option{-p} option, @code{alias} prints
+the list of aliases on the standard output in a form that allows
+them to be reused as input.
+If arguments are supplied, an alias is defined for each @var{name}
+whose @var{value} is given. If no @var{value} is given, the name
+and value of the alias is printed.
+Aliases are described in @ref{Aliases}.
+
+@item bind
+@btindex bind
+@example
+bind [-m @var{keymap}] [-lpsvPSVX]
+bind [-m @var{keymap}] [-q @var{function}] [-u @var{function}] [-r @var{keyseq}]
+bind [-m @var{keymap}] -f @var{filename}
+bind [-m @var{keymap}] -x @var{keyseq:shell-command}
+bind [-m @var{keymap}] @var{keyseq:function-name}
+bind [-m @var{keymap}] @var{keyseq:readline-command}
+@end example
+
+Display current Readline (@pxref{Command Line Editing})
+key and function bindings,
+bind a key sequence to a Readline function or macro,
+or set a Readline variable.
+Each non-option argument is a command as it would appear in a
+Readline initialization file (@pxref{Readline Init File}),
+but each binding or command must be passed as a separate argument; e.g.,
+@samp{"\C-x\C-r":re-read-init-file}.
+
+Options, if supplied, have the following meanings:
+
+@table @code
+@item -m @var{keymap}
+Use @var{keymap} as the keymap to be affected by
+the subsequent bindings. Acceptable @var{keymap}
+names are
+@code{emacs},
+@code{emacs-standard},
+@code{emacs-meta},
+@code{emacs-ctlx},
+@code{vi},
+@code{vi-move},
+@code{vi-command}, and
+@code{vi-insert}.
+@code{vi} is equivalent to @code{vi-command} (@code{vi-move} is also a
+synonym); @code{emacs} is equivalent to @code{emacs-standard}.
+
+@item -l
+List the names of all Readline functions.
+
+@item -p
+Display Readline function names and bindings in such a way that they
+can be used as input or in a Readline initialization file.
+
+@item -P
+List current Readline function names and bindings.
+
+@item -v
+Display Readline variable names and values in such a way that they
+can be used as input or in a Readline initialization file.
+
+@item -V
+List current Readline variable names and values.
+
+@item -s
+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.
+
+@item -S
+Display Readline key sequences bound to macros and the strings they output.
+
+@item -f @var{filename}
+Read key bindings from @var{filename}.
+
+@item -q @var{function}
+Query about which keys invoke the named @var{function}.
+
+@item -u @var{function}
+Unbind all keys bound to the named @var{function}.
+
+@item -r @var{keyseq}
+Remove any current binding for @var{keyseq}.
+
+@item -x @var{keyseq:shell-command}
+Cause @var{shell-command} to be executed whenever @var{keyseq} is
+entered.
+When @var{shell-command} is executed, the shell sets the
+@code{READLINE_LINE} variable to the contents of the Readline line
+buffer and the @code{READLINE_POINT} variable to the current location
+of the insertion point.
+If the executed command changes the value of @code{READLINE_LINE} or
+@code{READLINE_POINT}, those new values will be reflected in the
+editing state.
+
+@item -X
+List all key sequences bound to shell commands and the associated commands
+in a format that can be reused as input.
+@end table
+
+@noindent
+The return status is zero unless an invalid option is supplied or an
+error occurs.
+
+@item builtin
+@btindex builtin
+@example
+builtin [@var{shell-builtin} [@var{args}]]
+@end example
+
+Run a shell builtin, passing it @var{args}, 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} is not a shell
+builtin command.
+
+@item caller
+@btindex caller
+@example
+caller [@var{expr}]
+@end example
+
+Returns the context of any active subroutine call (a shell function or
+a script executed with the @code{.} or @code{source} builtins).
+
+Without @var{expr}, @code{caller} displays the line number and source
+filename of the current subroutine call.
+If a non-negative integer is supplied as @var{expr}, @code{caller}
+displays the line number, subroutine name, and source file corresponding
+to that position in the current execution call stack. This extra
+information may be used, for example, to print a stack trace. The
+current frame is frame 0.
+
+The return value is 0 unless the shell is not executing a subroutine
+call or @var{expr} does not correspond to a valid position in the
+call stack.
+
+@item command
+@btindex command
+@example
+command [-pVv] @var{command} [@var{arguments} @dots{}]
+@end example
+
+Runs @var{command} with @var{arguments} ignoring any shell function
+named @var{command}.
+Only shell builtin commands or commands found by searching the
+@env{PATH} are executed.
+If there is a shell function named @code{ls}, running @samp{command ls}
+within the function will execute the external command @code{ls}
+instead of calling the function recursively.
+The @option{-p} option means to use a default value for @env{PATH}
+that is guaranteed to find all of the standard utilities.
+The return status in this case is 127 if @var{command} cannot be
+found or an error occurred, and the exit status of @var{command}
+otherwise.
+
+If either the @option{-V} or @option{-v} option is supplied, a
+description of @var{command} is printed. The @option{-v} option
+causes a single word indicating the command or file name used to
+invoke @var{command} to be displayed; the @option{-V} option produces
+a more verbose description. In this case, the return status is
+zero if @var{command} is found, and non-zero if not.
+
+@item declare
+@btindex declare
+@example
+declare [-aAfFgilnrtux] [-p] [@var{name}[=@var{value}] @dots{}]
+@end example
+
+Declare variables and give them attributes. If no @var{name}s
+are given, then display the values of variables instead.
+
+The @option{-p} option will display the attributes and values of each
+@var{name}.
+When @option{-p} is used with @var{name} arguments, additional options,
+other than @option{-f} and @option{-F}, are ignored.
+
+When @option{-p} is supplied without @var{name} arguments, @code{declare}
+will display the attributes and values of all variables having the
+attributes specified by the additional options.
+If no other options are supplied with @option{-p}, @code{declare} will
+display the attributes and values of all shell variables. The @option{-f}
+option will restrict the display to shell functions.
+
+The @option{-F} option inhibits the display of function definitions;
+only the function name and attributes are printed.
+If the @code{extdebug} shell option is enabled using @code{shopt}
+(@pxref{The Shopt Builtin}), the source file name and line number where
+each @var{name} is defined are displayed as well.
+@option{-F} implies @option{-f}.
+
+The @option{-g} option forces variables to be created or modified at
+the global scope, even when @code{declare} is executed in a shell function.
+It is ignored in all other cases.
+
+The following options can be used to restrict output to variables with
+the specified attributes or to give variables attributes:
+
+@table @code
+@item -a
+Each @var{name} is an indexed array variable (@pxref{Arrays}).
+
+@item -A
+Each @var{name} is an associative array variable (@pxref{Arrays}).
+
+@item -f
+Use function names only.
+
+@item -i
+The variable is to be treated as
+an integer; arithmetic evaluation (@pxref{Shell Arithmetic}) is
+performed when the variable is assigned a value.
+
+@item -l
+When the variable is assigned a value, all upper-case characters are
+converted to lower-case.
+The upper-case attribute is disabled.
+
+@item -n
+Give each @var{name} the @var{nameref} attribute, making
+it a name reference to another variable.
+That other variable is defined by the value of @var{name}.
+All references, assignments, and attribute modifications
+to @var{name}, except for those using or changing the
+@option{-n} attribute itself, are performed on the variable referenced by
+@var{name}'s value.
+The nameref attribute cannot be applied to array variables.
+
+@item -r
+Make @var{name}s readonly. These names cannot then be assigned values
+by subsequent assignment statements or unset.
+
+@item -t
+Give each @var{name} the @code{trace} attribute.
+Traced functions inherit the @code{DEBUG} and @code{RETURN} traps from
+the calling shell.
+The trace attribute has no special meaning for variables.
+
+@item -u
+When the variable is assigned a value, all lower-case characters are
+converted to upper-case.
+The lower-case attribute is disabled.
+
+@item -x
+Mark each @var{name} for export to subsequent commands via
+the environment.
+@end table
+
+Using @samp{+} instead of @samp{-} turns off the attribute instead,
+with the exceptions that @samp{+a} and @samp{+A}
+may not be used to destroy array variables and @samp{+r} will not
+remove the readonly attribute.
+When used in a function, @code{declare} makes each @var{name} local,
+as with the @code{local} command, unless the @option{-g} option is used.
+If a variable name is followed by =@var{value}, the value of the variable
+is set to @var{value}.
+
+When using @option{-a} or @option{-A} and the compound assignment syntax to
+create array variables, additional attributes do not take effect until
+subsequent assignments.
+
+The return status is zero unless an invalid option is encountered,
+an attempt is made to define a function using @samp{-f foo=bar},
+an attempt is made to assign a value to a readonly variable,
+an attempt is made to assign a value to an array variable without
+using the compound assignment syntax (@pxref{Arrays}),
+one of the @var{names} is not a valid shell variable name,
+an attempt is made to turn off readonly status for a readonly variable,
+an attempt is made to turn off array status for an array variable,
+or an attempt is made to display a non-existent function with @option{-f}.
+
+@item echo
+@btindex echo
+@example
+echo [-neE] [@var{arg} @dots{}]
+@end example
+
+Output the @var{arg}s, separated by spaces, terminated with a
+newline.
+The return status is 0 unless a write error occurs.
+If @option{-n} is specified, the trailing newline is suppressed.
+If the @option{-e} option is given, interpretation of the following
+backslash-escaped characters is enabled.
+The @option{-E} option disables the interpretation of these escape characters,
+even on systems where they are interpreted by default.
+The @code{xpg_echo} shell option may be used to
+dynamically determine whether or not @code{echo} expands these
+escape characters by default.
+@code{echo} does not interpret @option{--} to mean the end of options.
+
+@code{echo} interprets the following escape sequences:
+@table @code
+@item \a
+alert (bell)
+@item \b
+backspace
+@item \c
+suppress further output
+@item \e
+@itemx \E
+escape
+@item \f
+form feed
+@item \n
+new line
+@item \r
+carriage return
+@item \t
+horizontal tab
+@item \v
+vertical tab
+@item \\
+backslash
+@item \0@var{nnn}
+the eight-bit character whose value is the octal value @var{nnn}
+(zero to three octal digits)
+@item \x@var{HH}
+the eight-bit character whose value is the hexadecimal value @var{HH}
+(one or two hex digits)
+@item \u@var{HHHH}
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+@var{HHHH} (one to four hex digits)
+@item \U@var{HHHHHHHH}
+the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
+@var{HHHHHHHH} (one to eight hex digits)
+@end table
+
+@item enable
+@btindex enable
+@example
+enable [-a] [-dnps] [-f @var{filename}] [@var{name} @dots{}]
+@end example
+
+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 @option{-n} is used, the @var{name}s become disabled. Otherwise
+@var{name}s are enabled. For example, to use the @code{test} binary
+found via @env{$PATH} instead of the shell builtin version, type
+@samp{enable -n test}.
+
+If the @option{-p} option is supplied, or no @var{name} arguments appear,
+a list of shell builtins is printed. With no other arguments, the list
+consists of all enabled shell builtins.
+The @option{-a} option means to list
+each builtin with an indication of whether or not it is enabled.
+
+The @option{-f} option means to load the new builtin command @var{name}
+from shared object @var{filename}, on systems that support dynamic loading.
+The @option{-d} option will delete a builtin loaded with @option{-f}.
+
+If there are no options, a list of the shell builtins is displayed.
+The @option{-s} option restricts @code{enable} to the @sc{posix} special
+builtins. If @option{-s} is used with @option{-f}, the new builtin becomes
+a special builtin (@pxref{Special Builtins}).
+
+The return status is zero unless a @var{name} is not a shell builtin
+or there is an error loading a new builtin from a shared object.
+
+@item help
+@btindex help
+@example
+help [-dms] [@var{pattern}]
+@end example
+
+Display helpful information about builtin commands.
+If @var{pattern} is specified, @code{help} gives detailed help
+on all commands matching @var{pattern}, otherwise a list of
+the builtins is printed.
+
+Options, if supplied, have the following meanings:
+
+@table @code
+@item -d
+Display a short description of each @var{pattern}
+@item -m
+Display the description of each @var{pattern} in a manpage-like format
+@item -s
+Display only a short usage synopsis for each @var{pattern}
+@end table
+
+The return status is zero unless no command matches @var{pattern}.
+
+@item let
+@btindex let
+@example
+let @var{expression} [@var{expression} @dots{}]
+@end example
+
+The @code{let} builtin allows arithmetic to be performed on shell
+variables. Each @var{expression} is evaluated according to the
+rules given below in @ref{Shell Arithmetic}. If the
+last @var{expression} evaluates to 0, @code{let} returns 1;
+otherwise 0 is returned.
+
+@item local
+@btindex local
+@example
+local [@var{option}] @var{name}[=@var{value}] @dots{}
+@end example
+
+For each argument, a local variable named @var{name} is created,
+and assigned @var{value}.
+The @var{option} can be any of the options accepted by @code{declare}.
+@code{local} can only be used within a function; it makes the variable
+@var{name} have a visible scope restricted to that function and its
+children.
+If @var{name} is @samp{-}, the set of shell options is made local to the
+function in which @code{local} is invoked: shell options changed using
+the @code{set} builtin inside the function are restored to their original
+values when the function returns.
+The return status is zero unless @code{local} is used outside
+a function, an invalid @var{name} is supplied, or @var{name} is a
+readonly variable.
+
+@item logout
+@btindex logout
+@example
+logout [@var{n}]
+@end example
+
+Exit a login shell, returning a status of @var{n} to the shell's
+parent.
+
+@item mapfile
+@btindex mapfile
+@example
+mapfile [-d @var{delim}] [-n @var{count}] [-O @var{origin}] [-s @var{count}]
+ [-t] [-u @var{fd}] [-C @var{callback}] [-c @var{quantum}] [@var{array}]
+@end example
+
+Read lines from the standard input into the indexed array variable @var{array},
+or from file descriptor @var{fd}
+if the @option{-u} option is supplied.
+The variable @code{MAPFILE} is the default @var{array}.
+Options, if supplied, have the following meanings:
+
+@table @code
+
+@item -d
+The first character of @var{delim} is used to terminate each input line,
+rather than newline.
+If @var{delim} is the empty string, @code{mapfile} will terminate a line
+when it reads a NUL character.
+@item -n
+Copy at most @var{count} lines. If @var{count} is 0, all lines are copied.
+@item -O
+Begin assigning to @var{array} at index @var{origin}.
+The default index is 0.
+@item -s
+Discard the first @var{count} lines read.
+@item -t
+Remove a trailing @var{delim} (default newline) from each line read.
+@item -u
+Read lines from file descriptor @var{fd} instead of the standard input.
+@item -C
+Evaluate @var{callback} each time @var{quantum} lines are read.
+The @option{-c} option specifies @var{quantum}.
+@item -c
+Specify the number of lines read between each call to @var{callback}.
+@end table
+
+If @option{-C} is specified without @option{-c},
+the default quantum is 5000.
+When @var{callback} is evaluated, it is supplied the index of the next
+array element to be assigned and the line to be assigned to that element
+as additional arguments.
+@var{callback} is evaluated after the line is read but before the
+array element is assigned.
+
+If not supplied with an explicit origin, @code{mapfile} will clear @var{array}
+before assigning to it.
+
+@code{mapfile} returns successfully unless an invalid option or option
+argument is supplied, @var{array} is invalid or unassignable, or @var{array}
+is not an indexed array.
+
+@item printf
+@btindex printf
+@example
+printf [-v @var{var}] @var{format} [@var{arguments}]
+@end example
+
+Write the formatted @var{arguments} to the standard output under the
+control of the @var{format}.
+The @option{-v} option causes the output to be assigned to the variable
+@var{var} rather than being printed to the standard output.
+
+The @var{format} 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}.
+In addition to the standard @code{printf(1)} formats, @code{printf}
+interprets the following extensions:
+
+@table @code
+@item %b
+Causes @code{printf} to expand backslash escape sequences in the
+corresponding @var{argument} in the same way as @code{echo -e}
+(@pxref{Bash Builtins}).
+@item %q
+Causes @code{printf} to output the
+corresponding @var{argument} in a format that can be reused as shell input.
+@item %(@var{datefmt})T
+Causes @code{printf} to output the date-time string resulting from using
+@var{datefmt} as a format string for @code{strftime}(3).
+The corresponding @var{argument} is an integer representing the number of
+seconds since the epoch.
+Two special argument values may be used: -1 represents the current
+time, and -2 represents the time the shell was invoked.
+If no argument is specified, conversion behaves as if -1 had been given.
+This is an exception to the usual @code{printf} behavior.
+@end table
+
+@noindent
+Arguments to non-string format specifiers are treated as C language constants,
+except that a leading plus or minus sign is allowed, and if the leading
+character is a single or double quote, the value is the ASCII value of
+the following character.
+
+The @var{format} is reused as necessary to consume all of the @var{arguments}.
+If the @var{format} requires more @var{arguments} than are supplied, the
+extra format specifications behave as if a zero value or null string, as
+appropriate, had been supplied. The return value is zero on success,
+non-zero on failure.
+
+@item read
+@btindex read
+@example
+read [-ers] [-a @var{aname}] [-d @var{delim}] [-i @var{text}] [-n @var{nchars}]
+ [-N @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}]
+@end example
+
+One line is read from the standard input, or from the file descriptor
+@var{fd} supplied as an argument to the @option{-u} option,
+split into words as described above in @ref{Word Splitting},
+and the first word
+is assigned to the first @var{name}, the second word to the second @var{name},
+and so on.
+If there are more words than names,
+the remaining words and their intervening delimiters are assigned
+to the last @var{name}.
+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 @env{IFS} variable
+are used to split the line into words using the same rules the shell
+uses for expansion (described above in @ref{Word Splitting}).
+The backslash character @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 @env{REPLY}.
+The exit status is zero, unless end-of-file is encountered, @code{read}
+times out (in which case the status is greater than 128),
+a variable assignment error (such as assigning to a readonly variable) occurs,
+or an invalid file descriptor is supplied as the argument to @option{-u}.
+
+Options, if supplied, have the following meanings:
+
+@table @code
+@item -a @var{aname}
+The words are assigned to sequential indices of the array variable
+@var{aname}, starting at 0.
+All elements are removed from @var{aname} before the assignment.
+Other @var{name} arguments are ignored.
+
+@item -d @var{delim}
+The first character of @var{delim} is used to terminate the input line,
+rather than newline.
+If @var{delim} is the empty string, @code{read} will terminate a line
+when it reads a NUL character.
+
+@item -e
+Readline (@pxref{Command Line Editing}) is used to obtain the line.
+Readline uses the current (or default, if line editing was not previously
+active) editing settings, but uses Readline's default filename completion.
+
+@item -i @var{text}
+If Readline is being used to read the line, @var{text} is placed into
+the editing buffer before editing begins.
+
+@item -n @var{nchars}
+@code{read} returns after reading @var{nchars} characters rather than
+waiting for a complete line of input, but honors a delimiter if fewer
+than @var{nchars} characters are read before the delimiter.
+
+@item -N @var{nchars}
+@code{read} returns after reading exactly @var{nchars} characters rather
+than waiting for a complete line of input, unless EOF is encountered or
+@code{read} times out.
+Delimiter characters encountered in the input are
+not treated specially and do not cause @code{read} to return until
+@var{nchars} characters are read.
+The result is not split on the characters in @code{IFS}; the intent is
+that the variable is assigned exactly the characters read
+(with the exception of backslash; see the @option{-r} option below).
+
+@item -p @var{prompt}
+Display @var{prompt}, without a trailing newline, before attempting
+to read any input.
+The prompt is displayed only if input is coming from a terminal.
+
+@item -r
+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 then be used as a line
+continuation.
+
+@item -s
+Silent mode. If input is coming from a terminal, characters are
+not echoed.
+
+@item -t @var{timeout}
+Cause @code{read} to time out and return failure if a complete line of
+input (or a specified number of characters)
+is not read within @var{timeout} seconds.
+@var{timeout} may be a decimal number with a fractional portion following
+the decimal point.
+This option is only effective if @code{read} is reading input from a
+terminal, pipe, or other special file; it has no effect when reading
+from regular files.
+If @code{read} times out, @code{read} saves any partial input read into
+the specified variable @var{name}.
+If @var{timeout} is 0, @code{read} returns immediately, without trying to
+read and data. The exit status is 0 if input is available on
+the specified file descriptor, non-zero otherwise.
+The exit status is greater than 128 if the timeout is exceeded.
+
+@item -u @var{fd}
+Read input from file descriptor @var{fd}.
+@end table
+
+@item readarray
+@btindex readarray
+@example
+readarray [-d @var{delim}] [-n @var{count}] [-O @var{origin}] [-s @var{count}]
+ [-t] [-u @var{fd}] [-C @var{callback}] [-c @var{quantum}] [@var{array}]
+@end example
+
+Read lines from the standard input into the indexed array variable @var{array},
+or from file descriptor @var{fd}
+if the @option{-u} option is supplied.
+
+A synonym for @code{mapfile}.
+
+@item source
+@btindex source
+@example
+source @var{filename}
+@end example
+
+A synonym for @code{.} (@pxref{Bourne Shell Builtins}).
+
+@item type
+@btindex type
+@example
+type [-afptP] [@var{name} @dots{}]
+@end example
+
+For each @var{name}, indicate how it would be interpreted if used as a
+command name.
+
+If the @option{-t} option is used, @code{type} prints a single word
+which is one of @samp{alias}, @samp{function}, @samp{builtin},
+@samp{file} or @samp{keyword},
+if @var{name} is an alias, shell function, shell builtin,
+disk file, or shell reserved word, respectively.
+If the @var{name} is not found, then nothing is printed, and
+@code{type} returns a failure status.
+
+If the @option{-p} option is used, @code{type} either returns the name
+of the disk file that would be executed, or nothing if @option{-t}
+would not return @samp{file}.
+
+The @option{-P} option forces a path search for each @var{name}, even if
+@option{-t} would not return @samp{file}.
+
+If a command is hashed, @option{-p} and @option{-P} print the hashed value,
+which is not necessarily the file that appears first in @code{$PATH}.
+
+If the @option{-a} option is used, @code{type} returns all of the places
+that contain an executable named @var{file}.
+This includes aliases and functions, if and only if the @option{-p} option
+is not also used.
+
+If the @option{-f} option is used, @code{type} does not attempt to find
+shell functions, as with the @code{command} builtin.
+
+The return status is zero if all of the @var{names} are found, non-zero
+if any are not found.
+
+@item typeset
+@btindex typeset
+@example
+typeset [-afFgrxilnrtux] [-p] [@var{name}[=@var{value}] @dots{}]
+@end example
+
+The @code{typeset} command is supplied for compatibility with the Korn
+shell.
+It is a synonym for the @code{declare} builtin command.
+
+@item ulimit
+@btindex ulimit
+@example
+ulimit [-HSabcdefiklmnpqrstuvxPT] [@var{limit}]
+@end example
+
+@code{ulimit} provides control over the resources available to processes
+started by the shell, on systems that allow such control. If an
+option is given, it is interpreted as follows:
+
+@table @code
+@item -S
+Change and report the soft limit associated with a resource.
+
+@item -H
+Change and report the hard limit associated with a resource.
+
+@item -a
+All current limits are reported.
+
+@item -b
+The maximum socket buffer size.
+
+@item -c
+The maximum size of core files created.
+
+@item -d
+The maximum size of a process's data segment.
+
+@item -e
+The maximum scheduling priority ("nice").
+
+@item -f
+The maximum size of files written by the shell and its children.
+
+@item -i
+The maximum number of pending signals.
+
+@item -k
+The maximum number of kqueues that may be allocated.
+
+@item -l
+The maximum size that may be locked into memory.
+
+@item -m
+The maximum resident set size (many systems do not honor this limit).
+
+@item -n
+The maximum number of open file descriptors (most systems do not
+allow this value to be set).
+
+@item -p
+The pipe buffer size.
+
+@item -q
+The maximum number of bytes in POSIX message queues.
+
+@item -r
+The maximum real-time scheduling priority.
+
+@item -s
+The maximum stack size.
+
+@item -t
+The maximum amount of cpu time in seconds.
+
+@item -u
+The maximum number of processes available to a single user.
+
+@item -v
+The maximum amount of virtual memory available to the shell, and, on
+some systems, to its children.
+
+@item -x
+The maximum number of file locks.
+
+@item -P
+The maximum number of pseudoterminals.
+
+@item -T
+The maximum number of threads.
+@end table
+
+If @var{limit} is given, and the @option{-a} option is not used,
+@var{limit} is the new value of the specified resource.
+The special @var{limit} values @code{hard}, @code{soft}, and
+@code{unlimited} stand for the current hard limit, the current soft limit,
+and no limit, respectively.
+A hard limit cannot be increased by a non-root user once it is set;
+a soft limit may be increased up to the value of the hard limit.
+Otherwise, the current value of the soft limit for the specified resource
+is printed, unless the @option{-H} option is supplied.
+When setting new limits, if neither @option{-H} nor @option{-S} is supplied,
+both the hard and soft limits are set.
+If no option is given, then @option{-f} is assumed. Values are in 1024-byte
+increments, except for @option{-t}, which is in seconds; @option{-p},
+which is in units of 512-byte blocks;
+@option{-P},
+@option{-T},
+@option{-b},
+@option{-k},
+@option{-n} and @option{-u}, which are unscaled values;
+and, when in @sc{posix} Mode (@pxref{Bash POSIX Mode}),
+@option{-c} and @option{-f}, which are in 512-byte increments.
+
+The return status is zero unless an invalid option or argument is supplied,
+or an error occurs while setting a new limit.
+
+@item unalias
+@btindex unalias
+@example
+unalias [-a] [@var{name} @dots{} ]
+@end example
+
+Remove each @var{name} from the list of aliases. If @option{-a} is
+supplied, all aliases are removed.
+Aliases are described in @ref{Aliases}.
+@end table
+
+@node Modifying Shell Behavior
+@section Modifying Shell Behavior
+
+@menu
+* The Set Builtin:: Change the values of shell attributes and
+ positional parameters.
+* The Shopt Builtin:: Modify shell optional behavior.
+@end menu
+
+@node The Set Builtin
+@subsection The Set Builtin
+
+This builtin is so complicated that it deserves its own section. @code{set}
+allows you to change the values of shell options and set the positional
+parameters, or to display the names and values of shell variables.
+
+@table @code
+@item set
+@btindex set
+@example
+set [--abefhkmnptuvxBCEHPT] [-o @var{option-name}] [@var{argument} @dots{}]
+set [+abefhkmnptuvxBCEHPT] [+o @var{option-name}] [@var{argument} @dots{}]
+@end example
+
+If no options or arguments are supplied, @code{set} displays the names
+and values of all shell variables and functions, sorted according to the
+current locale, in a format that may be reused as input
+for setting or resetting the currently-set variables.
+Read-only variables cannot be reset.
+In @sc{posix} mode, only shell variables are listed.
+
+When options are supplied, they set or unset shell attributes.
+Options, if specified, have the following meanings:
+
+@table @code
+@item -a
+Each variable or function that is created or modified is given the
+export attribute and marked for export to the environment of
+subsequent commands.
+
+@item -b
+Cause the status of terminated background jobs to be reported
+immediately, rather than before printing the next primary prompt.
+
+@item -e
+Exit immediately if
+a pipeline (@pxref{Pipelines}), which may consist of a single simple command
+(@pxref{Simple Commands}),
+a list (@pxref{Lists}),
+or a compound command (@pxref{Compound Commands})
+returns a non-zero status.
+The shell does not exit if the command that fails is part of the
+command list immediately following a @code{while} or @code{until} keyword,
+part of the test in an @code{if} statement,
+part of any command executed in a @code{&&} or @code{||} list except
+the command following the final @code{&&} or @code{||},
+any command in a pipeline but the last,
+or if the command's return status is being inverted with @code{!}.
+If a compound command other than a subshell
+returns a non-zero status because a command failed
+while @option{-e} was being ignored, the shell does not exit.
+A trap on @code{ERR}, if set, is executed before the shell exits.
+
+This option applies to the shell environment and each subshell environment
+separately (@pxref{Command Execution Environment}), and may cause
+subshells to exit before executing all the commands in the subshell.
+
+If a compound command or shell function executes in a context where
+@option{-e} is being ignored,
+none of the commands executed within the compound command or function body
+will be affected by the @option{-e} setting, even if @option{-e} is set
+and a command returns a failure status.
+If a compound command or shell function sets @option{-e} while executing in
+a context where @option{-e} is ignored, that setting will not have any
+effect until the compound command or the command containing the function
+call completes.
+
+@item -f
+Disable filename expansion (globbing).
+
+@item -h
+Locate and remember (hash) commands as they are looked up for execution.
+This option is enabled by default.
+
+@item -k
+All arguments in the form of assignment statements are placed
+in the environment for a command, not just those that precede
+the command name.
+
+@item -m
+Job control is enabled (@pxref{Job Control}).
+All processes run in a separate process group.
+When a background job completes, the shell prints a line
+containing its exit status.
+
+@item -n
+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.
+
+@item -o @var{option-name}
+
+Set the option corresponding to @var{option-name}:
+
+@table @code
+@item allexport
+Same as @code{-a}.
+
+@item braceexpand
+Same as @code{-B}.
+
+@item emacs
+Use an @code{emacs}-style line editing interface (@pxref{Command Line Editing}).
+This also affects the editing interface used for @code{read -e}.
+
+@item errexit
+Same as @code{-e}.
+
+@item errtrace
+Same as @code{-E}.
+
+@item functrace
+Same as @code{-T}.
+
+@item hashall
+Same as @code{-h}.
+
+@item histexpand
+Same as @code{-H}.
+
+@item history
+Enable command history, as described in @ref{Bash History Facilities}.
+This option is on by default in interactive shells.
+
+@item ignoreeof
+An interactive shell will not exit upon reading EOF.
+
+@item keyword
+Same as @code{-k}.
+
+@item monitor
+Same as @code{-m}.
+
+@item noclobber
+Same as @code{-C}.
+
+@item noexec
+Same as @code{-n}.
+
+@item noglob
+Same as @code{-f}.
+
+@item nolog
+Currently ignored.
+
+@item notify
+Same as @code{-b}.
+
+@item nounset
+Same as @code{-u}.
+
+@item onecmd
+Same as @code{-t}.
+
+@item physical
+Same as @code{-P}.
+
+@item pipefail
+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.
+
+@item posix
+Change the behavior of Bash where the default operation differs
+from the @sc{posix} standard to match the standard
+(@pxref{Bash POSIX Mode}).
+This is intended to make Bash behave as a strict superset of that
+standard.
+
+@item privileged
+Same as @code{-p}.
+
+@item verbose
+Same as @code{-v}.
+
+@item vi
+Use a @code{vi}-style line editing interface.
+This also affects the editing interface used for @code{read -e}.
+
+@item xtrace
+Same as @code{-x}.
+@end table
+
+@item -p
+Turn on privileged mode.
+In this mode, the @env{$BASH_ENV} and @env{$ENV} files are not
+processed, shell functions are not inherited from the environment,
+and the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH} and @env{GLOBIGNORE}
+variables, if they appear in the environment, are ignored.
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the @option{-p} option is not supplied, these actions
+are taken and the effective user id is set to the real user id.
+If the @option{-p} option is supplied at startup, the effective user id is
+not reset.
+Turning this option off causes the effective user
+and group ids to be set to the real user and group ids.
+
+@item -t
+Exit after reading and executing one command.
+
+@item -u
+Treat unset variables and parameters other than the special parameters
+@samp{@@} or @samp{*} as an error when performing parameter expansion.
+An error message will be written to the standard error, and a non-interactive
+shell will exit.
+
+@item -v
+Print shell input lines as they are read.
+
+@item -x
+Print a trace of simple commands, @code{for} commands, @code{case}
+commands, @code{select} commands, and arithmetic @code{for} commands
+and their arguments or associated word lists after they are
+expanded and before they are executed. The value of the @env{PS4}
+variable is expanded and the resultant value is printed before
+the command and its expanded arguments.
+
+@item -B
+The shell will perform brace expansion (@pxref{Brace Expansion}).
+This option is on by default.
+
+@item -C
+Prevent output redirection using @samp{>}, @samp{>&}, and @samp{<>}
+from overwriting existing files.
+
+@item -E
+If set, any trap on @code{ERR} is inherited by shell functions, command
+substitutions, and commands executed in a subshell environment.
+The @code{ERR} trap is normally not inherited in such cases.
+
+@item -H
+Enable @samp{!} style history substitution (@pxref{History Interaction}).
+This option is on by default for interactive shells.
+
+@item -P
+If set, do not resolve symbolic links when performing commands such as
+@code{cd} which change the current directory. The physical directory
+is used instead. By default, Bash follows
+the logical chain of directories when performing commands
+which change the current directory.
+
+For example, if @file{/usr/sys} is a symbolic link to @file{/usr/local/sys}
+then:
+@example
+$ cd /usr/sys; echo $PWD
+/usr/sys
+$ cd ..; pwd
+/usr
+@end example
+
+@noindent
+If @code{set -P} is on, then:
+@example
+$ cd /usr/sys; echo $PWD
+/usr/local/sys
+$ cd ..; pwd
+/usr/local
+@end example
+
+@item -T
+If set, any trap on @code{DEBUG} and @code{RETURN} are inherited by
+shell functions, command substitutions, and commands executed
+in a subshell environment.
+The @code{DEBUG} and @code{RETURN} traps are normally not inherited
+in such cases.
+
+@item --
+If no arguments follow this option, then the positional parameters are
+unset. Otherwise, the positional parameters are set to the
+@var{arguments}, even if some of them begin with a @samp{-}.
+
+@item -
+Signal the end of options, cause all remaining @var{arguments}
+to be assigned to the positional parameters. The @option{-x}
+and @option{-v} options are turned off.
+If there are no arguments, the positional parameters remain unchanged.
+@end table
+
+Using @samp{+} rather than @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{$-}.
+
+The remaining N @var{arguments} are positional parameters and are
+assigned, in order, to @code{$1}, @code{$2}, @dots{} @code{$N}.
+The special parameter @code{#} is set to N.
+
+The return status is always zero unless an invalid option is supplied.
+@end table
+
+@node The Shopt Builtin
+@subsection The Shopt Builtin
+
+This builtin allows you to change additional shell optional behavior.
+
+@table @code
+
+@item shopt
+@btindex shopt
+@example
+shopt [-pqsu] [-o] [@var{optname} @dots{}]
+@end example
+
+Toggle the values of settings controlling optional shell behavior.
+The settings can be either those listed below, or, if the
+@option{-o} option is used, those available with the @option{-o}
+option to the @code{set} builtin command (@pxref{The Set Builtin}).
+With no options, or with the @option{-p} option, a list of all settable
+options is displayed, with an indication of whether or not each is set;
+if @var{optnames} are supplied, the output is restricted to those options.
+The @option{-p} option causes output to be displayed in a form that
+may be reused as input.
+Other options have the following meanings:
+
+@table @code
+@item -s
+Enable (set) each @var{optname}.
+
+@item -u
+Disable (unset) each @var{optname}.
+
+@item -q
+Suppresses normal output; the return status
+indicates whether the @var{optname} is set or unset.
+If multiple @var{optname} arguments are given with @option{-q},
+the return status is zero if all @var{optnames} are enabled;
+non-zero otherwise.
+
+@item -o
+Restricts the values of
+@var{optname} to be those defined for the @option{-o} option to the
+@code{set} builtin (@pxref{The Set Builtin}).
+@end table
+
+If either @option{-s} or @option{-u}
+is used with no @var{optname} arguments, @code{shopt} shows only
+those options which are set or unset, respectively.
+
+Unless otherwise noted, the @code{shopt} options are disabled (off)
+by default.
+
+The return status when listing options is zero if all @var{optnames}
+are enabled, non-zero otherwise. When setting or unsetting options,
+the return status is zero unless an @var{optname} is not a valid shell
+option.
+
+The list of @code{shopt} options is:
+@table @code
+
+@item assoc_expand_once
+If set, the shell suppresses multiple evaluation of associative array
+subscripts during arithmetic expression evaluation, while executing
+builtins that can perform variable assignments,
+and while executing builtins that perform array dereferencing.
+
+@item autocd
+If set, a command name that is the name of a directory is executed as if
+it were the argument to the @code{cd} command.
+This option is only used by interactive shells.
+
+@item cdable_vars
+If this is set, an argument to the @code{cd} builtin command that
+is not a directory is assumed to be the name of a variable whose
+value is the directory to change to.
+
+@item cdspell
+If set, minor errors in the spelling of a directory component in a
+@code{cd} command will be corrected.
+The errors checked for are transposed characters,
+a missing character, and a character too many.
+If a correction is found, the corrected path is printed,
+and the command proceeds.
+This option is only used by interactive shells.
+
+@item checkhash
+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.
+
+@item checkjobs
+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 (@pxref{Job Control}).
+The shell always postpones exiting if any jobs are stopped.
+
+@item checkwinsize
+If set, Bash checks the window size after each external (non-builtin)
+command and, if necessary, updates the values of
+@env{LINES} and @env{COLUMNS}.
+This option is enabled by default.
+
+@item cmdhist
+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.
+This option is enabled by default, but only has an effect if command
+history is enabled (@pxref{Bash History Facilities}).
+
+@item compat31
+If set, Bash
+changes its behavior to that of version 3.1 with respect to quoted
+arguments to the conditional command's @samp{=~} operator
+and with respect to locale-specific
+string comparison when using the @code{[[}
+conditional command's @samp{<} and @samp{>} operators.
+Bash versions prior to bash-4.1 use ASCII collation and strcmp(3);
+bash-4.1 and later use the current locale's collation sequence and strcoll(3).
+
+@item compat32
+If set, Bash
+changes its behavior to that of version 3.2 with respect to locale-specific
+string comparison when using the @code{[[}
+conditional command's @samp{<} and @samp{>} operators (see previous item)
+and the effect of interrupting a command list.
+Bash versions 3.2 and earlier continue with the next command in the list
+after one terminates due to an interrupt.
+
+@item compat40
+If set, Bash
+changes its behavior to that of version 4.0 with respect to locale-specific
+string comparison when using the @code{[[}
+conditional command's @samp{<} and @samp{>} operators (see description
+of @code{compat31})
+and the effect of interrupting a command list.
+Bash versions 4.0 and later interrupt the list as if the shell received the
+interrupt; previous versions continue with the next command in the list.
+
+@item compat41
+If set, Bash, when in @sc{posix} mode, treats a single quote in a double-quoted
+parameter expansion as a special character. The single quotes must match
+(an even number) and the characters between the single quotes are considered
+quoted. This is the behavior of @sc{posix} mode through version 4.1.
+The default Bash behavior remains as in previous versions.
+
+@item compat42
+If set, Bash
+does not process the replacement string in the pattern substitution word
+expansion using quote removal.
+
+@item compat43
+If set, Bash
+does not print a warning message if an attempt is made to use a quoted compound
+array assignment as an argument to @code{declare},
+makes word expansion errors
+non-fatal errors that cause the current command to fail (the default behavior is
+to make them fatal errors that cause the shell to exit),
+and does not reset the
+loop state when a shell function is executed (this allows @code{break} or
+@code{continue} in a shell function to affect loops in the caller's context).
+
+@item compat44
+If set, Bash
+saves the positional parameters to BASH_ARGV and BASH_ARGC before they are
+used, regardless of whether or not extended debugging mode is enabled.
+
+@item complete_fullquote
+If set, Bash
+quotes all shell metacharacters in filenames and directory names when
+performing completion.
+If not set, Bash
+removes metacharacters such as the dollar sign from the set of
+characters that will be quoted in completed filenames
+when these metacharacters appear in shell variable references in words to be
+completed.
+This means that dollar signs in variable names that expand to directories
+will not be quoted;
+however, any dollar signs appearing in filenames will not be quoted, either.
+This is active only when bash is using backslashes to quote completed
+filenames.
+This variable is set by default, which is the default Bash behavior in
+versions through 4.2.
+
+@item direxpand
+If set, Bash
+replaces directory names with the results of word expansion when performing
+filename completion. This changes the contents of the readline editing
+buffer.
+If not set, Bash attempts to preserve what the user typed.
+
+@item dirspell
+If set, Bash
+attempts spelling correction on directory names during word completion
+if the directory name initially supplied does not exist.
+
+@item dotglob
+If set, Bash includes filenames beginning with a `.' in
+the results of filename expansion.
+The filenames @samp{.} and @samp{..} must always be matched explicitly,
+even if @code{dotglob} is set.
+
+@item execfail
+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}
+builtin command. An interactive shell does not exit if @code{exec}
+fails.
+
+@item expand_aliases
+If set, aliases are expanded as described below under Aliases,
+@ref{Aliases}.
+This option is enabled by default for interactive shells.
+
+@item extdebug
+If set at shell invocation, arrange to execute the debugger profile
+before the shell starts, identical to the @option{--debugger} option.
+If set after invocation, behavior intended for use by debuggers is enabled:
+
+@enumerate
+@item
+The @option{-F} option to the @code{declare} builtin (@pxref{Bash Builtins})
+displays the source file name and line number corresponding to each function
+name supplied as an argument.
+
+@item
+If the command run by the @code{DEBUG} trap returns a non-zero value, the
+next command is skipped and not executed.
+
+@item
+If the command run by the @code{DEBUG} trap returns a value of 2, and the
+shell is executing in a subroutine (a shell function or a shell script
+executed by the @code{.} or @code{source} builtins), the shell simulates
+a call to @code{return}.
+
+@item
+@code{BASH_ARGC} and @code{BASH_ARGV} are updated as described in their
+descriptions (@pxref{Bash Variables}).
+
+@item
+Function tracing is enabled: command substitution, shell functions, and
+subshells invoked with @code{( @var{command} )} inherit the
+@code{DEBUG} and @code{RETURN} traps.
+
+@item
+Error tracing is enabled: command substitution, shell functions, and
+subshells invoked with @code{( @var{command} )} inherit the
+@code{ERR} trap.
+@end enumerate
+
+@item extglob
+If set, the extended pattern matching features described above
+(@pxref{Pattern Matching}) are enabled.
+
+@item extquote
+If set, @code{$'@var{string}'} and @code{$"@var{string}"} quoting is
+performed within @code{$@{@var{parameter}@}} expansions
+enclosed in double quotes. This option is enabled by default.
+
+@item failglob
+If set, patterns which fail to match filenames during filename expansion
+result in an expansion error.
+
+@item force_fignore
+If set, the suffixes specified by the @env{FIGNORE} shell variable
+cause words to be ignored when performing word completion even if
+the ignored words are the only possible completions.
+@xref{Bash Variables}, for a description of @env{FIGNORE}.
+This option is enabled by default.
+
+@item globasciiranges
+If set, range expressions used in pattern matching bracket expressions
+(@pxref{Pattern Matching})
+behave as if in the traditional C locale when performing
+comparisons. That is, the current locale's collating sequence
+is not taken into account, so
+@samp{b} will not collate between @samp{A} and @samp{B},
+and upper-case and lower-case ASCII characters will collate together.
+
+@item globstar
+If set, the pattern @samp{**} used in a filename expansion context will
+match all files and zero or more directories and subdirectories.
+If the pattern is followed by a @samp{/}, only directories and
+subdirectories match.
+
+@item gnu_errfmt
+If set, shell error messages are written in the standard @sc{gnu} error
+message format.
+
+@item histappend
+If set, the history list is appended to the file named by the value
+of the @env{HISTFILE}
+variable when the shell exits, rather than overwriting the file.
+
+@item histreedit
+If set, and Readline
+is being used, a user is given the opportunity to re-edit a
+failed history substitution.
+
+@item histverify
+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.
+
+@item hostcomplete
+If set, and Readline is being used, Bash will attempt to perform
+hostname completion when a word containing a @samp{@@} is being
+completed (@pxref{Commands For Completion}). This option is enabled
+by default.
+
+@item huponexit
+If set, Bash will send @code{SIGHUP} to all jobs when an interactive
+login shell exits (@pxref{Signals}).
+
+@item inherit_errexit
+If set, command substitution inherits the value of the @code{errexit} option,
+instead of unsetting it in the subshell environment.
+This option is enabled when @sc{posix} mode is enabled.
+
+@item interactive_comments
+Allow a word beginning with @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.
+
+@item lastpipe
+If set, and job control is not active, the shell runs the last command of
+a pipeline not executed in the background in the current shell environment.
+
+@item lithist
+If enabled, and the @code{cmdhist}
+option is enabled, multi-line commands are saved to the history with
+embedded newlines rather than using semicolon separators where possible.
+
+@item localvar_inherit
+If set, local variables inherit the value and attributes of a variable of
+the same name that exists at a previous scope before any new value is
+assigned. The @var{nameref} attribute is not inherited.
+
+@item localvar_unset
+If set, calling @code{unset} on local variables in previous function scopes
+marks them so subsequent lookups find them unset until that function
+returns. This is identical to the behavior of unsetting local variables
+at the current function scope.
+
+@item login_shell
+The shell sets this option if it is started as a login shell
+(@pxref{Invoking Bash}).
+The value may not be changed.
+
+@item mailwarn
+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} has been read"} is displayed.
+
+@item no_empty_cmd_completion
+If set, and Readline is being used, Bash will not attempt to search
+the @env{PATH} for possible completions when completion is attempted
+on an empty line.
+
+@item nocaseglob
+If set, Bash matches filenames in a case-insensitive fashion when
+performing filename expansion.
+
+@item nocasematch
+If set, Bash matches patterns in a case-insensitive fashion when
+performing matching while executing @code{case} or @code{[[}
+conditional commands,
+when performing pattern substitution word expansions,
+or when filtering possible completions as part of programmable completion.
+
+@item nullglob
+If set, Bash allows filename patterns which match no
+files to expand to a null string, rather than themselves.
+
+@item progcomp
+If set, the programmable completion facilities
+(@pxref{Programmable Completion}) are enabled.
+This option is enabled by default.
+
+@item progcomp_alias
+If set, and programmable completion is enabled, Bash treats a command
+name that doesn't have any completions as a possible alias and attempts
+alias expansion. If it has an alias, Bash attempts programmable
+completion using the command word resulting from the expanded alias.
+
+@item promptvars
+If set, prompt strings undergo
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal after being expanded
+as described below (@pxref{Controlling the Prompt}).
+This option is enabled by default.
+
+@item restricted_shell
+The shell sets this option if it is started in restricted mode
+(@pxref{The Restricted Shell}).
+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.
+
+@item shift_verbose
+If this is set, the @code{shift}
+builtin prints an error message when the shift count exceeds the
+number of positional parameters.
+
+@item sourcepath
+If set, the @code{source} builtin uses the value of @env{PATH}
+to find the directory containing the file supplied as an argument.
+This option is enabled by default.
+
+@item xpg_echo
+If set, the @code{echo} builtin expands backslash-escape sequences
+by default.
+
+@end table
+
+@noindent
+The return status when listing options is zero if all @var{optnames}
+are enabled, non-zero otherwise.
+When setting or unsetting options, the return status is zero unless an
+@var{optname} is not a valid shell option.
+@end table
+
+@node Special Builtins
+@section Special Builtins
+@cindex special builtin
+
+For historical reasons, the @sc{posix} standard has classified
+several builtin commands as @emph{special}.
+When Bash is executing in @sc{posix} mode, the special builtins
+differ from other builtin commands in three respects:
+
+@enumerate
+@item
+Special builtins are found before shell functions during command lookup.
+
+@item
+If a special builtin returns an error status, a non-interactive shell exits.
+
+@item
+Assignment statements preceding the command stay in effect in the shell
+environment after the command completes.
+@end enumerate
+
+When Bash is not executing in @sc{posix} mode, these builtins behave no
+differently than the rest of the Bash builtin commands.
+The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}.
+
+These are the @sc{posix} special builtins:
+@example
+@w{break : . continue eval exec exit export readonly return set}
+@w{shift trap unset}
+@end example
+
+@node Shell Variables
+@chapter Shell Variables
+
+@menu
+* Bourne Shell Variables:: Variables which Bash uses in the same way
+ as the Bourne Shell.
+* Bash Variables:: List of variables that exist in Bash.
+@end menu
+
+This chapter describes the shell variables that Bash uses.
+Bash automatically assigns default values to a number of variables.
+
+@node Bourne Shell Variables
+@section Bourne Shell Variables
+
+Bash uses certain shell variables in the same way as the Bourne shell.
+In some cases, Bash assigns a default value to the variable.
+
+@vtable @code
+
+@item CDPATH
+A colon-separated list of directories used as a search path for
+the @code{cd} builtin command.
+
+@item HOME
+The current user's home directory; the default for the @code{cd} builtin
+command.
+The value of this variable is also used by tilde expansion
+(@pxref{Tilde Expansion}).
+
+@item IFS
+A list of characters that separate fields; used when the shell splits
+words as part of expansion.
+
+@item MAIL
+If this parameter is set to a filename or directory name
+and the @env{MAILPATH} variable
+is not set, Bash informs the user of the arrival of mail in
+the specified file or Maildir-format directory.
+
+@item MAILPATH
+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 filename from the message with
+a @samp{?}.
+When used in the text of the message, @code{$_} expands to the name of
+the current mail file.
+
+@item OPTARG
+The value of the last option argument processed by the @code{getopts} builtin.
+
+@item OPTIND
+The index of the last option argument processed by the @code{getopts} builtin.
+
+@item PATH
+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} indicates the
+current directory.
+A null directory name may appear as two adjacent colons, or as an initial
+or trailing colon.
+
+@item PS1
+The primary prompt string. The default value is @samp{\s-\v\$ }.
+@xref{Controlling the Prompt}, for the complete list of escape
+sequences that are expanded before @env{PS1} is displayed.
+
+@item PS2
+The secondary prompt string. The default value is @samp{> }.
+@env{PS2} is expanded in the same way as @env{PS1} before being
+displayed.
+
+@end vtable
+
+@node Bash Variables
+@section Bash Variables
+
+These variables are set or used by Bash, but other shells
+do not normally treat them specially.
+
+A few variables used by Bash are described in different chapters:
+variables for controlling the job control facilities
+(@pxref{Job Control Variables}).
+
+@vtable @code
+
+@item BASH
+The full pathname used to execute the current instance of Bash.
+
+@item BASHOPTS
+A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the @option{-s} option to the
+@code{shopt} builtin command (@pxref{The Shopt Builtin}).
+The options appearing in @env{BASHOPTS} are those reported
+as @samp{on} by @samp{shopt}.
+If this variable is in the environment when Bash
+starts up, each shell option in the list will be enabled before
+reading any startup files. This variable is readonly.
+
+@item BASHPID
+Expands to the process ID of the current Bash process.
+This differs from @code{$$} under certain circumstances, such as subshells
+that do not require Bash to be re-initialized.
+Assignments to @env{BASHPID} have no effect.
+If @code{BASHPID}
+is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@item BASH_ALIASES
+An associative array variable whose members correspond to the internal
+list of aliases as maintained by the @code{alias} builtin.
+(@pxref{Bourne Shell Builtins}).
+Elements added to this array appear in the alias list; however,
+unsetting array elements currently does not cause aliases to be removed
+from the alias list.
+If @code{BASH_ALIASES}
+is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@item BASH_ARGC
+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{.} or @code{source}) is at the top of the stack. When a
+subroutine is executed, the number of parameters passed is pushed onto
+@code{BASH_ARGC}.
+The shell sets @code{BASH_ARGC} only when in extended debugging mode
+(see @ref{The Shopt Builtin}
+for a description of the @code{extdebug} option to the @code{shopt}
+builtin).
+Setting @code{extdebug} after the shell has started to execute a script,
+or referencing this variable when @code{extdebug} is not set,
+may result in inconsistent values.
+
+@item BASH_ARGV
+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}.
+The shell sets @code{BASH_ARGV} only when in extended debugging mode
+(see @ref{The Shopt Builtin}
+for a description of the @code{extdebug} option to the @code{shopt}
+builtin).
+Setting @code{extdebug} after the shell has started to execute a script,
+or referencing this variable when @code{extdebug} is not set,
+may result in inconsistent values.
+
+@item BASH_ARGV0
+When referenced, this variable expands to the name of the shell or shell
+script (identical to @code{$0}; @xref{Special Parameters},
+for the description of special parameter 0).
+Assignment to @code{BASH_ARGV0}
+causes the value assigned to also be assigned to @code{$0}.
+If @code{BASH_ARGV0}
+is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@item BASH_CMDS
+An associative array variable whose members correspond to the internal
+hash table of commands as maintained by the @code{hash} builtin
+(@pxref{Bourne Shell Builtins}).
+Elements added to this array appear in the hash table; however,
+unsetting array elements currently does not cause command names to be removed
+from the hash table.
+If @code{BASH_CMDS}
+is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@item BASH_COMMAND
+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.
+
+@item BASH_COMPAT
+The value is used to set the shell's compatibility level.
+@xref{The Shopt Builtin}, for a description of the various compatibility
+levels and their effects.
+The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
+corresponding to the desired compatibility level.
+If @code{BASH_COMPAT} is unset or set to the empty string, the compatibility
+level is set to the default for the current version.
+If @code{BASH_COMPAT} is set to a value that is not one of the valid
+compatibility levels, the shell prints an error message and sets the
+compatibility level to the default for the current version.
+The valid compatibility levels correspond to the compatibility options
+accepted by the @code{shopt} builtin described above (for example,
+@var{compat42} means that 4.2 and 42 are valid values).
+The current version is also a valid value.
+
+@item BASH_ENV
+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. @xref{Bash Startup Files}.
+
+@item BASH_EXECUTION_STRING
+The command argument to the @option{-c} invocation option.
+
+@item BASH_LINENO
+An array variable whose members are the line numbers in source files
+where each corresponding member of @var{FUNCNAME} was invoked.
+@code{$@{BASH_LINENO[$i]@}} is the line number in the source file
+(@code{$@{BASH_SOURCE[$i+1]@}}) where
+@code{$@{FUNCNAME[$i]@}} was called (or @code{$@{BASH_LINENO[$i-1]@}} if
+referenced within another shell function).
+Use @code{LINENO} to obtain the current line number.
+
+@item BASH_LOADABLES_PATH
+A colon-separated list of directories in which the shell looks for
+dynamically loadable builtins specified by the
+@code{enable} command.
+
+@item BASH_REMATCH
+An array variable whose members are assigned by the @samp{=~} binary
+operator to the @code{[[} conditional command
+(@pxref{Conditional Constructs}).
+The element with index 0 is the portion of the string
+matching the entire regular expression.
+The element with index @var{n} is the portion of the
+string matching the @var{n}th parenthesized subexpression.
+This variable is read-only.
+
+@item BASH_SOURCE
+An array variable whose members are the source filenames where the
+corresponding shell function names in the @code{FUNCNAME} array
+variable are defined.
+The shell function @code{$@{FUNCNAME[$i]@}} is defined in the file
+@code{$@{BASH_SOURCE[$i]@}} and called from @code{$@{BASH_SOURCE[$i+1]@}}
+
+@item BASH_SUBSHELL
+Incremented by one within each subshell or subshell environment when
+the shell begins executing in that environment.
+The initial value is 0.
+
+@item BASH_VERSINFO
+A readonly array variable (@pxref{Arrays})
+whose members hold version information for this instance of Bash.
+The values assigned to the array members are as follows:
+
+@table @code
+
+@item BASH_VERSINFO[0]
+The major version number (the @var{release}).
+
+@item BASH_VERSINFO[1]
+The minor version number (the @var{version}).
+
+@item BASH_VERSINFO[2]
+The patch level.
+
+@item BASH_VERSINFO[3]
+The build version.
+
+@item BASH_VERSINFO[4]
+The release status (e.g., @var{beta1}).
+
+@item BASH_VERSINFO[5]
+The value of @env{MACHTYPE}.
+@end table
+
+@item BASH_VERSION
+The version number of the current instance of Bash.
+
+@item BASH_XTRACEFD
+If set to an integer corresponding to a valid file descriptor, Bash
+will write the trace output generated when @samp{set -x}
+is enabled to that file descriptor.
+This allows tracing output to be separated from diagnostic and error
+messages.
+The file descriptor is closed when @code{BASH_XTRACEFD} is unset or assigned
+a new value.
+Unsetting @code{BASH_XTRACEFD} or assigning it the empty string causes the
+trace output to be sent to the standard error.
+Note that setting @code{BASH_XTRACEFD} to 2 (the standard error file
+descriptor) and then unsetting it will result in the standard error
+being closed.
+
+@item CHILD_MAX
+Set the number of exited child status values for the shell to remember.
+Bash will not allow this value to be decreased below a @sc{posix}-mandated
+minimum, and there is a maximum value (currently 8192) that this may
+not exceed.
+The minimum value is system-dependent.
+
+@item COLUMNS
+Used by the @code{select} command to determine the terminal width
+when printing selection lists.
+Automatically set if the @code{checkwinsize} option is enabled
+(@pxref{The Shopt Builtin}), or in an interactive shell upon receipt of a
+@code{SIGWINCH}.
+
+@item COMP_CWORD
+An index into @env{$@{COMP_WORDS@}} of the word containing the current
+cursor position.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMP_LINE
+The current command line.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMP_POINT
+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@}}.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMP_TYPE
+Set to an integer value corresponding to the type of completion attempted
+that caused a completion function to be called:
+@var{TAB}, for normal completion,
+@samp{?}, for listing completions after successive tabs,
+@samp{!}, for listing alternatives on partial word completion,
+@samp{@@}, to list completions if the word is not unmodified,
+or
+@samp{%}, for menu completion.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMP_KEY
+The key (or final key of a key sequence) used to invoke the current
+completion function.
+
+@item COMP_WORDBREAKS
+The set of characters that the Readline library treats as word
+separators when performing word completion.
+If @code{COMP_WORDBREAKS} is unset, it loses its special properties,
+even if it is subsequently reset.
+
+@item COMP_WORDS
+An array variable consisting of the individual
+words in the current command line.
+The line is split into words as Readline would split it, using
+@code{COMP_WORDBREAKS} as described above.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMPREPLY
+An array variable from which Bash reads the possible completions
+generated by a shell function invoked by the programmable completion
+facility (@pxref{Programmable Completion}).
+Each array element contains one possible completion.
+
+@item COPROC
+An array variable created to hold the file descriptors
+for output from and input to an unnamed coprocess (@pxref{Coprocesses}).
+
+@item DIRSTACK
+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} builtin.
+Assigning to members of this array variable may be used to modify
+directories already in the stack, but the @code{pushd} and @code{popd}
+builtins must be used to add and remove directories.
+Assignment to this variable will not change the current directory.
+If @env{DIRSTACK} is unset, it loses its special properties, even if
+it is subsequently reset.
+
+@item EMACS
+If Bash finds this variable in the environment when the shell
+starts with value @samp{t}, it assumes that the shell is running in an
+Emacs shell buffer and disables line editing.
+
+@item ENV
+Similar to @code{BASH_ENV}; used when the shell is invoked in
+@sc{posix} Mode (@pxref{Bash POSIX Mode}).
+
+@item EPOCHREALTIME
+Each time this parameter is referenced, it expands to the number of seconds
+since the Unix Epoch as a floating point value with micro-second granularity
+(see the documentation for the C library function @var{time} for the
+definition of Epoch).
+Assignments to @env{EPOCHREALTIME} are ignored.
+If @env{EPOCHREALTIME} is unset, it loses its special properties, even if
+it is subsequently reset.
+
+@item EPOCHSECONDS
+Each time this parameter is referenced, it expands to the number of seconds
+since the Unix Epoch (see the documentation for the C library function
+@var{time} for the definition of Epoch).
+Assignments to @env{EPOCHSECONDS} are ignored.
+If @env{EPOCHSECONDS} is unset, it loses its special properties, even if
+it is subsequently reset.
+
+@item EUID
+The numeric effective user id of the current user. This variable
+is readonly.
+
+@item EXECIGNORE
+A colon-separated list of shell patterns (@pxref{Pattern Matching})
+defining the list of filenames to be ignored by command search using
+@code{PATH}.
+Files whose full pathnames match one of these patterns are not considered
+executable files for the purposes of completion and command execution
+via @code{PATH} lookup.
+This does not affect the behavior of the @code{[}, @code{test}, and @code{[[}
+commands.
+Full pathnames in the command hash table are not subject to @code{EXECIGNORE}.
+Use this variable to ignore shared library files that have the executable
+bit set, but are not executable files.
+The pattern matching honors the setting of the @code{extglob} shell
+option.
+
+@item FCEDIT
+The editor used as a default by the @option{-e} option to the @code{fc}
+builtin command.
+
+@item FIGNORE
+A colon-separated list of suffixes to ignore when performing
+filename completion.
+A filename whose suffix matches one of the entries in
+@env{FIGNORE}
+is excluded from the list of matched filenames. A sample
+value is @samp{.o:~}
+
+@item FUNCNAME
+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 (the one with the highest index)
+is @code{"main"}.
+This variable exists only when a shell function is executing.
+Assignments to @env{FUNCNAME} have no effect.
+If @env{FUNCNAME} is unset, it loses its special properties, even if
+it is subsequently reset.
+
+This variable can be used with @code{BASH_LINENO} and @code{BASH_SOURCE}.
+Each element of @code{FUNCNAME} has corresponding elements in
+@code{BASH_LINENO} and @code{BASH_SOURCE} to describe the call stack.
+For instance, @code{$@{FUNCNAME[$i]@}} was called from the file
+@code{$@{BASH_SOURCE[$i+1]@}} at line number @code{$@{BASH_LINENO[$i]@}}.
+The @code{caller} builtin displays the current call stack using this
+information.
+
+@item FUNCNEST
+If set to a numeric value greater than 0, defines a maximum function
+nesting level. Function invocations that exceed this nesting level
+will cause the current command to abort.
+
+@item GLOBIGNORE
+A colon-separated list of patterns defining the set of file names to
+be ignored by filename expansion.
+If a file name matched by a filename expansion pattern also matches one
+of the patterns in @env{GLOBIGNORE}, it is removed from the list
+of matches.
+The pattern matching honors the setting of the @code{extglob} shell
+option.
+
+@item GROUPS
+An array variable containing the list of groups of which the current
+user is a member.
+Assignments to @env{GROUPS} have no effect.
+If @env{GROUPS} is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@item histchars
+Up to three characters which control history expansion, quick
+substitution, and tokenization (@pxref{History Interaction}).
+The first character is the
+@var{history expansion} character, that is, the character which signifies the
+start of a history expansion, normally @samp{!}. The second character is the
+character which signifies `quick substitution' when seen as the first
+character on a line, normally @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{#}. 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.
+
+@item HISTCMD
+The history number, or index in the history list, of the current
+command. If @env{HISTCMD} is unset, it loses its special properties,
+even if it is subsequently reset.
+
+@item HISTCONTROL
+A colon-separated list of values controlling how commands are saved on
+the history list.
+If the list of values includes @samp{ignorespace}, lines which begin
+with a space character are not saved in the history list.
+A value of @samp{ignoredups} causes lines which match the previous
+history entry to not be saved.
+A value of @samp{ignoreboth} is shorthand for
+@samp{ignorespace} and @samp{ignoredups}.
+A value of @samp{erasedups} 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 @env{HISTCONTROL} is unset, or does not include a valid value,
+all lines read by the shell parser are saved on the history list,
+subject to the value of @env{HISTIGNORE}.
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+@env{HISTCONTROL}.
+
+@item HISTFILE
+The name of the file to which the command history is saved. The
+default value is @file{~/.bash_history}.
+
+@item HISTFILESIZE
+The maximum number of lines contained in the history file.
+When this variable is assigned a value, the history file is truncated,
+if necessary, to contain no more than that number of lines
+by removing the oldest entries.
+The history file is also truncated to this size after
+writing it when a shell exits.
+If the value is 0, the history file is truncated to zero size.
+Non-numeric values and numeric values less than zero inhibit truncation.
+The shell sets the default value to the value of @env{HISTSIZE}
+after reading any startup files.
+
+@item HISTIGNORE
+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{*} is appended). Each pattern is tested
+against the line after the checks specified by @env{HISTCONTROL}
+are applied. In addition to the normal shell pattern matching
+characters, @samp{&} matches the previous history line. @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
+@env{HISTIGNORE}.
+The pattern matching honors the setting of the @code{extglob} shell
+option.
+
+@env{HISTIGNORE} subsumes the function of @env{HISTCONTROL}. A
+pattern of @samp{&} is identical to @code{ignoredups}, and a
+pattern of @samp{[ ]*} is identical to @code{ignorespace}.
+Combining these two patterns, separating them with a colon,
+provides the functionality of @code{ignoreboth}.
+
+@item HISTSIZE
+The maximum number of commands to remember on the history list.
+If the value is 0, commands are not saved in the history list.
+Numeric values less than zero result in every command being saved
+on the history list (there is no limit).
+The shell sets the default value to 500 after reading any startup files.
+
+@item HISTTIMEFORMAT
+If this variable is set and not null, its value is used as a format string
+for @var{strftime} to print the time stamp associated with each history
+entry displayed by the @code{history} builtin.
+If this variable is set, time stamps are written to the history file so
+they may be preserved across shell sessions.
+This uses the history comment character to distinguish timestamps from
+other history lines.
+
+@item HOSTFILE
+Contains the name of a file in the same format as @file{/etc/hosts} 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 @env{HOSTFILE} is set, but has no value, or does not name a readable file,
+Bash attempts to read
+@file{/etc/hosts} to obtain the list of possible hostname completions.
+When @env{HOSTFILE} is unset, the hostname list is cleared.
+
+@item HOSTNAME
+The name of the current host.
+
+@item HOSTTYPE
+A string describing the machine Bash is running on.
+
+@item IGNOREEOF
+Controls the action of the shell on receipt of an @code{EOF} character
+as the sole input. If set, the value denotes the number
+of consecutive @code{EOF} characters that can be read as the
+first character on an input line
+before the shell will exit. If the variable exists but does not
+have a numeric value, or has no value, then the default is 10.
+If the variable does not exist, then @code{EOF} signifies the end of
+input to the shell. This is only in effect for interactive shells.
+
+@item INPUTRC
+The name of the Readline initialization file, overriding the default
+of @file{~/.inputrc}.
+
+@item INSIDE_EMACS
+If Bash finds this variable in the environment when the shell
+starts, it assumes that the shell is running in an Emacs shell buffer
+and may disable line editing depending on the value of @env{TERM}.
+
+@item LANG
+Used to determine the locale category for any category not specifically
+selected with a variable starting with @code{LC_}.
+
+@item LC_ALL
+This variable overrides the value of @env{LANG} and any other
+@code{LC_} variable specifying a locale category.
+
+@item LC_COLLATE
+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
+(@pxref{Filename Expansion}).
+
+@item LC_CTYPE
+This variable determines the interpretation of characters and the
+behavior of character classes within filename expansion and pattern
+matching (@pxref{Filename Expansion}).
+
+@item LC_MESSAGES
+This variable determines the locale used to translate double-quoted
+strings preceded by a @samp{$} (@pxref{Locale Translation}).
+
+@item LC_NUMERIC
+This variable determines the locale category used for number formatting.
+
+@item LC_TIME
+This variable determines the locale category used for data and time
+formatting.
+
+@item LINENO
+The line number in the script or shell function currently executing.
+
+@item LINES
+Used by the @code{select} command to determine the column length
+for printing selection lists.
+Automatically set if the @code{checkwinsize} option is enabled
+(@pxref{The Shopt Builtin}), or in an interactive shell upon receipt of a
+@code{SIGWINCH}.
+
+@item MACHTYPE
+A string that fully describes the system type on which Bash
+is executing, in the standard @sc{gnu} @var{cpu-company-system} format.
+
+@item MAILCHECK
+How often (in seconds) that the shell should check for mail in the
+files specified in the @env{MAILPATH} or @env{MAIL} variables.
+The default is 60 seconds. When it is time to check
+for mail, the shell does so before displaying the primary prompt.
+If this variable is unset, or set to a value that is not a number
+greater than or equal to zero, the shell disables mail checking.
+
+@item MAPFILE
+An array variable created to hold the text read by the
+@code{mapfile} builtin when no variable name is supplied.
+
+@item OLDPWD
+The previous working directory as set by the @code{cd} builtin.
+
+@item OPTERR
+If set to the value 1, Bash displays error messages
+generated by the @code{getopts} builtin command.
+
+@item OSTYPE
+A string describing the operating system Bash is running on.
+
+@item PIPESTATUS
+An array variable (@pxref{Arrays})
+containing a list of exit status values from the processes
+in the most-recently-executed foreground pipeline (which may
+contain only a single command).
+
+@item POSIXLY_CORRECT
+If this variable is in the environment when Bash starts, the shell
+enters @sc{posix} mode (@pxref{Bash POSIX Mode}) before reading the
+startup files, as if the @option{--posix} invocation option had been supplied.
+If it is set while the shell is running, Bash enables @sc{posix} mode,
+as if the command
+@example
+@code{set -o posix}
+@end example
+@noindent
+had been executed.
+When the shell enters @sc{posix} mode, it sets this variable if it was
+not already set.
+
+@item PPID
+The process @sc{id} of the shell's parent process. This variable
+is readonly.
+
+@item PROMPT_COMMAND
+If set, the value is interpreted as a command to execute
+before the printing of each primary prompt (@env{$PS1}).
+
+@item PROMPT_DIRTRIM
+If set to a number greater than zero, the value is used as the number of
+trailing directory components to retain when expanding the @code{\w} and
+@code{\W} prompt string escapes (@pxref{Controlling the Prompt}).
+Characters removed are replaced with an ellipsis.
+
+@item PS0
+The value of this parameter is expanded like @var{PS1}
+and displayed by interactive shells after reading a command
+and before the command is executed.
+
+@item PS3
+The value of this variable is used as the prompt for the
+@code{select} command. If this variable is not set, the
+@code{select} command prompts with @samp{#? }
+
+@item PS4
+The value of this parameter is expanded like @var{PS1}
+and the expanded value is the prompt printed before the command line
+is echoed when the @option{-x} option is set (@pxref{The Set Builtin}).
+The first character of the expanded value is replicated multiple times,
+as necessary, to indicate multiple levels of indirection.
+The default is @samp{+ }.
+
+@item PWD
+The current working directory as set by the @code{cd} builtin.
+
+@item RANDOM
+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.
+
+@item READLINE_LINE
+The contents of the Readline line buffer, for use
+with @samp{bind -x} (@pxref{Bash Builtins}).
+
+@item READLINE_POINT
+The position of the insertion point in the Readline line buffer, for use
+with @samp{bind -x} (@pxref{Bash Builtins}).
+
+@item REPLY
+The default variable for the @code{read} builtin.
+
+@item SECONDS
+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.
+
+@item SHELL
+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.
+
+@item SHELLOPTS
+A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the @option{-o} option to the
+@code{set} builtin command (@pxref{The Set Builtin}).
+The options appearing in @env{SHELLOPTS} are those reported
+as @samp{on} by @samp{set -o}.
+If this variable is in the environment when Bash
+starts up, each shell option in the list will be enabled before
+reading any startup files. This variable is readonly.
+
+@item SHLVL
+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.
+
+@item TIMEFORMAT
+The value of this parameter is used as a format string specifying
+how the timing information for pipelines prefixed with the @code{time}
+reserved word should be displayed.
+The @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.
+
+@table @code
+
+@item %%
+A literal @samp{%}.
+
+@item %[@var{p}][l]R
+The elapsed time in seconds.
+
+@item %[@var{p}][l]U
+The number of CPU seconds spent in user mode.
+
+@item %[@var{p}][l]S
+The number of CPU seconds spent in system mode.
+
+@item %P
+The CPU percentage, computed as (%U + %S) / %R.
+@end table
+
+The optional @var{p} is a digit specifying the precision, the number of
+fractional digits after a decimal point.
+A value of 0 causes no decimal point or fraction to be output.
+At most three places after the decimal point may be specified; values
+of @var{p} greater than 3 are changed to 3.
+If @var{p} is not specified, the value 3 is used.
+
+The optional @code{l} specifies a longer format, including minutes, of
+the form @var{MM}m@var{SS}.@var{FF}s.
+The value of @var{p} determines whether or not the fraction is included.
+
+If this variable is not set, Bash acts as if it had the value
+@example
+@code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'}
+@end example
+If the value is null, no timing information is displayed.
+A trailing newline is added when the format string is displayed.
+
+@item TMOUT
+If set to a value greater than zero, @code{TMOUT} is treated as the
+default timeout for the @code{read} builtin (@pxref{Bash Builtins}).
+The @code{select} command (@pxref{Conditional Constructs}) terminates
+if input does not arrive after @code{TMOUT} seconds when input is coming
+from a terminal.
+
+In an interactive shell, the value is interpreted as
+the number of seconds to wait for a line of input after issuing
+the primary prompt.
+Bash
+terminates after waiting for that number of seconds if a complete
+line of input does not arrive.
+
+@item TMPDIR
+If set, Bash uses its value as the name of a directory in which
+Bash creates temporary files for the shell's use.
+
+@item UID
+The numeric real user id of the current user. This variable is readonly.
+
+@end vtable
+
+@node Bash Features
+@chapter Bash Features
+
+This chapter describes features unique to Bash.
+
+@menu
+* Invoking Bash:: Command line options that you can give
+ to Bash.
+* Bash Startup Files:: When and how Bash executes scripts.
+* Interactive Shells:: What an interactive shell is.
+* Bash Conditional Expressions:: Primitives used in composing expressions for
+ the @code{test} builtin.
+* Shell Arithmetic:: Arithmetic on shell variables.
+* Aliases:: Substituting one command for another.
+* Arrays:: Array Variables.
+* The Directory Stack:: History of visited directories.
+* Controlling the Prompt:: Customizing the various prompt strings.
+* The Restricted Shell:: A more controlled mode of shell execution.
+* Bash POSIX Mode:: Making Bash behave more closely to what
+ the POSIX standard specifies.
+@end menu
+
+@node Invoking Bash
+@section Invoking Bash
+
+@example
+bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}]
+ [-O @var{shopt_option}] [@var{argument} @dots{}]
+bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}]
+ [-O @var{shopt_option}] -c @var{string} [@var{argument} @dots{}]
+bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}]
+ [-O @var{shopt_option}] [@var{argument} @dots{}]
+@end example
+
+All of the single-character options used with the @code{set} builtin
+(@pxref{The Set Builtin}) can be used as options when the shell is invoked.
+In addition, 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.
+
+@table @code
+@item --debugger
+Arrange for the debugger profile to be executed before the shell
+starts. Turns on extended debugging mode (see @ref{The Shopt Builtin}
+for a description of the @code{extdebug} option to the @code{shopt}
+builtin).
+
+@item --dump-po-strings
+A list of all double-quoted strings preceded by @samp{$}
+is printed on the standard output
+in the @sc{gnu} @code{gettext} PO (portable object) file format.
+Equivalent to @option{-D} except for the output format.
+
+@item --dump-strings
+Equivalent to @option{-D}.
+
+@item --help
+Display a usage message on standard output and exit successfully.
+
+@item --init-file @var{filename}
+@itemx --rcfile @var{filename}
+Execute commands from @var{filename} (instead of @file{~/.bashrc})
+in an interactive shell.
+
+@item --login
+Equivalent to @option{-l}.
+
+@item --noediting
+Do not use the @sc{gnu} Readline library (@pxref{Command Line Editing})
+to read command lines when the shell is interactive.
+
+@item --noprofile
+Don't load the system-wide startup file @file{/etc/profile}
+or any of the personal initialization files
+@file{~/.bash_profile}, @file{~/.bash_login}, or @file{~/.profile}
+when Bash is invoked as a login shell.
+
+@item --norc
+Don't read the @file{~/.bashrc} initialization file in an
+interactive shell. This is on by default if the shell is
+invoked as @code{sh}.
+
+@item --posix
+Change the behavior of Bash where the default operation differs
+from the @sc{posix} standard to match the standard. This
+is intended to make Bash behave as a strict superset of that
+standard. @xref{Bash POSIX Mode}, for a description of the Bash
+@sc{posix} mode.
+
+@item --restricted
+Make the shell a restricted shell (@pxref{The Restricted Shell}).
+
+@item --verbose
+Equivalent to @option{-v}. Print shell input lines as they're read.
+
+@item --version
+Show version information for this instance of
+Bash on the standard output and exit successfully.
+@end table
+
+There are several single-character options that may be supplied at
+invocation which are not available with the @code{set} builtin.
+
+@table @code
+@item -c
+Read and execute commands from the first non-option argument
+@var{command_string}, then exit.
+If there are arguments after the @var{command_string},
+the first argument is assigned to @code{$0}
+and any remaining arguments are assigned to the positional parameters.
+The assignment to @code{$0} sets the name of the shell, which is used
+in warning and error messages.
+
+@item -i
+Force the shell to run interactively. Interactive shells are
+described in @ref{Interactive Shells}.
+
+@item -l
+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}.
+When the shell is not interactive, the login shell startup files will
+be executed.
+@samp{exec bash -l} or @samp{exec bash --login}
+will replace the current shell with a Bash login shell.
+@xref{Bash Startup Files}, for a description of the special behavior
+of a login shell.
+
+@item -r
+Make the shell a restricted shell (@pxref{The Restricted Shell}).
+
+@item -s
+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 or when reading input
+through a pipe.
+
+@item -D
+A list of all double-quoted strings preceded by @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} or @code{POSIX} (@pxref{Locale Translation}).
+This implies the @option{-n} option; no commands will be executed.
+
+@item [-+]O [@var{shopt_option}]
+@var{shopt_option} is one of the shell options accepted by the
+@code{shopt} builtin (@pxref{The Shopt Builtin}).
+If @var{shopt_option} is present, @option{-O} sets the value of that option;
+@option{+O} unsets it.
+If @var{shopt_option} is not supplied, the names and values of the shell
+options accepted by @code{shopt} are printed on the standard output.
+If the invocation option is @option{+O}, the output is displayed in a format
+that may be reused as input.
+
+@item --
+A @code{--} signals the end of options and disables further option
+processing.
+Any arguments after the @code{--} are treated as filenames and arguments.
+@end table
+
+@cindex login shell
+A @emph{login} shell is one whose first character of argument zero is
+@samp{-}, or one invoked with the @option{--login} option.
+
+@cindex interactive shell
+An @emph{interactive} shell is one started without non-option arguments,
+unless @option{-s} is specified,
+without specifying the @option{-c} option, and whose input and output are both
+connected to terminals (as determined by @code{isatty(3)}), or one
+started with the @option{-i} option. @xref{Interactive Shells}, for more
+information.
+
+If arguments remain after option processing, and neither the
+@option{-c} nor the @option{-s}
+option has been supplied, the first argument is assumed to
+be the name of a file containing shell commands (@pxref{Shell Scripts}).
+When Bash is invoked in this fashion, @code{$0}
+is set to the name of the file, and the positional parameters
+are set to the remaining arguments.
+Bash reads and executes commands from this file, then exits.
+Bash's exit status is the exit status of the last command executed
+in the script. If no commands are executed, the exit status is 0.
+
+@node Bash Startup Files
+@section Bash Startup Files
+@cindex startup files
+
+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 filenames as described above under
+Tilde Expansion (@pxref{Tilde Expansion}).
+
+Interactive shells are described in @ref{Interactive Shells}.
+
+@subsubheading Invoked as an interactive login shell, or with @option{--login}
+
+When Bash is invoked as an interactive login shell, or as a
+non-interactive shell with the @option{--login} option, it first reads and
+executes commands from the file @file{/etc/profile}, if that file exists.
+After reading that file, it looks for @file{~/.bash_profile},
+@file{~/.bash_login}, and @file{~/.profile}, in that order, and reads
+and executes commands from the first one that exists and is readable.
+The @option{--noprofile} option may be used when the shell is started to
+inhibit this behavior.
+
+When an interactive login shell exits,
+or a non-interactive login shell executes the @code{exit} builtin command,
+Bash reads and executes commands from
+the file @file{~/.bash_logout}, if it exists.
+
+@subsubheading Invoked as an interactive non-login shell
+
+When an interactive shell that is not a login shell is started, Bash
+reads and executes commands from @file{~/.bashrc}, if that file exists.
+This may be inhibited by using the @option{--norc} option.
+The @option{--rcfile @var{file}} option will force Bash to read and
+execute commands from @var{file} instead of @file{~/.bashrc}.
+
+So, typically, your @file{~/.bash_profile} contains the line
+@example
+@code{if [ -f ~/.bashrc ]; then . ~/.bashrc; fi}
+@end example
+@noindent
+after (or before) any login-specific initializations.
+
+@subsubheading Invoked non-interactively
+
+When Bash is started non-interactively, to run a shell script,
+for example, it looks for the variable @env{BASH_ENV} in the environment,
+expands its value if it appears there, and uses the expanded value as
+the name of a file to read and execute. Bash behaves as if the
+following command were executed:
+@example
+@code{if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi}
+@end example
+@noindent
+but the value of the @env{PATH} variable is not used to search for the
+filename.
+
+As noted above, if a non-interactive shell is invoked with the
+@option{--login} option, Bash attempts to read and execute commands from the
+login shell startup files.
+
+@subsubheading Invoked with name @code{sh}
+
+If Bash is invoked with the name @code{sh}, it tries to mimic the
+startup behavior of historical versions of @code{sh} as closely as
+possible, while conforming to the @sc{posix} standard as well.
+
+When invoked as an interactive login shell, or as a non-interactive
+shell with the @option{--login} option, it first attempts to read
+and execute commands from @file{/etc/profile} and @file{~/.profile}, in
+that order.
+The @option{--noprofile} option may be used to inhibit this behavior.
+When invoked as an interactive shell with the name @code{sh}, Bash
+looks for the variable @env{ENV}, expands its value if it is defined,
+and uses the expanded value as the name of a file to read and execute.
+Since a shell invoked as @code{sh} does not attempt to read and execute
+commands from any other startup files, the @option{--rcfile} option has
+no effect.
+A non-interactive shell invoked with the name @code{sh} does not attempt
+to read any other startup files.
+
+When invoked as @code{sh}, Bash enters @sc{posix} mode after
+the startup files are read.
+
+@subsubheading Invoked in @sc{posix} mode
+
+When Bash is started in @sc{posix} mode, as with the
+@option{--posix} command line option, it follows the @sc{posix} standard
+for startup files.
+In this mode, interactive shells expand the @env{ENV} variable
+and commands are read and executed from the file whose name is the
+expanded value.
+No other startup files are read.
+
+@subsubheading Invoked by remote shell daemon
+
+Bash attempts to determine when it is being run with its standard input
+connected to a network connection, as when executed by the remote shell
+daemon, usually @code{rshd}, or the secure shell daemon @code{sshd}.
+If Bash determines it is being run in
+this fashion, it reads and executes commands from @file{~/.bashrc}, if that
+file exists and is readable.
+It will not do this if invoked as @code{sh}.
+The @option{--norc} option may be used to inhibit this behavior, and the
+@option{--rcfile} option may be used to force another file to be read, but
+neither @code{rshd} nor @code{sshd} generally invoke the shell with those
+options or allow them to be specified.
+
+@subsubheading Invoked with unequal effective and real @sc{uid/gid}s
+
+If Bash is started with the effective user (group) id not equal to the
+real user (group) id, and the @option{-p} option is not supplied, no startup
+files are read, shell functions are not inherited from the environment,
+the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH}, and @env{GLOBIGNORE}
+variables, if they appear in the environment, are ignored, and the effective
+user id is set to the real user id.
+If the @option{-p} option is supplied at invocation, the startup behavior is
+the same, but the effective user id is not reset.
+
+@node Interactive Shells
+@section Interactive Shells
+@cindex interactive shell
+@cindex shell, interactive
+
+@menu
+* What is an Interactive Shell?:: What determines whether a shell is Interactive.
+* Is this Shell Interactive?:: How to tell if a shell is interactive.
+* Interactive Shell Behavior:: What changes in a interactive shell?
+@end menu
+
+@node What is an Interactive Shell?
+@subsection What is an Interactive Shell?
+
+An interactive shell
+is one started without non-option arguments, unless @option{-s} is
+specified, without specifying the @option{-c} option, and
+whose input and error output are both
+connected to terminals (as determined by @code{isatty(3)}),
+or one started with the @option{-i} option.
+
+An interactive shell generally reads from and writes to a user's
+terminal.
+
+The @option{-s} invocation option may be used to set the positional parameters
+when an interactive shell is started.
+
+@node Is this Shell Interactive?
+@subsection Is this Shell Interactive?
+
+To determine within a startup script whether or not Bash is
+running interactively,
+test the value of the @samp{-} special parameter.
+It contains @code{i} when the shell is interactive. For example:
+
+@example
+case "$-" in
+*i*) echo This shell is interactive ;;
+*) echo This shell is not interactive ;;
+esac
+@end example
+
+Alternatively, startup scripts may examine the variable
+@env{PS1}; it is unset in non-interactive shells, and set in
+interactive shells. Thus:
+
+@example
+if [ -z "$PS1" ]; then
+ echo This shell is not interactive
+else
+ echo This shell is interactive
+fi
+@end example
+
+@node Interactive Shell Behavior
+@subsection Interactive Shell Behavior
+
+When the shell is running interactively, it changes its behavior in
+several ways.
+
+@enumerate
+@item
+Startup files are read and executed as described in @ref{Bash Startup Files}.
+
+@item
+Job Control (@pxref{Job Control}) is enabled by default. When job
+control is in effect, Bash ignores the keyboard-generated job control
+signals @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
+
+@item
+Bash expands and displays @env{PS1} before reading the first line
+of a command, and expands and displays @env{PS2} before reading the
+second and subsequent lines of a multi-line command.
+Bash expands and displays @env{PS0} after it reads a command but before
+executing it.
+See @ref{Controlling the Prompt}, for a complete list of prompt
+string escape sequences.
+
+@item
+Bash executes the value of the @env{PROMPT_COMMAND} variable as a command
+before printing the primary prompt, @env{$PS1}
+(@pxref{Bash Variables}).
+
+@item
+Readline (@pxref{Command Line Editing}) is used to read commands from
+the user's terminal.
+
+@item
+Bash inspects the value of the @code{ignoreeof} option to @code{set -o}
+instead of exiting immediately when it receives an @code{EOF} on its
+standard input when reading a command (@pxref{The Set Builtin}).
+
+@item
+Command history (@pxref{Bash History Facilities})
+and history expansion (@pxref{History Interaction})
+are enabled by default.
+Bash will save the command history to the file named by @env{$HISTFILE}
+when a shell with history enabled exits.
+
+@item
+Alias expansion (@pxref{Aliases}) is performed by default.
+
+@item
+In the absence of any traps, Bash ignores @code{SIGTERM}
+(@pxref{Signals}).
+
+@item
+In the absence of any traps, @code{SIGINT} is caught and handled
+(@pxref{Signals}).
+@code{SIGINT} will interrupt some shell builtins.
+
+@item
+An interactive login shell sends a @code{SIGHUP} to all jobs on exit
+if the @code{huponexit} shell option has been enabled (@pxref{Signals}).
+
+@item
+The @option{-n} invocation option is ignored, and @samp{set -n} has
+no effect (@pxref{The Set Builtin}).
+
+@item
+Bash will check for mail periodically, depending on the values of the
+@env{MAIL}, @env{MAILPATH}, and @env{MAILCHECK} shell variables
+(@pxref{Bash Variables}).
+
+@item
+Expansion errors due to references to unbound shell variables after
+@samp{set -u} has been enabled will not cause the shell to exit
+(@pxref{The Set Builtin}).
+
+@item
+The shell will not exit on expansion errors caused by @var{var} being unset
+or null in @code{$@{@var{var}:?@var{word}@}} expansions
+(@pxref{Shell Parameter Expansion}).
+
+@item
+Redirection errors encountered by shell builtins will not cause the
+shell to exit.
+
+@item
+When running in @sc{posix} mode, a special builtin returning an error
+status will not cause the shell to exit (@pxref{Bash POSIX Mode}).
+
+@item
+A failed @code{exec} will not cause the shell to exit
+(@pxref{Bourne Shell Builtins}).
+
+@item
+Parser syntax errors will not cause the shell to exit.
+
+@item
+Simple spelling correction for directory arguments to the @code{cd}
+builtin is enabled by default (see the description of the @code{cdspell}
+option to the @code{shopt} builtin in @ref{The Shopt Builtin}).
+
+@item
+The shell will check the value of the @env{TMOUT} variable and exit
+if a command is not read within the specified number of seconds after
+printing @env{$PS1} (@pxref{Bash Variables}).
+
+@end enumerate
+
+@node Bash Conditional Expressions
+@section Bash Conditional Expressions
+@cindex expressions, conditional
+
+Conditional expressions are used by the @code{[[} compound command
+and the @code{test} and @code{[} builtin commands. The @code{test}
+and @code{[} commands determine their behavior based on the number
+of arguments; see the descriptions of those commands for any other
+command-specific actions.
+
+Expressions may be unary or binary,
+and are formed from the following primaries.
+Unary expressions are often used to examine the status of a file.
+There are string operators and numeric comparison operators as well.
+Bash handles several filenames specially when they are used in
+expressions.
+If the operating system on which Bash is running provides these
+special files, Bash will use them; otherwise it will emulate them
+internally with this behavior:
+If the @var{file} argument to one of the primaries is of the form
+@file{/dev/fd/@var{N}}, then file descriptor @var{N} is checked.
+If the @var{file} argument to one of the primaries is one of
+@file{/dev/stdin}, @file{/dev/stdout}, or @file{/dev/stderr}, file
+descriptor 0, 1, or 2, respectively, is checked.
+
+When used with @code{[[}, the @samp{<} and @samp{>} operators sort
+lexicographically using the current locale.
+The @code{test} command uses ASCII ordering.
+
+Unless otherwise specified, primaries that operate on files follow symbolic
+links and operate on the target of the link, rather than the link itself.
+
+@table @code
+@item -a @var{file}
+True if @var{file} exists.
+
+@item -b @var{file}
+True if @var{file} exists and is a block special file.
+
+@item -c @var{file}
+True if @var{file} exists and is a character special file.
+
+@item -d @var{file}
+True if @var{file} exists and is a directory.
+
+@item -e @var{file}
+True if @var{file} exists.
+
+@item -f @var{file}
+True if @var{file} exists and is a regular file.
+
+@item -g @var{file}
+True if @var{file} exists and its set-group-id bit is set.
+
+@item -h @var{file}
+True if @var{file} exists and is a symbolic link.
+
+@item -k @var{file}
+True if @var{file} exists and its "sticky" bit is set.
+
+@item -p @var{file}
+True if @var{file} exists and is a named pipe (FIFO).
+
+@item -r @var{file}
+True if @var{file} exists and is readable.
+
+@item -s @var{file}
+True if @var{file} exists and has a size greater than zero.
+
+@item -t @var{fd}
+True if file descriptor @var{fd} is open and refers to a terminal.
+
+@item -u @var{file}
+True if @var{file} exists and its set-user-id bit is set.
+
+@item -w @var{file}
+True if @var{file} exists and is writable.
+
+@item -x @var{file}
+True if @var{file} exists and is executable.
+
+@item -G @var{file}
+True if @var{file} exists and is owned by the effective group id.
+
+@item -L @var{file}
+True if @var{file} exists and is a symbolic link.
+
+@item -N @var{file}
+True if @var{file} exists and has been modified since it was last read.
+
+@item -O @var{file}
+True if @var{file} exists and is owned by the effective user id.
+
+@item -S @var{file}
+True if @var{file} exists and is a socket.
+
+@item @var{file1} -ef @var{file2}
+True if @var{file1} and @var{file2} refer to the same device and
+inode numbers.
+
+@item @var{file1} -nt @var{file2}
+True if @var{file1} is newer (according to modification date)
+than @var{file2}, or if @var{file1} exists and @var{file2} does not.
+
+@item @var{file1} -ot @var{file2}
+True if @var{file1} is older than @var{file2},
+or if @var{file2} exists and @var{file1} does not.
+
+@item -o @var{optname}
+True if the shell option @var{optname} is enabled.
+The list of options appears in the description of the @option{-o}
+option to the @code{set} builtin (@pxref{The Set Builtin}).
+
+@item -v @var{varname}
+True if the shell variable @var{varname} is set (has been assigned a value).
+
+@item -R @var{varname}
+True if the shell variable @var{varname} is set and is a name reference.
+
+@item -z @var{string}
+True if the length of @var{string} is zero.
+
+@item -n @var{string}
+@itemx @var{string}
+True if the length of @var{string} is non-zero.
+
+@item @var{string1} == @var{string2}
+@itemx @var{string1} = @var{string2}
+True if the strings are equal.
+When used with the @code{[[} command, this performs pattern matching as
+described above (@pxref{Conditional Constructs}).
+
+@samp{=} should be used with the @code{test} command for @sc{posix} conformance.
+
+@item @var{string1} != @var{string2}
+True if the strings are not equal.
+
+@item @var{string1} < @var{string2}
+True if @var{string1} sorts before @var{string2} lexicographically.
+
+@item @var{string1} > @var{string2}
+True if @var{string1} sorts after @var{string2} lexicographically.
+
+@item @var{arg1} OP @var{arg2}
+@code{OP} is one of
+@samp{-eq}, @samp{-ne}, @samp{-lt}, @samp{-le}, @samp{-gt}, or @samp{-ge}.
+These arithmetic binary operators return true if @var{arg1}
+is equal to, not equal to, less than, less than or equal to,
+greater than, or greater than or equal to @var{arg2},
+respectively. @var{Arg1} and @var{arg2}
+may be positive or negative integers.
+When used with the @code{[[} command, @var{Arg1} and @var{Arg2}
+are evaluated as arithmetic expressions (@pxref{Shell Arithmetic}).
+@end table
+
+@node Shell Arithmetic
+@section Shell Arithmetic
+@cindex arithmetic, shell
+@cindex shell arithmetic
+@cindex expressions, arithmetic
+@cindex evaluation, arithmetic
+@cindex arithmetic evaluation
+
+The shell allows arithmetic expressions to be evaluated, as one of
+the shell expansions or by using the @code{((} compound command, the
+@code{let} builtin, or the @option{-i} option to the @code{declare} builtin.
+
+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.
+
+@table @code
+
+@item @var{id}++ @var{id}--
+variable post-increment and post-decrement
+
+@item ++@var{id} --@var{id}
+variable pre-increment and pre-decrement
+
+@item - +
+unary minus and plus
+
+@item ! ~
+logical and bitwise negation
+
+@item **
+exponentiation
+
+@item * / %
+multiplication, division, remainder
+
+@item + -
+addition, subtraction
+
+@item << >>
+left and right bitwise shifts
+
+@item <= >= < >
+comparison
+
+@item == !=
+equality and inequality
+
+@item &
+bitwise AND
+
+@item ^
+bitwise exclusive OR
+
+@item |
+bitwise OR
+
+@item &&
+logical AND
+
+@item ||
+logical OR
+
+@item expr ? expr : expr
+conditional operator
+
+@item = *= /= %= += -= <<= >>= &= ^= |=
+assignment
+
+@item expr1 , expr2
+comma
+@end table
+
+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} attribute using @samp{declare -i} is assigned a value.
+A null value evaluates to 0.
+A shell variable need not have its @var{integer} attribute turned on
+to be used in an expression.
+
+Constants with a leading 0 are interpreted as octal numbers.
+A leading @samp{0x} or @samp{0X} denotes hexadecimal. Otherwise,
+numbers take the form [@var{base}@code{#}]@var{n}, where the optional @var{base}
+is a decimal number between 2 and 64 representing the arithmetic
+base, and @var{n} is a number in that base.
+If @var{base}@code{#} is omitted, then base 10 is used.
+When specifying @var{n},
+the digits greater than 9 are represented by the lowercase letters,
+the uppercase letters, @samp{@@}, and @samp{_}, in that order.
+If @var{base} is less than or equal to 36, lowercase and uppercase
+letters may be used interchangeably to represent numbers between 10
+and 35.
+
+Operators are evaluated in order of precedence. Sub-expressions in
+parentheses are evaluated first and may override the precedence
+rules above.
+
+@node Aliases
+@section Aliases
+@cindex alias expansion
+
+@var{Aliases} allow a string to be substituted for a word when it is used
+as the first word of a simple command.
+The shell maintains a list of aliases that may be set and unset with
+the @code{alias} and @code{unalias} builtin commands.
+
+The first word of each simple command, if unquoted, is checked to see
+if it has an alias.
+If so, that word is replaced by the text of the alias.
+The characters @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} to @code{"ls -F"},
+for instance, and Bash does not try to recursively expand the
+replacement text.
+If the last character of the alias value is a
+@var{blank}, then the next command word following the
+alias is also checked for alias expansion.
+
+Aliases are created and listed with the @code{alias}
+command, and removed with the @code{unalias} command.
+
+There is no mechanism for using arguments in the replacement text,
+as in @code{csh}.
+If arguments are needed, a shell function should be used
+(@pxref{Shell Functions}).
+
+Aliases are not expanded when the shell is not interactive,
+unless the @code{expand_aliases} shell option is set using
+@code{shopt} (@pxref{The Shopt Builtin}).
+
+The rules concerning the definition and use of aliases are
+somewhat confusing. Bash
+always reads at least one complete line of input,
+and all lines that make up a compound command,
+before executing any of the commands on that line or the compound command.
+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 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}
+in compound commands.
+
+For almost every purpose, shell functions are preferred over aliases.
+
+@node Arrays
+@section Arrays
+@cindex arrays
+
+Bash provides one-dimensional indexed and associative array variables.
+Any variable may be used as an indexed array;
+the @code{declare} builtin will explicitly declare an array.
+There is no maximum
+limit on the size of an array, nor any requirement that members
+be indexed or assigned contiguously.
+Indexed arrays are referenced using integers (including arithmetic
+expressions (@pxref{Shell Arithmetic})) and are zero-based;
+associative arrays use arbitrary strings.
+Unless otherwise noted, indexed array indices must be non-negative integers.
+
+An indexed array is created automatically if any variable is assigned to
+using the syntax
+@example
+@var{name}[@var{subscript}]=@var{value}
+@end example
+
+@noindent
+The @var{subscript}
+is treated as an arithmetic expression that must evaluate to a number.
+To explicitly declare an array, use
+@example
+declare -a @var{name}
+@end example
+@noindent
+The syntax
+@example
+declare -a @var{name}[@var{subscript}]
+@end example
+@noindent
+is also accepted; the @var{subscript} is ignored.
+
+@noindent
+Associative arrays are created using
+@example
+declare -A @var{name}.
+@end example
+
+Attributes may be
+specified for an array variable using the @code{declare} and
+@code{readonly} builtins. Each attribute applies to all members of
+an array.
+
+Arrays are assigned to using compound assignments of the form
+@example
+@var{name}=(@var{value1} @var{value2} @dots{} )
+@end example
+@noindent
+where each
+@var{value} is of the form @code{[@var{subscript}]=}@var{string}.
+Indexed array assignments do not require anything but @var{string}.
+When assigning to indexed arrays, if
+the optional subscript is supplied, that index is assigned to;
+otherwise the index of the element assigned is the last index assigned
+to by the statement plus one. Indexing starts at zero.
+
+When assigning to an associative array, the subscript is required.
+
+This syntax is also accepted by the @code{declare}
+builtin. Individual array elements may be assigned to using the
+@code{@var{name}[@var{subscript}]=@var{value}} syntax introduced above.
+
+When assigning to an indexed array, if @var{name}
+is subscripted by a negative number, that number is
+interpreted as relative to one greater than the maximum index of
+@var{name}, so negative indices count back from the end of the
+array, and an index of -1 references the last element.
+
+Any element of an array may be referenced using
+@code{$@{@var{name}[@var{subscript}]@}}.
+The braces are required to avoid
+conflicts with the shell's filename expansion operators. If the
+@var{subscript} is @samp{@@} or @samp{*}, the word expands to all members
+of the array @var{name}. These subscripts differ only when the word
+appears within double quotes.
+If the word is double-quoted,
+@code{$@{@var{name}[*]@}} expands to a single word with
+the value of each array member separated by the first character of the
+@env{IFS} variable, and @code{$@{@var{name}[@@]@}} expands each element of
+@var{name} to a separate word. When there are no array members,
+@code{$@{@var{name}[@@]@}} expands to nothing.
+If the double-quoted expansion occurs within a word, the expansion of
+the first parameter is joined with the beginning part of the original
+word, and the expansion of the last parameter is joined with the last
+part of the original word.
+This is analogous to the
+expansion of the special parameters @samp{@@} and @samp{*}.
+@code{$@{#@var{name}[@var{subscript}]@}} expands to the length of
+@code{$@{@var{name}[@var{subscript}]@}}.
+If @var{subscript} is @samp{@@} or
+@samp{*}, the expansion is the number of elements in the array.
+If the @var{subscript}
+used to reference an element of an indexed array
+evaluates to a number less than zero, it is
+interpreted as relative to one greater than the maximum index of the array,
+so negative indices count back from the end of the array,
+and an index of -1 refers to the last element.
+
+Referencing an array variable without a subscript is equivalent to
+referencing with a subscript of 0.
+Any reference to a variable using a valid subscript is legal, and
+@code{bash} will create an array if necessary.
+
+An array variable is considered set if a subscript has been assigned a
+value. The null string is a valid value.
+
+It is possible to obtain the keys (indices) of an array as well as the values.
+$@{!@var{name}[@@]@} and $@{!@var{name}[*]@} expand to the indices
+assigned in array variable @var{name}.
+The treatment when in double quotes is similar to the expansion of the
+special parameters @samp{@@} and @samp{*} within double quotes.
+
+The @code{unset} builtin is used to destroy arrays.
+@code{unset @var{name}[@var{subscript}]}
+destroys the array element at index @var{subscript}.
+Negative subscripts to indexed arrays are interpreted as described above.
+Unsetting the last element of an array variable does not unset the variable.
+@code{unset @var{name}}, where @var{name} is an array, removes the
+entire array. A subscript of @samp{*} or @samp{@@} also removes the
+entire array.
+
+When using a variable name with a subscript as an argument to a command,
+such as with @code{unset}, without using the word expansion syntax
+described above, the argument is subject to the shell's filename expansion.
+If filename expansion is not desired, the argument should be quoted.
+
+The @code{declare}, @code{local}, and @code{readonly}
+builtins each accept a @option{-a} option to specify an indexed
+array and a @option{-A} option to specify an associative array.
+If both options are supplied, @option{-A} takes precedence.
+The @code{read} builtin accepts a @option{-a}
+option to assign a list of words read from the standard input
+to an array, and can read values from the standard input into
+individual array elements. The @code{set} and @code{declare}
+builtins display array values in a way that allows them to be
+reused as input.
+
+@node The Directory Stack
+@section The Directory Stack
+@cindex directory stack
+
+@menu
+* Directory Stack Builtins:: Bash builtin commands to manipulate
+ the directory stack.
+@end menu
+
+The directory stack is a list of recently-visited directories. The
+@code{pushd} builtin adds directories to the stack as it changes
+the current directory, and the @code{popd} builtin removes specified
+directories from the stack and changes the current directory to
+the directory removed. The @code{dirs} builtin displays the contents
+of the directory stack. The current directory is always the "top"
+of the directory stack.
+
+The contents of the directory stack are also visible
+as the value of the @env{DIRSTACK} shell variable.
+
+@node Directory Stack Builtins
+@subsection Directory Stack Builtins
+
+@table @code
+
+@item dirs
+@btindex dirs
+@example
+dirs [-clpv] [+@var{N} | -@var{N}]
+@end example
+
+Display the list of currently remembered directories. Directories
+are added to the list with the @code{pushd} command; the
+@code{popd} command removes directories from the list.
+The current directory is always the first directory in the stack.
+
+@table @code
+@item -c
+Clears the directory stack by deleting all of the elements.
+@item -l
+Produces a listing using full pathnames;
+the default listing format uses a tilde to denote the home directory.
+@item -p
+Causes @code{dirs} to print the directory stack with one entry per
+line.
+@item -v
+Causes @code{dirs} to print the directory stack with one entry per
+line, prefixing each entry with its index in the stack.
+@item +@var{N}
+Displays the @var{N}th directory (counting from the left of the
+list printed by @code{dirs} when invoked without options), starting
+with zero.
+@item -@var{N}
+Displays the @var{N}th directory (counting from the right of the
+list printed by @code{dirs} when invoked without options), starting
+with zero.
+@end table
+
+@item popd
+@btindex popd
+@example
+popd [-n] [+@var{N} | -@var{N}]
+@end example
+
+When no arguments are given, @code{popd}
+removes the top directory from the stack and
+performs a @code{cd} to the new top directory.
+The elements are numbered from 0 starting at the first directory
+listed with @code{dirs}; that is, @code{popd} is equivalent to @code{popd +0}.
+
+@table @code
+@item -n
+Suppresses the normal change of directory when removing directories
+from the stack, so that only the stack is manipulated.
+@item +@var{N}
+Removes the @var{N}th directory (counting from the left of the
+list printed by @code{dirs}), starting with zero.
+@item -@var{N}
+Removes the @var{N}th directory (counting from the right of the
+list printed by @code{dirs}), starting with zero.
+@end table
+
+@btindex pushd
+@item pushd
+@example
+pushd [-n] [@var{+N} | @var{-N} | @var{dir}]
+@end example
+
+Save the current directory on the top of the directory stack
+and then @code{cd} to @var{dir}.
+With no arguments, @code{pushd} exchanges the top two directories
+and makes the new top the current directory.
+
+@table @code
+@item -n
+Suppresses the normal change of directory when rotating or
+adding directories to the stack, so that only the stack is manipulated.
+@item +@var{N}
+Brings the @var{N}th directory (counting from the left of the
+list printed by @code{dirs}, starting with zero) to the top of
+the list by rotating the stack.
+@item -@var{N}
+Brings the @var{N}th directory (counting from the right of the
+list printed by @code{dirs}, starting with zero) to the top of
+the list by rotating the stack.
+@item @var{dir}
+Makes @var{dir} be the top of the stack, making
+it the new current directory as if it had been supplied as an argument
+to the @code{cd} builtin.
+@end table
+@end table
+
+@node Controlling the Prompt
+@section Controlling the Prompt
+@cindex prompting
+
+The value of the variable @env{PROMPT_COMMAND} is examined just before
+Bash prints each primary prompt. If @env{PROMPT_COMMAND} is set and
+has a non-null value, then the
+value is executed just as if it had been typed on the command line.
+
+In addition, the following table describes the special characters which
+can appear in the prompt variables @env{PS0}, @env{PS1}, @env{PS2}, and
+@env{PS4}:
+
+@table @code
+@item \a
+A bell character.
+@item \d
+The date, in "Weekday Month Date" format (e.g., "Tue May 26").
+@item \D@{@var{format}@}
+The @var{format} is passed to @code{strftime}(3) and the result is inserted
+into the prompt string; an empty @var{format} results in a locale-specific
+time representation. The braces are required.
+@item \e
+An escape character.
+@item \h
+The hostname, up to the first `.'.
+@item \H
+The hostname.
+@item \j
+The number of jobs currently managed by the shell.
+@item \l
+The basename of the shell's terminal device name.
+@item \n
+A newline.
+@item \r
+A carriage return.
+@item \s
+The name of the shell, the basename of @code{$0} (the portion
+following the final slash).
+@item \t
+The time, in 24-hour HH:MM:SS format.
+@item \T
+The time, in 12-hour HH:MM:SS format.
+@item \@@
+The time, in 12-hour am/pm format.
+@item \A
+The time, in 24-hour HH:MM format.
+@item \u
+The username of the current user.
+@item \v
+The version of Bash (e.g., 2.00)
+@item \V
+The release of Bash, version + patchlevel (e.g., 2.00.0)
+@item \w
+The current working directory, with @env{$HOME} abbreviated with a tilde
+(uses the @env{$PROMPT_DIRTRIM} variable).
+@item \W
+The basename of @env{$PWD}, with @env{$HOME} abbreviated with a tilde.
+@item \!
+The history number of this command.
+@item \#
+The command number of this command.
+@item \$
+If the effective uid is 0, @code{#}, otherwise @code{$}.
+@item \@var{nnn}
+The character whose ASCII code is the octal value @var{nnn}.
+@item \\
+A backslash.
+@item \[
+Begin a sequence of non-printing characters. This could be used to
+embed a terminal control sequence into the prompt.
+@item \]
+End a sequence of non-printing characters.
+@end table
+
+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
+(@pxref{Bash History Facilities}), while the command number is
+the position in the sequence of commands executed during the current
+shell session.
+
+After the string is decoded, it is expanded via
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal, subject to the value of the
+@code{promptvars} shell option (@pxref{The Shopt Builtin}).
+
+@node The Restricted Shell
+@section The Restricted Shell
+@cindex restricted shell
+
+If Bash is started with the name @code{rbash}, or the
+@option{--restricted}
+or
+@option{-r}
+option is supplied at invocation, the shell becomes restricted.
+A restricted shell is used to
+set up an environment more controlled than the standard shell.
+A restricted shell behaves identically to @code{bash}
+with the exception that the following are disallowed or not performed:
+
+@itemize @bullet
+@item
+Changing directories with the @code{cd} builtin.
+@item
+Setting or unsetting the values of the @env{SHELL}, @env{PATH},
+@env{ENV}, or @env{BASH_ENV} variables.
+@item
+Specifying command names containing slashes.
+@item
+Specifying a filename containing a slash as an argument to the @code{.}
+builtin command.
+@item
+Specifying a filename containing a slash as an argument to the @option{-p}
+option to the @code{hash} builtin command.
+@item
+Importing function definitions from the shell environment at startup.
+@item
+Parsing the value of @env{SHELLOPTS} from the shell environment at startup.
+@item
+Redirecting output using the @samp{>}, @samp{>|}, @samp{<>}, @samp{>&},
+@samp{&>}, and @samp{>>} redirection operators.
+@item
+Using the @code{exec} builtin to replace the shell with another command.
+@item
+Adding or deleting builtin commands with the
+@option{-f} and @option{-d} options to the @code{enable} builtin.
+@item
+Using the @code{enable} builtin command to enable disabled shell builtins.
+@item
+Specifying the @option{-p} option to the @code{command} builtin.
+@item
+Turning off restricted mode with @samp{set +r} or @samp{set +o restricted}.
+@end itemize
+
+These restrictions are enforced after any startup files are read.
+
+When a command that is found to be a shell script is executed
+(@pxref{Shell Scripts}), @code{rbash} turns off any restrictions in
+the shell spawned to execute the script.
+
+@node Bash POSIX Mode
+@section Bash POSIX Mode
+@cindex POSIX Mode
+
+Starting Bash with the @option{--posix} command-line option or executing
+@samp{set -o posix} while Bash is running will cause Bash to conform more
+closely to the @sc{posix} standard by changing the behavior to
+match that specified by @sc{posix} in areas where the Bash default differs.
+
+When invoked as @code{sh}, Bash enters @sc{posix} mode after reading the
+startup files.
+
+The following list is what's changed when `@sc{posix} mode' is in effect:
+
+@enumerate
+@item
+Bash ensures that the @env{POSIXLY_CORRECT} variable is set.
+
+@item
+When a command in the hash table no longer exists, Bash will re-search
+@env{$PATH} to find the new location. This is also available with
+@samp{shopt -s checkhash}.
+
+@item
+The message printed by the job control code and builtins when a job
+exits with a non-zero status is `Done(status)'.
+
+@item
+The message printed by the job control code and builtins when a job
+is stopped is `Stopped(@var{signame})', where @var{signame} is, for
+example, @code{SIGTSTP}.
+
+@item
+Alias expansion is always enabled, even in non-interactive shells.
+
+@item
+Reserved words appearing in a context where reserved words are recognized
+do not undergo alias expansion.
+
+@item
+The @sc{posix} @env{PS1} and @env{PS2} expansions of @samp{!} to
+the history number and @samp{!!} to @samp{!} are enabled,
+and parameter expansion is performed on the values of @env{PS1} and
+@env{PS2} regardless of the setting of the @code{promptvars} option.
+
+@item
+The @sc{posix} startup files are executed (@env{$ENV}) rather than
+the normal Bash files.
+
+@item
+Tilde expansion is only performed on assignments preceding a command
+name, rather than on all assignment statements on the line.
+
+@item
+The default history file is @file{~/.sh_history} (this is the
+default value of @env{$HISTFILE}).
+
+@item
+Redirection operators do not perform filename expansion on the word
+in the redirection unless the shell is interactive.
+
+@item
+Redirection operators do not perform word splitting on the word in the
+redirection.
+
+@item
+Function names must be valid shell @code{name}s. That is, they may not
+contain characters other than letters, digits, and underscores, and
+may not start with a digit. Declaring a function with an invalid name
+causes a fatal syntax error in non-interactive shells.
+
+@item
+Function names may not be the same as one of the @sc{posix} special
+builtins.
+
+@item
+@sc{posix} special builtins are found before shell functions
+during command lookup.
+
+@item
+When printing shell function definitions (e.g., by @code{type}), Bash does
+not print the @code{function} keyword.
+
+@item
+Literal tildes that appear as the first character in elements of
+the @env{PATH} variable are not expanded as described above
+under @ref{Tilde Expansion}.
+
+@item
+The @code{time} reserved word may be used by itself as a command. When
+used in this way, it displays timing statistics for the shell and its
+completed children. The @env{TIMEFORMAT} variable controls the format
+of the timing information.
+
+@item
+When parsing and expanding a $@{@dots{}@} expansion that appears within
+double quotes, single quotes are no longer special and cannot be used to
+quote a closing brace or other special character, unless the operator is
+one of those defined to perform pattern removal. In this case, they do
+not have to appear as matched pairs.
+
+@item
+The parser does not recognize @code{time} as a reserved word if the next
+token begins with a @samp{-}.
+
+@item
+The @samp{!} character does not introduce history expansion within a
+double-quoted string, even if the @code{histexpand} option is enabled.
+
+@item
+If a @sc{posix} special builtin returns an error status, a
+non-interactive shell exits. The fatal errors are those listed in
+the @sc{posix} standard, and include things like passing incorrect options,
+redirection errors, variable assignment errors for assignments preceding
+the command name, and so on.
+
+@item
+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.
+
+@item
+A non-interactive shell exits with an error status if a variable
+assignment error occurs in an assignment statement preceding a special
+builtin, but not with any other simple command.
+
+@item
+A non-interactive shell exits with an error status if the iteration
+variable in a @code{for} statement or the selection variable in a
+@code{select} statement is a readonly variable.
+
+@item
+Non-interactive shells exit if @var{filename} in @code{.} @var{filename}
+is not found.
+
+@item
+Non-interactive shells exit if a syntax error in an arithmetic expansion
+results in an invalid expression.
+
+@item
+Non-interactive shells exit if a parameter expansion error occurs.
+
+@item
+Non-interactive shells exit if there is a syntax error in a script read
+with the @code{.} or @code{source} builtins, or in a string processed by
+the @code{eval} builtin.
+
+@item
+Process substitution is not available.
+
+@item
+While variable indirection is available, it may not be applied to the
+@samp{#} and @samp{?} special parameters.
+
+@item
+When expanding the @samp{*} special parameter in a pattern context where the
+expansion is double-quoted does not treat the @code{$*} as if it were
+double-quoted.
+
+@item
+Assignment statements preceding @sc{posix} special builtins
+persist in the shell environment after the builtin completes.
+
+@item
+Assignment statements preceding shell function calls persist in the
+shell environment after the function returns, as if a @sc{posix}
+special builtin command had been executed.
+
+@item
+The @code{command} builtin does not prevent builtins that take assignment
+statements as arguments from expanding them as assignment statements;
+when not in @sc{posix} mode, assignment builtins lose their assignment
+statement expansion properties when preceded by @code{command}.
+
+@item
+The @code{bg} builtin uses the required format to describe each job placed
+in the background, which does not include an indication of whether the job
+is the current or previous job.
+
+@item
+The output of @samp{kill -l} prints all the signal names on a single line,
+separated by spaces, without the @samp{SIG} prefix.
+
+@item
+The @code{kill} builtin does not accept signal names with a @samp{SIG}
+prefix.
+
+@item
+The @code{export} and @code{readonly} builtin commands display their
+output in the format required by @sc{posix}.
+
+@item
+The @code{trap} builtin displays signal names without the leading
+@code{SIG}.
+
+@item
+The @code{trap} builtin doesn't check the first argument for a possible
+signal specification and revert the signal handling to the original
+disposition if it is, unless that argument consists solely of digits and
+is a valid signal number. If users want to reset the handler for a given
+signal to the original disposition, they should use @samp{-} as the
+first argument.
+
+@item
+The @code{.} and @code{source} builtins do not search the current directory
+for the filename argument if it is not found by searching @env{PATH}.
+
+@item
+Enabling @sc{posix} mode has the effect of setting the
+@code{inherit_errexit} option, so
+subshells spawned to execute command substitutions inherit the value of
+the @option{-e} option from the parent shell.
+When the @code{inherit_errexit} option is not enabled,
+Bash clears the @option{-e} option in such subshells.
+
+@item
+Enabling @sc{posix} mode has the effect of setting the
+@code{shift_verbose} option, so numeric arguments to @code{shift}
+that exceed the number of positional parameters will result in an
+error message.
+
+@item
+When the @code{alias} builtin displays alias definitions, it does not
+display them with a leading @samp{alias } unless the @option{-p} option
+is supplied.
+
+@item
+When the @code{set} builtin is invoked without options, it does not display
+shell function names and definitions.
+
+@item
+When the @code{set} builtin is invoked without options, it displays
+variable values without quotes, unless they contain shell metacharacters,
+even if the result contains nonprinting characters.
+
+@item
+When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname
+constructed from @code{$PWD} and the directory name supplied as an argument
+does not refer to an existing directory, @code{cd} will fail instead of
+falling back to @var{physical} mode.
+
+@item
+When the @code{cd} builtin cannot change a directory because the
+length of the pathname
+constructed from @code{$PWD} and the directory name supplied as an argument
+exceeds @var{PATH_MAX} when all symbolic links are expanded, @code{cd} will
+fail instead of attempting to use only the supplied directory name.
+
+@item
+The @code{pwd} builtin verifies that the value it prints is the same as the
+current directory, even if it is not asked to check the file system with the
+@option{-P} option.
+
+@item
+When listing the history, the @code{fc} builtin does not include an
+indication of whether or not a history entry has been modified.
+
+@item
+The default editor used by @code{fc} is @code{ed}.
+
+@item
+The @code{type} and @code{command} builtins will not report a non-executable
+file as having been found, though the shell will attempt to execute such a
+file if it is the only so-named file found in @code{$PATH}.
+
+@item
+The @code{vi} editing mode will invoke the @code{vi} editor directly when
+the @samp{v} command is run, instead of checking @code{$VISUAL} and
+@code{$EDITOR}.
+
+@item
+When the @code{xpg_echo} option is enabled, Bash does not attempt to interpret
+any arguments to @code{echo} as options. Each argument is displayed, after
+escape characters are converted.
+
+@item
+The @code{ulimit} builtin uses a block size of 512 bytes for the @option{-c}
+and @option{-f} options.
+
+@item
+The arrival of @code{SIGCHLD} when a trap is set on @code{SIGCHLD} does
+not interrupt the @code{wait} builtin and cause it to return immediately.
+The trap command is run once for each child that exits.
+
+@item
+The @code{read} builtin may be interrupted by a signal for which a trap
+has been set.
+If Bash receives a trapped signal while executing @code{read}, the trap
+handler executes and @code{read} returns an exit status greater than 128.
+
+@item
+Bash removes an exited background process's status from the list of such
+statuses after the @code{wait} builtin is used to obtain it.
+
+@end enumerate
+
+There is other @sc{posix} behavior that Bash does not implement by
+default even when in @sc{posix} mode.
+Specifically:
+
+@enumerate
+
+@item
+The @code{fc} builtin checks @code{$EDITOR} as a program to edit history
+entries if @code{FCEDIT} is unset, rather than defaulting directly to
+@code{ed}. @code{fc} uses @code{ed} if @code{EDITOR} is unset.
+
+@item
+As noted above, Bash requires the @code{xpg_echo} option to be enabled for
+the @code{echo} builtin to be fully conformant.
+
+@end enumerate
+
+Bash can be configured to be @sc{posix}-conformant by default, by specifying
+the @option{--enable-strict-posix-default} to @code{configure} when building
+(@pxref{Optional Features}).
+
+@node Job Control
+@chapter Job Control
+
+This chapter discusses what job control is, how it works, and how
+Bash allows you to access its facilities.
+
+@menu
+* Job Control Basics:: How job control works.
+* Job Control Builtins:: Bash builtin commands used to interact
+ with job control.
+* Job Control Variables:: Variables Bash uses to customize job
+ control.
+@end menu
+
+@node Job Control Basics
+@section Job Control Basics
+@cindex job control
+@cindex foreground
+@cindex background
+@cindex suspending jobs
+
+Job control
+refers to the ability to selectively stop (suspend)
+the execution of processes and continue (resume)
+their execution at a later point. A user typically employs
+this facility via an interactive interface supplied jointly
+by the operating system kernel's terminal driver and Bash.
+
+The shell associates a @var{job} with each pipeline. It keeps a
+table of currently executing jobs, which may be listed with the
+@code{jobs} command. When Bash starts a job
+asynchronously, it prints a line that looks
+like:
+@example
+[1] 25647
+@end example
+@noindent
+indicating that this job is job number 1 and that the process @sc{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} abstraction as the
+basis for job control.
+
+To facilitate the implementation of the user interface to job
+control, the operating system maintains the notion of a current terminal
+process group @sc{id}. Members of this process group (processes whose
+process group @sc{id} is equal to the current terminal process group
+@sc{id}) receive keyboard-generated signals such as @code{SIGINT}.
+These processes are said to be in the foreground. Background
+processes are those whose process group @sc{id} differs from the
+terminal's; such processes are immune to keyboard-generated
+signals. Only foreground processes are allowed to read from or, if
+the user so specifies with @code{stty tostop}, write to the terminal.
+Background processes which attempt to
+read from (write to when @code{stty tostop} is in effect) the
+terminal are sent a @code{SIGTTIN} (@code{SIGTTOU})
+signal by the kernel's terminal driver,
+which, unless caught, suspends the process.
+
+If the operating system on which Bash is running supports
+job control, Bash contains facilities to use it. Typing the
+@var{suspend} character (typically @samp{^Z}, Control-Z) while a
+process is running causes that process to be stopped and returns
+control to Bash. Typing the @var{delayed suspend} character
+(typically @samp{^Y}, Control-Y) causes the process to be stopped
+when it attempts to read input from the terminal, and control to
+be returned to Bash. The user then manipulates the state of
+this job, using the @code{bg} command to continue it in the
+background, the @code{fg} command to continue it in the
+foreground, or the @code{kill} command to kill it. A @samp{^Z}
+takes effect immediately, and has the additional side effect of
+causing pending output and typeahead to be discarded.
+
+There are a number of ways to refer to a job in the shell. The
+character @samp{%} introduces a job specification (@var{jobspec}).
+
+Job number @code{n} may be referred to as @samp{%n}.
+The symbols @samp{%%} and @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{%} (with no accompanying job specification) also refers
+to the current job.
+The previous job may be referenced using @samp{%-}.
+If there is only a single job, @samp{%+} and @samp{%-} can both be used
+to refer to that job.
+In output pertaining to jobs (e.g., the output of the @code{jobs}
+command), the current job is always flagged with a @samp{+}, and the
+previous job with a @samp{-}.
+
+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} refers
+to a stopped @code{ce} job. Using @samp{%?ce}, on the
+other hand, refers to any job containing the string @samp{ce} in
+its command line. If the prefix or substring matches more than one job,
+Bash reports an error.
+
+Simply naming a job can be used to bring it into the foreground:
+@samp{%1} is a synonym for @samp{fg %1}, bringing job 1 from the
+background into the foreground. Similarly, @samp{%1 &} resumes
+job 1 in the background, equivalent to @samp{bg %1}
+
+The shell learns immediately whenever a job changes state.
+Normally, Bash waits until it is about to print a prompt
+before reporting changes in a job's status so as to not interrupt
+any other output.
+If the @option{-b} option to the @code{set} builtin is enabled,
+Bash reports such changes immediately (@pxref{The Set Builtin}).
+Any trap on @code{SIGCHLD} is executed for each child process
+that exits.
+
+If an attempt to exit Bash is made while jobs are stopped, (or running, if
+the @code{checkjobs} option is enabled -- see @ref{The Shopt Builtin}), the
+shell prints a warning message, and if the @code{checkjobs} option is
+enabled, lists the jobs and their statuses.
+The @code{jobs} command may then be used to inspect their status.
+If a second attempt to exit is made without an intervening command,
+Bash does not print another warning, and any stopped jobs are terminated.
+
+When the shell is waiting for a job or process using the @code{wait}
+builtin, and job control is enabled, @code{wait} will return when the
+job changes state. The @option{-f} option will force @code{wait} to wait
+until the job or process terminates before returning.
+
+@node Job Control Builtins
+@section Job Control Builtins
+
+@table @code
+
+@item bg
+@btindex bg
+@example
+bg [@var{jobspec} @dots{}]
+@end example
+
+Resume each suspended job @var{jobspec} in the background, as if it
+had been started with @samp{&}.
+If @var{jobspec} 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} was not found or specifies a job
+that was started without job control.
+
+@item fg
+@btindex fg
+@example
+fg [@var{jobspec}]
+@end example
+
+Resume the job @var{jobspec} in the foreground and make it the current job.
+If @var{jobspec} 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} does not specify a valid job or
+@var{jobspec} specifies a job that was started without job control.
+
+@item jobs
+@btindex jobs
+@example
+jobs [-lnprs] [@var{jobspec}]
+jobs -x @var{command} [@var{arguments}]
+@end example
+
+The first form lists the active jobs. The options have the
+following meanings:
+
+@table @code
+@item -l
+List process @sc{id}s in addition to the normal information.
+
+@item -n
+Display information only about jobs that have changed status since
+the user was last notified of their status.
+
+@item -p
+List only the process @sc{id} of the job's process group leader.
+
+@item -r
+Display only running jobs.
+
+@item -s
+Display only stopped jobs.
+@end table
+
+If @var{jobspec} is given,
+output is restricted to information about that job.
+If @var{jobspec} is not supplied, the status of all jobs is
+listed.
+
+If the @option{-x} option is supplied, @code{jobs} replaces any
+@var{jobspec} found in @var{command} or @var{arguments} with the
+corresponding process group @sc{id}, and executes @var{command},
+passing it @var{argument}s, returning its exit status.
+
+@item kill
+@btindex kill
+@example
+kill [-s @var{sigspec}] [-n @var{signum}] [-@var{sigspec}] @var{jobspec} or @var{pid}
+kill -l|-L [@var{exit_status}]
+@end example
+
+Send a signal specified by @var{sigspec} or @var{signum} to the process
+named by job specification @var{jobspec} or process @sc{id} @var{pid}.
+@var{sigspec} is either a case-insensitive signal name such as
+@code{SIGINT} (with or without the @code{SIG} prefix)
+or a signal number; @var{signum} is a signal number.
+If @var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used.
+The @option{-l} option lists the signal names.
+If any arguments are supplied when @option{-l} is given, the names of the
+signals corresponding to the arguments are listed, and the return status
+is zero.
+@var{exit_status} is a number specifying a signal number or the exit
+status of a process terminated by a signal.
+The @option{-L} option is equivalent to @option{-l}.
+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.
+
+@item wait
+@btindex wait
+@example
+wait [-fn] [@var{jobspec} or @var{pid} @dots{}]
+@end example
+
+Wait until the child process specified by each process @sc{id} @var{pid}
+or job specification @var{jobspec} 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 the @option{-n} option is supplied, @code{wait} waits for any job to
+terminate and returns its exit status.
+If the @option{-f} option is supplied, and job control is enabled,
+@code{wait} forces each @var{pid} or @var{jobspec} to terminate before
+returning its status, intead of returning when it changes status.
+If neither @var{jobspec} nor @var{pid} specifies an active child process
+of the shell, the return status is 127.
+
+@item disown
+@btindex disown
+@example
+disown [-ar] [-h] [@var{jobspec} @dots{} | @var{pid} @dots{} ]
+@end example
+
+Without options, remove each @var{jobspec} from the table of
+active jobs.
+If the @option{-h} option is given, the job is not removed from the table,
+but is marked so that @code{SIGHUP} is not sent to the job if the shell
+receives a @code{SIGHUP}.
+If @var{jobspec} is not present, and neither the @option{-a} nor the
+@option{-r} option is supplied, the current job is used.
+If no @var{jobspec} is supplied, the @option{-a} option means to remove or
+mark all jobs; the @option{-r} option without a @var{jobspec}
+argument restricts operation to running jobs.
+
+@item suspend
+@btindex suspend
+@example
+suspend [-f]
+@end example
+
+Suspend the execution of this shell until it receives a
+@code{SIGCONT} signal.
+A login shell cannot be suspended; the @option{-f}
+option can be used to override this and force the suspension.
+@end table
+
+When job control is not active, the @code{kill} and @code{wait}
+builtins do not accept @var{jobspec} arguments. They must be
+supplied process @sc{id}s.
+
+@node Job Control Variables
+@section Job Control Variables
+
+@vtable @code
+
+@item auto_resume
+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},
+the string supplied must match the name of a stopped job exactly;
+if set to @samp{substring},
+the string supplied needs to match a substring of the name of a
+stopped job. The @samp{substring} value provides functionality
+analogous to the @samp{%?} job @sc{id} (@pxref{Job Control Basics}).
+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{%} job @sc{id}.
+
+@end vtable
+
+@set readline-appendix
+@set history-appendix
+@cindex Readline, how to use
+@include rluser.texi
+@cindex History, how to use
+@include hsuser.texi
+@clear readline-appendix
+@clear history-appendix
+
+@node Installing Bash
+@chapter Installing Bash
+
+This chapter provides basic instructions for installing Bash on
+the various supported platforms. The distribution supports the
+@sc{gnu} operating systems, nearly every version of Unix, and several
+non-Unix systems such as BeOS and Interix.
+Other independent ports exist for
+@sc{ms-dos}, @sc{os/2}, and Windows platforms.
+
+@menu
+* Basic Installation:: Installation instructions.
+* Compilers and Options:: How to set special options for various
+ systems.
+* Compiling For Multiple Architectures:: How to compile Bash for more
+ than one kind of system from
+ the same source tree.
+* Installation Names:: How to set the various paths used by the installation.
+* Specifying the System Type:: How to configure Bash for a particular system.
+* Sharing Defaults:: How to share default configuration values among GNU
+ programs.
+* Operation Controls:: Options recognized by the configuration program.
+* Optional Features:: How to enable and disable optional features when
+ building Bash.
+@end menu
+
+@node Basic Installation
+@section Basic Installation
+@cindex installation
+@cindex configuration
+@cindex Bash installation
+@cindex Bash configuration
+
+These are installation instructions for Bash.
+
+The simplest way to compile Bash is:
+
+@enumerate
+@item
+@code{cd} to the directory containing the source code and type
+@samp{./configure} to configure Bash for your system. If you're
+using @code{csh} on an old version of System V, you might need to
+type @samp{sh ./configure} instead to prevent @code{csh} from trying
+to execute @code{configure} itself.
+
+Running @code{configure} takes some time.
+While running, it prints messages telling which features it is
+checking for.
+
+@item
+Type @samp{make} to compile Bash and build the @code{bashbug} bug
+reporting script.
+
+@item
+Optionally, type @samp{make tests} to run the Bash test suite.
+
+@item
+Type @samp{make install} to install @code{bash} and @code{bashbug}.
+This will also install the manual pages and Info file.
+
+@end enumerate
+
+The @code{configure} shell script attempts to guess correct
+values for various system-dependent variables used during
+compilation. It uses those values to create a @file{Makefile} in
+each directory of the package (the top directory, the
+@file{builtins}, @file{doc}, and @file{support} directories,
+each directory under @file{lib}, and several others). It also creates a
+@file{config.h} file containing system-dependent definitions.
+Finally, it creates a shell script named @code{config.status} that you
+can run in the future to recreate the current configuration, a
+file @file{config.cache} that saves the results of its tests to
+speed up reconfiguring, and a file @file{config.log} containing
+compiler output (useful mainly for debugging @code{configure}).
+If at some point
+@file{config.cache} contains results you don't want to keep, you
+may remove or edit it.
+
+To find out more about the options and arguments that the
+@code{configure} script understands, type
+
+@example
+bash-4.2$ ./configure --help
+@end example
+
+@noindent
+at the Bash prompt in your Bash source directory.
+
+If you want to build Bash in a directory separate from the source
+directory -- to build for multiple architectures, for example --
+just use the full path to the configure script. The following commands
+will build bash in a directory under @file{/usr/local/build} from
+the source code in @file{/usr/local/src/bash-4.4}:
+
+@example
+mkdir /usr/local/build/bash-4.4
+cd /usr/local/build/bash-4.4
+bash /usr/local/src/bash-4.4/configure
+make
+@end example
+
+See @ref{Compiling For Multiple Architectures} for more information
+about building in a directory separate from the source.
+
+If you need to do unusual things to compile Bash, please
+try to figure out how @code{configure} could check whether or not
+to do them, and mail diffs or instructions to
+@email{bash-maintainers@@gnu.org} so they can be
+considered for the next release.
+
+The file @file{configure.ac} is used to create @code{configure}
+by a program called Autoconf. You only need
+@file{configure.ac} if you want to change it or regenerate
+@code{configure} using a newer version of Autoconf. If
+you do this, make sure you are using Autoconf version 2.50 or
+newer.
+
+You can remove the program binaries and object files from the
+source code directory by typing @samp{make clean}. To also remove the
+files that @code{configure} created (so you can compile Bash for
+a different kind of computer), type @samp{make distclean}.
+
+@node Compilers and Options
+@section Compilers and Options
+
+Some systems require unusual options for compilation or linking
+that the @code{configure} script does not know about. You can
+give @code{configure} initial values for variables by setting
+them in the environment. Using a Bourne-compatible shell, you
+can do that on the command line like this:
+
+@example
+CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+@end example
+
+On systems that have the @code{env} program, you can do it like this:
+
+@example
+env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+@end example
+
+The configuration process uses GCC to build Bash if it
+is available.
+
+@node Compiling For Multiple Architectures
+@section Compiling For Multiple Architectures
+
+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} that
+supports the @code{VPATH} variable, such as GNU @code{make}.
+@code{cd} to the
+directory where you want the object files and executables to go and run
+the @code{configure} script from the source directory
+(@pxref{Basic Installation}).
+You may need to
+supply the @option{--srcdir=PATH} argument to tell @code{configure} where the
+source files are. @code{configure} automatically checks for the
+source code in the directory that @code{configure} is in and in `..'.
+
+If you have to use a @code{make} that does not supports the @code{VPATH}
+variable, you can compile Bash for one architecture at a
+time in the source code directory. After you have installed
+Bash for one architecture, use @samp{make distclean} before
+reconfiguring for another architecture.
+
+Alternatively, if your system supports symbolic links, you can use the
+@file{support/mkclone} script to create a build tree which has
+symbolic links back to each file in the source directory. Here's an
+example that creates a build directory in the current directory from a
+source directory @file{/usr/gnu/src/bash-2.0}:
+
+@example
+bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+@end example
+
+@noindent
+The @code{mkclone} script requires Bash, so you must have already built
+Bash for at least one architecture before you can create build
+directories for other architectures.
+
+@node Installation Names
+@section Installation Names
+
+By default, @samp{make install} will install into
+@file{/usr/local/bin}, @file{/usr/local/man}, etc. You can
+specify an installation prefix other than @file{/usr/local} by
+giving @code{configure} the option @option{--prefix=@var{PATH}},
+or by specifying a value for the @code{DESTDIR} @samp{make}
+variable when running @samp{make install}.
+
+You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.
+If you give @code{configure} the option
+@option{--exec-prefix=@var{PATH}}, @samp{make install} will use
+@var{PATH} as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+@node Specifying the System Type
+@section Specifying the System Type
+
+There may be some features @code{configure} can not figure out
+automatically, but need to determine by the type of host Bash
+will run on. Usually @code{configure} can figure that
+out, but if it prints a message saying it can not guess the host
+type, give it the @option{--host=TYPE} option. @samp{TYPE} can
+either be a short name for the system type, such as @samp{sun4},
+or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM}
+(e.g., @samp{i386-unknown-freebsd4.2}).
+
+See the file @file{support/config.sub} for the possible
+values of each field.
+
+@node Sharing Defaults
+@section Sharing Defaults
+
+If you want to set default values for @code{configure} scripts to
+share, you can create a site shell script called
+@code{config.site} that gives default values for variables like
+@code{CC}, @code{cache_file}, and @code{prefix}. @code{configure}
+looks for @file{PREFIX/share/config.site} if it exists, then
+@file{PREFIX/etc/config.site} if it exists. Or, you can set the
+@code{CONFIG_SITE} environment variable to the location of the site
+script. A warning: the Bash @code{configure} looks for a site script,
+but not all @code{configure} scripts do.
+
+@node Operation Controls
+@section Operation Controls
+
+@code{configure} recognizes the following options to control how it
+operates.
+
+@table @code
+
+@item --cache-file=@var{file}
+Use and save the results of the tests in
+@var{file} instead of @file{./config.cache}. Set @var{file} to
+@file{/dev/null} to disable caching, for debugging
+@code{configure}.
+
+@item --help
+Print a summary of the options to @code{configure}, and exit.
+
+@item --quiet
+@itemx --silent
+@itemx -q
+Do not print messages saying which checks are being made.
+
+@item --srcdir=@var{dir}
+Look for the Bash source code in directory @var{dir}. Usually
+@code{configure} can determine that directory automatically.
+
+@item --version
+Print the version of Autoconf used to generate the @code{configure}
+script, and exit.
+@end table
+
+@code{configure} also accepts some other, not widely used, boilerplate
+options. @samp{configure --help} prints the complete list.
+
+@node Optional Features
+@section Optional Features
+
+The Bash @code{configure} has a number of @option{--enable-@var{feature}}
+options, where @var{feature} indicates an optional part of Bash.
+There are also several @option{--with-@var{package}} options,
+where @var{package} is something like @samp{bash-malloc} or @samp{purify}.
+To turn off the default use of a package, use
+@option{--without-@var{package}}. To configure Bash without a feature
+that is enabled by default, use @option{--disable-@var{feature}}.
+
+Here is a complete list of the @option{--enable-} and
+@option{--with-} options that the Bash @code{configure} recognizes.
+
+@table @code
+@item --with-afs
+Define if you are using the Andrew File System from Transarc.
+
+@item --with-bash-malloc
+Use the Bash version of
+@code{malloc} in the directory @file{lib/malloc}. This is not the same
+@code{malloc} that appears in @sc{gnu} libc, but an older version
+originally derived from the 4.2 @sc{bsd} @code{malloc}. This @code{malloc}
+is very fast, but wastes some space on each allocation.
+This option is enabled by default.
+The @file{NOTES} file contains a list of systems for
+which this should be turned off, and @code{configure} disables this
+option automatically for a number of systems.
+
+@item --with-curses
+Use the curses library instead of the termcap library. This should
+be supplied if your system has an inadequate or incomplete termcap
+database.
+
+@item --with-gnu-malloc
+A synonym for @code{--with-bash-malloc}.
+
+@item --with-installed-readline[=@var{PREFIX}]
+Define this to make Bash link with a locally-installed version of Readline
+rather than the version in @file{lib/readline}. This works only with
+Readline 5.0 and later versions. If @var{PREFIX} is @code{yes} or not
+supplied, @code{configure} uses the values of the make variables
+@code{includedir} and @code{libdir}, which are subdirectories of @code{prefix}
+by default, to find the installed version of Readline if it is not in
+the standard system include and library directories.
+If @var{PREFIX} is @code{no}, Bash links with the version in
+@file{lib/readline}.
+If @var{PREFIX} is set to any other value, @code{configure} treats it as
+a directory pathname and looks for
+the installed version of Readline in subdirectories of that directory
+(include files in @var{PREFIX}/@code{include} and the library in
+@var{PREFIX}/@code{lib}).
+
+@item --with-purify
+Define this to use the Purify memory allocation checker from Rational
+Software.
+
+@item --enable-minimal-config
+This produces a shell with minimal features, close to the historical
+Bourne shell.
+@end table
+
+There are several @option{--enable-} options that alter how Bash is
+compiled and linked, rather than changing run-time features.
+
+@table @code
+@item --enable-largefile
+Enable support for @uref{http://www.unix.org/version2/whatsnew/lfs20mar.html,
+large files} 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.
+
+@item --enable-profiling
+This builds a Bash binary that produces profiling information to be
+processed by @code{gprof} each time it is executed.
+
+@item --enable-static-link
+This causes Bash to be linked statically, if @code{gcc} is being used.
+This could be used to build a version to use as root's shell.
+@end table
+
+The @samp{minimal-config} option can be used to disable all of
+the following options, but it is processed first, so individual
+options may be enabled using @samp{enable-@var{feature}}.
+
+All of the following options except for @samp{disabled-builtins},
+@samp{direxpand-default}, and
+@samp{xpg-echo-default} are
+enabled by default, unless the operating system does not provide the
+necessary support.
+
+@table @code
+@item --enable-alias
+Allow alias expansion and include the @code{alias} and @code{unalias}
+builtins (@pxref{Aliases}).
+
+@item --enable-arith-for-command
+Include support for the alternate form of the @code{for} command
+that behaves like the C language @code{for} statement
+(@pxref{Looping Constructs}).
+
+@item --enable-array-variables
+Include support for one-dimensional array shell variables
+(@pxref{Arrays}).
+
+@item --enable-bang-history
+Include support for @code{csh}-like history substitution
+(@pxref{History Interaction}).
+
+@item --enable-brace-expansion
+Include @code{csh}-like brace expansion
+( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ).
+See @ref{Brace Expansion}, for a complete description.
+
+@item --enable-casemod-attributes
+Include support for case-modifying attributes in the @code{declare} builtin
+and assignment statements. Variables with the @var{uppercase} attribute,
+for example, will have their values converted to uppercase upon assignment.
+
+@item --enable-casemod-expansion
+Include support for case-modifying word expansions.
+
+@item --enable-command-timing
+Include support for recognizing @code{time} as a reserved word and for
+displaying timing statistics for the pipeline following @code{time}
+(@pxref{Pipelines}).
+This allows pipelines as well as shell builtins and functions to be timed.
+
+@item --enable-cond-command
+Include support for the @code{[[} conditional command.
+(@pxref{Conditional Constructs}).
+
+@item --enable-cond-regexp
+Include support for matching @sc{posix} regular expressions using the
+@samp{=~} binary operator in the @code{[[} conditional command.
+(@pxref{Conditional Constructs}).
+
+@item --enable-coprocesses
+Include support for coprocesses and the @code{coproc} reserved word
+(@pxref{Pipelines}).
+
+@item --enable-debugger
+Include support for the bash debugger (distributed separately).
+
+@item --enable-dev-fd-stat-broken
+If calling @code{stat} on /dev/fd/@var{N} returns different results than
+calling @code{fstat} on file descriptor @var{N}, supply this option to
+enable a workaround.
+This has implications for conditional commands that test file attributes.
+
+@item --enable-direxpand-default
+Cause the @code{direxpand} shell option (@pxref{The Shopt Builtin})
+to be enabled by default when the shell starts.
+It is normally disabled by default.
+
+@item --enable-directory-stack
+Include support for a @code{csh}-like directory stack and the
+@code{pushd}, @code{popd}, and @code{dirs} builtins
+(@pxref{The Directory Stack}).
+
+@item --enable-disabled-builtins
+Allow builtin commands to be invoked via @samp{builtin xxx}
+even after @code{xxx} has been disabled using @samp{enable -n xxx}.
+See @ref{Bash Builtins}, for details of the @code{builtin} and
+@code{enable} builtin commands.
+
+@item --enable-dparen-arithmetic
+Include support for the @code{((@dots{}))} command
+(@pxref{Conditional Constructs}).
+
+@item --enable-extended-glob
+Include support for the extended pattern matching features described
+above under @ref{Pattern Matching}.
+
+@item --enable-extended-glob-default
+Set the default value of the @var{extglob} shell option described
+above under @ref{The Shopt Builtin} to be enabled.
+
+@item --enable-function-import
+Include support for importing function definitions exported by another
+instance of the shell from the environment. This option is enabled by
+default.
+
+@item --enable-glob-asciirange-default
+Set the default value of the @var{globasciiranges} shell option described
+above under @ref{The Shopt Builtin} to be enabled.
+This controls the behavior of character ranges when used in pattern matching
+bracket expressions.
+
+@item --enable-help-builtin
+Include the @code{help} builtin, which displays help on shell builtins and
+variables (@pxref{Bash Builtins}).
+
+@item --enable-history
+Include command history and the @code{fc} and @code{history}
+builtin commands (@pxref{Bash History Facilities}).
+
+@item --enable-job-control
+This enables the job control features (@pxref{Job Control}),
+if the operating system supports them.
+
+@item --enable-multibyte
+This enables support for multibyte characters if the operating
+system provides the necessary support.
+
+@item --enable-net-redirections
+This enables the special handling of filenames of the form
+@code{/dev/tcp/@var{host}/@var{port}} and
+@code{/dev/udp/@var{host}/@var{port}}
+when used in redirections (@pxref{Redirections}).
+
+@item --enable-process-substitution
+This enables process substitution (@pxref{Process Substitution}) if
+the operating system provides the necessary support.
+
+@item --enable-progcomp
+Enable the programmable completion facilities
+(@pxref{Programmable Completion}).
+If Readline is not enabled, this option has no effect.
+
+@item --enable-prompt-string-decoding
+Turn on the interpretation of a number of backslash-escaped characters
+in the @env{$PS0}, @env{$PS1}, @env{$PS2}, and @env{$PS4} prompt
+strings. See @ref{Controlling the Prompt}, for a complete list of prompt
+string escape sequences.
+
+@item --enable-readline
+Include support for command-line editing and history with the Bash
+version of the Readline library (@pxref{Command Line Editing}).
+
+@item --enable-restricted
+Include support for a @dfn{restricted shell}. If this is enabled, Bash,
+when called as @code{rbash}, enters a restricted mode. See
+@ref{The Restricted Shell}, for a description of restricted mode.
+
+@item --enable-select
+Include the @code{select} compound command, which allows the generation of
+simple menus (@pxref{Conditional Constructs}).
+
+@item --enable-separate-helpfiles
+Use external files for the documentation displayed by the @code{help} builtin
+instead of storing the text internally.
+
+@item --enable-single-help-strings
+Store the text displayed by the @code{help} builtin as a single string for
+each help topic. This aids in translating the text to different languages.
+You may need to disable this if your compiler cannot handle very long string
+literals.
+
+@item --enable-strict-posix-default
+Make Bash @sc{posix}-conformant by default (@pxref{Bash POSIX Mode}).
+
+@item --enable-usg-echo-default
+A synonym for @code{--enable-xpg-echo-default}.
+
+@item --enable-xpg-echo-default
+Make the @code{echo} builtin expand backslash-escaped characters by default,
+without requiring the @option{-e} option.
+This sets the default value of the @code{xpg_echo} shell option to @code{on},
+which makes the Bash @code{echo} behave more like the version specified in
+the Single Unix Specification, version 3.
+@xref{Bash Builtins}, for a description of the escape sequences that
+@code{echo} recognizes.
+@end table
+
+The file @file{config-top.h} contains C Preprocessor
+@samp{#define} statements for options which are not settable from
+@code{configure}.
+Some of these are not meant to be changed; beware of the consequences if
+you do.
+Read the comments associated with each definition for more
+information about its effect.
+
+@node Reporting Bugs
+@appendix Reporting Bugs
+
+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
+@uref{ftp://ftp.gnu.org/pub/gnu/bash/}.
+
+Once you have determined that a bug actually exists, use the
+@code{bashbug} command to submit a bug report.
+If you have a fix, you are encouraged to mail that as well!
+Suggestions and `philosophical' bug reports may be mailed
+to @email{bug-bash@@gnu.org} or posted to the Usenet
+newsgroup @code{gnu.bash.bug}.
+
+All bug reports should include:
+@itemize @bullet
+@item
+The version number of Bash.
+@item
+The hardware and operating system.
+@item
+The compiler used to compile Bash.
+@item
+A description of the bug behaviour.
+@item
+A short script or `recipe' which exercises the bug and may be used
+to reproduce it.
+@end itemize
+
+@noindent
+@code{bashbug} inserts the first three items automatically into
+the template it provides for filing a bug report.
+
+Please send all reports concerning this manual to
+@email{bug-bash@@gnu.org}.
+
+@node Major Differences From The Bourne Shell
+@appendix Major Differences From The Bourne Shell
+
+Bash implements essentially the same grammar, parameter and
+variable expansion, redirection, and quoting as the Bourne Shell.
+Bash uses the @sc{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} included in SVR4.2 (the
+last version of the historical Bourne shell) as the baseline reference.
+
+@itemize @bullet
+
+@item
+Bash is @sc{posix}-conformant, even where the @sc{posix} specification
+differs from traditional @code{sh} behavior (@pxref{Bash POSIX Mode}).
+
+@item
+Bash has multi-character invocation options (@pxref{Invoking Bash}).
+
+@item
+Bash has command-line editing (@pxref{Command Line Editing}) and
+the @code{bind} builtin.
+
+@item
+Bash provides a programmable word completion mechanism
+(@pxref{Programmable Completion}), and builtin commands
+@code{complete}, @code{compgen}, and @code{compopt}, to
+manipulate it.
+
+@item
+Bash has command history (@pxref{Bash History Facilities}) and the
+@code{history} and @code{fc} builtins to manipulate it.
+The Bash history list maintains timestamp information and uses the
+value of the @code{HISTTIMEFORMAT} variable to display it.
+
+@item
+Bash implements @code{csh}-like history expansion
+(@pxref{History Interaction}).
+
+@item
+Bash has one-dimensional array variables (@pxref{Arrays}), 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.
+
+@item
+The @code{$'@dots{}'} quoting syntax, which expands ANSI-C
+backslash-escaped characters in the text between the single quotes,
+is supported (@pxref{ANSI-C Quoting}).
+
+@item
+Bash supports the @code{$"@dots{}"} quoting syntax to do
+locale-specific translation of the characters between the double
+quotes. The @option{-D}, @option{--dump-strings}, and @option{--dump-po-strings}
+invocation options list the translatable strings found in a script
+(@pxref{Locale Translation}).
+
+@item
+Bash implements the @code{!} keyword to negate the return value of
+a pipeline (@pxref{Pipelines}).
+Very useful when an @code{if} statement needs to act only if a test fails.
+The Bash @samp{-o pipefail} option to @code{set} will cause a pipeline to
+return a failure status if any command fails.
+
+@item
+Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}).
+The display of the timing statistics may be controlled with the
+@env{TIMEFORMAT} variable.
+
+@item
+Bash implements the @code{for (( @var{expr1} ; @var{expr2} ; @var{expr3} ))}
+arithmetic for command, similar to the C language (@pxref{Looping Constructs}).
+
+@item
+Bash includes the @code{select} compound command, which allows the
+generation of simple menus (@pxref{Conditional Constructs}).
+
+@item
+Bash includes the @code{[[} compound command, which makes conditional
+testing part of the shell grammar (@pxref{Conditional Constructs}), including
+optional regular expression matching.
+
+@item
+Bash provides optional case-insensitive matching for the @code{case} and
+@code{[[} constructs.
+
+@item
+Bash includes brace expansion (@pxref{Brace Expansion}) and tilde
+expansion (@pxref{Tilde Expansion}).
+
+@item
+Bash implements command aliases and the @code{alias} and @code{unalias}
+builtins (@pxref{Aliases}).
+
+@item
+Bash provides shell arithmetic, the @code{((} compound command
+(@pxref{Conditional Constructs}),
+and arithmetic expansion (@pxref{Shell Arithmetic}).
+
+@item
+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}
+command.
+
+@item
+Bash supports the @samp{+=} assignment operator, which appends to the value
+of the variable named on the left hand side.
+
+@item
+Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%}
+and @samp{##} expansions to remove leading or trailing substrings from
+variable values (@pxref{Shell Parameter Expansion}).
+
+@item
+The expansion @code{$@{#xx@}}, which returns the length of @code{$@{xx@}},
+is supported (@pxref{Shell Parameter Expansion}).
+
+@item
+The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}},
+which expands to the substring of @code{var}'s value of length
+@var{length}, beginning at @var{offset}, is present
+(@pxref{Shell Parameter Expansion}).
+
+@item
+The expansion
+@code{$@{var/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}},
+which matches @var{pattern} and replaces it with @var{replacement} in
+the value of @code{var}, is available (@pxref{Shell Parameter Expansion}).
+
+@item
+The expansion @code{$@{!@var{prefix}*@}} expansion, which expands to
+the names of all shell variables whose names begin with @var{prefix},
+is available (@pxref{Shell Parameter Expansion}).
+
+@item
+Bash has @var{indirect} variable expansion using @code{$@{!word@}}
+(@pxref{Shell Parameter Expansion}).
+
+@item
+Bash can expand positional parameters beyond @code{$9} using
+@code{$@{@var{num}@}}.
+
+@item
+The @sc{posix} @code{$()} form of command substitution
+is implemented (@pxref{Command Substitution}),
+and preferred to the Bourne shell's @code{``} (which
+is also implemented for backwards compatibility).
+
+@item
+Bash has process substitution (@pxref{Process Substitution}).
+
+@item
+Bash automatically assigns variables that provide information about the
+current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host
+(@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}),
+and the instance of Bash that is running (@env{BASH},
+@env{BASH_VERSION}, and @env{BASH_VERSINFO}). @xref{Bash Variables},
+for details.
+
+@item
+The @env{IFS} variable is used to split only the results of expansion,
+not all words (@pxref{Word Splitting}).
+This closes a longstanding shell security hole.
+
+@item
+The filename expansion bracket expression code uses @samp{!} and @samp{^}
+to negate the set of characters between the brackets.
+The Bourne shell uses only @samp{!}.
+
+@item
+Bash implements the full set of @sc{posix} filename expansion operators,
+including @var{character classes}, @var{equivalence classes}, and
+@var{collating symbols} (@pxref{Filename Expansion}).
+
+@item
+Bash implements extended pattern matching features when the @code{extglob}
+shell option is enabled (@pxref{Pattern Matching}).
+
+@item
+It is possible to have a variable and a function with the same name;
+@code{sh} does not separate the two name spaces.
+
+@item
+Bash functions are permitted to have local variables using the
+@code{local} builtin, and thus useful recursive functions may be written
+(@pxref{Bash Builtins}).
+
+@item
+Variable assignments preceding commands affect only that command, even
+builtins and functions (@pxref{Environment}).
+In @code{sh}, all variable assignments
+preceding commands are global unless the command is executed from the
+file system.
+
+@item
+Bash performs filename expansion on filenames specified as operands
+to input and output redirection operators (@pxref{Redirections}).
+
+@item
+Bash contains the @samp{<>} redirection operator, allowing a file to be
+opened for both reading and writing, and the @samp{&>} redirection
+operator, for directing standard output and standard error to the same
+file (@pxref{Redirections}).
+
+@item
+Bash includes the @samp{<<<} redirection operator, allowing a string to
+be used as the standard input to a command.
+
+@item
+Bash implements the @samp{[n]<&@var{word}} and @samp{[n]>&@var{word}}
+redirection operators, which move one file descriptor to another.
+
+@item
+Bash treats a number of filenames specially when they are
+used in redirection operators (@pxref{Redirections}).
+
+@item
+Bash can open network connections to arbitrary machines and services
+with the redirection operators (@pxref{Redirections}).
+
+@item
+The @code{noclobber} option is available to avoid overwriting existing
+files with output redirection (@pxref{The Set Builtin}).
+The @samp{>|} redirection operator may be used to override @code{noclobber}.
+
+@item
+The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins})
+each take @option{-L} and @option{-P} options to switch between logical and
+physical modes.
+
+@item
+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} and @code{command} builtins (@pxref{Bash Builtins}).
+
+@item
+The @code{command} builtin allows selective disabling of functions
+when command lookup is performed (@pxref{Bash Builtins}).
+
+@item
+Individual builtins may be enabled or disabled using the @code{enable}
+builtin (@pxref{Bash Builtins}).
+
+@item
+The Bash @code{exec} builtin takes additional options that allow users
+to control the contents of the environment passed to the executed
+command, and what the zeroth argument to the command is to be
+(@pxref{Bourne Shell Builtins}).
+
+@item
+Shell functions may be exported to children via the environment
+using @code{export -f} (@pxref{Shell Functions}).
+
+@item
+The Bash @code{export}, @code{readonly}, and @code{declare} builtins can
+take a @option{-f} option to act on shell functions, a @option{-p} option to
+display variables with various attributes set in a format that can be
+used as shell input, a @option{-n} option to remove various variable
+attributes, and @samp{name=value} arguments to set variable attributes
+and values simultaneously.
+
+@item
+The Bash @code{hash} builtin allows a name to be associated with
+an arbitrary filename, even when that filename cannot be found by
+searching the @env{$PATH}, using @samp{hash -p}
+(@pxref{Bourne Shell Builtins}).
+
+@item
+Bash includes a @code{help} builtin for quick reference to shell
+facilities (@pxref{Bash Builtins}).
+
+@item
+The @code{printf} builtin is available to display formatted output
+(@pxref{Bash Builtins}).
+
+@item
+The Bash @code{read} builtin (@pxref{Bash Builtins})
+will read a line ending in @samp{\} with
+the @option{-r} option, and will use the @env{REPLY} variable as a
+default if no non-option arguments are supplied.
+The Bash @code{read} builtin
+also accepts a prompt string with the @option{-p} option and will use
+Readline to obtain the line when given the @option{-e} option.
+The @code{read} builtin also has additional options to control input:
+the @option{-s} option will turn off echoing of input characters as
+they are read, the @option{-t} option will allow @code{read} to time out
+if input does not arrive within a specified number of seconds, the
+@option{-n} option will allow reading only a specified number of
+characters rather than a full line, and the @option{-d} option will read
+until a particular character rather than newline.
+
+@item
+The @code{return} builtin may be used to abort execution of scripts
+executed with the @code{.} or @code{source} builtins
+(@pxref{Bourne Shell Builtins}).
+
+@item
+Bash includes the @code{shopt} builtin, for finer control of shell
+optional capabilities (@pxref{The Shopt Builtin}), and allows these options
+to be set and unset at shell invocation (@pxref{Invoking Bash}).
+
+@item
+Bash has much more optional behavior controllable with the @code{set}
+builtin (@pxref{The Set Builtin}).
+
+@item
+The @samp{-x} (@option{xtrace}) option displays commands other than
+simple commands when performing an execution trace
+(@pxref{The Set Builtin}).
+
+@item
+The @code{test} builtin (@pxref{Bourne Shell Builtins})
+is slightly different, as it implements the @sc{posix} algorithm,
+which specifies the behavior based on the number of arguments.
+
+@item
+Bash includes the @code{caller} builtin, which displays the context of
+any active subroutine call (a shell function or a script executed with
+the @code{.} or @code{source} builtins). This supports the bash
+debugger.
+
+@item
+The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
+@code{DEBUG} pseudo-signal specification, similar to @code{EXIT}.
+Commands specified with a @code{DEBUG} trap are executed before every
+simple command, @code{for} command, @code{case} command,
+@code{select} command, every arithmetic @code{for} command, and before
+the first command executes in a shell function.
+The @code{DEBUG} trap is not inherited by shell functions unless the
+function has been given the @code{trace} attribute or the
+@code{functrace} option has been enabled using the @code{shopt} builtin.
+The @code{extdebug} shell option has additional effects on the
+@code{DEBUG} trap.
+
+The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an
+@code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}.
+Commands specified with an @code{ERR} trap are executed after a simple
+command fails, with a few exceptions.
+The @code{ERR} trap is not inherited by shell functions unless the
+@code{-o errtrace} option to the @code{set} builtin is enabled.
+
+The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
+@code{RETURN} pseudo-signal specification, similar to
+@code{EXIT} and @code{DEBUG}.
+Commands specified with an @code{RETURN} trap are executed before
+execution resumes after a shell function or a shell script executed with
+@code{.} or @code{source} returns.
+The @code{RETURN} trap is not inherited by shell functions unless the
+function has been given the @code{trace} attribute or the
+@code{functrace} option has been enabled using the @code{shopt} builtin.
+
+@item
+The Bash @code{type} builtin is more extensive and gives more information
+about the names it finds (@pxref{Bash Builtins}).
+
+@item
+The Bash @code{umask} builtin permits a @option{-p} option to cause
+the output to be displayed in the form of a @code{umask} command
+that may be reused as input (@pxref{Bourne Shell Builtins}).
+
+@item
+Bash implements a @code{csh}-like directory stack, and provides the
+@code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it
+(@pxref{The Directory Stack}).
+Bash also makes the directory stack visible as the value of the
+@env{DIRSTACK} shell variable.
+
+@item
+Bash interprets special backslash-escaped characters in the prompt
+strings when interactive (@pxref{Controlling the Prompt}).
+
+@item
+The Bash restricted mode is more useful (@pxref{The Restricted Shell});
+the SVR4.2 shell restricted mode is too limited.
+
+@item
+The @code{disown} builtin can remove a job from the internal shell
+job table (@pxref{Job Control Builtins}) or suppress the sending
+of @code{SIGHUP} to a job when the shell exits as the result of a
+@code{SIGHUP}.
+
+@item
+Bash includes a number of features to support a separate debugger for
+shell scripts.
+
+@item
+The SVR4.2 shell has two privilege-related builtins
+(@code{mldmode} and @code{priv}) not present in Bash.
+
+@item
+Bash does not have the @code{stop} or @code{newgrp} builtins.
+
+@item
+Bash does not use the @env{SHACCT} variable or perform shell accounting.
+
+@item
+The SVR4.2 @code{sh} uses a @env{TIMEOUT} variable like Bash uses
+@env{TMOUT}.
+
+@end itemize
+
+@noindent
+More features unique to Bash may be found in @ref{Bash Features}.
+
+
+@appendixsec Implementation Differences From The SVR4.2 Shell
+
+Since Bash is a completely new implementation, it does not suffer from
+many of the limitations of the SVR4.2 shell. For instance:
+
+@itemize @bullet
+
+@item
+Bash does not fork a subshell when redirecting into or out of
+a shell control structure such as an @code{if} or @code{while}
+statement.
+
+@item
+Bash does not allow unbalanced quotes. The SVR4.2 shell will silently
+insert a needed closing quote at @code{EOF} under certain circumstances.
+This can be the cause of some hard-to-find errors.
+
+@item
+The SVR4.2 shell uses a baroque memory management scheme based on
+trapping @code{SIGSEGV}. If the shell is started from a process with
+@code{SIGSEGV} blocked (e.g., by using the @code{system()} C library
+function call), it misbehaves badly.
+
+@item
+In a questionable attempt at security, the SVR4.2 shell,
+when invoked without the @option{-p} option, will alter its real
+and effective @sc{uid} and @sc{gid} if they are less than some
+magic threshold value, commonly 100.
+This can lead to unexpected results.
+
+@item
+The SVR4.2 shell does not allow users to trap @code{SIGSEGV},
+@code{SIGALRM}, or @code{SIGCHLD}.
+
+@item
+The SVR4.2 shell does not allow the @env{IFS}, @env{MAILCHECK},
+@env{PATH}, @env{PS1}, or @env{PS2} variables to be unset.
+
+@item
+The SVR4.2 shell treats @samp{^} as the undocumented equivalent of
+@samp{|}.
+
+@item
+Bash allows multiple option arguments when it is invoked (@code{-x -v});
+the SVR4.2 shell allows only one option argument (@code{-xv}). In
+fact, some versions of the shell dump core if the second argument begins
+with a @samp{-}.
+
+@item
+The SVR4.2 shell exits a script if any builtin fails; Bash exits
+a script only if one of the @sc{posix} special builtins fails, and
+only for certain failures, as enumerated in the @sc{posix} standard.
+
+@item
+The SVR4.2 shell behaves differently when invoked as @code{jsh}
+(it turns on job control).
+@end itemize
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+
+@include fdl.texi
+
+@node Indexes
+@appendix Indexes
+
+@menu
+* Builtin Index:: Index of Bash builtin commands.
+* Reserved Word Index:: Index of Bash reserved words.
+* Variable Index:: Quick reference helps you find the
+ variable you want.
+* Function Index:: Index of bindable Readline functions.
+* Concept Index:: General index for concepts described in
+ this manual.
+@end menu
+
+@node Builtin Index
+@appendixsec Index of Shell Builtin Commands
+@printindex bt
+
+@node Reserved Word Index
+@appendixsec Index of Shell Reserved Words
+@printindex rw
+
+@node Variable Index
+@appendixsec Parameter and Variable Index
+@printindex vr
+
+@node Function Index
+@appendixsec Function Index
+@printindex fn
+
+@node Concept Index
+@appendixsec Concept Index
+@printindex cp
+
+@bye
diff --git a/doc/builtins.0 b/doc/builtins.0
new file mode 100644
index 0000000..76f08b7
--- /dev/null
+++ b/doc/builtins.0
@@ -0,0 +1,1851 @@
+BASH_BUILTINS(1) General Commands Manual BASH_BUILTINS(1)
+
+
+
+NNAAMMEE
+ bash, :, ., [, alias, bg, bind, break, builtin, caller, cd, command,
+ compgen, complete, compopt, continue, declare, dirs, disown, echo,
+ enable, eval, exec, exit, export, false, fc, fg, getopts, hash, help,
+ history, jobs, kill, let, local, logout, mapfile, popd, printf, pushd,
+ pwd, read, readonly, return, set, shift, shopt, source, suspend, test,
+ times, trap, true, type, typeset, ulimit, umask, unalias, unset, wait -
+ bash built-in commands, see bbaasshh(1)
+
+BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS
+ Unless otherwise noted, each builtin command documented in this section
+ as accepting options preceded by -- accepts ---- to signify the end of the
+ options. The ::, ttrruuee, ffaallssee, and tteesstt/[[ builtins do not accept options
+ and do not treat ---- specially. The eexxiitt, llooggoouutt, rreettuurrnn, bbrreeaakk, ccoonn--
+ ttiinnuuee, lleett, and sshhiifftt builtins accept and process arguments beginning
+ with -- without requiring ----. Other builtins that accept arguments but
+ are not specified as accepting options interpret arguments beginning
+ with -- as invalid options and require ---- to prevent this interpreta-
+ tion.
+ :: [_a_r_g_u_m_e_n_t_s]
+ No effect; the command does nothing beyond expanding _a_r_g_u_m_e_n_t_s
+ and performing any specified redirections. The return status is
+ zero.
+
+ .. _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s]
+ ssoouurrccee _f_i_l_e_n_a_m_e [_a_r_g_u_m_e_n_t_s]
+ Read and execute commands from _f_i_l_e_n_a_m_e in the current shell
+ environment and return the exit status of the last command exe-
+ cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash,
+ filenames in PPAATTHH are used to find the directory containing
+ _f_i_l_e_n_a_m_e. The file searched for in PPAATTHH need not be executable.
+ When bbaasshh is not in _p_o_s_i_x _m_o_d_e, the current directory is
+ searched if no file is found in PPAATTHH. If the ssoouurrcceeppaatthh option
+ to the sshhoopptt builtin command is turned off, the PPAATTHH is not
+ searched. If any _a_r_g_u_m_e_n_t_s are supplied, they become the posi-
+ tional parameters when _f_i_l_e_n_a_m_e is executed. Otherwise the
+ positional parameters are unchanged. If the --TT option is
+ enabled, ssoouurrccee inherits any trap on DDEEBBUUGG; if it is not, any
+ DDEEBBUUGG trap string is saved and restored around the call to
+ ssoouurrccee, and ssoouurrccee unsets the DDEEBBUUGG trap while it executes. If
+ --TT is not set, and the sourced file changes the DDEEBBUUGG trap, the
+ new value is retained when ssoouurrccee completes. The return status
+ is the status of the last command exited within the script (0 if
+ no commands are executed), and false if _f_i_l_e_n_a_m_e is not found or
+ cannot be read.
+
+ aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
+ AAlliiaass with no arguments or with the --pp option prints the list of
+ aliases in the form aalliiaass _n_a_m_e=_v_a_l_u_e on standard output. When
+ arguments are supplied, an alias is defined for each _n_a_m_e whose
+ _v_a_l_u_e is given. A trailing space in _v_a_l_u_e causes the next word
+ to be checked for alias substitution when the alias is expanded.
+ For each _n_a_m_e in the argument list for which no _v_a_l_u_e is sup-
+ plied, the name and value of the alias is printed. AAlliiaass
+ returns true unless a _n_a_m_e is given for which no alias has been
+ defined.
+
+ bbgg [_j_o_b_s_p_e_c ...]
+ Resume each suspended job _j_o_b_s_p_e_c in the background, as if it
+ had been started with &&. If _j_o_b_s_p_e_c is not present, the shell's
+ notion of the _c_u_r_r_e_n_t _j_o_b is used. bbgg _j_o_b_s_p_e_c returns 0 unless
+ run when job control is disabled or, when run with job control
+ enabled, any specified _j_o_b_s_p_e_c was not found or was started
+ without job control.
+
+ bbiinndd [--mm _k_e_y_m_a_p] [--llppssvvPPSSVVXX]
+ bbiinndd [--mm _k_e_y_m_a_p] [--qq _f_u_n_c_t_i_o_n] [--uu _f_u_n_c_t_i_o_n] [--rr _k_e_y_s_e_q]
+ bbiinndd [--mm _k_e_y_m_a_p] --ff _f_i_l_e_n_a_m_e
+ bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d
+ bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e
+ bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d
+ Display current rreeaaddlliinnee key and function bindings, bind a key
+ sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee
+ variable. Each non-option argument is a command as it would
+ appear in _._i_n_p_u_t_r_c, but each binding or command must be passed
+ as a separate argument; e.g., '"\C-x\C-r": re-read-init-file'.
+ Options, if supplied, have the following meanings:
+ --mm _k_e_y_m_a_p
+ Use _k_e_y_m_a_p as the keymap to be affected by the subsequent
+ bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_-
+ _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d,
+ and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e
+ is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_-
+ _d_a_r_d.
+ --ll List the names of all rreeaaddlliinnee functions.
+ --pp Display rreeaaddlliinnee function names and bindings in such a
+ way that they can be re-read.
+ --PP List current rreeaaddlliinnee function names and bindings.
+ --ss Display rreeaaddlliinnee key sequences bound to macros and the
+ strings they output in such a way that they can be re-
+ read.
+ --SS Display rreeaaddlliinnee key sequences bound to macros and the
+ strings they output.
+ --vv Display rreeaaddlliinnee variable names and values in such a way
+ that they can be re-read.
+ --VV List current rreeaaddlliinnee variable names and values.
+ --ff _f_i_l_e_n_a_m_e
+ Read key bindings from _f_i_l_e_n_a_m_e.
+ --qq _f_u_n_c_t_i_o_n
+ Query about which keys invoke the named _f_u_n_c_t_i_o_n.
+ --uu _f_u_n_c_t_i_o_n
+ Unbind all keys bound to the named _f_u_n_c_t_i_o_n.
+ --rr _k_e_y_s_e_q
+ Remove any current binding for _k_e_y_s_e_q.
+ --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d
+ Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is
+ entered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets
+ the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd--
+ lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT variable to the
+ current location of the insertion point. If the executed
+ command changes the value of RREEAADDLLIINNEE__LLIINNEE or RREEAADD--
+ LLIINNEE__PPOOIINNTT, those new values will be reflected in the
+ editing state.
+ --XX List all key sequences bound to shell commands and the
+ associated commands in a format that can be reused as
+ input.
+
+ The return value is 0 unless an unrecognized option is given or
+ an error occurred.
+
+ bbrreeaakk [_n]
+ Exit from within a ffoorr, wwhhiillee, uunnttiill, or sseelleecctt loop. If _n is
+ specified, break _n levels. _n must be >= 1. If _n is greater
+ than the number of enclosing loops, all enclosing loops are
+ exited. The return value is 0 unless _n is not greater than or
+ equal to 1.
+
+ bbuuiillttiinn _s_h_e_l_l_-_b_u_i_l_t_i_n [_a_r_g_u_m_e_n_t_s]
+ Execute the specified shell builtin, passing it _a_r_g_u_m_e_n_t_s, and
+ return its exit status. This is useful when defining a function
+ whose name is the same as a shell builtin, retaining the func-
+ tionality of the builtin within the function. The ccdd builtin is
+ commonly redefined this way. The return status is false if
+ _s_h_e_l_l_-_b_u_i_l_t_i_n is not a shell builtin command.
+
+ ccaalllleerr [_e_x_p_r]
+ Returns the context of any active subroutine call (a shell func-
+ tion or a script executed with the .. or ssoouurrccee builtins). With-
+ out _e_x_p_r, ccaalllleerr displays the line number and source filename of
+ the current subroutine call. If a non-negative integer is sup-
+ plied as _e_x_p_r, ccaalllleerr displays the line number, subroutine name,
+ and source file corresponding to that position in the current
+ execution call stack. This extra information may be used, for
+ example, to print a stack trace. The current frame is frame 0.
+ The return value is 0 unless the shell is not executing a sub-
+ routine call or _e_x_p_r does not correspond to a valid position in
+ the call stack.
+
+ ccdd [--LL|[--PP [--ee]] [-@]] [_d_i_r]
+ Change the current directory to _d_i_r. if _d_i_r is not supplied,
+ the value of the HHOOMMEE shell variable is the default. Any addi-
+ tional arguments following _d_i_r are ignored. The variable CCDDPPAATTHH
+ defines the search path for the directory containing _d_i_r: each
+ directory name in CCDDPPAATTHH is searched for _d_i_r. Alternative
+ directory names in CCDDPPAATTHH are separated by a colon (:). A null
+ directory name in CCDDPPAATTHH is the same as the current directory,
+ i.e., ``..''. If _d_i_r begins with a slash (/), then CCDDPPAATTHH is not
+ used. The --PP option causes ccdd to use the physical directory
+ structure by resolving symbolic links while traversing _d_i_r and
+ before processing instances of _._. in _d_i_r (see also the --PP option
+ to the sseett builtin command); the --LL option forces symbolic links
+ to be followed by resolving the link after processing instances
+ of _._. in _d_i_r. If _._. appears in _d_i_r, it is processed by removing
+ the immediately previous pathname component from _d_i_r, back to a
+ slash or the beginning of _d_i_r. If the --ee option is supplied
+ with --PP, and the current working directory cannot be success-
+ fully determined after a successful directory change, ccdd will
+ return an unsuccessful status. On systems that support it, the
+ --@@ option presents the extended attributes associated with a
+ file as a directory. An argument of -- is converted to $$OOLLDDPPWWDD
+ before the directory change is attempted. If a non-empty direc-
+ tory name from CCDDPPAATTHH is used, or if -- is the first argument,
+ and the directory change is successful, the absolute pathname of
+ the new working directory is written to the standard output.
+ The return value is true if the directory was successfully
+ changed; false otherwise.
+
+ ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...]
+ Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function
+ lookup. Only builtin commands or commands found in the PPAATTHH are
+ executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is
+ performed using a default value for PPAATTHH that is guaranteed to
+ find all of the standard utilities. If either the --VV or --vv
+ option is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv
+ option causes a single word indicating the command or filename
+ used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a
+ more verbose description. If the --VV or --vv option is supplied,
+ the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If
+ neither option is supplied and an error occurred or _c_o_m_m_a_n_d can-
+ not be found, the exit status is 127. Otherwise, the exit sta-
+ tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d.
+
+ ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d]
+ Generate possible completion matches for _w_o_r_d according to the
+ _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee
+ builtin with the exception of --pp and --rr, and write the matches
+ to the standard output. When using the --FF or --CC options, the
+ various shell variables set by the programmable completion
+ facilities, while available, will not have useful values.
+
+ The matches will be generated in the same way as if the program-
+ mable completion code had generated them directly from a comple-
+ tion specification with the same flags. If _w_o_r_d is specified,
+ only those completions matching _w_o_r_d will be displayed.
+
+ The return value is true unless an invalid option is supplied,
+ or no matches were generated.
+
+ ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_-
+ _p_a_t] [--WW _w_o_r_d_l_i_s_t] [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d]
+ [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_f_i_x] _n_a_m_e [_n_a_m_e _._._.]
+ ccoommpplleettee --pprr [--DDEEII] [_n_a_m_e ...]
+ Specify how arguments to each _n_a_m_e should be completed. If the
+ --pp 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 --rr option removes a completion spec-
+ ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com-
+ pletion specifications. The --DD option indicates that other sup-
+ plied options and actions should apply to the ``default'' com-
+ mand completion; that is, completion attempted on a command for
+ which no completion has previously been defined. The --EE option
+ indicates that other supplied options and actions should apply
+ to ``empty'' command completion; that is, completion attempted
+ on a blank line. The --II option indicates that other supplied
+ options and actions should apply to completion on the inital
+ non-assignment word on the line, or after a command delimiter
+ such as ;; or ||, which is usually command name completion. If
+ multiple options are supplied, the --DD option takes precedence
+ over --EE, and both take precedence over --II. If any of --DD, --EE, or
+ --II are supplied, any other _n_a_m_e arguments are ignored; these
+ completions only apply to the case specified by the option.
+
+ The process of applying these completion specifications when
+ word completion is attempted is described above under PPrrooggrraamm--
+ mmaabbllee CCoommpplleettiioonn.
+
+ Other options, if specified, have the following meanings. The
+ arguments to the --GG, --WW, and --XX options (and, if necessary, the
+ --PP and --SS options) should be quoted to protect them from expan-
+ sion before the ccoommpplleettee builtin is invoked.
+ --oo _c_o_m_p_-_o_p_t_i_o_n
+ The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp-
+ spec's behavior beyond the simple generation of comple-
+ tions. _c_o_m_p_-_o_p_t_i_o_n may be one of:
+ bbaasshhddeeffaauulltt
+ Perform the rest of the default bbaasshh completions
+ if the compspec generates no matches.
+ ddeeffaauulltt Use readline's default filename completion if
+ the compspec generates no matches.
+ ddiirrnnaammeess
+ Perform directory name completion if the comp-
+ spec generates no matches.
+ ffiilleennaammeess
+ Tell readline that the compspec generates file-
+ names, so it can perform any filename-specific
+ processing (like adding a slash to directory
+ names, quoting special characters, or suppress-
+ ing trailing spaces). Intended to be used with
+ shell functions.
+ nnooqquuoottee Tell readline not to quote the completed words
+ if they are filenames (quoting filenames is the
+ default).
+ nnoossoorrtt Tell readline not to sort the list of possible
+ completions alphabetically.
+ nnoossppaaccee Tell readline not to append a space (the
+ default) to words completed at the end of the
+ line.
+ pplluussddiirrss
+ 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.
+ --AA _a_c_t_i_o_n
+ The _a_c_t_i_o_n may be one of the following to generate a
+ list of possible completions:
+ aalliiaass Alias names. May also be specified as --aa.
+ aarrrraayyvvaarr
+ Array variable names.
+ bbiinnddiinngg RReeaaddlliinnee key binding names.
+ bbuuiillttiinn Names of shell builtin commands. May also be
+ specified as --bb.
+ ccoommmmaanndd Command names. May also be specified as --cc.
+ ddiirreeccttoorryy
+ Directory names. May also be specified as --dd.
+ ddiissaabblleedd
+ Names of disabled shell builtins.
+ eennaabblleedd Names of enabled shell builtins.
+ eexxppoorrtt Names of exported shell variables. May also be
+ specified as --ee.
+ ffiillee File names. May also be specified as --ff.
+ ffuunnccttiioonn
+ Names of shell functions.
+ ggrroouupp Group names. May also be specified as --gg.
+ hheellppttooppiicc
+ Help topics as accepted by the hheellpp builtin.
+ hhoossttnnaammee
+ Hostnames, as taken from the file specified by
+ the HHOOSSTTFFIILLEE shell variable.
+ jjoobb Job names, if job control is active. May also
+ be specified as --jj.
+ kkeeyywwoorrdd Shell reserved words. May also be specified as
+ --kk.
+ rruunnnniinngg Names of running jobs, if job control is active.
+ sseerrvviiccee Service names. May also be specified as --ss.
+ sseettoopptt Valid arguments for the --oo option to the sseett
+ builtin.
+ sshhoopptt Shell option names as accepted by the sshhoopptt
+ builtin.
+ ssiiggnnaall Signal names.
+ ssttooppppeedd Names of stopped jobs, if job control is active.
+ uusseerr User names. May also be specified as --uu.
+ vvaarriiaabbllee
+ Names of all shell variables. May also be spec-
+ ified as --vv.
+ --CC _c_o_m_m_a_n_d
+ _c_o_m_m_a_n_d is executed in a subshell environment, and its
+ output is used as the possible completions.
+ --FF _f_u_n_c_t_i_o_n
+ The shell function _f_u_n_c_t_i_o_n is executed in the current
+ shell environment. When the function is executed, the
+ first argument ($$11) is the name of the command whose
+ arguments are being completed, the second argument ($$22)
+ is the word being completed, and the third argument ($$33)
+ is the word preceding the word being completed on the
+ current command line. When it finishes, the possible
+ completions are retrieved from the value of the CCOOMMPPRREE--
+ PPLLYY array variable.
+ --GG _g_l_o_b_p_a_t
+ The pathname expansion pattern _g_l_o_b_p_a_t is expanded to
+ generate the possible completions.
+ --PP _p_r_e_f_i_x
+ _p_r_e_f_i_x is added at the beginning of each possible com-
+ pletion after all other options have been applied.
+ --SS _s_u_f_f_i_x
+ _s_u_f_f_i_x is appended to each possible completion after all
+ other options have been applied.
+ --WW _w_o_r_d_l_i_s_t
+ The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS
+ special variable as delimiters, and each resultant word
+ is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t,
+ in order to provide a mechanism for the words to contain
+ shell metacharacters or characters in the value of IIFFSS.
+ The possible completions are the members of the resul-
+ tant list which match the word being completed.
+ --XX _f_i_l_t_e_r_p_a_t
+ _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion.
+ It is applied to the list of possible completions gener-
+ ated by the preceding options and arguments, and each
+ completion matching _f_i_l_t_e_r_p_a_t is removed from the list.
+ A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this
+ case, any completion not matching _f_i_l_t_e_r_p_a_t is removed.
+
+ The return value is true unless an invalid option is supplied,
+ an option other than --pp or --rr is supplied without a _n_a_m_e argu-
+ ment, an attempt is made to remove a completion specification
+ for a _n_a_m_e for which no specification exists, or an error occurs
+ adding a completion specification.
+
+ ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEEII] [++oo _o_p_t_i_o_n] [_n_a_m_e]
+ Modify completion options for each _n_a_m_e according to the
+ _o_p_t_i_o_ns, or for the currently-executing completion if no _n_a_m_es
+ are supplied. If no _o_p_t_i_o_ns are given, display the completion
+ options for each _n_a_m_e or the current completion. The possible
+ values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin
+ described above. The --DD option indicates that other supplied
+ options should apply to the ``default'' command completion; that
+ is, completion attempted on a command for which no completion
+ has previously been defined. The --EE option indicates that other
+ supplied options should apply to ``empty'' command completion;
+ that is, completion attempted on a blank line. The --II option
+ indicates that other supplied options should apply to completion
+ on the inital non-assignment word on the line, or after a com-
+ mand delimiter such as ;; or ||, which is usually command name
+ completion.
+
+ The return value is true unless an invalid option is supplied,
+ an attempt is made to modify the options for a _n_a_m_e for which no
+ completion specification exists, or an output error occurs.
+
+ ccoonnttiinnuuee [_n]
+ Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or
+ sseelleecctt loop. If _n is specified, resume at the _nth enclosing
+ loop. _n must be >= 1. If _n is greater than the number of
+ enclosing loops, the last enclosing loop (the ``top-level''
+ loop) is resumed. The return value is 0 unless _n is not greater
+ than or equal to 1.
+
+ ddeeccllaarree [--aaAAffFFggiillnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
+ ttyyppeesseett [--aaAAffFFggiillnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
+ Declare variables and/or give them attributes. If no _n_a_m_es are
+ given then display the values of variables. The --pp option will
+ display the attributes and values of each _n_a_m_e. When --pp is used
+ with _n_a_m_e arguments, additional options, other than --ff and --FF,
+ are ignored. When --pp is supplied without _n_a_m_e arguments, it
+ will display the attributes and values of all variables having
+ the attributes specified by the additional options. If no other
+ options are supplied with --pp, ddeeccllaarree will display the
+ attributes and values of all shell variables. The --ff option
+ will restrict the display to shell functions. The --FF option
+ inhibits the display of function definitions; only the function
+ name and attributes are printed. If the eexxttddeebbuugg shell option
+ is enabled using sshhoopptt, the source file name and line number
+ where each _n_a_m_e is defined are displayed as well. The --FF option
+ implies --ff. The --gg option forces variables to be created or
+ modified at the global scope, even when ddeeccllaarree is executed in a
+ shell function. It is ignored in all other cases. The follow-
+ ing options can be used to restrict output to variables with the
+ specified attribute or to give variables attributes:
+ --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss
+ above).
+ --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss
+ above).
+ --ff Use function names only.
+ --ii The variable is treated as an integer; arithmetic evalua-
+ tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when
+ the variable is assigned a value.
+ --ll When the variable is assigned a value, all upper-case
+ characters are converted to lower-case. The upper-case
+ attribute is disabled.
+ --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name
+ reference to another variable. That other variable is
+ defined by the value of _n_a_m_e. All references, assign-
+ ments, and attribute modifications to _n_a_m_e, except those
+ using or changing the --nn attribute itself, are performed
+ on the variable referenced by _n_a_m_e's value. The nameref
+ attribute cannot be applied to array variables.
+ --rr Make _n_a_m_es readonly. These names cannot then be assigned
+ values by subsequent assignment statements or unset.
+ --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions
+ inherit the DDEEBBUUGG and RREETTUURRNN traps from the calling
+ shell. The trace attribute has no special meaning for
+ variables.
+ --uu When the variable is assigned a value, all lower-case
+ characters are converted to upper-case. The lower-case
+ attribute is disabled.
+ --xx Mark _n_a_m_es for export to subsequent commands via the
+ environment.
+
+ Using `+' instead of `-' turns off the attribute instead, with
+ the exceptions that ++aa and ++AA may not be used to destroy array
+ variables and ++rr will not remove the readonly attribute. When
+ used in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e local, as
+ with the llooccaall command, unless the --gg option is supplied. If a
+ variable name is followed by =_v_a_l_u_e, the value of the variable
+ is set to _v_a_l_u_e. When using --aa or --AA and the compound assign-
+ ment syntax to create array variables, additional attributes do
+ not take effect until subsequent assignments. The return value
+ is 0 unless an invalid option is encountered, an attempt is made
+ to define a function using ``-f foo=bar'', an attempt is made to
+ assign a value to a readonly variable, an attempt is made to
+ assign a value to an array variable without using the compound
+ assignment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a
+ valid shell variable name, an attempt is made to turn off read-
+ only 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 --ff.
+
+ ddiirrss [[--ccllppvv]] [[++_n]] [[--_n]]
+ Without options, displays the list of currently remembered
+ directories. The default display is on a single line with
+ directory names separated by spaces. Directories are added to
+ the list with the ppuusshhdd command; the ppooppdd command removes
+ entries from the list. The current directory is always the
+ first directory in the stack.
+ --cc Clears the directory stack by deleting all of the
+ entries.
+ --ll Produces a listing using full pathnames; the default
+ listing format uses a tilde to denote the home directory.
+ --pp Print the directory stack with one entry per line.
+ --vv Print the directory stack with one entry per line, pre-
+ fixing each entry with its index in the stack.
+ ++_n Displays the _nth entry counting from the left of the list
+ shown by ddiirrss when invoked without options, starting with
+ zero.
+ --_n Displays the _nth entry counting from the right of the
+ list shown by ddiirrss when invoked without options, starting
+ with zero.
+
+ The return value is 0 unless an invalid option is supplied or _n
+ indexes beyond the end of the directory stack.
+
+ ddiissoowwnn [--aarr] [--hh] [_j_o_b_s_p_e_c ... | _p_i_d ... ]
+ Without options, remove each _j_o_b_s_p_e_c from the table of active
+ jobs. If _j_o_b_s_p_e_c is not present, and neither the --aa nor the --rr
+ option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. If the --hh option
+ is given, each _j_o_b_s_p_e_c is not removed from the table, but is
+ marked so that SSIIGGHHUUPP is not sent to the job if the shell
+ receives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is supplied, the --aa option
+ means to remove or mark all jobs; the --rr option without a _j_o_b_-
+ _s_p_e_c argument restricts operation to running jobs. The return
+ value is 0 unless a _j_o_b_s_p_e_c does not specify a valid job.
+
+ eecchhoo [--nneeEE] [_a_r_g ...]
+ Output the _a_r_gs, separated by spaces, followed by a newline.
+ The return status is 0 unless a write error occurs. If --nn is
+ specified, the trailing newline is suppressed. If the --ee option
+ is given, interpretation of the following backslash-escaped
+ characters is enabled. The --EE option disables the interpreta-
+ tion of these escape characters, even on systems where they are
+ interpreted by default. The xxppgg__eecchhoo shell option may be used
+ to dynamically determine whether or not eecchhoo expands these
+ escape characters by default. eecchhoo does not interpret ---- to
+ mean the end of options. eecchhoo interprets the following escape
+ sequences:
+ \\aa alert (bell)
+ \\bb backspace
+ \\cc suppress further output
+ \\ee
+ \\EE an escape character
+ \\ff form feed
+ \\nn new line
+ \\rr carriage return
+ \\tt horizontal tab
+ \\vv vertical tab
+ \\\\ backslash
+ \\00_n_n_n the eight-bit character whose value is the octal value
+ _n_n_n (zero to three octal digits)
+ \\xx_H_H the eight-bit character whose value is the hexadecimal
+ value _H_H (one or two hex digits)
+ \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value _H_H_H_H (one to four hex digits)
+ \\UU_H_H_H_H_H_H_H_H
+ the Unicode (ISO/IEC 10646) character whose value is the
+ hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits)
+
+ eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...]
+ 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 --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are
+ enabled. For example, to use the tteesstt binary found via the PPAATTHH
+ instead of the shell builtin version, run ``enable -n test''.
+ The --ff option means to load the new builtin command _n_a_m_e from
+ shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading.
+ The --dd option will delete a builtin previously loaded with --ff.
+ If no _n_a_m_e arguments are given, or if the --pp option is supplied,
+ a list of shell builtins is printed. With no other option argu-
+ ments, the list consists of all enabled shell builtins. If --nn
+ is supplied, only disabled builtins are printed. If --aa is sup-
+ plied, the list printed includes all builtins, with an indica-
+ tion of whether or not each is enabled. If --ss is supplied, the
+ output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return
+ value is 0 unless a _n_a_m_e is not a shell builtin or there is an
+ error loading a new builtin from a shared object.
+
+ eevvaall [_a_r_g ...]
+ The _a_r_gs are read and concatenated together into a single com-
+ mand. This command is then read and executed by the shell, and
+ its exit status is returned as the value of eevvaall. If there are
+ no _a_r_g_s, or only null arguments, eevvaall returns 0.
+
+ eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]]
+ If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process
+ is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If
+ the --ll option is supplied, the shell places a dash at the begin-
+ ning of the zeroth argument passed to _c_o_m_m_a_n_d. This is what
+ _l_o_g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with
+ an empty environment. If --aa is supplied, the shell passes _n_a_m_e
+ as the zeroth argument to the executed command. If _c_o_m_m_a_n_d can-
+ not be executed for some reason, a non-interactive shell exits,
+ unless the eexxeeccffaaiill shell option is enabled. In that case, it
+ returns failure. An interactive shell returns failure if the
+ file cannot be executed. A subshell exits unconditionally if
+ eexxeecc fails. If _c_o_m_m_a_n_d is not specified, any redirections take
+ effect in the current shell, and the return status is 0. If
+ there is a redirection error, the return status is 1.
+
+ eexxiitt [_n]
+ Cause the shell to exit with a status of _n. If _n is omitted,
+ the exit status is that of the last command executed. A trap on
+ EEXXIITT is executed before the shell terminates.
+
+ eexxppoorrtt [--ffnn] [_n_a_m_e[=_w_o_r_d]] ...
+ eexxppoorrtt --pp
+ The supplied _n_a_m_e_s are marked for automatic export to the envi-
+ ronment of subsequently executed commands. If the --ff option is
+ given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or
+ if the --pp option is supplied, a list of names of all exported
+ variables is printed. The --nn option causes the export property
+ to be removed from each _n_a_m_e. If a variable name is followed by
+ =_w_o_r_d, the value of the variable is set to _w_o_r_d. eexxppoorrtt returns
+ an exit status of 0 unless an invalid option is encountered, one
+ of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup-
+ plied with a _n_a_m_e that is not a function.
+
+ ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t]
+ ffcc --ss [_p_a_t=_r_e_p] [_c_m_d]
+ The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t
+ from the history list and displays or edits and re-executes
+ them. _F_i_r_s_t and _l_a_s_t may be specified as a string (to locate
+ the last 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 _l_a_s_t is not
+ specified, it is set to the current command for listing (so that
+ ``fc -l -10'' prints the last 10 commands) and to _f_i_r_s_t other-
+ wise. If _f_i_r_s_t is not specified, it is set to the previous com-
+ mand for editing and -16 for listing.
+
+ The --nn option suppresses the command numbers when listing. The
+ --rr option reverses the order of the commands. If the --ll option
+ is given, the commands are listed on standard output. Other-
+ wise, the editor given by _e_n_a_m_e is invoked on a file containing
+ those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT
+ variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set.
+ If neither variable is set, _v_i is used. When editing is com-
+ plete, the edited commands are echoed and executed.
+
+ In the second form, _c_o_m_m_a_n_d is re-executed after each instance
+ of _p_a_t is replaced by _r_e_p. _C_o_m_m_a_n_d is interpreted the same as
+ _f_i_r_s_t above. A useful alias to use with this is ``r="fc -s"'',
+ so that typing ``r cc'' runs the last command beginning with
+ ``cc'' and typing ``r'' re-executes the last command.
+
+ If the first form is used, the return value is 0 unless an
+ invalid option is encountered or _f_i_r_s_t or _l_a_s_t specify history
+ lines out of range. If the --ee option is supplied, the return
+ value is the value of the last command executed or failure if an
+ error occurs with the temporary file of commands. If the second
+ form is used, the return status is that of the command re-exe-
+ cuted, unless _c_m_d does not specify a valid history line, in
+ which case ffcc returns failure.
+
+ ffgg [_j_o_b_s_p_e_c]
+ Resume _j_o_b_s_p_e_c in the foreground, and make it the current job.
+ If _j_o_b_s_p_e_c is not present, the shell's notion of the _c_u_r_r_e_n_t _j_o_b
+ is used. The return value is that of the command placed into
+ the foreground, or failure if run when job control is disabled
+ or, when run with job control enabled, if _j_o_b_s_p_e_c does not spec-
+ ify a valid job or _j_o_b_s_p_e_c specifies a job that was started
+ without job control.
+
+ ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g_s]
+ ggeettooppttss is used by shell procedures to parse positional parame-
+ ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog-
+ nized; if a character is followed by a colon, the option is
+ expected to have an argument, which should be separated from it
+ by white space. The colon and question mark characters may not
+ be used as option characters. Each time it is invoked, ggeettooppttss
+ places the next option in the shell variable _n_a_m_e, initializing
+ _n_a_m_e if it does not exist, and the index of the next argument to
+ be processed into the variable OOPPTTIINNDD. OOPPTTIINNDD is initialized to
+ 1 each time the shell or a shell script is invoked. When an
+ option requires an argument, ggeettooppttss places that argument into
+ the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automati-
+ cally; it must be manually reset between multiple calls to
+ ggeettooppttss within the same shell invocation if a new set of parame-
+ ters is to be used.
+
+ When the end of options is encountered, ggeettooppttss exits with a
+ return value greater than zero. OOPPTTIINNDD is set to the index of
+ the first non-option argument, and _n_a_m_e is set to ?.
+
+ ggeettooppttss normally parses the positional parameters, but if more
+ arguments are given in _a_r_g_s, ggeettooppttss parses those instead.
+
+ ggeettooppttss can report errors in two ways. If the first character
+ of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In
+ normal operation, diagnostic messages are printed when invalid
+ options or missing option arguments are encountered. If the
+ variable OOPPTTEERRRR is set to 0, no error messages will be dis-
+ played, even if the first character of _o_p_t_s_t_r_i_n_g is not a colon.
+
+ If an invalid option is seen, ggeettooppttss places ? into _n_a_m_e and, if
+ not silent, prints an error message and unsets OOPPTTAARRGG. If
+ ggeettooppttss is silent, the option character found is placed in
+ OOPPTTAARRGG and no diagnostic message is printed.
+
+ If a required argument is not found, and ggeettooppttss is not silent,
+ a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a
+ diagnostic message is printed. If ggeettooppttss is silent, then a
+ colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option
+ character found.
+
+ ggeettooppttss returns true if an option, specified or unspecified, is
+ found. It returns false if the end of options is encountered or
+ an error occurs.
+
+ hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e]
+ Each time hhaasshh is invoked, the full pathname of the command _n_a_m_e
+ is determined by searching the directories in $$PPAATTHH and remem-
+ bered. Any previously-remembered pathname is discarded. If the
+ --pp option is supplied, no path search is performed, and _f_i_l_e_n_a_m_e
+ is used as the full filename of the command. The --rr option
+ causes the shell to forget all remembered locations. The --dd
+ option causes the shell to forget the remembered location of
+ each _n_a_m_e. If the --tt option is supplied, the full pathname to
+ which each _n_a_m_e corresponds is printed. If multiple _n_a_m_e argu-
+ ments are supplied with --tt, the _n_a_m_e is printed before the
+ hashed full pathname. The --ll option causes output to be dis-
+ played in a format that may be reused as input. If no arguments
+ are given, or if only --ll is supplied, information about remem-
+ bered commands is printed. The return status is true unless a
+ _n_a_m_e is not found or an invalid option is supplied.
+
+ hheellpp [--ddmmss] [_p_a_t_t_e_r_n]
+ Display helpful information about builtin commands. If _p_a_t_t_e_r_n
+ is specified, hheellpp gives detailed help on all commands matching
+ _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control
+ structures is printed.
+ --dd Display a short description of each _p_a_t_t_e_r_n
+ --mm Display the description of each _p_a_t_t_e_r_n in a manpage-like
+ format
+ --ss Display only a short usage synopsis for each _p_a_t_t_e_r_n
+
+ The return status is 0 unless no command matches _p_a_t_t_e_r_n.
+
+ hhiissttoorryy [[_n]]
+ hhiissttoorryy --cc
+ hhiissttoorryy --dd _o_f_f_s_e_t
+ hhiissttoorryy --dd _s_t_a_r_t-_e_n_d
+ hhiissttoorryy --aannrrww [_f_i_l_e_n_a_m_e]
+ hhiissttoorryy --pp _a_r_g [_a_r_g _._._.]
+ hhiissttoorryy --ss _a_r_g [_a_r_g _._._.]
+ With no options, display the command history list with line num-
+ bers. Lines listed with a ** have been modified. An argument of
+ _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE--
+ FFOORRMMAATT is set and not null, it is used as a format string for
+ _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis-
+ played history entry. No intervening blank is printed between
+ the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is
+ supplied, it is used as the name of the history file; if not,
+ the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the
+ following meanings:
+ --cc Clear the history list by deleting all the entries.
+ --dd _o_f_f_s_e_t
+ Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t
+ is negative, it is interpreted as relative to one greater
+ than the last history position, so negative indices count
+ back from the end of the history, and an index of -1
+ refers to the current hhiissttoorryy --dd command.
+ --dd _s_t_a_r_t-_e_n_d
+ Delete the history entries between positions _s_t_a_r_t and
+ _e_n_d, inclusive. Positive and negative values for _s_t_a_r_t
+ and _e_n_d are interpreted as described above.
+ --aa Append the ``new'' history lines to the history file.
+ These are history lines entered since the beginning of
+ the current bbaasshh session, but not already appended to the
+ history file.
+ --nn Read the history lines not already read from the history
+ file into the current history list. These are lines
+ appended to the history file since the beginning of the
+ current bbaasshh session.
+ --rr Read the contents of the history file and append them to
+ the current history list.
+ --ww Write the current history list to the history file, over-
+ writing the history file's contents.
+ --pp Perform history substitution on the following _a_r_g_s and
+ display the result on the standard output. Does not
+ store the results in the history list. Each _a_r_g must be
+ quoted to disable normal history expansion.
+ --ss Store the _a_r_g_s in the history list as a single entry.
+ The last command in the history list is removed before
+ the _a_r_g_s are added.
+
+ If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa-
+ tion associated with each history entry is written to the his-
+ tory file, marked with the history comment character. When the
+ history file is read, lines beginning with the history comment
+ character followed immediately by a digit are interpreted as
+ timestamps for the following history entry. The return value is
+ 0 unless an invalid option is encountered, an error occurs while
+ reading or writing the history file, an invalid _o_f_f_s_e_t is sup-
+ plied as an argument to --dd, or the history expansion supplied as
+ an argument to --pp fails.
+
+ jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ]
+ jjoobbss --xx _c_o_m_m_a_n_d [ _a_r_g_s ... ]
+ The first form lists the active jobs. The options have the fol-
+ lowing meanings:
+ --ll List process IDs in addition to the normal information.
+ --nn Display information only about jobs that have changed
+ status since the user was last notified of their status.
+ --pp List only the process ID of the job's process group
+ leader.
+ --rr Display only running jobs.
+ --ss Display only stopped jobs.
+
+ If _j_o_b_s_p_e_c is given, output is restricted to information about
+ that job. The return status is 0 unless an invalid option is
+ encountered or an invalid _j_o_b_s_p_e_c is supplied.
+
+ If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in
+ _c_o_m_m_a_n_d or _a_r_g_s with the corresponding process group ID, and
+ executes _c_o_m_m_a_n_d passing it _a_r_g_s, returning its exit status.
+
+ kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] [_p_i_d | _j_o_b_s_p_e_c] ...
+ kkiillll --ll|--LL [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s]
+ Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes
+ named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive
+ signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or
+ a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not
+ present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the
+ signal names. If any arguments are supplied when --ll is given,
+ the names of the signals corresponding to the arguments are
+ listed, and the return status is 0. The _e_x_i_t___s_t_a_t_u_s argument to
+ --ll is a number specifying either a signal number or the exit
+ status of a process terminated by a signal. The --LL option is
+ equivalent to --ll. kkiillll returns true if at least one signal was
+ successfully sent, or false if an error occurs or an invalid
+ option is encountered.
+
+ lleett _a_r_g [_a_r_g ...]
+ Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH--
+ MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett
+ returns 1; 0 is returned otherwise.
+
+ llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ... | - ]
+ For each argument, a local variable named _n_a_m_e is created, and
+ assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted
+ by ddeeccllaarree. When llooccaall is used within a function, it causes the
+ variable _n_a_m_e to have a visible scope restricted to that func-
+ tion and its children. If _n_a_m_e is -, the set of shell options
+ is made local to the function in which llooccaall is invoked: shell
+ options changed using the sseett builtin inside the function are
+ restored to their original values when the function returns.
+ With no operands, llooccaall writes a list of local variables to the
+ standard output. It is an error to use llooccaall when not within a
+ function. The return status is 0 unless llooccaall is used outside a
+ function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a readonly
+ variable.
+
+ llooggoouutt Exit a login shell.
+
+ mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC
+ _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y]
+ rreeaaddaarrrraayy [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC
+ _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y]
+ Read lines from the standard input into the indexed array vari-
+ able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup-
+ plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if
+ supplied, have the following meanings:
+ --dd The first character of _d_e_l_i_m is used to terminate each
+ input line, rather than newline. If _d_e_l_i_m is the empty
+ string, mmaappffiillee will terminate a line when it reads a NUL
+ character.
+ --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are
+ copied.
+ --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default
+ index is 0.
+ --ss Discard the first _c_o_u_n_t lines read.
+ --tt Remove a trailing _d_e_l_i_m (default newline) from each line
+ read.
+ --uu Read lines from file descriptor _f_d instead of the stan-
+ dard input.
+ --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The
+ --cc option specifies _q_u_a_n_t_u_m.
+ --cc Specify the number of lines read between each call to
+ _c_a_l_l_b_a_c_k.
+
+ If --CC is specified without --cc, the default quantum is 5000.
+ When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next
+ array element to be assigned and the line to be assigned to that
+ element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after
+ the line is read but before the array element is assigned.
+
+ If not supplied with an explicit origin, mmaappffiillee will clear
+ _a_r_r_a_y before assigning to it.
+
+ mmaappffiillee returns successfully unless an invalid option or option
+ argument is supplied, _a_r_r_a_y is invalid or unassignable, or if
+ _a_r_r_a_y is not an indexed array.
+
+ ppooppdd [-nn] [+_n] [-_n]
+ Removes entries from the directory stack. With no arguments,
+ removes the top directory from the stack, and performs a ccdd to
+ the new top directory. Arguments, if supplied, have the follow-
+ ing meanings:
+ --nn Suppresses the normal change of directory when removing
+ directories from the stack, so that only the stack is
+ manipulated.
+ ++_n Removes the _nth entry counting from the left of the list
+ shown by ddiirrss, starting with zero. For example: ``popd
+ +0'' removes the first directory, ``popd +1'' the second.
+ --_n Removes the _nth entry counting from the right of the list
+ shown by ddiirrss, starting with zero. For example: ``popd
+ -0'' removes the last directory, ``popd -1'' the next to
+ last.
+
+ If the ppooppdd command is successful, a ddiirrss is performed as well,
+ and the return status is 0. ppooppdd returns false if an invalid
+ option is encountered, the directory stack is empty, a non-exis-
+ tent directory stack entry is specified, or the directory change
+ fails.
+
+ pprriinnttff [--vv _v_a_r] _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s]
+ Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the
+ control of the _f_o_r_m_a_t. The --vv option causes the output to be
+ assigned to the variable _v_a_r rather than being printed to the
+ standard output.
+
+ The _f_o_r_m_a_t 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 _a_r_g_u_m_e_n_t. In
+ addition to the standard _p_r_i_n_t_f(1) format specifications, pprriinnttff
+ interprets the following extensions:
+ %%bb causes pprriinnttff to expand backslash escape sequences in the
+ corresponding _a_r_g_u_m_e_n_t in the same way as eecchhoo --ee.
+ %%qq causes pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a
+ format that can be reused as shell input.
+ %%((_d_a_t_e_f_m_t))TT
+ causes pprriinnttff to output the date-time string resulting
+ from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3).
+ The corresponding _a_r_g_u_m_e_n_t is an integer representing the
+ number of seconds since the epoch. Two special argument
+ values may be used: -1 represents the current time, and
+ -2 represents the time the shell was invoked. If no
+ argument is specified, conversion behaves as if -1 had
+ been given. This is an exception to the usual pprriinnttff
+ behavior.
+
+ Arguments to non-string format specifiers are treated as C con-
+ stants, except that a leading plus or minus sign is allowed, and
+ if the leading character is a single or double quote, the value
+ is the ASCII value of the following character.
+
+ The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_-
+ _m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s 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.
+
+ ppuusshhdd [--nn] [+_n] [-_n]
+ ppuusshhdd [--nn] [_d_i_r]
+ Adds a directory to the top of the directory stack, or rotates
+ the stack, making the new top of the stack the current working
+ directory. With no arguments, ppuusshhdd exchanges the top two
+ directories and returns 0, unless the directory stack is empty.
+ Arguments, if supplied, have the following meanings:
+ --nn Suppresses the normal change of directory when rotating
+ or adding directories to the stack, so that only the
+ stack is manipulated.
+ ++_n Rotates the stack so that the _nth directory (counting
+ from the left of the list shown by ddiirrss, starting with
+ zero) is at the top.
+ --_n Rotates the stack so that the _nth directory (counting
+ from the right of the list shown by ddiirrss, starting with
+ zero) is at the top.
+ _d_i_r Adds _d_i_r to the directory stack at the top, making it the
+ new current working directory as if it had been supplied
+ as the argument to the ccdd builtin.
+
+ If the ppuusshhdd command is successful, a ddiirrss is performed as well.
+ If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r
+ fails. With the second form, ppuusshhdd returns 0 unless the direc-
+ tory stack is empty, a non-existent directory stack element is
+ specified, or the directory change to the specified new current
+ directory fails.
+
+ ppwwdd [--LLPP]
+ Print the absolute pathname of the current working directory.
+ The pathname printed contains no symbolic links if the --PP option
+ is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command
+ is enabled. If the --LL option is used, the pathname printed may
+ contain symbolic links. The return status is 0 unless an error
+ occurs while reading the name of the current directory or an
+ invalid option is supplied.
+
+ rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp
+ _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...]
+ One line is read from the standard input, or from the file
+ descriptor _f_d supplied as an argument to the --uu option, split
+ into words as described above under WWoorrdd SSpplliittttiinngg, and the
+ first word is assigned to the first _n_a_m_e, the second word to the
+ second _n_a_m_e, and so on. If there are more words than names, the
+ remaining words and their intervening delimiters are assigned to
+ the last _n_a_m_e. If there are fewer words read from the input
+ stream than names, the remaining names are assigned empty val-
+ ues. The characters in IIFFSS are used to split the line into
+ words using the same rules the shell uses for expansion
+ (described above under WWoorrdd SSpplliittttiinngg). The backslash character
+ (\\) may be used to remove any special meaning for the next char-
+ acter read and for line continuation. Options, if supplied,
+ have the following meanings:
+ --aa _a_n_a_m_e
+ The words are assigned to sequential indices of the array
+ variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any
+ new values are assigned. Other _n_a_m_e arguments are
+ ignored.
+ --dd _d_e_l_i_m
+ The first character of _d_e_l_i_m is used to terminate the
+ input line, rather than newline. If _d_e_l_i_m is the empty
+ string, rreeaadd will terminate a line when it reads a NUL
+ character.
+ --ee If the standard input is coming from a terminal, rreeaaddlliinnee
+ (see RREEAADDLLIINNEE above) is used to obtain the line. Read-
+ line uses the current (or default, if line editing was
+ not previously active) editing settings, but uses Read-
+ line's default filename completion.
+ --ii _t_e_x_t
+ If rreeaaddlliinnee is being used to read the line, _t_e_x_t is
+ placed into the editing buffer before editing begins.
+ --nn _n_c_h_a_r_s
+ rreeaadd returns after reading _n_c_h_a_r_s characters rather than
+ waiting for a complete line of input, but honors a delim-
+ iter if fewer than _n_c_h_a_r_s characters are read before the
+ delimiter.
+ --NN _n_c_h_a_r_s
+ rreeaadd returns after reading exactly _n_c_h_a_r_s characters
+ rather than waiting for a complete line of input, unless
+ EOF is encountered or rreeaadd times out. Delimiter charac-
+ ters encountered in the input are not treated specially
+ and do not cause rreeaadd to return until _n_c_h_a_r_s characters
+ are read. The result is not split on the characters in
+ IIFFSS; the intent is that the variable is assigned exactly
+ the characters read (with the exception of backslash; see
+ the --rr option below).
+ --pp _p_r_o_m_p_t
+ Display _p_r_o_m_p_t on standard error, without a trailing new-
+ line, before attempting to read any input. The prompt is
+ displayed only if input is coming from a terminal.
+ --rr Backslash does not act as an escape character. The back-
+ slash is considered to be part of the line. In particu-
+ lar, a backslash-newline pair may not then be used as a
+ line continuation.
+ --ss Silent mode. If input is coming from a terminal, charac-
+ ters are not echoed.
+ --tt _t_i_m_e_o_u_t
+ Cause rreeaadd to time out and return failure if a complete
+ line of input (or a specified number of characters) is
+ not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a deci-
+ mal number with a fractional portion following the deci-
+ mal point. This option is only effective if rreeaadd is
+ reading input from a terminal, pipe, or other special
+ file; it has no effect when reading from regular files.
+ If rreeaadd times out, rreeaadd saves any partial input read into
+ the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd
+ returns immediately, without trying to read any data.
+ The exit status is 0 if input is available on the speci-
+ fied file descriptor, non-zero otherwise. The exit sta-
+ tus is greater than 128 if the timeout is exceeded.
+ --uu _f_d Read input from file descriptor _f_d.
+
+ If no _n_a_m_e_s are supplied, the line read is assigned to the vari-
+ able RREEPPLLYY. The exit status is zero, unless end-of-file is
+ encountered, rreeaadd times out (in which case the status is greater
+ than 128), a variable assignment error (such as assigning to a
+ readonly variable) occurs, or an invalid file descriptor is sup-
+ plied as the argument to --uu.
+
+ rreeaaddoonnllyy [--aaAAff] [--pp] [_n_a_m_e[=_w_o_r_d] ...]
+ The given _n_a_m_e_s are marked readonly; the values of these _n_a_m_e_s
+ may not be changed by subsequent assignment. If the --ff option
+ is supplied, the functions corresponding to the _n_a_m_e_s are so
+ marked. The --aa option restricts the variables to indexed
+ arrays; the --AA option restricts the variables to associative
+ arrays. If both options are supplied, --AA takes precedence. If
+ no _n_a_m_e arguments are given, or if the --pp option is supplied, a
+ list of all readonly names is printed. The other options may be
+ used to restrict the output to a subset of the set of readonly
+ names. The --pp option causes output to be displayed in a format
+ that may be reused as input. If a variable name is followed by
+ =_w_o_r_d, the value of the variable is set to _w_o_r_d. The return
+ status is 0 unless an invalid option is encountered, one of the
+ _n_a_m_e_s is not a valid shell variable name, or --ff is supplied with
+ a _n_a_m_e that is not a function.
+
+ rreettuurrnn [_n]
+ Causes a function to stop executing and return the value speci-
+ fied by _n to its caller. If _n is omitted, the return status is
+ that of the last command executed in the function body. If
+ rreettuurrnn is executed by a trap handler, the last command used to
+ determine the status is the last command executed before the
+ trap handler. If rreettuurrnn is executed during a DDEEBBUUGG trap, the
+ last command used to determine the status is the last command
+ executed by the trap handler before rreettuurrnn was invoked. If
+ rreettuurrnn is used outside a function, but during execution of a
+ script by the .. (ssoouurrccee) command, it causes the shell to stop
+ executing that script and return either _n or the exit status of
+ the last command executed within the script as the exit status
+ of the script. If _n is supplied, the return value is its least
+ significant 8 bits. The return status is non-zero if rreettuurrnn is
+ supplied a non-numeric argument, or is used outside a function
+ and not during execution of a script by .. or ssoouurrccee. Any com-
+ mand associated with the RREETTUURRNN trap is executed before execu-
+ tion resumes after the function or script.
+
+ sseett [----aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...]
+ sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...]
+ Without options, the name and value of each shell variable are
+ displayed in a format that can be reused as input for setting or
+ resetting the currently-set variables. Read-only variables can-
+ not be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed.
+ The output is sorted according to the current locale. When
+ options are specified, they set or unset shell attributes. Any
+ arguments remaining after option processing are treated as val-
+ ues for the positional parameters and are assigned, in order, to
+ $$11, $$22, ...... $$_n. Options, if specified, have the following
+ meanings:
+ --aa Each variable or function that is created or modified is
+ given the export attribute and marked for export to the
+ environment of subsequent commands.
+ --bb Report the status of terminated background jobs immedi-
+ ately, rather than before the next primary prompt. This
+ is effective only when job control is enabled.
+ --ee Exit immediately if a _p_i_p_e_l_i_n_e (which may consist of a
+ single _s_i_m_p_l_e _c_o_m_m_a_n_d), a _l_i_s_t, or a _c_o_m_p_o_u_n_d _c_o_m_m_a_n_d
+ (see SSHHEELLLL GGRRAAMMMMAARR above), exits with a non-zero status.
+ The shell does not exit if the command that fails is
+ part of the command list immediately following a wwhhiillee
+ or uunnttiill keyword, part of the test following the iiff or
+ eelliiff reserved words, part of any command executed in a
+ &&&& or |||| list except the command following the final &&&&
+ or ||||, any command in a pipeline but the last, or if the
+ command's return value is being inverted with !!. If a
+ compound command other than a subshell returns a non-
+ zero status because a command failed while --ee was being
+ ignored, the shell does not exit. A trap on EERRRR, if
+ set, is executed before the shell exits. This option
+ applies to the shell environment and each subshell envi-
+ ronment separately (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT
+ above), and may cause subshells to exit before executing
+ all the commands in the subshell.
+
+ If a compound command or shell function executes in a
+ context where --ee is being ignored, none of the commands
+ executed within the compound command or function body
+ will be affected by the --ee setting, even if --ee is set
+ and a command returns a failure status. If a compound
+ command or shell function sets --ee while executing in a
+ context where --ee is ignored, that setting will not have
+ any effect until the compound command or the command
+ containing the function call completes.
+ --ff Disable pathname expansion.
+ --hh Remember the location of commands as they are looked up
+ for execution. This is enabled by default.
+ --kk All arguments in the form of assignment statements are
+ placed in the environment for a command, not just those
+ that precede the command name.
+ --mm Monitor mode. Job control is enabled. This option is
+ on by default for interactive shells on systems that
+ support it (see JJOOBB CCOONNTTRROOLL above). All processes run
+ in a separate process group. When a background job com-
+ pletes, the shell prints a line containing its exit sta-
+ tus.
+ --nn Read commands but do not execute them. This may be used
+ to check a shell script for syntax errors. This is
+ ignored by interactive shells.
+ --oo _o_p_t_i_o_n_-_n_a_m_e
+ The _o_p_t_i_o_n_-_n_a_m_e can be one of the following:
+ aalllleexxppoorrtt
+ Same as --aa.
+ bbrraacceeeexxppaanndd
+ Same as --BB.
+ eemmaaccss Use an emacs-style command line editing inter-
+ face. This is enabled by default when the shell
+ is interactive, unless the shell is started with
+ the ----nnooeeddiittiinngg option. This also affects the
+ editing interface used for rreeaadd --ee.
+ eerrrreexxiitt Same as --ee.
+ eerrrrttrraaccee
+ Same as --EE.
+ ffuunnccttrraaccee
+ Same as --TT.
+ hhaasshhaallll Same as --hh.
+ hhiisstteexxppaanndd
+ Same as --HH.
+ hhiissttoorryy Enable command history, as described above under
+ HHIISSTTOORRYY. This option is on by default in inter-
+ active shells.
+ iiggnnoorreeeeooff
+ The effect is as if the shell command
+ ``IGNOREEOF=10'' had been executed (see SShheellll
+ VVaarriiaabblleess above).
+ kkeeyywwoorrdd Same as --kk.
+ mmoonniittoorr Same as --mm.
+ nnoocclloobbbbeerr
+ Same as --CC.
+ nnooeexxeecc Same as --nn.
+ nnoogglloobb Same as --ff.
+ nnoolloogg Currently ignored.
+ nnoottiiffyy Same as --bb.
+ nnoouunnsseett Same as --uu.
+ oonneeccmmdd Same as --tt.
+ pphhyyssiiccaall
+ Same as --PP.
+ ppiippeeffaaiill
+ 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.
+ ppoossiixx Change the behavior of bbaasshh where the default
+ operation differs from the POSIX standard to
+ match the standard (_p_o_s_i_x _m_o_d_e). See SSEEEE AALLSSOO
+ below for a reference to a document that details
+ how posix mode affects bash's behavior.
+ pprriivviilleeggeedd
+ Same as --pp.
+ vveerrbboossee Same as --vv.
+ vvii Use a vi-style command line editing interface.
+ This also affects the editing interface used for
+ rreeaadd --ee.
+ xxttrraaccee Same as --xx.
+ If --oo is supplied with no _o_p_t_i_o_n_-_n_a_m_e, the values of the
+ current options are printed. If ++oo is supplied with no
+ _o_p_t_i_o_n_-_n_a_m_e, a series of sseett commands to recreate the
+ current option settings is displayed on the standard
+ output.
+ --pp Turn on _p_r_i_v_i_l_e_g_e_d mode. In this mode, the $$EENNVV and
+ $$BBAASSHH__EENNVV files are not processed, shell functions are
+ not inherited from the environment, and the SSHHEELLLLOOPPTTSS,
+ BBAASSHHOOPPTTSS, CCDDPPAATTHH, and GGLLOOBBIIGGNNOORREE variables, if they
+ appear in the environment, are ignored. If the shell is
+ started with the effective user (group) id not equal to
+ the real user (group) id, and the --pp option is not sup-
+ plied, these actions are taken and the effective user id
+ is set to the real user id. If the --pp option is sup-
+ plied 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.
+ --tt Exit after reading and executing one command.
+ --uu Treat unset variables and parameters other than the spe-
+ cial parameters "@" and "*" as an error when performing
+ parameter expansion. If expansion is attempted on an
+ unset variable or parameter, the shell prints an error
+ message, and, if not interactive, exits with a non-zero
+ status.
+ --vv Print shell input lines as they are read.
+ --xx After expanding each _s_i_m_p_l_e _c_o_m_m_a_n_d, ffoorr command, ccaassee
+ command, sseelleecctt command, or arithmetic ffoorr command, dis-
+ play the expanded value of PPSS44, followed by the command
+ and its expanded arguments or associated word list.
+ --BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn
+ above). This is on by default.
+ --CC If set, bbaasshh does not overwrite an existing file with
+ the >>, >>&&, and <<>> redirection operators. This may be
+ overridden when creating output files by using the redi-
+ rection operator >>|| instead of >>.
+ --EE If set, any trap on EERRRR is inherited by shell functions,
+ command substitutions, and commands executed in a sub-
+ shell environment. The EERRRR trap is normally not inher-
+ ited in such cases.
+ --HH Enable !! style history substitution. This option is on
+ by default when the shell is interactive.
+ --PP If set, the shell does not resolve symbolic links when
+ executing commands such as ccdd that change the current
+ working directory. It uses the physical directory
+ structure instead. By default, bbaasshh follows the logical
+ chain of directories when performing commands which
+ change the current directory.
+ --TT If set, any traps on DDEEBBUUGG and RREETTUURRNN are inherited by
+ shell functions, command substitutions, and commands
+ executed in a subshell environment. The DDEEBBUUGG and
+ RREETTUURRNN traps are normally not inherited in such cases.
+ ---- If no arguments follow this option, then the positional
+ parameters are unset. Otherwise, the positional parame-
+ ters are set to the _a_r_gs, even if some of them begin
+ with a --.
+ -- Signal the end of options, cause all remaining _a_r_gs to
+ be assigned to the positional parameters. The --xx and --vv
+ options are turned off. If there are no _a_r_gs, the posi-
+ tional parameters remain unchanged.
+
+ The options are off by default unless otherwise noted. Using +
+ rather than - causes these options to be turned off. The
+ options can also be specified as arguments to an invocation of
+ the shell. The current set of options may be found in $$--. The
+ return status is always true unless an invalid option is encoun-
+ tered.
+
+ sshhiifftt [_n]
+ The positional parameters from _n+1 ... are renamed to $$11 ........
+ Parameters represented by the numbers $$## down to $$##-_n+1 are
+ unset. _n must be a non-negative number less than or equal to
+ $$##. If _n is 0, no parameters are changed. If _n is not given,
+ it is assumed to be 1. If _n is greater than $$##, the positional
+ parameters are not changed. The return status is greater than
+ zero if _n is greater than $$## or less than zero; otherwise 0.
+
+ sshhoopptt [--ppqqssuu] [--oo] [_o_p_t_n_a_m_e ...]
+ Toggle the values of settings controlling optional shell behav-
+ ior. The settings can be either those listed below, or, if the
+ --oo option is used, those available with the --oo option to the sseett
+ builtin command. With no options, or with the --pp option, a list
+ of all settable options is displayed, with an indication of
+ whether or not each is set; if _o_p_t_n_a_m_e_s are supplied, the output
+ is restricted to those options. The --pp option causes output to
+ be displayed in a form that may be reused as input. Other
+ options have the following meanings:
+ --ss Enable (set) each _o_p_t_n_a_m_e.
+ --uu Disable (unset) each _o_p_t_n_a_m_e.
+ --qq Suppresses normal output (quiet mode); the return status
+ indicates whether the _o_p_t_n_a_m_e is set or unset. If multi-
+ ple _o_p_t_n_a_m_e arguments are given with --qq, the return sta-
+ tus is zero if all _o_p_t_n_a_m_e_s are enabled; non-zero other-
+ wise.
+ --oo Restricts the values of _o_p_t_n_a_m_e to be those defined for
+ the --oo option to the sseett builtin.
+
+ If either --ss or --uu is used with no _o_p_t_n_a_m_e arguments, sshhoopptt
+ shows only those options which are set or unset, respectively.
+ Unless otherwise noted, the sshhoopptt options are disabled (unset)
+ by default.
+
+ The return status when listing options is zero if all _o_p_t_n_a_m_e_s
+ are enabled, non-zero otherwise. When setting or unsetting
+ options, the return status is zero unless an _o_p_t_n_a_m_e is not a
+ valid shell option.
+
+ The list of sshhoopptt options is:
+
+ aassssoocc__eexxppaanndd__oonnccee
+ If set, the shell suppresses multiple evaluation of
+ associative array subscripts during arithmetic expres-
+ sion evaluation, while executing builtins that can per-
+ form variable assignments, and while executing builtins
+ that perform array dereferencing.
+ aauuttooccdd If set, a command name that is the name of a directory
+ is executed as if it were the argument to the ccdd com-
+ mand. This option is only used by interactive shells.
+ ccddaabbllee__vvaarrss
+ If set, an argument to the ccdd builtin command that is
+ not a directory is assumed to be the name of a variable
+ whose value is the directory to change to.
+ ccddssppeellll If set, minor errors in the spelling of a directory com-
+ ponent in a ccdd command will be corrected. The errors
+ checked for are transposed characters, a missing charac-
+ ter, and one character too many. If a correction is
+ found, the corrected filename is printed, and the com-
+ mand proceeds. This option is only used by interactive
+ shells.
+ cchheecckkhhaasshh
+ If set, bbaasshh checks that a command found in the hash ta-
+ ble exists before trying to execute it. If a hashed
+ command no longer exists, a normal path search is per-
+ formed.
+ cchheecckkjjoobbss
+ If set, bbaasshh 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 JJOOBB CCOONNTTRROOLL above). The shell always postpones
+ exiting if any jobs are stopped.
+ cchheecckkwwiinnssiizzee
+ If set, bbaasshh checks the window size after each external
+ (non-builtin) command and, if necessary, updates the
+ values of LLIINNEESS and CCOOLLUUMMNNSS. This option is enabled by
+ default.
+ ccmmddhhiisstt If set, bbaasshh attempts to save all lines of a multiple-
+ line command in the same history entry. This allows
+ easy re-editing of multi-line commands. This option is
+ enabled by default, but only has an effect if command
+ history is enabled, as described above under HHIISSTTOORRYY.
+ ccoommppaatt3311
+ If set, bbaasshh changes its behavior to that of version 3.1
+ with respect to quoted arguments to the [[[[ conditional
+ command's ==~~ operator and locale-specific string compar-
+ ison when using the [[[[ conditional command's << and >>
+ operators. Bash versions prior to bash-4.1 use ASCII
+ collation and _s_t_r_c_m_p(3); bash-4.1 and later use the cur-
+ rent locale's collation sequence and _s_t_r_c_o_l_l(3).
+ ccoommppaatt3322
+ If set, bbaasshh changes its behavior to that of version 3.2
+ with respect to locale-specific string comparison when
+ using the [[[[ conditional command's << and >> operators
+ (see previous item) and the effect of interrupting a
+ command list. Bash versions 3.2 and earlier continue
+ with the next command in the list after one terminates
+ due to an interrupt.
+ ccoommppaatt4400
+ If set, bbaasshh changes its behavior to that of version 4.0
+ with respect to locale-specific string comparison when
+ using the [[[[ conditional command's << and >> operators
+ (see description of ccoommppaatt3311) and the effect of inter-
+ rupting a command list. Bash versions 4.0 and later
+ interrupt the list as if the shell received the inter-
+ rupt; previous versions continue with the next command
+ in the list.
+ ccoommppaatt4411
+ If set, bbaasshh, when in _p_o_s_i_x _m_o_d_e, treats a single quote
+ in a double-quoted parameter expansion as a special
+ character. The single quotes must match (an even num-
+ ber) and the characters between the single quotes are
+ considered quoted. This is the behavior of posix mode
+ through version 4.1. The default bash behavior remains
+ as in previous versions.
+ ccoommppaatt4422
+ If set, bbaasshh does not process the replacement string in
+ the pattern substitution word expansion using quote
+ removal.
+ ccoommppaatt4433
+ If set, bbaasshh does not print a warning message if an
+ attempt is made to use a quoted compound array assign-
+ ment as an argument to ddeeccllaarree, makes word expansion
+ errors non-fatal errors that cause the current command
+ to fail (the default behavior is to make them fatal
+ errors that cause the shell to exit), and does not reset
+ the loop state when a shell function is executed (this
+ allows bbrreeaakk or ccoonnttiinnuuee in a shell function to affect
+ loops in the caller's context).
+ ccoommppaatt4444
+ If set, bbaasshh saves the positional parameters to
+ BASH_ARGV and BASH_ARGC before they are used, regardless
+ of whether or not extended debugging mode is enabled.
+ ccoommpplleettee__ffuullllqquuoottee
+ If set, bbaasshh quotes all shell metacharacters in file-
+ names and directory names when performing completion.
+ If not set, bbaasshh removes metacharacters such as the dol-
+ lar sign from the set of characters that will be quoted
+ in completed filenames when these metacharacters appear
+ in shell variable references in words to be completed.
+ This means that dollar signs in variable names that
+ expand to directories will not be quoted; however, any
+ dollar signs appearing in filenames will not be quoted,
+ either. This is active only when bash is using back-
+ slashes to quote completed filenames. This variable is
+ set by default, which is the default bash behavior in
+ versions through 4.2.
+ ddiirreexxppaanndd
+ If set, bbaasshh replaces directory names with the results
+ of word expansion when performing filename completion.
+ This changes the contents of the readline editing buf-
+ fer. If not set, bbaasshh attempts to preserve what the
+ user typed.
+ ddiirrssppeellll
+ If set, bbaasshh attempts spelling correction on directory
+ names during word completion if the directory name ini-
+ tially supplied does not exist.
+ ddoottgglloobb If set, bbaasshh includes filenames beginning with a `.' in
+ the results of pathname expansion. The filenames ````..''''
+ and ````....'''' must always be matched explicitly, even if
+ ddoottgglloobb is set.
+ eexxeeccffaaiill
+ If set, a non-interactive shell will not exit if it can-
+ not execute the file specified as an argument to the
+ eexxeecc builtin command. An interactive shell does not
+ exit if eexxeecc fails.
+ eexxppaanndd__aalliiaasseess
+ If set, aliases are expanded as described above under
+ AALLIIAASSEESS. This option is enabled by default for interac-
+ tive shells.
+ eexxttddeebbuugg
+ If set at shell invocation, arrange to execute the
+ debugger profile before the shell starts, identical to
+ the ----ddeebbuuggggeerr option. If set after invocation, behav-
+ ior intended for use by debuggers is enabled:
+ 11.. The --FF option to the ddeeccllaarree builtin displays the
+ source file name and line number corresponding to
+ each function name supplied as an argument.
+ 22.. If the command run by the DDEEBBUUGG trap returns a
+ non-zero value, the next command is skipped and
+ not executed.
+ 33.. If the command run by the DDEEBBUUGG trap returns a
+ value of 2, and the shell is executing in a sub-
+ routine (a shell function or a shell script exe-
+ cuted by the .. or ssoouurrccee builtins), the shell
+ simulates a call to rreettuurrnn.
+ 44.. BBAASSHH__AARRGGCC and BBAASSHH__AARRGGVV are updated as described
+ in their descriptions above.
+ 55.. Function tracing is enabled: command substitu-
+ tion, shell functions, and subshells invoked with
+ (( _c_o_m_m_a_n_d )) inherit the DDEEBBUUGG and RREETTUURRNN traps.
+ 66.. Error tracing is enabled: command substitution,
+ shell functions, and subshells invoked with ((
+ _c_o_m_m_a_n_d )) inherit the EERRRR trap.
+ eexxttgglloobb If set, the extended pattern matching features described
+ above under PPaatthhnnaammee EExxppaannssiioonn are enabled.
+ eexxttqquuoottee
+ If set, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quoting is performed
+ within $${{_p_a_r_a_m_e_t_e_r}} expansions enclosed in double
+ quotes. This option is enabled by default.
+ ffaaiillgglloobb
+ If set, patterns which fail to match filenames during
+ pathname expansion result in an expansion error.
+ ffoorrccee__ffiiggnnoorree
+ If set, the suffixes specified by the FFIIGGNNOORREE shell
+ variable cause words to be ignored when performing word
+ completion even if the ignored words are the only possi-
+ ble completions. See SSHHEELLLL VVAARRIIAABBLLEESS above for a
+ description of FFIIGGNNOORREE. This option is enabled by
+ default.
+ gglloobbaasscciiiirraannggeess
+ If set, range expressions used in pattern matching
+ bracket expressions (see PPaatttteerrnn MMaattcchhiinngg above) behave
+ as if in the traditional C locale when performing com-
+ parisons. That is, the current locale's collating
+ sequence is not taken into account, so bb will not col-
+ late between AA and BB, and upper-case and lower-case
+ ASCII characters will collate together.
+ gglloobbssttaarr
+ If set, the pattern **** used in a pathname expansion con-
+ text will match all files and zero or more directories
+ and subdirectories. If the pattern is followed by a //,
+ only directories and subdirectories match.
+ ggnnuu__eerrrrffmmtt
+ If set, shell error messages are written in the standard
+ GNU error message format.
+ hhiissttaappppeenndd
+ If set, the history list is appended to the file named
+ by the value of the HHIISSTTFFIILLEE variable when the shell
+ exits, rather than overwriting the file.
+ hhiissttrreeeeddiitt
+ If set, and rreeaaddlliinnee is being used, a user is given the
+ opportunity to re-edit a failed history substitution.
+ hhiissttvveerriiffyy
+ If set, and rreeaaddlliinnee is being used, the results of his-
+ tory substitution are not immediately passed to the
+ shell parser. Instead, the resulting line is loaded
+ into the rreeaaddlliinnee editing buffer, allowing further modi-
+ fication.
+ hhoossttccoommpplleettee
+ If set, and rreeaaddlliinnee is being used, bbaasshh will attempt to
+ perform hostname completion when a word containing a @@
+ is being completed (see CCoommpplleettiinngg under RREEAADDLLIINNEE
+ above). This is enabled by default.
+ hhuuppoonneexxiitt
+ If set, bbaasshh will send SSIIGGHHUUPP to all jobs when an inter-
+ active login shell exits.
+ iinnhheerriitt__eerrrreexxiitt
+ If set, command substitution inherits the value of the
+ eerrrreexxiitt option, instead of unsetting it in the subshell
+ environment. This option is enabled when _p_o_s_i_x _m_o_d_e is
+ enabled.
+ iinntteerraaccttiivvee__ccoommmmeennttss
+ If set, allow a word beginning with ## to cause that word
+ and all remaining characters on that line to be ignored
+ in an interactive shell (see CCOOMMMMEENNTTSS above). This
+ option is enabled by default.
+ llaassttppiippee
+ If set, and job control is not active, the shell runs
+ the last command of a pipeline not executed in the back-
+ ground in the current shell environment.
+ lliitthhiisstt If set, and the ccmmddhhiisstt option is enabled, multi-line
+ commands are saved to the history with embedded newlines
+ rather than using semicolon separators where possible.
+ llooccaallvvaarr__iinnhheerriitt
+ If set, local variables inherit the value and attributes
+ of a variable of the same name that exists at a previous
+ scope before any new value is assigned. The nameref
+ attribute is not inherited.
+ llooccaallvvaarr__uunnsseett
+ If set, calling uunnsseett on local variables in previous
+ function scopes marks them so subsequent lookups find
+ them unset until that function returns. This is identi-
+ cal to the behavior of unsetting local variables at the
+ current function scope.
+ llooggiinn__sshheellll
+ The shell sets this option if it is started as a login
+ shell (see IINNVVOOCCAATTIIOONN above). The value may not be
+ changed.
+ mmaaiillwwaarrnn
+ If set, and a file that bbaasshh is checking for mail has
+ been accessed since the last time it was checked, the
+ message ``The mail in _m_a_i_l_f_i_l_e has been read'' is dis-
+ played.
+ nnoo__eemmppttyy__ccmmdd__ccoommpplleettiioonn
+ If set, and rreeaaddlliinnee is being used, bbaasshh will not
+ attempt to search the PPAATTHH for possible completions when
+ completion is attempted on an empty line.
+ nnooccaasseegglloobb
+ If set, bbaasshh matches filenames in a case-insensitive
+ fashion when performing pathname expansion (see PPaatthhnnaammee
+ EExxppaannssiioonn above).
+ nnooccaasseemmaattcchh
+ If set, bbaasshh matches patterns in a case-insensitive
+ fashion when performing matching while executing ccaassee or
+ [[[[ conditional commands, when performing pattern substi-
+ tution word expansions, or when filtering possible com-
+ pletions as part of programmable completion.
+ nnuullllgglloobb
+ If set, bbaasshh allows patterns which match no files (see
+ PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string,
+ rather than themselves.
+ pprrooggccoommpp
+ If set, the programmable completion facilities (see PPrroo--
+ ggrraammmmaabbllee CCoommpplleettiioonn above) are enabled. This option is
+ enabled by default.
+ pprrooggccoommpp__aalliiaass
+ If set, and programmable completion is enabled, bbaasshh
+ treats a command name that doesn't have any completions
+ as a possible alias and attempts alias expansion. If it
+ has an alias, bbaasshh attempts programmable completion
+ using the command word resulting from the expanded
+ alias.
+ pprroommppttvvaarrss
+ If set, prompt strings undergo parameter expansion, com-
+ mand substitution, arithmetic expansion, and quote
+ removal after being expanded as described in PPRROOMMPPTTIINNGG
+ above. This option is enabled by default.
+ rreessttrriicctteedd__sshheellll
+ The shell sets this option if it is started in
+ restricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value
+ may not be changed. This is not reset when the startup
+ files are executed, allowing the startup files to dis-
+ cover whether or not a shell is restricted.
+ sshhiifftt__vveerrbboossee
+ If set, the sshhiifftt builtin prints an error message when
+ the shift count exceeds the number of positional parame-
+ ters.
+ ssoouurrcceeppaatthh
+ If set, the ssoouurrccee (..) builtin uses the value of PPAATTHH to
+ find the directory containing the file supplied as an
+ argument. This option is enabled by default.
+ xxppgg__eecchhoo
+ If set, the eecchhoo builtin expands backslash-escape
+ sequences by default.
+
+ ssuussppeenndd [--ff]
+ Suspend the execution of this shell until it receives a SSIIGGCCOONNTT
+ signal. A login shell cannot be suspended; the --ff option can be
+ used to override this and force the suspension. The return sta-
+ tus is 0 unless the shell is a login shell and --ff is not sup-
+ plied, or if job control is not enabled.
+
+ tteesstt _e_x_p_r
+ [[ _e_x_p_r ]]
+ Return a status of 0 (true) or 1 (false) depending on the evalu-
+ ation of the conditional expression _e_x_p_r. Each operator and op-
+ erand must be a separate argument. Expressions are composed of
+ the primaries described above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS.
+ tteesstt does not accept any options, nor does it accept and ignore
+ an argument of ---- as signifying the end of options.
+
+ Expressions may be combined using the following operators,
+ listed in decreasing order of precedence. The evaluation
+ depends on the number of arguments; see below. Operator prece-
+ dence is used when there are five or more arguments.
+ !! _e_x_p_r True if _e_x_p_r is false.
+ (( _e_x_p_r ))
+ Returns the value of _e_x_p_r. This may be used to override
+ the normal precedence of operators.
+ _e_x_p_r_1 -aa _e_x_p_r_2
+ True if both _e_x_p_r_1 and _e_x_p_r_2 are true.
+ _e_x_p_r_1 -oo _e_x_p_r_2
+ True if either _e_x_p_r_1 or _e_x_p_r_2 is true.
+
+ tteesstt and [[ evaluate conditional expressions using a set of rules
+ based on the number of arguments.
+
+ 0 arguments
+ The expression is false.
+ 1 argument
+ The expression is true if and only if the argument is not
+ null.
+ 2 arguments
+ If the first argument is !!, the expression is true if and
+ only if the second argument is null. If the first argu-
+ ment is one of the unary conditional operators listed
+ above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the expression is
+ true if the unary test is true. If the first argument is
+ not a valid unary conditional operator, the expression is
+ false.
+ 3 arguments
+ The following conditions are applied in the order listed.
+ If the second argument is one of the binary conditional
+ operators listed above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the
+ result of the expression is the result of the binary test
+ using the first and third arguments as operands. The --aa
+ and --oo operators are considered binary operators when
+ there are three arguments. If the first argument is !!,
+ the value is the negation of the two-argument test using
+ the second and third arguments. If the first argument is
+ exactly (( and the third argument is exactly )), the result
+ is the one-argument test of the second argument. Other-
+ wise, the expression is false.
+ 4 arguments
+ If the first argument is !!, the result is the negation of
+ the three-argument expression composed of the remaining
+ arguments. Otherwise, the expression is parsed and eval-
+ uated according to precedence using the rules listed
+ above.
+ 5 or more arguments
+ The expression is parsed and evaluated according to
+ precedence using the rules listed above.
+
+ When used with tteesstt or [[, the << and >> operators sort lexico-
+ graphically using ASCII ordering.
+
+ ttiimmeess Print the accumulated user and system times for the shell and
+ for processes run from the shell. The return status is 0.
+
+ ttrraapp [--llpp] [[_a_r_g] _s_i_g_s_p_e_c ...]
+ The command _a_r_g is to be read and executed when the shell
+ receives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a
+ single _s_i_g_s_p_e_c) or --, each specified signal is reset to its
+ original disposition (the value it had upon entrance to the
+ shell). If _a_r_g is the null string the signal specified by each
+ _s_i_g_s_p_e_c is ignored by the shell and by the commands it invokes.
+ If _a_r_g is not present and --pp has been supplied, then the trap
+ commands associated with each _s_i_g_s_p_e_c are displayed. If no
+ arguments are supplied or if only --pp is given, ttrraapp prints the
+ list of commands associated with each signal. The --ll option
+ causes the shell to print a list of signal names and their cor-
+ responding numbers. Each _s_i_g_s_p_e_c is either a signal name
+ defined in <_s_i_g_n_a_l_._h>, or a signal number. Signal names are
+ case insensitive and the SSIIGG prefix is optional.
+
+ If a _s_i_g_s_p_e_c is EEXXIITT (0) the command _a_r_g is executed on exit
+ from the shell. If a _s_i_g_s_p_e_c is DDEEBBUUGG, the command _a_r_g is exe-
+ cuted before every _s_i_m_p_l_e _c_o_m_m_a_n_d, _f_o_r command, _c_a_s_e command,
+ _s_e_l_e_c_t command, every arithmetic _f_o_r command, and before the
+ first command executes in a shell function (see SSHHEELLLL GGRRAAMMMMAARR
+ above). Refer to the description of the eexxttddeebbuugg option to the
+ sshhoopptt builtin for details of its effect on the DDEEBBUUGG trap. If a
+ _s_i_g_s_p_e_c is RREETTUURRNN, the command _a_r_g is executed each time a shell
+ function or a script executed with the .. or ssoouurrccee builtins fin-
+ ishes executing.
+
+ If a _s_i_g_s_p_e_c is EERRRR, the command _a_r_g is executed whenever a
+ pipeline (which may consist of a single simple command), a list,
+ or a compound command returns a non-zero exit status, subject to
+ the following conditions. The EERRRR trap is not executed if the
+ failed command is part of the command list immediately following
+ a wwhhiillee or uunnttiill keyword, part of the test in an _i_f statement,
+ part of a command executed in a &&&& or |||| list except the command
+ following the final &&&& or ||||, any command in a pipeline but the
+ last, or if the command's return value is being inverted using
+ !!. These are the same conditions obeyed by the eerrrreexxiitt (--ee)
+ option.
+
+ Signals ignored upon entry to the shell cannot be trapped or
+ reset. Trapped signals that are not being ignored are reset to
+ their original values in a subshell or subshell environment when
+ one is created. The return status is false if any _s_i_g_s_p_e_c is
+ invalid; otherwise ttrraapp returns true.
+
+ ttyyppee [--aaffttppPP] _n_a_m_e [_n_a_m_e ...]
+ With no options, indicate how each _n_a_m_e would be interpreted if
+ used as a command name. If the --tt option is used, ttyyppee prints a
+ string which is one of _a_l_i_a_s, _k_e_y_w_o_r_d, _f_u_n_c_t_i_o_n, _b_u_i_l_t_i_n, or
+ _f_i_l_e if _n_a_m_e is an alias, shell reserved word, function,
+ builtin, or disk file, respectively. If the _n_a_m_e is not found,
+ then nothing is printed, and an exit status of false is
+ returned. If the --pp option is used, ttyyppee either returns the
+ name of the disk file that would be executed if _n_a_m_e were speci-
+ fied as a command name, or nothing if ``type -t name'' would not
+ return _f_i_l_e. The --PP option forces a PPAATTHH search for each _n_a_m_e,
+ even if ``type -t name'' would not return _f_i_l_e. If a command is
+ hashed, --pp and --PP print the hashed value, which is not necessar-
+ ily the file that appears first in PPAATTHH. If the --aa option is
+ used, ttyyppee prints all of the places that contain an executable
+ named _n_a_m_e. This includes aliases and functions, if and only if
+ the --pp option is not also used. The table of hashed commands is
+ not consulted when using --aa. The --ff option suppresses shell
+ function lookup, as with the ccoommmmaanndd builtin. ttyyppee returns true
+ if all of the arguments are found, false if any are not found.
+
+ uulliimmiitt [--HHSSaabbccddeeffiikkllmmnnppqqrrssttuuvvxxPPTT [_l_i_m_i_t]]
+ Provides control over the resources available to the shell and
+ to processes started by it, on systems that allow such control.
+ The --HH and --SS options specify that the hard or soft limit is set
+ for the given resource. A hard limit cannot be increased by a
+ non-root user once it is set; a soft limit may be increased up
+ to the value of the hard limit. If neither --HH nor --SS is speci-
+ fied, both the soft and hard limits are set. The value of _l_i_m_i_t
+ can be a number in the unit specified for the resource or one of
+ the special values hhaarrdd, ssoofftt, or uunnlliimmiitteedd, which stand for the
+ current hard limit, the current soft limit, and no limit,
+ respectively. If _l_i_m_i_t is omitted, the current value of the
+ soft limit of the resource is printed, unless the --HH option is
+ given. When more than one resource is specified, the limit name
+ and unit are printed before the value. Other options are inter-
+ preted as follows:
+ --aa All current limits are reported
+ --bb The maximum socket buffer size
+ --cc The maximum size of core files created
+ --dd The maximum size of a process's data segment
+ --ee The maximum scheduling priority ("nice")
+ --ff The maximum size of files written by the shell and its
+ children
+ --ii The maximum number of pending signals
+ --kk The maximum number of kqueues that may be allocated
+ --ll The maximum size that may be locked into memory
+ --mm The maximum resident set size (many systems do not honor
+ this limit)
+ --nn The maximum number of open file descriptors (most systems
+ do not allow this value to be set)
+ --pp The pipe size in 512-byte blocks (this may not be set)
+ --qq The maximum number of bytes in POSIX message queues
+ --rr The maximum real-time scheduling priority
+ --ss The maximum stack size
+ --tt The maximum amount of cpu time in seconds
+ --uu The maximum number of processes available to a single
+ user
+ --vv The maximum amount of virtual memory available to the
+ shell and, on some systems, to its children
+ --xx The maximum number of file locks
+ --PP The maximum number of pseudoterminals
+ --TT The maximum number of threads
+
+ If _l_i_m_i_t is given, and the --aa option is not used, _l_i_m_i_t is the
+ new value of the specified resource. If no option is given,
+ then --ff is assumed. Values are in 1024-byte increments, except
+ for --tt, which is in seconds; --pp, which is in units of 512-byte
+ blocks; --PP, --TT, --bb, --kk, --nn, and --uu, which are unscaled values;
+ and, when in posix mode, --cc and --ff, which are in 512-byte incre-
+ ments. The return status is 0 unless an invalid option or argu-
+ ment is supplied, or an error occurs while setting a new limit.
+
+ uummaasskk [--pp] [--SS] [_m_o_d_e]
+ The user file-creation mask is set to _m_o_d_e. If _m_o_d_e begins with
+ a digit, it is interpreted as an octal number; otherwise it is
+ interpreted as a symbolic mode mask similar to that accepted by
+ _c_h_m_o_d(1). If _m_o_d_e is omitted, the current value of the mask is
+ printed. The --SS option causes the mask to be printed in sym-
+ bolic form; the default output is an octal number. If the --pp
+ option is supplied, and _m_o_d_e is omitted, the output is in a form
+ that may be reused as input. The return status is 0 if the mode
+ was successfully changed or if no _m_o_d_e argument was supplied,
+ and false otherwise.
+
+ uunnaalliiaass [-aa] [_n_a_m_e ...]
+ Remove each _n_a_m_e from the list of defined aliases. If --aa is
+ supplied, all alias definitions are removed. The return value
+ is true unless a supplied _n_a_m_e is not a defined alias.
+
+ uunnsseett [-ffvv] [-nn] [_n_a_m_e ...]
+ For each _n_a_m_e, remove the corresponding variable or function.
+ If the --vv option is given, each _n_a_m_e refers to a shell variable,
+ and that variable is removed. Read-only variables may not be
+ unset. If --ff is specified, each _n_a_m_e refers to a shell func-
+ tion, and the function definition is removed. If the --nn option
+ is supplied, and _n_a_m_e is a variable with the _n_a_m_e_r_e_f attribute,
+ _n_a_m_e will be unset rather than the variable it references. --nn
+ has no effect if the --ff option is supplied. If no options are
+ supplied, each _n_a_m_e refers to a variable; if there is no vari-
+ able by that name, any function with that name is unset. Each
+ unset variable or function is removed from the environment
+ passed to subsequent commands. If any of CCOOMMPP__WWOORRDDBBRREEAAKKSS, RRAANN--
+ DDOOMM, SSEECCOONNDDSS, LLIINNEENNOO, HHIISSTTCCMMDD, FFUUNNCCNNAAMMEE, GGRROOUUPPSS, or DDIIRRSSTTAACCKK are
+ unset, they lose their special properties, even if they are sub-
+ sequently reset. The exit status is true unless a _n_a_m_e is read-
+ only.
+
+ wwaaiitt [--ffnn] [_i_d _._._.]
+ Wait for each specified child process and return its termination
+ status. Each _i_d may be a process ID or a job specification; if
+ a job spec is given, all processes in that job's pipeline are
+ waited for. If _i_d is not given, all currently active child pro-
+ cesses are waited for, and the return status is zero. If the --nn
+ option is supplied, wwaaiitt waits for any job to terminate and
+ returns its exit status. If the --ff option is supplied, and job
+ control is enabled, wwaaiitt forces _i_d to terminate before returning
+ its status, instead of returning when it changes status. If _i_d
+ specifies a non-existent process or job, the return status is
+ 127. Otherwise, the return status is the exit status of the
+ last process or job waited for.
+
+SSEEEE AALLSSOO
+ bash(1), sh(1)
+
+
+
+GNU Bash 5.0 2004 Apr 20 BASH_BUILTINS(1)
diff --git a/doc/builtins.1 b/doc/builtins.1
new file mode 100644
index 0000000..4413c76
--- /dev/null
+++ b/doc/builtins.1
@@ -0,0 +1,24 @@
+.\" This is a hack to force bash builtins into the whatis database
+.\" and to get the list of builtins to come up with the man command.
+.\"
+.\" File Name macro. This used to be `.PN', for Path Name,
+.\" but Sun doesn't seem to like that very much.
+.\"
+.de FN
+\fI\|\\$1\|\fP
+..
+.TH BASH_BUILTINS 1 "2004 Apr 20" "GNU Bash 5.0"
+.SH NAME
+bash, :, ., [, alias, bg, bind, break, builtin, caller,
+cd, command, compgen, complete,
+compopt, continue, declare, dirs, disown, echo, enable, eval, exec, exit,
+export, false, fc, fg, getopts, hash, help, history, jobs, kill,
+let, local, logout, mapfile, popd, printf, pushd, pwd, read,
+readonly, return, set,
+shift, shopt, source, suspend, test, times, trap, true, type, typeset,
+ulimit, umask, unalias, unset, wait \- bash built-in commands, see \fBbash\fR(1)
+.SH BASH BUILTIN COMMANDS
+.nr zZ 1
+.so bash.1
+.SH SEE ALSO
+bash(1), sh(1)
diff --git a/doc/builtins.ps b/doc/builtins.ps
new file mode 100644
index 0000000..c2f8de1
--- /dev/null
+++ b/doc/builtins.ps
@@ -0,0 +1,3136 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.22.3
+%%CreationDate: Wed Jan 2 09:14:38 2019
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.22 3
+%%Pages: 25
+%%PageOrder: Ascend
+%%DocumentMedia: Default 612 792 0 () ()
+%%Orientation: Portrait
+%%EndComments
+%%BeginDefaults
+%%PageMedia: Default
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset grops 1.22 3
+%!PS-Adobe-3.0 Resource-ProcSet
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+DEFS/BPhook known{DEFS begin BPhook end}if
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/setcmykcolor where{
+pop
+/Fk{
+setcmykcolor fill
+}bind def
+}if
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/setcmykcolor where{
+pop
+/Ck/setcmykcolor load def
+}if
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne
+2 index/UniqueID ne
+and
+{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+/setpagedevice{}def
+mark
+}bind def
+/PEND{
+cleartomark
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%%BeginFeature: *PageSize Default
+<< /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice
+%%EndFeature
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Symbol
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE
+/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S
+(ME).219 E F0 1.325(bash, :, ., [, alias, bg, bind, break, b)108 96 R
+1.325(uiltin, caller)-.2 F 3.825(,c)-.4 G 1.324
+(d, command, compgen, complete, compopt, continue,)-3.825 F .903
+(declare, dirs, diso)108 108 R .903(wn, echo, enable, e)-.25 F -.25(va)
+-.25 G .904(l, e).25 F -.15(xe)-.15 G .904(c, e).15 F .904(xit, e)-.15 F
+.904(xport, f)-.15 F .904(alse, fc, fg, getopts, hash, help, history)-.1
+F 3.404(,j)-.65 G(obs,)-3.404 E .133(kill, let, local, logout, map\214l\
+e, popd, printf, pushd, pwd, read, readonly)108 120 R 2.633(,r)-.65 G
+.133(eturn, set, shift, shopt, source, sus-)-2.633 F .279(pend, test, t\
+imes, trap, true, type, typeset, ulimit, umask, unalias, unset, w)108
+132 R .279(ait \255 bash b)-.1 F .279(uilt-in commands, see)-.2 F/F2 10
+/Times-Bold@0 SF(bash)108 144 Q F0(\(1\))A F1 -.329(BA)72 160.8 S(SH B)
+.329 E(UIL)-.11 E(TIN COMMANDS)-1.007 E F0 .063
+(Unless otherwise noted, each b)108 172.8 R .062(uiltin command documen\
+ted in this section as accepting options preceded by)-.2 F F2<ad>108
+184.8 Q F0(accepts)3.077 E F2<adad>3.077 E F0 .577
+(to signify the end of the options.)3.077 F(The)5.577 E F2(:)3.077 E F0
+(,)A F2(true)3.077 E F0(,)A F2(false)3.077 E F0 3.077(,a)C(nd)-3.077 E
+F2(test)3.077 E F0(/)A F2([)A F0 -.2(bu)3.077 G .577
+(iltins do not accept options).2 F .462(and do not treat)108 196.8 R F2
+<adad>2.961 E F0(specially)2.961 E 5.461(.T)-.65 G(he)-5.461 E F2(exit)
+2.961 E F0(,)A F2(logout)2.961 E F0(,)A F2 -.18(re)2.961 G(tur).18 E(n)
+-.15 E F0(,)A F2(br)2.961 E(eak)-.18 E F0(,)A F2(continue)2.961 E F0(,)A
+F2(let)2.961 E F0 2.961(,a)C(nd)-2.961 E F2(shift)2.961 E F0 -.2(bu)
+2.961 G .461(iltins accept and).2 F .26(process ar)108 208.8 R .26
+(guments be)-.18 F .26(ginning with)-.15 F F2<ad>2.76 E F0 .261
+(without requiring)2.76 F F2<adad>2.761 E F0 5.261(.O)C .261(ther b)
+-5.261 F .261(uiltins that accept ar)-.2 F .261(guments b)-.18 F .261
+(ut are not)-.2 F 1.154(speci\214ed as accepting options interpret ar)
+108 220.8 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F2<ad>
+3.654 E F0 1.154(as in)3.654 F -.25(va)-.4 G 1.154
+(lid options and require).25 F F2<adad>3.654 E F0(to)3.654 E(pre)108
+232.8 Q -.15(ve)-.25 G(nt this interpretation.).15 E F2(:)108 250.8 Q F0
+([)2.5 E/F3 10/Times-Italic@0 SF(ar)A(guments)-.37 E F0(])A .451(No ef)
+144 262.8 R .451(fect; the command does nothing be)-.25 F .452(yond e)
+-.15 F(xpanding)-.15 E F3(ar)3.282 E(guments)-.37 E F0 .452
+(and performing an)3.222 F 2.952(ys)-.15 G(peci\214ed)-2.952 E 2.5
+(redirections. The)144 274.8 R(return status is zero.)2.5 E F2(.)110.5
+291.6 Q F3(\214lename)6.666 E F0([)2.5 E F3(ar)A(guments)-.37 E F0(])A
+F2(sour)108 303.6 Q(ce)-.18 E F3(\214lename)2.5 E F0([)2.5 E F3(ar)A
+(guments)-.37 E F0(])A 1.02(Read and e)144 315.6 R -.15(xe)-.15 G 1.02
+(cute commands from).15 F F3(\214lename)5.43 E F0 1.02
+(in the current shell en)3.7 F 1.02(vironment and return the e)-.4 F
+(xit)-.15 E 1.458(status of the last command e)144 327.6 R -.15(xe)-.15
+G 1.458(cuted from).15 F F3(\214lename)3.958 E F0 6.458(.I).18 G(f)
+-6.458 E F3(\214lename)5.868 E F0 1.458
+(does not contain a slash, \214le-)4.138 F .608(names in)144 339.6 R/F4
+9/Times-Bold@0 SF -.666(PA)3.108 G(TH)-.189 E F0 .608
+(are used to \214nd the directory containing)2.858 F F3(\214lename)3.108
+E F0 5.608(.T).18 G .608(he \214le searched for in)-5.608 F F4 -.666(PA)
+3.108 G(TH)-.189 E F0 .832(need not be e)144 351.6 R -.15(xe)-.15 G
+3.332(cutable. When).15 F F2(bash)3.332 E F0 .832(is not in)3.332 F F3
+.832(posix mode)3.332 F F0 3.332(,t)C .833
+(he current directory is searched if no)-3.332 F .982
+(\214le is found in)144 363.6 R F4 -.666(PA)3.481 G(TH)-.189 E/F5 9
+/Times-Roman@0 SF(.)A F0 .981(If the)5.481 F F2(sour)3.481 E(cepath)-.18
+E F0 .981(option to the)3.481 F F2(shopt)3.481 E F0 -.2(bu)3.481 G .981
+(iltin command is turned of).2 F .981(f, the)-.25 F F4 -.666(PA)144
+375.6 S(TH)-.189 E F0 .112(is not searched.)2.362 F .112(If an)5.112 F
+(y)-.15 E F3(ar)2.612 E(guments)-.37 E F0 .112(are supplied, the)2.612 F
+2.612(yb)-.15 G .112(ecome the positional parameters when)-2.612 F F3
+(\214lename)144 387.6 Q F0 1.697(is e)4.197 F -.15(xe)-.15 G 4.197
+(cuted. Otherwise).15 F 1.697(the positional parameters are unchanged.)
+4.197 F 1.697(If the)6.697 F F2<ad54>4.197 E F0 1.696(option is)4.197 F
+(enabled,)144 399.6 Q F2(sour)3.617 E(ce)-.18 E F0 1.117(inherits an)
+3.617 F 3.617(yt)-.15 G 1.117(rap on)-3.617 F F2(DEB)3.617 E(UG)-.1 E F0
+3.618(;i)C 3.618(fi)-3.618 G 3.618(ti)-3.618 G 3.618(sn)-3.618 G 1.118
+(ot, an)-3.618 F(y)-.15 E F2(DEB)3.618 E(UG)-.1 E F0 1.118
+(trap string is sa)3.618 F -.15(ve)-.2 G 3.618(da).15 G(nd)-3.618 E .36
+(restored around the call to)144 411.6 R F2(sour)2.86 E(ce)-.18 E F0
+2.86(,a)C(nd)-2.86 E F2(sour)2.86 E(ce)-.18 E F0 .36(unsets the)2.86 F
+F2(DEB)2.86 E(UG)-.1 E F0 .36(trap while it e)2.86 F -.15(xe)-.15 G 2.86
+(cutes. If).15 F F2<ad54>2.86 E F0(is)2.86 E 1.435
+(not set, and the sourced \214le changes the)144 423.6 R F2(DEB)3.935 E
+(UG)-.1 E F0 1.435(trap, the ne)3.935 F 3.935(wv)-.25 G 1.435
+(alue is retained when)-4.185 F F2(sour)3.935 E(ce)-.18 E F0 3.763
+(completes. The)144 435.6 R 1.262
+(return status is the status of the last command e)3.763 F 1.262
+(xited within the script \(0 if no)-.15 F(commands are e)144 447.6 Q
+-.15(xe)-.15 G(cuted\), and f).15 E(alse if)-.1 E F3(\214lename)4.41 E
+F0(is not found or cannot be read.)2.68 E F2(alias)108 464.4 Q F0([)2.5
+E F2<ad70>A F0 2.5(][)C F3(name)-2.5 E F0([=)A F3(value)A F0 2.5(].)C
+(..])-2.5 E F2(Alias)144 476.4 Q F0 2.724(with no ar)5.224 F 2.724
+(guments or with the)-.18 F F2<ad70>5.224 E F0 2.724
+(option prints the list of aliases in the form)5.224 F F2(alias)5.225 E
+F3(name)144 488.4 Q F0(=)A F3(value)A F0 .58(on standard output.)3.08 F
+.58(When ar)5.58 F .58
+(guments are supplied, an alias is de\214ned for each)-.18 F F3(name)
+3.08 E F0(whose)144 500.4 Q F3(value)2.508 E F0 .009(is gi)2.508 F -.15
+(ve)-.25 G 2.509(n. A).15 F .009(trailing space in)2.509 F F3(value)
+2.509 E F0 .009(causes the ne)2.509 F .009(xt w)-.15 F .009
+(ord to be check)-.1 F .009(ed for alias substi-)-.1 F .579
+(tution when the alias is e)144 512.4 R 3.079(xpanded. F)-.15 F .579
+(or each)-.15 F F3(name)3.079 E F0 .579(in the ar)3.079 F .579
+(gument list for which no)-.18 F F3(value)3.079 E F0 .578(is sup-)3.078
+F 1.313(plied, the name and v)144 524.4 R 1.314
+(alue of the alias is printed.)-.25 F F2(Alias)6.314 E F0 1.314
+(returns true unless a)3.814 F F3(name)3.814 E F0 1.314(is gi)3.814 F
+-.15(ve)-.25 G 3.814(nf).15 G(or)-3.814 E
+(which no alias has been de\214ned.)144 536.4 Q F2(bg)108 553.2 Q F0([)
+2.5 E F3(jobspec)A F0(...])2.5 E .745(Resume each suspended job)144
+565.2 R F3(jobspec)3.245 E F0 .745
+(in the background, as if it had been started with)3.245 F F2(&)3.244 E
+F0 5.744(.I)C(f)-5.744 E F3(job-)4.984 E(spec)144 577.2 Q F0 .671
+(is not present, the shell')3.481 F 3.171(sn)-.55 G .672(otion of the)
+-3.171 F F3(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F2
+(bg)5.672 E F3(jobspec)4.912 E F0 .672(returns 0 unless run)3.482 F .419
+(when job control is disabled or)144 589.2 R 2.919(,w)-.4 G .419
+(hen run with job control enabled, an)-2.919 F 2.918(ys)-.15 G
+(peci\214ed)-2.918 E F3(jobspec)2.918 E F0 -.1(wa)2.918 G 2.918(sn).1 G
+(ot)-2.918 E(found or w)144 601.2 Q(as started without job control.)-.1
+E F2(bind)108 618 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5 G(ymap)-.2 E F0
+2.5(][)C F2(\255lpsvPSVX)-2.5 E F0(])A F2(bind)108 630 Q F0([)2.5 E F2
+<ad6d>A F3 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F2<ad71>-2.5 E F3
+(function)2.5 E F0 2.5(][)C F2<ad75>-2.5 E F3(function)2.5 E F0 2.5(][)C
+F2<ad72>-2.5 E F3 -.1(ke)2.5 G(yseq)-.2 E F0(])A F2(bind)108 642 Q F0([)
+2.5 E F2<ad6d>A F3 -.1(ke)2.5 G(ymap)-.2 E F0(])A F2<ad66>2.5 E F3
+(\214lename)2.5 E F2(bind)108 654 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5 G
+(ymap)-.2 E F0(])A F2<ad78>2.5 E F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3
+(shell\255command)A F2(bind)108 666 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5
+G(ymap)-.2 E F0(])A F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3
+(function\255name)A F2(bind)108 678 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5
+G(ymap)-.2 E F0(])A F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3 -.37(re)C
+(adline\255command).37 E F0 .238(Display current)144 690 R F2 -.18(re)
+2.738 G(adline).18 E F0 -.1(ke)2.738 G 2.738(ya)-.05 G .239
+(nd function bindings, bind a k)-2.738 F .539 -.15(ey s)-.1 H .239
+(equence to a).15 F F2 -.18(re)2.739 G(adline).18 E F0 .239(function or)
+2.739 F .476(macro, or set a)144 702 R F2 -.18(re)2.976 G(adline).18 E
+F0 -.25(va)2.976 G 2.976(riable. Each).25 F .476(non-option ar)2.976 F
+.475(gument is a command as it w)-.18 F .475(ould appear in)-.1 F F3
+(.inputr)144 714 Q(c)-.37 E F0 2.983(,b).31 G .484
+(ut each binding or command must be passed as a separate ar)-3.183 F
+.484(gument; e.g., '"\\C\255x\\C\255r":)-.18 F 2.5
+(re\255read\255init\255\214le'. Options,)144 726 R(if supplied, ha)2.5 E
+.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E(GNU Bash 5.0)72
+768 Q(2004 Apr 20)149.565 E(1)203.725 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF<ad6d>144 84 Q/F2 10
+/Times-Italic@0 SF -.1(ke)2.5 G(ymap)-.2 E F0(Use)180 96 Q F2 -.1(ke)
+5.159 G(ymap)-.2 E F0 2.659(as the k)5.349 F -.15(ey)-.1 G 2.658
+(map to be af).15 F 2.658(fected by the subsequent bindings.)-.25 F
+(Acceptable)7.658 E F2 -.1(ke)180 108 S(ymap)-.2 E F0 3.192(names are)
+5.882 F F2 3.192(emacs, emacs\255standar)5.692 F 3.193
+(d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E
+(vi\255command)180 120 Q F0 4.114(,a)C(nd)-4.114 E F2(vi\255insert)4.114
+E F0(.).68 E F2(vi)6.614 E F0 1.613(is equi)4.114 F -.25(va)-.25 G 1.613
+(lent to).25 F F2(vi\255command)4.113 E F0(\()4.113 E F2(vi\255mo)A(ve)
+-.1 E F0 1.613(is also a syn-)4.113 F(on)180 132 Q(ym\);)-.15 E F2
+(emacs)2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F2
+(emacs\255standar)2.5 E(d)-.37 E F0(.)A F1<ad6c>144 144 Q F0
+(List the names of all)180 144 Q F1 -.18(re)2.5 G(adline).18 E F0
+(functions.)2.5 E F1<ad70>144 156 Q F0(Display)180 156 Q F1 -.18(re)2.5
+G(adline).18 E F0(function names and bindings in such a w)2.5 E
+(ay that the)-.1 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1<ad50>144 168 Q
+F0(List current)180 168 Q F1 -.18(re)2.5 G(adline).18 E F0
+(function names and bindings.)2.5 E F1<ad73>144 180 Q F0(Display)180 180
+Q F1 -.18(re)3.655 G(adline).18 E F0 -.1(ke)3.655 G 3.655(ys)-.05 G
+1.155(equences bound to macros and the strings the)-3.655 F 3.655(yo)
+-.15 G 1.155(utput in such a)-3.655 F -.1(wa)180 192 S 2.5(yt).1 G
+(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1<ad53>144 204 Q F0
+(Display)180 204 Q F1 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5(ys)
+-.05 G(equences bound to macros and the strings the)-2.5 E 2.5(yo)-.15 G
+(utput.)-2.5 E F1<ad76>144 216 Q F0(Display)180 216 Q F1 -.18(re)2.5 G
+(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E
+(alues in such a w)-.25 E(ay that the)-.1 E 2.5(yc)-.15 G
+(an be re-read.)-2.5 E F1<ad56>144 228 Q F0(List current)180 228 Q F1
+-.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E
+(alues.)-.25 E F1<ad66>144 240 Q F2(\214lename)2.5 E F0(Read k)180 252 Q
+.3 -.15(ey b)-.1 H(indings from).15 E F2(\214lename)2.5 E F0(.)A F1
+<ad71>144 264 Q F2(function)2.5 E F0(Query about which k)180 276 Q -.15
+(ey)-.1 G 2.5(si).15 G -1.9 -.4(nv o)-2.5 H .2 -.1(ke t).4 H(he named).1
+E F2(function)2.5 E F0(.)A F1<ad75>144 288 Q F2(function)2.5 E F0
+(Unbind all k)180 300 Q -.15(ey)-.1 G 2.5(sb).15 G(ound to the named)
+-2.5 E F2(function)2.5 E F0(.)A F1<ad72>144 312 Q F2 -.1(ke)2.5 G(yseq)
+-.2 E F0(Remo)180 324 Q .3 -.15(ve a)-.15 H .3 -.15(ny c).15 H
+(urrent binding for).15 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(.)A F1<ad78>144
+336 Q F2 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F2(shell\255command)A F0(Cause)
+180 348 Q F2(shell\255command)4.325 E F0 1.825(to be e)4.325 F -.15(xe)
+-.15 G 1.825(cuted whene).15 F -.15(ve)-.25 G(r).15 E F2 -.1(ke)4.325 G
+(yseq)-.2 E F0 1.825(is entered.)4.325 F(When)6.825 E F2(shell\255com-)
+4.325 E(mand)180 360 Q F0 1.764(is e)4.264 F -.15(xe)-.15 G 1.765
+(cuted, the shell sets the).15 F/F3 9/Times-Bold@0 SF(READLINE_LINE)
+4.265 E F0 -.25(va)4.015 G 1.765(riable to the contents of the).25 F F1
+-.18(re)180 372 S(adline).18 E F0 1.353(line b)3.853 F(uf)-.2 E 1.353
+(fer and the)-.25 F F3(READLINE_POINT)3.853 E F0 -.25(va)3.603 G 1.353
+(riable to the current location of the).25 F 2.011(insertion point.)180
+384 R 2.011(If the e)7.011 F -.15(xe)-.15 G 2.011
+(cuted command changes the v).15 F 2.011(alue of)-.25 F F3
+(READLINE_LINE)4.512 E F0(or)4.262 E F3(READLINE_POINT)180 396 Q/F4 9
+/Times-Roman@0 SF(,)A F0(those ne)2.25 E 2.5(wv)-.25 G
+(alues will be re\215ected in the editing state.)-2.75 E F1<ad58>144 408
+Q F0 .83(List all k)180 408 R 1.13 -.15(ey s)-.1 H .829
+(equences bound to shell commands and the associated commands in a for)
+.15 F(-)-.2 E(mat that can be reused as input.)180 420 Q(The return v)
+144 436.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15
+(ve)-.25 G 2.5(no).15 G 2.5(ra)-2.5 G 2.5(ne)-2.5 G(rror occurred.)-2.5
+E F1(br)108 453.6 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .054
+(Exit from within a)144 465.6 R F1 -.25(fo)2.554 G(r).25 E F0(,)A F1
+(while)2.554 E F0(,)A F1(until)2.555 E F0 2.555(,o)C(r)-2.555 E F1
+(select)2.555 E F0 2.555(loop. If)2.555 F F2(n)2.555 E F0 .055
+(is speci\214ed, break)2.555 F F2(n)2.555 E F0(le)2.555 E -.15(ve)-.25 G
+(ls.).15 E F2(n)5.415 E F0 .055(must be)2.795 F/F5 10/Symbol SF<b3>2.555
+E F0(1.)2.555 E(If)144 477.6 Q F2(n)3.075 E F0 .215(is greater than the\
+ number of enclosing loops, all enclosing loops are e)2.955 F 2.714
+(xited. The)-.15 F .214(return v)2.714 F(alue)-.25 E(is 0 unless)144
+489.6 Q F2(n)2.5 E F0(is not greater than or equal to 1.)2.5 E F1 -.2
+(bu)108 506.4 S(iltin).2 E F2(shell\255b)2.5 E(uiltin)-.2 E F0([)2.5 E
+F2(ar)A(guments)-.37 E F0(])A(Ex)144 518.4 Q .792
+(ecute the speci\214ed shell b)-.15 F .792(uiltin, passing it)-.2 F F2
+(ar)3.293 E(guments)-.37 E F0 3.293(,a).27 G .793(nd return its e)-3.293
+F .793(xit status.)-.15 F .793(This is useful)5.793 F .616
+(when de\214ning a function whose name is the same as a shell b)144
+530.4 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144
+542.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F1(cd)3.07 E F0
+-.2(bu)3.07 G .57(iltin is commonly rede\214ned this w).2 F(ay)-.1 E
+5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 554.4 Q(alse if)-.1
+E F2(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E
+(uiltin command.)-.2 E F1(caller)108 571.2 Q F0([)2.5 E F2 -.2(ex)C(pr)
+.2 E F0(])A .254(Returns the conte)144 583.2 R .254(xt of an)-.15 F
+2.754(ya)-.15 G(cti)-2.754 E .554 -.15(ve s)-.25 H .254
+(ubroutine call \(a shell function or a script e).15 F -.15(xe)-.15 G
+.254(cuted with the).15 F F1(.)2.753 E F0(or)2.753 E F1(sour)144 595.2 Q
+(ce)-.18 E F0 -.2(bu)2.824 G 2.824(iltins\). W).2 F(ithout)-.4 E F2 -.2
+(ex)2.824 G(pr).2 E F0(,)A F1(caller)2.824 E F0 .324
+(displays the line number and source \214lename of the current)2.824 F
+.254(subroutine call.)144 607.2 R .254(If a non-ne)5.254 F -.05(ga)-.15
+G(ti).05 E .554 -.15(ve i)-.25 H(nte).15 E .253(ger is supplied as)-.15
+F F2 -.2(ex)2.753 G(pr).2 E F0(,)A F1(caller)2.753 E F0 .253
+(displays the line number)2.753 F 2.753(,s)-.4 G(ub-)-2.753 E 1.327(rou\
+tine name, and source \214le corresponding to that position in the curr\
+ent e)144 619.2 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001
+(This e)144 631.2 R .001(xtra information may be used, for e)-.15 F .001
+(xample, to print a stack trace.)-.15 F(The current frame is frame)5 E
+3.019(0. The)144 643.2 R .519(return v)3.019 F .519
+(alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .52
+(cuting a subroutine call or).15 F F2 -.2(ex)3.02 G(pr).2 E F0 .52
+(does not corre-)3.02 F(spond to a v)144 655.2 Q
+(alid position in the call stack.)-.25 E F1(cd)108 672 Q F0([)2.5 E F1
+<ad4c>A F0(|[)A F1<ad50>A F0([)2.5 E F1<ad65>A F0(]] [\255@]] [)A F2
+(dir)A F0(])A .322(Change the current directory to)144 684 R F2(dir)
+2.822 E F0 5.322(.i)C(f)-5.322 E F2(dir)2.822 E F0 .321
+(is not supplied, the v)2.822 F .321(alue of the)-.25 F F3(HOME)2.821 E
+F0 .321(shell v)2.571 F .321(ariable is)-.25 F 1.035(the def)144 696 R
+3.535(ault. An)-.1 F 3.535(ya)-.15 G 1.035(dditional ar)-3.535 F 1.035
+(guments follo)-.18 F(wing)-.25 E F2(dir)3.535 E F0 1.035(are ignored.)
+3.535 F 1.036(The v)6.035 F(ariable)-.25 E F3(CDP)3.536 E -.855(AT)-.666
+G(H).855 E F0(de\214nes)3.286 E .85
+(the search path for the directory containing)144 708 R F2(dir)3.35 E F0
+3.35(:e).73 G .849(ach directory name in)-3.35 F F3(CDP)3.349 E -.855
+(AT)-.666 G(H).855 E F0 .849(is searched for)3.099 F F2(dir)144 720 Q F0
+5.664(.A)C(lternati)-5.664 E .964 -.15(ve d)-.25 H .665
+(irectory names in).15 F F3(CDP)3.165 E -.855(AT)-.666 G(H).855 E F0
+.665(are separated by a colon \(:\).)2.915 F 3.165(An)5.665 G .665
+(ull directory name)-3.165 F(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E
+(2)203.725 E 0 Cg EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E(in)144 84 Q/F1 9/Times-Bold@0 SF(CDP)4.163
+E -.855(AT)-.666 G(H).855 E F0 1.663
+(is the same as the current directory)3.913 F 4.162(,i)-.65 G 1.662
+(.e., `)-4.162 F(`)-.74 E/F2 10/Times-Bold@0 SF(.)A F0 -.74('')C 6.662
+(.I).74 G(f)-6.662 E/F3 10/Times-Italic@0 SF(dir)4.512 E F0(be)4.892 E
+1.662(gins with a slash \(/\), then)-.15 F F1(CDP)144 96 Q -.855(AT)
+-.666 G(H).855 E F0 .19(is not used.)2.44 F(The)5.191 E F2<ad50>2.691 E
+F0 .191(option causes)2.691 F F2(cd)2.691 E F0 .191(to use the ph)2.691
+F .191(ysical directory structure by resolving)-.05 F 1.12
+(symbolic links while tra)144 108 R -.15(ve)-.2 G(rsing).15 E F3(dir)
+3.62 E F0 1.12(and before processing instances of)3.62 F F3(..)3.62 E F0
+(in)3.62 E F3(dir)3.62 E F0 1.12(\(see also the)3.62 F F2<ad50>3.62 E F0
+.395(option to the)144 120 R F2(set)2.895 E F0 -.2(bu)2.895 G .395
+(iltin command\); the).2 F F2<ad4c>2.895 E F0 .395
+(option forces symbolic links to be follo)2.895 F .395(wed by resolv-)
+-.25 F .444(ing the link after processing instances of)144 132 R F3(..)
+2.943 E F0(in)2.943 E F3(dir)2.943 E F0 5.443(.I)C(f)-5.443 E F3(..)
+2.943 E F0 .443(appears in)2.943 F F3(dir)2.943 E F0 2.943(,i)C 2.943
+(ti)-2.943 G 2.943(sp)-2.943 G .443(rocessed by remo)-2.943 F(ving)-.15
+E .744(the immediately pre)144 144 R .744(vious pathname component from)
+-.25 F F3(dir)3.244 E F0 3.244(,b)C .744(ack to a slash or the be)-3.244
+F .744(ginning of)-.15 F F3(dir)3.244 E F0(.)A 1.466(If the)144 156 R F2
+<ad65>3.966 E F0 1.466(option is supplied with)3.966 F F2<ad50>3.965 E
+F0 3.965(,a)C 1.465(nd the current w)-3.965 F 1.465
+(orking directory cannot be successfully)-.1 F .467
+(determined after a successful directory change,)144 168 R F2(cd)2.968 E
+F0 .468(will return an unsuccessful status.)2.968 F .468(On systems)
+5.468 F .337(that support it, the)144 180 R F2<ad40>2.837 E F0 .336
+(option presents the e)2.836 F .336(xtended attrib)-.15 F .336
+(utes associated with a \214le as a directory)-.2 F(.)-.65 E .71(An ar)
+144 192 R .71(gument of)-.18 F F2<ad>3.21 E F0 .71(is con)3.21 F -.15
+(ve)-.4 G .71(rted to).15 F F1($OLDPWD)3.21 E F0 .71
+(before the directory change is attempted.)2.96 F .71(If a non-)5.71 F
+.107(empty directory name from)144 204 R F1(CDP)2.607 E -.855(AT)-.666 G
+(H).855 E F0 .107(is used, or if)2.357 F F2<ad>2.607 E F0 .106
+(is the \214rst ar)2.607 F .106(gument, and the directory change)-.18 F
+.038(is successful, the absolute pathname of the ne)144 216 R 2.538(ww)
+-.25 G .038(orking directory is written to the standard output.)-2.638 F
+(The return v)144 228 Q(alue is true if the directory w)-.25 E
+(as successfully changed; f)-.1 E(alse otherwise.)-.1 E F2(command)108
+244.8 Q F0([)2.5 E F2(\255pVv)A F0(])A F3(command)2.5 E F0([)2.5 E F3
+(ar)A(g)-.37 E F0(...])2.5 E(Run)144 256.8 Q F3(command)2.765 E F0(with)
+3.335 E F3(ar)2.895 E(gs)-.37 E F0 .065
+(suppressing the normal shell function lookup.)2.835 F .064(Only b)5.064
+F .064(uiltin commands or)-.2 F .501(commands found in the)144 268.8 R
+F1 -.666(PA)3.001 G(TH)-.189 E F0 .502(are e)2.751 F -.15(xe)-.15 G
+3.002(cuted. If).15 F(the)3.002 E F2<ad70>3.002 E F0 .502(option is gi)
+3.002 F -.15(ve)-.25 G .502(n, the search for).15 F F3(command)3.202 E
+F0(is)3.772 E .4(performed using a def)144 280.8 R .4(ault v)-.1 F .4
+(alue for)-.25 F F1 -.666(PA)2.9 G(TH)-.189 E F0 .399
+(that is guaranteed to \214nd all of the standard utilities.)2.649 F(If)
+5.399 E .174(either the)144 292.8 R F2<ad56>2.674 E F0(or)2.674 E F2
+<ad76>2.674 E F0 .175(option is supplied, a description of)2.674 F F3
+(command)2.875 E F0 .175(is printed.)3.445 F(The)5.175 E F2<ad76>2.675 E
+F0 .175(option causes)2.675 F 3.318(as)144 304.8 S .818(ingle w)-3.318 F
+.817(ord indicating the command or \214lename used to in)-.1 F -.2(vo)
+-.4 G -.1(ke).2 G F3(command)3.617 E F0 .817(to be displayed; the)4.087
+F F2<ad56>144 316.8 Q F0 .249(option produces a more v)2.749 F .249
+(erbose description.)-.15 F .249(If the)5.249 F F2<ad56>2.749 E F0(or)
+2.749 E F2<ad76>2.75 E F0 .25(option is supplied, the e)2.75 F .25
+(xit status)-.15 F 1.005(is 0 if)144 328.8 R F3(command)3.705 E F0 -.1
+(wa)4.275 G 3.505(sf).1 G 1.005(ound, and 1 if not.)-3.505 F 1.004
+(If neither option is supplied and an error occurred or)6.005 F F3
+(command)144.2 340.8 Q F0 1.598(cannot be found, the e)4.868 F 1.599
+(xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.599
+(xit status of the)-.15 F F2(command)4.099 E F0 -.2(bu)144 352.8 S
+(iltin is the e).2 E(xit status of)-.15 E F3(command)2.5 E F0(.).77 E F2
+(compgen)108 369.6 Q F0([)2.5 E F3(option)A F0 2.5(][)C F3(wor)-2.5 E(d)
+-.37 E F0(])A .013(Generate possible completion matches for)144 381.6 R
+F3(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F3(option)2.513
+E F0 .013(s, which may be an)B 2.512(yo)-.15 G(ption)-2.512 E .981
+(accepted by the)144 393.6 R F2(complete)3.481 E F0 -.2(bu)3.481 G .981
+(iltin with the e).2 F .981(xception of)-.15 F F2<ad70>3.481 E F0(and)
+3.481 E F2<ad72>3.481 E F0 3.481(,a)C .982(nd write the matches to the)
+-3.481 F .131(standard output.)144 405.6 R .131(When using the)5.131 F
+F2<ad46>2.631 E F0(or)2.631 E F2<ad43>2.631 E F0 .131(options, the v)
+2.631 F .13(arious shell v)-.25 F .13(ariables set by the program-)-.25
+F(mable completion f)144 417.6 Q(acilities, while a)-.1 E -.25(va)-.2 G
+(ilable, will not ha).25 E .3 -.15(ve u)-.2 H(seful v).15 E(alues.)-.25
+E .352(The matches will be generated in the same w)144 441.6 R .352
+(ay as if the programmable completion code had gen-)-.1 F .02(erated th\
+em directly from a completion speci\214cation with the same \215ags.)144
+453.6 R(If)5.02 E F3(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only)
+2.52 F(those completions matching)144 465.6 Q F3(wor)2.5 E(d)-.37 E F0
+(will be displayed.)2.5 E(The return v)144 489.6 Q
+(alue is true unless an in)-.25 E -.25(va)-.4 G
+(lid option is supplied, or no matches were generated.).25 E F2
+(complete)108 506.4 Q F0([)3.404 E F2(\255abcdefgjksuv)A F0 3.404(][)C
+F2<ad6f>-3.404 E F3(comp-option)3.404 E F0 3.404(][)C F2(\255DEI)-3.404
+E F0 3.404(][)C F2<ad41>-3.404 E F3(action)3.404 E F0 3.404(][)C F2
+<ad47>-3.404 E F3(globpat)3.404 E F0 3.404(][)C F2<ad57>-3.404 E F3(wor)
+3.404 E(dlist)-.37 E F0 3.405(][)C F2<ad46>-3.405 E F3(func-)3.405 E
+(tion)108 518.4 Q F0 2.5(][)C F2<ad43>-2.5 E F3(command)2.5 E F0(])A([)
+144 530.4 Q F2<ad58>A F3(\214lterpat)2.5 E F0 2.5(][)C F2<ad50>-2.5 E F3
+(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F2<ad53>-2.5 E F3(suf)2.5 E<8c78>
+-.18 E F0(])A F3(name)2.5 E F0([)2.5 E F3(name ...)A F0(])A F2
+(complete \255pr)108 542.4 Q F0([)2.5 E F2(\255DEI)A F0 2.5(][)C F3
+(name)-2.5 E F0(...])2.5 E .634(Specify ho)144 554.4 R 3.134(wa)-.25 G
+-.18(rg)-3.134 G .634(uments to each).18 F F3(name)3.134 E F0 .634
+(should be completed.)3.134 F .633(If the)5.634 F F2<ad70>3.133 E F0
+.633(option is supplied, or if no)3.133 F .139(options are supplied, e)
+144 566.4 R .139(xisting completion speci\214cations are printed in a w)
+-.15 F .14(ay that allo)-.1 F .14(ws them to be)-.25 F .31
+(reused as input.)144 578.4 R(The)5.31 E F2<ad72>2.81 E F0 .31
+(option remo)2.81 F -.15(ve)-.15 G 2.81(sac).15 G .31
+(ompletion speci\214cation for each)-2.81 F F3(name)2.81 E F0 2.81(,o)C
+1.11 -.4(r, i)-2.81 H 2.81(fn).4 G(o)-2.81 E F3(name)2.81 E F0(s)A 1.207
+(are supplied, all completion speci\214cations.)144 590.4 R(The)6.207 E
+F2<ad44>3.707 E F0 1.208(option indicates that other supplied options)
+3.708 F .5(and actions should apply to the `)144 602.4 R(`def)-.74 E
+(ault')-.1 E 3('c)-.74 G .5
+(ommand completion; that is, completion attempted on)-3 F 3.455(ac)144
+614.4 S .955(ommand for which no completion has pre)-3.455 F .955
+(viously been de\214ned.)-.25 F(The)5.955 E F2<ad45>3.455 E F0 .955
+(option indicates that)3.455 F .876
+(other supplied options and actions should apply to `)144 626.4 R
+(`empty')-.74 E 3.376('c)-.74 G .876(ommand completion; that is, com-)
+-3.376 F .447(pletion attempted on a blank line.)144 638.4 R(The)5.447 E
+F2<ad49>2.947 E F0 .448
+(option indicates that other supplied options and actions)2.947 F 1.335
+(should apply to completion on the inital non-assignment w)144 650.4 R
+1.334(ord on the line, or after a command)-.1 F .43(delimiter such as)
+144 662.4 R F2(;)2.93 E F0(or)2.93 E F2(|)2.93 E F0 2.93(,w)C .431
+(hich is usually command name completion.)-2.93 F .431
+(If multiple options are sup-)5.431 F .708(plied, the)144 674.4 R F2
+<ad44>3.208 E F0 .708(option tak)3.208 F .708(es precedence o)-.1 F -.15
+(ve)-.15 G(r).15 E F2<ad45>3.208 E F0 3.208(,a)C .708(nd both tak)-3.208
+F 3.208(ep)-.1 G .707(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F2
+<ad49>3.207 E F0 5.707(.I)C 3.207(fa)-5.707 G 1.007 -.15(ny o)-3.207 H
+(f).15 E F2<ad44>3.207 E F0(,)A F2<ad45>144 686.4 Q F0 2.603(,o)C(r)
+-2.603 E F2<ad49>2.603 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15
+G(ther)-2.603 E F3(name)2.603 E F0(ar)2.603 E .103
+(guments are ignored; these completions only apply to the)-.18 F
+(case speci\214ed by the option.)144 698.4 Q 1.438
+(The process of applying these completion speci\214cations when w)144
+722.4 R 1.437(ord completion is attempted is)-.1 F(GNU Bash 5.0)72 768 Q
+(2004 Apr 20)149.565 E(3)203.725 E 0 Cg EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E(described abo)144 84 Q .3 -.15(ve u)-.15 H
+(nder).15 E/F1 10/Times-Bold@0 SF(Pr)2.5 E(ogrammable Completion)-.18 E
+F0(.)A .555(Other options, if speci\214ed, ha)144 108 R .855 -.15(ve t)
+-.2 H .555(he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F
+.555(guments to the)-.18 F F1<ad47>3.056 E F0(,)A F1<ad57>3.056 E F0
+3.056(,a)C(nd)-3.056 E F1<ad58>3.056 E F0 .723
+(options \(and, if necessary)144 120 R 3.223(,t)-.65 G(he)-3.223 E F1
+<ad50>3.223 E F0(and)3.223 E F1<ad53>3.223 E F0 .722
+(options\) should be quoted to protect them from e)3.223 F(xpan-)-.15 E
+(sion before the)144 132 Q F1(complete)2.5 E F0 -.2(bu)2.5 G
+(iltin is in).2 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F1<ad6f>144 144 Q/F2
+10/Times-Italic@0 SF(comp-option)2.5 E F0(The)184 156 Q F2(comp-option)
+2.79 E F0 .291(controls se)2.791 F -.15(ve)-.25 G .291
+(ral aspects of the compspec').15 F 2.791(sb)-.55 G(eha)-2.791 E .291
+(vior be)-.2 F .291(yond the simple)-.15 F(generation of completions.)
+184 168 Q F2(comp-option)5 E F0(may be one of:)2.5 E F1(bashdefault)184
+180 Q F0 .281(Perform the rest of the def)224 192 R(ault)-.1 E F1(bash)
+2.781 E F0 .281(completions if the compspec generates no)2.781 F
+(matches.)224 204 Q F1(default)184 216 Q F0 2.875(Use readline')224 216
+R 5.375(sd)-.55 G(ef)-5.375 E 2.876
+(ault \214lename completion if the compspec generates no)-.1 F(matches.)
+224 228 Q F1(dir)184 240 Q(names)-.15 E F0(Perform directory name compl\
+etion if the compspec generates no matches.)224 252 Q F1(\214lenames)184
+264 Q F0 -.7(Te)224 276 S .137(ll readline that the compspec generates \
+\214lenames, so it can perform an).7 F 2.636<798c>-.15 G(le-)-2.636 E
+.134(name\255speci\214c processing \(lik)224 288 R 2.634(ea)-.1 G .134
+(dding a slash to directory names, quoting spe-)-2.634 F .45
+(cial characters, or suppressing trailing spaces\).)224 300 R .45
+(Intended to be used with shell)5.45 F(functions.)224 312 Q F1(noquote)
+184 324 Q F0 -.7(Te)224 324 S .814
+(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F
+3.314(ya)-.15 G .815(re \214lenames \(quoting)-3.314 F
+(\214lenames is the def)224 336 Q(ault\).)-.1 E F1(nosort)184 348 Q F0
+-.7(Te)224 348 S(ll readline not to sort the list of possible completio\
+ns alphabetically).7 E(.)-.65 E F1(nospace)184 360 Q F0 -.7(Te)224 360 S
+.22(ll readline not to append a space \(the def).7 F .22(ault\) to w)-.1
+F .22(ords completed at the end)-.1 F(of the line.)224 372 Q F1
+(plusdirs)184 384 Q F0 1.985(After an)224 384 R 4.485(ym)-.15 G 1.985
+(atches de\214ned by the compspec are generated, directory name)-4.485 F
+.584(completion is attempted and an)224 396 R 3.084(ym)-.15 G .584
+(atches are added to the results of the other)-3.084 F(actions.)224 408
+Q F1<ad41>144 420 Q F2(action)2.5 E F0(The)184 432 Q F2(action)2.5 E F0
+(may be one of the follo)2.5 E
+(wing to generate a list of possible completions:)-.25 E F1(alias)184
+444 Q F0(Alias names.)224 444 Q(May also be speci\214ed as)5 E F1<ad61>
+2.5 E F0(.)A F1(arrayv)184 456 Q(ar)-.1 E F0(Array v)224 468 Q
+(ariable names.)-.25 E F1(binding)184 480 Q(Readline)224 480 Q F0 -.1
+(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 492 S(iltin)
+.2 E F0(Names of shell b)224 492 Q(uiltin commands.)-.2 E
+(May also be speci\214ed as)5 E F1<ad62>2.5 E F0(.)A F1(command)184 504
+Q F0(Command names.)224 516 Q(May also be speci\214ed as)5 E F1<ad63>2.5
+E F0(.)A F1(dir)184 528 Q(ectory)-.18 E F0(Directory names.)224 540 Q
+(May also be speci\214ed as)5 E F1<ad64>2.5 E F0(.)A F1(disabled)184 552
+Q F0(Names of disabled shell b)224 564 Q(uiltins.)-.2 E F1(enabled)184
+576 Q F0(Names of enabled shell b)224 576 Q(uiltins.)-.2 E F1(export)184
+588 Q F0(Names of e)224 588 Q(xported shell v)-.15 E 2.5(ariables. May)
+-.25 F(also be speci\214ed as)2.5 E F1<ad65>2.5 E F0(.)A F1(\214le)184
+600 Q F0(File names.)224 600 Q(May also be speci\214ed as)5 E F1<ad66>
+2.5 E F0(.)A F1(function)184 612 Q F0(Names of shell functions.)224 624
+Q F1(gr)184 636 Q(oup)-.18 E F0(Group names.)224 636 Q
+(May also be speci\214ed as)5 E F1<ad67>2.5 E F0(.)A F1(helptopic)184
+648 Q F0(Help topics as accepted by the)224 660 Q F1(help)2.5 E F0 -.2
+(bu)2.5 G(iltin.).2 E F1(hostname)184 672 Q F0(Hostnames, as tak)224 684
+Q(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF
+(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 696 Q F0
+(Job names, if job control is acti)224 696 Q -.15(ve)-.25 G 5(.M).15 G
+(ay also be speci\214ed as)-5 E F1<ad6a>2.5 E F0(.)A(GNU Bash 5.0)72 768
+Q(2004 Apr 20)149.565 E(4)203.725 E 0 Cg EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF -.1(ke)184 84 S(yw).1
+E(ord)-.1 E F0(Shell reserv)224 96 Q(ed w)-.15 E 2.5(ords. May)-.1 F
+(also be speci\214ed as)2.5 E F1<ad6b>2.5 E F0(.)A F1(running)184 108 Q
+F0(Names of running jobs, if job control is acti)224 108 Q -.15(ve)-.25
+G(.).15 E F1(ser)184 120 Q(vice)-.1 E F0(Service names.)224 120 Q
+(May also be speci\214ed as)5 E F1<ad73>2.5 E F0(.)A F1(setopt)184 132 Q
+F0 -1.11(Va)224 132 S(lid ar)1.11 E(guments for the)-.18 E F1<ad6f>2.5 E
+F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1
+(shopt)184 144 Q F0(Shell option names as accepted by the)224 144 Q F1
+(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 156 Q F0
+(Signal names.)224 156 Q F1(stopped)184 168 Q F0
+(Names of stopped jobs, if job control is acti)224 168 Q -.15(ve)-.25 G
+(.).15 E F1(user)184 180 Q F0(User names.)224 180 Q
+(May also be speci\214ed as)5 E F1<ad75>2.5 E F0(.)A F1 -.1(va)184 192 S
+(riable).1 E F0(Names of all shell v)224 192 Q 2.5(ariables. May)-.25 F
+(also be speci\214ed as)2.5 E F1<ad76>2.5 E F0(.)A F1<ad43>144 204 Q/F2
+10/Times-Italic@0 SF(command)2.5 E(command)184 216 Q F0 1.055(is e)3.555
+F -.15(xe)-.15 G 1.055(cuted in a subshell en).15 F 1.056
+(vironment, and its output is used as the possible)-.4 F(completions.)
+184 228 Q F1<ad46>144 240 Q F2(function)2.5 E F0 .114
+(The shell function)184 252 R F2(function)2.614 E F0 .114(is e)2.614 F
+-.15(xe)-.15 G .114(cuted in the current shell en).15 F 2.614
+(vironment. When)-.4 F .113(the func-)2.613 F .816(tion is e)184 264 R
+-.15(xe)-.15 G .816(cuted, the \214rst ar).15 F .816(gument \()-.18 F F1
+($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .817
+(he name of the command whose ar)-3.316 F(guments)-.18 E 1.407
+(are being completed, the second ar)184 276 R 1.407(gument \()-.18 F F1
+($2)A F0 3.907(\)i)C 3.907(st)-3.907 G 1.407(he w)-3.907 F 1.407
+(ord being completed, and the)-.1 F .103(third ar)184 288 R .103
+(gument \()-.18 F F1($3)A F0 2.603(\)i)C 2.603(st)-2.603 G .103(he w)
+-2.603 F .104(ord preceding the w)-.1 F .104
+(ord being completed on the current com-)-.1 F .102(mand line.)184 300 R
+.102(When it \214nishes, the possible completions are retrie)5.102 F
+-.15(ve)-.25 G 2.601(df).15 G .101(rom the v)-2.601 F .101(alue of the)
+-.25 F/F3 9/Times-Bold@0 SF(COMPREPL)184 312 Q(Y)-.828 E F0(array v)2.25
+E(ariable.)-.25 E F1<ad47>144 324 Q F2(globpat)2.5 E F0 1.007
+(The pathname e)184 336 R 1.007(xpansion pattern)-.15 F F2(globpat)3.507
+E F0 1.007(is e)3.507 F 1.008(xpanded to generate the possible comple-)
+-.15 F(tions.)184 348 Q F1<ad50>144 360 Q F2(pr)2.5 E(e\214x)-.37 E(pr)
+184 372 Q(e\214x)-.37 E F0 .535(is added at the be)3.035 F .534
+(ginning of each possible completion after all other options ha)-.15 F
+-.15(ve)-.2 G(been applied.)184 384 Q F1<ad53>144 396 Q F2(suf)2.5 E
+<8c78>-.18 E(suf)184 396 Q<8c78>-.18 E F0
+(is appended to each possible completion after all other options ha)2.5
+E .3 -.15(ve b)-.2 H(een applied.).15 E F1<ad57>144 408 Q F2(wor)2.5 E
+(dlist)-.37 E F0(The)184 420 Q F2(wor)3.639 E(dlist)-.37 E F0 1.14
+(is split using the characters in the)3.639 F F3(IFS)3.64 E F0 1.14
+(special v)3.39 F 1.14(ariable as delimiters, and)-.25 F .981
+(each resultant w)184 432 R .981(ord is e)-.1 F 3.481(xpanded. Shell)
+-.15 F .981(quoting is honored within)3.481 F F2(wor)3.481 E(dlist)-.37
+E F0 3.48(,i)C 3.48(no)-3.48 G .98(rder to)-3.48 F(pro)184 444 Q .765
+(vide a mechanism for the w)-.15 F .766
+(ords to contain shell metacharacters or characters in the)-.1 F -.25
+(va)184 456 S 1.965(lue of).25 F F3(IFS)4.465 E/F4 9/Times-Roman@0 SF(.)
+A F0 1.964
+(The possible completions are the members of the resultant list which)
+6.465 F(match the w)184 468 Q(ord being completed.)-.1 E F1<ad58>144 480
+Q F2(\214lterpat)2.5 E(\214lterpat)184 492 Q F0 .455
+(is a pattern as used for pathname e)2.955 F 2.956(xpansion. It)-.15 F
+.456(is applied to the list of possible)2.956 F 1.596
+(completions generated by the preceding options and ar)184 504 R 1.596
+(guments, and each completion)-.18 F(matching)184 516 Q F2(\214lterpat)
+3.204 E F0 .704(is remo)3.204 F -.15(ve)-.15 G 3.204(df).15 G .704
+(rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)3.204 E F0
+(in)3.204 E F2(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 G .705
+(tes the pattern;).05 F(in this case, an)184 528 Q 2.5(yc)-.15 G
+(ompletion not matching)-2.5 E F2(\214lterpat)2.5 E F0(is remo)2.5 E
+-.15(ve)-.15 G(d.).15 E .467(The return v)144 544.8 R .467
+(alue is true unless an in)-.25 F -.25(va)-.4 G .466
+(lid option is supplied, an option other than).25 F F1<ad70>2.966 E F0
+(or)2.966 E F1<ad72>2.966 E F0 .466(is sup-)2.966 F 1.361
+(plied without a)144 556.8 R F2(name)3.861 E F0(ar)3.861 E 1.361
+(gument, an attempt is made to remo)-.18 F 1.662 -.15(ve a c)-.15 H
+1.362(ompletion speci\214cation for a).15 F F2(name)144 568.8 Q F0
+(for which no speci\214cation e)2.5 E
+(xists, or an error occurs adding a completion speci\214cation.)-.15 E
+F1(compopt)108 585.6 Q F0([)2.5 E F1<ad6f>A F2(option)2.5 E F0 2.5(][)C
+F1(\255DEI)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F2(option)2.5 E F0 2.5(][)C
+F2(name)-2.5 E F0(])A .447(Modify completion options for each)144 597.6
+R F2(name)2.947 E F0 .447(according to the)2.947 F F2(option)2.947 E F0
+.447(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .725
+(completion if no)144 609.6 R F2(name)3.225 E F0 3.225(sa)C .725
+(re supplied.)-3.225 F .725(If no)5.725 F F2(option)3.225 E F0 3.225(sa)
+C .725(re gi)-3.225 F -.15(ve)-.25 G .726
+(n, display the completion options for).15 F(each)144 621.6 Q F2(name)
+3.224 E F0 .724(or the current completion.)3.224 F .724(The possible v)
+5.724 F .724(alues of)-.25 F F2(option)3.224 E F0 .724(are those v)3.224
+F .723(alid for the)-.25 F F1(com-)3.223 E(plete)144 633.6 Q F0 -.2(bu)
+2.677 G .177(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he)
+-5.178 E F1<ad44>2.678 E F0 .178
+(option indicates that other supplied options should apply to)2.678 F
+1.228(the `)144 645.6 R(`def)-.74 E(ault')-.1 E 3.728('c)-.74 G 1.228(o\
+mmand completion; that is, completion attempted on a command for which \
+no)-3.728 F 2.038(completion has pre)144 657.6 R 2.038
+(viously been de\214ned.)-.25 F(The)7.038 E F1<ad45>4.538 E F0 2.039
+(option indicates that other supplied options)4.538 F 1.539
+(should apply to `)144 669.6 R(`empty')-.74 E 4.039('c)-.74 G 1.538
+(ommand completion; that is, completion attempted on a blank line.)
+-4.039 F(The)144 681.6 Q F1<ad49>3.205 E F0 .705(option indicates that \
+other supplied options should apply to completion on the inital non-)
+3.205 F .868(assignment w)144 693.6 R .868
+(ord on the line, or after a command delimiter such as)-.1 F F1(;)3.368
+E F0(or)3.368 E F1(|)3.368 E F0 3.367(,w)C .867(hich is usually com-)
+-3.367 F(mand name completion.)144 705.6 Q 1.387(The return v)144 729.6
+R 1.387(alue is true unless an in)-.25 F -.25(va)-.4 G 1.388
+(lid option is supplied, an attempt is made to modify the).25 F
+(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(5)203.725 E 0 Cg EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E(options for a)144 84 Q/F1 10/Times-Italic@0
+SF(name)2.5 E F0(for which no completion speci\214cation e)2.5 E
+(xists, or an output error occurs.)-.15 E/F2 10/Times-Bold@0 SF
+(continue)108 100.8 Q F0([)2.5 E F1(n)A F0(])A 1.754(Resume the ne)144
+112.8 R 1.754(xt iteration of the enclosing)-.15 F F2 -.25(fo)4.254 G(r)
+.25 E F0(,)A F2(while)4.254 E F0(,)A F2(until)4.254 E F0 4.254(,o)C(r)
+-4.254 E F2(select)4.254 E F0 4.253(loop. If)4.254 F F1(n)4.613 E F0
+1.753(is speci\214ed,)4.493 F 1.208(resume at the)144 124.8 R F1(n)3.709
+E F0 1.209(th enclosing loop.)B F1(n)6.569 E F0 1.209(must be)3.949 F/F3
+10/Symbol SF<b3>3.709 E F0 3.709(1. If)3.709 F F1(n)4.069 E F0 1.209
+(is greater than the number of enclosing)3.949 F .514
+(loops, the last enclosing loop \(the `)144 136.8 R(`top-le)-.74 E -.15
+(ve)-.25 G(l').15 E 3.014('l)-.74 G .514(oop\) is resumed.)-3.014 F .513
+(The return v)5.513 F .513(alue is 0 unless)-.25 F F1(n)3.013 E F0(is)
+3.013 E(not greater than or equal to 1.)144 148.8 Q F2(declar)108 165.6
+Q(e)-.18 E F0([)2.5 E F2(\255aAfFgilnrtux)A F0 2.5(][)C F2<ad70>-2.5 E
+F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C(..])-2.5 E F2
+(typeset)108 177.6 Q F0([)2.5 E F2(\255aAfFgilnrtux)A F0 2.5(][)C F2
+<ad70>-2.5 E F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C
+(..])-2.5 E 1.264(Declare v)144 189.6 R 1.264(ariables and/or gi)-.25 F
+1.564 -.15(ve t)-.25 H 1.264(hem attrib).15 F 3.765(utes. If)-.2 F(no)
+3.765 E F1(name)3.765 E F0 3.765(sa)C 1.265(re gi)-3.765 F -.15(ve)-.25
+G 3.765(nt).15 G 1.265(hen display the v)-3.765 F 1.265(alues of)-.25 F
+-.25(va)144 201.6 S 3.483(riables. The).25 F F2<ad70>3.483 E F0 .983
+(option will display the attrib)3.483 F .983(utes and v)-.2 F .982
+(alues of each)-.25 F F1(name)3.482 E F0 5.982(.W).18 G(hen)-5.982 E F2
+<ad70>3.482 E F0 .982(is used)3.482 F(with)144 213.6 Q F1(name)2.774 E
+F0(ar)2.774 E .274(guments, additional options, other than)-.18 F F2
+<ad66>2.775 E F0(and)2.775 E F2<ad46>2.775 E F0 2.775(,a)C .275
+(re ignored.)-2.775 F(When)5.275 E F2<ad70>2.775 E F0 .275(is supplied)
+2.775 F(without)144 225.6 Q F1(name)4.814 E F0(ar)4.814 E 2.314
+(guments, it will display the attrib)-.18 F 2.314(utes and v)-.2 F 2.313
+(alues of all v)-.25 F 2.313(ariables ha)-.25 F 2.313(ving the)-.2 F
+(attrib)144 237.6 Q 1.181(utes speci\214ed by the additional options.)
+-.2 F 1.182(If no other options are supplied with)6.181 F F2<ad70>3.682
+E F0(,)A F2(declar)3.682 E(e)-.18 E F0 .62(will display the attrib)144
+249.6 R .62(utes and v)-.2 F .62(alues of all shell v)-.25 F 3.12
+(ariables. The)-.25 F F2<ad66>3.12 E F0 .62
+(option will restrict the display)3.12 F 1.29(to shell functions.)144
+261.6 R(The)6.29 E F2<ad46>3.79 E F0 1.291(option inhibits the display \
+of function de\214nitions; only the function)3.791 F .948
+(name and attrib)144 273.6 R .948(utes are printed.)-.2 F .948(If the)
+5.948 F F2(extdeb)3.448 E(ug)-.2 E F0 .948
+(shell option is enabled using)3.448 F F2(shopt)3.448 E F0 3.448(,t)C
+.948(he source)-3.448 F 1.69(\214le name and line number where each)144
+285.6 R F1(name)4.19 E F0 1.69(is de\214ned are displayed as well.)4.19
+F(The)6.69 E F2<ad46>4.19 E F0(option)4.19 E(implies)144 297.6 Q F2
+<ad66>3.892 E F0 6.392(.T)C(he)-6.392 E F2<ad67>3.892 E F0 1.391
+(option forces v)3.892 F 1.391
+(ariables to be created or modi\214ed at the global scope, e)-.25 F -.15
+(ve)-.25 G(n).15 E(when)144 309.6 Q F2(declar)4.382 E(e)-.18 E F0 1.882
+(is e)4.382 F -.15(xe)-.15 G 1.882(cuted in a shell function.).15 F
+1.883(It is ignored in all other cases.)6.882 F 1.883(The follo)6.883 F
+(wing)-.25 E .794(options can be used to restrict output to v)144 321.6
+R .794(ariables with the speci\214ed attrib)-.25 F .793(ute or to gi)-.2
+F 1.093 -.15(ve v)-.25 H(ariables)-.1 E(attrib)144 333.6 Q(utes:)-.2 E
+F2<ad61>144 345.6 Q F0(Each)180 345.6 Q F1(name)2.5 E F0(is an inde)2.5
+E -.15(xe)-.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F2
+(Arrays)2.5 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F2<ad41>144 357.6 Q
+F0(Each)180 357.6 Q F1(name)2.5 E F0(is an associati)2.5 E .3 -.15(ve a)
+-.25 H(rray v).15 E(ariable \(see)-.25 E F2(Arrays)2.5 E F0(abo)2.5 E
+-.15(ve)-.15 G(\).).15 E F2<ad66>144 369.6 Q F0(Use function names only)
+180 369.6 Q(.)-.65 E F2<ad69>144 381.6 Q F0 .557(The v)180 381.6 R .558
+(ariable is treated as an inte)-.25 F .558(ger; arithmetic e)-.15 F -.25
+(va)-.25 G .558(luation \(see).25 F/F4 9/Times-Bold@0 SF .558
+(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION)180 393.6 Q F0(abo)
+2.25 E -.15(ve)-.15 G 2.5(\)i).15 G 2.5(sp)-2.5 G(erformed when the v)
+-2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E F2<ad6c>144 405.6 Q
+F0 .91(When the v)180 405.6 R .909(ariable is assigned a v)-.25 F .909
+(alue, all upper)-.25 F .909(-case characters are con)-.2 F -.15(ve)-.4
+G .909(rted to lo).15 F(wer)-.25 E(-)-.2 E 2.5(case. The)180 417.6 R
+(upper)2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad6e>144 429.6
+Q F0(Gi)180 429.6 Q 1.619 -.15(ve e)-.25 H(ach).15 E F1(name)3.819 E F0
+(the)3.819 E F1(namer)3.819 E(ef)-.37 E F0(attrib)3.819 E 1.319
+(ute, making it a name reference to another v)-.2 F(ariable.)-.25 E
+1.519(That other v)180 441.6 R 1.519(ariable is de\214ned by the v)-.25
+F 1.518(alue of)-.25 F F1(name)4.018 E F0 6.518(.A)C 1.518
+(ll references, assignments, and)-6.518 F(attrib)180 453.6 Q .226
+(ute modi\214cations to)-.2 F F1(name)2.726 E F0 2.726(,e)C .226
+(xcept those using or changing the)-2.876 F F2<ad6e>2.726 E F0(attrib)
+2.726 E .227(ute itself, are)-.2 F .809(performed on the v)180 465.6 R
+.809(ariable referenced by)-.25 F F1(name)3.308 E F0 1.908 -.55('s v)D
+3.308(alue. The).3 F .808(nameref attrib)3.308 F .808(ute cannot be)-.2
+F(applied to array v)180 477.6 Q(ariables.)-.25 E F2<ad72>144 489.6 Q F0
+(Mak)180 489.6 Q(e)-.1 E F1(name)5.046 E F0 5.046(sr)C(eadonly)-5.046 E
+7.546(.T)-.65 G 2.546(hese names cannot then be assigned v)-7.546 F
+2.547(alues by subsequent)-.25 F(assignment statements or unset.)180
+501.6 Q F2<ad74>144 513.6 Q F0(Gi)180 513.6 Q .73 -.15(ve e)-.25 H(ach)
+.15 E F1(name)2.93 E F0(the)2.929 E F1(tr)2.929 E(ace)-.15 E F0(attrib)
+2.929 E 2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F2
+(DEB)2.929 E(UG)-.1 E F0(and)2.929 E F2(RETURN)2.929 E F0
+(traps from the calling shell.)180 525.6 Q(The trace attrib)5 E
+(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2<ad75>144
+537.6 Q F0 .909(When the v)180 537.6 R .909(ariable is assigned a v)-.25
+F .909(alue, all lo)-.25 F(wer)-.25 E .909(-case characters are con)-.2
+F -.15(ve)-.4 G .91(rted to upper).15 F(-)-.2 E 2.5(case. The)180 549.6
+R(lo)2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad78>
+144 561.6 Q F0(Mark)180 561.6 Q F1(name)2.5 E F0 2.5(sf)C(or e)-2.5 E
+(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .144
+(Using `+' instead of `\255' turns of)144 578.4 R 2.643(ft)-.25 G .143
+(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .143
+(xceptions that)-.15 F F2(+a)2.643 E F0(and)2.643 E F2(+A)2.643 E F0
+.143(may not)2.643 F .578(be used to destro)144 590.4 R 3.079(ya)-.1 G
+.579(rray v)-3.079 F .579(ariables and)-.25 F F2(+r)3.079 E F0 .579
+(will not remo)3.079 F .879 -.15(ve t)-.15 H .579(he readonly attrib).15
+F 3.079(ute. When)-.2 F .579(used in a)3.079 F(function,)144 602.4 Q F2
+(declar)3.544 E(e)-.18 E F0(and)3.544 E F2(typeset)3.544 E F0(mak)3.544
+E 3.544(ee)-.1 G(ach)-3.544 E F1(name)3.543 E F0 1.043
+(local, as with the)3.543 F F2(local)3.543 E F0 1.043
+(command, unless the)3.543 F F2<ad67>3.543 E F0 1.205
+(option is supplied.)144 614.4 R 1.205(If a v)6.205 F 1.205
+(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F1(value)A F0 3.705
+(,t)C 1.205(he v)-3.705 F 1.205(alue of the v)-.25 F 1.205
+(ariable is set to)-.25 F F1(value)144 626.4 Q F0 5.218(.W)C .218
+(hen using)-5.218 F F2<ad61>2.718 E F0(or)2.718 E F2<ad41>2.718 E F0
+.217(and the compound assignment syntax to create array v)2.717 F .217
+(ariables, addi-)-.25 F .882(tional attrib)144 638.4 R .882
+(utes do not tak)-.2 F 3.382(ee)-.1 G -.25(ff)-3.382 G .882
+(ect until subsequent assignments.).25 F .882(The return v)5.882 F .882
+(alue is 0 unless an)-.25 F(in)144 650.4 Q -.25(va)-.4 G 1.26(lid optio\
+n is encountered, an attempt is made to de\214ne a function using).25 F
+/F5 10/Courier@0 SF 1.26(\255f foo=bar)3.76 F F0 3.76(,a)C(n)-3.76 E
+.187(attempt is made to assign a v)144 662.4 R .187
+(alue to a readonly v)-.25 F .188
+(ariable, an attempt is made to assign a v)-.25 F .188(alue to an)-.25 F
+1.749(array v)144 674.4 R 1.749
+(ariable without using the compound assignment syntax \(see)-.25 F F2
+(Arrays)4.248 E F0(abo)4.248 E -.15(ve)-.15 G 1.748(\), one of the).15 F
+F1(names)144 686.4 Q F0 .359(is not a v)2.858 F .359(alid shell v)-.25 F
+.359(ariable name, an attempt is made to turn of)-.25 F 2.859(fr)-.25 G
+.359(eadonly status for a read-)-2.859 F 1.213(only v)144 698.4 R 1.213
+(ariable, an attempt is made to turn of)-.25 F 3.713(fa)-.25 G 1.213
+(rray status for an array v)-3.713 F 1.212(ariable, or an attempt is)
+-.25 F(made to display a non-e)144 710.4 Q(xistent function with)-.15 E
+F2<ad66>2.5 E F0(.)A(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(6)
+203.725 E 0 Cg EP
+%%Page: 7 7
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(dirs [\255clpv] [+)
+108 84 Q/F2 10/Times-Italic@0 SF(n)A F1 2.5(][)C<ad>-2.5 E F2(n)A F1(])A
+F0 -.4(Wi)144 96 S .328
+(thout options, displays the list of currently remembered directories.)
+.4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238
+(single line with directory names separated by spaces.)144 108 R 1.238
+(Directories are added to the list with the)6.238 F F1(pushd)144 120 Q
+F0 2.003(command; the)4.503 F F1(popd)4.503 E F0 2.003(command remo)
+4.503 F -.15(ve)-.15 G 4.503(se).15 G 2.003(ntries from the list.)-4.503
+F 2.003(The current directory is)7.003 F(al)144 132 Q -.1(wa)-.1 G
+(ys the \214rst directory in the stack.).1 E F1<ad63>144 144 Q F0
+(Clears the directory stack by deleting all of the entries.)180 144 Q F1
+<ad6c>144 156 Q F0 .882
+(Produces a listing using full pathnames; the def)180 156 R .881
+(ault listing format uses a tilde to denote)-.1 F(the home directory)180
+168 Q(.)-.65 E F1<ad70>144 180 Q F0
+(Print the directory stack with one entry per line.)180 180 Q F1<ad76>
+144 192 Q F0 .272(Print the directory stack with one entry per line, pr\
+e\214xing each entry with its inde)180 192 R 2.773(xi)-.15 G 2.773(nt)
+-2.773 G(he)-2.773 E(stack.)180 204 Q F1(+)144 216 Q F2(n)A F0 1.565
+(Displays the)180 216 R F2(n)4.065 E F0 1.565
+(th entry counting from the left of the list sho)B 1.564(wn by)-.25 F F1
+(dirs)4.064 E F0 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
+(without options, starting with zero.)180 228 Q F1<ad>144 240 Q F2(n)A
+F0 1.194(Displays the)180 240 R F2(n)3.694 E F0 1.194
+(th entry counting from the right of the list sho)B 1.194(wn by)-.25 F
+F1(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
+(without options, starting with zero.)180 252 Q .258(The return v)144
+268.8 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258
+(lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe)
+-.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-)
+.15 F(tory stack.)144 280.8 Q F1(diso)108 297.6 Q(wn)-.1 E F0([)2.5 E F1
+(\255ar)A F0 2.5(][)C F1<ad68>-2.5 E F0 2.5(][)C F2(jobspec)-2.5 E F0
+(... |)2.5 E F2(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 309.6 S .121
+(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach).15 E F2(jobspec)
+4.362 E F0 .122(from the table of acti)2.932 F .422 -.15(ve j)-.25 H
+2.622(obs. If).15 F F2(jobspec)4.362 E F0 .122(is not present, and)2.932
+F .096(neither the)144 321.6 R F1<ad61>2.596 E F0 .096(nor the)2.596 F
+F1<ad72>2.596 E F0 .096(option is supplied, the)2.596 F F2(curr)2.596 E
+.096(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F1
+<ad68>2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each)
+.15 F F2(jobspec)145.74 333.6 Q F0 .585(is not remo)3.395 F -.15(ve)-.15
+G 3.085(df).15 G .585(rom the table, b)-3.085 F .585(ut is mark)-.2 F
+.585(ed so that)-.1 F/F3 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .586
+(is not sent to the job if the)2.835 F .962(shell recei)144 345.6 R -.15
+(ve)-.25 G 3.462(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F0 .962
+(If no)5.462 F F2(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F1
+<ad61>3.462 E F0 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15
+H 3.462(rm).15 G .962(ark all)-3.462 F 1.358(jobs; the)144 357.6 R F1
+<ad72>3.858 E F0 1.358(option without a)3.858 F F2(jobspec)5.598 E F0
+(ar)4.169 E 1.359(gument restricts operation to running jobs.)-.18 F
+1.359(The return)6.359 F -.25(va)144 369.6 S(lue is 0 unless a).25 E F2
+(jobspec)4.24 E F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E
+F1(echo)108 386.4 Q F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g)
+-.37 E F0(...])2.5 E .425(Output the)144 398.4 R F2(ar)2.925 E(g)-.37 E
+F0 .424(s, separated by spaces, follo)B .424(wed by a ne)-.25 F 2.924
+(wline. The)-.25 F .424(return status is 0 unless a write)2.924 F .307
+(error occurs.)144 410.4 R(If)5.307 E F1<ad6e>2.807 E F0 .307
+(is speci\214ed, the trailing ne)2.807 F .308(wline is suppressed.)-.25
+F .308(If the)5.308 F F1<ad65>2.808 E F0 .308(option is gi)2.808 F -.15
+(ve)-.25 G .308(n, inter).15 F(-)-.2 E 1.349(pretation of the follo)144
+422.4 R 1.348(wing backslash-escaped characters is enabled.)-.25 F(The)
+6.348 E F1<ad45>3.848 E F0 1.348(option disables the)3.848 F 1.054
+(interpretation of these escape characters, e)144 434.4 R -.15(ve)-.25 G
+3.555(no).15 G 3.555(ns)-3.555 G 1.055(ystems where the)-3.555 F 3.555
+(ya)-.15 G 1.055(re interpreted by def)-3.555 F(ault.)-.1 E(The)144
+446.4 Q F1(xpg_echo)3.459 E F0 .959
+(shell option may be used to dynamically determine whether or not)3.459
+F F1(echo)3.458 E F0 -.15(ex)3.458 G(pands).15 E .715
+(these escape characters by def)144 458.4 R(ault.)-.1 E F1(echo)5.715 E
+F0 .716(does not interpret)3.215 F F1<adad>3.216 E F0 .716
+(to mean the end of options.)3.216 F F1(echo)5.716 E F0
+(interprets the follo)144 470.4 Q(wing escape sequences:)-.25 E F1(\\a)
+144 482.4 Q F0(alert \(bell\))180 482.4 Q F1(\\b)144 494.4 Q F0
+(backspace)180 494.4 Q F1(\\c)144 506.4 Q F0(suppress further output)180
+506.4 Q F1(\\e)144 518.4 Q(\\E)144 530.4 Q F0(an escape character)180
+530.4 Q F1(\\f)144 542.4 Q F0(form feed)180 542.4 Q F1(\\n)144 554.4 Q
+F0(ne)180 554.4 Q 2.5(wl)-.25 G(ine)-2.5 E F1(\\r)144 566.4 Q F0
+(carriage return)180 566.4 Q F1(\\t)144 578.4 Q F0(horizontal tab)180
+578.4 Q F1(\\v)144 590.4 Q F0 -.15(ve)180 590.4 S(rtical tab).15 E F1
+(\\\\)144 602.4 Q F0(backslash)180 602.4 Q F1(\\0)144 614.4 Q F2(nnn)A
+F0(the eight-bit character whose v)180 614.4 Q(alue is the octal v)-.25
+E(alue)-.25 E F2(nnn)2.5 E F0(\(zero to three octal digits\))2.5 E F1
+(\\x)144 626.4 Q F2(HH)A F0(the eight-bit character whose v)180 626.4 Q
+(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0
+(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1
+(\\u)144 638.4 Q F2(HHHH)A F0 1.507
+(the Unicode \(ISO/IEC 10646\) character whose v)180 650.4 R 1.506
+(alue is the he)-.25 F 1.506(xadecimal v)-.15 F(alue)-.25 E F2(HHHH)
+4.006 E F0(\(one to four he)180 662.4 Q 2.5(xd)-.15 G(igits\))-2.5 E F1
+(\\U)144 674.4 Q F2(HHHHHHHH)A F0 .547
+(the Unicode \(ISO/IEC 10646\) character whose v)180 686.4 R .547
+(alue is the he)-.25 F .548(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
+3.048 E(HHH)180 698.4 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G
+(igits\))-2.5 E(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(7)203.725 E
+0 Cg EP
+%%Page: 8 8
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(enable)108 84 Q F0([)
+2.5 E F1<ad61>A F0 2.5(][)C F1(\255dnps)-2.5 E F0 2.5(][)C F1<ad66>-2.5
+E/F2 10/Times-Italic@0 SF(\214lename)2.5 E F0 2.5(][)C F2(name)-2.5 E F0
+(...])2.5 E .278(Enable and disable b)144 96 R .278
+(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278
+(uiltin allo)-.2 F .278(ws a disk command which has)-.25 F .833
+(the same name as a shell b)144 108 R .834(uiltin to be e)-.2 F -.15(xe)
+-.15 G .834(cuted without specifying a full pathname, e).15 F -.15(ve)
+-.25 G 3.334(nt).15 G(hough)-3.334 E .99
+(the shell normally searches for b)144 120 R .989
+(uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>3.489 E F0 .989
+(is used, each)3.489 F F2(name)3.489 E F0 .989(is dis-)3.489 F 1.581
+(abled; otherwise,)144 132 R F2(names)4.082 E F0 1.582(are enabled.)
+4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582(xample, to use the)-4.232 F
+F1(test)4.082 E F0 1.582(binary found via the)4.082 F/F3 9/Times-Bold@0
+SF -.666(PA)4.082 G(TH)-.189 E F0 .081(instead of the shell b)144 144 R
+.081(uiltin v)-.2 F .081(ersion, run)-.15 F/F4 10/Courier@0 SF .081
+(enable -n test)2.581 F F0 5.081(.T)C(he)-5.081 E F1<ad66>2.58 E F0 .08
+(option means to load the ne)2.58 F(w)-.25 E -.2(bu)144 156 S 1.524
+(iltin command).2 F F2(name)4.384 E F0 1.524(from shared object)4.204 F
+F2(\214lename)4.024 E F0 4.024(,o).18 G 4.024(ns)-4.024 G 1.524
+(ystems that support dynamic loading.)-4.024 F(The)144 168 Q F1<ad64>
+2.867 E F0 .367(option will delete a b)2.867 F .367(uiltin pre)-.2 F
+.367(viously loaded with)-.25 F F1<ad66>2.866 E F0 5.366(.I)C 2.866(fn)
+-5.366 G(o)-2.866 E F2(name)2.866 E F0(ar)2.866 E .366(guments are gi)
+-.18 F -.15(ve)-.25 G .366(n, or).15 F .398(if the)144 180 R F1<ad70>
+2.898 E F0 .399(option is supplied, a list of shell b)2.899 F .399
+(uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4
+F .399(guments, the)-.18 F .099(list consists of all enabled shell b)144
+192 R 2.598(uiltins. If)-.2 F F1<ad6e>2.598 E F0 .098
+(is supplied, only disabled b)2.598 F .098(uiltins are printed.)-.2 F
+(If)5.098 E F1<ad61>2.598 E F0 1.916
+(is supplied, the list printed includes all b)144 204 R 1.916
+(uiltins, with an indication of whether or not each is)-.2 F 2.879
+(enabled. If)144 216 R F1<ad73>2.879 E F0 .379
+(is supplied, the output is restricted to the POSIX)2.879 F F2(special)
+2.879 E F0 -.2(bu)2.878 G 2.878(iltins. The).2 F .378(return v)2.878 F
+(alue)-.25 E .994(is 0 unless a)144 228 R F2(name)3.854 E F0 .994
+(is not a shell b)3.674 F .994(uiltin or there is an error loading a ne)
+-.2 F 3.495(wb)-.25 G .995(uiltin from a shared)-3.695 F(object.)144 240
+Q F1 -2.3 -.15(ev a)108 256.8 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37 E F0
+(...])2.5 E(The)144 268.8 Q F2(ar)3.171 E(g)-.37 E F0 3.171(sa)C .671
+(re read and concatenated together into a single command.)-3.171 F .67
+(This command is then read)5.67 F .495(and e)144 280.8 R -.15(xe)-.15 G
+.495(cuted by the shell, and its e).15 F .495
+(xit status is returned as the v)-.15 F .495(alue of)-.25 F F1 -2.3 -.15
+(ev a)2.995 H(l).15 E F0 5.495(.I)C 2.995(ft)-5.495 G .495(here are no)
+-2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 292.8 Q
+(guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F1
+(exec)108 309.6 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-2.5 E F2
+(name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E F2(ar)A(guments)
+-.37 E F0(]])A(If)144 321.6 Q F2(command)3.006 E F0 .306
+(is speci\214ed, it replaces the shell.)3.576 F .305(No ne)5.305 F 2.805
+(wp)-.25 G .305(rocess is created.)-2.805 F(The)5.305 E F2(ar)3.135 E
+(guments)-.37 E F0(become)3.075 E .176(the ar)144 333.6 R .176
+(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G
+(he)-2.676 E F1<ad6c>2.676 E F0 .176
+(option is supplied, the shell places a dash at the be)2.676 F .177
+(ginning of)-.15 F .5(the zeroth ar)144 345.6 R .5(gument passed to)-.18
+F F2(command)3 E F0 5.499(.T).77 G .499(his is what)-5.499 F F2(lo)2.999
+E(gin)-.1 E F0 .499(\(1\) does.).24 F(The)5.499 E F1<ad63>2.999 E F0
+.499(option causes)2.999 F F2(com-)3.199 E(mand)144 357.6 Q F0 .638
+(to be e)3.908 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138
+(vironment. If)-.4 F F1<ad61>3.138 E F0 .638
+(is supplied, the shell passes)3.138 F F2(name)3.499 E F0 .639(as the)
+3.319 F 1.078(zeroth ar)144 369.6 R 1.077(gument to the e)-.18 F -.15
+(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F2(command)3.777 E F0
+1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077(cuted for some reason, a)
+.15 F(non-interacti)144 381.6 Q .876 -.15(ve s)-.25 H .576(hell e).15 F
+.576(xits, unless the)-.15 F F1(execfail)3.076 E F0 .577
+(shell option is enabled.)3.077 F .577(In that case, it returns f)5.577
+F(ail-)-.1 E 3.32(ure. An)144 393.6 R(interacti)3.32 E 1.12 -.15(ve s)
+-.25 H .82(hell returns f).15 F .82(ailure if the \214le cannot be e)-.1
+F -.15(xe)-.15 G 3.32(cuted. A).15 F .82(subshell e)3.32 F .82
+(xits uncondi-)-.15 F .287(tionally if)144 405.6 R F1(exec)2.787 E F0
+-.1(fa)2.787 G 2.787(ils. If).1 F F2(command)2.987 E F0 .287
+(is not speci\214ed, an)3.557 F 2.788(yr)-.15 G .288(edirections tak)
+-2.788 F 2.788(ee)-.1 G -.25(ff)-2.788 G .288(ect in the current shell,)
+.25 F(and the return status is 0.)144 417.6 Q
+(If there is a redirection error)5 E 2.5(,t)-.4 G
+(he return status is 1.)-2.5 E F1(exit)108 434.4 Q F0([)2.5 E F2(n)A F0
+(])A .096(Cause the shell to e)144 434.4 R .096(xit with a status of)
+-.15 F F2(n)2.596 E F0 5.096(.I)C(f)-5.096 E F2(n)2.955 E F0 .095
+(is omitted, the e)2.835 F .095(xit status is that of the last command)
+-.15 F -.15(exe)144 446.4 S 2.5(cuted. A).15 F(trap on)2.5 E F3(EXIT)2.5
+E F0(is e)2.25 E -.15(xe)-.15 G(cuted before the shell terminates.).15 E
+F1(export)108 463.2 Q F0([)2.5 E F1(\255fn)A F0 2.5(][).833 G F2(name)
+-2.5 E F0([=)A F2(wor)A(d)-.37 E F0(]] ...)A F1(export \255p)108 475.2 Q
+F0 .256(The supplied)144 487.2 R F2(names)3.117 E F0 .257(are mark)3.027
+F .257(ed for automatic e)-.1 F .257(xport to the en)-.15 F .257
+(vironment of subsequently e)-.4 F -.15(xe)-.15 G(cuted).15 E 2.627
+(commands. If)144 499.2 R(the)2.627 E F1<ad66>2.627 E F0 .127
+(option is gi)2.627 F -.15(ve)-.25 G .127(n, the).15 F F2(names)2.987 E
+F0 .127(refer to functions.)2.897 F .127(If no)5.127 F F2(names)2.987 E
+F0 .127(are gi)2.897 F -.15(ve)-.25 G .126(n, or if the).15 F F1<ad70>
+144 511.2 Q F0 .048(option is supplied, a list of names of all e)2.547 F
+.048(xported v)-.15 F .048(ariables is printed.)-.25 F(The)5.048 E F1
+<ad6e>2.548 E F0 .048(option causes the)2.548 F -.15(ex)144 523.2 S
+1.447(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447
+(rom each)-3.947 F F2(name)3.947 E F0 6.447(.I)C 3.947(fav)-6.447 G
+1.447(ariable name is follo)-4.197 F 1.447(wed by =)-.25 F F2(wor)A(d)
+-.37 E F0 3.946(,t)C(he)-3.946 E -.25(va)144 535.2 S .741(lue of the v)
+.25 F .741(ariable is set to)-.25 F F2(wor)3.241 E(d)-.37 E F0(.)A F1
+(export)5.741 E F0 .742(returns an e)3.242 F .742
+(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .742(lid option is)
+.25 F .032(encountered, one of the)144 547.2 R F2(names)2.532 E F0 .032
+(is not a v)2.532 F .032(alid shell v)-.25 F .032(ariable name, or)-.25
+F F1<ad66>2.531 E F0 .031(is supplied with a)2.531 F F2(name)2.891 E F0
+(that)2.711 E(is not a function.)144 559.2 Q F1(fc)108 576 Q F0([)2.5 E
+F1<ad65>A F2(ename)2.5 E F0 2.5(][)C F1(\255lnr)-2.5 E F0 2.5(][)C F2
+<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F2(last)-2.5 E F0(])A F1(fc \255s)108
+588 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2
+(cmd)-2.5 E F0(])A .431
+(The \214rst form selects a range of commands from)144 600 R F2<8c72>
+4.842 E(st)-.1 E F0(to)3.612 E F2(last)3.022 E F0 .432
+(from the history list and displays or)3.612 F .142(edits and re-e)144
+612 R -.15(xe)-.15 G .142(cutes them.).15 F F2 -.45(Fi)5.141 G -.1(rs)
+.45 G(t).1 E F0(and)3.321 E F2(last)2.731 E F0 .141
+(may be speci\214ed as a string \(to locate the last command)3.321 F(be)
+144 624 Q .31(ginning with that string\) or as a number \(an inde)-.15 F
+2.811(xi)-.15 G .311(nto the history list, where a ne)-2.811 F -.05(ga)
+-.15 G(ti).05 E .611 -.15(ve n)-.25 H(umber).15 E .19(is used as an of)
+144 636 R .19(fset from the current command number\).)-.25 F(If)5.19 E
+F2(last)2.779 E F0 .189(is not speci\214ed, it is set to the cur)3.369 F
+(-)-.2 E .948(rent command for listing \(so that)144 648 R F4 .948
+(fc \255l \25510)3.448 F F0 .948(prints the last 10 commands\) and to)
+3.448 F F2<8c72>5.359 E(st)-.1 E F0(other)4.129 E(-)-.2 E 2.5(wise. If)
+144 660 R F2<8c72>4.41 E(st)-.1 E F0
+(is not speci\214ed, it is set to the pre)3.18 E
+(vious command for editing and \25516 for listing.)-.25 E(The)144 684 Q
+F1<ad6e>2.522 E F0 .022
+(option suppresses the command numbers when listing.)2.522 F(The)5.022 E
+F1<ad72>2.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022
+(rses the order of).15 F .438(the commands.)144 696 R .438(If the)5.438
+F F1<ad6c>2.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438
+(n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E
+.335(the editor gi)144 708 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E F2
+(ename)3.025 E F0 .335(is in)3.015 F -.2(vo)-.4 G -.1(ke).2 G 2.835(do)
+.1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835 F
+(If)5.334 E F2(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G
+(n,).15 E 1.668(the v)144 720 R 1.668(alue of the)-.25 F F3(FCEDIT)4.168
+E F0 -.25(va)3.918 G 1.668(riable is used, and the v).25 F 1.669
+(alue of)-.25 F F3(EDIT)4.169 E(OR)-.162 E F0(if)3.919 E F3(FCEDIT)4.169
+E F0 1.669(is not set.)3.919 F(If)6.669 E(GNU Bash 5.0)72 768 Q
+(2004 Apr 20)149.565 E(8)203.725 E 0 Cg EP
+%%Page: 9 9
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E .187(neither v)144 84 R .187
+(ariable is set,)-.25 F/F1 10/Times-Italic@0 SF(vi)4.353 E F0 .187
+(is used.)4.353 F .187
+(When editing is complete, the edited commands are echoed and)5.187 F
+-.15(exe)144 96 S(cuted.).15 E .788(In the second form,)144 120 R F1
+(command)3.288 E F0 .788(is re-e)3.288 F -.15(xe)-.15 G .788
+(cuted after each instance of).15 F F1(pat)3.288 E F0 .788
+(is replaced by)3.288 F F1 -.37(re)3.289 G(p).37 E F0(.)A F1(Com-)5.789
+E(mand)144 132 Q F0 .172(is interpreted the same as)2.672 F F1<8c72>
+2.672 E(st)-.1 E F0(abo)2.672 E -.15(ve)-.15 G 5.172(.A).15 G .171
+(useful alias to use with this is)-2.5 F/F2 10/Courier@0 SF .171
+(r='fc \255s')2.671 F F0 2.671(,s)C 2.671(ot)-2.671 G(hat)-2.671 E
+(typing)144 144 Q F2 7.165(rc)3.665 G(c)-7.165 E F0 1.165
+(runs the last command be)3.665 F 1.166(ginning with)-.15 F F2(cc)3.666
+E F0 1.166(and typing)3.666 F F2(r)3.666 E F0(re-e)3.666 E -.15(xe)-.15
+G 1.166(cutes the last com-).15 F(mand.)144 156 Q .142
+(If the \214rst form is used, the return v)144 180 R .142
+(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142
+(lid option is encountered or).25 F F1<8c72>4.552 E(st)-.1 E F0(or)3.322
+E F1(last)2.732 E F0 .454(specify history lines out of range.)144 192 R
+.454(If the)5.454 F/F3 10/Times-Bold@0 SF<ad65>2.954 E F0 .454
+(option is supplied, the return v)2.954 F .455(alue is the v)-.25 F .455
+(alue of the)-.25 F .788(last command e)144 204 R -.15(xe)-.15 G .788
+(cuted or f).15 F .787
+(ailure if an error occurs with the temporary \214le of commands.)-.1 F
+.787(If the)5.787 F 1.135
+(second form is used, the return status is that of the command re-e)144
+216 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F1(cmd)3.836 E F0 1.136
+(does not)4.406 F(specify a v)144 228 Q
+(alid history line, in which case)-.25 E F3(fc)2.5 E F0(returns f)2.5 E
+(ailure.)-.1 E F3(fg)108 244.8 Q F0([)2.5 E F1(jobspec)A F0(])A(Resume)
+144 256.8 Q F1(jobspec)5.654 E F0 1.413(in the fore)4.224 F 1.413
+(ground, and mak)-.15 F 3.913(ei)-.1 G 3.913(tt)-3.913 G 1.413
+(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F1(jobspec)5.653 E F0
+1.413(is not present, the)4.223 F(shell')144 268.8 Q 3.116(sn)-.55 G
+.616(otion of the)-3.116 F F1(curr)3.116 E .616(ent job)-.37 F F0 .617
+(is used.)3.116 F .617(The return v)5.617 F .617
+(alue is that of the command placed into the)-.25 F(fore)144 280.8 Q
+.363(ground, or f)-.15 F .363
+(ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .362
+(hen run with job control enabled, if)-2.862 F F1(jobspec)145.74 292.8 Q
+F0(does not specify a v)2.81 E(alid job or)-.25 E F1(jobspec)4.24 E F0
+(speci\214es a job that w)2.81 E(as started without job control.)-.1 E
+F3(getopts)108 309.6 Q F1(optstring name)2.5 E F0([)2.5 E F1(ar)A(gs)
+-.37 E F0(])A F3(getopts)144 321.6 Q F0 .793
+(is used by shell procedures to parse positional parameters.)3.293 F F1
+(optstring)6.023 E F0 .793(contains the option)3.513 F .15
+(characters to be recognized; if a character is follo)144 333.6 R .149
+(wed by a colon, the option is e)-.25 F .149(xpected to ha)-.15 F .449
+-.15(ve a)-.2 H(n).15 E(ar)144 345.6 Q .578
+(gument, which should be separated from it by white space.)-.18 F .579
+(The colon and question mark char)5.579 F(-)-.2 E 1.665
+(acters may not be used as option characters.)144 357.6 R 1.665
+(Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F3(getopts)
+4.165 E F0 1.665(places the ne)4.165 F(xt)-.15 E .796
+(option in the shell v)144 369.6 R(ariable)-.25 E F1(name)3.296 E F0
+3.296(,i).18 G(nitializing)-3.296 E F1(name)3.657 E F0 .797
+(if it does not e)3.477 F .797(xist, and the inde)-.15 F 3.297(xo)-.15 G
+3.297(ft)-3.297 G .797(he ne)-3.297 F(xt)-.15 E(ar)144 381.6 Q .085
+(gument to be processed into the v)-.18 F(ariable)-.25 E/F4 9
+/Times-Bold@0 SF(OPTIND)2.585 E/F5 9/Times-Roman@0 SF(.)A F4(OPTIND)
+4.585 E F0 .085(is initialized to 1 each time the shell)2.335 F .845
+(or a shell script is in)144 393.6 R -.2(vo)-.4 G -.1(ke).2 G 3.345
+(d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E F3
+(getopts)3.346 E F0 .846(places that ar)3.346 F(gument)-.18 E .804
+(into the v)144 405.6 R(ariable)-.25 E F4(OPT)3.304 E(ARG)-.81 E F5(.)A
+F0 .803(The shell does not reset)5.304 F F4(OPTIND)3.303 E F0 .803
+(automatically; it must be manually)3.053 F .293
+(reset between multiple calls to)144 417.6 R F3(getopts)2.793 E F0 .293
+(within the same shell in)2.793 F -.2(vo)-.4 G .293(cation if a ne).2 F
+2.793(ws)-.25 G .294(et of parameters)-2.793 F(is to be used.)144 429.6
+Q 2.044(When the end of options is encountered,)144 453.6 R F3(getopts)
+4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.043
+(alue greater than zero.)-.25 F F4(OPTIND)144 465.6 Q F0
+(is set to the inde)2.25 E 2.5(xo)-.15 G 2.5(ft)-2.5 G
+(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0
+(is set to ?.)2.5 E F3(getopts)144 489.6 Q F0 2.392
+(normally parses the positional parameters, b)4.892 F 2.392
+(ut if more ar)-.2 F 2.393(guments are gi)-.18 F -.15(ve)-.25 G 4.893
+(ni).15 G(n)-4.893 E F1(ar)4.893 E(gs)-.37 E F0(,).27 E F3(getopts)144
+501.6 Q F0(parses those instead.)2.5 E F3(getopts)144 525.6 Q F0 1.166
+(can report errors in tw)3.666 F 3.665(ow)-.1 G 3.665(ays. If)-3.765 F
+1.165(the \214rst character of)3.665 F F1(optstring)3.895 E F0 1.165
+(is a colon,)3.885 F F1(silent)4.005 E F0(error)4.345 E 1.07
+(reporting is used.)144 537.6 R 1.071
+(In normal operation, diagnostic messages are printed when in)6.07 F
+-.25(va)-.4 G 1.071(lid options or).25 F .394(missing option ar)144
+549.6 R .394(guments are encountered.)-.18 F .394(If the v)5.394 F
+(ariable)-.25 E F4(OPTERR)2.894 E F0 .394
+(is set to 0, no error messages)2.644 F(will be displayed, e)144 561.6 Q
+-.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E
+F1(optstring)2.73 E F0(is not a colon.)2.72 E .666(If an in)144 585.6 R
+-.25(va)-.4 G .666(lid option is seen,).25 F F3(getopts)3.166 E F0 .667
+(places ? into)3.167 F F1(name)3.527 E F0 .667
+(and, if not silent, prints an error message)3.347 F .4(and unsets)144
+597.6 R F4(OPT)2.9 E(ARG)-.81 E F5(.)A F0(If)4.899 E F3(getopts)2.899 E
+F0 .399(is silent, the option character found is placed in)2.899 F F4
+(OPT)2.899 E(ARG)-.81 E F0 .399(and no)2.649 F
+(diagnostic message is printed.)144 609.6 Q 1.241(If a required ar)144
+633.6 R 1.241(gument is not found, and)-.18 F F3(getopts)3.741 E F0
+1.241(is not silent, a question mark \()3.741 F F3(?).833 E F0 3.742
+(\)i).833 G 3.742(sp)-3.742 G 1.242(laced in)-3.742 F F1(name)144 645.6
+Q F0(,).18 E F4(OPT)2.735 E(ARG)-.81 E F0 .234
+(is unset, and a diagnostic message is printed.)2.485 F(If)5.234 E F3
+(getopts)2.734 E F0 .234(is silent, then a colon \()2.734 F F3(:).833 E
+F0(\)).833 E(is placed in)144 657.6 Q F1(name)2.86 E F0(and)2.68 E F4
+(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F3
+(getopts)144 681.6 Q F0 .902
+(returns true if an option, speci\214ed or unspeci\214ed, is found.)
+3.401 F .902(It returns f)5.902 F .902(alse if the end of)-.1 F
+(options is encountered or an error occurs.)144 693.6 Q(GNU Bash 5.0)72
+768 Q(2004 Apr 20)149.565 E(9)203.725 E 0 Cg EP
+%%Page: 10 10
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(hash)108 84 Q F0([)
+2.5 E F1(\255lr)A F0 2.5(][)C F1<ad70>-2.5 E/F2 10/Times-Italic@0 SF
+(\214lename)2.5 E F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F2(name)-2.5
+E F0(])A .858(Each time)144 96 R F1(hash)3.358 E F0 .858(is in)3.358 F
+-.2(vo)-.4 G -.1(ke).2 G .858(d, the full pathname of the command).1 F
+F2(name)3.718 E F0 .858(is determined by searching)3.538 F .956
+(the directories in)144 108 R F1($P)3.456 E -.95(AT)-.74 G(H).95 E F0
+.956(and remembered.)3.456 F(An)5.956 E 3.456(yp)-.15 G(re)-3.456 E .956
+(viously-remembered pathname is discarded.)-.25 F .243(If the)144 120 R
+F1<ad70>2.743 E F0 .243
+(option is supplied, no path search is performed, and)2.743 F F2
+(\214lename)4.653 E F0 .242(is used as the full \214lename)2.923 F 1.711
+(of the command.)144 132 R(The)6.711 E F1<ad72>4.211 E F0 1.711
+(option causes the shell to for)4.211 F 1.712
+(get all remembered locations.)-.18 F(The)6.712 E F1<ad64>4.212 E F0
+.833(option causes the shell to for)144 144 R .833
+(get the remembered location of each)-.18 F F2(name)3.333 E F0 5.833(.I)
+C 3.333(ft)-5.833 G(he)-3.333 E F1<ad74>3.333 E F0 .833(option is sup-)
+3.333 F .703(plied, the full pathname to which each)144 156 R F2(name)
+3.204 E F0 .704(corresponds is printed.)3.204 F .704(If multiple)5.704 F
+F2(name)3.204 E F0(ar)3.204 E(guments)-.18 E .795(are supplied with)144
+168 R F1<ad74>3.295 E F0 3.295(,t)C(he)-3.295 E F2(name)3.295 E F0 .795
+(is printed before the hashed full pathname.)3.295 F(The)5.795 E F1
+<ad6c>3.295 E F0 .795(option causes)3.295 F .934
+(output to be displayed in a format that may be reused as input.)144 180
+R .934(If no ar)5.934 F .935(guments are gi)-.18 F -.15(ve)-.25 G .935
+(n, or if).15 F(only)144 192 Q F1<ad6c>2.822 E F0 .322
+(is supplied, information about remembered commands is printed.)2.822 F
+.321(The return status is true)5.321 F(unless a)144 204 Q F2(name)2.86 E
+F0(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.)
+.25 E F1(help)108 220.8 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F2
+(pattern)-2.5 E F0(])A .866(Display helpful information about b)144
+232.8 R .867(uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0
+.867(is speci\214ed,)3.607 F F1(help)3.367 E F0(gi)3.367 E -.15(ve)-.25
+G 3.367(sd).15 G(etailed)-3.367 E .307(help on all commands matching)144
+244.8 R F2(pattern)2.807 E F0 2.807(;o).24 G .307
+(therwise help for all the b)-2.807 F .306
+(uiltins and shell control struc-)-.2 F(tures is printed.)144 256.8 Q F1
+<ad64>144 268.8 Q F0(Display a short description of each)180 268.8 Q F2
+(pattern)2.5 E F1<ad6d>144 280.8 Q F0(Display the description of each)
+180 280.8 Q F2(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G
+(ormat)-2.5 E F1<ad73>144 292.8 Q F0
+(Display only a short usage synopsis for each)180 292.8 Q F2(pattern)2.5
+E F0(The return status is 0 unless no command matches)144 309.6 Q F2
+(pattern)2.5 E F0(.).24 E F1(history [)108 326.4 Q F2(n)A F1(])A
+(history \255c)108 338.4 Q(history \255d)108 350.4 Q F2(of)2.5 E(fset)
+-.18 E F1(history \255d)108 362.4 Q F2(start)2.5 E F0<ad>A F2(end)A F1
+(history \255anrw)108 374.4 Q F0([)2.5 E F2(\214lename)A F0(])A F1
+(history \255p)108 386.4 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5
+(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 398.4 Q F2(ar)2.5 E(g)
+-.37 E F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)144
+410.4 S .752
+(th no options, display the command history list with line numbers.).4 F
+.752(Lines listed with a)5.752 F F1(*)3.252 E F0(ha)3.252 E -.15(ve)-.2
+G .381(been modi\214ed.)144 422.4 R .38(An ar)5.38 F .38(gument of)-.18
+F F2(n)3.24 E F0 .38(lists only the last)3.12 F F2(n)3.24 E F0 2.88
+(lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E/F3 9
+/Times-Bold@0 SF(HISTTIMEFOR-)2.88 E(MA)144 434.4 Q(T)-.855 E F0 .264
+(is set and not null, it is used as a format string for)2.514 F F2
+(strftime)2.765 E F0 .265(\(3\) to display the time stamp asso-)B 1.02
+(ciated with each displayed history entry)144 446.4 R 6.019(.N)-.65 G
+3.519(oi)-6.019 G(nterv)-3.519 E 1.019
+(ening blank is printed between the formatted)-.15 F .176
+(time stamp and the history line.)144 458.4 R(If)5.176 E F2(\214lename)
+2.676 E F0 .176
+(is supplied, it is used as the name of the history \214le; if)2.676 F
+(not, the v)144 470.4 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0(is used.)
+2.25 E(Options, if supplied, ha)5 E .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad63>144 482.4 Q F0
+(Clear the history list by deleting all the entries.)180 482.4 Q F1
+<ad64>144 494.4 Q F2(of)2.5 E(fset)-.18 E F0 .39
+(Delete the history entry at position)180 506.4 R F2(of)2.889 E(fset)
+-.18 E F0 5.389(.I)C(f)-5.389 E F2(of)2.889 E(fset)-.18 E F0 .389(is ne)
+2.889 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G 2.889(,i).15 G 2.889(ti)
+-2.889 G 2.889(si)-2.889 G .389(nterpreted as relati)-2.889 F -.15(ve)
+-.25 G .598(to one greater than the last history position, so ne)180
+518.4 R -.05(ga)-.15 G(ti).05 E .899 -.15(ve i)-.25 H .599
+(ndices count back from the end).15 F(of the history)180 530.4 Q 2.5(,a)
+-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5 G 2.5(1r)-2.5 G
+(efers to the current)-2.5 E F1(history -d)2.5 E F0(command.)2.5 E F1
+<ad64>144 542.4 Q F2(start)2.5 E F0<ad>A F2(end)A F0 .758
+(Delete the history entries between positions)180 554.4 R F2(start)3.258
+E F0(and)3.257 E F2(end)3.257 E F0 3.257(,i)C(nclusi)-3.257 E -.15(ve)
+-.25 G 5.757(.P).15 G(ositi)-5.757 E 1.057 -.15(ve a)-.25 H .757(nd ne)
+.15 F -.05(ga)-.15 G(-).05 E(ti)180 566.4 Q .3 -.15(ve v)-.25 H
+(alues for)-.1 E F2(start)2.5 E F0(and)2.5 E F2(end)2.5 E F0
+(are interpreted as described abo)2.5 E -.15(ve)-.15 G(.).15 E F1<ad61>
+144 578.4 Q F0 .564(Append the `)180 578.4 R(`ne)-.74 E(w')-.25 E 3.064
+('h)-.74 G .564(istory lines to the history \214le.)-3.064 F .565
+(These are history lines entered since)5.564 F(the be)180 590.4 Q
+(ginning of the current)-.15 E F1(bash)2.5 E F0(session, b)2.5 E
+(ut not already appended to the history \214le.)-.2 E F1<ad6e>144 602.4
+Q F0 .854(Read the history lines not already read from the history \214\
+le into the current history list.)180 602.4 R .772
+(These are lines appended to the history \214le since the be)180 614.4 R
+.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E
+(sion.)180 626.4 Q F1<ad72>144 638.4 Q F0(Read the contents of the hist\
+ory \214le and append them to the current history list.)180 638.4 Q F1
+<ad77>144 650.4 Q F0
+(Write the current history list to the history \214le, o)180 650.4 Q
+-.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G
+(ontents.)-2.5 E F1<ad70>144 662.4 Q F0 .626
+(Perform history substitution on the follo)180 662.4 R(wing)-.25 E F2
+(ar)3.125 E(gs)-.37 E F0 .625(and display the result on the standard)
+3.125 F 2.975(output. Does)180 674.4 R .475
+(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar)
+2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F
+(normal history e)180 686.4 Q(xpansion.)-.15 E F1<ad73>144 698.4 Q F0
+.363(Store the)180 698.4 R F2(ar)3.193 E(gs)-.37 E F0 .363
+(in the history list as a single entry)3.133 F 5.363(.T)-.65 G .362
+(he last command in the history list is)-5.363 F(remo)180 710.4 Q -.15
+(ve)-.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0
+(are added.)2.77 E .145(If the)144 727.2 R F3(HISTTIMEFORMA)2.645 E(T)
+-.855 E F0 -.25(va)2.395 G .145
+(riable is set, the time stamp information associated with each history)
+.25 F(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(10)198.725 E 0 Cg EP
+%%Page: 11 11
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E .669
+(entry is written to the history \214le, mark)144 84 R .669
+(ed with the history comment character)-.1 F 5.668(.W)-.55 G .668
+(hen the history)-5.668 F .955(\214le is read, lines be)144 96 R .956
+(ginning with the history comment character follo)-.15 F .956
+(wed immediately by a digit)-.25 F 1.796
+(are interpreted as timestamps for the follo)144 108 R 1.795
+(wing history entry)-.25 F 6.795(.T)-.65 G 1.795(he return v)-6.795 F
+1.795(alue is 0 unless an)-.25 F(in)144 120 Q -.25(va)-.4 G .768(lid op\
+tion is encountered, an error occurs while reading or writing the histo\
+ry \214le, an in).25 F -.25(va)-.4 G(lid).25 E/F1 10/Times-Italic@0 SF
+(of)144 132 Q(fset)-.18 E F0 1.032(is supplied as an ar)3.532 F 1.031
+(gument to)-.18 F/F2 10/Times-Bold@0 SF<ad64>3.531 E F0 3.531(,o)C 3.531
+(rt)-3.531 G 1.031(he history e)-3.531 F 1.031
+(xpansion supplied as an ar)-.15 F 1.031(gument to)-.18 F F2<ad70>3.531
+E F0 -.1(fa)144 144 S(ils.).1 E F2(jobs)108 160.8 Q F0([)2.5 E F2
+(\255lnprs)A F0 2.5(][)C F1(jobspec)A F0(... ])2.5 E F2(jobs \255x)108
+172.8 Q F1(command)2.5 E F0([)2.5 E F1(ar)2.5 E(gs)-.37 E F0(... ])2.5 E
+(The \214rst form lists the acti)144 184.8 Q .3 -.15(ve j)-.25 H 2.5
+(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F2<ad6c>144 196.8 Q F0
+(List process IDs in addition to the normal information.)180 196.8 Q F2
+<ad6e>144 208.8 Q F0 .193(Display information only about jobs that ha)
+180 208.8 R .494 -.15(ve c)-.2 H .194(hanged status since the user w).15
+F .194(as last noti-)-.1 F(\214ed of their status.)180 220.8 Q F2<ad70>
+144 232.8 Q F0(List only the process ID of the job')180 232.8 Q 2.5(sp)
+-.55 G(rocess group leader)-2.5 E(.)-.55 E F2<ad72>144 244.8 Q F0
+(Display only running jobs.)180 244.8 Q F2<ad73>144 256.8 Q F0
+(Display only stopped jobs.)180 256.8 Q(If)144 273.6 Q F1(jobspec)4.554
+E F0 .314(is gi)3.124 F -.15(ve)-.25 G .314
+(n, output is restricted to information about that job).15 F 5.313(.T)
+-.4 G .313(he return status is 0 unless)-5.313 F(an in)144 285.6 Q -.25
+(va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G(lid).25
+E F1(jobspec)4.24 E F0(is supplied.)2.81 E .394(If the)144 302.4 R F2
+<ad78>2.894 E F0 .394(option is supplied,)2.894 F F2(jobs)2.894 E F0
+.394(replaces an)2.894 F(y)-.15 E F1(jobspec)4.634 E F0 .394(found in)
+3.204 F F1(command)3.094 E F0(or)3.664 E F1(ar)3.224 E(gs)-.37 E F0 .395
+(with the corre-)3.164 F(sponding process group ID, and e)144 314.4 Q
+-.15(xe)-.15 G(cutes).15 E F1(command)2.7 E F0(passing it)3.27 E F1(ar)
+2.5 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 E
+F2(kill)108 331.2 Q F0([)2.5 E F2<ad73>A F1(sigspec)2.5 E F0(|)2.5 E F2
+<ad6e>2.5 E F1(signum)2.5 E F0(|)2.5 E F2<ad>2.5 E F1(sigspec)A F0 2.5
+(][)C F1(pid)-2.5 E F0(|)2.5 E F1(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F2
+(kill \255l)108 343.2 Q F0(|)A F2<ad4c>A F0([)2.5 E F1(sigspec)A F0(|)
+2.5 E F1 -.2(ex)2.5 G(it_status).2 E F0(])A .12
+(Send the signal named by)144 355.2 R F1(sigspec)2.96 E F0(or)2.93 E F1
+(signum)2.96 E F0 .119(to the processes named by)2.939 F F1(pid)3.869 E
+F0(or)3.389 E F1(jobspec)2.619 E F0(.).31 E F1(sigspec)5.459 E F0(is)
+2.929 E .318(either a case-insensiti)144 367.2 R .618 -.15(ve s)-.25 H
+.318(ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.818 E F0
+.319(\(with or without the)2.569 F F3(SIG)2.819 E F0 .319
+(pre\214x\) or a signal)2.569 F(number;)144 379.2 Q F1(signum)4.189 E F0
+1.349(is a signal number)4.169 F 6.349(.I)-.55 G(f)-6.349 E F1(sigspec)
+4.189 E F0 1.349(is not present, then)4.159 F F3(SIGTERM)3.849 E F0
+1.348(is assumed.)3.599 F(An)6.348 E(ar)144 391.2 Q .522(gument of)-.18
+F F2<ad6c>3.023 E F0 .523(lists the signal names.)3.023 F .523(If an)
+5.523 F 3.023(ya)-.15 G -.18(rg)-3.023 G .523(uments are supplied when)
+.18 F F2<ad6c>3.023 E F0 .523(is gi)3.023 F -.15(ve)-.25 G .523
+(n, the names).15 F .28(of the signals corresponding to the ar)144 403.2
+R .28(guments are listed, and the return status is 0.)-.18 F(The)5.28 E
+F1 -.2(ex)2.78 G(it_status).2 E F0(ar)144 415.2 Q .377(gument to)-.18 F
+F2<ad6c>2.877 E F0 .378
+(is a number specifying either a signal number or the e)2.877 F .378
+(xit status of a process termi-)-.15 F .963(nated by a signal.)144 427.2
+R(The)5.962 E F2<ad4c>3.462 E F0 .962(option is equi)3.462 F -.25(va)
+-.25 G .962(lent to).25 F F2<ad6c>3.462 E F0(.)A F2(kill)5.962 E F0 .962
+(returns true if at least one signal w)3.462 F(as)-.1 E
+(successfully sent, or f)144 439.2 Q(alse if an error occurs or an in)
+-.1 E -.25(va)-.4 G(lid option is encountered.).25 E F2(let)108 456 Q F1
+(ar)2.5 E(g)-.37 E F0([)2.5 E F1(ar)A(g)-.37 E F0(...])2.5 E(Each)144
+468 Q F1(ar)3.026 E(g)-.37 E F0 .196(is an arithmetic e)2.916 F .197
+(xpression to be e)-.15 F -.25(va)-.25 G .197(luated \(see).25 F F3 .197
+(ARITHMETIC EV)2.697 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(abo)
+2.447 E -.15(ve)-.15 G 2.697(\). If).15 F(the last)144 480 Q F1(ar)2.83
+E(g)-.37 E F0 -.25(eva)2.72 G(luates to 0,).25 E F2(let)2.5 E F0
+(returns 1; 0 is returned otherwise.)2.5 E F2(local)108 496.8 Q F0([)2.5
+E F1(option)A F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C
+(.. | \255 ])-2.5 E -.15(Fo)144 508.8 S 2.56(re).15 G .06(ach ar)-2.56 F
+.06(gument, a local v)-.18 F .06(ariable named)-.25 F F1(name)2.92 E F0
+.06(is created, and assigned)2.74 F F1(value)2.56 E F0 5.06(.T).18 G(he)
+-5.06 E F1(option)2.56 E F0 .06(can be)2.56 F(an)144 520.8 Q 3.152(yo)
+-.15 G 3.152(ft)-3.152 G .652(he options accepted by)-3.152 F F2(declar)
+3.152 E(e)-.18 E F0 5.652(.W)C(hen)-5.652 E F2(local)3.152 E F0 .653
+(is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144
+532.8 Q F1(name)3.282 E F0 .422(to ha)3.102 F .722 -.15(ve a v)-.2 H
+.422(isible scope restricted to that function and its children.).15 F
+(If)5.421 E F1(name)2.921 E F0 .421(is \255, the set)2.921 F 1.461
+(of shell options is made local to the function in which)144 544.8 R F2
+(local)3.961 E F0 1.462(is in)3.961 F -.2(vo)-.4 G -.1(ke).2 G 1.462
+(d: shell options changed).1 F 1.563(using the)144 556.8 R F2(set)4.063
+E F0 -.2(bu)4.063 G 1.563
+(iltin inside the function are restored to their original v).2 F 1.562
+(alues when the function)-.25 F 3.743(returns. W)144 568.8 R 1.243
+(ith no operands,)-.4 F F2(local)3.743 E F0 1.243
+(writes a list of local v)3.743 F 1.244
+(ariables to the standard output.)-.25 F 1.244(It is an)6.244 F .42
+(error to use)144 580.8 R F2(local)2.92 E F0 .42
+(when not within a function.)2.92 F .42(The return status is 0 unless)
+5.42 F F2(local)2.92 E F0 .42(is used outside a)2.92 F(function, an in)
+144 592.8 Q -.25(va)-.4 G(lid).25 E F1(name)2.86 E F0(is supplied, or)
+2.68 E F1(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F2(logout)
+108 609.6 Q F0(Exit a login shell.)144 609.6 Q F2(map\214le)108 626.4 Q
+F0([)2.5 E F2<ad64>A F1(delim)2.5 E F0 2.5(][)C F2<ad6e>-2.5 E F1(count)
+2.5 E F0 2.5(][)C F2<ad4f>-2.5 E F1(origin)2.5 E F0 2.5(][)C F2<ad73>
+-2.5 E F1(count)2.5 E F0 2.5(][)C F2<ad74>-2.5 E F0 2.5(][)C F2<ad75>
+-2.5 E F1(fd)2.5 E F0 2.5(][)C F2<ad43>-2.5 E F1(callbac)2.5 E(k)-.2 E
+F0 2.5(][)C F2<ad63>-2.5 E F1(quantum)2.5 E F0 2.5(][)C F1(arr)-2.5 E
+(ay)-.15 E F0(])A F2 -.18(re)108 638.4 S(adarray).18 E F0([)2.5 E F2
+<ad64>A F1(delim)2.5 E F0 2.5(][)C F2<ad6e>-2.5 E F1(count)2.5 E F0 2.5
+(][)C F2<ad4f>-2.5 E F1(origin)2.5 E F0 2.5(][)C F2<ad73>-2.5 E F1
+(count)2.5 E F0 2.5(][)C F2<ad74>-2.5 E F0 2.5(][)C F2<ad75>-2.5 E F1
+(fd)2.5 E F0 2.5(][)C F2<ad43>-2.5 E F1(callbac)2.5 E(k)-.2 E F0 2.5(][)
+C F2<ad63>-2.5 E F1(quantum)2.5 E F0 2.5(][)C F1(arr)-2.5 E(ay)-.15 E F0
+(])A .179(Read lines from the standard input into the inde)144 650.4 R
+-.15(xe)-.15 G 2.679(da).15 G .179(rray v)-2.679 F(ariable)-.25 E F1
+(arr)2.68 E(ay)-.15 E F0 2.68(,o).32 G 2.68(rf)-2.68 G .18
+(rom \214le descriptor)-2.68 F F1(fd)4.65 E F0 1.249(if the)144 662.4 R
+F2<ad75>3.749 E F0 1.249(option is supplied.)3.749 F 1.249(The v)6.249 F
+(ariable)-.25 E F3(MAPFILE)3.749 E F0 1.249(is the def)3.499 F(ault)-.1
+E F1(arr)3.748 E(ay)-.15 E F0 6.248(.O)C 1.248(ptions, if supplied,)
+-6.248 F(ha)144 674.4 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F2<ad64>144 686.4 Q F0 .91
+(The \214rst character of)180 686.4 R F1(delim)3.41 E F0 .911
+(is used to terminate each input line, rather than ne)3.41 F 3.411
+(wline. If)-.25 F F1(delim)180 698.4 Q F0(is the empty string,)2.5 E F2
+(map\214le)2.5 E F0(will terminate a line when it reads a NUL character)
+2.5 E(.)-.55 E F2<ad6e>144 710.4 Q F0(Cop)180 710.4 Q 2.5(ya)-.1 G 2.5
+(tm)-2.5 G(ost)-2.5 E F1(count)2.7 E F0 2.5(lines. If)3.18 F F1(count)
+2.5 E F0(is 0, all lines are copied.)2.5 E(GNU Bash 5.0)72 768 Q
+(2004 Apr 20)149.565 E(11)198.725 E 0 Cg EP
+%%Page: 12 12
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF<ad4f>144 84 Q F0(Be)
+180 84 Q(gin assigning to)-.15 E/F2 10/Times-Italic@0 SF(arr)2.83 E(ay)
+-.15 E F0(at inde)2.82 E(x)-.15 E F2(origin)2.5 E F0 5(.T).24 G(he def)
+-5 E(ault inde)-.1 E 2.5(xi)-.15 G 2.5(s0)-2.5 G(.)-2.5 E F1<ad73>144 96
+Q F0(Discard the \214rst)180 96 Q F2(count)2.5 E F0(lines read.)2.5 E F1
+<ad74>144 108 Q F0(Remo)180 108 Q .3 -.15(ve a t)-.15 H(railing).15 E F2
+(delim)2.5 E F0(\(def)2.5 E(ault ne)-.1 E(wline\) from each line read.)
+-.25 E F1<ad75>144 120 Q F0(Read lines from \214le descriptor)180 120 Q
+F2(fd)2.5 E F0(instead of the standard input.)2.5 E F1<ad43>144 132 Q F0
+(Ev)180 132 Q(aluate)-.25 E F2(callbac)2.7 E(k)-.2 E F0(each time)3.17 E
+F2(quantum)2.5 E F0(lines are read.)2.5 E(The)5 E F1<ad63>2.5 E F0
+(option speci\214es)2.5 E F2(quantum)2.5 E F0(.).32 E F1<ad63>144 144 Q
+F0(Specify the number of lines read between each call to)180 144 Q F2
+(callbac)2.5 E(k)-.2 E F0(.).67 E(If)144 160.8 Q F1<ad43>2.968 E F0 .467
+(is speci\214ed without)2.967 F F1<ad63>2.967 E F0 2.967(,t)C .467
+(he def)-2.967 F .467(ault quantum is 5000.)-.1 F(When)5.467 E F2
+(callbac)2.967 E(k)-.2 E F0 .467(is e)2.967 F -.25(va)-.25 G .467
+(luated, it is sup-).25 F .261(plied the inde)144 172.8 R 2.761(xo)-.15
+G 2.761(ft)-2.761 G .261(he ne)-2.761 F .262(xt array element to be ass\
+igned and the line to be assigned to that element)-.15 F .275
+(as additional ar)144 184.8 R(guments.)-.18 E F2(callbac)5.275 E(k)-.2 E
+F0 .275(is e)2.775 F -.25(va)-.25 G .274
+(luated after the line is read b).25 F .274
+(ut before the array element is)-.2 F(assigned.)144 196.8 Q
+(If not supplied with an e)144 213.6 Q(xplicit origin,)-.15 E F1
+(map\214le)2.5 E F0(will clear)2.5 E F2(arr)2.5 E(ay)-.15 E F0
+(before assigning to it.)2.5 E F1(map\214le)144 230.4 Q F0 1.905
+(returns successfully unless an in)4.405 F -.25(va)-.4 G 1.905
+(lid option or option ar).25 F 1.906(gument is supplied,)-.18 F F2(arr)
+4.406 E(ay)-.15 E F0(is)4.406 E(in)144 242.4 Q -.25(va)-.4 G
+(lid or unassignable, or if).25 E F2(arr)2.5 E(ay)-.15 E F0
+(is not an inde)2.5 E -.15(xe)-.15 G 2.5(da).15 G(rray)-2.5 E(.)-.65 E
+F1(popd)108 259.2 Q F0<5bad>2.5 E F1(n)A F0 2.5(][)C(+)-2.5 E F2(n)A F0
+2.5(][)C<ad>-2.5 E F2(n)A F0(])A(Remo)144 271.2 Q -.15(ve)-.15 G 2.8(se)
+.15 G .3(ntries from the directory stack.)-2.8 F -.4(Wi)5.299 G .299
+(th no ar).4 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15 G
+.299(he top directory from the)-2.799 F 1.478(stack, and performs a)144
+283.2 R F1(cd)3.978 E F0 1.479(to the ne)3.978 F 3.979(wt)-.25 G 1.479
+(op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.479
+(uments, if supplied, ha).18 F 1.779 -.15(ve t)-.2 H 1.479(he follo).15
+F(wing)-.25 E(meanings:)144 295.2 Q F1<ad6e>144 307.2 Q F0 .551
+(Suppresses the normal change of directory when remo)180 307.2 R .551
+(ving directories from the stack, so)-.15 F
+(that only the stack is manipulated.)180 319.2 Q F1(+)144 331.2 Q F2(n)A
+F0(Remo)180 331.2 Q -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F2(n)2.64 E
+F0 .14(th entry counting from the left of the list sho)B .14(wn by)-.25
+F F1(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180
+343.2 S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0
+(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)
+-.65 E F3(popd +1)2.5 E F0(the second.)2.5 E F1<ad>144 355.2 Q F2(n)A F0
+(Remo)180 355.2 Q -.15(ve)-.15 G 3.76(st).15 G(he)-3.76 E F2(n)3.76 E F0
+1.259(th entry counting from the right of the list sho)B 1.259(wn by)
+-.25 F F1(dirs)3.759 E F0 3.759(,s)C 1.259(tarting with)-3.759 F 2.5
+(zero. F)180 367.2 R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0
+(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65
+E F3(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .643(If the)144
+384 R F1(popd)3.143 E F0 .643(command is successful, a)3.143 F F1(dirs)
+3.143 E F0 .644(is performed as well, and the return status is 0.)3.143
+F F1(popd)5.644 E F0 .416(returns f)144 396 R .416(alse if an in)-.1 F
+-.25(va)-.4 G .415
+(lid option is encountered, the directory stack is empty).25 F 2.915
+(,an)-.65 G(on-e)-2.915 E .415(xistent direc-)-.15 F
+(tory stack entry is speci\214ed, or the directory change f)144 408 Q
+(ails.)-.1 E F1(printf)108 424.8 Q F0([)2.5 E F1<ad76>A F2(var)2.5 E F0
+(])A F2(format)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A 1.436
+(Write the formatted)144 436.8 R F2(ar)3.936 E(guments)-.37 E F0 1.437
+(to the standard output under the control of the)3.936 F F2(format)3.937
+E F0 6.437(.T)C(he)-6.437 E F1<ad76>3.937 E F0 .126
+(option causes the output to be assigned to the v)144 448.8 R(ariable)
+-.25 E F2(var)2.626 E F0 .126(rather than being printed to the standard)
+2.626 F(output.)144 460.8 Q(The)144 484.8 Q F2(format)3.017 E F0 .517(i\
+s a character string which contains three types of objects: plain chara\
+cters, which are)3.017 F .704(simply copied to standard output, charact\
+er escape sequences, which are con)144 496.8 R -.15(ve)-.4 G .703
+(rted and copied to).15 F .036(the standard output, and format speci\
+\214cations, each of which causes printing of the ne)144 508.8 R .037
+(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 520.8 Q(gument)-.37 E F0
+5.532(.I)C 3.032(na)-5.532 G .532(ddition to the standard)-3.032 F F2
+(printf)3.032 E F0 .532(\(1\) format speci\214cations,)B F1(printf)3.031
+E F0 .531(interprets the follo)3.031 F(w-)-.25 E(ing e)144 532.8 Q
+(xtensions:)-.15 E F1(%b)144 544.8 Q F0(causes)180 544.8 Q F1(printf)
+2.595 E F0 .096(to e)2.595 F .096
+(xpand backslash escape sequences in the corresponding)-.15 F F2(ar)
+2.596 E(gument)-.37 E F0 .096(in the)2.596 F(same w)180 556.8 Q(ay as)
+-.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 568.8 Q F0(causes)180 568.8 Q
+F1(printf)2.51 E F0 .01(to output the corresponding)2.51 F F2(ar)2.51 E
+(gument)-.37 E F0 .01(in a format that can be reused as shell)2.51 F
+(input.)180 580.8 Q F1(%\()144 592.8 Q F2(datefmt)A F1(\)T)A F0(causes)
+180 604.8 Q F1(printf)4.403 E F0 1.904
+(to output the date-time string resulting from using)4.403 F F2(datefmt)
+4.404 E F0 1.904(as a format)4.404 F .381(string for)180 616.8 R F2
+(strftime)2.881 E F0 2.881(\(3\). The)B(corresponding)2.881 E F2(ar)
+2.881 E(gument)-.37 E F0 .381(is an inte)2.881 F .381
+(ger representing the number)-.15 F .292(of seconds since the epoch.)180
+628.8 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F
+.293(alues may be used: \2551 represents the)-.25 F .694
+(current time, and \2552 represents the time the shell w)180 640.8 R
+.693(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.193(d. If).1 F .693(no ar)
+3.193 F .693(gument is speci-)-.18 F .21(\214ed, con)180 652.8 R -.15
+(ve)-.4 G .21(rsion beha).15 F -.15(ve)-.2 G 2.71(sa).15 G 2.71(si)-2.71
+G 2.71<66ad>-2.71 G 2.71(1h)-2.71 G .21(ad been gi)-2.71 F -.15(ve)-.25
+G 2.71(n. This).15 F .21(is an e)2.71 F .21(xception to the usual)-.15 F
+F1(printf)2.71 E F0(beha)180 664.8 Q(vior)-.2 E(.)-.55 E(Ar)144 681.6 Q
+.464(guments to non-string format speci\214ers are treated as C constan\
+ts, e)-.18 F .463(xcept that a leading plus or)-.15 F 1.258
+(minus sign is allo)144 693.6 R 1.259
+(wed, and if the leading character is a single or double quote, the v)
+-.25 F 1.259(alue is the)-.25 F(ASCII v)144 705.6 Q(alue of the follo)
+-.25 E(wing character)-.25 E(.)-.55 E(The)144 722.4 Q F2(format)3.424 E
+F0 .923(is reused as necessary to consume all of the)3.424 F F2(ar)3.423
+E(guments)-.37 E F0 5.923(.I)C 3.423(ft)-5.923 G(he)-3.423 E F2(format)
+3.423 E F0 .923(requires more)3.423 F(GNU Bash 5.0)72 768 Q(2004 Apr 20)
+149.565 E(12)198.725 E 0 Cg EP
+%%Page: 13 13
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Italic@0 SF(ar)144 84 Q
+(guments)-.37 E F0 .033(than are supplied, the e)2.533 F .033
+(xtra format speci\214cations beha)-.15 F .333 -.15(ve a)-.2 H 2.533(si)
+.15 G 2.533(faz)-2.533 G .033(ero v)-2.533 F .034(alue or null string,)
+-.25 F(as appropriate, had been supplied.)144 96 Q(The return v)5 E
+(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E/F2 10
+/Times-Bold@0 SF(pushd)108 112.8 Q F0([)2.5 E F2<ad6e>A F0 2.5(][)C(+)
+-2.5 E F1(n)A F0 2.5(][)C<ad>-2.5 E F1(n)A F0(])A F2(pushd)108 124.8 Q
+F0([)2.5 E F2<ad6e>A F0 2.5(][)C F1(dir)-2.5 E F0(])A .64(Adds a direct\
+ory to the top of the directory stack, or rotates the stack, making the\
+ ne)144 136.8 R 3.139(wt)-.25 G .639(op of the)-3.139 F .416
+(stack the current w)144 148.8 R .416(orking directory)-.1 F 5.416(.W)
+-.65 G .416(ith no ar)-5.816 F(guments,)-.18 E F2(pushd)2.916 E F0 -.15
+(ex)2.916 G .416(changes the top tw).15 F 2.917(od)-.1 G(irectories)
+-2.917 E 1.625(and returns 0, unless the directory stack is empty)144
+160.8 R 6.625(.A)-.65 G -.18(rg)-6.625 G 1.625(uments, if supplied, ha)
+.18 F 1.925 -.15(ve t)-.2 H 1.625(he follo).15 F(wing)-.25 E(meanings:)
+144 172.8 Q F2<ad6e>144 184.8 Q F0 1.811(Suppresses the normal change o\
+f directory when rotating or adding directories to the)180 184.8 R
+(stack, so that only the stack is manipulated.)180 196.8 Q F2(+)144
+208.8 Q F1(n)A F0 1.268(Rotates the stack so that the)180 208.8 R F1(n)
+3.768 E F0 1.267(th directory \(counting from the left of the list sho)B
+1.267(wn by)-.25 F F2(dirs)180 220.8 Q F0 2.5(,s)C
+(tarting with zero\) is at the top.)-2.5 E F2<ad>144 232.8 Q F1(n)A F0
+.92(Rotates the stack so that the)180 232.8 R F1(n)3.42 E F0 .92
+(th directory \(counting from the right of the list sho)B .92(wn by)-.25
+F F2(dirs)180 244.8 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
+-2.5 E F1(dir)144.35 256.8 Q F0(Adds)180 256.8 Q F1(dir)3.138 E F0 .288
+(to the directory stack at the top, making it the ne)3.518 F 2.787(wc)
+-.25 G .287(urrent w)-2.787 F .287(orking directory as)-.1 F
+(if it had been supplied as the ar)180 268.8 Q(gument to the)-.18 E F2
+(cd)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .488(If the)144 285.6 R F2(pushd)
+2.988 E F0 .488(command is successful, a)2.988 F F2(dirs)2.988 E F0 .488
+(is performed as well.)2.988 F .489(If the \214rst form is used,)5.488 F
+F2(pushd)2.989 E F0 1.04(returns 0 unless the cd to)144 297.6 R F1(dir)
+3.89 E F0 -.1(fa)4.27 G 3.539(ils. W).1 F 1.039(ith the second form,)-.4
+F F2(pushd)3.539 E F0 1.039(returns 0 unless the directory)3.539 F .846
+(stack is empty)144 309.6 R 3.346(,an)-.65 G(on-e)-3.346 E .847(xistent\
+ directory stack element is speci\214ed, or the directory change to the)
+-.15 F(speci\214ed ne)144 321.6 Q 2.5(wc)-.25 G(urrent directory f)-2.5
+E(ails.)-.1 E F2(pwd)108 338.4 Q F0([)2.5 E F2(\255LP)A F0(])A .845
+(Print the absolute pathname of the current w)144 350.4 R .845
+(orking directory)-.1 F 5.844(.T)-.65 G .844
+(he pathname printed contains no)-5.844 F .181(symbolic links if the)144
+362.4 R F2<ad50>2.681 E F0 .181(option is supplied or the)2.681 F F2
+.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F2
+(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264
+(enabled. If)144 374.4 R(the)3.264 E F2<ad4c>3.264 E F0 .763
+(option is used, the pathname printed may contain symbolic links.)3.264
+F .763(The return)5.763 F 1.36(status is 0 unless an error occurs while\
+ reading the name of the current directory or an in)144 386.4 R -.25(va)
+-.4 G(lid).25 E(option is supplied.)144 398.4 Q F2 -.18(re)108 415.2 S
+(ad).18 E F0([)3.817 E F2(\255ers)A F0 3.817(][)C F2<ad61>-3.817 E F1
+(aname)3.817 E F0 3.817(][)C F2<ad64>-3.817 E F1(delim)3.817 E F0 3.817
+(][)C F2<ad69>-3.817 E F1(te)3.817 E(xt)-.2 E F0 3.817(][)C F2<ad6e>
+-3.817 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F2<ad4e>-3.816 E
+F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F2<ad70>-3.816 E F1(pr)
+3.816 E(ompt)-.45 E F0 3.816(][)C F2<ad74>-3.816 E F1(timeout)3.816 E F0
+3.816(][)C F2<ad75>-3.816 E F1(fd)3.816 E F0(])A([)108 427.2 Q F1(name)A
+F0(...])2.5 E .516(One line is read from the standard input, or from th\
+e \214le descriptor)144 439.2 R F1(fd)3.016 E F0 .516(supplied as an ar)
+3.016 F .517(gument to)-.18 F(the)144 451.2 Q F2<ad75>3.848 E F0 1.348
+(option, split into w)3.848 F 1.348(ords as described abo)-.1 F 1.647
+-.15(ve u)-.15 H(nder).15 E F2 -.75(Wo)3.847 G 1.347(rd Splitting).75 F
+F0 3.847(,a)C 1.347(nd the \214rst w)-3.847 F 1.347(ord is)-.1 F 1.465
+(assigned to the \214rst)144 463.2 R F1(name)3.965 E F0 3.965(,t).18 G
+1.465(he second w)-3.965 F 1.465(ord to the second)-.1 F F1(name)3.965 E
+F0 3.965(,a).18 G 1.465(nd so on.)-3.965 F 1.465(If there are more)6.465
+F -.1(wo)144 475.2 S 1.112(rds than names, the remaining w).1 F 1.112
+(ords and their interv)-.1 F 1.112
+(ening delimiters are assigned to the last)-.15 F F1(name)144 487.2 Q F0
+5.722(.I).18 G 3.222(ft)-5.722 G .722(here are fe)-3.222 F .722(wer w)
+-.25 F .723
+(ords read from the input stream than names, the remaining names are)-.1
+F .532(assigned empty v)144 499.2 R 3.032(alues. The)-.25 F .532
+(characters in)3.032 F/F3 9/Times-Bold@0 SF(IFS)3.032 E F0 .531
+(are used to split the line into w)2.782 F .531(ords using the same)-.1
+F .197(rules the shell uses for e)144 511.2 R .197
+(xpansion \(described abo)-.15 F .497 -.15(ve u)-.15 H(nder).15 E F2
+-.75(Wo)2.697 G .197(rd Splitting).75 F F0 2.697(\). The)B .197
+(backslash charac-)2.697 F .157(ter \()144 523.2 R F2(\\)A F0 2.657(\)m)
+C .157(ay be used to remo)-2.657 F .457 -.15(ve a)-.15 H .457 -.15(ny s)
+.15 H .157(pecial meaning for the ne).15 F .156
+(xt character read and for line continu-)-.15 F 2.5(ation. Options,)144
+535.2 R(if supplied, ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F2<ad61>144 547.2 Q F1(aname)2.5 E F0 1.049
+(The w)180 559.2 R 1.049
+(ords are assigned to sequential indices of the array v)-.1 F(ariable)
+-.25 E F1(aname)3.55 E F0 3.55(,s).18 G 1.05(tarting at 0.)-3.55 F F1
+(aname)180.33 571.2 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5 -.25
+(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F1(name)2.5 E F0(ar)2.5
+E(guments are ignored.)-.18 E F2<ad64>144 583.2 Q F1(delim)2.5 E F0
+1.318(The \214rst character of)180 595.2 R F1(delim)3.818 E F0 1.317
+(is used to terminate the input line, rather than ne)3.818 F 3.817
+(wline. If)-.25 F F1(delim)180 607.2 Q F0(is the empty string,)2.5 E F2
+-.18(re)2.5 G(ad).18 E F0
+(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F2
+<ad65>144 619.2 Q F0 .372
+(If the standard input is coming from a terminal,)180 619.2 R F2 -.18
+(re)2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.873 E F0(abo)
+2.623 E -.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E
+.218(to obtain the line.)180 631.2 R .218
+(Readline uses the current \(or def)5.218 F .218
+(ault, if line editing w)-.1 F .218(as not pre)-.1 F(viously)-.25 E
+(acti)180 643.2 Q -.15(ve)-.25 G 2.5(\)e).15 G(diting settings, b)-2.5 E
+(ut uses Readline')-.2 E 2.5(sd)-.55 G(ef)-2.5 E
+(ault \214lename completion.)-.1 E F2<ad69>144 655.2 Q F1(te)2.5 E(xt)
+-.2 E F0(If)180 655.2 Q F2 -.18(re)2.715 G(adline).18 E F0 .216
+(is being used to read the line,)2.715 F F1(te)2.716 E(xt)-.2 E F0 .216
+(is placed into the editing b)2.716 F(uf)-.2 E .216(fer before edit-)
+-.25 F(ing be)180 667.2 Q(gins.)-.15 E F2<ad6e>144 679.2 Q F1(nc)2.5 E
+(har)-.15 E(s)-.1 E F2 -.18(re)180 691.2 S(ad).18 E F0 1.395
+(returns after reading)3.895 F F1(nc)3.895 E(har)-.15 E(s)-.1 E F0 1.395
+(characters rather than w)3.895 F 1.394(aiting for a complete line of)
+-.1 F(input, b)180 703.2 Q(ut honors a delimiter if fe)-.2 E(wer than)
+-.25 E F1(nc)2.5 E(har)-.15 E(s)-.1 E F0
+(characters are read before the delimiter)2.5 E(.)-.55 E(GNU Bash 5.0)72
+768 Q(2004 Apr 20)149.565 E(13)198.725 E 0 Cg EP
+%%Page: 14 14
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF<ad4e>144 84 Q/F2 10
+/Times-Italic@0 SF(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 96 S(ad)
+.18 E F0 1.269(returns after reading e)3.769 F(xactly)-.15 E F2(nc)3.769
+E(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F 1.27
+(aiting for a complete)-.1 F .275
+(line of input, unless EOF is encountered or)180 108 R F1 -.18(re)2.775
+G(ad).18 E F0 .274(times out.)2.774 F .274(Delimiter characters encoun-)
+5.274 F 1.002
+(tered in the input are not treated specially and do not cause)180 120 R
+F1 -.18(re)3.503 G(ad).18 E F0 1.003(to return until)3.503 F F2(nc)3.503
+E(har)-.15 E(s)-.1 E F0 .609(characters are read.)180 132 R .608
+(The result is not split on the characters in)5.609 F F1(IFS)3.108 E F0
+3.108(;t)C .608(he intent is that the)-3.108 F -.25(va)180 144 S .669
+(riable is assigned e).25 F .669
+(xactly the characters read \(with the e)-.15 F .67
+(xception of backslash; see the)-.15 F F1<ad72>180 156 Q F0(option belo)
+2.5 E(w\).)-.25 E F1<ad70>144 168 Q F2(pr)2.5 E(ompt)-.45 E F0(Display)
+180 180 Q F2(pr)3.661 E(ompt)-.45 E F0 1.161(on standard error)3.661 F
+3.661(,w)-.4 G 1.161(ithout a trailing ne)-3.661 F 1.161
+(wline, before attempting to read)-.25 F(an)180 192 Q 2.5(yi)-.15 G 2.5
+(nput. The)-2.5 F
+(prompt is displayed only if input is coming from a terminal.)2.5 E F1
+<ad72>144 204 Q F0 .543(Backslash does not act as an escape character)
+180 204 R 5.543(.T)-.55 G .544(he backslash is considered to be part of)
+-5.543 F .493(the line.)180 216 R .493(In particular)5.493 F 2.993(,ab)
+-.4 G(ackslash-ne)-2.993 E .493
+(wline pair may not then be used as a line continua-)-.25 F(tion.)180
+228 Q F1<ad73>144 240 Q F0(Silent mode.)180 240 Q
+(If input is coming from a terminal, characters are not echoed.)5 E F1
+<ad74>144 252 Q F2(timeout)2.5 E F0(Cause)180 264 Q F1 -.18(re)2.928 G
+(ad).18 E F0 .428(to time out and return f)2.928 F .428
+(ailure if a complete line of input \(or a speci\214ed num-)-.1 F .561
+(ber of characters\) is not read within)180 276 R F2(timeout)3.061 E F0
+(seconds.)3.061 E F2(timeout)5.561 E F0 .56(may be a decimal number)
+3.061 F(with a fractional portion follo)180 288 Q
+(wing the decimal point.)-.25 E(This option is only ef)5 E(fecti)-.25 E
+.3 -.15(ve i)-.25 H(f).15 E F1 -.18(re)2.5 G(ad).18 E F0 .506(is readin\
+g input from a terminal, pipe, or other special \214le; it has no ef)180
+300 R .505(fect when reading)-.25 F .589(from re)180 312 R .589
+(gular \214les.)-.15 F(If)5.589 E F1 -.18(re)3.089 G(ad).18 E F0 .589
+(times out,)3.089 F F1 -.18(re)3.089 G(ad).18 E F0(sa)3.089 E -.15(ve)
+-.2 G 3.089(sa).15 G .889 -.15(ny p)-3.089 H .59
+(artial input read into the speci\214ed).15 F -.25(va)180 324 S(riable)
+.25 E F2(name)2.77 E F0 5.27(.I)C(f)-5.27 E F2(timeout)2.77 E F0 .27
+(is 0,)2.77 F F1 -.18(re)2.77 G(ad).18 E F0 .27(returns immediately)2.77
+F 2.77(,w)-.65 G .27(ithout trying to read an)-2.77 F 2.77(yd)-.15 G
+(ata.)-2.77 E 1.12(The e)180 336 R 1.12(xit status is 0 if input is a)
+-.15 F -.25(va)-.2 G 1.12(ilable on the speci\214ed \214le descriptor)
+.25 F 3.62(,n)-.4 G 1.12(on-zero other)-3.62 F(-)-.2 E 2.5(wise. The)180
+348 R -.15(ex)2.5 G(it status is greater than 128 if the timeout is e)
+.15 E(xceeded.)-.15 E F1<ad75>144 360 Q F2(fd)2.5 E F0
+(Read input from \214le descriptor)180 360 Q F2(fd)2.5 E F0(.)A .477
+(If no)144 376.8 R F2(names)3.337 E F0 .477
+(are supplied, the line read is assigned to the v)3.247 F(ariable)-.25 E
+/F3 9/Times-Bold@0 SF(REPL)2.976 E(Y)-.828 E/F4 9/Times-Roman@0 SF(.)A
+F0 .476(The e)4.976 F .476(xit status is zero,)-.15 F .772
+(unless end-of-\214le is encountered,)144 388.8 R F1 -.18(re)3.272 G(ad)
+.18 E F0 .773
+(times out \(in which case the status is greater than 128\), a)3.272 F
+-.25(va)144 400.8 S 2.004
+(riable assignment error \(such as assigning to a readonly v).25 F 2.004
+(ariable\) occurs, or an in)-.25 F -.25(va)-.4 G 2.004(lid \214le).25 F
+(descriptor is supplied as the ar)144 412.8 Q(gument to)-.18 E F1<ad75>
+2.5 E F0(.)A F1 -.18(re)108 429.6 S(adonly).18 E F0([)2.5 E F1(\255aAf)A
+F0 2.5(][)C F1<ad70>-2.5 E F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(wor)A
+(d)-.37 E F0 2.5(].)C(..])-2.5 E .77(The gi)144 441.6 R -.15(ve)-.25 G
+(n).15 E F2(names)3.27 E F0 .77(are mark)3.27 F .77(ed readonly; the v)
+-.1 F .77(alues of these)-.25 F F2(names)3.63 E F0 .77
+(may not be changed by subse-)3.54 F 1.097(quent assignment.)144 453.6 R
+1.097(If the)6.097 F F1<ad66>3.597 E F0 1.097
+(option is supplied, the functions corresponding to the)3.597 F F2
+(names)3.596 E F0 1.096(are so)3.596 F(mark)144 465.6 Q 3.334(ed. The)
+-.1 F F1<ad61>3.334 E F0 .834(option restricts the v)3.334 F .834
+(ariables to inde)-.25 F -.15(xe)-.15 G 3.334(da).15 G .834(rrays; the)
+-3.334 F F1<ad41>3.334 E F0 .834(option restricts the v)3.334 F(ari-)
+-.25 E .777(ables to associati)144 477.6 R 1.077 -.15(ve a)-.25 H 3.277
+(rrays. If).15 F .777(both options are supplied,)3.277 F F1<ad41>3.277 E
+F0(tak)3.277 E .776(es precedence.)-.1 F .776(If no)5.776 F F2(name)
+3.636 E F0(ar)3.456 E(gu-)-.18 E .521(ments are gi)144 489.6 R -.15(ve)
+-.25 G .521(n, or if the).15 F F1<ad70>3.021 E F0 .521
+(option is supplied, a list of all readonly names is printed.)3.021 F
+.522(The other)5.521 F .295(options may be used to restrict the output \
+to a subset of the set of readonly names.)144 501.6 R(The)5.295 E F1
+<ad70>2.795 E F0(option)2.795 E .786
+(causes output to be displayed in a format that may be reused as input.)
+144 513.6 R .786(If a v)5.786 F .786(ariable name is fol-)-.25 F(lo)144
+525.6 Q .718(wed by =)-.25 F F2(wor)A(d)-.37 E F0 3.218(,t)C .718(he v)
+-3.218 F .718(alue of the v)-.25 F .718(ariable is set to)-.25 F F2(wor)
+3.218 E(d)-.37 E F0 5.718(.T)C .718(he return status is 0 unless an in)
+-5.718 F -.25(va)-.4 G(lid).25 E .26(option is encountered, one of the)
+144 537.6 R F2(names)3.12 E F0 .26(is not a v)3.03 F .26(alid shell v)
+-.25 F .26(ariable name, or)-.25 F F1<ad66>2.76 E F0 .26
+(is supplied with a)2.76 F F2(name)144.36 549.6 Q F0
+(that is not a function.)2.68 E F1 -.18(re)108 566.4 S(tur).18 E(n)-.15
+E F0([)2.5 E F2(n)A F0(])A .021(Causes a function to stop e)144 578.4 R
+-.15(xe)-.15 G .021(cuting and return the v).15 F .021
+(alue speci\214ed by)-.25 F F2(n)2.88 E F0 .02(to its caller)2.76 F 5.02
+(.I)-.55 G(f)-5.02 E F2(n)2.88 E F0 .02(is omitted,)2.76 F .596
+(the return status is that of the last command e)144 590.4 R -.15(xe)
+-.15 G .597(cuted in the function body).15 F 5.597(.I)-.65 G(f)-5.597 E
+F1 -.18(re)3.097 G(tur).18 E(n)-.15 E F0 .597(is e)3.097 F -.15(xe)-.15
+G(cuted).15 E 1.239(by a trap handler)144 602.4 R 3.738(,t)-.4 G 1.238
+(he last command used to determine the status is the last command e)
+-3.738 F -.15(xe)-.15 G(cuted).15 E 1.032(before the trap handler)144
+614.4 R 6.032(.I)-.55 G(f)-6.032 E F1 -.18(re)3.532 G(tur).18 E(n)-.15 E
+F0 1.032(is e)3.532 F -.15(xe)-.15 G 1.032(cuted during a).15 F F1(DEB)
+3.533 E(UG)-.1 E F0 1.033(trap, the last command used to)3.533 F .39
+(determine the status is the last command e)144 626.4 R -.15(xe)-.15 G
+.389(cuted by the trap handler before).15 F F1 -.18(re)2.889 G(tur).18 E
+(n)-.15 E F0 -.1(wa)2.889 G 2.889(si).1 G -1.9 -.4(nv o)-2.889 H -.1(ke)
+.4 G(d.).1 E(If)144 638.4 Q F1 -.18(re)2.583 G(tur).18 E(n)-.15 E F0
+.084(is used outside a function, b)2.583 F .084(ut during e)-.2 F -.15
+(xe)-.15 G .084(cution of a script by the).15 F F1(.)2.584 E F0(\()5.084
+E F1(sour)A(ce)-.18 E F0 2.584(\)c)C .084(ommand, it)-2.584 F .589
+(causes the shell to stop e)144 650.4 R -.15(xe)-.15 G .589
+(cuting that script and return either).15 F F2(n)3.448 E F0 .588
+(or the e)3.328 F .588(xit status of the last com-)-.15 F .325(mand e)
+144 662.4 R -.15(xe)-.15 G .325(cuted within the script as the e).15 F
+.326(xit status of the script.)-.15 F(If)5.326 E F2(n)2.826 E F0 .326
+(is supplied, the return v)2.826 F .326(alue is)-.25 F .445
+(its least signi\214cant 8 bits.)144 674.4 R .444
+(The return status is non-zero if)5.445 F F1 -.18(re)2.944 G(tur).18 E
+(n)-.15 E F0 .444(is supplied a non-numeric ar)2.944 F(gu-)-.18 E .381
+(ment, or is used outside a function and not during e)144 686.4 R -.15
+(xe)-.15 G .381(cution of a script by).15 F F1(.)2.881 E F0(or)3.714 E
+F1(sour)2.881 E(ce)-.18 E F0 5.381(.A)C .681 -.15(ny c)-5.381 H(om-).15
+E .75(mand associated with the)144 698.4 R F1(RETURN)3.249 E F0 .749
+(trap is e)3.249 F -.15(xe)-.15 G .749(cuted before e).15 F -.15(xe)-.15
+G .749(cution resumes after the function).15 F(or script.)144 710.4 Q
+(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(14)198.725 E 0 Cg EP
+%%Page: 15 15
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(set)108 84 Q F0([)2.5
+E F1(\255\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1<ad6f>-2.5 E/F2 10
+/Times-Italic@0 SF(option\255name)2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37
+E F0(...])2.5 E F1(set)108 96 Q F0([)2.5 E F1(+abefhkmnptuvxBCEHPT)A F0
+2.5(][)C F1(+o)-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F2(ar)-2.5 E
+(g)-.37 E F0(...])2.5 E -.4(Wi)144 108 S .835
+(thout options, the name and v).4 F .835(alue of each shell v)-.25 F
+.836(ariable are displayed in a format that can be)-.25 F .784
+(reused as input for setting or resetting the currently-set v)144 120 R
+3.284(ariables. Read-only)-.25 F -.25(va)3.284 G .783(riables cannot be)
+.25 F 2.946(reset. In)144 132 R F2 .447(posix mode)2.946 F F0 2.947(,o)C
+.447(nly shell v)-2.947 F .447(ariables are listed.)-.25 F .447
+(The output is sorted according to the current)5.447 F 3.531
+(locale. When)144 144 R 1.031(options are speci\214ed, the)3.531 F 3.531
+(ys)-.15 G 1.031(et or unset shell attrib)-3.531 F 3.53(utes. An)-.2 F
+3.53(ya)-.15 G -.18(rg)-3.53 G 1.03(uments remaining).18 F 1.623
+(after option processing are treated as v)144 156 R 1.624
+(alues for the positional parameters and are assigned, in)-.25 F(order)
+144 168 Q 2.5(,t)-.4 G(o)-2.5 E F1($1)2.5 E F0(,)A F1($2)2.5 E F0(,)A F1
+2.5(... $)2.5 F F2(n)A F0 5(.O)C(ptions, if speci\214ed, ha)-5 E .3 -.15
+(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad61>144 180 Q F0
+1.378(Each v)184 180 R 1.377
+(ariable or function that is created or modi\214ed is gi)-.25 F -.15(ve)
+-.25 G 3.877(nt).15 G 1.377(he e)-3.877 F 1.377(xport attrib)-.15 F
+1.377(ute and)-.2 F(mark)184 192 Q(ed for e)-.1 E(xport to the en)-.15 E
+(vironment of subsequent commands.)-.4 E F1<ad62>144 204 Q F0 .131
+(Report the status of terminated background jobs immediately)184 204 R
+2.632(,r)-.65 G .132(ather than before the ne)-2.632 F(xt)-.15 E
+(primary prompt.)184 216 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)-.25
+H(nly when job control is enabled.).15 E F1<ad65>144 228 Q F0 .088
+(Exit immediately if a)184 228 R F2(pipeline)2.588 E F0 .087
+(\(which may consist of a single)2.588 F F2 .087(simple command)2.587 F
+F0 .087(\), a)B F2(list)2.587 E F0 2.587(,o)C(r)-2.587 E(a)184 240 Q F2
+1.52(compound command)4.02 F F0(\(see)4.021 E/F3 9/Times-Bold@0 SF 1.521
+(SHELL GRAMMAR)4.021 F F0(abo)3.771 E -.15(ve)-.15 G 1.521(\), e).15 F
+1.521(xits with a non-zero status.)-.15 F .08(The shell does not e)184
+252 R .079(xit if the command that f)-.15 F .079
+(ails is part of the command list immediately)-.1 F(follo)184 264 Q
+1.654(wing a)-.25 F F1(while)4.154 E F0(or)4.154 E F1(until)4.154 E F0
+-.1(ke)4.154 G(yw)-.05 E 1.655(ord, part of the test follo)-.1 F 1.655
+(wing the)-.25 F F1(if)4.155 E F0(or)4.155 E F1(elif)4.155 E F0(reserv)
+4.155 E(ed)-.15 E -.1(wo)184 276 S .582(rds, part of an).1 F 3.082(yc)
+-.15 G .582(ommand e)-3.082 F -.15(xe)-.15 G .581(cuted in a).15 F F1
+(&&)3.081 E F0(or)3.081 E F1(||)3.081 E F0 .581(list e)3.081 F .581
+(xcept the command follo)-.15 F(wing)-.25 E .917(the \214nal)184 288 R
+F1(&&)3.417 E F0(or)3.417 E F1(||)3.417 E F0 3.417(,a)C 1.217 -.15(ny c)
+-3.417 H .918(ommand in a pipeline b).15 F .918
+(ut the last, or if the command')-.2 F 3.418(sr)-.55 G(eturn)-3.418 E
+-.25(va)184 300 S .661(lue is being in).25 F -.15(ve)-.4 G .661
+(rted with).15 F F1(!)3.161 E F0 5.661(.I)C 3.161(fac)-5.661 G .66
+(ompound command other than a subshell returns a)-3.161 F 1.112
+(non-zero status because a command f)184 312 R 1.112(ailed while)-.1 F
+F1<ad65>3.612 E F0 -.1(wa)3.612 G 3.612(sb).1 G 1.113
+(eing ignored, the shell does)-3.612 F .178(not e)184 324 R 2.678
+(xit. A)-.15 F .178(trap on)2.678 F F1(ERR)2.678 E F0 2.678(,i)C 2.678
+(fs)-2.678 G .178(et, is e)-2.678 F -.15(xe)-.15 G .178
+(cuted before the shell e).15 F 2.677(xits. This)-.15 F .177
+(option applies to)2.677 F .617(the shell en)184 336 R .617
+(vironment and each subshell en)-.4 F .617(vironment separately \(see)
+-.4 F F3 .618(COMMAND EXE-)3.118 F .643(CUTION ENVIR)184 348 R(ONMENT)
+-.27 E F0(abo)2.893 E -.15(ve)-.15 G .643
+(\), and may cause subshells to e).15 F .643(xit before e)-.15 F -.15
+(xe)-.15 G .642(cuting all).15 F(the commands in the subshell.)184 360 Q
+2.042(If a compound command or shell function e)184 378 R -.15(xe)-.15 G
+2.042(cutes in a conte).15 F 2.042(xt where)-.15 F F1<ad65>4.542 E F0
+2.043(is being)4.543 F 1.436(ignored, none of the commands e)184 390 R
+-.15(xe)-.15 G 1.435(cuted within the compound command or function).15 F
+.193(body will be af)184 402 R .193(fected by the)-.25 F F1<ad65>2.693 E
+F0 .193(setting, e)2.693 F -.15(ve)-.25 G 2.693(ni).15 G(f)-2.693 E F1
+<ad65>2.693 E F0 .194(is set and a command returns a f)2.693 F(ailure)
+-.1 E 3.39(status. If)184 414 R 3.39(ac)3.39 G .89
+(ompound command or shell function sets)-3.39 F F1<ad65>3.39 E F0 .89
+(while e)3.39 F -.15(xe)-.15 G .89(cuting in a conte).15 F(xt)-.15 E
+(where)184 426 Q F1<ad65>3.153 E F0 .653
+(is ignored, that setting will not ha)3.153 F .954 -.15(ve a)-.2 H .954
+-.15(ny e).15 H -.25(ff).15 G .654(ect until the compound command).25 F
+(or the command containing the function call completes.)184 438 Q F1
+<ad66>144 450 Q F0(Disable pathname e)184 450 Q(xpansion.)-.15 E F1
+<ad68>144 462 Q F0 2.239(Remember the location of commands as the)184
+462 R 4.738(ya)-.15 G 2.238(re look)-4.738 F 2.238(ed up for e)-.1 F
+-.15(xe)-.15 G 4.738(cution. This).15 F(is)4.738 E(enabled by def)184
+474 Q(ault.)-.1 E F1<ad6b>144 486 Q F0 .513(All ar)184 486 R .514
+(guments in the form of assignment statements are placed in the en)-.18
+F .514(vironment for a)-.4 F
+(command, not just those that precede the command name.)184 498 Q F1
+<ad6d>144 510 Q F0 .149(Monitor mode.)184 510 R .149
+(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F
+.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .65
+(on systems that support it \(see)184 522 R F3 .651(JOB CONTR)3.151 F
+(OL)-.27 E F0(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .651
+(processes run in a separate)3.151 F .679(process group.)184 534 R .678
+(When a background job completes, the shell prints a line containing it\
+s)5.679 F -.15(ex)184 546 S(it status.).15 E F1<ad6e>144 558 Q F0 .652
+(Read commands b)184 558 R .652(ut do not e)-.2 F -.15(xe)-.15 G .652
+(cute them.).15 F .653(This may be used to check a shell script for)
+5.652 F(syntax errors.)184 570 Q(This is ignored by interacti)5 E .3
+-.15(ve s)-.25 H(hells.).15 E F1<ad6f>144 582 Q F2(option\255name)2.5 E
+F0(The)184 594 Q F2(option\255name)2.5 E F0(can be one of the follo)2.5
+E(wing:)-.25 E F1(allexport)184 606 Q F0(Same as)224 618 Q F1<ad61>2.5 E
+F0(.)A F1(braceexpand)184 630 Q F0(Same as)224 642 Q F1<ad42>2.5 E F0(.)
+A F1(emacs)184 654 Q F0 .089
+(Use an emacs-style command line editing interf)224 654 R 2.589
+(ace. This)-.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95
+(when the shell is interacti)224 666 R -.15(ve)-.25 G 3.45(,u).15 G .95
+(nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E
+F0 2.5(option. This)224 678 R(also af)2.5 E(fects the editing interf)
+-.25 E(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(err)
+184 690 Q(exit)-.18 E F0(Same as)224 690 Q F1<ad65>2.5 E F0(.)A F1
+(errtrace)184 702 Q F0(Same as)224 702 Q F1<ad45>2.5 E F0(.)A
+(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(15)198.725 E 0 Cg EP
+%%Page: 16 16
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(functrace)184 84 Q F0
+(Same as)224 96 Q F1<ad54>2.5 E F0(.)A F1(hashall)184 108 Q F0(Same as)
+224 108 Q F1<ad68>2.5 E F0(.)A F1(histexpand)184 120 Q F0(Same as)224
+132 Q F1<ad48>2.5 E F0(.)A F1(history)184 144 Q F0 .587
+(Enable command history)224 144 R 3.087(,a)-.65 G 3.087(sd)-3.087 G .587
+(escribed abo)-3.087 F .887 -.15(ve u)-.15 H(nder).15 E/F2 9
+/Times-Bold@0 SF(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F3 9/Times-Roman@0 SF
+(.)A F0 .587(This option is)5.087 F(on by def)224 156 Q
+(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184
+168 Q(eeof)-.18 E F0 1.656(The ef)224 180 R 1.656
+(fect is as if the shell command)-.25 F/F4 10/Courier@0 SF(IGNOREEOF=10)
+4.157 E F0 1.657(had been e)4.157 F -.15(xe)-.15 G(cuted).15 E(\(see)224
+192 Q F1(Shell V)2.5 E(ariables)-.92 E F0(abo)2.5 E -.15(ve)-.15 G(\).)
+.15 E F1 -.1(ke)184 204 S(yw).1 E(ord)-.1 E F0(Same as)224 216 Q F1
+<ad6b>2.5 E F0(.)A F1(monitor)184 228 Q F0(Same as)224 228 Q F1<ad6d>2.5
+E F0(.)A F1(noclob)184 240 Q(ber)-.1 E F0(Same as)224 252 Q F1<ad43>2.5
+E F0(.)A F1(noexec)184 264 Q F0(Same as)224 264 Q F1<ad6e>2.5 E F0(.)A
+F1(noglob)184 276 Q F0(Same as)224 276 Q F1<ad66>2.5 E F0(.)A F1(nolog)
+184 288 Q F0(Currently ignored.)224 288 Q F1(notify)184 300 Q F0
+(Same as)224 300 Q F1<ad62>2.5 E F0(.)A F1(nounset)184 312 Q F0(Same as)
+224 312 Q F1<ad75>2.5 E F0(.)A F1(onecmd)184 324 Q F0(Same as)224 324 Q
+F1<ad74>2.5 E F0(.)A F1(ph)184 336 Q(ysical)-.15 E F0(Same as)224 336 Q
+F1<ad50>2.5 E F0(.)A F1(pipefail)184 348 Q F0 1.03(If set, the return v)
+224 348 R 1.029(alue of a pipeline is the v)-.25 F 1.029
+(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 360 R
+1.136
+(xit with a non-zero status, or zero if all commands in the pipeline)
+-.15 F -.15(ex)224 372 S(it successfully).15 E 5(.T)-.65 G
+(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 384 Q F0
+2.091(Change the beha)224 384 R 2.091(vior of)-.2 F F1(bash)4.591 E F0
+2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091
+(fers from the)-.25 F 1.212(POSIX standard to match the standard \()224
+396 R/F5 10/Times-Italic@0 SF 1.212(posix mode)B F0 3.712(\). See)B F2
+1.212(SEE ALSO)3.712 F F0(belo)3.463 E(w)-.25 E 2.307
+(for a reference to a document that details ho)224 408 R 4.806(wp)-.25 G
+2.306(osix mode af)-4.806 F 2.306(fects bash')-.25 F(s)-.55 E(beha)224
+420 Q(vior)-.2 E(.)-.55 E F1(pri)184 432 Q(vileged)-.1 E F0(Same as)224
+444 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 456 S(rbose).1 E F0(Same as)224
+456 Q F1<ad76>2.5 E F0(.)A F1(vi)184 468 Q F0 1.465
+(Use a vi-style command line editing interf)224 468 R 3.966(ace. This)
+-.1 F 1.466(also af)3.966 F 1.466(fects the editing)-.25 F(interf)224
+480 Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1
+(xtrace)184 492 Q F0(Same as)224 492 Q F1<ad78>2.5 E F0(.)A(If)184 510 Q
+F1<ad6f>3.053 E F0 .553(is supplied with no)3.053 F F5(option\255name)
+3.053 E F0 3.053(,t)C .553(he v)-3.053 F .552
+(alues of the current options are printed.)-.25 F(If)5.552 E F1(+o)184
+522 Q F0 1.071(is supplied with no)3.571 F F5(option\255name)3.571 E F0
+3.571(,as)C 1.071(eries of)-3.571 F F1(set)3.572 E F0 1.072
+(commands to recreate the current)3.572 F
+(option settings is displayed on the standard output.)184 534 Q F1<ad70>
+144 546 Q F0 -.45(Tu)184 546 S 1.072(rn on).45 F F5(privile)4.822 E -.1
+(ge)-.4 G(d).1 E F0 3.572(mode. In)4.342 F 1.072(this mode, the)3.572 F
+F2($ENV)3.572 E F0(and)3.322 E F2($B)3.572 E(ASH_ENV)-.27 E F0 1.071
+(\214les are not pro-)3.322 F 1.5
+(cessed, shell functions are not inherited from the en)184 558 R 1.501
+(vironment, and the)-.4 F F2(SHELLOPTS)4.001 E F3(,)A F2 -.27(BA)184 570
+S(SHOPTS).27 E F3(,)A F2(CDP)2.775 E -.855(AT)-.666 G(H).855 E F3(,)A F0
+(and)2.775 E F2(GLOBIGNORE)3.025 E F0 -.25(va)2.775 G .524
+(riables, if the).25 F 3.024(ya)-.15 G .524(ppear in the en)-3.024 F
+(vironment,)-.4 E .379(are ignored.)184 582 R .379
+(If the shell is started with the ef)5.379 F(fecti)-.25 E .679 -.15
+(ve u)-.25 H .38(ser \(group\) id not equal to the real).15 F .462
+(user \(group\) id, and the)184 594 R F1<ad70>2.961 E F0 .461
+(option is not supplied, these actions are tak)2.961 F .461
+(en and the ef)-.1 F(fec-)-.25 E(ti)184 606 Q .694 -.15(ve u)-.25 H .394
+(ser id is set to the real user id.).15 F .395(If the)5.395 F F1<ad70>
+2.895 E F0 .395(option is supplied at startup, the ef)2.895 F(fecti)-.25
+E -.15(ve)-.25 G .387(user id is not reset.)184 618 R -.45(Tu)5.387 G
+.387(rning this option of).45 F 2.886(fc)-.25 G .386(auses the ef)-2.886
+F(fecti)-.25 E .686 -.15(ve u)-.25 H .386(ser and group ids to be).15 F
+(set to the real user and group ids.)184 630 Q F1<ad74>144 642 Q F0
+(Exit after reading and e)184 642 Q -.15(xe)-.15 G(cuting one command.)
+.15 E F1<ad75>144 654 Q F0 -.35(Tr)184 654 S .043(eat unset v).35 F .044
+(ariables and parameters other than the special parameters "@" and "*" \
+as an)-.25 F .183(error when performing parameter e)184 666 R 2.683
+(xpansion. If)-.15 F -.15(ex)2.683 G .182
+(pansion is attempted on an unset v).15 F(ari-)-.25 E .746
+(able or parameter)184 678 R 3.246(,t)-.4 G .746
+(he shell prints an error message, and, if not interacti)-3.246 F -.15
+(ve)-.25 G 3.246(,e).15 G .746(xits with a)-3.396 F(non-zero status.)184
+690 Q F1<ad76>144 702 Q F0(Print shell input lines as the)184 702 Q 2.5
+(ya)-.15 G(re read.)-2.5 E F1<ad78>144 714 Q F0 .315(After e)184 714 R
+.315(xpanding each)-.15 F F5 .315(simple command)2.815 F F0(,)A F1 -.25
+(fo)2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E F0(command,)
+2.815 E F1(select)2.815 E F0(command,)2.815 E 3.259(or arithmetic)184
+726 R F1 -.25(fo)5.759 G(r).25 E F0 3.26(command, display the e)5.759 F
+3.26(xpanded v)-.15 F 3.26(alue of)-.25 F F2(PS4)5.76 E F3(,)A F0(follo)
+5.51 E 3.26(wed by the)-.25 F(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565
+E(16)198.725 E 0 Cg EP
+%%Page: 17 17
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E(command and its e)184 84 Q(xpanded ar)-.15
+E(guments or associated w)-.18 E(ord list.)-.1 E/F1 10/Times-Bold@0 SF
+<ad42>144 96 Q F0 2.579(The shell performs brace e)184 96 R 2.578
+(xpansion \(see)-.15 F F1 2.578(Brace Expansion)5.078 F F0(abo)5.078 E
+-.15(ve)-.15 G 5.078(\). This).15 F 2.578(is on by)5.078 F(def)184 108 Q
+(ault.)-.1 E F1<ad43>144 120 Q F0 .213(If set,)184 120 R F1(bash)2.713 E
+F0 .213(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F .214
+(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0
+2.714(,a)C(nd)-2.714 E F1(<>)2.714 E F0 .214(redirection opera-)2.714 F
+3.054(tors. This)184 132 R .553(may be o)3.053 F -.15(ve)-.15 G .553
+(rridden when creating output \214les by using the redirection opera-)
+.15 F(tor)184 144 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
+<ad45>144 156 Q F0 .103(If set, an)184 156 R 2.603(yt)-.15 G .103
+(rap on)-2.603 F F1(ERR)2.603 E F0 .104
+(is inherited by shell functions, command substitutions, and com-)2.603
+F .839(mands e)184 168 R -.15(xe)-.15 G .839(cuted in a subshell en).15
+F 3.339(vironment. The)-.4 F F1(ERR)3.338 E F0 .838
+(trap is normally not inherited in)3.338 F(such cases.)184 180 Q F1
+<ad48>144 192 Q F0(Enable)184 192 Q F1(!)3.031 E F0 .531
+(style history substitution.)5.531 F .531(This option is on by def)5.531
+F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 204 Q -.15
+(ve)-.25 G(.).15 E F1<ad50>144 216 Q F0 .96
+(If set, the shell does not resolv)184 216 R 3.459(es)-.15 G .959
+(ymbolic links when e)-3.459 F -.15(xe)-.15 G .959
+(cuting commands such as).15 F F1(cd)3.459 E F0 2.821
+(that change the current w)184 228 R 2.822(orking directory)-.1 F 7.822
+(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.822
+(ysical directory structure)-.05 F 2.686(instead. By)184 240 R(def)2.686
+E(ault,)-.1 E F1(bash)2.686 E F0(follo)2.686 E .186
+(ws the logical chain of directories when performing com-)-.25 F
+(mands which change the current directory)184 252 Q(.)-.65 E F1<ad54>144
+264 Q F0 .89(If set, an)184 264 R 3.39(yt)-.15 G .89(raps on)-3.39 F F1
+(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89
+(are inherited by shell functions, command)3.39 F 1.932
+(substitutions, and commands e)184 276 R -.15(xe)-.15 G 1.932
+(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E
+(UG)-.1 E F0(and)4.432 E F1(RETURN)184 288 Q F0
+(traps are normally not inherited in such cases.)2.5 E F1<adad>144 300 Q
+F0 .4(If no ar)184 300 R .401(guments follo)-.18 F 2.901(wt)-.25 G .401
+(his option, then the positional parameters are unset.)-2.901 F
+(Otherwise,)5.401 E(the positional parameters are set to the)184 312 Q
+/F2 10/Times-Italic@0 SF(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5
+(ni).15 G 2.5(fs)-2.5 G(ome of them be)-2.5 E(gin with a)-.15 E F1<ad>
+2.5 E F0(.)A F1<ad>144 324 Q F0 1.945
+(Signal the end of options, cause all remaining)184 324 R F2(ar)4.444 E
+(g)-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.444(ea)-4.444 G 1.944
+(ssigned to the positional)-4.444 F 3.445(parameters. The)184 336 R F1
+<ad78>3.445 E F0(and)3.445 E F1<ad76>3.445 E F0 .945
+(options are turned of)3.445 F 3.445(f. If)-.25 F .946(there are no)
+3.445 F F2(ar)3.446 E(g)-.37 E F0 .946(s, the positional)B
+(parameters remain unchanged.)184 348 Q .425(The options are of)144
+364.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425
+(ault unless otherwise noted.)-.1 F .425
+(Using + rather than \255 causes these options)5.425 F .177
+(to be turned of)144 376.8 R 2.677(f. The)-.25 F .178
+(options can also be speci\214ed as ar)2.678 F .178(guments to an in)
+-.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066
+(current set of options may be found in)144 388.8 R F1<24ad>2.566 E F0
+5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066
+(ys true unless an in).1 F -.25(va)-.4 G .066(lid option).25 F
+(is encountered.)144 400.8 Q F1(shift)108 417.6 Q F0([)2.5 E F2(n)A F0
+(])A .428(The positional parameters from)144 429.6 R F2(n)2.928 E F0
+.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.429 G
+.429(rameters represented by the num-).15 F(bers)144 441.6 Q F1($#)2.583
+E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0<ad>A F2(n)A F0 .083
+(+1 are unset.)B F2(n)5.443 E F0 .083(must be a non-ne)2.823 F -.05(ga)
+-.15 G(ti).05 E .382 -.15(ve n)-.25 H .082(umber less than or equal to)
+.15 F F1($#)2.582 E F0 5.082(.I)C(f)-5.082 E F2(n)2.942 E F0 .06
+(is 0, no parameters are changed.)144 453.6 R(If)5.06 E F2(n)2.92 E F0
+.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F
+(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56
+(,t)C(he)-2.56 E .144(positional parameters are not changed.)144 465.6 R
+.144(The return status is greater than zero if)5.144 F F2(n)3.003 E F0
+.143(is greater than)2.883 F F1($#)2.643 E F0
+(or less than zero; otherwise 0.)144 477.6 Q F1(shopt)108 494.4 Q F0([)
+2.5 E F1(\255pqsu)A F0 2.5(][)C F1<ad6f>-2.5 E F0 2.5(][)C F2(optname)
+-2.5 E F0(...])2.5 E -.8(To)144 506.4 S .639(ggle the v).8 F .639
+(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E
+5.639(.T)-.55 G .64(he settings can be either those)-5.639 F .375
+(listed belo)144 518.4 R 1.675 -.65(w, o)-.25 H 1.175 -.4(r, i).65 H
+2.875(ft).4 G(he)-2.875 E F1<ad6f>2.875 E F0 .375
+(option is used, those a)2.875 F -.25(va)-.2 G .375(ilable with the).25
+F F1<ad6f>2.875 E F0 .374(option to the)2.875 F F1(set)2.874 E F0 -.2
+(bu)2.874 G .374(iltin com-).2 F 3.325(mand. W)144 530.4 R .825
+(ith no options, or with the)-.4 F F1<ad70>3.325 E F0 .826
+(option, a list of all settable options is displayed, with an)3.325 F
+.552(indication of whether or not each is set; if)144 542.4 R F2
+(optnames)3.052 E F0 .551
+(are supplied, the output is restricted to those)3.052 F 2.549
+(options. The)144 554.4 R F1<ad70>2.549 E F0 .049(option causes output \
+to be displayed in a form that may be reused as input.)2.549 F(Other)
+5.05 E(options ha)144 566.4 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad73>144 578.4 Q F0(Enable \(set\) each)180
+578.4 Q F2(optname)2.5 E F0(.)A F1<ad75>144 590.4 Q F0
+(Disable \(unset\) each)180 590.4 Q F2(optname)2.5 E F0(.)A F1<ad71>144
+602.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\
+tus indicates whether the)180 602.4 R F2(optname)2.503 E F0(is)2.503 E
+.255(set or unset.)180 614.4 R .255(If multiple)5.255 F F2(optname)2.755
+E F0(ar)2.755 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G
+(ith)-2.756 E F1<ad71>2.756 E F0 2.756(,t)C .256
+(he return status is zero if)-2.756 F(all)180 626.4 Q F2(optnames)2.5 E
+F0(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 638.4 Q F0
+(Restricts the v)180 638.4 Q(alues of)-.25 E F2(optname)2.5 E F0
+(to be those de\214ned for the)2.5 E F1<ad6f>2.5 E F0(option to the)2.5
+E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .625(If either)144 655.2 R F1
+<ad73>3.125 E F0(or)3.124 E F1<ad75>3.124 E F0 .624(is used with no)
+3.124 F F2(optname)3.124 E F0(ar)3.124 E(guments,)-.18 E F1(shopt)3.124
+E F0(sho)3.124 E .624(ws only those options which are)-.25 F 2.233
+(set or unset, respecti)144 667.2 R -.15(ve)-.25 G(ly).15 E 7.234(.U)
+-.65 G 2.234(nless otherwise noted, the)-7.234 F F1(shopt)4.734 E F0
+2.234(options are disabled \(unset\) by)4.734 F(def)144 679.2 Q(ault.)
+-.1 E 1.544(The return status when listing options is zero if all)144
+696 R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)
+4.044 F .696
+(When setting or unsetting options, the return status is zero unless an)
+144 708 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696(alid shell)
+-.25 F(option.)144 720 Q(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(17)
+198.725 E 0 Cg EP
+%%Page: 18 18
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E(The list of)144 84 Q/F1 10/Times-Bold@0 SF
+(shopt)2.5 E F0(options is:)2.5 E F1(assoc_expand_once)144 102 Q F0
+1.945(If set, the shell suppresses multiple e)184 114 R -.25(va)-.25 G
+1.944(luation of associati).25 F 2.244 -.15(ve a)-.25 H 1.944
+(rray subscripts during).15 F 2.556(arithmetic e)184 126 R 2.556
+(xpression e)-.15 F -.25(va)-.25 G 2.556(luation, while e).25 F -.15(xe)
+-.15 G 2.557(cuting b).15 F 2.557(uiltins that can perform v)-.2 F
+(ariable)-.25 E(assignments, and while e)184 138 Q -.15(xe)-.15 G
+(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E F1
+(autocd)144 150 Q F0 .2
+(If set, a command name that is the name of a directory is e)184 150 R
+-.15(xe)-.15 G .199(cuted as if it were the ar).15 F(gu-)-.18 E
+(ment to the)184 162 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F
+(option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E
+F1(cdable_v)144 174 Q(ars)-.1 E F0 .155(If set, an ar)184 186 R .155
+(gument to the)-.18 F F1(cd)2.655 E F0 -.2(bu)2.655 G .156
+(iltin command that is not a directory is assumed to be the).2 F
+(name of a v)184 198 Q(ariable whose v)-.25 E
+(alue is the directory to change to.)-.25 E F1(cdspell)144 210 Q F0
+1.055
+(If set, minor errors in the spelling of a directory component in a)184
+210 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987
+(corrected. The)184 222 R 1.487(errors check)3.987 F 1.487
+(ed for are transposed characters, a missing character)-.1 F 3.988(,a)
+-.4 G(nd)-3.988 E .77(one character too man)184 234 R 4.57 -.65(y. I)
+-.15 H 3.27(fac).65 G .77
+(orrection is found, the corrected \214lename is printed, and)-3.27 F
+(the command proceeds.)184 246 Q(This option is only used by interacti)5
+E .3 -.15(ve s)-.25 H(hells.).15 E F1(checkhash)144 258 Q F0 .736
+(If set,)184 270 R F1(bash)3.236 E F0 .736
+(checks that a command found in the hash table e)3.236 F .737
+(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 282
+Q(If a hashed command no longer e)5 E
+(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 294 Q
+F0 .449(If set,)184 306 R F1(bash)2.949 E F0 .449
+(lists the status of an)2.949 F 2.949(ys)-.15 G .448
+(topped and running jobs before e)-2.949 F .448(xiting an interacti)-.15
+F -.15(ve)-.25 G 3.438(shell. If)184 318 R(an)3.438 E 3.438(yj)-.15 G
+.938(obs are running, this causes the e)-3.438 F .938
+(xit to be deferred until a second e)-.15 F .939(xit is)-.15 F 2.203
+(attempted without an interv)184 330 R 2.203(ening command \(see)-.15 F
+/F2 9/Times-Bold@0 SF 2.203(JOB CONTR)4.703 F(OL)-.27 E F0(abo)4.453 E
+-.15(ve)-.15 G 4.703(\). The).15 F(shell)4.703 E(al)184 342 Q -.1(wa)-.1
+G(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G
+(obs are stopped.)-2.5 E F1(checkwinsize)144 354 Q F0 1.09(If set,)184
+366 R F1(bash)3.59 E F0 1.09(checks the windo)3.59 F 3.59(ws)-.25 G 1.09
+(ize after each e)-3.59 F 1.09(xternal \(non-b)-.15 F 1.09
+(uiltin\) command and, if)-.2 F(necessary)184 378 Q 4.694(,u)-.65 G
+2.194(pdates the v)-4.694 F 2.194(alues of)-.25 F F2(LINES)4.694 E F0
+(and)4.444 E F2(COLUMNS)4.693 E/F3 9/Times-Roman@0 SF(.)A F0 2.193
+(This option is enabled by)6.693 F(def)184 390 Q(ault.)-.1 E F1(cmdhist)
+144 402 Q F0 1.202(If set,)184 402 R F1(bash)3.702 E F0 1.202
+(attempts to sa)3.702 F 1.502 -.15(ve a)-.2 H 1.202
+(ll lines of a multiple-line command in the same history).15 F(entry)184
+414 Q 6.133(.T)-.65 G 1.133(his allo)-6.133 F 1.133
+(ws easy re-editing of multi-line commands.)-.25 F 1.132
+(This option is enabled by)6.132 F(def)184 426 Q .613(ault, b)-.1 F .613
+(ut only has an ef)-.2 F .614
+(fect if command history is enabled, as described abo)-.25 F .914 -.15
+(ve u)-.15 H(nder).15 E F2(HIST)184 438 Q(OR)-.162 E(Y)-.315 E F3(.)A F1
+(compat31)144 450 Q F0 .42(If set,)184 462 R F1(bash)2.92 E F0 .42
+(changes its beha)2.92 F .419(vior to that of v)-.2 F .419
+(ersion 3.1 with respect to quoted ar)-.15 F(guments)-.18 E .461(to the)
+184 474 R F1([[)2.961 E F0 .462(conditional command')2.962 F(s)-.55 E F1
+(=~)2.962 E F0 .462
+(operator and locale-speci\214c string comparison when)2.962 F .71
+(using the)184 486 R F1([[)3.21 E F0 .71(conditional command')3.21 F(s)
+-.55 E F1(<)3.21 E F0(and)3.21 E F1(>)3.21 E F0 3.21(operators. Bash)
+3.21 F -.15(ve)3.21 G .71(rsions prior to bash-4.1).15 F .82
+(use ASCII collation and)184 498 R/F4 10/Times-Italic@0 SF(str)3.321 E
+(cmp)-.37 E F0 .821(\(3\); bash-4.1 and later use the current locale')
+.19 F 3.321(sc)-.55 G(ollation)-3.321 E(sequence and)184 510 Q F4(str)
+2.5 E(coll)-.37 E F0(\(3\).).51 E F1(compat32)144 522 Q F0 1.41(If set,)
+184 534 R F1(bash)3.91 E F0 1.41(changes its beha)3.91 F 1.409
+(vior to that of v)-.2 F 1.409
+(ersion 3.2 with respect to locale-speci\214c)-.15 F .422
+(string comparison when using the)184 546 R F1([[)2.922 E F0 .422
+(conditional command')2.922 F(s)-.55 E F1(<)2.922 E F0(and)2.922 E F1(>)
+2.923 E F0 .423(operators \(see pre-)2.923 F .481
+(vious item\) and the ef)184 558 R .481
+(fect of interrupting a command list.)-.25 F .48(Bash v)5.481 F .48
+(ersions 3.2 and earlier)-.15 F(continue with the ne)184 570 Q
+(xt command in the list after one terminates due to an interrupt.)-.15 E
+F1(compat40)144 582 Q F0 1.409(If set,)184 594 R F1(bash)3.909 E F0
+1.409(changes its beha)3.909 F 1.409(vior to that of v)-.2 F 1.41
+(ersion 4.0 with respect to locale-speci\214c)-.15 F 2.008
+(string comparison when using the)184 606 R F1([[)4.508 E F0 2.007
+(conditional command')4.508 F(s)-.55 E F1(<)4.507 E F0(and)4.507 E F1(>)
+4.507 E F0 2.007(operators \(see)4.507 F .769(description of)184 618 R
+F1(compat31)3.269 E F0 3.269(\)a)C .769(nd the ef)-3.269 F .769
+(fect of interrupting a command list.)-.25 F .77(Bash v)5.77 F(ersions)
+-.15 E .087(4.0 and later interrupt the list as if the shell recei)184
+630 R -.15(ve)-.25 G 2.586(dt).15 G .086(he interrupt; pre)-2.586 F .086
+(vious v)-.25 F .086(ersions con-)-.15 F(tinue with the ne)184 642 Q
+(xt command in the list.)-.15 E F1(compat41)144 654 Q F0 1.523(If set,)
+184 666 R F1(bash)4.023 E F0 4.023(,w)C 1.523(hen in)-4.023 F F4 1.523
+(posix mode)4.023 F F0 4.024(,t)C 1.524
+(reats a single quote in a double-quoted parameter)-4.024 F -.15(ex)184
+678 S .959(pansion as a special character).15 F 5.959(.T)-.55 G .958
+(he single quotes must match \(an e)-5.959 F -.15(ve)-.25 G 3.458(nn).15
+G .958(umber\) and)-3.458 F .59
+(the characters between the single quotes are considered quoted.)184 690
+R .59(This is the beha)5.59 F .59(vior of)-.2 F .59
+(posix mode through v)184 702 R .589(ersion 4.1.)-.15 F .589(The def)
+5.589 F .589(ault bash beha)-.1 F .589(vior remains as in pre)-.2 F .589
+(vious v)-.25 F(er)-.15 E(-)-.2 E(sions.)184 714 Q(GNU Bash 5.0)72 768 Q
+(2004 Apr 20)149.565 E(18)198.725 E 0 Cg EP
+%%Page: 19 19
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(compat42)144 84 Q F0
+1.796(If set,)184 96 R F1(bash)4.296 E F0 1.796
+(does not process the replacement string in the pattern substitution w)
+4.296 F(ord)-.1 E -.15(ex)184 108 S(pansion using quote remo).15 E -.25
+(va)-.15 G(l.).25 E F1(compat43)144 120 Q F0 .141(If set,)184 132 R F1
+(bash)2.641 E F0 .141(does not print a w)2.641 F .14
+(arning message if an attempt is made to use a quoted com-)-.1 F .912
+(pound array assignment as an ar)184 144 R .912(gument to)-.18 F F1
+(declar)3.413 E(e)-.18 E F0 3.413(,m)C(ak)-3.413 E .913(es w)-.1 F .913
+(ord e)-.1 F .913(xpansion errors non-)-.15 F -.1(fa)184 156 S .353
+(tal errors that cause the current command to f).1 F .353(ail \(the def)
+-.1 F .352(ault beha)-.1 F .352(vior is to mak)-.2 F 2.852(et)-.1 G(hem)
+-2.852 E -.1(fa)184 168 S 1.057(tal errors that cause the shell to e).1
+F 1.058(xit\), and does not reset the loop state when a shell)-.15 F
+.375(function is e)184 180 R -.15(xe)-.15 G .375(cuted \(this allo).15 F
+(ws)-.25 E F1(br)2.875 E(eak)-.18 E F0(or)2.875 E F1(continue)2.875 E F0
+.374(in a shell function to af)2.875 F .374(fect loops in)-.25 F
+(the caller')184 192 Q 2.5(sc)-.55 G(onte)-2.5 E(xt\).)-.15 E F1
+(compat44)144 204 Q F0 .441(If set,)184 216 R F1(bash)2.941 E F0(sa)
+2.942 E -.15(ve)-.2 G 2.942(st).15 G .442(he positional parameters to B)
+-2.942 F .442(ASH_ARGV and B)-.35 F .442(ASH_ARGC before)-.35 F(the)184
+228 Q 2.5(ya)-.15 G(re used, re)-2.5 E -.05(ga)-.15 G
+(rdless of whether or not e).05 E(xtended deb)-.15 E
+(ugging mode is enabled.)-.2 E F1(complete_fullquote)144 240 Q F0 .654
+(If set,)184 252 R F1(bash)3.153 E F0 .653(quotes all shell metacharact\
+ers in \214lenames and directory names when per)3.153 F(-)-.2 E 1.524
+(forming completion.)184 264 R 1.524(If not set,)6.524 F F1(bash)4.024 E
+F0(remo)4.024 E -.15(ve)-.15 G 4.024(sm).15 G 1.524
+(etacharacters such as the dollar sign)-4.024 F 2.667(from the set of c\
+haracters that will be quoted in completed \214lenames when these)184
+276 R .028(metacharacters appear in shell v)184 288 R .028
+(ariable references in w)-.25 F .029(ords to be completed.)-.1 F .029
+(This means)5.029 F 1.073(that dollar signs in v)184 300 R 1.073
+(ariable names that e)-.25 F 1.073
+(xpand to directories will not be quoted; ho)-.15 F(w-)-.25 E -2.15 -.25
+(ev e)184 312 T 1.922 -.4(r, a).25 H 1.422 -.15(ny d).4 H 1.123
+(ollar signs appearing in \214lenames will not be quoted, either).15 F
+6.123(.T)-.55 G 1.123(his is acti)-6.123 F -.15(ve)-.25 G .59
+(only when bash is using backslashes to quote completed \214lenames.)184
+324 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 336 Q
+(ault, which is the def)-.1 E(ault bash beha)-.1 E(vior in v)-.2 E
+(ersions through 4.2.)-.15 E F1(dir)144 348 Q(expand)-.18 E F0 .486
+(If set,)184 360 R F1(bash)2.986 E F0 .486
+(replaces directory names with the results of w)2.986 F .486(ord e)-.1 F
+.487(xpansion when perform-)-.15 F .18(ing \214lename completion.)184
+372 R .179(This changes the contents of the readline editing b)5.18 F
+(uf)-.2 E(fer)-.25 E 5.179(.I)-.55 G 2.679(fn)-5.179 G(ot)-2.679 E(set,)
+184 384 Q F1(bash)2.5 E F0(attempts to preserv)2.5 E 2.5(ew)-.15 G
+(hat the user typed.)-2.5 E F1(dirspell)144 396 Q F0 .858(If set,)184
+396 R F1(bash)3.358 E F0 .858
+(attempts spelling correction on directory names during w)3.358 F .859
+(ord completion if)-.1 F
+(the directory name initially supplied does not e)184 408 Q(xist.)-.15 E
+F1(dotglob)144 420 Q F0 .165(If set,)184 420 R F1(bash)2.665 E F0 .165
+(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665('i)
+-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F
+(xpansion.)-.15 E(The \214lenames)184 432 Q F1 -.63(``)2.5 G -.55(.').63
+G(')-.08 E F0(and)5 E F1 -.63(``)2.5 G(..).63 E -.63('')-.55 G F0
+(must al)5.63 E -.1(wa)-.1 G(ys be matched e).1 E(xplicitly)-.15 E 2.5
+(,e)-.65 G -.15(ve)-2.75 G 2.5(ni).15 G(f)-2.5 E F1(dotglob)2.5 E F0
+(is set.)2.5 E F1(execfail)144 444 Q F0 1.386(If set, a non-interacti)
+184 444 R 1.686 -.15(ve s)-.25 H 1.386(hell will not e).15 F 1.386
+(xit if it cannot e)-.15 F -.15(xe)-.15 G 1.387
+(cute the \214le speci\214ed as an).15 F(ar)184 456 Q(gument to the)-.18
+E F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E(An interacti)5 E .3
+-.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15 E F1(exec)2.5 E F0
+-.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 468 Q F0 .717
+(If set, aliases are e)184 480 R .717(xpanded as described abo)-.15 F
+1.017 -.15(ve u)-.15 H(nder).15 E/F2 9/Times-Bold@0 SF(ALIASES)3.217 E
+/F3 9/Times-Roman@0 SF(.)A F0 .716(This option is enabled)5.217 F
+(by def)184 492 Q(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.)
+.15 E F1(extdeb)144 504 Q(ug)-.2 E F0 .671(If set at shell in)184 516 R
+-.2(vo)-.4 G .671(cation, arrange to e).2 F -.15(xe)-.15 G .671
+(cute the deb).15 F .672(ugger pro\214le before the shell starts,)-.2 F
+.221(identical to the)184 528 R F1<adad646562>2.721 E(ugger)-.2 E F0
+2.721(option. If)2.721 F .221(set after in)2.721 F -.2(vo)-.4 G .221
+(cation, beha).2 F .22(vior intended for use by)-.2 F(deb)184 540 Q
+(uggers is enabled:)-.2 E F1(1.)184 552 Q F0(The)220 552 Q F1<ad46>4.25
+E F0 1.75(option to the)4.25 F F1(declar)4.251 E(e)-.18 E F0 -.2(bu)
+4.251 G 1.751(iltin displays the source \214le name and line).2 F
+(number corresponding to each function name supplied as an ar)220 564 Q
+(gument.)-.18 E F1(2.)184 576 Q F0 1.667(If the command run by the)220
+576 R F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167 F
+1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 588
+Q -.15(xe)-.15 G(cuted.).15 E F1(3.)184 600 Q F0 .84
+(If the command run by the)220 600 R F1(DEB)3.34 E(UG)-.1 E F0 .841
+(trap returns a v)3.341 F .841(alue of 2, and the shell is)-.25 F -.15
+(exe)220 612 S .488
+(cuting in a subroutine \(a shell function or a shell script e).15 F
+-.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1
+(sour)220 624 Q(ce)-.18 E F0 -.2(bu)2.5 G
+(iltins\), the shell simulates a call to).2 E F1 -.18(re)2.5 G(tur).18 E
+(n)-.15 E F0(.)A F1(4.)184 636 Q F2 -.27(BA)220 636 S(SH_ARGC).27 E F0
+(and)3.153 E F2 -.27(BA)3.403 G(SH_ARGV).27 E F0 .904
+(are updated as described in their descriptions)3.154 F(abo)220 648 Q
+-.15(ve)-.15 G(.).15 E F1(5.)184 660 Q F0 1.637(Function tracing is ena\
+bled: command substitution, shell functions, and sub-)220 660 R
+(shells in)220 672 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1
+(\()2.5 E/F4 10/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0
+(inherit the)2.5 E F1(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0
+(traps.)2.5 E F1(6.)184 684 Q F0 1.082(Error tracing is enabled: comman\
+d substitution, shell functions, and subshells)220 684 R(in)220 696 Q
+-.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F4(command)
+2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E F0(trap.)2.5 E F1
+(extglob)144 708 Q F0 .4(If set, the e)184 708 R .4
+(xtended pattern matching features described abo)-.15 F .7 -.15(ve u)
+-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 720 Q
+F0(are enabled.)2.5 E(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(19)
+198.725 E 0 Cg EP
+%%Page: 20 20
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(extquote)144 84 Q F0
+2.473(If set,)184 96 R F1($)4.973 E F0<08>A/F2 10/Times-Italic@0 SF
+(string)A F0 4.973<0861>C(nd)-4.973 E F1($)4.973 E F0(")A F2(string)A F0
+4.973("q)C 2.473(uoting is performed within)-4.973 F F1(${)4.973 E F2
+(par)A(ameter)-.15 E F1(})A F0 -.15(ex)4.973 G(pansions).15 E
+(enclosed in double quotes.)184 108 Q(This option is enabled by def)5 E
+(ault.)-.1 E F1(failglob)144 120 Q F0 1.425(If set, patterns which f)184
+120 R 1.425(ail to match \214lenames during pathname e)-.1 F 1.424
+(xpansion result in an)-.15 F -.15(ex)184 132 S(pansion error).15 E(.)
+-.55 E F1 -.25(fo)144 144 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
+.936(If set, the suf)184 156 R<8c78>-.25 E .936(es speci\214ed by the)
+-.15 F/F3 9/Times-Bold@0 SF(FIGNORE)3.436 E F0 .936(shell v)3.186 F .936
+(ariable cause w)-.25 F .937(ords to be ignored)-.1 F .32
+(when performing w)184 168 R .32(ord completion e)-.1 F -.15(ve)-.25 G
+2.82(ni).15 G 2.82(ft)-2.82 G .32(he ignored w)-2.82 F .32
+(ords are the only possible com-)-.1 F 2.947(pletions. See)184 180 R F3
+.447(SHELL V)2.947 F(ARIABLES)-1.215 E F0(abo)2.697 E .747 -.15(ve f)
+-.15 H .448(or a description of).15 F F3(FIGNORE)2.948 E/F4 9
+/Times-Roman@0 SF(.)A F0 .448(This option is)4.948 F(enabled by def)184
+192 Q(ault.)-.1 E F1(globasciiranges)144 204 Q F0 2.519(If set, range e)
+184 216 R 2.519(xpressions used in pattern matching brack)-.15 F 2.518
+(et e)-.1 F 2.518(xpressions \(see)-.15 F F3 -.09(Pa)5.018 G(tter).09 E
+(n)-.135 E(Matching)184 228 Q F0(abo)2.964 E -.15(ve)-.15 G 3.214(\)b)
+.15 G(eha)-3.214 E 1.014 -.15(ve a)-.2 H 3.214(si).15 G 3.214(fi)-3.214
+G 3.214(nt)-3.214 G .714
+(he traditional C locale when performing comparisons.)-3.214 F 1.02
+(That is, the current locale')184 240 R 3.52(sc)-.55 G 1.02
+(ollating sequence is not tak)-3.52 F 1.02(en into account, so)-.1 F F1
+(b)3.52 E F0 1.02(will not)3.52 F .956(collate between)184 252 R F1(A)
+3.456 E F0(and)3.456 E F1(B)3.456 E F0 3.457(,a)C .957(nd upper)-3.457 F
+.957(-case and lo)-.2 F(wer)-.25 E .957
+(-case ASCII characters will collate)-.2 F(together)184 264 Q(.)-.55 E
+F1(globstar)144 276 Q F0 .519(If set, the pattern)184 276 R F1(**)3.019
+E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F .518
+(xt will match all \214les and zero)-.15 F .431
+(or more directories and subdirectories.)184 288 R .431
+(If the pattern is follo)5.431 F .432(wed by a)-.25 F F1(/)2.932 E F0
+2.932(,o)C .432(nly directories)-2.932 F(and subdirectories match.)184
+300 Q F1(gnu_errfmt)144 312 Q F0(If set, shell error messages are writt\
+en in the standard GNU error message format.)184 324 Q F1(histappend)144
+336 Q F0 .676
+(If set, the history list is appended to the \214le named by the v)184
+348 R .676(alue of the)-.25 F F3(HISTFILE)3.176 E F0 -.25(va)2.926 G
+(ri-).25 E(able when the shell e)184 360 Q(xits, rather than o)-.15 E
+-.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 372 Q(eedit)-.18
+E F0 .575(If set, and)184 384 R F1 -.18(re)3.075 G(adline).18 E F0 .575
+(is being used, a user is gi)3.075 F -.15(ve)-.25 G 3.075(nt).15 G .576
+(he opportunity to re-edit a f)-3.075 F .576(ailed his-)-.1 F
+(tory substitution.)184 396 Q F1(histv)144 408 Q(erify)-.1 E F0 .403
+(If set, and)184 420 R F1 -.18(re)2.903 G(adline).18 E F0 .403
+(is being used, the results of history substitution are not immediately)
+2.903 F .661(passed to the shell parser)184 432 R 5.661(.I)-.55 G .662
+(nstead, the resulting line is loaded into the)-5.661 F F1 -.18(re)3.162
+G(adline).18 E F0(editing)3.162 E -.2(bu)184 444 S -.25(ff).2 G(er).25 E
+2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1
+(hostcomplete)144 456 Q F0 1.182(If set, and)184 468 R F1 -.18(re)3.682
+G(adline).18 E F0 1.182(is being used,)3.682 F F1(bash)3.682 E F0 1.181
+(will attempt to perform hostname completion)3.681 F 1.38(when a w)184
+480 R 1.38(ord containing a)-.1 F F1(@)3.881 E F0 1.381
+(is being completed \(see)3.881 F F1(Completing)3.881 E F0(under)3.881 E
+F3(READLINE)3.881 E F0(abo)184 492 Q -.15(ve)-.15 G 2.5(\). This).15 F
+(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 504 Q F0(If set,)
+184 516 Q F1(bash)2.5 E F0(will send)2.5 E F3(SIGHUP)2.5 E F0
+(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e)
+.15 E(xits.)-.15 E F1(inherit_err)144 528 Q(exit)-.18 E F0 .22
+(If set, command substitution inherits the v)184 540 R .219(alue of the)
+-.25 F F1(err)2.719 E(exit)-.18 E F0 .219(option, instead of unsetting)
+2.719 F(it in the subshell en)184 552 Q 2.5(vironment. This)-.4 F
+(option is enabled when)2.5 E F2(posix mode)2.5 E F0(is enabled.)2.5 E
+F1(interacti)144 564 Q -.1(ve)-.1 G(_comments).1 E F0 .33(If set, allo)
+184 576 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33(ginning with)-.15 F F1
+(#)2.83 E F0 .33(to cause that w)2.83 F .33
+(ord and all remaining characters on)-.1 F .967
+(that line to be ignored in an interacti)184 588 R 1.267 -.15(ve s)-.25
+H .967(hell \(see).15 F F3(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve)-.15
+G 3.467(\). This).15 F .967(option is)3.467 F(enabled by def)184 600 Q
+(ault.)-.1 E F1(lastpipe)144 612 Q F0 .066
+(If set, and job control is not acti)184 612 R -.15(ve)-.25 G 2.566(,t)
+.15 G .066(he shell runs the last command of a pipeline not e)-2.566 F
+-.15(xe)-.15 G(-).15 E(cuted in the background in the current shell en)
+184 624 Q(vironment.)-.4 E F1(lithist)144 636 Q F0 .655(If set, and the)
+184 636 R F1(cmdhist)3.155 E F0 .654
+(option is enabled, multi-line commands are sa)3.154 F -.15(ve)-.2 G
+3.154(dt).15 G 3.154(ot)-3.154 G .654(he history)-3.154 F
+(with embedded ne)184 648 Q
+(wlines rather than using semicolon separators where possible.)-.25 E F1
+(localv)144 660 Q(ar_inherit)-.1 E F0 .421(If set, local v)184 672 R
+.422(ariables inherit the v)-.25 F .422(alue and attrib)-.25 F .422
+(utes of a v)-.2 F .422(ariable of the same name that)-.25 F -.15(ex)184
+684 S .174(ists at a pre).15 F .174(vious scope before an)-.25 F 2.673
+(yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .173
+(The nameref attrib)5.173 F .173(ute is not)-.2 F(inherited.)184 696 Q
+(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(20)198.725 E 0 Cg EP
+%%Page: 21 21
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(localv)144 84 Q
+(ar_unset)-.1 E F0 .328(If set, calling)184 96 R F1(unset)2.828 E F0
+.328(on local v)2.828 F .329(ariables in pre)-.25 F .329
+(vious function scopes marks them so subse-)-.25 F .543(quent lookups \
+\214nd them unset until that function returns. This is identical to the\
+ beha)184 108 R(v-)-.2 E(ior of unsetting local v)184 120 Q
+(ariables at the current function scope.)-.25 E F1(login_shell)144 132 Q
+F0 .486
+(The shell sets this option if it is started as a login shell \(see)184
+144 R/F2 9/Times-Bold@0 SF(INV)2.987 E(OCA)-.405 E(TION)-.855 E F0(abo)
+2.737 E -.15(ve)-.15 G 2.987(\). The).15 F -.25(va)184 156 S
+(lue may not be changed.).25 E F1(mailwar)144 168 Q(n)-.15 E F0 .815
+(If set, and a \214le that)184 180 R F1(bash)3.315 E F0 .814
+(is checking for mail has been accessed since the last time it)3.315 F
+-.1(wa)184 192 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
+(`The mail in)-.74 E/F3 10/Times-Italic@0 SF(mail\214le)2.5 E F0
+(has been read')2.5 E 2.5('i)-.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1
+(no_empty_cmd_completion)144 204 Q F0 .324(If set, and)184 216 R F1 -.18
+(re)2.824 G(adline).18 E F0 .324(is being used,)2.824 F F1(bash)2.824 E
+F0 .324(will not attempt to search the)2.824 F F2 -.666(PA)2.825 G(TH)
+-.189 E F0 .325(for possible)2.575 F
+(completions when completion is attempted on an empty line.)184 228 Q F1
+(nocaseglob)144 240 Q F0 .437(If set,)184 252 R F1(bash)2.937 E F0 .436
+(matches \214lenames in a case\255insensiti)2.937 F .736 -.15(ve f)-.25
+H .436(ashion when performing pathname).05 F -.15(ex)184 264 S
+(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E
+-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 276 Q F0 1.193(If set,)184
+288 R F1(bash)3.693 E F0 1.194(matches patterns in a case\255insensiti)
+3.693 F 1.494 -.15(ve f)-.25 H 1.194(ashion when performing matching).05
+F .551(while e)184 300 R -.15(xe)-.15 G(cuting).15 E F1(case)3.051 E F0
+(or)3.051 E F1([[)3.051 E F0 .551
+(conditional commands, when performing pattern substitution)3.051 F -.1
+(wo)184 312 S .622(rd e).1 F .623(xpansions, or when \214ltering possib\
+le completions as part of programmable com-)-.15 F(pletion.)184 324 Q F1
+(nullglob)144 336 Q F0 .855(If set,)184 348 R F1(bash)3.355 E F0(allo)
+3.355 E .855(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)
+3.354 G .854(thname Expansion).1 F F0(abo)3.354 E -.15(ve)-.15 G 3.354
+(\)t).15 G(o)-3.354 E -.15(ex)184 360 S
+(pand to a null string, rather than themselv).15 E(es.)-.15 E F1(pr)144
+372 Q(ogcomp)-.18 E F0 .676(If set, the programmable completion f)184
+384 R .677(acilities \(see)-.1 F F1(Pr)3.177 E .677
+(ogrammable Completion)-.18 F F0(abo)3.177 E -.15(ve)-.15 G(\)).15 E
+(are enabled.)184 396 Q(This option is enabled by def)5 E(ault.)-.1 E F1
+(pr)144 408 Q(ogcomp_alias)-.18 E F0 2.124
+(If set, and programmable completion is enabled,)184 420 R F1(bash)4.624
+E F0 2.124(treats a command name that)4.624 F(doesn')184 432 Q 3.288(th)
+-.18 G -2.25 -.2(av e)-3.288 H(an)3.488 E 3.288(yc)-.15 G .789
+(ompletions as a possible alias and attempts alias e)-3.288 F .789
+(xpansion. If it has)-.15 F 1.473(an alias,)184 444 R F1(bash)3.973 E F0
+1.473(attempts programmable completion using the command w)3.973 F 1.473
+(ord resulting)-.1 F(from the e)184 456 Q(xpanded alias.)-.15 E F1(pr)
+144 468 Q(omptv)-.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)
+184 480 R 1.448(go parameter e)-.18 F 1.448
+(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184 492 S
+.171(pansion, and quote remo).15 F -.25(va)-.15 G 2.67(la).25 G .17
+(fter being e)-2.67 F .17(xpanded as described in)-.15 F F2(PR)2.67 E
+(OMPTING)-.27 E F0(abo)2.42 E -.15(ve)-.15 G(.).15 E
+(This option is enabled by def)184 504 Q(ault.)-.1 E F1 -.18(re)144 516
+S(stricted_shell).18 E F0 1.069
+(The shell sets this option if it is started in restricted mode \(see)
+184 528 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 540 Q 2.86
+(w\). The)-.25 F -.25(va)2.86 G .36(lue may not be changed.).25 F .36
+(This is not reset when the startup \214les are e)5.36 F -.15(xe)-.15 G
+(-).15 E(cuted, allo)184 552 Q(wing the startup \214les to disco)-.25 E
+-.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E
+F1(shift_v)144 564 Q(erbose)-.1 E F0 .501(If set, the)184 576 R F1
+(shift)3.001 E F0 -.2(bu)3.001 G .501
+(iltin prints an error message when the shift count e).2 F .502
+(xceeds the number)-.15 F(of positional parameters.)184 588 Q F1(sour)
+144 600 Q(cepath)-.18 E F0 .771(If set, the)184 612 R F1(sour)3.271 E
+(ce)-.18 E F0(\()3.271 E F1(.)A F0 3.271(\)b)C .771(uiltin uses the v)
+-3.471 F .771(alue of)-.25 F F2 -.666(PA)3.27 G(TH)-.189 E F0 .77
+(to \214nd the directory containing the)3.02 F(\214le supplied as an ar)
+184 624 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E(ault.)
+-.1 E F1(xpg_echo)144 636 Q F0(If set, the)184 648 Q F1(echo)2.5 E F0
+-.2(bu)2.5 G(iltin e).2 E(xpands backslash-escape sequences by def)-.15
+E(ault.)-.1 E F1(suspend)108 664.8 Q F0([)2.5 E F1<ad66>A F0(])A 1.001
+(Suspend the e)144 676.8 R -.15(xe)-.15 G 1.001
+(cution of this shell until it recei).15 F -.15(ve)-.25 G 3.501(sa).15 G
+F2(SIGCONT)A F0 3.502(signal. A)3.252 F 1.002(login shell cannot be)
+3.502 F .023(suspended; the)144 688.8 R F1<ad66>2.523 E F0 .023
+(option can be used to o)2.523 F -.15(ve)-.15 G .022
+(rride this and force the suspension.).15 F .022(The return status is)
+5.022 F 2.5(0u)144 700.8 S(nless the shell is a login shell and)-2.5 E
+F1<ad66>2.5 E F0(is not supplied, or if job control is not enabled.)2.5
+E(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(21)198.725 E 0 Cg EP
+%%Page: 22 22
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(test)108 84 Q/F2 10
+/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([)108 96 Q F2 -.2(ex)2.5 G
+(pr).2 E F1(])2.5 E F0 .877(Return a status of 0 \(true\) or 1 \(f)144
+96 R .878(alse\) depending on the e)-.1 F -.25(va)-.25 G .878
+(luation of the conditional e).25 F(xpression)-.15 E F2 -.2(ex)144 108 S
+(pr).2 E F0 5.53(.E).73 G .53
+(ach operator and operand must be a separate ar)-5.53 F 3.03
+(gument. Expressions)-.18 F .53(are composed of the)3.03 F 3.079
+(primaries described abo)144 120 R 3.379 -.15(ve u)-.15 H(nder).15 E/F3
+9/Times-Bold@0 SF(CONDITION)5.579 E 3.079(AL EXPRESSIONS)-.18 F/F4 9
+/Times-Roman@0 SF(.)A F1(test)7.579 E F0 3.08(does not accept an)5.58 F
+(y)-.15 E(options, nor does it accept and ignore an ar)144 132 Q
+(gument of)-.18 E F1<adad>2.5 E F0(as signifying the end of options.)2.5
+E .786(Expressions may be combined using the follo)144 150 R .785
+(wing operators, listed in decreasing order of prece-)-.25 F 3.411
+(dence. The)144 162 R -.25(eva)3.411 G .911
+(luation depends on the number of ar).25 F .912(guments; see belo)-.18 F
+4.712 -.65(w. O)-.25 H .912(perator precedence is).65 F
+(used when there are \214v)144 174 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G(ore ar)
+-2.5 E(guments.)-.18 E F1(!)144 186 Q F2 -.2(ex)2.5 G(pr).2 E F0 -.35
+(Tr)180 186 S(ue if).35 E F2 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.)
+-.1 E F1(\()144 198 Q F2 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26
+(Returns the v)180 198 R .26(alue of)-.25 F F2 -.2(ex)2.76 G(pr).2 E F0
+5.26(.T)C .26(his may be used to o)-5.26 F -.15(ve)-.15 G .26
+(rride the normal precedence of opera-).15 F(tors.)180 210 Q F2 -.2(ex)
+144 222 S(pr1).2 E F0<ad>2.5 E F1(a)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35
+(Tr)180 234 S(ue if both).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F2
+-.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F2 -.2(ex)144 246 S(pr1).2 E
+F0<ad>2.5 E F1(o)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 258 S
+(ue if either).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F2 -.2(ex)2.5 G
+(pr2).2 E F0(is true.)2.52 E F1(test)144 274.8 Q F0(and)2.5 E F1([)2.5 E
+F0 -.25(eva)2.5 G(luate conditional e).25 E
+(xpressions using a set of rules based on the number of ar)-.15 E
+(guments.)-.18 E 2.5(0a)144 292.8 S -.18(rg)-2.5 G(uments).18 E(The e)
+180 304.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 316.8 S -.18
+(rg)-2.5 G(ument).18 E(The e)180 328.8 Q
+(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18
+E 2.5(2a)144 340.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
+180 352.8 R .37(gument is)-.18 F F1(!)2.87 E F0 2.87(,t)C .37(he e)-2.87
+F .37(xpression is true if and only if the second ar)-.15 F .37
+(gument is null.)-.18 F .38(If the \214rst ar)180 364.8 R .38
+(gument is one of the unary conditional operators listed abo)-.18 F .679
+-.15(ve u)-.15 H(nder).15 E F3(CONDI-)2.879 E(TION)180 376.8 Q .552
+(AL EXPRESSIONS)-.18 F F4(,)A F0 .552(the e)2.802 F .552
+(xpression is true if the unary test is true.)-.15 F .552
+(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 388.8 Q
+(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E
+(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 400.8 S -.18(rg)-2.5 G
+(uments).18 E .236(The follo)180 412.8 R .236
+(wing conditions are applied in the order listed.)-.25 F .236
+(If the second ar)5.236 F .236(gument is one of)-.18 F .855
+(the binary conditional operators listed abo)180 424.8 R 1.155 -.15
+(ve u)-.15 H(nder).15 E F3(CONDITION)3.355 E .855(AL EXPRESSIONS)-.18 F
+F4(,)A F0(the)3.105 E .579(result of the e)180 436.8 R .578(xpression i\
+s the result of the binary test using the \214rst and third ar)-.15 F
+(guments)-.18 E 1.332(as operands.)180 448.8 R(The)6.332 E F1<ad61>3.832
+E F0(and)3.832 E F1<ad6f>3.832 E F0 1.333
+(operators are considered binary operators when there are)3.832 F .558
+(three ar)180 460.8 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058
+F .558(gument is)-.18 F F1(!)3.058 E F0 3.058(,t)C .558(he v)-3.058 F
+.558(alue is the ne)-.25 F -.05(ga)-.15 G .558(tion of the tw).05 F
+(o-ar)-.1 E(gument)-.18 E .52(test using the second and third ar)180
+472.8 R 3.021(guments. If)-.18 F .521(the \214rst ar)3.021 F .521
+(gument is e)-.18 F(xactly)-.15 E F1(\()3.021 E F0 .521(and the third)
+3.021 F(ar)180 484.8 Q .485(gument is e)-.18 F(xactly)-.15 E F1(\))2.985
+E F0 2.985(,t)C .485(he result is the one-ar)-2.985 F .485
+(gument test of the second ar)-.18 F 2.985(gument. Other)-.18 F(-)-.2 E
+(wise, the e)180 496.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144
+508.8 S -.18(rg)-2.5 G(uments).18 E .384(If the \214rst ar)180 520.8 R
+.384(gument is)-.18 F F1(!)2.884 E F0 2.885(,t)C .385
+(he result is the ne)-2.885 F -.05(ga)-.15 G .385(tion of the three-ar)
+.05 F .385(gument e)-.18 F .385(xpression com-)-.15 F 1.648
+(posed of the remaining ar)180 532.8 R 4.147(guments. Otherwise,)-.18 F
+1.647(the e)4.147 F 1.647(xpression is parsed and e)-.15 F -.25(va)-.25
+G(luated).25 E(according to precedence using the rules listed abo)180
+544.8 Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 556.8 S 2.5(rm)-2.5 G(ore ar)
+-2.5 E(guments)-.18 E 1.635(The e)180 568.8 R 1.635
+(xpression is parsed and e)-.15 F -.25(va)-.25 G 1.635
+(luated according to precedence using the rules listed).25 F(abo)180
+580.8 Q -.15(ve)-.15 G(.).15 E(When used with)144 598.8 Q F1(test)2.5 E
+F0(or)2.5 E F1([)2.5 E F0 2.5(,t)C(he)-2.5 E F1(<)2.5 E F0(and)2.5 E F1
+(>)2.5 E F0(operators sort le)2.5 E
+(xicographically using ASCII ordering.)-.15 E F1(times)108 615.6 Q F0
+1.229(Print the accumulated user and system times for the shell and for\
+ processes run from the shell.)144 615.6 R(The return status is 0.)144
+627.6 Q F1(trap)108 644.4 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E
+F2(ar)A(g)-.37 E F0(])A F2(sigspec)2.5 E F0(...])2.5 E .702(The command)
+144 656.4 R F2(ar)3.532 E(g)-.37 E F0 .702(is to be read and e)3.422 F
+-.15(xe)-.15 G .702(cuted when the shell recei).15 F -.15(ve)-.25 G
+3.203(ss).15 G(ignal\(s\))-3.203 E F2(sigspec)3.203 E F0 5.703(.I).31 G
+(f)-5.703 E F2(ar)3.533 E(g)-.37 E F0(is)3.423 E .609
+(absent \(and there is a single)144 668.4 R F2(sigspec)3.108 E F0 3.108
+(\)o)C(r)-3.108 E F1<ad>3.108 E F0 3.108(,e)C .608
+(ach speci\214ed signal is reset to its original disposition)-3.108 F
+.658(\(the v)144 680.4 R .658(alue it had upon entrance to the shell\).)
+-.25 F(If)5.658 E F2(ar)3.488 E(g)-.37 E F0 .659
+(is the null string the signal speci\214ed by each)3.378 F F2(sigspec)
+144.34 692.4 Q F0 .581
+(is ignored by the shell and by the commands it in)3.391 F -.2(vo)-.4 G
+-.1(ke).2 G 3.08(s. If).1 F F2(ar)3.41 E(g)-.37 E F0 .58
+(is not present and)3.3 F F1<ad70>3.08 E F0(has)3.08 E 1.214
+(been supplied, then the trap commands associated with each)144 704.4 R
+F2(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215
+F(gu-)-.18 E .86(ments are supplied or if only)144 716.4 R F1<ad70>3.36
+E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86
+(prints the list of commands associated with each)3.36 F 4.326
+(signal. The)144 728.4 R F1<ad6c>4.326 E F0 1.826(option causes the she\
+ll to print a list of signal names and their corresponding)4.326 F
+(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(22)198.725 E 0 Cg EP
+%%Page: 23 23
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E 3.126(numbers. Each)144 84 R/F1 10
+/Times-Italic@0 SF(sigspec)3.466 E F0 .625
+(is either a signal name de\214ned in <)3.436 F F1(signal.h)A F0 .625
+(>, or a signal number)B 5.625(.S)-.55 G(ignal)-5.625 E
+(names are case insensiti)144 96 Q .3 -.15(ve a)-.25 H(nd the).15 E/F2 9
+/Times-Bold@0 SF(SIG)2.5 E F0(pre\214x is optional.)2.25 E 1.648(If a)
+144 114 R F1(sigspec)4.488 E F0(is)4.458 E F2(EXIT)4.148 E F0 1.648
+(\(0\) the command)3.898 F F1(ar)4.479 E(g)-.37 E F0 1.649(is e)4.369 F
+-.15(xe)-.15 G 1.649(cuted on e).15 F 1.649(xit from the shell.)-.15 F
+1.649(If a)6.649 F F1(sigspec)4.489 E F0(is)4.459 E F2(DEB)144 126 Q(UG)
+-.09 E/F3 9/Times-Roman@0 SF(,)A F0 1.168(the command)3.418 F F1(ar)
+3.998 E(g)-.37 E F0 1.168(is e)3.888 F -.15(xe)-.15 G 1.167
+(cuted before e).15 F -.15(ve)-.25 G(ry).15 E F1 1.167(simple command)
+3.667 F F0(,)A F1(for)3.667 E F0(command,)3.667 E F1(case)3.667 E F0
+(com-)3.667 E(mand,)144 138 Q F1(select)2.646 E F0 .146(command, e)2.646
+F -.15(ve)-.25 G .146(ry arithmetic).15 F F1(for)2.646 E F0 .147
+(command, and before the \214rst command e)2.646 F -.15(xe)-.15 G .147
+(cutes in a).15 F .146(shell function \(see)144 150 R F2 .146
+(SHELL GRAMMAR)2.646 F F0(abo)2.396 E -.15(ve)-.15 G 2.646(\). Refer).15
+F .146(to the description of the)2.646 F/F4 10/Times-Bold@0 SF(extdeb)
+2.645 E(ug)-.2 E F0 .145(option to)2.645 F(the)144 162 Q F4(shopt)3.2 E
+F0 -.2(bu)3.2 G .7(iltin for details of its ef).2 F .7(fect on the)-.25
+F F4(DEB)3.2 E(UG)-.1 E F0 3.2(trap. If)3.2 F(a)3.2 E F1(sigspec)3.54 E
+F0(is)3.51 E F2(RETURN)3.2 E F3(,)A F0 .701(the com-)2.951 F(mand)144
+174 Q F1(ar)3.474 E(g)-.37 E F0 .644(is e)3.364 F -.15(xe)-.15 G .643
+(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G
+.643(cuted with the).15 F F4(.)3.143 E F0(or)3.143 E F4(sour)3.143 E(ce)
+-.18 E F0 -.2(bu)3.143 G(iltins).2 E(\214nishes e)144 186 Q -.15(xe)-.15
+G(cuting.).15 E .96(If a)144 204 R F1(sigspec)3.8 E F0(is)3.77 E F2(ERR)
+3.46 E F3(,)A F0 .96(the command)3.21 F F1(ar)3.791 E(g)-.37 E F0 .961
+(is e)3.681 F -.15(xe)-.15 G .961(cuted whene).15 F -.15(ve)-.25 G 3.461
+(rap).15 G .961(ipeline \(which may consist of a)-3.461 F .185(single s\
+imple command\), a list, or a compound command returns a non\255zero e)
+144 216 R .184(xit status, subject to)-.15 F .451(the follo)144 228 R
+.451(wing conditions.)-.25 F(The)5.451 E F2(ERR)2.951 E F0 .451
+(trap is not e)2.701 F -.15(xe)-.15 G .451(cuted if the f).15 F .452
+(ailed command is part of the com-)-.1 F .388
+(mand list immediately follo)144 240 R .388(wing a)-.25 F F4(while)2.888
+E F0(or)2.888 E F4(until)2.888 E F0 -.1(ke)2.888 G(yw)-.05 E .388
+(ord, part of the test in an)-.1 F F1(if)2.897 E F0 .387
+(statement, part)4.847 F .777(of a command e)144 252 R -.15(xe)-.15 G
+.778(cuted in a).15 F F4(&&)3.278 E F0(or)3.278 E F4(||)3.278 E F0 .778
+(list e)3.278 F .778(xcept the command follo)-.15 F .778
+(wing the \214nal)-.25 F F4(&&)3.278 E F0(or)3.278 E F4(||)3.278 E F0
+3.278(,a)C -.15(ny)-3.278 G 1.28(command in a pipeline b)144 264 R 1.28
+(ut the last, or if the command')-.2 F 3.78(sr)-.55 G 1.28(eturn v)-3.78
+F 1.28(alue is being in)-.25 F -.15(ve)-.4 G 1.28(rted using).15 F F4(!)
+3.78 E F0(.)A(These are the same conditions obe)144 276 Q(yed by the)
+-.15 E F4(err)2.5 E(exit)-.18 E F0(\()2.5 E F4<ad65>A F0 2.5(\)o)C
+(ption.)-2.5 E 1.095
+(Signals ignored upon entry to the shell cannot be trapped or reset.)144
+294 R -.35(Tr)6.095 G 1.095(apped signals that are not).35 F .662
+(being ignored are reset to their original v)144 306 R .662
+(alues in a subshell or subshell en)-.25 F .661(vironment when one is)
+-.4 F 2.5(created. The)144 318 R(return status is f)2.5 E(alse if an)-.1
+E(y)-.15 E F1(sigspec)2.84 E F0(is in)2.81 E -.25(va)-.4 G
+(lid; otherwise).25 E F4(trap)2.5 E F0(returns true.)2.5 E F4(type)108
+334.8 Q F0([)2.5 E F4(\255aftpP)A F0(])A F1(name)2.5 E F0([)2.5 E F1
+(name)A F0(...])2.5 E -.4(Wi)144 346.8 S .173
+(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 E F1(name)
+3.033 E F0 -.1(wo)2.853 G .174
+(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F
+F4<ad74>144 358.8 Q F0 .843(option is used,)3.343 F F4(type)3.343 E F0
+.843(prints a string which is one of)3.343 F F1(alias)3.343 E F0(,).27 E
+F1 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F1(function)3.343 E F0
+(,).24 E F1 -.2(bu)3.342 G(iltin).2 E F0 3.342(,o).24 G(r)-3.342 E F1
+(\214le)5.252 E F0(if)3.522 E F1(name)144.36 370.8 Q F0 .086
+(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086
+(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15
+(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F1
+(name)2.947 E F0 .087(is not)2.767 F .119
+(found, then nothing is printed, and an e)144 382.8 R .118
+(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F
+F4<ad70>2.618 E F0 .118(option is used,)2.618 F F4(type)2.618 E F0 .855
+(either returns the name of the disk \214le that w)144 394.8 R .855
+(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F1(name)3.715 E F0
+.855(were speci\214ed as a com-)3.535 F .641(mand name, or nothing if)
+144 406.8 R/F5 10/Courier@0 SF .641(type -t name)3.141 F F0 -.1(wo)3.141
+G .641(uld not return).1 F F1(\214le)3.14 E F0 5.64(.T).18 G(he)-5.64 E
+F4<ad50>3.14 E F0 .64(option forces a)3.14 F F2 -.666(PA)3.14 G(TH)-.189
+E F0 .112(search for each)144 418.8 R F1(name)2.612 E F0 2.612(,e)C -.15
+(ve)-2.862 G 2.613(ni).15 G(f)-2.613 E F5 .113(type -t name)2.613 F F0
+-.1(wo)2.613 G .113(uld not return).1 F F1(\214le)2.613 E F0 5.113(.I)
+.18 G 2.613(fac)-5.113 G .113(ommand is hashed,)-2.613 F F4<ad70>2.613 E
+F0(and)144 430.8 Q F4<ad50>3.231 E F0 .731(print the hashed v)3.231 F
+.73(alue, which is not necessarily the \214le that appears \214rst in)
+-.25 F F2 -.666(PA)3.23 G(TH)-.189 E F3(.)A F0 .73(If the)5.23 F F4
+<ad61>144 442.8 Q F0 1.748(option is used,)4.248 F F4(type)4.248 E F0
+1.748(prints all of the places that contain an e)4.248 F -.15(xe)-.15 G
+1.748(cutable named).15 F F1(name)4.249 E F0 6.749(.T).18 G(his)-6.749 E
+.744(includes aliases and functions, if and only if the)144 454.8 R F4
+<ad70>3.244 E F0 .744(option is not also used.)3.244 F .743
+(The table of hashed)5.744 F 1.223(commands is not consulted when using)
+144 466.8 R F4<ad61>3.723 E F0 6.223(.T)C(he)-6.223 E F4<ad66>3.723 E F0
+1.223(option suppresses shell function lookup, as)3.723 F .326(with the)
+144 478.8 R F4(command)2.826 E F0 -.2(bu)2.826 G(iltin.).2 E F4(type)
+5.326 E F0 .326(returns true if all of the ar)2.826 F .325
+(guments are found, f)-.18 F .325(alse if an)-.1 F 2.825(ya)-.15 G .325
+(re not)-2.825 F(found.)144 490.8 Q F4(ulimit)108 507.6 Q F0([)2.5 E F4
+(\255HSabcde\214klmnpqrstuvxPT)A F0([)2.5 E F1(limit)A F0(]])A(Pro)144
+519.6 Q .243(vides control o)-.15 F -.15(ve)-.15 G 2.743(rt).15 G .243
+(he resources a)-2.743 F -.25(va)-.2 G .244
+(ilable to the shell and to processes started by it, on systems).25 F
+.944(that allo)144 531.6 R 3.444(ws)-.25 G .944(uch control.)-3.444 F
+(The)5.944 E F4<ad48>3.444 E F0(and)3.444 E F4<ad53>3.444 E F0 .943
+(options specify that the hard or soft limit is set for the)3.444 F(gi)
+144 543.6 Q -.15(ve)-.25 G 2.708(nr).15 G 2.708(esource. A)-2.708 F .208
+(hard limit cannot be increased by a non-root user once it is set; a so\
+ft limit may)2.708 F .426(be increased up to the v)144 555.6 R .426
+(alue of the hard limit.)-.25 F .425(If neither)5.426 F F4<ad48>2.925 E
+F0(nor)2.925 E F4<ad53>2.925 E F0 .425
+(is speci\214ed, both the soft and)2.925 F .139(hard limits are set.)144
+567.6 R .139(The v)5.139 F .139(alue of)-.25 F F1(limit)2.729 E F0 .139
+(can be a number in the unit speci\214ed for the resource or one)3.319 F
+.742(of the special v)144 579.6 R(alues)-.25 E F4(hard)3.242 E F0(,)A F4
+(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F4(unlimited)3.241 E F0 3.241(,w)
+C .741(hich stand for the current hard limit, the current)-3.241 F .78
+(soft limit, and no limit, respecti)144 591.6 R -.15(ve)-.25 G(ly).15 E
+5.78(.I)-.65 G(f)-5.78 E F1(limit)3.37 E F0 .78
+(is omitted, the current v)3.96 F .78(alue of the soft limit of the)-.25
+F .499(resource is printed, unless the)144 603.6 R F4<ad48>2.999 E F0
+.499(option is gi)2.999 F -.15(ve)-.25 G 2.999(n. When).15 F .498
+(more than one resource is speci\214ed, the)2.999 F
+(limit name and unit are printed before the v)144 615.6 Q 2.5
+(alue. Other)-.25 F(options are interpreted as follo)2.5 E(ws:)-.25 E F4
+<ad61>144 627.6 Q F0(All current limits are reported)180 627.6 Q F4
+<ad62>144 639.6 Q F0(The maximum sock)180 639.6 Q(et b)-.1 E(uf)-.2 E
+(fer size)-.25 E F4<ad63>144 651.6 Q F0
+(The maximum size of core \214les created)180 651.6 Q F4<ad64>144 663.6
+Q F0(The maximum size of a process')180 663.6 Q 2.5(sd)-.55 G(ata se)
+-2.5 E(gment)-.15 E F4<ad65>144 675.6 Q F0
+(The maximum scheduling priority \("nice"\))180 675.6 Q F4<ad66>144
+687.6 Q F0
+(The maximum size of \214les written by the shell and its children)180
+687.6 Q F4<ad69>144 699.6 Q F0(The maximum number of pending signals)180
+699.6 Q F4<ad6b>144 711.6 Q F0
+(The maximum number of kqueues that may be allocated)180 711.6 Q
+(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(23)198.725 E 0 Cg EP
+%%Page: 24 24
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF<ad6c>144 84 Q F0
+(The maximum size that may be lock)180 84 Q(ed into memory)-.1 E F1
+<ad6d>144 96 Q F0(The maximum resident set size \(man)180 96 Q 2.5(ys)
+-.15 G(ystems do not honor this limit\))-2.5 E F1<ad6e>144 108 Q F0 .791
+(The maximum number of open \214le descriptors \(most systems do not al\
+lo)180 108 R 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F
+(be set\))180 120 Q F1<ad70>144 132 Q F0
+(The pipe size in 512-byte blocks \(this may not be set\))180 132 Q F1
+<ad71>144 144 Q F0(The maximum number of bytes in POSIX message queues)
+180 144 Q F1<ad72>144 156 Q F0
+(The maximum real-time scheduling priority)180 156 Q F1<ad73>144 168 Q
+F0(The maximum stack size)180 168 Q F1<ad74>144 180 Q F0
+(The maximum amount of cpu time in seconds)180 180 Q F1<ad75>144 192 Q
+F0(The maximum number of processes a)180 192 Q -.25(va)-.2 G
+(ilable to a single user).25 E F1<ad76>144 204 Q F0 .47
+(The maximum amount of virtual memory a)180 204 R -.25(va)-.2 G .47
+(ilable to the shell and, on some systems, to).25 F(its children)180 216
+Q F1<ad78>144 228 Q F0(The maximum number of \214le locks)180 228 Q F1
+<ad50>144 240 Q F0(The maximum number of pseudoterminals)180 240 Q F1
+<ad54>144 252 Q F0(The maximum number of threads)180 252 Q(If)144 268.8
+Q/F2 10/Times-Italic@0 SF(limit)3.058 E F0 .468(is gi)3.648 F -.15(ve)
+-.25 G .468(n, and the).15 F F1<ad61>2.968 E F0 .468
+(option is not used,)2.968 F F2(limit)2.968 E F0 .468(is the ne)2.968 F
+2.968(wv)-.25 G .468(alue of the speci\214ed resource.)-3.218 F(If)5.468
+E .045(no option is gi)144 280.8 R -.15(ve)-.25 G .045(n, then).15 F F1
+<ad66>2.545 E F0 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045
+(lues are in 1024-byte increments, e)1.11 F .044(xcept for)-.15 F F1
+<ad74>2.544 E F0 2.544(,w)C .044(hich is)-2.544 F 1.588(in seconds;)144
+292.8 R F1<ad70>4.088 E F0 4.089(,w)C 1.589
+(hich is in units of 512-byte blocks;)-4.089 F F1<ad50>4.089 E F0(,)A F1
+<ad54>4.089 E F0(,)A F1<ad62>4.089 E F0(,)A F1<ad6b>4.089 E F0(,)A F1
+<ad6e>4.089 E F0 4.089(,a)C(nd)-4.089 E F1<ad75>4.089 E F0 4.089(,w)C
+1.589(hich are)-4.089 F 1.476(unscaled v)144 304.8 R 1.476
+(alues; and, when in posix mode,)-.25 F F1<ad63>3.976 E F0(and)3.976 E
+F1<ad66>3.976 E F0 3.976(,w)C 1.476(hich are in 512-byte increments.)
+-3.976 F(The)6.476 E .404(return status is 0 unless an in)144 316.8 R
+-.25(va)-.4 G .404(lid option or ar).25 F .404
+(gument is supplied, or an error occurs while setting)-.18 F 2.5(an)144
+328.8 S .5 -.25(ew l)-2.5 H(imit.).25 E F1(umask)108 345.6 Q F0([)2.5 E
+F1<ad70>A F0 2.5(][)C F1<ad53>-2.5 E F0 2.5(][)C F2(mode)-2.5 E F0(])A
+.2(The user \214le-creation mask is set to)144 357.6 R F2(mode)2.7 E F0
+5.2(.I).18 G(f)-5.2 E F2(mode)3.08 E F0(be)2.88 E .2
+(gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\
+therwise it is interpreted as a symbolic mode mask similar to that acce\
+pted by)144 369.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
+381.6 Q F2(mode)3.263 E F0 .382(is omitted, the current v)3.063 F .382
+(alue of the mask is printed.)-.25 F(The)5.382 E F1<ad53>2.882 E F0 .382
+(option causes the mask to be)2.882 F .547
+(printed in symbolic form; the def)144 393.6 R .547
+(ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G
+(he)-3.047 E F1<ad70>3.047 E F0 .547(option is supplied, and)3.047 F F2
+(mode)144.38 405.6 Q F0 .552
+(is omitted, the output is in a form that may be reused as input.)3.232
+F .551(The return status is 0 if the)5.551 F(mode w)144 417.6 Q
+(as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E
+(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F1
+(unalias)108 434.4 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C F2(name)-2.5 E F0
+(...])2.5 E(Remo)144 446.4 Q 1.955 -.15(ve e)-.15 H(ach).15 E F2(name)
+4.155 E F0 1.655(from the list of de\214ned aliases.)4.155 F(If)6.655 E
+F1<ad61>4.155 E F0 1.655(is supplied, all alias de\214nitions are)4.155
+F(remo)144 458.4 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E
+(alue is true unless a supplied)-.25 E F2(name)2.86 E F0
+(is not a de\214ned alias.)2.68 E F1(unset)108 475.2 Q F0<5bad>2.5 E F1
+(fv)A F0 2.5(][)C<ad>-2.5 E F1(n)A F0 2.5(][)C F2(name)-2.5 E F0(...])
+2.5 E -.15(Fo)144 487.2 S 3.828(re).15 G(ach)-3.828 E F2(name)3.828 E F0
+3.828(,r).18 G(emo)-3.828 E 1.628 -.15(ve t)-.15 H 1.328
+(he corresponding v).15 F 1.327(ariable or function.)-.25 F 1.327
+(If the)6.327 F F1<ad76>3.827 E F0 1.327(option is gi)3.827 F -.15(ve)
+-.25 G 1.327(n, each).15 F F2(name)144.36 499.2 Q F0 1.55
+(refers to a shell v)4.23 F 1.551(ariable, and that v)-.25 F 1.551
+(ariable is remo)-.25 F -.15(ve)-.15 G 4.051(d. Read-only).15 F -.25(va)
+4.051 G 1.551(riables may not be).25 F 4.642(unset. If)144 511.2 R F1
+<ad66>4.642 E F0 2.142(is speci\214ed, each)4.642 F F2(name)5.001 E F0
+2.141(refers to a shell function, and the function de\214nition is)4.821
+F(remo)144 523.2 Q -.15(ve)-.15 G 2.537(d. If).15 F(the)2.537 E F1<ad6e>
+2.537 E F0 .037(option is supplied, and)2.537 F F2(name)2.537 E F0 .037
+(is a v)2.537 F .037(ariable with the)-.25 F F2(namer)2.537 E(ef)-.37 E
+F0(attrib)2.537 E(ute,)-.2 E F2(name)2.537 E F0(will)2.538 E .492
+(be unset rather than the v)144 535.2 R .492(ariable it references.)-.25
+F F1<ad6e>5.492 E F0 .492(has no ef)2.992 F .492(fect if the)-.25 F F1
+<ad66>2.992 E F0 .492(option is supplied.)2.992 F .492(If no)5.492 F .22
+(options are supplied, each)144 547.2 R F2(name)2.72 E F0 .22
+(refers to a v)2.72 F .221(ariable; if there is no v)-.25 F .221
+(ariable by that name, an)-.25 F 2.721(yf)-.15 G(unc-)-2.721 E 1.189
+(tion with that name is unset.)144 559.2 R 1.189(Each unset v)6.189 F
+1.189(ariable or function is remo)-.25 F -.15(ve)-.15 G 3.688(df).15 G
+1.188(rom the en)-3.688 F(vironment)-.4 E 3.205
+(passed to subsequent commands.)144 571.2 R 3.206(If an)8.206 F 5.706
+(yo)-.15 G(f)-5.706 E/F3 9/Times-Bold@0 SF(COMP_W)5.706 E(ORDBREAKS)-.09
+E/F4 9/Times-Roman@0 SF(,)A F3(RANDOM)5.456 E F4(,)A F3(SECONDS)5.456 E
+F4(,)A F3(LINENO)144 583.2 Q F4(,)A F3(HISTCMD)4.348 E F4(,)A F3(FUNCN)
+4.348 E(AME)-.18 E F4(,)A F3(GR)4.348 E(OUPS)-.27 E F4(,)A F0(or)4.348 E
+F3(DIRST)4.598 E -.495(AC)-.81 G(K).495 E F0 2.098(are unset, the)4.348
+F 4.597(yl)-.15 G 2.097(ose their special)-4.597 F(properties, e)144
+595.2 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he)-2.5 E 2.5(ya)-.15
+G(re subsequently reset.)-2.5 E(The e)5 E(xit status is true unless a)
+-.15 E F2(name)2.86 E F0(is readonly)2.68 E(.)-.65 E F1(wait)108 612 Q
+F0([)2.5 E F1(\255fn)A F0 2.5(][)C F2(id ...)-2.5 E F0(])A -.8(Wa)144
+624 S .659(it for each speci\214ed child process and return its termina\
+tion status.).8 F(Each)5.659 E F2(id)3.169 E F0 .659(may be a process)
+3.929 F .009(ID or a job speci\214cation; if a job spec is gi)144 636 R
+-.15(ve)-.25 G .008(n, all processes in that job').15 F 2.508(sp)-.55 G
+.008(ipeline are w)-2.508 F .008(aited for)-.1 F 5.008(.I)-.55 G(f)
+-5.008 E F2(id)144.01 648 Q F0 .521(is not gi)3.791 F -.15(ve)-.25 G
+.521(n, all currently acti).15 F .821 -.15(ve c)-.25 H .521
+(hild processes are w).15 F .521(aited for)-.1 F 3.021(,a)-.4 G .521
+(nd the return status is zero.)-3.021 F(If)5.522 E(the)144 660 Q F1
+<ad6e>3.057 E F0 .557(option is supplied,)3.057 F F1(wait)3.057 E F0 -.1
+(wa)3.057 G .557(its for an).1 F 3.057(yj)-.15 G .557
+(ob to terminate and returns its e)-3.057 F .557(xit status.)-.15 F .556
+(If the)5.556 F F1<ad66>3.056 E F0 .586
+(option is supplied, and job control is enabled,)144 672 R F1(wait)3.086
+E F0(forces)3.086 E F2(id)3.086 E F0 .587
+(to terminate before returning its sta-)3.086 F .756
+(tus, instead of returning when it changes status.)144 684 R(If)5.756 E
+F2(id)3.266 E F0 .755(speci\214es a non-e)4.026 F .755
+(xistent process or job, the)-.15 F .365(return status is 127.)144 696 R
+.365(Otherwise, the return status is the e)5.365 F .365
+(xit status of the last process or job w)-.15 F(aited)-.1 E(for)144 708
+Q(.)-.55 E(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(24)198.725 E 0 Cg
+EP
+%%Page: 25 25
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
+(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
+E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10.95/Times-Bold@0 SF(SEE ALSO)72 84 Q
+F0(bash\(1\), sh\(1\))108 96 Q(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565
+E(25)198.725 E 0 Cg EP
+%%Trailer
+end
+%%EOF
diff --git a/doc/fdl.texi b/doc/fdl.texi
new file mode 100644
index 0000000..8805f1a
--- /dev/null
+++ b/doc/fdl.texi
@@ -0,0 +1,506 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+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:
+
+@enumerate A
+@item
+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.
+
+@item
+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.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+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.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+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
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+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:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/doc/fdl.txt b/doc/fdl.txt
new file mode 100644
index 0000000..2f7e03c
--- /dev/null
+++ b/doc/fdl.txt
@@ -0,0 +1,451 @@
+
+ GNU Free Documentation License
+ Version 1.3, 3 November 2008
+
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The "Document", below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as "you". You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of
+the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".) To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no
+other conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to
+give them a chance to provide you with an updated version of the
+Document.
+
+
+4. MODIFICATIONS
+
+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:
+
+A. 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.
+B. 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.
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. 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.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. 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.
+J. 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.
+K. 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.
+L. 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.
+M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other
+documents released under this License, and replace the individual
+copies of this License in the various documents with a single copy
+that is included in the collection, provided that you follow the rules
+of this License for verbatim copying of each of the documents in all
+other respects.
+
+You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the
+GNU Free Documentation License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+"Massive Multiauthor Collaboration" (or "MMC") contained in the site
+means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in
+part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole or
+in part into the MMC, (1) had no cover texts or invariant sections, and
+(2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/doc/htmlpost.sh b/doc/htmlpost.sh
new file mode 100755
index 0000000..51241b1
--- /dev/null
+++ b/doc/htmlpost.sh
@@ -0,0 +1,19 @@
+#! /bin/sh
+#
+# Some of these should really be done by man2html
+#
+# The ~/xxx links don't really work -- netscape doesn't expand the home
+# directory of the user running navigator
+#
+
+sed -e 's|<B>gnu.bash.bug</B>|<A HREF="news:gnu.bash.bug">gnu.bash.bug</A>|g' \
+ -e 's|<I>/bin/bash</I>|<A HREF="file:/bin/bash"><I>/bin/bash</I></A>|g' \
+ -e 's|<I>/etc/profile</I>|<A HREF="file:/etc/profile"><I>/etc/profile</I></A>|g' \
+ -e 's|<I>~/.bash_profile</I>|<A HREF="file:~/.bash_profile"><I>~/.bash_profile</I></A>|g' \
+ -e 's|<I>~/.bash_login</I>|<A HREF="file:~/.bash_login"><I>~/.bash_login</I></A>|g' \
+ -e 's|<I>~/.profile</I>|<A HREF="file:~/.profile"><I>~/.profile</I></A>|g' \
+ -e 's|<I>~/.bashrc</I>|<A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>|g' \
+ -e 's|<I>~/.bash_logout</I>|<A HREF="file:~/.bash_logout"><I>~/.bash_logout</I></A>|g' \
+ -e 's|<I>~/.bash_history</I>|<A HREF="file:~/.bash_history"><I>~/.bash_history</I></A>|g' \
+ -e 's|<I>~/.inputrc</I>|<A HREF="file:~/.inputrc"><I>~/.inputrc</I></A>|g' \
+ -e 's|<I>/etc/inputrc</I>|<A HREF="file:/etc/inputrc"><I>/etc/inputrc</I></A>|g'
diff --git a/doc/infopost.sh b/doc/infopost.sh
new file mode 100755
index 0000000..85c49b4
--- /dev/null
+++ b/doc/infopost.sh
@@ -0,0 +1,8 @@
+#! /bin/sh
+#
+# Some of these should really be done by options to makeinfo or by
+# using @setfilename, but this way we can have both bashref.info and
+# bash.info (for installing)
+#
+
+sed -e 's|bashref.info|bash.info|g'
diff --git a/doc/rbash.0 b/doc/rbash.0
new file mode 100644
index 0000000..9becaa4
--- /dev/null
+++ b/doc/rbash.0
@@ -0,0 +1,59 @@
+RBASH(1) General Commands Manual RBASH(1)
+
+
+
+NNAAMMEE
+ rbash - restricted bash, see bbaasshh(1)
+
+RREESSTTRRIICCTTEEDD SSHHEELLLL
+ If bbaasshh is started with the name rrbbaasshh, or the --rr 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. It
+ behaves identically to bbaasshh with the exception that the following are
+ disallowed or not performed:
+
+ +o changing directories with ccdd
+
+ +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, EENNVV, or BBAASSHH__EENNVV
+
+ +o specifying command names containing //
+
+ +o specifying a filename containing a // as an argument to the ..
+ builtin command
+
+ +o specifying a filename containing a slash as an argument to the
+ --pp option to the hhaasshh builtin command
+
+ +o importing function definitions from the shell environment at
+ startup
+
+ +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at
+ startup
+
+ +o redirecting output using the >, >|, <>, >&, &>, and >> redirect-
+ ion operators
+
+ +o using the eexxeecc builtin command to replace the shell with another
+ command
+
+ +o adding or deleting builtin commands with the --ff and --dd options
+ to the eennaabbllee builtin command
+
+ +o using the eennaabbllee builtin command to enable disabled shell
+ builtins
+
+ +o specifying the --pp option to the ccoommmmaanndd builtin command
+
+ +o turning off restricted mode with sseett ++rr or sseett ++oo rreessttrriicctteedd.
+
+ These restrictions are enforced after any startup files are read.
+
+ When a command that is found to be a shell script is executed, rrbbaasshh
+ turns off any restrictions in the shell spawned to execute the script.
+
+SSEEEE AALLSSOO
+ bash(1)
+
+
+
+GNU Bash-4.0 2004 Apr 20 RBASH(1)
diff --git a/doc/rbash.1 b/doc/rbash.1
new file mode 100644
index 0000000..56e38fd
--- /dev/null
+++ b/doc/rbash.1
@@ -0,0 +1,8 @@
+.TH RBASH 1 "2004 Apr 20" "GNU Bash-4.0"
+.SH NAME
+rbash \- restricted bash, see \fBbash\fR(1)
+.SH RESTRICTED SHELL
+.nr zY 1
+.so bash.1
+.SH SEE ALSO
+bash(1)
diff --git a/doc/rbash.ps b/doc/rbash.ps
new file mode 100644
index 0000000..885aef0
--- /dev/null
+++ b/doc/rbash.ps
@@ -0,0 +1,286 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.22.3
+%%CreationDate: Wed Jan 2 09:14:38 2019
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%DocumentSuppliedResources: procset grops 1.22 3
+%%Pages: 1
+%%PageOrder: Ascend
+%%DocumentMedia: Default 612 792 0 () ()
+%%Orientation: Portrait
+%%EndComments
+%%BeginDefaults
+%%PageMedia: Default
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset grops 1.22 3
+%!PS-Adobe-3.0 Resource-ProcSet
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+DEFS/BPhook known{DEFS begin BPhook end}if
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/setcmykcolor where{
+pop
+/Fk{
+setcmykcolor fill
+}bind def
+}if
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/setcmykcolor where{
+pop
+/Ck/setcmykcolor load def
+}if
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne
+2 index/UniqueID ne
+and
+{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+/setpagedevice{}def
+mark
+}bind def
+/PEND{
+cleartomark
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%%BeginFeature: *PageSize Default
+<< /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice
+%%EndFeature
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(RB)72 48 Q 130.47(ASH\(1\) General)-.35 F
+(Commands Manual)2.5 E(RB)132.97 E(ASH\(1\))-.35 E/F1 10.95/Times-Bold@0
+SF -.219(NA)72 84 S(ME).219 E F0(rbash \255 restricted bash, see)108 96
+Q/F2 10/Times-Bold@0 SF(bash)2.5 E F0(\(1\))A F1(RESTRICTED SHELL)72
+112.8 Q F0(If)108 124.8 Q F2(bash)4.397 E F0 1.897
+(is started with the name)4.397 F F2(rbash)4.397 E F0 4.397(,o)C 4.397
+(rt)-4.397 G(he)-4.397 E F2<ad72>4.397 E F0 1.896
+(option is supplied at in)4.397 F -.2(vo)-.4 G 1.896
+(cation, the shell becomes).2 F 3.445(restricted. A)108 136.8 R .945
+(restricted shell is used to set up an en)3.445 F .946
+(vironment more controlled than the standard shell.)-.4 F(It)5.946 E
+(beha)108 148.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F2
+(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E
+(wing are disallo)-.25 E(wed or not performed:)-.25 E<83>108 165.6 Q
+(changing directories with)144 165.6 Q F2(cd)2.5 E F0<83>108 182.4 Q
+(setting or unsetting the v)144 182.4 Q(alues of)-.25 E/F3 9
+/Times-Bold@0 SF(SHELL)2.5 E/F4 9/Times-Roman@0 SF(,)A F3 -.666(PA)2.25
+G(TH)-.189 E F4(,)A F3(ENV)2.25 E F4(,)A F0(or)2.25 E F3 -.27(BA)2.5 G
+(SH_ENV).27 E F0<83>108 199.2 Q(specifying command names containing)144
+199.2 Q F2(/)2.5 E F0<83>108 216 Q(specifying a \214lename containing a)
+144 216 Q F2(/)2.5 E F0(as an ar)2.5 E(gument to the)-.18 E F2(.)2.5 E
+F0 -.2(bu)5 G(iltin command).2 E<83>108 232.8 Q .45
+(specifying a \214lename containing a slash as an ar)144 232.8 R .449
+(gument to the)-.18 F F2<ad70>2.949 E F0 .449(option to the)2.949 F F2
+(hash)2.949 E F0 -.2(bu)2.949 G .449(iltin com-).2 F(mand)144 244.8 Q
+<83>108 261.6 Q(importing function de\214nitions from the shell en)144
+261.6 Q(vironment at startup)-.4 E<83>108 278.4 Q(parsing the v)144
+278.4 Q(alue of)-.25 E F3(SHELLOPTS)2.5 E F0(from the shell en)2.25 E
+(vironment at startup)-.4 E<83>108 295.2 Q(redirecting output using the\
+ >, >|, <>, >&, &>, and >> redirection operators)144 295.2 Q<83>108 312
+Q(using the)144 312 Q F2(exec)2.5 E F0 -.2(bu)2.5 G
+(iltin command to replace the shell with another command).2 E<83>108
+328.8 Q(adding or deleting b)144 328.8 Q(uiltin commands with the)-.2 E
+F2<ad66>2.5 E F0(and)2.5 E F2<ad64>2.5 E F0(options to the)2.5 E F2
+(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 345.6 Q
+(using the)144 345.6 Q F2(enable)2.5 E F0 -.2(bu)2.5 G
+(iltin command to enable disabled shell b).2 E(uiltins)-.2 E<83>108
+362.4 Q(specifying the)144 362.4 Q F2<ad70>2.5 E F0(option to the)2.5 E
+F2(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 379.2 Q
+(turning of)144 379.2 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F2
+(set +r)2.5 E F0(or)2.5 E F2(set +o r)2.5 E(estricted)-.18 E F0(.)A
+(These restrictions are enforced after an)108 396 Q 2.5(ys)-.15 G
+(tartup \214les are read.)-2.5 E .429
+(When a command that is found to be a shell script is e)108 412.8 R -.15
+(xe)-.15 G(cuted,).15 E F2(rbash)2.929 E F0 .429(turns of)2.929 F 2.929
+(fa)-.25 G .729 -.15(ny r)-2.929 H .429(estrictions in the shell).15 F
+(spa)108 424.8 Q(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E
+F1(SEE ALSO)72 441.6 Q F0(bash\(1\))108 453.6 Q(GNU Bash-4.0)72 768 Q
+(2004 Apr 20)148.735 E(1)203.725 E 0 Cg EP
+%%Trailer
+end
+%%EOF
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
new file mode 100644
index 0000000..d494cce
--- /dev/null
+++ b/doc/texinfo.tex
@@ -0,0 +1,11045 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2015-11-22.14}
+%
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
+% Free Software Foundation, Inc.
+%
+% This texinfo.tex file 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.
+%
+% This texinfo.tex file 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, see <http://www.gnu.org/licenses/>.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. This Exception is an additional permission under section 7
+% of the GNU General Public License, version 3 ("GPLv3").
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+% http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page)
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexraggedright=\raggedright
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexsp=\sp
+\let\ptexstar=\*
+\let\ptexsup=\sup
+\let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putworderror\undefined \gdef\putworderror{error}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% sometimes characters are active, so we need control sequences.
+\chardef\ampChar = `\&
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dashChar = `\-
+\chardef\dotChar = `\.
+\chardef\exclamChar= `\!
+\chardef\hashChar = `\#
+\chardef\lquoteChar= `\`
+\chardef\questChar = `\?
+\chardef\rquoteChar= `\'
+\chardef\semiChar = `\;
+\chardef\slashChar = `\/
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
+% aren't perfect, it's not the end of the world, being an error message,
+% after all.
+%
+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
+\def\doerrormsg#1{\errmessage{#1}}
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% Output routine
+%
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page. The solution is
+% described on page 260 of The TeXbook. It involves outputting two
+% marks for the sectioning macros, one before the section break, and
+% one after. I won't pretend I can describe this better than DEK...
+%
+\def\domark{%
+ \toks0=\expandafter{\lastchapterdefs}%
+ \toks2=\expandafter{\lastsectiondefs}%
+ \toks4=\expandafter{\prevchapterdefs}%
+ \toks6=\expandafter{\prevsectiondefs}%
+ \toks8=\expandafter{\lastcolordefs}%
+ \mark{%
+ \the\toks0 \the\toks2 % 0: top marks (\last...)
+ \noexpand\or \the\toks4 \the\toks6 % 1: bottom marks (default, \prev...)
+ \noexpand\else \the\toks8 % 2: color marks
+ }%
+}
+
+% \gettopheadingmarks, \getbottomheadingmarks - extract needed part of mark.
+%
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+ \ifcase0\topmark\fi
+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\topmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\lastchapterdefs{}
+\def\lastsectiondefs{}
+\def\lastsection{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\lastcolordefs{}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% Main output routine.
+%
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument.
+% \shipout a vbox for a single page, adding an optional header, footer,
+% cropmarks, and footnote. This also causes index entries for this page
+% to be written to the auxiliary files.
+%
+\def\onepageout#1{%
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ % Common context changes for both heading and footing.
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars}
+ %
+ % Retrieve the information for the headings from the marks in the page,
+ % and call Plain TeX's \makeheadline and \makefootline, which use the
+ % values in \headline and \footline.
+ %
+ % This is used to check if we are on the first page of a chapter.
+ \ifcase0\topmark\fi
+ \ifx\thischapter\empty
+ % See comment for \gettopheadingmarks
+ \ifcase0\firstmark\fi
+ \let\curchaptername\thischaptername
+ \ifcase1\firstmark\fi
+ \let\prevchaptername\thischaptername
+ \else
+ \let\curchaptername\thischaptername
+ \ifcase1\topmark\fi
+ \let\prevchaptername\thischaptername
+ \fi
+ %
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+ %
+ \ifx\curchaptername\prevchaptername
+ \let\thischapterheading\thischapter
+ \else
+ % \thischapterheading is the same as \thischapter except it is blank
+ % for the first page of a chapter. This is to prevent the chapter name
+ % being shown twice.
+ \def\thischapterheading{}%
+ \fi
+ %
+ \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
+ \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
+ %
+ {%
+ % Set context for writing to auxiliary files like index files.
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \indexdummies % don't expand commands in the output.
+ \normalturnoffactive % \ in index entries must not stay \, e.g., if
+ % the page break happens to be in the middle of an example.
+ % We don't want .vr (or whatever) entries like this:
+ % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}}
+ % "\acronym" won't work when it's read back in;
+ % it needs to be
+ % {\code {{\backslashcurfont }acronym}
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
+ \ifcropmarks \vbox to \outervsize\bgroup
+ \hsize = \outerhsize
+ \vskip-\topandbottommargin
+ \vtop to0pt{%
+ \line{\ewtop\hfil\ewtop}%
+ \nointerlineskip
+ \line{%
+ \vbox{\moveleft\cornerthick\nstop}%
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}%
+ }%
+ \vss}%
+ \vskip\topandbottommargin
+ \line\bgroup
+ \hfil % center the page within the outer (page) hsize.
+ \ifodd\pageno\hskip\bindingoffset\fi
+ \vbox\bgroup
+ \fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingyyy.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 24pt
+ \unvbox\footlinebox
+ \fi
+ %
+ \ifcropmarks
+ \egroup % end of \vbox\bgroup
+ \hfil\egroup % end of (centering) \line\bgroup
+ \vskip\topandbottommargin plus1fill minus1fill
+ \boxmaxdepth = \cornerthick
+ \vbox to0pt{\vss
+ \line{%
+ \vbox{\moveleft\cornerthick\nsbot}%
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}%
+ }%
+ \nointerlineskip
+ \line{\ewbot\hfil\ewbot}%
+ }%
+ \egroup % \vbox from first cropmarks clause
+ \fi
+ }% end of \shipout\vbox
+ }% end of group with \indexdummies
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+% Main part of page, including any footnotes
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1\relax \unvbox#1\relax
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+
+% Argument parsing
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+% For example, \def\foo{\parsearg\fooxxx}.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\argtorun{#2}%
+ \begingroup
+ \obeylines
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ \argremovecomment #1\comment\ArgTerm%
+ }%
+}
+
+% First remove any @comment, then any @c comment. Also remove a @texinfoc
+% comment (see \scanmacro for details). Pass the result on to \argcheckspaces.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm}
+\def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+% @end itemize @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+
+% \parseargdef - define a command taking an argument on the line
+%
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+ \obeyspaces
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
+ \else
+ \badenverr
+ \fi
+}
+
+% Environment mismatch, #1 expected:
+\def\badenverr{%
+ \errhelp = \EMsimple
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+ \ifx#1\empty
+ outside of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
+}
+
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal.
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+ \def\temp{#1}%
+ \ifx\temp\onword \plainfrenchspacing
+ \else\ifx\temp\offword \plainnonfrenchspacing
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
+ \fi\fi
+}
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ \startsavinginserts
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ \addgroupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+
+\def\addgroupbox{
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\pageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+}
+
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'. Not documented, written for gawk manual.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change). This command
+% is not documented, not supported, and doesn't work.
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
+
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable % we want to expand any @value in FILE.
+ \turnoffactive % and allow special characters in the expansion
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @include of #1^^J}%
+ \edef\temp{\noexpand\input #1 }%
+ %
+ % This trickery is to read FILE outside of a group, in case it makes
+ % definitions, etc.
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+}
+
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+%
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\centersub\centerH
+ \else
+ \let\centersub\centerV
+ \fi
+ \centersub{\hfil \ignorespaces#1\unskip \hfil}%
+ \let\centersub\relax % don't let the definition persist, just in case
+}
+\def\centerH#1{{%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+}}
+%
+\newcount\centerpenalty
+\def\centerV#1{%
+ % The idea here is the same as in \startdefun, \cartouche, etc.: if
+ % @center is the first thing after a section heading, we need to wipe
+ % out the negative parskip inserted by \sectionheading, but still
+ % prevent a page break here.
+ \centerpenalty = \lastpenalty
+ \ifnum\centerpenalty>10000 \vskip\parskip \fi
+ \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
+ \line{\kern\leftskip #1\kern\rightskip}%
+}
+
+% @sp n outputs n lines of vertical space
+%
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+%
+\def\comment{\begingroup \catcode`\^^M=\active%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other\commentxxx}%
+
+{\catcode`\^^M=\active%
+\gdef\commentxxx#1^^M{\endgroup%
+\futurelet\nexttoken\commentxxxx}%
+\gdef\commentxxxx{\ifx\nexttoken\aftermacro\expandafter\comment\fi}%
+}
+
+\def\c{\begingroup \catcode`\^^M=\active%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\cxxx}
+{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
+% See comment in \scanmacro about why the definitions of @c and @comment differ
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
+
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent {\restorefirstparagraphindent \indent}%
+ \gdef\noindent{\restorefirstparagraphindent \noindent}%
+ \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
+}
+%
+\gdef\restorefirstparagraphindent{%
+ \global\let\indent = \ptexindent
+ \global\let\noindent = \ptexnoindent
+ \global\everypar = {}%
+}
+
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% @setfilename INFO-FILENAME - ignored
+\let\setfilename=\comment
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newbox\boxB
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as being undefined.
+\ifx\pdfoutput\thisisundefined
+\else
+ \ifx\pdfoutput\relax
+ \else
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
+ \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places. Thus, we have to
+% double any backslashes. Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e. Not good.
+%
+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+% related messages. The final outcome is that it is up to the TeX user
+% to double the backslashes and otherwise make the string valid, so
+% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to
+% do this reliably, so we use it.
+
+% #1 is a control sequence in which to do the replacements,
+% which we \xdef.
+\def\txiescapepdf#1{%
+ \ifx\pdfescapestring\thisisundefined
+ % No primitive available; should we give a warning or log?
+ % Many times it won't matter.
+ \else
+ % The expandable \pdfescapestring primitive escapes parentheses,
+ % backslashes, and other special chars.
+ \xdef#1{\pdfescapestring{#1}}%
+ \fi
+}
+
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found. (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+ %
+ % Color manipulation macros using ideas from pdfcolor.tex,
+ % except using rgb instead of cmyk; the latter is said to render as a
+ % very dark gray on-screen and a very dark halftone in print, instead
+ % of actual black. The dark red here is dark enough to print on paper as
+ % nearly black, but still distinguishable for online viewing. We use
+ % black by default, though.
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ % k sets the color for filling (usual text, etc.);
+ % K sets the color for stroking (thin rules, e.g., normal _'s).
+ \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\lastcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ %
+ \pdfcatalog{/PageMode /UseOutlines}
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\dopdfimage#1#2#3{%
+ \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\pdfimgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \else \gdef\pdfimgext{JPG}%
+ \fi
+ \else \gdef\pdfimgext{jpeg}%
+ \fi
+ \else \gdef\pdfimgext{jpg}%
+ \fi
+ \else \gdef\pdfimgext{png}%
+ \fi
+ \else \gdef\pdfimgext{PDF}%
+ \fi
+ \else \gdef\pdfimgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ % without \immediate, ancient pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifdim \wd0 >0pt width \pdfimagewidth \fi
+ \ifdim \wd2 >0pt height \pdfimageheight \fi
+ \ifnum\pdftexversion<13
+ #1.\pdfimgext
+ \else
+ {#1.\pdfimgext}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ %
+ \def\pdfmkdest#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \turnoffactive
+ \makevalueexpandable
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }}
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}
+ %
+ % by default, use black for everything.
+ \def\urlcolor{\rgbBlack}
+ \def\linkcolor{\rgbBlack}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text, which is what will be displayed in the
+ % outline by the pdf viewer. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node text,
+ % which might be empty if this toc entry had no corresponding node.
+ % #4 is the page number
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worth the trouble, since most documents are normally structured.
+ \edef\pdfoutlinedest{#3}%
+ \ifx\pdfoutlinedest\empty
+ \def\pdfoutlinedest{#4}%
+ \else
+ \txiescapepdf\pdfoutlinedest
+ \fi
+ %
+ % Also escape PDF chars in the display string.
+ \edef\pdfoutlinetext{#1}%
+ \txiescapepdf\pdfoutlinetext
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \readdatafile{toc}%
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % TODO this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Too
+ % much work for too little return. Just use the ASCII equivalents
+ % we use for the index sort strings.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \setcolor{\linkcolor}#1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ % non-pdf mode
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\setcolor = \gobble
+ \let\pdfsetcolor = \gobble
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
+
+
+\message{fonts,}
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname ten#1\endcsname % change the current font
+}
+
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Unfortunately, we have to override this for titles and the like, since
+% in those cases "rm" is bold. Sigh.
+\def\rmisbold{\rm\def\curfontstyle{bf}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\newdimen\textleading
+\def\setleading#1{%
+ \dimen0 = #1\relax
+ \normalbaselineskip = \baselinefactor\dimen0
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% PDF CMaps. See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\thisisundefined \else
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1IT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1TT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named \fontprefix#2.
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
+% Example:
+% #1 = \textrm
+% #2 = \rmshape
+% #3 = 10
+% #4 = \mainmagstep
+% #5 = OT1
+%
+\def\setfont#1#2#3#4#5{%
+ \font#1=\fontprefix#2#3 scaled #4
+ \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+%
+% (end of cmaps)
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\thisisundefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} % where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt. (The default in Texinfo.)
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defsl\slshape{10}{\magstep1}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf
+\let\tenttsl=\defttsl \let\tensl=\defsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+\textleading = 13.2pt % line spacing for 11pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 11pt text font size definitions, \definetextfontsizexi
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit. This is for the GNU
+% Press printing of the Emacs 22 manual. Maybe other manuals in the
+% future. Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defsl\slshape{10}{\magstephalf}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf
+\let\tensl=\defsl \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+\divide\parskip by 2 % reduce space between paragraphs
+\textleading = 12pt % line spacing for 10pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 10pt text font size definitions, \definetextfontsizex
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xiword{11}
+\def\xword{10}
+\def\xwordpt{10pt}
+%
+\parseargdef\fonttextsize{%
+ \def\textsizearg{#1}%
+ %\wlog{doing @fonttextsize \textsizearg}%
+ %
+ % Set \globaldefs so that documents can use this inside @tex, since
+ % makeinfo 4.8 does not support it, but we need it nonetheless.
+ %
+ \begingroup \globaldefs=1
+ \ifx\textsizearg\xword \definetextfontsizex
+ \else \ifx\textsizearg\xiword \definetextfontsizexi
+ \else
+ \errhelp=\EMsimple
+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+ \fi\fi
+ \endgroup
+}
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. We don't
+% bother to reset \scriptfont and \scriptscriptfont; awaiting user need.
+%
+\def\resetmathfonts{%
+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE. We do this because \STYLE needs to also set the
+% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used
+% in, e.g., the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+\def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+ \let\tenttsl=\textttsl
+ \def\curfontsize{text}%
+ \def\lsize{reduced}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+ \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+ \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+ \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+ \let\tenttsl=\titlettsl
+ \def\curfontsize{title}%
+ \def\lsize{chap}\def\lllsize{subsec}%
+ \resetmathfonts \setleading{27pt}}
+\def\titlefont#1{{\titlefonts\rmisbold #1}}
+\def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+ \let\tenttsl=\chapttsl
+ \def\curfontsize{chap}%
+ \def\lsize{sec}\def\lllsize{text}%
+ \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+ \let\tenttsl=\secttsl
+ \def\curfontsize{sec}%
+ \def\lsize{subsec}\def\lllsize{reduced}%
+ \resetmathfonts \setleading{17pt}}
+\def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+ \let\tenttsl=\ssecttsl
+ \def\curfontsize{ssec}%
+ \def\lsize{text}\def\lllsize{small}%
+ \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+ \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+ \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+ \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+ \let\tenttsl=\reducedttsl
+ \def\curfontsize{reduced}%
+ \def\lsize{small}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+ \let\tenttsl=\smallttsl
+ \def\curfontsize{small}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+ \let\tenttsl=\smallerttsl
+ \def\curfontsize{smaller}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{9.5pt}}
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+\message{markup,}
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will
+% define and register \INITMACRO to be called on markup style changes.
+% \INITMACRO can check \currentmarkupstyle for the innermost
+% style and the set of \ifmarkupSTYLE switches for all styles
+% currently in effect.
+\newif\ifmarkupvar
+\newif\ifmarkupsamp
+\newif\ifmarkupkey
+%\newif\ifmarkupfile % @file == @samp.
+%\newif\ifmarkupoption % @option == @samp.
+\newif\ifmarkupcode
+\newif\ifmarkupkbd
+%\newif\ifmarkupenv % @env == @code.
+%\newif\ifmarkupcommand % @command == @code.
+\newif\ifmarkuptex % @tex (and part of @math, for now).
+\newif\ifmarkupexample
+\newif\ifmarkupverb
+\newif\ifmarkupverbatim
+
+\let\currentmarkupstyle\empty
+
+\def\setupmarkupstyle#1{%
+ \csname markup#1true\endcsname
+ \def\currentmarkupstyle{#1}%
+ \markupstylesetup
+}
+
+\let\markupstylesetup\empty
+
+\def\defmarkupstylesetup#1{%
+ \expandafter\def\expandafter\markupstylesetup
+ \expandafter{\markupstylesetup #1}%
+ \def#1%
+}
+
+% Markup style setup for left and right quotes.
+\defmarkupstylesetup\markupsetuplq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuplq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
+}
+
+\defmarkupstylesetup\markupsetuprq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuprq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\markupsetuplqdefault{\let`\lq}
+\gdef\markupsetuprqdefault{\let'\rq}
+
+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
+\gdef\markupsetcodequoteright{\let'\codequoteright}
+}
+
+\let\markupsetuplqcode \markupsetcodequoteleft
+\let\markupsetuprqcode \markupsetcodequoteright
+%
+\let\markupsetuplqexample \markupsetcodequoteleft
+\let\markupsetuprqexample \markupsetcodequoteright
+%
+\let\markupsetuplqkbd \markupsetcodequoteleft
+\let\markupsetuprqkbd \markupsetcodequoteright
+%
+\let\markupsetuplqsamp \markupsetcodequoteleft
+\let\markupsetuprqsamp \markupsetcodequoteright
+%
+\let\markupsetuplqverb \markupsetcodequoteleft
+\let\markupsetuprqverb \markupsetcodequoteright
+%
+\let\markupsetuplqverbatim \markupsetcodequoteleft
+\let\markupsetuprqverbatim \markupsetcodequoteright
+
+% Allow an option to not use regular directed right quote/apostrophe
+% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
+% The undirected quote is ugly, so don't make it the default, but it
+% works for pasting with more pdf viewers (at least evince), the
+% lilypond developers report. xpdf does work with the regular 0x27.
+%
+\def\codequoteright{%
+ \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+ '%
+ \else \char'15 \fi
+ \else \char'15 \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+ \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+ % [Knuth] pp. 380,381,391
+ % \relax disables Spanish ligatures ?` and !` of \tt font.
+ \relax`%
+ \else \char'22 \fi
+ \else \char'22 \fi
+}
+
+% Commands to set the quote options.
+%
+\parseargdef\codequoteundirected{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
+ \fi\fi
+}
+%
+\parseargdef\codequotebacktick{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
+ \fi\fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Font commands.
+
+% #1 is the font command (\sl or \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+ \ifusingtt
+ {{\ttsl #2}\let\next=\relax}%
+ {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+ \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
+
+% Output an italic correction unless \next (presumed to be the following
+% character) is such as not to need one.
+\def\smartitaliccorrection{%
+ \ifx\next,%
+ \else\ifx\next-%
+ \else\ifx\next.%
+ \else\ifx\next\.%
+ \else\ifx\next\comma%
+ \else\ptexslash
+ \fi\fi\fi\fi\fi
+ \aftersmartic
+}
+
+% Unconditional use \ttsl, and no ic. @var is set to this for defuns.
+\def\ttslanted#1{{\ttsl #1}}
+
+% @cite is like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
+
+\def\aftersmartic{}
+\def\var#1{%
+ \let\saveaftersmartic = \aftersmartic
+ \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
+ \smartslanted{#1}%
+}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @b, explicit bold. Also @strong.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\plainfrenchspacing{%
+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+ \def\endofsentencespacefactor{1000}% for @. and friends
+ }
+ \def\plainnonfrenchspacing{%
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+ \def\endofsentencespacefactor{3000}% for @. and friends
+ }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+% @t, explicit typewriter.
+\def\t#1{%
+ {\tt \rawbackslash \plainfrenchspacing #1}%
+ \null
+}
+
+% @samp.
+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
+
+% @indicateurl is \samp, that is, with quotes.
+\let\indicateurl=\samp
+
+% @code (and similar) prints in typewriter, but with spaces the same
+% size as normal in the surrounding text, without hyphenation, etc.
+% This is a subroutine for that.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \plainfrenchspacing
+ #1%
+ }%
+ \null % reset spacefactor to 1000
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% (But see \codedashfinish below.)
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+%
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash. -- rms.
+{
+ \catcode`\-=\active \catcode`\_=\active
+ \catcode`\'=\active \catcode`\`=\active
+ \global\let'=\rq \global\let`=\lq % default definitions
+ %
+ \global\def\code{\begingroup
+ \setupmarkupstyle{code}%
+ % The following should really be moved into \setupmarkupstyle handlers.
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\normaldash
+ \let_\realunder
+ \fi
+ % Given -foo (with a single dash), we do not want to allow a break
+ % after the hyphen.
+ \global\let\codedashprev=\codedash
+ %
+ \codex
+ }
+ %
+ \gdef\codedash{\futurelet\next\codedashfinish}
+ \gdef\codedashfinish{%
+ \normaldash % always output the dash character itself.
+ %
+ % Now, output a discretionary to allow a line break, unless
+ % (a) the next character is a -, or
+ % (b) the preceding character is a -.
+ % E.g., given --posix, we do not want to allow a break after either -.
+ % Given --foo-bar, we do want to allow a break between the - and the b.
+ \ifx\next\codedash \else
+ \ifx\codedashprev\codedash
+ \else \discretionary{}{}{}\fi
+ \fi
+ % we need the space after the = for the case when \next itself is a
+ % space token; it would get swallowed otherwise. As in @code{- a}.
+ \global\let\codedashprev= \next
+ }
+}
+\def\normaldash{-}
+%
+\def\codex #1{\tclose{#1}\endgroup}
+
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is bad.
+% @allowcodebreaks provides a document-level way to turn breaking at -
+% and _ on and off.
+%
+\newif\ifallowcodebreaks \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\keywordtrue
+ \allowcodebreakstrue
+ \else\ifx\txiarg\keywordfalse
+ \allowcodebreaksfalse
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
+ \fi\fi
+}
+
+% For @command, @env, @file, @option quotes seem unnecessary,
+% so use \code rather than \samp.
+\let\command=\code
+\let\env=\code
+\let\file=\code
+\let\option=\code
+
+% @uref (abbreviation for `urlref') aka @url takes an optional
+% (comma-separated) second argument specifying the text to display and
+% an optional third arg as text to display instead of (rather than in
+% addition to) the url itself. First (mandatory) arg is the url.
+
+% TeX-only option to allow changing PDF output to show only the second
+% arg (if given), and not the url (which is then just the link target).
+\newif\ifurefurlonlylink
+
+% The main macro is \urefbreak, which allows breaking at expected
+% places within the url. (There used to be another version, which
+% didn't support automatic breaking.)
+\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
+\let\uref=\urefbreak
+%
+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}% look for second arg
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \ifurefurlonlylink
+ % PDF plus option to not display url, show just arg
+ \unhbox0
+ \else
+ % PDF, normally display both arg and url for consistency,
+ % visibility, if the pdf is eventually used to print, etc.
+ \unhbox0\ (\urefcode{#1})%
+ \fi
+ \else
+ \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
+ \fi
+ \else
+ \urefcode{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% Allow line breaks around only a few characters (only).
+\def\urefcatcodes{%
+ \catcode\ampChar=\active \catcode\dotChar=\active
+ \catcode\hashChar=\active \catcode\questChar=\active
+ \catcode\slashChar=\active
+}
+{
+ \urefcatcodes
+ %
+ \global\def\urefcode{\begingroup
+ \setupmarkupstyle{code}%
+ \urefcatcodes
+ \let&\urefcodeamp
+ \let.\urefcodedot
+ \let#\urefcodehash
+ \let?\urefcodequest
+ \let/\urefcodeslash
+ \codex
+ }
+ %
+ % By default, they are just regular characters.
+ \global\def&{\normalamp}
+ \global\def.{\normaldot}
+ \global\def#{\normalhash}
+ \global\def?{\normalquest}
+ \global\def/{\normalslash}
+}
+
+% we put a little stretch before and after the breakable chars, to help
+% line breaking of long url's. The unequal skips make look better in
+% cmtt at least, especially for dots.
+\def\urefprestretchamount{.13em}
+\def\urefpoststretchamount{.1em}
+\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax}
+\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax}
+%
+\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
+\def\urefcodedot{\urefprestretch .\urefpoststretch}
+\def\urefcodehash{\urefprestretch \#\urefpoststretch}
+\def\urefcodequest{\urefprestretch ?\urefpoststretch}
+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
+{
+ \catcode`\/=\active
+ \global\def\urefcodeslashfinish{%
+ \urefprestretch \slashChar
+ % Allow line break only after the final / in a sequence of
+ % slashes, to avoid line break between the slashes in http://.
+ \ifx\next/\else \urefpoststretch \fi
+ }
+}
+
+% One more complication: by default we'll break after the special
+% characters, but some people like to break before the special chars, so
+% allow that. Also allow no breaking at all, for manual control.
+%
+\parseargdef\urefbreakstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\wordnone
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordbefore
+ \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordafter
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\wordafter{after}
+\def\wordbefore{before}
+\def\wordnone{none}
+
+\urefbreakstyle after
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\txiarg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\txiarg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
+
+\def\xkey{\key}
+\def\kbdsub#1#2#3\par{%
+ \def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+}
+
+% definition of @key that produces a lozenge. Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+% \vbox{\hrule\kern-0.4pt
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+% \kern-0.4pt\hrule}%
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge. If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle. But
+% if it isn't monospace, then use \tt.
+%
+\def\key#1{{\setupmarkupstyle{key}%
+ \nohyphenation
+ \ifmonospace\else\tt\fi
+ #1}\null}
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\selectfonts\lsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\plainfrenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode`\_ = \active
+ \gdef\mathunderscore{%
+ \catcode`\_=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a math (or tt) \.
+% FYI, plain.tex uses \\ as a temporary control sequence (for no
+% particular reason), but this is not advertised and we don't care.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ % make the texinfo accent commands work in math mode
+ \let\"=\ddot
+ \let\'=\acute
+ \let\==\bar
+ \let\^=\hat
+ \let\`=\grave
+ \let\u=\breve
+ \let\v=\check
+ \let\~=\tilde
+ \let\dotaccent=\dot
+ % have to provide another name for sup operator
+ \let\mathopsup=\sup
+ $\finishmath
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \catcode`' = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ \let' = \ptexquoteright
+ }
+}
+
+% for @sub and @sup, if in math mode, just do a normal sub/superscript.
+% If in text, use math to place as sub/superscript, but switch
+% into text mode, with smaller fonts. This is a different font than the
+% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
+% fix it (significant additions to font machinery) until someone notices.
+%
+\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
+\def\finishsub#1{$\sb{\hbox{\selectfonts\lllsize #1}}$}%
+%
+\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
+\def\finishsup#1{$\ptexsp{\hbox{\selectfonts\lllsize #1}}$}%
+
+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+% except specified as a normal braced arg, so no newlines to worry about.
+%
+\def\outfmtnametex{tex}
+%
+\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
+\long\def\doinlinefmt#1,#2,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+}
+%
+% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
+% FMTNAME is tex, else ELSE-TEXT.
+\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
+\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
+}
+%
+% For raw, must switch into @tex before parsing the argument, to avoid
+% setting catcodes prematurely. Doing it this way means that, for
+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
+% ignored. But this isn't important because if people want a literal
+% *right* brace they would have to use a command anyway, so they may as
+% well use a command to get a left brace too. We could re-use the
+% delimiter character idea from \verb, but it seems like overkill.
+%
+\long\def\inlineraw{\tex \doinlineraw}
+\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
+\def\doinlinerawtwo#1,#2,\finish{%
+ \def\inlinerawname{#1}%
+ \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
+ \endgroup % close group opened by \tex.
+}
+
+% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
+%
+\long\def\inlineifset#1{\doinlineifset #1,\finish}
+\long\def\doinlineifset#1,#2,\finish{%
+ \def\inlinevarname{#1}%
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
+ \else\ignorespaces#2\fi
+}
+
+% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
+%
+\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
+\long\def\doinlineifclear#1,#2,\finish{%
+ \def\inlinevarname{#1}%
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
+}
+
+
+\message{glyphs,}
+% and logos.
+
+% @@ prints an @, as does @atchar{}.
+\def\@{\char64 }
+\let\atchar=\@
+
+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
+% Unless we're in typewriter, use \ecfont because the CM text fonts do
+% not have braces, and we don't want to switch into math.
+\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
+\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
+\let\{=\mylbrace \let\lbracechar=\{
+\let\}=\myrbrace \let\rbracechar=\}
+\begingroup
+ % Definitions to produce \{ and \} commands for indices,
+ % and @{ and @} for the aux/toc files.
+ \catcode`\{ = \other \catcode`\} = \other
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\! = 0 \catcode`\\ = \other
+ !gdef!lbracecmd[\{]%
+ !gdef!rbracecmd[\}]%
+ !gdef!lbraceatcmd[@{]%
+ !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \ptexc
+\let\dotaccent = \ptexdot
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \ptext
+\let\ubaraccent = \ptexb
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{%
+ \ifx\textnominalsize\xwordpt
+ % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
+ % Revert to plain's \scriptsize, which is 7pt.
+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
+ \else
+ % For 11pt, we can use our lllsize.
+ \selectfonts\lllsize A%
+ \fi
+ }%
+ \vss
+ }}%
+ \kern-.15em
+ \TeX
+}
+
+% Some math mode symbols. Define \ensuremath to switch into math mode
+% unless we are already there. Expansion tricks may not be needed here,
+% but safer, and can't hurt.
+\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
+\def\ensuredmath#1{$\relax#1$}
+%
+\def\bullet{\ensuremath\ptexbullet}
+\def\geq{\ensuremath\ge}
+\def\leq{\ensuremath\le}
+\def\minus{\ensuremath-}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em. So do
+% whichever is larger.
+%
+\def\dots{%
+ \leavevmode
+ \setbox0=\hbox{...}% get width of three periods
+ \ifdim\wd0 > 1.5em
+ \dimen0 = \wd0
+ \else
+ \dimen0 = 1.5em
+ \fi
+ \hbox to \dimen0{%
+ \hskip 0pt plus.25fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=\endofsentencespacefactor
+}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbol don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% Glyphs from the EC fonts. We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases. We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+ \def\temp{#1}%
+ \ifx\temp\macrocharA\Aogonek
+ \else\ifx\temp\macrochara\aogonek
+ \else\ifx\temp\macrocharE\Eogonek
+ \else\ifx\temp\macrochare\eogonek
+ \else
+ \ecfont \setbox0=\hbox{#1}%
+ \ifdim\ht0=1ex\accent"0C #1%
+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+ \fi
+ \fi\fi\fi\fi
+ }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the European Computer Modern fonts (cm-super in outline format)
+% for non-CM glyphs. That is ec* for regular text and tc* for the text
+% companion symbols (LaTeX TS1 encoding). Both are part of the ec
+% package and follow the same conventions.
+%
+\def\ecfont{\etcfont{e}}
+\def\tcfont{\etcfont{t}}
+%
+\def\etcfont#1{%
+ % We can't distinguish serif/sans and italic/slanted, but this
+ % is used for crude hacks anyway (like adding French and German
+ % quotes to documents typeset with CM, where we lose kerning), so
+ % hopefully nobody will notice/care.
+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+ \ifmonospace
+ % typewriter:
+ \font\thisecfont = #1ctt\ecsize \space at \nominalsize
+ \else
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize
+ \else
+ % regular:
+ \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+ \fi
+ \fi
+ \thisecfont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\thisisundefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quotedblleft="5C
+\chardef\quotedblright=`\"
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{%
+ \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \let\page = \oldpage
+ \page
+ \null
+ }%
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+ %
+ % If they want short, they certainly want long too.
+ \ifsetshortcontentsaftertitlepage
+ \shortcontents
+ \contents
+ \global\let\shortcontents = \relax
+ \global\let\contents = \relax
+ \fi
+ %
+ \ifsetcontentsaftertitlepage
+ \contents
+ \global\let\contents = \relax
+ \global\let\shortcontents = \relax
+ \fi
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+% Settings used for typesetting titles: no hyphenation, no indentation,
+% don't worry much about spacing, ragged right. This should be used
+% inside a \vbox, and fonts need to be set appropriately first. Because
+% it is always used for titles, nothing else, we call \rmisbold. \par
+% should be specified before the end of the \vbox, since a vbox is a group.
+%
+\def\raggedtitlesettings{%
+ \rmisbold
+ \hyphenpenalty=10000
+ \parindent=0pt
+ \tolerance=5000
+ \ptexraggedright
+}
+
+% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \vbox{\titlefonts \raggedtitlesettings #1\par}%
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\secfonts\rmisbold \leftline{#1}}%
+ \fi
+}
+
+
+% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make \makeheadline and \makefootline in Plain TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\pageheight by -12pt
+ \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+% These define \getoddheadingmarks, \getevenheadingmarks,
+% \getoddfootingmarks, and \getevenfootingmarks, each to one of
+% \gettopheadingmarks, \getbottomheadingmarks.
+%
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
+ \headingmarks{odd}{heading}{#1} }
+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+ \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\headingsoff{% non-global headings elimination
+ \evenheadline={\hfil}\evenfootline={\hfil}%
+ \oddheadline={\hfil}\oddfootline={\hfil}%
+}
+
+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
+\HEADINGSoff % it's the default
+
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\thisisundefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemindicate{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil\relax
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ %
+ % Try typesetting the item mark so that if the document erroneously says
+ % something like @itemize @samp (intending @table), there's an error
+ % right away at the @itemize. It's not the best error message in the
+ % world, but it's better than leaving it to the @item. This means if
+ % the user wants an empty mark, they have to say @w{} not just @w.
+ \def\itemcontents{#1}%
+ \setbox0 = \hbox{\itemcontents}%
+ %
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ %
+ \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ %
+ \ifinner\else
+ \vadjust{\penalty 1200}% not good to break after first line of item.
+ \fi
+ % We can be in inner vertical mode in a footnote, although an
+ % @itemize looks awful there.
+ }%
+ \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold. Assignments
+% have to be global since we are inside the implicit group of an
+% alignment entry. \everycr below resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+ \checkenv\multitable
+ \crcr
+ \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+ \the\everytab % for the first item
+}%
+%
+% default for tables with no headings.
+\let\headitemcrhook=\relax
+%
+% A \tab used to include \hskip1sp. But then the space in a template
+% line is not enough. That is bad. So let's go back to just `&' until
+% we again encounter the problem the 1sp was intended to solve.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
+ \vskip\parskip
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ %
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}% Reset from possible headitem.
+ \global\colcount=0 % Reset the column counter.
+ %
+ % Check for saved footnotes, etc.:
+ \checkinserts
+ %
+ % Perhaps a \nobreak, then reset:
+ \headitemcrhook
+ \global\let\headitemcrhook=\relax
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \multistrut
+ \vtop{%
+ % Use the current \colcount to find the correct column width:
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively
+ % marking characters.
+ \noindent\ignorespaces##\unskip\multistrut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+ \def\multistrut{\strut}% just use the standard line spacing
+ %
+ % Compute \multitablelinespace (if not defined by user) for use in
+ % \multitableparskip calculation. We used define \multistrut based on
+ % this, but (ironically) that caused the spacing to be off.
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+% Test to see if parskip is larger than space between lines of
+% table. If not, do nothing.
+% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+ % Scan in ``verbatim'' mode:
+ \obeylines
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching `@end #1'.
+ \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
+ %
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
+ %
+ % Define a command to find the next `@end #1'.
+ \long\def\doignoretext##1^^M@end #1{%
+ \doignoretextyyy##1^^M@#1\_STOP_}%
+ %
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line `@c @ifset', for
+ % example, to count as an @ifset for nesting.)
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+ %
+ % And now expand that command.
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+ % Ignore anything after the last `@end #1'; this matters in verbatim
+ % environments, where otherwise the newline after an ignored conditional
+ % would result in a blank line in the output.
+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+ \catcode`\-=\active \catcode`\_=\active
+ %
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
+ % So \let them to their normal equivalents.
+ \let-\normaldash \let_\normalunderscore
+ }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file. This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+% Unfortunately, this has the consequence that when _ is in the *value*
+% of an @set, it does not print properly in the roman fonts (get the cmr
+% dot accent at position 126 instead). No fix comes to mind, and it's
+% been this way since 2003 or earlier, so just ignore it.
+%
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get the special treatment we need for `@end ifset,' we call
+% \makecond and then redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end executes the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
+% without the @) is in fact defined. We can only feasibly check at the
+% TeX level, so something like `mathcode' is going to considered
+% defined even though it is not a Texinfo command.
+%
+\makecond{ifcommanddefined}
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
+%
+\def\doifcmddefined#1#2{{%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname #2\endcsname\relax
+ #1% If not defined, \let\next as above.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
+
+% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
+\makecond{ifcommandnotdefined}
+\def\ifcommandnotdefined{%
+ \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
+
+% Set the `txicommandconditionals' variable, so documents have a way to
+% test if the @ifcommand...defined conditionals are available.
+\set txicommandconditionals
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named IX.
+% It automatically defines \IXindex such that
+% \IXindex ...rest of line... puts an entry in the index IX.
+% It also defines \IXindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is IX.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \expandafter\chardef\csname#1indfile\endcsname=0
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \expandafter\chardef\csname#1indfile\endcsname=0
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+% The default indices:
+\newindex{cp}% concepts,
+\newcodeindex{fn}% functions,
+\newcodeindex{vr}% variables,
+\newcodeindex{tp}% types,
+\newcodeindex{ky}% keys
+\newcodeindex{pg}% and programs.
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ % Only do \closeout if we haven't already done it, else we'll end up
+ % closing the target index.
+ \expandafter \ifx\csname donesynindex#2\endcsname \relax
+ % The \closeout helps reduce unnecessary open files; the limit on the
+ % Acorn RISC OS is a mere 16 files.
+ \expandafter\closeout\csname#2indfile\endcsname
+ \expandafter\let\csname donesynindex#2\endcsname = 1
+ \fi
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all index macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it the two-letter name of the index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
+\def\doindexxxx #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
+\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
+
+% Used when writing an index entry out to an index file, to prevent
+% expansion of Texinfo commands that can appear in an index entry.
+%
+\def\indexdummies{%
+ \escapechar = `\\ % use backslash in output files.
+ \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+ \def\ {\realbackslash\space }%
+ %
+ % Need these unexpandable (because we define \tt as a dummy)
+ % definitions when @{ or @} appear in index entry text. Also, more
+ % complicated, when \tex is in effect and \{ is a \delimiter again.
+ % We can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters. Perhaps we
+ % should use @lbracechar and @rbracechar?
+ \def\{{{\tt\char123}}%
+ \def\}{{\tt\char125}}%
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% For the aux and toc files, @ is the escape character. So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files). When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+ \def\@{@@}%
+ \def\ {@ }%
+ \let\{ = \lbraceatcmd
+ \let\} = \rbraceatcmd
+ %
+ % Do the redefinitions.
+ \commondummies
+ \otherbackslash
+}
+
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+ % \definedummyword defines \#1 as \string\#1\space, thus effectively
+ % preventing its expansion. This is used only for control words,
+ % not control letters, because the \space would be incorrect for
+ % control characters, but is needed to separate the control word
+ % from whatever follows.
+ %
+ % For control letters, we have \definedummyletter, which omits the
+ % space.
+ %
+ % These can be used both for control words that take an argument and
+ % those that do not. If it is followed by {arg} in the input, then
+ % that will dutifully get written to the index (or wherever).
+ %
+ \def\definedummyword ##1{\def##1{\string##1\space}}%
+ \def\definedummyletter##1{\def##1{\string##1}}%
+ \let\definedummyaccent\definedummyletter
+ %
+ \commondummiesnofonts
+ %
+ \definedummyletter\_%
+ \definedummyletter\-%
+ %
+ % Non-English letters.
+ \definedummyword\AA
+ \definedummyword\AE
+ \definedummyword\DH
+ \definedummyword\L
+ \definedummyword\O
+ \definedummyword\OE
+ \definedummyword\TH
+ \definedummyword\aa
+ \definedummyword\ae
+ \definedummyword\dh
+ \definedummyword\exclamdown
+ \definedummyword\l
+ \definedummyword\o
+ \definedummyword\oe
+ \definedummyword\ordf
+ \definedummyword\ordm
+ \definedummyword\questiondown
+ \definedummyword\ss
+ \definedummyword\th
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword\bf
+ \definedummyword\gtr
+ \definedummyword\hat
+ \definedummyword\less
+ \definedummyword\sf
+ \definedummyword\sl
+ \definedummyword\tclose
+ \definedummyword\tt
+ %
+ \definedummyword\LaTeX
+ \definedummyword\TeX
+ %
+ % Assorted special characters.
+ \definedummyword\arrow
+ \definedummyword\bullet
+ \definedummyword\comma
+ \definedummyword\copyright
+ \definedummyword\registeredsymbol
+ \definedummyword\dots
+ \definedummyword\enddots
+ \definedummyword\entrybreak
+ \definedummyword\equiv
+ \definedummyword\error
+ \definedummyword\euro
+ \definedummyword\expansion
+ \definedummyword\geq
+ \definedummyword\guillemetleft
+ \definedummyword\guillemetright
+ \definedummyword\guilsinglleft
+ \definedummyword\guilsinglright
+ \definedummyword\lbracechar
+ \definedummyword\leq
+ \definedummyword\mathopsup
+ \definedummyword\minus
+ \definedummyword\ogonek
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \definedummyword\quotedblbase
+ \definedummyword\quotedblleft
+ \definedummyword\quotedblright
+ \definedummyword\quoteleft
+ \definedummyword\quoteright
+ \definedummyword\quotesinglbase
+ \definedummyword\rbracechar
+ \definedummyword\result
+ \definedummyword\sub
+ \definedummyword\sup
+ \definedummyword\textdegree
+ %
+ % We want to disable all macros so that they are not expanded by \write.
+ \macrolist
+ %
+ \normalturnoffactive
+ %
+ % Handle some cases of @value -- where it does not contain any
+ % (non-fully-expandable) commands.
+ \makevalueexpandable
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+% Define \definedumyletter, \definedummyaccent and \definedummyword before
+% using.
+%
+\def\commondummiesnofonts{%
+ % Control letters and accents.
+ \definedummyletter\!%
+ \definedummyaccent\"%
+ \definedummyaccent\'%
+ \definedummyletter\*%
+ \definedummyaccent\,%
+ \definedummyletter\.%
+ \definedummyletter\/%
+ \definedummyletter\:%
+ \definedummyaccent\=%
+ \definedummyletter\?%
+ \definedummyaccent\^%
+ \definedummyaccent\`%
+ \definedummyaccent\~%
+ \definedummyword\u
+ \definedummyword\v
+ \definedummyword\H
+ \definedummyword\dotaccent
+ \definedummyword\ogonek
+ \definedummyword\ringaccent
+ \definedummyword\tieaccent
+ \definedummyword\ubaraccent
+ \definedummyword\udotaccent
+ \definedummyword\dotless
+ %
+ % Texinfo font commands.
+ \definedummyword\b
+ \definedummyword\i
+ \definedummyword\r
+ \definedummyword\sansserif
+ \definedummyword\sc
+ \definedummyword\slanted
+ \definedummyword\t
+ %
+ % Commands that take arguments.
+ \definedummyword\abbr
+ \definedummyword\acronym
+ \definedummyword\anchor
+ \definedummyword\cite
+ \definedummyword\code
+ \definedummyword\command
+ \definedummyword\dfn
+ \definedummyword\dmn
+ \definedummyword\email
+ \definedummyword\emph
+ \definedummyword\env
+ \definedummyword\file
+ \definedummyword\image
+ \definedummyword\indicateurl
+ \definedummyword\inforef
+ \definedummyword\kbd
+ \definedummyword\key
+ \definedummyword\math
+ \definedummyword\option
+ \definedummyword\pxref
+ \definedummyword\ref
+ \definedummyword\samp
+ \definedummyword\strong
+ \definedummyword\tie
+ \definedummyword\U
+ \definedummyword\uref
+ \definedummyword\url
+ \definedummyword\var
+ \definedummyword\verb
+ \definedummyword\w
+ \definedummyword\xref
+}
+
+% For testing: output @{ and @} in index sort strings as \{ and \}.
+\newif\ifusebracesinindexes
+
+\let\indexlbrace\relax
+\let\indexrbrace\relax
+
+{\catcode`\@=0
+\catcode`\\=13
+ @gdef@backslashdisappear{@def\{}}
+}
+
+{
+\catcode`\<=13
+\catcode`\-=13
+\catcode`\`=13
+ \gdef\indexnonalnumdisappear{%
+ \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
+ % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
+ % (Introduced for FSFS 2nd ed.)
+ \let`=\empty
+ \fi
+ %
+ \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
+ \backslashdisappear
+ \fi
+ %
+ \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
+ \def-{}%
+ \fi
+ \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
+ \def<{}%
+ \fi
+ \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
+ \def\@{}%
+ \fi
+ }
+
+ \gdef\indexnonalnumreappear{%
+ \useindexbackslash
+ \let-\normaldash
+ \let<\normalless
+ \def\@{@}%
+ }
+}
+
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+ % Accent commands should become @asis.
+ \def\definedummyaccent##1{\let##1\asis}%
+ % We can just ignore other control letters.
+ \def\definedummyletter##1{\let##1\empty}%
+ % All control words become @asis by default; overrides below.
+ \let\definedummyword\definedummyaccent
+ \commondummiesnofonts
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ \def\ { }%
+ \def\@{@}%
+ \def\_{\normalunderscore}%
+ \def\-{}% @- shouldn't affect sorting
+ %
+ \def\lbracechar{{\indexlbrace}}%
+ \def\rbracechar{{\indexrbrace}}%
+ \let\{=\lbracechar
+ \let\}=\rbracechar
+ %
+ %
+ % Non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\DH{DZZ}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\TH{TH}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\dh{dzz}%
+ \def\exclamdown{!}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\ordf{a}%
+ \def\ordm{o}%
+ \def\o{o}%
+ \def\questiondown{?}%
+ \def\ss{ss}%
+ \def\th{th}%
+ %
+ \def\LaTeX{LaTeX}%
+ \def\TeX{TeX}%
+ %
+ % Assorted special characters.
+ % (The following {} will end up in the sort string, but that's ok.)
+ \def\arrow{->}%
+ \def\bullet{bullet}%
+ \def\comma{,}%
+ \def\copyright{copyright}%
+ \def\dots{...}%
+ \def\enddots{...}%
+ \def\equiv{==}%
+ \def\error{error}%
+ \def\euro{euro}%
+ \def\expansion{==>}%
+ \def\geq{>=}%
+ \def\guillemetleft{<<}%
+ \def\guillemetright{>>}%
+ \def\guilsinglleft{<}%
+ \def\guilsinglright{>}%
+ \def\leq{<=}%
+ \def\minus{-}%
+ \def\point{.}%
+ \def\pounds{pounds}%
+ \def\print{-|}%
+ \def\quotedblbase{"}%
+ \def\quotedblleft{"}%
+ \def\quotedblright{"}%
+ \def\quoteleft{`}%
+ \def\quoteright{'}%
+ \def\quotesinglbase{,}%
+ \def\registeredsymbol{R}%
+ \def\result{=>}%
+ \def\textdegree{o}%
+ %
+ % We need to get rid of all macros, leaving only the arguments (if present).
+ % Of course this is not nearly correct, but it is the best we can do for now.
+ % makeinfo does not expand macros in the argument to @deffn, which ends up
+ % writing an index entry, and texindex isn't prepared for an index sort entry
+ % that starts with \.
+ %
+ % Since macro invocations are followed by braces, we can just redefine them
+ % to take a single TeX argument. The case of a macro invocation that
+ % goes to end-of-line is not handled.
+ %
+ \macrolist
+}
+
+
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+% TODO: Two-level index? Operation index?
+
+% Workhorse for all indexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+ \iflinks
+ {%
+ \requireopenindexfile{#1}%
+ % Store the main index entry text (including the third arg).
+ \toks0 = {#2}%
+ % If third arg is present, precede it with a space.
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\empty \else
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \safewhatsit\dosubindwrite
+ }%
+ \fi
+}
+
+% Check if an index file has been opened, and if not, open it.
+\def\requireopenindexfile#1{%
+\ifnum\csname #1indfile\endcsname=0
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \edef\suffix{#1}%
+ % A .fls suffix would conflict with the file extension for the output
+ % of -recorder, so use .f1s instead.
+ \ifx\suffix\indexisfl\def\suffix{f1}\fi
+ % Open the file
+ \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
+ % Using \immediate here prevents an object entering into the current box,
+ % which could confound checks such as those in \safewhatsit for preceding
+ % skips.
+\fi}
+\def\indexisfl{fl}
+
+% Output \ as {\indexbackslash}, because \ is an escape character in
+% the index files.
+\let\indexbackslash=\relax
+{\catcode`\@=0 \catcode`\\=\active
+ @gdef@useindexbackslash{@def\{{@indexbackslash}}}
+}
+
+% Definition for writing index entry text.
+\def\sortas#1{\ignorespaces}%
+
+% Definition for writing index entry sort key. Should occur at the at
+% the beginning of the index entry, like
+% @cindex @sortas{september} \september
+% The \ignorespaces takes care of following space, but there's no way
+% to remove space before it.
+{
+\catcode`\-=13
+\gdef\indexwritesortas{%
+ \begingroup
+ \indexnonalnumreappear
+ \indexwritesortasxxx}
+\gdef\indexwritesortasxxx#1{%
+ \xdef\indexsortkey{#1}\endgroup}
+}
+
+
+% Write the entry in \toks0 to the index file.
+%
+\def\dosubindwrite{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+ \fi
+ %
+ % Remember, we are within a group.
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \useindexbackslash % \indexbackslash isn't defined now so it will be output
+ % as is; and it will print as backslash.
+ % Get the string to sort by, by processing the index entry with all
+ % font commands turned off.
+ {\indexnofonts
+ \indexnonalnumdisappear
+ \xdef\indexsortkey{}%
+ \let\sortas=\indexwritesortas
+ \edef\temp{\the\toks0}%
+ \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas
+ \ifx\indexsortkey\empty
+ \xdef\indexsortkey{\temp}%
+ \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi
+ \fi
+ }%
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\indexsortkey}{\noexpand\folio}{\the\toks0}}%
+ }%
+ \temp
+}
+\newbox\dummybox % used above
+
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero. The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{\ifhmode
+ #1%
+ \else
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \whatsitskip = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \whatsitpenalty = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\whatsitskip glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\whatsitskip
+ \fi
+ %
+ #1%
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\whatsitskip
+ \fi
+\fi}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \plainfrenchspacing
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+ %
+ % See if the index file exists and is nonempty.
+ % Change catcode of @ here so that if the index file contains
+ % \initial {@}
+ % as its first line, TeX doesn't complain about mismatched braces
+ % (because it thinks @} is a control sequence).
+ \catcode`\@ = 11
+ % See comment in \requireopenindexfile.
+ \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
+ \openin 1 \jobname.\indexname s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \else
+ \catcode`\\ = 0
+ \escapechar = `\\
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \thisline
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \def\indexbackslash{\ttbackslash}%
+ \let\indexlbrace\{ % Likewise, set these sequences for braces
+ \let\indexrbrace\} % used in the sort key.
+ \begindoublecolumns
+ \let\entryorphanpenalty=\indexorphanpenalty
+ %
+ % Read input from the index file line by line.
+ \loopdo
+ \ifeof1
+ \let\firsttoken\relax
+ \else
+ \read 1 to \nextline
+ \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}%
+ \act
+ \fi
+ \thisline
+ %
+ \ifeof1\else
+ \let\thisline\nextline
+ \repeat
+ %%
+ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+\def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken}
+\long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1}
+
+\def\loopdo#1\repeat{\def\body{#1}\loopdoxxx}
+\def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
+\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
+\catcode`\$=3
+\gdef\initialglyphs{%
+ % Some changes for non-alphabetic characters. Using the glyphs from the
+ % math fonts looks more consistent than the typewriter font used elsewhere
+ % for these characters.
+ \def\indexbackslash{\math{\backslash}}%
+ \let\\=\indexbackslash
+ %
+ % Can't get bold backslash so don't use bold forward slash
+ \catcode`\/=13
+ \def/{{\secrmnotbold \normalslash}}%
+ \def-{{\normaldash\normaldash}}% en dash `--'
+ \def^{{\chapbf \normalcaret}}%
+ \def~{{\chapbf \normaltilde}}%
+ \def\_{%
+ \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
+ \def|{$\vert$}%
+ \def<{$\less$}%
+ \def>{$\gtr$}%
+ \def+{$\normalplus$}%
+}}
+
+\def\initial{%
+ \bgroup
+ \initialglyphs
+ \initialx
+}
+
+\def\initialx#1{%
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ % The glue before the bonus allows a little bit of space at the
+ % bottom of a column to reduce an increase in inter-line spacing.
+ \nobreak
+ \vskip 0pt plus 5\baselineskip
+ \penalty -300
+ \vskip 0pt plus -5\baselineskip
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus 1\baselineskip
+ \leftline{\secfonts \kern-0.05em \secbf #1}%
+ % \secfonts is inside the argument of \leftline so that the change of
+ % \baselineskip will not affect any glue inserted before the vbox that
+ % \leftline creates.
+ % Do our best not to break after the initial.
+ \nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
+ \egroup % \initialglyphs
+}
+
+\newdimen\entryrightmargin
+\entryrightmargin=0pt
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+\def\entry{%
+ \begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % When reading the text of entry, convert explicit line breaks
+ % from @* into spaces. The user might give these in long section
+ % titles, for instance.
+ \def\*{\unskip\space\ignorespaces}%
+ \def\entrybreak{\hfil\break}% An undocumented command
+ %
+ % A bit of stretch before each entry for the benefit of balancing
+ % columns.
+ \vskip 0pt plus0.5pt
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\entrybreak{\unskip\space\ignorespaces}%
+\def\doentry{%
+ % Save the text of the entry
+ \global\setbox\boxA=\hbox\bgroup
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+ % Not absorbing as a macro argument reduces the chance of problems
+ % with catcodes occurring.
+}
+{\catcode`\@=11
+\gdef\finishentry#1{%
+ \egroup % end box A
+ \dimen@ = \wd\boxA % Length of text of entry
+ \global\setbox\boxA=\hbox\bgroup\unhbox\boxA
+ % #1 is the page number.
+ %
+ % Get the width of the page numbers, and only use
+ % leaders if they are present.
+ \global\setbox\boxB = \hbox{#1}%
+ \ifdim\wd\boxB = 0pt
+ \null\nobreak\hfill\ %
+ \else
+ %
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ \ifpdf
+ \pdfgettoks#1.%
+ \hskip\skip\thinshrinkable\the\toksA
+ \else
+ \hskip\skip\thinshrinkable #1%
+ \fi
+ \fi
+ \egroup % end \boxA
+ \ifdim\wd\boxB = 0pt
+ \global\setbox\entryindexbox=\box\boxA
+ \else
+ \global\setbox\entryindexbox=\vbox\bgroup\noindent
+ % We want the text of the entries to be aligned to the left, and the
+ % page numbers to be aligned to the right.
+ %
+ \advance\leftskip by 0pt plus 1fil
+ \advance\leftskip by 0pt plus -1fill
+ \rightskip = 0pt plus -1fil
+ \advance\rightskip by 0pt plus 1fill
+ % Cause last line, which could consist of page numbers on their own
+ % if the list of page numbers is long, to be aligned to the right.
+ \parfillskip=0pt plus -1fill
+ %
+ \hangindent=1em
+ %
+ \advance\rightskip by \entryrightmargin
+ % Determine how far we can stretch into the margin.
+ % This allows, e.g., "Appendix H GNU Free Documentation License" to
+ % fit on one line in @letterpaper format.
+ \ifdim\entryrightmargin>2.1em
+ \dimen@i=2.1em
+ \else
+ \dimen@i=0em
+ \fi
+ \advance \parfillskip by 0pt minus 1\dimen@i
+ %
+ \dimen@ii = \hsize
+ \advance\dimen@ii by -1\leftskip
+ \advance\dimen@ii by -1\entryrightmargin
+ \advance\dimen@ii by 1\dimen@i
+ \let\maybestrut=\relax
+ \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
+ \let\maybestrut=\strut
+ \ifdim\dimen@ > 0.8\dimen@ii % due to long index text
+ \dimen@ = 0.7\dimen@ % Try to split the text roughly evenly
+ \dimen@ii = \hsize
+ \advance \dimen@ii by -1em
+ \ifnum\dimen@>\dimen@ii
+ % If the entry is too long, use the whole line
+ \dimen@ = \dimen@ii
+ \fi
+ \advance\leftskip by 0pt plus 1fill % ragged right
+ \advance \dimen@ by 1\rightskip
+ \parshape = 2 0pt \dimen@ 1em \dimen@ii
+ % Ideally we'd add a finite glue at the end of the first line only, but
+ % TeX doesn't seem to provide a way to do such a thing.
+ \fi\fi
+ \maybestrut % Add a strut on the first and last lines
+ \unhbox\boxA
+ \maybestrut
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % Word spacing - no stretch
+ \spaceskip=\fontdimen2\font minus \fontdimen4\font
+ %
+ \linepenalty=1000 % Discourage line breaks.
+ \hyphenpenalty=5000 % Discourage hyphenation.
+ %
+ \par % format the paragraph
+ \egroup % The \vbox
+ \fi
+ \endgroup
+ % delay text of entry until after penalty
+ \bgroup\aftergroup\insertindexentrybox
+ \entryorphanpenalty
+}}
+
+\newskip\thinshrinkable
+\skip\thinshrinkable=.15em minus .15em
+
+\newbox\entryindexbox
+\def\insertindexentrybox{%
+\lineskip=0pt % This comes into effect when the \vbox has a large
+ % height due to the paragraph in it having several
+ % lines.
+\box\entryindexbox}
+
+% Default is no penalty
+\let\entryorphanpenalty\egroup
+
+% Used from \printindex. \firsttoken should be the first token
+% after the \entry. If it's not another \entry, we are at the last
+% line of a group of index entries, so insert a penalty to discourage
+% orphaned index entries.
+\long\def\indexorphanpenalty{%
+ \def\isentry{\entry}%
+ \ifx\firsttoken\isentry
+ \else
+ \unskip\penalty 9000
+ % The \unskip here stops breaking before the glue. It relies on the
+ % \vskip above being there, otherwise there is an error
+ % "You can't use `\unskip' in vertical mode". There has to be glue
+ % in the current vertical list that hasn't been added to the
+ % "current page". See Chapter 24 of the TeXbook. This contradicts
+ % Section 8.3.7 in "TeX by Topic," though.
+ \fi
+ \egroup % now comes the box added with \aftergroup
+}
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+% The filll stretch here overpowers both the fil and fill stretch to push
+% the page number to the right.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
+
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ #2
+ \fi
+ \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+\newdimen\doublecolumntopgap
+\doublecolumntopgap = 0pt
+
+\newtoks\savedtopmark % Used in \begindoublecolumns
+\newtoks\savedfirstmark
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+ \output = {%
+ %
+ % Here is a possibility not foreseen in manmac: if we accumulate a
+ % whole lot of material, we might end up calling this \output
+ % routine twice in a row (see the doublecol-lose test, which is
+ % essentially a couple of indexes with @setchapternewpage off). In
+ % that case we just ship out what is in \partialpage with the normal
+ % output routine. Generally, \partialpage will be empty when this
+ % runs and this will be a no-op. See the indexspread.tex test case.
+ \ifvoid\partialpage \else
+ \onepageout{\pagecontents\partialpage}%
+ \fi
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ % Save \topmark and \firstmark
+ \global\savedtopmark=\expandafter{\topmark}%
+ \global\savedfirstmark=\expandafter{\firstmark}%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % We recover the two marks that the last output routine saved in order
+ % to propagate the information in marks added around a chapter heading,
+ % which could be otherwise be lost by the time the final page is output.
+ %
+ \mark{\the\savedtopmark}% Only mark in page passed to following \output.
+ \output = {%
+ \setbox0=\box\PAGE % clear box 255
+ }abc\eject
+ %
+ \mark{\the\savedfirstmark}%
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \global\doublecolumntopgap = \topskip
+ \global\advance\doublecolumntopgap by -1\baselineskip
+ \global\advance\vsize by -1\doublecolumntopgap
+ \vsize = 2\vsize
+ \topskip=0pt
+}
+
+% The double-column output routine for all double-column pages except
+% the last, which is done by \balancecolumns.
+%
+\def\doublecolumnout{%
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ \advance\dimen@ by -\ht\partialpage
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \vbox{%
+ \vskip\doublecolumntopgap
+ \hbox to\pagewidth{\box0\hfil\box2}}%
+}
+
+
+% Finished with with double columns.
+\def\enddoublecolumns{%
+ % The following penalty ensures that the page builder is exercised
+ % _before_ we change the output routine. This is necessary in the
+ % following situation:
+ %
+ % The last section of the index consists only of a single entry.
+ % Before this section, \pagetotal is less than \pagegoal, so no
+ % break occurs before the last section starts. However, the last
+ % section, consisting of \initial and the single \entry, does not
+ % fit on the page and has to be broken off. Without the following
+ % penalty the page builder will not be exercised until \eject
+ % below, and by that time we'll already have changed the output
+ % routine to the \balancecolumns version, so the next-to-last
+ % double-column page will be processed with \balancecolumns, which
+ % is wrong: The two columns will go to the main vertical list, with
+ % the broken-off section in the recent contributions. As soon as
+ % the output routine finishes, TeX starts reconsidering the page
+ % break. The two columns and the broken-off section both fit on the
+ % page, because the two columns now take up only half of the page
+ % goal. When TeX sees \eject from below which follows the final
+ % section, it invokes the new output routine that we've set after
+ % \balancecolumns below; \onepageout will try to fit the two columns
+ % and the final section into the vbox of \pageheight (see
+ % \pagebody), causing an overfull box.
+ %
+ % Note that glue won't work here, because glue does not exercise the
+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+ \penalty0
+ %
+ \output = {%
+ % Split the last of the double-column material. Leave it on the
+ % current page, no automatic page break.
+ \balancecolumns
+ %
+ % If we end up splitting too much material for the current page,
+ % though, there will be another page break right after this \output
+ % invocation ends. Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away. (We hope \balancecolumns will never be
+ % called on to balance too much material, but if it is, this makes
+ % the output somewhat more palatable.)
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
+ }%
+ \eject
+ \endgroup % started in \begindoublecolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize (after the
+ % \endgroup where \vsize got restored).
+ \pagegoal = \vsize
+}
+%
+% Only called for the last of the double column material. \doublecolumnout
+% does the others.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \ifdim\dimen@<14\baselineskip
+ % Don't split a short final column in two.
+ \setbox2=\vbox{}%
+ \else
+ \divide\dimen@ by 2 % target to split to
+ \dimen@ii = \dimen@
+ \splittopskip = \topskip
+ % Loop until the second column is no higher than the first
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ % Remove glue from bottom of first column to
+ % make sure it is higher than the second.
+ \global\setbox1 = \vbox{\unvbox1\unpenalty\unskip}%
+ \ifdim\ht3>\ht1
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ \multiply\dimen@ii by 4
+ \divide\dimen@ii by 5
+ \ifdim\ht3<\dimen@ii
+ % Column heights are too different, so don't make their bottoms
+ % flush with each other. The glue at the end of the second column
+ % allows a second column to stretch, reducing the difference in
+ % height between the two.
+ \setbox0=\vbox to\dimen@{\unvbox1\vfill}%
+ \setbox2=\vbox to\dimen@{\unvbox3\vskip 0pt plus 0.3\ht0}%
+ \else
+ \setbox0=\vbox to\dimen@{\unvbox1}%
+ \setbox2=\vbox to\dimen@{\unvbox3}%
+ \fi
+ \fi
+ %
+ \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% Let's start with @part.
+\outer\parseargdef\part{\partzzz{#1}}
+\def\partzzz#1{%
+ \chapoddpage
+ \null
+ \vskip.3\vsize % move it down on the page a bit
+ \begingroup
+ \noindent \titlefonts\rmisbold #1\par % the text
+ \let\lastnode=\empty % no node to associate with
+ \writetocentry{part}{#1}{}% but put it in the toc
+ \headingsoff % no headline or footline on the part page
+ % This outputs a mark at the end of the page that clears \thischapter
+ % and \thissection, as is done in \startcontents.
+ \let\pchapsepmacro\relax
+ \chapmacro{}{Yomitfromtoc}{}%
+ \chapoddpage
+ \endgroup
+}
+
+% \unnumberedno is an oxymoron. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter. Page headings and footings can use
+% these. @section does likewise.
+\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
+\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unnlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
+ \else
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
+ \fi
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unnlevel
+ \chardef\unnlevel = \absseclevel
+ \fi
+ \else
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ \errmessage{@appendix... within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unnlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unnlevel = 3
+ \fi
+ \fi
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
+ \else
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
+ \fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ % \putwordChapter can contain complex things in translations.
+ \toks0=\expandafter{\putwordChapter}%
+ \message{\the\toks0 \space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ % \putwordAppendix can contain complex things in translations.
+ \toks0=\expandafter{\putwordAppendix}%
+ \message{\the\toks0 \space \appendixletter}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+% normally unnmhead0 calls unnumberedzzz:
+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+%
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+% normally calls appendixsectionzzz:
+\outer\parseargdef\appendixsection{\apphead1{#1}}
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+% normally calls unnumberedseczzz:
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+%
+% normally calls numberedsubseczzz:
+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+% normally calls appendixsubseczzz:
+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+% normally calls unnumberedsubseczzz:
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+%
+% normally numberedsubsubseczzz:
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally appendixsubsubseczzz:
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally unnumberedsubsubseczzz:
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip \nobreak
+ \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+% Parameter controlling skip before chapter headings (if needed)
+\newskip\chapheadingskip
+
+% Define plain chapter starts, and page on/off switching for it.
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+
+% Start a new page
+\def\chappager{\par\vfill\supereject}
+
+% \chapoddpage - start on an odd page for a new chapter
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong. But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+ \chappager
+ \ifodd\pageno \else
+ \begingroup
+ \headingsoff
+ \null
+ \chappager
+ \endgroup
+ \fi
+}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% \chapmacro - Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+% Not used for @heading series.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yappendixkeyword{Yappendix}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+%
+\def\chapmacro#1#2#3{%
+ \checkenv{}% chapters, etc., should not start inside an environment.
+ %
+ % Insert the first mark before the heading break (see notes for \domark).
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+ \gdef\thissection{}}%
+ %
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{\thischaptername}}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{}}%
+ \else\ifx\temptype\Yappendixkeyword
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\appendixletter}%
+ % \noexpand\putwordAppendix avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \else
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\the\chapno}%
+ % \noexpand\putwordChapter avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \fi\fi\fi
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert the chapter heading break.
+ \pchapsepmacro
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ {%
+ \chapfonts \rmisbold
+ \let\footnote=\errfootnoteheading % give better error message
+ %
+ % Have to define \lastsection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\lastsection{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \nobreak % Avoid page breaks at the interline glue.
+ \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
+
+
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
+\def\unnchfopen #1{%
+ \chapoddpage
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip\nobreak
+}
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+\def\centerchfopen #1{%
+ \chapoddpage
+ \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
+ \nobreak\bigskip \nobreak
+}
+\def\CHAPFopen{%
+ \global\let\chapmacro=\chfopen
+ \global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text of the title,
+% #2 is the section level (sec/subsec/subsubsec),
+% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
+% #4 is the section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ % It is ok for the @heading series commands to appear inside an
+ % environment (it's been historically allowed, though the logic is
+ % dubious), but not the others.
+ \ifx\temptype\Yomitfromtockeyword\else
+ \checkenv{}% non-@*heading should not be in an environment.
+ \fi
+ \let\footnote=\errfootnoteheading
+ %
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rmisbold
+ %
+ % Insert first mark before the heading break (see notes for \domark).
+ \let\prevsectiondefs=\lastsectiondefs
+ \ifx\temptype\Ynothingkeyword
+ \ifx\sectionlevel\seckeyword
+ \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+ \gdef\thissection{\thissectionname}}%
+ \fi
+ \else\ifx\temptype\Yomitfromtockeyword
+ % Don't redefine \thissection.
+ \else\ifx\temptype\Yappendixkeyword
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \else
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \fi\fi\fi
+ %
+ % Go into vertical mode. Usually we'll already be there, but we
+ % don't want the following whatsit to end up in a preceding paragraph
+ % if the document didn't happen to have a blank line.
+ \par
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \global\let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ % Only insert the space after the number if we have a section number.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\lastsection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \lastsection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\lastsection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\lastsection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chapmacro.
+ \donoderef{#3}%
+ %
+ % Interline glue will be inserted when the vbox is completed.
+ % That glue will be a valid breakpoint for the page, since it'll be
+ % preceded by a whatsit (usually from the \donoderef, or from the
+ % \writetocentry if there was no node). We don't want to allow that
+ % break, since then the whatsits could end up on page n while the
+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
+ \nobreak
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
+ }%
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.) However, when a paragraph is not started next
+ % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
+ % or the negative glue will cause weirdly wrong output, typically
+ % obscuring the section heading with something else.
+ \vskip-\parskip
+ %
+ % This is so the last item on the main vertical list is a known
+ % \penalty > 10000, so \startdefun, etc., can recognize the situation
+ % and do the needful.
+ \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ {\atdummies
+ \edef\temp{%
+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+ \temp
+ }%
+ \fi
+ \fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care. This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+ \catcode`\"=\active
+ \catcode`\$=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\\=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+ \setupdatafile
+ \activecatcodes
+ \input \tocreadfilename
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \entryrightmargin=\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+% redefined for the two-volume lispref. We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
+
+% Normal (long) toc.
+%
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\partentry = \shortpartentry
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Parts, in the main contents. Replace the part number, which doesn't
+% exist, with an empty box. Let's hope all the numbers have the same width.
+% Also ignore the page number, which is conventionally not printed.
+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
+\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
+%
+% Parts, in the short toc.
+\def\shortpartentry#1#2#3#4{%
+ \penalty-300
+ \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
+ \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
+}
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ % Move the page numbers slightly to the right
+ \advance\entryrightmargin by -0.05em
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @tex ... @end tex escapes into raw TeX temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain @ character.
+
+\envdef\tex{%
+ \setupmarkupstyle{tex}%
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \catcode `\`=\other
+ \catcode `\'=\other
+ \escapechar=`\\
+ %
+ % ' is active in math mode (mathcode"8000). So reset it, and all our
+ % other math active characters (just in case), to plain's definitions.
+ \mathactive
+ %
+ % Inverse of the list at the beginning of the file.
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\/=\ptexslash
+ \let\sp=\ptexsp
+ \let\*=\ptexstar
+ %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
+ \let\t=\ptext
+ \expandafter \let\csname top\endcsname=\ptextop % we've made it outer
+ \let\frenchspacing=\plainfrenchspacing
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ \ifnum\lastpenalty<10000
+ % Penalize breaking before the environment, because preceding text
+ % often leads into it.
+ \penalty100
+ \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\def\afterenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ % side, and for 6pt waste from
+ % each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ %
+ % If this cartouche directly follows a sectioning command, we need the
+ % \parskip glue (backspaced over by default) or the cartouche can
+ % collide with the section heading.
+ \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+ %
+ \setbox\groupbox=\vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \kern3pt
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+ \comment % For explanation, see the end of def\group.
+}
+\def\Ecartouche{%
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \addgroupbox
+ \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\newdimen\nonfillparindent
+\def\nonfillstart{%
+ \aboveenvbreak
+ \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ % Turn off paragraph indentation but redefine \indent to emulate
+ % the normal \indent.
+ \nonfillparindent=\parindent
+ \parindent = 0pt
+ \let\indent\nonfillindent
+ %
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \let\exdent=\nofillexdent
+}
+
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ % end paragraph for sake of leading, in case document has no blank
+ % line. This is redundant with what happens in \aboveenvbreak, but
+ % we need to do it before changing the fonts, and it's inconvenient
+ % to change the fonts afterward.
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it in one command. #1 is the env name, #2 the definition.
+\def\makedispenvdef#1#2{%
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two environment synonyms (#1 and #2) for an environment.
+\def\maketwodispenvdef#1#2#3{%
+ \makedispenvdef{#1}{#3}%
+ \makedispenvdef{#2}{#3}%
+}
+%
+% @lisp: indented, narrowed, typewriter font;
+% @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvdef{lisp}{example}{%
+ \nonfillstart
+ \tt\setupmarkupstyle{example}%
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenvdef{display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenvdef{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill\relax
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification. From plain.tex. Don't stretch around special
+% characters in urls in this environment, since the stretch at the right
+% should be enough.
+\envdef\raggedright{%
+ \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
+ \def\urefprestretchamount{0pt}%
+ \def\urefpoststretchamount{0pt}%
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+ \parindent=0pt \leftskip0pt plus2em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedleft\par
+
+\envdef\raggedcenter{%
+ \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\makedispenvdef{quotation}{\quotationstart}
+%
+\def\quotationstart{%
+ \indentedblockstart % same as \indentedblock, but increase right margin too.
+ \ifx\nonarrowing\relax
+ \advance\rightskip by \lispnarrowing
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\thisisundefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallquotation{\Equotation}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+% @indentedblock is like @quotation, but indents only on the left and
+% has no optional argument.
+%
+\makedispenvdef{indentedblock}{\indentedblockstart}
+%
+\def\indentedblockstart{%
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+}
+
+% Keep a nonzero parskip for the environment, since we're doing normal filling.
+%
+\def\Eindentedblock{%
+ \par
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallindentedblock{\Eindentedblock}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
+ % @set txicodequotebacktick will not have effect on @verb and
+ % @verbatim, and ?` and !` ligatures won't get disabled.
+ %\do\`\do\'%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \setupmarkupstyle{verb}%
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion.
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+% We typeset each line of the verbatim in an \hbox, so we can handle
+% tabs. The \global is in case the verbatim line starts with an accent,
+% or some other command that starts with a begin-group. Otherwise, the
+% entire \verbbox would disappear at the corresponding end-group, before
+% it is typeset. Meanwhile, we can't have nested verbatim commands
+% (can we?), so the \global won't be overwriting itself.
+\newbox\verbbox
+\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
+ \divide\dimen\verbbox by\tabw
+ \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
+ \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw
+ \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
+ }%
+ }
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \tt % easiest (and conventionally used) font for verbatim
+ % The \leavevmode here is for blank lines. Otherwise, we would
+ % never \starttabox and the \egroup would end verbatim mode.
+ \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
+ \tabexpand
+ \setupmarkupstyle{verbatim}%
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count.
+ % Must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+ \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
+ \input #1
+ \afterenvbreak
+ }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \defunpenalty=10003 % Will keep this @deffn together with the
+ % following @def command, see below.
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \printdefunline, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ % As a further refinement, we avoid "club" headers by signalling
+ % with penalty of 10003 after the very first @deffn in the
+ % sequence (see above), and penalty of 10002 after any following
+ % @def command.
+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As above, allow line break if we have multiple x headers in a row.
+ % It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+ %
+ % And now, it's time to reuse the body of the original defun:
+ \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ % call \deffnheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil\relax
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty\defunpenalty % signal to \startdefun and \dodefunx
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remaining is to define \deffnheader.
+%
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \doingtypefnfalse % distinguish typed functions from all else
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
+}
+
+\newif\ifdoingtypefn % doing typed function?
+\newif\ifrettypeownline % typeset return type on its own line?
+
+% @deftypefnnewline on|off says whether the return type of typed functions
+% are printed on their own line. This affects @deftypefn, @deftypefun,
+% @deftypeop, and @deftypemethod.
+%
+\parseargdef\deftypefnnewline{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @txideftypefnnl value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+ \dosubind{fn}{\code{#3}}{#1}%
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{fn}{\code{#4}}{#1}%
+ \doingtypefntrue
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{vr}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+% Types:
+
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+ \par
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % Determine if we are typesetting the return type of a typed function
+ % on a line by itself.
+ \rettypeownlinefalse
+ \ifdoingtypefn % doing a typed function specifically?
+ % then check user option for putting return type on its own line:
+ \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
+ \rettypeownlinetrue
+ \fi
+ \fi
+ %
+ % How we'll format the category name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape. We'll always have at
+ % least two.
+ \tempnum = 2
+ %
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ %
+ % If doing a return type on its own line, we'll have another line.
+ \ifrettypeownline
+ \advance\tempnum by 1
+ \def\maybeshapeline{0in \hsize}%
+ \else
+ \def\maybeshapeline{}%
+ \fi
+ %
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ %
+ % The final paragraph shape:
+ \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2
+ %
+ % Put the category name at the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% text of the return type
+ \ifx\temp\empty\else
+ \tclose{\temp}% typeset the return type
+ \ifrettypeownline
+ % put return type on its own line; prohibit line break following:
+ \hfil\vadjust{\nobreak}\break
+ \else
+ \space % type on same line, so just followed by a space
+ \fi
+ \fi % no return type
+ #3% output function name
+ }%
+ {\rm\enskip}% hskip 0.5 em of \tenrm
+ %
+ \boldbrax
+ % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name. This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable. Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+ % use sl by default (not ttsl),
+ % tt for the names.
+ \df \sl \hyphenchar\font=0
+ %
+ % On the other hand, if an argument has two dashes (for instance), we
+ % want a way to get ttsl. We used to recommend @var for that, so
+ % leave the code in, but it's strange for @var to lead to typewriter.
+ % Nowadays we recommend @code, since the difference between a ttsl hyphen
+ % and a tt hyphen is pretty tiny. @code also disables ?` !`.
+ \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
+ #1%
+ \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ \global\let& = \&
+
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
+}
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
+}
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+ \message{Warning: unbalanced parentheses in @def...}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \message{Warning: unbalanced square brackets in @def...}%
+ \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\thisisundefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
+\fi
+
+\let\aftermacroxxx\relax
+\def\aftermacro{\aftermacroxxx}
+
+% alias because \c means cedilla in @tex or @math
+\let\texinfoc=\c
+
+% Used at the time of macro expansion.
+% Argument is macro body with arguments substituted
+\def\scanmacro#1{%
+ \newlinechar`\^^M
+ \def\xprocessmacroarg{\eatspaces}%
+ %
+ % Process the macro body under the current catcode regime.
+ \scantokens{#1\texinfoc}\aftermacro%
+ %
+ % The \c is to remove the \newlinechar added by \scantokens, and
+ % can be noticed by \parsearg.
+ % The \aftermacro allows a \comment at the end of the macro definition
+ % to duplicate itself past the final \newlinechar added by \scantokens:
+ % this is used in the definition of \group to comment out a newline. We
+ % don't do the same for \c to support Texinfo files with macros that ended
+ % with a @c, which should no longer be necessary.
+ % We avoid surrounding the call to \scantokens with \bgroup and \egroup
+ % to allow macros to open or close groups themselves.
+}
+
+\def\scanexp#1{%
+ \bgroup
+ % Undo catcode changes of \startcontents and \printindex
+ % When called from @insertcopying or (short)caption, we need active
+ % backslash to get it printed correctly.
+ % FIXME: This may not be needed.
+ %\catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+ \edef\temp{\noexpand\scanmacro{#1}}%
+ \temp
+ \egroup
+}
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+
+% List of all defined macros in the form
+% \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+ \toks0 = \expandafter{\macrolist\definedummyword#1}%
+ \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \
+% to recognize macro arguments; this is the job of \mbodybackslash.
+%
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion. Must do this non-globally, to
+% confine the change to the current group.
+%
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+%
+\def\scanctxt{% used as subroutine
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+ \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+}
+
+\def\scanargctxt{% used for copying and captions, not macros.
+ \scanctxt
+ \catcode`\@=\other
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{% used for @macro definitions
+ \scanctxt
+ \catcode`\ =\other
+ \catcode`\@=\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+% Used when scanning braced macro arguments. Note, however, that catcode
+% changes here are ineffectual if the macro invocation was nested inside
+% an argument to another Texinfo command.
+\def\macroargctxt{%
+ \scanctxt
+ \catcode`\ =\active
+ \catcode`\^^M=\other
+ \catcode`\\=\active
+}
+
+\def\macrolineargctxt{% used for whole-line arguments without braces
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+%
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\margbackslash#1{\char`\#1 }
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0\relax
+ \else
+ \expandafter\parsemargdef \argl;%
+ \if\paramno>256\relax
+ \ifx\eTeXversion\thisisundefined
+ \errhelp = \EMsimple
+ \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
+ \fi
+ \fi
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ \addtomacrolist{\the\macname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\parseargdef\unmacro{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\definedummyword\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx #1\relax
+ % remove this
+ \else
+ \noexpand\definedummyword \noexpand#1%
+ \fi
+}
+
+% \getargs -- Parse the arguments to a @macro line. Set \macname to
+% the name of the macro, and \argl to the braced argument list.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname#1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+% This made use of the feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+
+% Parse the optional {params} list to @macro or @rmacro.
+% Set \paramno to the number of arguments,
+% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
+% three-param macro.) Define \macarg.BLAH for each BLAH in the params
+% list to some hook where the argument is to be expanded. If there are
+% less than 10 arguments that hook is to be replaced by ##N where N
+% is the position in that list, that is to say the macro arguments are to be
+% defined `a la TeX in the macro body.
+%
+% That gets used by \mbodybackslash (above).
+%
+% If there are 10 or more arguments, a different technique is used: see
+% \parsemmanyargdef.
+%
+\def\parsemargdef#1;{%
+ \paramno=0\def\paramlist{}%
+ \let\hash\relax
+ % \hash is redefined to `#' later to get it into definitions
+ \let\processmacroarg\relax
+ \parsemargdefxxx#1,;,%
+ \ifnum\paramno<10\relax\else
+ \paramno0\relax
+ \parsemmanyargdef@@#1,;,% 10 or more arguments
+ \fi
+}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\processmacroarg{\hash\the\paramno}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+
+% \parsemacbody, \parsermacbody
+%
+% Read recursive and nonrecursive macro bodies. (They're different since
+% rec and nonrec macros end differently.)
+%
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
+% body to be transformed.
+% Set \macrobody to the body of the macro, and call \defmacro.
+%
+{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+
+% Make @ a letter, so that we can make private-to-Texinfo macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
+
+%%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%%
+
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because of
+% the catcode regime under which the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, no macro can have more than 256 arguments (else error).
+%
+% In case that there are 10 or more arguments we parse again the arguments
+% list to set new definitions for the \macarg.BLAH macros corresponding to
+% each BLAH argument. It was anyhow needed to parse already once this list
+% in order to count the arguments, and as macros with at most 9 arguments
+% are by far more frequent than macro with 10 or more arguments, defining
+% twice the \macarg.BLAH macros does not cost too much processing power.
+\def\parsemmanyargdef@@#1,{%
+ \if#1;\let\next=\relax
+ \else
+ \let\next=\parsemmanyargdef@@
+ \edef\tempb{\eatspaces{#1}}%
+ \expandafter\def\expandafter\tempa
+ \expandafter{\csname macarg.\tempb\endcsname}%
+ % Note that we need some extra \noexpand\noexpand, this is because we
+ % don't want \the to be expanded in the \parsermacbody as it uses an
+ % \xdef .
+ \expandafter\edef\tempa
+ {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
+ \advance\paramno by 1\relax
+ \fi\next}
+
+
+\let\endargs@\relax
+\let\nil@\relax
+\def\nilm@{\nil@}%
+\long\def\nillm@{\nil@}%
+
+% This macro is expanded during the Texinfo macro expansion, not during its
+% definition. It gets all the arguments' values and assigns them to macros
+% macarg.ARGNAME
+%
+% #1 is the macro name
+% #2 is the list of argument names
+% #3 is the list of argument values
+\def\getargvals@#1#2#3{%
+ \def\macargdeflist@{}%
+ \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
+ \def\paramlist{#2,\nil@}%
+ \def\macroname{#1}%
+ \begingroup
+ \macroargctxt
+ \def\argvaluelist{#3,\nil@}%
+ \def\@tempa{#3}%
+ \ifx\@tempa\empty
+ \setemptyargvalues@
+ \else
+ \getargvals@@
+ \fi
+}
+\def\getargvals@@{%
+ \ifx\paramlist\nilm@
+ % Some sanity check needed here that \argvaluelist is also empty.
+ \ifx\argvaluelist\nillm@
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Too many arguments in macro `\macroname'!}%
+ \fi
+ \let\next\macargexpandinbody@
+ \else
+ \ifx\argvaluelist\nillm@
+ % No more arguments values passed to macro. Set remaining named-arg
+ % macros to empty.
+ \let\next\setemptyargvalues@
+ \else
+ % pop current arg name into \@tempb
+ \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\paramlist}%
+ % pop current argument value into \@tempc
+ \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\argvaluelist}%
+ % Here \@tempb is the current arg name and \@tempc is the current arg value.
+ % First place the new argument macro definition into \@tempd
+ \expandafter\macname\expandafter{\@tempc}%
+ \expandafter\let\csname macarg.\@tempb\endcsname\relax
+ \expandafter\def\expandafter\@tempe\expandafter{%
+ \csname macarg.\@tempb\endcsname}%
+ \edef\@tempd{\long\def\@tempe{\the\macname}}%
+ \push@\@tempd\macargdeflist@
+ \let\next\getargvals@@
+ \fi
+ \fi
+ \next
+}
+
+\def\push@#1#2{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter#1#2}%
+}
+
+% Replace arguments by their values in the macro body, and place the result
+% in macro \@tempa.
+%
+\def\macvalstoargs@{%
+ % To do this we use the property that token registers that are \the'ed
+ % within an \edef expand only once. So we are going to place all argument
+ % values into respective token registers.
+ %
+ % First we save the token context, and initialize argument numbering.
+ \begingroup
+ \paramno0\relax
+ % Then, for each argument number #N, we place the corresponding argument
+ % value into a new token list register \toks#N
+ \expandafter\putargsintokens@\saveparamlist@,;,%
+ % Then, we expand the body so that argument are replaced by their
+ % values. The trick for values not to be expanded themselves is that they
+ % are within tokens and that tokens expand only once in an \edef .
+ \edef\@tempc{\csname mac.\macroname .body\endcsname}%
+ % Now we restore the token stack pointer to free the token list registers
+ % which we have used, but we make sure that expanded body is saved after
+ % group.
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
+ }
+
+% Define the named-macro outside of this group and then close this group.
+%
+\def\macargexpandinbody@{%
+ \expandafter
+ \endgroup
+ \macargdeflist@
+ % First the replace in body the macro arguments by their values, the result
+ % is in \@tempa .
+ \macvalstoargs@
+ % Then we point at the \norecurse or \gobble (for recursive) macro value
+ % with \@tempb .
+ \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
+ % Depending on whether it is recursive or not, we need some tailing
+ % \egroup .
+ \ifx\@tempb\gobble
+ \let\@tempc\relax
+ \else
+ \let\@tempc\egroup
+ \fi
+ % And now we do the real job:
+ \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
+ \@tempd
+}
+
+\def\putargsintokens@#1,{%
+ \if#1;\let\next\relax
+ \else
+ \let\next\putargsintokens@
+ % First we allocate the new token list register, and give it a temporary
+ % alias \@tempb .
+ \toksdef\@tempb\the\paramno
+ % Then we place the argument value into that token list register.
+ \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
+ \expandafter\@tempb\expandafter{\@tempa}%
+ \advance\paramno by 1\relax
+ \fi
+ \next
+}
+
+% Trailing missing arguments are set to empty.
+%
+\def\setemptyargvalues@{%
+ \ifx\paramlist\nilm@
+ \let\next\macargexpandinbody@
+ \else
+ \expandafter\setemptyargvaluesparser@\paramlist\endargs@
+ \let\next\setemptyargvalues@
+ \fi
+ \next
+}
+
+\def\setemptyargvaluesparser@#1,#2\endargs@{%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter\def\csname macarg.#1\endcsname{}}%
+ \push@\@tempa\macargdeflist@
+ \def\paramlist{#2}%
+}
+
+% #1 is the element target macro
+% #2 is the list macro
+% #3,#4\endargs@ is the list value
+\def\pop@#1#2#3,#4\endargs@{%
+ \def#1{#3}%
+ \def#2{#4}%
+}
+\long\def\longpop@#1#2#3,#4\endargs@{%
+ \long\def#1{#3}%
+ \long\def#2{#4}%
+}
+
+
+%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
+
+
+
+% Remove following spaces at the expansion stage.
+% This works because spaces are discarded before each argument when TeX is
+% getting the arguments for a macro.
+% This must not be immediately followed by a }.
+\long\def\gobblespaces#1{#1}
+
+% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
+% \macrobody has the body of the macro in it, with placeholders for
+% its parameters, looking like "\processmacroarg{\hash 1}".
+% \paramno is the number of parameters
+% \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
+% There are eight cases: recursive and nonrecursive macros of zero, one,
+% up to nine, and many arguments.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in: @include reads the file inside a group.
+%
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifnum\paramno=1
+ \def\processmacroarg{\gobblespaces}%
+ % This removes the pair of braces around the argument. We don't
+ % use \eatspaces, because this can cause ends of lines to be lost
+ % when the argument to \eatspaces is read, leading to line-based
+ % commands like "@itemize" not being read correctly.
+ \else
+ \def\processmacroarg{\xprocessmacroarg}%
+ \let\xprocessmacroarg\relax
+ \fi
+ \ifrecursive %%%%%%%%%%%%%% Recursive %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\scanmacro{\macrobody}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname @@@@\endcsname{%
+ \noexpand\gobblespaces##1\empty}%
+ % The \empty is for \gobblespaces in case #1 is empty
+ }%
+ \expandafter\xdef\csname\the\macname @@@@\endcsname##1{%
+ \egroup\noexpand\scanmacro{\macrobody}}%
+ \else
+ \ifnum\paramno<10\relax % at most 9
+ % See non-recursive section below for comments
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\expandafter
+ \noexpand\macroargctxt
+ \noexpand\expandafter
+ \expandafter\noexpand\csname\the\macname @@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+ \noexpand\passargtomacro
+ \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname @@@@\endcsname\paramlist{%
+ \egroup\noexpand\scanmacro{\macrobody}}%
+ \else % 10 or more
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
+ \fi
+ \fi
+ \else %%%%%%%%%%%%%%%%%%%%%% Non-recursive %%%%%%%%%%%%%%%%%%%%%%%%%%
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\scanmacro{\macrobody}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname @@@@\endcsname{%
+ \noexpand\gobblespaces##1\empty}%
+ % The \empty is for \gobblespaces in case #1 is empty
+ }%
+ \expandafter\xdef\csname\the\macname @@@@\endcsname##1{%
+ \egroup
+ \noexpand\scanmacro{\macrobody}%
+ }%
+ \else % at most 9
+ \ifnum\paramno<10\relax
+ % @MACNAME sets the context for reading the macro argument
+ % @MACNAME@@ gets the argument, processes backslashes and appends a
+ % comma.
+ % @MACNAME@@@ removes braces surrounding the argument list.
+ % @MACNAME@@@@ scans the macro body with arguments substituted.
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\expandafter % This \expandafter skip any spaces after the
+ \noexpand\macroargctxt % macro before we change the catcode of space.
+ \noexpand\expandafter
+ \expandafter\noexpand\csname\the\macname @@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+ \noexpand\passargtomacro
+ \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname @@@@\endcsname\paramlist{%
+ \egroup\noexpand\scanmacro{\macrobody}}%
+ \else % 10 or more:
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
+ \fi
+ \fi
+ \fi}
+
+\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+{\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape
+@catcode`@_=11 % private names
+@catcode`@!=11 % used as argument separator
+
+% \passargtomacro#1#2 -
+% Call #1 with a list of tokens #2, with any doubled backslashes in #2
+% compressed to one.
+%
+% This implementation works by expansion, and not execution (so we cannot use
+% \def or similar). This reduces the risk of this failing in contexts where
+% complete expansion is done with no execution (for example, in writing out to
+% an auxiliary file for an index entry).
+%
+% State is kept in the input stream: the argument passed to
+% @look_ahead, @gobble_and_check_finish and @add_segment is
+%
+% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input)
+%
+% where:
+% THE_MACRO - name of the macro we want to call
+% ARG_RESULT - argument list we build to pass to that macro
+% PENDING_BS - either a backslash or nothing
+% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
+
+@gdef@passargtomacro#1#2{%
+ @add_segment #1!{}@relax#2\@_finish\%
+}
+@gdef@_finish{@_finishx} @global@let@_finishx@relax
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 used to look ahead
+%
+% If the next token is not a backslash, process the rest of the argument;
+% otherwise, remove the next token.
+@gdef@look_ahead#1!#2#3#4{%
+ @ifx#4\%
+ @expandafter@gobble_and_check_finish
+ @else
+ @expandafter@add_segment
+ @fi#1!{#2}#4#4%
+}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 should be a backslash, which is gobbled.
+% #5 looks ahead
+%
+% Double backslash found. Add a single backslash, and look ahead.
+@gdef@gobble_and_check_finish#1!#2#3#4#5{%
+ @add_segment#1\!{}#5#5%
+}
+
+@gdef@is_fi{@fi}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 is input stream until next backslash
+%
+% Input stream is either at the start of the argument, or just after a
+% backslash sequence, either a lone backslash, or a doubled backslash.
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
+% finish; otherwise, append to ARG_RESULT the segment of the argument up until
+% the next backslash. PENDING_BACKSLASH contains a backslash to represent
+% a backslash just before the start of the input stream that has not been
+% added to ARG_RESULT.
+@gdef@add_segment#1!#2#3#4\{%
+@ifx#3@_finish
+ @call_the_macro#1!%
+@else
+ % append the pending backslash to the result, followed by the next segment
+ @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
+ % this @fi is discarded by @look_ahead.
+ % we can't get rid of it with \expandafter because we don't know how
+ % long #4 is.
+}
+
+% #1 - THE_MACRO
+% #2 - ARG_RESULT
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
+% conditional.
+@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
+
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \braceorline MAC is used for a one-argument macro MAC. It checks
+% whether the next non-whitespace character is a {. It sets the context
+% for reading the argument (slightly different in the two cases). Then,
+% to read the argument, in the whole-line case, it then calls the regular
+% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
+%
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup
+ \macroargctxt
+ \expandafter\passargtomacro
+ \else
+ \macrolineargctxt\expandafter\parsearg
+ \fi \macnamexxx}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Make them active and then expand them all to nothing.
+%
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \addtomacrolist{#1}%
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{%
+ \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
+\let\nwnode=\node
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
+ \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \lastsection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \requireauxfile
+ \atdummies % preserve commands, but don't expand them
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\lastsection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
+ }%
+ \fi
+}
+
+% @xrefautosectiontitle on|off says whether @section(ing) names are used
+% automatically in xrefs, if the third arg is not explicitly specified.
+% This was provided as a "secret" @set xref-automatic-section-title
+% variable, now it's official.
+%
+\parseargdef\xrefautomaticsectiontitle{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+%
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref{\putwordsee{} \xrefXX}
+\def\xref{\putwordSee{} \xrefXX}
+\def\ref{\xrefXX}
+
+\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
+\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
+%
+\newbox\toprefbox
+\newbox\printedrefnamebox
+\newbox\infofilenamebox
+\newbox\printedmanualbox
+%
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ %
+ % Get args without leading/trailing spaces.
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+ %
+ \def\infofilename{\ignorespaces #4}%
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
+ %
+ \def\printedmanual{\ignorespaces #5}%
+ \setbox\printedmanualbox = \hbox{\printedmanual\unskip}%
+ %
+ % If the printed reference name (arg #3) was not explicitly given in
+ % the @xref, figure out what we want to use.
+ \ifdim \wd\printedrefnamebox = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
+ % Not auto section-title: use node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Auto section-title: use chapter/section title inside
+ % the square brackets if we have it.
+ \ifdim \wd\printedmanualbox > 0pt
+ % It is in another manual, so we don't have it; use node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We (should) know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % Make link in pdf output.
+ \ifpdf
+ {\indexnofonts
+ \turnoffactive
+ \makevalueexpandable
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \edef\pdfxrefdest{#1}%
+ \ifx\pdfxrefdest\empty
+ \def\pdfxrefdest{Top}% no empty targets
+ \else
+ \txiescapepdf\pdfxrefdest % escape PDF special chars
+ \fi
+ %
+ \leavevmode
+ \startlink attr{/Border [0 0 0]}%
+ \ifnum\filenamelength>0
+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
+ \else
+ goto name{\pdfmkpgn{\pdfxrefdest}}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \fi
+ %
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". We distinguish them by the
+ % LABEL-title being set to a magic string.
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd\printedrefnamebox = 0pt
+ \refx{#1-snt}{}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % If the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd\printedmanualbox > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox to print the node names, TeX does not insert
+ % empty discretionaries after hyphens, which means that it will not
+ % find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens,
+ % this is a loss. Therefore, we give the text of the node name
+ % again, so it is as if TeX is seeing it for the first time.
+ %
+ \ifdim \wd\printedmanualbox > 0pt
+ % Cross-manual reference with a printed manual name.
+ %
+ \crossmanualxref{\cite{\printedmanual\unskip}}%
+ %
+ \else\ifdim \wd\infofilenamebox > 0pt
+ % Cross-manual reference with only an info filename (arg 4), no
+ % printed manual name (arg 5). This is essentially the same as
+ % the case above; we output the filename, since we have nothing else.
+ %
+ \crossmanualxref{\code{\infofilename\unskip}}%
+ %
+ \else
+ % Reference within this manual.
+ %
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % output the `[mynode]' via the macro below so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ % But we always want a comma and a space:
+ ,\space
+ %
+ % output the `page 3'.
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ \ifx,\tokenafterxref
+ \else\ifx.\tokenafterxref
+ \else\ifx;\tokenafterxref
+ \else\ifx)\tokenafterxref
+ \else,% add a , if xref not followed by punctuation
+ \fi\fi\fi\fi
+ \fi\fi
+ \fi
+ \endlink
+\endgroup}
+
+% Output a cross-manual xref to #1. Used just above (twice).
+%
+% Only include the text "Section ``foo'' in" if the foo is neither
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
+% "see The Foo Manual", the idea being to refer to the whole manual.
+%
+% But, this being TeX, we can't easily compare our node name against the
+% string "Top" while ignoring the possible spaces before and after in
+% the input. By adding the arbitrary 7sp below, we make it much less
+% likely that a real node name would have the same width as "Top" (e.g.,
+% in a monospaced font). Hopefully it will never happen in practice.
+%
+% For the same basic reason, we retypeset the "Top" at every
+% reference, since the current font is indeterminate.
+%
+\def\crossmanualxref#1{%
+ \setbox\toprefbox = \hbox{Top\kern7sp}%
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+ \ifdim \wd2 > 7sp % nonempty?
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top?
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space
+ \fi
+ \fi
+ #1%
+}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+ \requireauxfile
+ {%
+ \indexnofonts
+ \otherbackslash
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ {\toks0 = {#1}% avoid expansion of possibly-complex value
+ \message{\linenumber Undefined cross reference `\the\toks0'.}}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file. Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions). But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+ {% The node name might contain 8-bit characters, which in our current
+ % implementation are changed to commands like @'e. Don't let these
+ % mess up the control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safexrefname{#1}%
+ }%
+ %
+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR\safexrefname\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+ {\safexrefname}}%
+ \fi
+}
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate at the beginning of the file.
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% Used when writing to the aux file, or when using data from it.
+\def\requireauxfile{%
+ \iflinks
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
+ \fi
+ \global\let\requireauxfile=\relax % Only do this once.
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readdatafile{aux}%
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\setupdatafile{%
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
+ % supported in the main text, it doesn't seem desirable. Furthermore,
+ % that is not enough: for node names that actually contain a ^
+ % character, we would end up writing a line like this: 'xrdef {'hat
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+ % argument, and \hat is not an expandable control sequence. It could
+ % all be worked out, but why? Either we support ^^ or we don't.
+ %
+ % The other change necessary for this was to define \auxhat:
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+ % and then to call \auxhat in \setq.
+ %
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ % This is to support \ in node names and titles, since the \
+ % characters end up in a \csname. It's easier than
+ % leaving it active and making its active definition an actual \
+ % character. What I don't understand is why it works in the *value*
+ % of the xrdef. Seems like it should be a catcode12 \, and that
+ % should not typeset properly. But it works, so I'm moving on for
+ % now. --karl, 15jan04.
+ \catcode`\\=\other
+ %
+ % Make the characters 128-255 be printing characters.
+ {\setnonasciicharscatcodenonglobal\other}%
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+ \setupdatafile
+ \input\jobname.#1
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for Info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\gdef\dofootnote{%
+ \insert\footins\bgroup
+ %
+ % Nested footnotes are not supported in TeX, that would take a lot
+ % more work. (\startsavinginserts does not suffice.)
+ \let\footnote=\errfootnotenest
+ %
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\pagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ %
+ % Invoke rest of plain TeX footnote routine.
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+\def\errfootnotenest{%
+ \errhelp=\EMsimple
+ \errmessage{Nested footnotes not supported in texinfo.tex,
+ even though they work in makeinfo; sorry}
+}
+
+\def\errfootnoteheading{%
+ \errhelp=\EMsimple
+ \errmessage{Footnotes in chapters, sections, etc., are not supported}
+}
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+%
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\thisisundefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \else \ifx\centersub\centerV
+ % for @center @image, we need a vbox so we can have our vertical space
+ \imagevmodetrue
+ \vbox\bgroup % vbox has better behavior than vtop herev
+ \fi\fi
+ %
+ \ifimagevmode
+ \nobreak\medskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \fi
+ %
+ % Leave vertical mode so that indentation from an enclosing
+ % environment such as @quotation is respected.
+ % However, if we're at the top level, we don't want the
+ % normal paragraph indentation.
+ % On the other hand, if we are in the case of @center @image, we don't
+ % want to start a paragraph, which will create a hsize-width box and
+ % eradicate the centering.
+ \ifx\centersub\centerV\else \noindent \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode
+ \medskip % space after a standalone image
+ \fi
+ \ifx\centersub\centerV \egroup \fi
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \lastsection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\lastsection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
+ \fi
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \requireauxfile
+ \atdummies
+ %
+ % since we read the caption text in the macro world, where ^^M
+ % is turned into a normal character, we have to scan it back, so
+ % we don't write the literal three characters "^^M" into the aux file.
+ \scanexp{%
+ \xdef\noexpand\gtemp{%
+ \ifx\thisshortcaption\empty
+ \thiscaption
+ \else
+ \thisshortcaption
+ \fi
+ }%
+ }%
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ % place the captured inserts
+ %
+ % BEWARE: when the floats start floating, we have to issue warning
+ % whenever an insert appears inside a float which could possibly
+ % float. --kasal, 26may04
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \lastsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
+ \else
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
+ \fi
+}
+
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
+
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding. Single argument is the language
+% (de) or locale (de_DE) abbreviation.
+%
+{
+ \catcode`\_ = \active
+ \globaldefs=1
+\parseargdef\documentlanguage{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file by the name they passed if it exists.
+ \let_ = \normalunderscore % normal _ character for filename test
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \documentlanguagetrywithoutunderscore #1_\finish
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup % end raw TeX
+}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages. This means we can support hyphenation in
+% Texinfo, at least to some extent. (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+ % do not set the language if the name is undefined in the current TeX.
+ \expandafter\ifx\csname lang@#1\endcsname \relax
+ \message{no patterns for #1}%
+ \else
+ \global\language = \csname lang@#1\endcsname
+ \fi
+ % but there is no harm in adjusting the hyphenmin values regardless.
+ \global\lefthyphenmin = #2\relax
+ \global\righthyphenmin = #3\relax
+}
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \global\catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
+\def\documentencodingzzz#1{%
+ % Encoding being declared for the document.
+ \def\declaredencoding{\csname #1.enc\endcsname}%
+ %
+ % Supported encodings: names converted to tokens in order to be able
+ % to compare them with \ifx.
+ \def\ascii{\csname US-ASCII.enc\endcsname}%
+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+ \def\utfeight{\csname UTF-8.enc\endcsname}%
+ %
+ \ifx \declaredencoding \ascii
+ \asciichardefs
+ %
+ \else \ifx \declaredencoding \lattwo
+ \setnonasciicharscatcode\active
+ \lattwochardefs
+ %
+ \else \ifx \declaredencoding \latone
+ \setnonasciicharscatcode\active
+ \latonechardefs
+ %
+ \else \ifx \declaredencoding \latnine
+ \setnonasciicharscatcode\active
+ \latninechardefs
+ %
+ \else \ifx \declaredencoding \utfeight
+ \setnonasciicharscatcode\active
+ % since we already invoked \utfeightchardefs at the top level
+ % (below), do not re-invoke it, then our check for duplicated
+ % definitions triggers. Making non-ascii chars active is enough.
+ %
+ \else
+ \message{Ignoring unknown document encoding: #1.}%
+ %
+ \fi % utfeight
+ \fi % latnine
+ \fi % latone
+ \fi % lattwo
+ \fi % ascii
+}
+
+% emacs-page
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+ \gdef^^a0{\tie}
+ \gdef^^a1{\exclamdown}
+ \gdef^^a2{{\tcfont \char162}} % cent
+ \gdef^^a3{\pounds}
+ \gdef^^a4{{\tcfont \char164}} % currency
+ \gdef^^a5{{\tcfont \char165}} % yen
+ \gdef^^a6{{\tcfont \char166}} % broken bar
+ \gdef^^a7{\S}
+ \gdef^^a8{\"{}}
+ \gdef^^a9{\copyright}
+ \gdef^^aa{\ordf}
+ \gdef^^ab{\guillemetleft}
+ \gdef^^ac{\ensuremath\lnot}
+ \gdef^^ad{\-}
+ \gdef^^ae{\registeredsymbol}
+ \gdef^^af{\={}}
+ %
+ \gdef^^b0{\textdegree}
+ \gdef^^b1{$\pm$}
+ \gdef^^b2{$^2$}
+ \gdef^^b3{$^3$}
+ \gdef^^b4{\'{}}
+ \gdef^^b5{$\mu$}
+ \gdef^^b6{\P}
+ \gdef^^b7{\ensuremath\cdot}
+ \gdef^^b8{\cedilla\ }
+ \gdef^^b9{$^1$}
+ \gdef^^ba{\ordm}
+ \gdef^^bb{\guillemetright}
+ \gdef^^bc{$1\over4$}
+ \gdef^^bd{$1\over2$}
+ \gdef^^be{$3\over4$}
+ \gdef^^bf{\questiondown}
+ %
+ \gdef^^c0{\`A}
+ \gdef^^c1{\'A}
+ \gdef^^c2{\^A}
+ \gdef^^c3{\~A}
+ \gdef^^c4{\"A}
+ \gdef^^c5{\ringaccent A}
+ \gdef^^c6{\AE}
+ \gdef^^c7{\cedilla C}
+ \gdef^^c8{\`E}
+ \gdef^^c9{\'E}
+ \gdef^^ca{\^E}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\`I}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\"I}
+ %
+ \gdef^^d0{\DH}
+ \gdef^^d1{\~N}
+ \gdef^^d2{\`O}
+ \gdef^^d3{\'O}
+ \gdef^^d4{\^O}
+ \gdef^^d5{\~O}
+ \gdef^^d6{\"O}
+ \gdef^^d7{$\times$}
+ \gdef^^d8{\O}
+ \gdef^^d9{\`U}
+ \gdef^^da{\'U}
+ \gdef^^db{\^U}
+ \gdef^^dc{\"U}
+ \gdef^^dd{\'Y}
+ \gdef^^de{\TH}
+ \gdef^^df{\ss}
+ %
+ \gdef^^e0{\`a}
+ \gdef^^e1{\'a}
+ \gdef^^e2{\^a}
+ \gdef^^e3{\~a}
+ \gdef^^e4{\"a}
+ \gdef^^e5{\ringaccent a}
+ \gdef^^e6{\ae}
+ \gdef^^e7{\cedilla c}
+ \gdef^^e8{\`e}
+ \gdef^^e9{\'e}
+ \gdef^^ea{\^e}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\`{\dotless i}}
+ \gdef^^ed{\'{\dotless i}}
+ \gdef^^ee{\^{\dotless i}}
+ \gdef^^ef{\"{\dotless i}}
+ %
+ \gdef^^f0{\dh}
+ \gdef^^f1{\~n}
+ \gdef^^f2{\`o}
+ \gdef^^f3{\'o}
+ \gdef^^f4{\^o}
+ \gdef^^f5{\~o}
+ \gdef^^f6{\"o}
+ \gdef^^f7{$\div$}
+ \gdef^^f8{\o}
+ \gdef^^f9{\`u}
+ \gdef^^fa{\'u}
+ \gdef^^fb{\^u}
+ \gdef^^fc{\"u}
+ \gdef^^fd{\'y}
+ \gdef^^fe{\th}
+ \gdef^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+ % Encoding is almost identical to Latin1.
+ \latonechardefs
+ %
+ \gdef^^a4{\euro}
+ \gdef^^a6{\v S}
+ \gdef^^a8{\v s}
+ \gdef^^b4{\v Z}
+ \gdef^^b8{\v z}
+ \gdef^^bc{\OE}
+ \gdef^^bd{\oe}
+ \gdef^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+ \gdef^^a0{\tie}
+ \gdef^^a1{\ogonek{A}}
+ \gdef^^a2{\u{}}
+ \gdef^^a3{\L}
+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdef^^a5{\v L}
+ \gdef^^a6{\'S}
+ \gdef^^a7{\S}
+ \gdef^^a8{\"{}}
+ \gdef^^a9{\v S}
+ \gdef^^aa{\cedilla S}
+ \gdef^^ab{\v T}
+ \gdef^^ac{\'Z}
+ \gdef^^ad{\-}
+ \gdef^^ae{\v Z}
+ \gdef^^af{\dotaccent Z}
+ %
+ \gdef^^b0{\textdegree}
+ \gdef^^b1{\ogonek{a}}
+ \gdef^^b2{\ogonek{ }}
+ \gdef^^b3{\l}
+ \gdef^^b4{\'{}}
+ \gdef^^b5{\v l}
+ \gdef^^b6{\'s}
+ \gdef^^b7{\v{}}
+ \gdef^^b8{\cedilla\ }
+ \gdef^^b9{\v s}
+ \gdef^^ba{\cedilla s}
+ \gdef^^bb{\v t}
+ \gdef^^bc{\'z}
+ \gdef^^bd{\H{}}
+ \gdef^^be{\v z}
+ \gdef^^bf{\dotaccent z}
+ %
+ \gdef^^c0{\'R}
+ \gdef^^c1{\'A}
+ \gdef^^c2{\^A}
+ \gdef^^c3{\u A}
+ \gdef^^c4{\"A}
+ \gdef^^c5{\'L}
+ \gdef^^c6{\'C}
+ \gdef^^c7{\cedilla C}
+ \gdef^^c8{\v C}
+ \gdef^^c9{\'E}
+ \gdef^^ca{\ogonek{E}}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\v E}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\v D}
+ %
+ \gdef^^d0{\DH}
+ \gdef^^d1{\'N}
+ \gdef^^d2{\v N}
+ \gdef^^d3{\'O}
+ \gdef^^d4{\^O}
+ \gdef^^d5{\H O}
+ \gdef^^d6{\"O}
+ \gdef^^d7{$\times$}
+ \gdef^^d8{\v R}
+ \gdef^^d9{\ringaccent U}
+ \gdef^^da{\'U}
+ \gdef^^db{\H U}
+ \gdef^^dc{\"U}
+ \gdef^^dd{\'Y}
+ \gdef^^de{\cedilla T}
+ \gdef^^df{\ss}
+ %
+ \gdef^^e0{\'r}
+ \gdef^^e1{\'a}
+ \gdef^^e2{\^a}
+ \gdef^^e3{\u a}
+ \gdef^^e4{\"a}
+ \gdef^^e5{\'l}
+ \gdef^^e6{\'c}
+ \gdef^^e7{\cedilla c}
+ \gdef^^e8{\v c}
+ \gdef^^e9{\'e}
+ \gdef^^ea{\ogonek{e}}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\v e}
+ \gdef^^ed{\'{\dotless{i}}}
+ \gdef^^ee{\^{\dotless{i}}}
+ \gdef^^ef{\v d}
+ %
+ \gdef^^f0{\dh}
+ \gdef^^f1{\'n}
+ \gdef^^f2{\v n}
+ \gdef^^f3{\'o}
+ \gdef^^f4{\^o}
+ \gdef^^f5{\H o}
+ \gdef^^f6{\"o}
+ \gdef^^f7{$\div$}
+ \gdef^^f8{\v r}
+ \gdef^^f9{\ringaccent u}
+ \gdef^^fa{\'u}
+ \gdef^^fb{\H u}
+ \gdef^^fc{\"u}
+ \gdef^^fd{\'y}
+ \gdef^^fe{\cedilla t}
+ \gdef^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions. It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+ \ifx #1\relax
+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+ \else
+ \expandafter #1%
+ \fi
+}
+
+\begingroup
+ \catcode`\~13
+ \catcode`\"12
+
+ \def\UTFviiiLoop{%
+ \global\catcode\countUTFx\active
+ \uccode`\~\countUTFx
+ \uppercase\expandafter{\UTFviiiTmp}%
+ \advance\countUTFx by 1
+ \ifnum\countUTFx < \countUTFy
+ \expandafter\UTFviiiLoop
+ \fi}
+
+ \countUTFx = "C2
+ \countUTFy = "E0
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+ \UTFviiiLoop
+
+ \countUTFx = "E0
+ \countUTFy = "F0
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+ \UTFviiiLoop
+
+ \countUTFx = "F0
+ \countUTFy = "F4
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+ \UTFviiiLoop
+\endgroup
+
+\def\globallet{\global\let} % save some \expandafter's below
+
+% @U{xxxx} to produce U+xxxx, if we support it.
+\def\U#1{%
+ \expandafter\ifx\csname uni:#1\endcsname \relax
+ \errhelp = \EMsimple
+ \errmessage{Unicode character U+#1 not supported, sorry}%
+ \else
+ \csname uni:#1\endcsname
+ \fi
+}
+
+\begingroup
+ \catcode`\"=12
+ \catcode`\<=12
+ \catcode`\.=12
+ \catcode`\,=12
+ \catcode`\;=12
+ \catcode`\!=12
+ \catcode`\~=13
+ \gdef\DeclareUnicodeCharacter#1#2{%
+ \countUTFz = "#1\relax
+ %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
+ \begingroup
+ \parseXMLCharref
+ \def\UTFviiiTwoOctets##1##2{%
+ \csname u8:##1\string ##2\endcsname}%
+ \def\UTFviiiThreeOctets##1##2##3{%
+ \csname u8:##1\string ##2\string ##3\endcsname}%
+ \def\UTFviiiFourOctets##1##2##3##4{%
+ \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \gdef\UTFviiiTmp{#2}%
+ %
+ \expandafter\ifx\csname uni:#1\endcsname \relax \else
+ \message{Internal error, already defined: #1}%
+ \fi
+ %
+ % define an additional control sequence for this code point.
+ \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
+ \endgroup}
+
+ \gdef\parseXMLCharref{%
+ \ifnum\countUTFz < "A0\relax
+ \errhelp = \EMsimple
+ \errmessage{Cannot define Unicode char value < 00A0}%
+ \else\ifnum\countUTFz < "800\relax
+ \parseUTFviiiA,%
+ \parseUTFviiiB C\UTFviiiTwoOctets.,%
+ \else\ifnum\countUTFz < "10000\relax
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
+ \else
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiA!%
+ \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
+ \fi\fi\fi
+ }
+
+ \gdef\parseUTFviiiA#1{%
+ \countUTFx = \countUTFz
+ \divide\countUTFz by 64
+ \countUTFy = \countUTFz
+ \multiply\countUTFz by 64
+ \advance\countUTFx by -\countUTFz
+ \advance\countUTFx by 128
+ \uccode `#1\countUTFx
+ \countUTFz = \countUTFy}
+
+ \gdef\parseUTFviiiB#1#2#3#4{%
+ \advance\countUTFz by "#10\relax
+ \uccode `#3\countUTFz
+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
+% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
+% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
+% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
+% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
+%
+% Many of our renditions are less than wonderful, and all the missing
+% characters are available somewhere. Loading the necessary fonts
+% awaits user request. We can't truly support Unicode without
+% reimplementing everything that's been done in LaTeX for many years,
+% plus probably using luatex or xetex, and who knows what else.
+% We won't be doing that here in this simple file. But we can try to at
+% least make most of the characters not bomb out.
+%
+\def\utfeightchardefs{%
+ \DeclareUnicodeCharacter{00A0}{\tie}
+ \DeclareUnicodeCharacter{00A1}{\exclamdown}
+ \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
+ \DeclareUnicodeCharacter{00A3}{\pounds}
+ \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
+ \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
+ \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
+ \DeclareUnicodeCharacter{00A7}{\S}
+ \DeclareUnicodeCharacter{00A8}{\"{ }}
+ \DeclareUnicodeCharacter{00A9}{\copyright}
+ \DeclareUnicodeCharacter{00AA}{\ordf}
+ \DeclareUnicodeCharacter{00AB}{\guillemetleft}
+ \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}
+ \DeclareUnicodeCharacter{00AD}{\-}
+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
+ \DeclareUnicodeCharacter{00AF}{\={ }}
+
+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+ \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}
+ \DeclareUnicodeCharacter{00B2}{$^2$}
+ \DeclareUnicodeCharacter{00B3}{$^3$}
+ \DeclareUnicodeCharacter{00B4}{\'{ }}
+ \DeclareUnicodeCharacter{00B5}{$\mu$}
+ \DeclareUnicodeCharacter{00B6}{\P}
+ \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}
+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+ \DeclareUnicodeCharacter{00B9}{$^1$}
+ \DeclareUnicodeCharacter{00BA}{\ordm}
+ \DeclareUnicodeCharacter{00BB}{\guillemetright}
+ \DeclareUnicodeCharacter{00BC}{$1\over4$}
+ \DeclareUnicodeCharacter{00BD}{$1\over2$}
+ \DeclareUnicodeCharacter{00BE}{$3\over4$}
+ \DeclareUnicodeCharacter{00BF}{\questiondown}
+
+ \DeclareUnicodeCharacter{00C0}{\`A}
+ \DeclareUnicodeCharacter{00C1}{\'A}
+ \DeclareUnicodeCharacter{00C2}{\^A}
+ \DeclareUnicodeCharacter{00C3}{\~A}
+ \DeclareUnicodeCharacter{00C4}{\"A}
+ \DeclareUnicodeCharacter{00C5}{\AA}
+ \DeclareUnicodeCharacter{00C6}{\AE}
+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
+ \DeclareUnicodeCharacter{00C8}{\`E}
+ \DeclareUnicodeCharacter{00C9}{\'E}
+ \DeclareUnicodeCharacter{00CA}{\^E}
+ \DeclareUnicodeCharacter{00CB}{\"E}
+ \DeclareUnicodeCharacter{00CC}{\`I}
+ \DeclareUnicodeCharacter{00CD}{\'I}
+ \DeclareUnicodeCharacter{00CE}{\^I}
+ \DeclareUnicodeCharacter{00CF}{\"I}
+
+ \DeclareUnicodeCharacter{00D0}{\DH}
+ \DeclareUnicodeCharacter{00D1}{\~N}
+ \DeclareUnicodeCharacter{00D2}{\`O}
+ \DeclareUnicodeCharacter{00D3}{\'O}
+ \DeclareUnicodeCharacter{00D4}{\^O}
+ \DeclareUnicodeCharacter{00D5}{\~O}
+ \DeclareUnicodeCharacter{00D6}{\"O}
+ \DeclareUnicodeCharacter{00D7}{\ensuremath\times}
+ \DeclareUnicodeCharacter{00D8}{\O}
+ \DeclareUnicodeCharacter{00D9}{\`U}
+ \DeclareUnicodeCharacter{00DA}{\'U}
+ \DeclareUnicodeCharacter{00DB}{\^U}
+ \DeclareUnicodeCharacter{00DC}{\"U}
+ \DeclareUnicodeCharacter{00DD}{\'Y}
+ \DeclareUnicodeCharacter{00DE}{\TH}
+ \DeclareUnicodeCharacter{00DF}{\ss}
+
+ \DeclareUnicodeCharacter{00E0}{\`a}
+ \DeclareUnicodeCharacter{00E1}{\'a}
+ \DeclareUnicodeCharacter{00E2}{\^a}
+ \DeclareUnicodeCharacter{00E3}{\~a}
+ \DeclareUnicodeCharacter{00E4}{\"a}
+ \DeclareUnicodeCharacter{00E5}{\aa}
+ \DeclareUnicodeCharacter{00E6}{\ae}
+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
+ \DeclareUnicodeCharacter{00E8}{\`e}
+ \DeclareUnicodeCharacter{00E9}{\'e}
+ \DeclareUnicodeCharacter{00EA}{\^e}
+ \DeclareUnicodeCharacter{00EB}{\"e}
+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
+
+ \DeclareUnicodeCharacter{00F0}{\dh}
+ \DeclareUnicodeCharacter{00F1}{\~n}
+ \DeclareUnicodeCharacter{00F2}{\`o}
+ \DeclareUnicodeCharacter{00F3}{\'o}
+ \DeclareUnicodeCharacter{00F4}{\^o}
+ \DeclareUnicodeCharacter{00F5}{\~o}
+ \DeclareUnicodeCharacter{00F6}{\"o}
+ \DeclareUnicodeCharacter{00F7}{\ensuremath\div}
+ \DeclareUnicodeCharacter{00F8}{\o}
+ \DeclareUnicodeCharacter{00F9}{\`u}
+ \DeclareUnicodeCharacter{00FA}{\'u}
+ \DeclareUnicodeCharacter{00FB}{\^u}
+ \DeclareUnicodeCharacter{00FC}{\"u}
+ \DeclareUnicodeCharacter{00FD}{\'y}
+ \DeclareUnicodeCharacter{00FE}{\th}
+ \DeclareUnicodeCharacter{00FF}{\"y}
+
+ \DeclareUnicodeCharacter{0100}{\=A}
+ \DeclareUnicodeCharacter{0101}{\=a}
+ \DeclareUnicodeCharacter{0102}{\u{A}}
+ \DeclareUnicodeCharacter{0103}{\u{a}}
+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}
+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}
+ \DeclareUnicodeCharacter{0106}{\'C}
+ \DeclareUnicodeCharacter{0107}{\'c}
+ \DeclareUnicodeCharacter{0108}{\^C}
+ \DeclareUnicodeCharacter{0109}{\^c}
+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
+ \DeclareUnicodeCharacter{010C}{\v{C}}
+ \DeclareUnicodeCharacter{010D}{\v{c}}
+ \DeclareUnicodeCharacter{010E}{\v{D}}
+ \DeclareUnicodeCharacter{010F}{d'}
+
+ \DeclareUnicodeCharacter{0110}{\DH}
+ \DeclareUnicodeCharacter{0111}{\dh}
+ \DeclareUnicodeCharacter{0112}{\=E}
+ \DeclareUnicodeCharacter{0113}{\=e}
+ \DeclareUnicodeCharacter{0114}{\u{E}}
+ \DeclareUnicodeCharacter{0115}{\u{e}}
+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}
+ \DeclareUnicodeCharacter{011A}{\v{E}}
+ \DeclareUnicodeCharacter{011B}{\v{e}}
+ \DeclareUnicodeCharacter{011C}{\^G}
+ \DeclareUnicodeCharacter{011D}{\^g}
+ \DeclareUnicodeCharacter{011E}{\u{G}}
+ \DeclareUnicodeCharacter{011F}{\u{g}}
+
+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+ \DeclareUnicodeCharacter{0122}{\cedilla{G}}
+ \DeclareUnicodeCharacter{0123}{\cedilla{g}}
+ \DeclareUnicodeCharacter{0124}{\^H}
+ \DeclareUnicodeCharacter{0125}{\^h}
+ \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}
+ \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}
+ \DeclareUnicodeCharacter{0128}{\~I}
+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
+ \DeclareUnicodeCharacter{012A}{\=I}
+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
+ \DeclareUnicodeCharacter{012C}{\u{I}}
+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+ \DeclareUnicodeCharacter{012E}{\ogonek{I}}
+ \DeclareUnicodeCharacter{012F}{\ogonek{i}}
+
+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
+ \DeclareUnicodeCharacter{0131}{\dotless{i}}
+ \DeclareUnicodeCharacter{0132}{IJ}
+ \DeclareUnicodeCharacter{0133}{ij}
+ \DeclareUnicodeCharacter{0134}{\^J}
+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+ \DeclareUnicodeCharacter{0136}{\cedilla{K}}
+ \DeclareUnicodeCharacter{0137}{\cedilla{k}}
+ \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}
+ \DeclareUnicodeCharacter{0139}{\'L}
+ \DeclareUnicodeCharacter{013A}{\'l}
+ \DeclareUnicodeCharacter{013B}{\cedilla{L}}
+ \DeclareUnicodeCharacter{013C}{\cedilla{l}}
+ \DeclareUnicodeCharacter{013D}{L'}% should kern
+ \DeclareUnicodeCharacter{013E}{l'}% should kern
+ \DeclareUnicodeCharacter{013F}{L\U{00B7}}
+
+ \DeclareUnicodeCharacter{0140}{l\U{00B7}}
+ \DeclareUnicodeCharacter{0141}{\L}
+ \DeclareUnicodeCharacter{0142}{\l}
+ \DeclareUnicodeCharacter{0143}{\'N}
+ \DeclareUnicodeCharacter{0144}{\'n}
+ \DeclareUnicodeCharacter{0145}{\cedilla{N}}
+ \DeclareUnicodeCharacter{0146}{\cedilla{n}}
+ \DeclareUnicodeCharacter{0147}{\v{N}}
+ \DeclareUnicodeCharacter{0148}{\v{n}}
+ \DeclareUnicodeCharacter{0149}{'n}
+ \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}
+ \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}
+ \DeclareUnicodeCharacter{014C}{\=O}
+ \DeclareUnicodeCharacter{014D}{\=o}
+ \DeclareUnicodeCharacter{014E}{\u{O}}
+ \DeclareUnicodeCharacter{014F}{\u{o}}
+
+ \DeclareUnicodeCharacter{0150}{\H{O}}
+ \DeclareUnicodeCharacter{0151}{\H{o}}
+ \DeclareUnicodeCharacter{0152}{\OE}
+ \DeclareUnicodeCharacter{0153}{\oe}
+ \DeclareUnicodeCharacter{0154}{\'R}
+ \DeclareUnicodeCharacter{0155}{\'r}
+ \DeclareUnicodeCharacter{0156}{\cedilla{R}}
+ \DeclareUnicodeCharacter{0157}{\cedilla{r}}
+ \DeclareUnicodeCharacter{0158}{\v{R}}
+ \DeclareUnicodeCharacter{0159}{\v{r}}
+ \DeclareUnicodeCharacter{015A}{\'S}
+ \DeclareUnicodeCharacter{015B}{\'s}
+ \DeclareUnicodeCharacter{015C}{\^S}
+ \DeclareUnicodeCharacter{015D}{\^s}
+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}
+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}
+
+ \DeclareUnicodeCharacter{0160}{\v{S}}
+ \DeclareUnicodeCharacter{0161}{\v{s}}
+ \DeclareUnicodeCharacter{0162}{\cedilla{T}}
+ \DeclareUnicodeCharacter{0163}{\cedilla{t}}
+ \DeclareUnicodeCharacter{0164}{\v{T}}
+ \DeclareUnicodeCharacter{0165}{\v{t}}
+ \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}
+ \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}
+ \DeclareUnicodeCharacter{0168}{\~U}
+ \DeclareUnicodeCharacter{0169}{\~u}
+ \DeclareUnicodeCharacter{016A}{\=U}
+ \DeclareUnicodeCharacter{016B}{\=u}
+ \DeclareUnicodeCharacter{016C}{\u{U}}
+ \DeclareUnicodeCharacter{016D}{\u{u}}
+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
+
+ \DeclareUnicodeCharacter{0170}{\H{U}}
+ \DeclareUnicodeCharacter{0171}{\H{u}}
+ \DeclareUnicodeCharacter{0172}{\ogonek{U}}
+ \DeclareUnicodeCharacter{0173}{\ogonek{u}}
+ \DeclareUnicodeCharacter{0174}{\^W}
+ \DeclareUnicodeCharacter{0175}{\^w}
+ \DeclareUnicodeCharacter{0176}{\^Y}
+ \DeclareUnicodeCharacter{0177}{\^y}
+ \DeclareUnicodeCharacter{0178}{\"Y}
+ \DeclareUnicodeCharacter{0179}{\'Z}
+ \DeclareUnicodeCharacter{017A}{\'z}
+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
+ \DeclareUnicodeCharacter{017D}{\v{Z}}
+ \DeclareUnicodeCharacter{017E}{\v{z}}
+ \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}
+
+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}
+ \DeclareUnicodeCharacter{01C5}{D\v{z}}
+ \DeclareUnicodeCharacter{01C6}{d\v{z}}
+ \DeclareUnicodeCharacter{01C7}{LJ}
+ \DeclareUnicodeCharacter{01C8}{Lj}
+ \DeclareUnicodeCharacter{01C9}{lj}
+ \DeclareUnicodeCharacter{01CA}{NJ}
+ \DeclareUnicodeCharacter{01CB}{Nj}
+ \DeclareUnicodeCharacter{01CC}{nj}
+ \DeclareUnicodeCharacter{01CD}{\v{A}}
+ \DeclareUnicodeCharacter{01CE}{\v{a}}
+ \DeclareUnicodeCharacter{01CF}{\v{I}}
+
+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
+ \DeclareUnicodeCharacter{01D1}{\v{O}}
+ \DeclareUnicodeCharacter{01D2}{\v{o}}
+ \DeclareUnicodeCharacter{01D3}{\v{U}}
+ \DeclareUnicodeCharacter{01D4}{\v{u}}
+
+ \DeclareUnicodeCharacter{01E2}{\={\AE}}
+ \DeclareUnicodeCharacter{01E3}{\={\ae}}
+ \DeclareUnicodeCharacter{01E6}{\v{G}}
+ \DeclareUnicodeCharacter{01E7}{\v{g}}
+ \DeclareUnicodeCharacter{01E8}{\v{K}}
+ \DeclareUnicodeCharacter{01E9}{\v{k}}
+
+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
+ \DeclareUnicodeCharacter{01F1}{DZ}
+ \DeclareUnicodeCharacter{01F2}{Dz}
+ \DeclareUnicodeCharacter{01F3}{dz}
+ \DeclareUnicodeCharacter{01F4}{\'G}
+ \DeclareUnicodeCharacter{01F5}{\'g}
+ \DeclareUnicodeCharacter{01F8}{\`N}
+ \DeclareUnicodeCharacter{01F9}{\`n}
+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}
+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}
+ \DeclareUnicodeCharacter{01FE}{\'{\O}}
+ \DeclareUnicodeCharacter{01FF}{\'{\o}}
+
+ \DeclareUnicodeCharacter{021E}{\v{H}}
+ \DeclareUnicodeCharacter{021F}{\v{h}}
+
+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}
+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}
+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
+
+ \DeclareUnicodeCharacter{0232}{\=Y}
+ \DeclareUnicodeCharacter{0233}{\=y}
+ \DeclareUnicodeCharacter{0237}{\dotless{j}}
+
+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
+
+ % Greek letters upper case
+ \DeclareUnicodeCharacter{0391}{{\it A}}
+ \DeclareUnicodeCharacter{0392}{{\it B}}
+ \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}
+ \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}
+ \DeclareUnicodeCharacter{0395}{{\it E}}
+ \DeclareUnicodeCharacter{0396}{{\it Z}}
+ \DeclareUnicodeCharacter{0397}{{\it H}}
+ \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}
+ \DeclareUnicodeCharacter{0399}{{\it I}}
+ \DeclareUnicodeCharacter{039A}{{\it K}}
+ \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}
+ \DeclareUnicodeCharacter{039C}{{\it M}}
+ \DeclareUnicodeCharacter{039D}{{\it N}}
+ \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}
+ \DeclareUnicodeCharacter{039F}{{\it O}}
+ \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}
+ \DeclareUnicodeCharacter{03A1}{{\it P}}
+ %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
+ \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}
+ \DeclareUnicodeCharacter{03A4}{{\it T}}
+ \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}
+ \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}
+ \DeclareUnicodeCharacter{03A7}{{\it X}}
+ \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}
+ \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}
+
+ % Vowels with accents
+ \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}
+ \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}
+ \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}
+ \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}
+ \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}
+ \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}
+
+ % Standalone accent
+ \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}
+
+ % Greek letters lower case
+ \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}
+ \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}
+ \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}
+ \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}
+ \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}
+ \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}
+ \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}
+ \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}
+ \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}
+ \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}
+ \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}
+ \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}
+ \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}
+ \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}
+ \DeclareUnicodeCharacter{03BF}{{\it o}} % omicron
+ \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}
+ \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}
+ \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}
+ \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}
+ \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}
+ \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}
+ \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}
+ \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}
+ \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}
+ \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}
+
+ % More Greek vowels with accents
+ \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}
+ \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}
+ \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}
+ \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}
+ \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}
+
+ % Variant Greek letters
+ \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}
+ \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}
+ \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}
+
+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
+
+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
+
+ \DeclareUnicodeCharacter{1E20}{\=G}
+ \DeclareUnicodeCharacter{1E21}{\=g}
+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
+ \DeclareUnicodeCharacter{1E26}{\"H}
+ \DeclareUnicodeCharacter{1E27}{\"h}
+
+ \DeclareUnicodeCharacter{1E30}{\'K}
+ \DeclareUnicodeCharacter{1E31}{\'k}
+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
+ \DeclareUnicodeCharacter{1E3E}{\'M}
+ \DeclareUnicodeCharacter{1E3F}{\'m}
+
+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
+
+ \DeclareUnicodeCharacter{1E54}{\'P}
+ \DeclareUnicodeCharacter{1E55}{\'p}
+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
+
+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
+
+ \DeclareUnicodeCharacter{1E7C}{\~V}
+ \DeclareUnicodeCharacter{1E7D}{\~v}
+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
+
+ \DeclareUnicodeCharacter{1E80}{\`W}
+ \DeclareUnicodeCharacter{1E81}{\`w}
+ \DeclareUnicodeCharacter{1E82}{\'W}
+ \DeclareUnicodeCharacter{1E83}{\'w}
+ \DeclareUnicodeCharacter{1E84}{\"W}
+ \DeclareUnicodeCharacter{1E85}{\"w}
+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
+ \DeclareUnicodeCharacter{1E8C}{\"X}
+ \DeclareUnicodeCharacter{1E8D}{\"x}
+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
+
+ \DeclareUnicodeCharacter{1E90}{\^Z}
+ \DeclareUnicodeCharacter{1E91}{\^z}
+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
+ \DeclareUnicodeCharacter{1E97}{\"t}
+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
+
+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
+
+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
+ \DeclareUnicodeCharacter{1EBC}{\~E}
+ \DeclareUnicodeCharacter{1EBD}{\~e}
+
+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
+
+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
+
+ \DeclareUnicodeCharacter{1EF2}{\`Y}
+ \DeclareUnicodeCharacter{1EF3}{\`y}
+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
+
+ \DeclareUnicodeCharacter{1EF8}{\~Y}
+ \DeclareUnicodeCharacter{1EF9}{\~y}
+
+ % Punctuation
+ \DeclareUnicodeCharacter{2013}{--}
+ \DeclareUnicodeCharacter{2014}{---}
+ \DeclareUnicodeCharacter{2018}{\quoteleft}
+ \DeclareUnicodeCharacter{2019}{\quoteright}
+ \DeclareUnicodeCharacter{201A}{\quotesinglbase}
+ \DeclareUnicodeCharacter{201C}{\quotedblleft}
+ \DeclareUnicodeCharacter{201D}{\quotedblright}
+ \DeclareUnicodeCharacter{201E}{\quotedblbase}
+ \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}
+ \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}
+ \DeclareUnicodeCharacter{2022}{\bullet}
+ \DeclareUnicodeCharacter{202F}{\thinspace}
+ \DeclareUnicodeCharacter{2026}{\dots}
+ \DeclareUnicodeCharacter{2039}{\guilsinglleft}
+ \DeclareUnicodeCharacter{203A}{\guilsinglright}
+
+ \DeclareUnicodeCharacter{20AC}{\euro}
+
+ \DeclareUnicodeCharacter{2192}{\expansion}
+ \DeclareUnicodeCharacter{21D2}{\result}
+
+ % Mathematical symbols
+ \DeclareUnicodeCharacter{2200}{\ensuremath\forall}
+ \DeclareUnicodeCharacter{2203}{\ensuremath\exists}
+ \DeclareUnicodeCharacter{2208}{\ensuremath\in}
+ \DeclareUnicodeCharacter{2212}{\minus}
+ \DeclareUnicodeCharacter{2217}{\ast}
+ \DeclareUnicodeCharacter{221E}{\ensuremath\infty}
+ \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}
+ \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}
+ \DeclareUnicodeCharacter{2229}{\ensuremath\cap}
+ \DeclareUnicodeCharacter{2261}{\equiv}
+ \DeclareUnicodeCharacter{2264}{\ensuremath\leq}
+ \DeclareUnicodeCharacter{2265}{\ensuremath\geq}
+ \DeclareUnicodeCharacter{2282}{\ensuremath\subset}
+ \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}
+
+ \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}
+ \DeclareUnicodeCharacter{2032}{\ensuremath\prime}
+ \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}
+ \DeclareUnicodeCharacter{2111}{\ensuremath\Im}
+ \DeclareUnicodeCharacter{2113}{\ensuremath\ell}
+ \DeclareUnicodeCharacter{2118}{\ensuremath\wp}
+ \DeclareUnicodeCharacter{211C}{\ensuremath\Re}
+ \DeclareUnicodeCharacter{2127}{\ensuremath\mho}
+ \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}
+ \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}
+ \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}
+ \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}
+ \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}
+ \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}
+ \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}
+ \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}
+ \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}
+ \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}
+ \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}
+ \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}
+ \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}
+ \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}
+ \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}
+ \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright}
+ \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}
+ \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}
+ \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}
+ \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}
+ \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}
+ \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}
+ \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}
+ \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}
+ \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto}
+ \DeclareUnicodeCharacter{2201}{\ensuremath\complement}
+ \DeclareUnicodeCharacter{2202}{\ensuremath\partial}
+ \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}
+ \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}
+ \DeclareUnicodeCharacter{2209}{\ensuremath\notin}
+ \DeclareUnicodeCharacter{220B}{\ensuremath\owns}
+ \DeclareUnicodeCharacter{220F}{\ensuremath\prod}
+ \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}
+ \DeclareUnicodeCharacter{2211}{\ensuremath\sum}
+ \DeclareUnicodeCharacter{2213}{\ensuremath\mp}
+ \DeclareUnicodeCharacter{2218}{\ensuremath\circ}
+ \DeclareUnicodeCharacter{221A}{\ensuremath\surd}
+ \DeclareUnicodeCharacter{221D}{\ensuremath\propto}
+ \DeclareUnicodeCharacter{2220}{\ensuremath\angle}
+ \DeclareUnicodeCharacter{2223}{\ensuremath\mid}
+ \DeclareUnicodeCharacter{2228}{\ensuremath\vee}
+ \DeclareUnicodeCharacter{222A}{\ensuremath\cup}
+ \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}
+ \DeclareUnicodeCharacter{222E}{\ensuremath\oint}
+ \DeclareUnicodeCharacter{223C}{\ensuremath\sim}
+ \DeclareUnicodeCharacter{2240}{\ensuremath\wr}
+ \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}
+ \DeclareUnicodeCharacter{2245}{\ensuremath\cong}
+ \DeclareUnicodeCharacter{2248}{\ensuremath\approx}
+ \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}
+ \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}
+ \DeclareUnicodeCharacter{2260}{\ensuremath\neq}
+ \DeclareUnicodeCharacter{226A}{\ensuremath\ll}
+ \DeclareUnicodeCharacter{226B}{\ensuremath\gg}
+ \DeclareUnicodeCharacter{227A}{\ensuremath\prec}
+ \DeclareUnicodeCharacter{227B}{\ensuremath\succ}
+ \DeclareUnicodeCharacter{2283}{\ensuremath\supset}
+ \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}
+ \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}
+ \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset}
+ \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset}
+ \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}
+ \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}
+ \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}
+ \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}
+ \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}
+ \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}
+ \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}
+ \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}
+ \DeclareUnicodeCharacter{2299}{\ensuremath\odot}
+ \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}
+ \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}
+ \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}
+ \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}
+ \DeclareUnicodeCharacter{22A8}{\ensuremath\models}
+ \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd}
+ \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd}
+ \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}
+ \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}
+ \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}
+ \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}
+ \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}
+ \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}
+ \DeclareUnicodeCharacter{22C6}{\ensuremath\star}
+ \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}
+ \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}
+ \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}
+ \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}
+ \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}
+ \DeclareUnicodeCharacter{2322}{\ensuremath\frown}
+ \DeclareUnicodeCharacter{2323}{\ensuremath\smile}
+
+ \DeclareUnicodeCharacter{25A1}{\ensuremath\Box}
+ \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}
+ \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}
+ \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}
+ \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}
+ \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond}
+ \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}
+ \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}
+ \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}
+ \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}
+ \DeclareUnicodeCharacter{266D}{\ensuremath\flat}
+ \DeclareUnicodeCharacter{266E}{\ensuremath\natural}
+ \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}
+ \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}
+ \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}
+ \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}
+ \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}
+ \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}
+ \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}
+ \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}
+ \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}
+ \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}
+ \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}
+ \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}
+ \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}
+ \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}
+ \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}
+ \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join}
+ \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}
+ \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}
+ \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}
+
+ \global\mathchardef\checkmark="1370 % actually the square root sign
+ \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}
+}% end of \utfeightchardefs
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+ \relax
+}
+
+% Latin1 (ISO-8859-1) character definitions.
+\def\nonasciistringdefs{%
+ \setnonasciicharscatcode\active
+ \def\defstringchar##1{\def##1{\string##1}}%
+ %
+ \defstringchar^^80\defstringchar^^81\defstringchar^^82\defstringchar^^83%
+ \defstringchar^^84\defstringchar^^85\defstringchar^^86\defstringchar^^87%
+ \defstringchar^^88\defstringchar^^89\defstringchar^^8a\defstringchar^^8b%
+ \defstringchar^^8c\defstringchar^^8d\defstringchar^^8e\defstringchar^^8f%
+ %
+ \defstringchar^^90\defstringchar^^91\defstringchar^^92\defstringchar^^93%
+ \defstringchar^^94\defstringchar^^95\defstringchar^^96\defstringchar^^97%
+ \defstringchar^^98\defstringchar^^99\defstringchar^^9a\defstringchar^^9b%
+ \defstringchar^^9c\defstringchar^^9d\defstringchar^^9e\defstringchar^^9f%
+ %
+ \defstringchar^^a0\defstringchar^^a1\defstringchar^^a2\defstringchar^^a3%
+ \defstringchar^^a4\defstringchar^^a5\defstringchar^^a6\defstringchar^^a7%
+ \defstringchar^^a8\defstringchar^^a9\defstringchar^^aa\defstringchar^^ab%
+ \defstringchar^^ac\defstringchar^^ad\defstringchar^^ae\defstringchar^^af%
+ %
+ \defstringchar^^b0\defstringchar^^b1\defstringchar^^b2\defstringchar^^b3%
+ \defstringchar^^b4\defstringchar^^b5\defstringchar^^b6\defstringchar^^b7%
+ \defstringchar^^b8\defstringchar^^b9\defstringchar^^ba\defstringchar^^bb%
+ \defstringchar^^bc\defstringchar^^bd\defstringchar^^be\defstringchar^^bf%
+ %
+ \defstringchar^^c0\defstringchar^^c1\defstringchar^^c2\defstringchar^^c3%
+ \defstringchar^^c4\defstringchar^^c5\defstringchar^^c6\defstringchar^^c7%
+ \defstringchar^^c8\defstringchar^^c9\defstringchar^^ca\defstringchar^^cb%
+ \defstringchar^^cc\defstringchar^^cd\defstringchar^^ce\defstringchar^^cf%
+ %
+ \defstringchar^^d0\defstringchar^^d1\defstringchar^^d2\defstringchar^^d3%
+ \defstringchar^^d4\defstringchar^^d5\defstringchar^^d6\defstringchar^^d7%
+ \defstringchar^^d8\defstringchar^^d9\defstringchar^^da\defstringchar^^db%
+ \defstringchar^^dc\defstringchar^^dd\defstringchar^^de\defstringchar^^df%
+ %
+ \defstringchar^^e0\defstringchar^^e1\defstringchar^^e2\defstringchar^^e3%
+ \defstringchar^^e4\defstringchar^^e5\defstringchar^^e6\defstringchar^^e7%
+ \defstringchar^^e8\defstringchar^^e9\defstringchar^^ea\defstringchar^^eb%
+ \defstringchar^^ec\defstringchar^^ed\defstringchar^^ee\defstringchar^^ef%
+ %
+ \defstringchar^^f0\defstringchar^^f1\defstringchar^^f2\defstringchar^^f3%
+ \defstringchar^^f4\defstringchar^^f5\defstringchar^^f6\defstringchar^^f7%
+ \defstringchar^^f8\defstringchar^^f9\defstringchar^^fa\defstringchar^^fb%
+ \defstringchar^^fc\defstringchar^^fd\defstringchar^^fe\defstringchar^^ff%
+}
+
+
+% define all the unicode characters we know about, for the sake of @U.
+\utfeightchardefs
+
+
+% Make non-ASCII characters printable again for compatibility with
+% existing Texinfo documents that may use them, even without declaring a
+% document encoding.
+%
+\setnonasciicharscatcode \other
+
+
+\message{formatting,}
+
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be very finicky about underfull hboxes, either.
+\hbadness = 6666
+
+% Following George Bush, get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \pageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \pagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % if we don't reset these, they will remain at "1 true in" of
+ % whatever layout pdftex was dumped with.
+ \pdfhorigin = 1 true in
+ \pdfvorigin = 1 true in
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {-.2in}{0in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+ \parskip = 1.5pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.4in}{4.8in}%
+ {-.2in}{-.4in}%
+ {0pt}{14pt}%
+ {9in}{6in}%
+ %
+ \lispnarrowing = 0.25in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .4cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \hfuzz = 1.2pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1\relax
+ \advance\dimen0 by \voffset
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other \def\normaldoublequote{"}
+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
+\catcode`\+=\other \def\normalplus{+}
+\catcode`\<=\other \def\normalless{<}
+\catcode`\>=\other \def\normalgreater{>}
+\catcode`\^=\other \def\normalcaret{^}
+\catcode`\_=\other \def\normalunderscore{_}
+\catcode`\|=\other \def\normalverticalbar{|}
+\catcode`\~=\other \def\normaltilde{~}
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
+\chardef\hatchar=`\^
+\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+
+\chardef \less=`\<
+\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
+\chardef \gtr=`\>
+\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
+\catcode`\+=\active \def+{{\tt \char 43}}
+\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+\catcode`\-=\active \let-=\normaldash
+
+
+% used for headline/footline in the output routine, in case the page
+% breaks in the middle of an @tex block.
+\def\texinfochars{%
+ \let< = \activeless
+ \let> = \activegtr
+ \let~ = \activetilde
+ \let^ = \activehat
+ \markupsetuplqdefault \markupsetuprqdefault
+ \let\b = \strong
+ \let\i = \smartitalic
+ % in principle, all other definitions in \tex have to be undone too.
+}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+ \normalturnoffactive
+ \otherbackslash
+}
+
+\catcode`\@=0
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+
+% In Texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active % @ for escape char from now on.
+
+% Print a typewriter backslash. For math mode, we can't simply use
+% \backslashcurfont: the story here is that in math mode, the \char
+% of \backslashcurfont ends up printing the roman \ from the math symbol
+% font (because \char in math mode uses the \mathcode, and plain.tex
+% sets \mathcode`\\="026E). Hence we use an explicit \mathchar,
+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
+% ignored family value; char position "5C). We can't use " for the
+% usual hex value because it has already been made active.
+
+@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
+@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents.
+
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other. We switch back and forth between these.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+{@catcode`- = @active
+ @gdef@normalturnoffactive{%
+ @nonasciistringdefs
+ @let-=@normaldash
+ @let"=@normaldoublequote
+ @let$=@normaldollar %$ font-lock fix
+ @let+=@normalplus
+ @let<=@normalless
+ @let>=@normalgreater
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let~=@normaltilde
+ @let\=@ttbackslash
+ @markupsetuplqdefault
+ @markupsetuprqdefault
+ @unsepspaces
+ }
+}
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have @fixbackslash turn them back on.
+@catcode`+=@other @catcode`@_=@other
+
+% \enablebackslashhack - allow file to begin `\input texinfo'
+%
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+% If the file did not have a `\input texinfo', then it is turned off after
+% the first line; otherwise the first `\' in the file would cause an error.
+% This is used on the very last line of this file, texinfo.tex.
+% We also use @c to call @fixbackslash, in case ends of lines are hidden.
+{
+@catcode`@^=7
+@catcode`@^^M=13@gdef@enablebackslashhack{%
+ @global@let\ = @eatinput%
+ @catcode`@^^M=13%
+ @def@c{@fixbackslash@c}%
+ @def ^^M{@let^^M@secondlinenl}%
+ @gdef @secondlinenl{@let^^M@thirdlinenl}%
+ @gdef @thirdlinenl{@fixbackslash}%
+}}
+
+{@catcode`@^=7 @catcode`@^^M=13%
+@gdef@eatinput input texinfo#1^^M{@fixbackslash}}
+
+@gdef@fixbackslash{%
+ @ifx\@eatinput @let\ = @ttbackslash @fi
+ @catcode13=5 % regular end of line
+ @let@c=@texinfoc
+ % Also turn back on active characters that might appear in the input
+ % file name, in case not using a pre-dumped format.
+ @catcode`+=@active
+ @catcode`@_=@active
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets
+ % called at the beginning of every Texinfo file. Not opening texinfo.cnf
+ % directly in this file, texinfo.tex, makes it possible to make a format
+ % file for Texinfo.
+ %
+ @openin 1 texinfo.cnf
+ @ifeof 1 @else @input texinfo.cnf @fi
+ @closein 1
+}
+
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These (along with & and #) are made active for url-breaking, so need
+% active definitions as the normal characters.
+@def@normaldot{.}
+@def@normalquest{?}
+@def@normalslash{/}
+
+% These look ok in all fonts, so just make them not special.
+% @hashchar{} gets its own user-level command, because of #line.
+@catcode`@& = @other @def@normalamp{&}
+@catcode`@# = @other @def@normalhash{#}
+@catcode`@% = @other @def@normalpercent{%}
+
+@let @hashchar = @normalhash
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+@markupsetuplqdefault
+@markupsetuprqdefault
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message\\|emacs-page"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@ignore
+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore
+@enablebackslashhack
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644
index 0000000..1246247
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,11 @@
+@ignore
+Copyright (C) 1988-2018 Free Software Foundation, Inc.
+@end ignore
+
+@set LASTCHANGE Fri Dec 7 09:49:07 EST 2018
+
+@set EDITION 5.0
+@set VERSION 5.0
+
+@set UPDATED 7 December 2018
+@set UPDATED-MONTH December 2018