summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:38:56 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:38:56 +0000
commit6c20c8ed2cb9ab69a1a57ccb2b9b79969a808321 (patch)
treef63ce19d57fad3ac4a15bc26dbfbfa2b834111b5 /doc
parentInitial commit. (diff)
downloadbash-6c20c8ed2cb9ab69a1a57ccb2b9b79969a808321.tar.xz
bash-6c20c8ed2cb9ab69a1a57ccb2b9b79969a808321.zip
Adding upstream version 5.2.15.upstream/5.2.15upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'doc')
-rw-r--r--doc/INTRO187
-rw-r--r--doc/Makefile.in343
-rw-r--r--doc/README36
-rw-r--r--doc/bash.06664
-rw-r--r--doc/bash.111764
-rw-r--r--doc/bash.html14899
-rw-r--r--doc/bash.info12675
-rw-r--r--doc/bash.pdfbin0 -> 401989 bytes
-rw-r--r--doc/bash.ps10469
-rw-r--r--doc/bashbug.052
-rw-r--r--doc/bashbug.167
-rw-r--r--doc/bashbug.ps297
-rw-r--r--doc/bashref.dvibin0 -> 823680 bytes
-rw-r--r--doc/bashref.html16033
-rw-r--r--doc/bashref.info12676
-rw-r--r--doc/bashref.pdfbin0 -> 795771 bytes
-rw-r--r--doc/bashref.ps22641
-rw-r--r--doc/bashref.texi10129
-rw-r--r--doc/builtins.02083
-rw-r--r--doc/builtins.124
-rw-r--r--doc/builtins.ps3435
-rw-r--r--doc/fdl.texi506
-rw-r--r--doc/fdl.txt451
-rwxr-xr-xdoc/htmlpost.sh19
-rw-r--r--doc/rbash.064
-rw-r--r--doc/rbash.18
-rw-r--r--doc/rbash.ps290
-rw-r--r--doc/texinfo.tex11045
-rw-r--r--doc/version.texi11
29 files changed, 136868 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..8bf775e
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,343 @@
+# 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
+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} -I${srcdir} -man $< > $@
+
+.1.0:
+ $(RM) $@
+ -${NROFF} -I${srcdir} -man $< > $@
+
+.1.html:
+ $(RM) $@
+ -${MAN2HTML} $< | ${HTMLPOST} > $@
+
+.ms.ps:
+ $(RM) $@
+ -${GROFF} -ms $< > $@
+
+.ms.txt:
+ $(RM) $@
+ -${NROFF} -ms $< > $@
+
+.3.ps:
+ $(RM) $@
+ -${GROFF} -I${srcdir} -man $< > $@
+
+.3.0:
+ $(RM) $@
+ -${NROFF} -I${srcdir} -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)
+ $(RM) $@
+ ${SET_TEXINPUTS} $(TEXI2DVI) $(srcdir)/bashref.texi || { ${RM} $@ ; exit 1; }
+
+bashref.info: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
+ $(RM) $@
+ $(MAKEINFO) --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi
+
+# experimental
+bashref.pdf: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
+ $(RM) $@
+ ${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_FILES) $(HSUSER) $(RLUSER)
+ $(RM) $@
+ $(MAKEINFO) -o $@ --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi
+
+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) ${srcdir}/mkinstall -t ${topdir} -s ${srcdir}
+ cmp -s INSTALL ${topdir}/INSTALL || mv INSTALL ${topdir}/INSTALL
+ $(RM) INSTALL
+
+posix: bashref.texi
+ $(SHELL) ${srcdir}/mkposix -t ${topdir} -s ${srcdir}
+ cmp -s POSIX ${topdir}/POSIX || mv POSIX ${topdir}/POSIX
+ $(RM) POSIX
+
+rbash: bashref.texi
+ $(SHELL) ${srcdir}/mkrbash -t ${topdir} -s ${srcdir}
+ cmp -s RBASH ${topdir}/RBASH || mv RBASH ${topdir}/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/bash.0 b/doc/bash.0
new file mode 100644
index 0000000..1580b77
--- /dev/null
+++ b/doc/bash.0
@@ -0,0 +1,6664 @@
+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-2022 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 op-
+ tions 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 as-
+ signed 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 messages.
+ --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 op-
+ tions must appear on the command line before the single-character op-
+ tions 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 IINN--
+ VVOOCCAATTIIOONN 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 be-
+ low).
+
+ ----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 de-
+ fault 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 ex-
+ ecuted, 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 (un-
+ less --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 ex-
+ ample, 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 be-
+ havior of historical versions of sshh as closely as possible, while con-
+ forming to the POSIX standard as well. When invoked as an interactive
+ 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 in-
+ hibit 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 at-
+ tempt 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 historical
+ remote shell daemon, usually _r_s_h_d, or the secure shell daemon _s_s_h_d. If
+ bbaasshh determines it is being run non-interactively 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 ap-
+ pear 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 command (see SSHHEELLLL GGRRAAMMMMAARR below), the third word of a
+ ccaassee or sseelleecctt command (only iinn is valid), or the third word of a ffoorr
+ command (only iinn and ddoo are valid):
+
+ !! ccaassee ccoopprroocc ddoo ddoonnee eelliiff eellssee eessaacc ffii ffoorr ffuunnccttiioonn iiff iinn sseelleecctt
+ tthheenn uunnttiill wwhhiillee {{ }} ttiimmee [[[[ ]]]]
+
+SSHHEELLLL GGRRAAMMMMAARR
+ This section describes the syntax of the various forms of shell com-
+ mands.
+
+ 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 ar-
+ guments 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_1 [ [|||||&&] _c_o_m_m_a_n_d_2 ... ]
+
+ The standard output of _c_o_m_m_a_n_d_1 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 _c_o_m_m_a_n_d_1(see RREEDDIIRREECCTTIIOONN below). If ||&& is used,
+ _c_o_m_m_a_n_d_1'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 _c_o_m_-
+ _m_a_n_d_1.
+
+ 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 multi-command pipeline, where pipes are created, is
+ executed in a _s_u_b_s_h_e_l_l, which is a separate process. See CCOOMMMMAANNDD EEXXEE--
+ CCUUTTIIOONN EENNVVIIRROONNMMEENNTT for a description of subshells and a subshell envi-
+ ronment. 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 when job control is not active.
+
+ 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 (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONN--
+ MMEENNTT below for a description of a subshell environment). Vari-
+ able 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 _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 be-
+ low under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If the value of the expression
+ is non-zero, the return status is 0; otherwise the return status
+ is 1. The _e_x_p_r_e_s_s_i_o_n undergoes the same expansions as if it
+ were within double quotes, but double quote characters in _e_x_-
+ _p_r_e_s_s_i_o_n are not treated specially and are removed.
+
+ [[[[ _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.
+ The words between the [[[[ and ]]]] do not undergo word splitting
+ and pathname expansion. The shell performs tilde expansion, pa-
+ rameter and variable expansion, arithmetic expansion, command
+ substitution, process substitution, and quote removal on those
+ words (the expansions that would occur if the words were en-
+ closed in double quotes). Conditional 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 ex-
+ pression and matched accordingly (using the POSIX _r_e_g_c_o_m_p and
+ _r_e_g_e_x_e_c interfaces usually described 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. If any part of the pattern is
+ quoted, the quoted portion is matched literally. This means ev-
+ ery character in the quoted portion matches itself, instead of
+ having any special pattern matching meaning. If the pattern is
+ stored in a shell variable, quoting the variable expansion
+ forces the entire pattern to be matched literally. Treat
+ bracket expressions in regular expressions carefully, since nor-
+ mal quoting and pattern characters lose their meanings between
+ brackets.
+
+ The pattern will match if it matches any part of the string.
+ Anchor the pattern using the ^^ and $$ regular expression opera-
+ tors to force it to match the entire string. The array variable
+ BBAASSHH__RREEMMAATTCCHH records which parts of the string matched the pat-
+ tern. The element of BBAASSHH__RREEMMAATTCCHH with index 0 contains the
+ portion of the string matching the entire regular expression.
+ Substrings matched by parenthesized subexpressions within the
+ regular expression are saved in the remaining BBAASSHH__RREEMMAATTCCHH in-
+ dices. The element of BBAASSHH__RREEMMAATTCCHH with index _n is the portion
+ of the string matching the _nth parenthesized subexpression.
+ Bash sets BBAASSHH__RREEMMAATTCCHH in the global scope; declaring it as a
+ local variable will lead to unexpected results.
+
+ 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 pa-
+ rameter 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, and 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).
+ sseelleecctt then displays the PPSS33 prompt and reads a line from the
+ standard 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 sseelleecctt command completes and
+ returns 1. 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 exe-
+ cuted 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, process substitution, and quote removal. If the nnoo--
+ ccaasseemmaattcchh shell option is enabled, the match is performed with-
+ out regard to the case of alphabetic characters. When a match
+ is found, the corresponding _l_i_s_t is executed. If the ;;;; opera-
+ tor is used, no subsequent matches are attempted after the first
+ pattern match. Using ;;&& in place of ;;;; causes execution to con-
+ tinue with the _l_i_s_t associated with the next set of patterns.
+ Using ;;;;&& in place of ;;;; causes the shell to test the next pat-
+ tern list in the statement, if any, and execute any associated
+ _l_i_s_t on a successful match, continuing the case statement execu-
+ tion as if the pattern list had not matched. 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, ex-
+ cept 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 executed.
+
+ 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 syntax 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. _c_o_m_m_a_n_d may be either a simple
+ command or a compound command (see above). _N_A_M_E is a shell variable
+ name. If _N_A_M_E is not supplied, the default name is CCOOPPRROOCC.
+
+ The recommended form to use 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 form is recommended because simple commands result in the copro-
+ cess always being named CCOOPPRROOCC, and it is simpler to use and more com-
+ plete than the other compound commands.
+
+ If _c_o_m_m_a_n_d is a compound command, _N_A_M_E is optional. The word following
+ ccoopprroocc determines whether that word is interpreted as a variable name:
+ it is interpreted as _N_A_M_E if it is not a reserved word that introduces
+ a compound command. If _c_o_m_m_a_n_d is a simple command, _N_A_M_E is not al-
+ lowed; this is to avoid confusion between _N_A_M_E and the first word of
+ the simple command.
+
+ When the coprocess is executed, the shell creates 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 de-
+ scriptor 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 as-
+ signed 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 avail-
+ able 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:
+
+ _f_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 _f_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 _f_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. If the
+ ffuunnccttiioonn reserved word is used, but the parentheses are not sup-
+ plied, the braces are recommended. _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d is executed
+ whenever _f_n_a_m_e is specified as the name of a simple command.
+ When in _p_o_s_i_x _m_o_d_e, _f_n_a_m_e must be a valid shell _n_a_m_e and 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. In default
+ mode, a function name can be any unquoted shell word that does
+ not contain $$. Any redirections (see RREEDDIIRREECCTTIIOONN below) speci-
+ fied 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 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 it-
+ self 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).
+
+ Character sequences of the form $$'_s_t_r_i_n_g' are treated as a special
+ variant of single quotes. The sequence expands to _s_t_r_i_n_g, with back-
+ slash-escaped characters in _s_t_r_i_n_g replaced as specified by the ANSI C
+ standard. Backslash escape sequences, if present, are decoded as fol-
+ lows:
+ \\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. The _g_e_t_-
+ _t_e_x_t infrastructure performs the lookup and translation, using the
+ LLCC__MMEESSSSAAGGEESS, TTEEXXTTDDOOMMAAIINNDDIIRR, and TTEEXXTTDDOOMMAAIINN shell variables. If the
+ current locale is CC or PPOOSSIIXX, if there are no translations available,
+ or if the string is not translated, the dollar sign is ignored. This
+ is a form of double quoting, so the string remains double-quoted by de-
+ fault, whether or not it is translated and replaced. If the nnooeexx--
+ ppaanndd__ttrraannssllaattiioonn option is enabled using the sshhoopptt builtin, translated
+ strings are single-quoted instead of double-quoted. See the descrip-
+ tion of sshhoopptt below under SSHHEELLLLBUILTINCCOOMMMMAANNDDSS.
+
+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 and path-
+ name expansion are not performed. Assignment statements may also ap-
+ pear 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
+ iinntteeggeerr attribute has been set, _v_a_l_u_e is evaluated as an arithmetic ex-
+ pression and added to the variable's current value, which is also eval-
+ uated. When += is applied to an array variable using compound assign-
+ ment (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 ap-
+ plied 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 at-
+ tributes 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, as-
+ signments, 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 pa-
+ rameter 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 pa-
+ rameter 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 ex-
+ pands 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 it-
+ self (such as the --ii option).
+ $$ Expands to the process ID of the shell. In a subshell, it ex-
+ pands to the process ID of the current 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 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.
+
+ SShheellll VVaarriiaabblleess
+ The following variables are set by the shell:
+
+ __ At shell startup, set to the 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.
+ 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 op-
+ tion 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 be-
+ low). 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. If BBAASSHH__CCOOMMMMAANNDD is unset, it loses its special proper-
+ ties, even if it is subsequently reset.
+ 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 ex-
+ pression. The element with index _n is the portion of the string
+ matching the _nth parenthesized subexpression.
+ 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 de-
+ fined 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. If BBAASSHH__SSUUBBSSHHEELLLL is unset, it loses its spe-
+ cial properties, even if it is subsequently reset.
+ 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 de-
+ scribed 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 un-
+ set, it loses its special properties, even if it is subsequently
+ 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 re-
+ set.
+
+ 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 in-
+ stance, $${{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. Assignments to HHIISSTTCCMMDD are ignored. If HHIISSTTCCMMDD is un-
+ set, 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, it expands to a random
+ integer between 0 and 32767. Assigning a value to RRAANNDDOOMM ini-
+ tializes (seeds) the sequence of random numbers. If RRAANNDDOOMM is
+ unset, it loses its special properties, even if it is subse-
+ quently reset.
+ RREEAADDLLIINNEE__AARRGGUUMMEENNTT
+ Any numeric argument given to a readline command that was de-
+ fined using "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) when it
+ was invoked.
+ RREEAADDLLIINNEE__LLIINNEE
+ The contents of the rreeaaddlliinnee line buffer, for use with "bind -x"
+ (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+ RREEAADDLLIINNEE__MMAARRKK
+ The position of the mark (saved insertion point) in the rreeaaddlliinnee
+ line buffer, for use with "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
+ below). The characters between the insertion point and the mark
+ are often called the _r_e_g_i_o_n.
+ 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, it expands to the number
+ of seconds since shell invocation. 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.
+ The number of seconds at shell invocation and the current time
+ are always determined by querying the system clock. If SSEECCOONNDDSS
+ is unset, it loses its special properties, even if it is subse-
+ quently 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.
+ SSRRAANNDDOOMM
+ This variable expands to a 32-bit pseudo-random number each time
+ it is referenced. The random number generator is not linear on
+ systems that support /dev/urandom or _a_r_c_4_r_a_n_d_o_m, so each re-
+ turned number has no relationship to the numbers preceding it.
+ The random number generator cannot be seeded, so assignments to
+ this variable have no effect. If SSRRAANNDDOOMM is unset, it loses its
+ special properties, even if it is subsequently reset.
+ 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 as-
+ signs 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
+ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE below for a description of the various
+ compatibility levels and their effects. The value may be a dec-
+ imal number (e.g., 4.2) or an integer (e.g., 42) corresponding
+ to the desired compatibility 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 values corre-
+ spond to the compatibility levels described below under SSHHEELLLL
+ CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE. For example, 4.2 and 42 are valid values
+ that correspond to the ccoommppaatt4422 sshhoopptt option and set the compat-
+ ibility level to 42. 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 en-
+ abled 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 di-
+ rectories 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 ar-
+ ray 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 Expanded and executed similarly to BBAASSHH__EENNVV (see IINNVVOOCCAATTIIOONN
+ above) when an interactive 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 an-
+ chored 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 HHIISSTTCCOONNTTRROOLL are
+ applied. In addition to the normal shell pattern matching char-
+ acters, `&&' matches the previous history line. `&&' may be es-
+ caped using a backslash; the backslash is removed before at-
+ tempting a match. The second and subsequent lines of a multi-
+ line compound command are not tested, and are added to the his-
+ tory regardless of the value of HHIISSTTIIGGNNOORREE. The pattern match-
+ ing 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 at-
+ tempted 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 af-
+ ter 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 de-
+ fault 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 se-
+ quences 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 ar-
+ rival of mail in the specified file or Maildir-format directory.
+ MMAAIILLCCHHEECCKK
+ Specifies how often (in seconds) bbaasshh checks for mail. The de-
+ fault 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/lo-
+ cal/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 this variable is set, and is an array, the value of each set
+ element is executed as a command prior to issuing each primary
+ prompt. If this is set but not an array variable, its value is
+ used as a command to execute instead.
+ 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 ex-
+ ecution trace. The first character of the expanded value of PPSS44
+ is replicated multiple times, as necessary, to indicate multiple
+ levels of indirection. The default is ``++ ''.
+ SSHHEELLLL This variable expands to the full pathname to the shell. 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 de-
+ fault 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 may be 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. Each _v_a_l_u_e in the list is expanded using all the shell expan-
+ sions described below under EEXXPPAANNSSIIOONN. When assigning to indexed ar-
+ rays, 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 words in a compound assign-
+ ment may be either assignment statements, for which the subscript is
+ required, or a list of words that is interpreted as a sequence of al-
+ ternating keys and values: _n_a_m_e=(( _k_e_y_1 _v_a_l_u_e_1 _k_e_y_2 _v_a_l_u_e_2 ...)). These
+ are treated identically to _n_a_m_e=(( [_k_e_y_1]=_v_a_l_u_e_1 [_k_e_y_2]=_v_a_l_u_e_2 ...)).
+ The first word in the list determines how the remaining words are in-
+ terpreted; all assignments in a list must be of the same type. When
+ using key/value pairs, the keys may not be missing or empty; a final
+ missing value is treated like the empty string.
+
+ 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 in-
+ troduced 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.
+
+ The += operator will append to an array variable when assigning using
+ the compound assignment syntax; see PPAARRAAMMEETTEERRSS above.
+
+ 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 ex-
+ pansion 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 elements in the ar-
+ ray. 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 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.
+
+ 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] de-
+ stroys the array element at index _s_u_b_s_c_r_i_p_t, for both indexed and asso-
+ ciative arrays. Negative subscripts to indexed arrays are interpreted
+ 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, re-
+ moves the entire array. 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
+ @@, behaves differently depending on whether _n_a_m_e is an indexed or asso-
+ ciative array. If _n_a_m_e is an associative array, this unsets the ele-
+ ment with subscript ** or @@. If _n_a_m_e is an indexed array, unset removes
+ all of the elements but does not remove the array itself.
+
+ 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 de-
+ scribed above, the argument is subject to pathname expansion. If path-
+ name 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 ar-
+ ray. 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 in-
+ crease the number of words of the expansion; other expansions expand a
+ single word to a single word. The only exceptions to this are the ex-
+ pansions 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 letters, 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 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
+ letters are supplied, the expression expands to each character lexico-
+ graphically between _x and _y, inclusive, using the default C locale.
+ Note that both _x and _y must be of the same type (integer or letter).
+ 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 ex-
+ pression. 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 re-
+ places 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 as-
+ signments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the ex-
+ panded 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 em-
+ bedded arithmetic expansion, command substitution, or parameter expan-
+ sion.
+
+ ${_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 ex-
+ pansion, parameter expansion, command substitution, and arithmetic ex-
+ pansion. 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 be-
+ low (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 un-
+ set.
+
+ ${_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 ex-
+ pansion 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 pa-
+ rameters 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 @@ or **, an indexed array subscripted by @@
+ or **, or an associative array name, the results differ as de-
+ scribed 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 expan-
+ sion 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 ::-- expansion.
+
+ If _p_a_r_a_m_e_t_e_r is @@ or **, the result is _l_e_n_g_t_h positional parame-
+ ters 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 expansion 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 un-
+ defined results.
+
+ Substring indexing is zero-based unless the positional parame-
+ ters are used, in which case the indexing starts at 1 by de-
+ fault. 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 sub-
+ stituted 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 substituted 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 in-
+ terpreted as relative to one greater than the maximum 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 element.
+
+ ${_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 op-
+ eration 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 vari-
+ able 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%%_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 ex-
+ pansion 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}
+ ${_p_a_r_a_m_e_t_e_r////_p_a_t_t_e_r_n//_s_t_r_i_n_g}
+ ${_p_a_r_a_m_e_t_e_r//##_p_a_t_t_e_r_n//_s_t_r_i_n_g}
+ ${_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. _s_t_r_i_n_g undergoes tilde expansion, parameter and vari-
+ able expansion, arithmetic expansion, command and process sub-
+ stitution, and quote removal. The match is performed using the
+ rules described under PPaatttteerrnn MMaattcchhiinngg below. In the first form
+ above, only the first match is replaced. If there are two
+ slashes separating _p_a_r_a_m_e_t_e_r and _p_a_t_t_e_r_n (the second form
+ above), all matches of _p_a_t_t_e_r_n are replaced with _s_t_r_i_n_g. If
+ _p_a_t_t_e_r_n is preceded by ## (the third form above), 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
+ is preceded by %% (the fourth form above), it must match at the
+ end of the expanded value of _p_a_r_a_m_e_t_e_r. If the expansion of
+ _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted. 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 ppaattssuubb__rreeppllaacceemmeenntt shell option is enabled using sshhoopptt,
+ any unquoted instances of && in _s_t_r_i_n_g are replaced with the
+ matching portion of _p_a_t_t_e_r_n.
+
+ Quoting any part of _s_t_r_i_n_g inhibits replacement in the expansion
+ of the quoted portion, including replacement strings stored in
+ shell variables. Backslash will escape && in _s_t_r_i_n_g; the back-
+ slash is removed in order to permit a literal && in the replace-
+ ment string. Backslash can also be used to escape a backslash;
+ \\\\ results in a literal backslash in the replacement. Users
+ should take care if _s_t_r_i_n_g is double-quoted to avoid unwanted
+ interactions between the backslash and double-quoting, since
+ backslash has special meaning within double quotes. Pattern
+ substitution performs the check for unquoted && after expanding
+ _s_t_r_i_n_g; shell programmers should quote any occurrences of && they
+ want to be taken literally in the replacement and ensure any in-
+ stances of && they want to be replaced are unquoted.
+
+ If the nnooccaasseemmaattcchh shell option is enabled, the match is per-
+ formed 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 parameter in turn, and the expansion is the re-
+ sultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted
+ with @@ or **, the substitution operation is applied to each mem-
+ ber 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 ^^ op-
+ erator converts lowercase letters matching _p_a_t_t_e_r_n 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 _p_a_t_t_e_r_n is omit-
+ ted, 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 subscripted
+ 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:
+
+ UU The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
+ with lowercase alphabetic characters converted to upper-
+ case.
+ uu The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
+ with the first character converted to uppercase, if it is
+ alphabetic.
+ LL The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r
+ with uppercase alphabetic characters converted to lower-
+ case.
+ 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.
+ KK Produces a possibly-quoted version of the value of _p_a_r_a_m_-
+ _e_t_e_r, except that it prints the values of indexed and as-
+ sociative arrays as a sequence of quoted key-value pairs
+ (see AArrrraayyss above).
+ aa The expansion is a string consisting of flag values rep-
+ resenting _p_a_r_a_m_e_t_e_r's attributes.
+ kk Like the K transformation, but expands the keys and val-
+ ues of indexed and associative arrays to separate words
+ after word splitting.
+
+ 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 undergoes the same expansions as if it were within dou-
+ ble quotes, but double quote characters in _e_x_p_r_e_s_s_i_o_n are not treated
+ specially and are removed. All tokens in the expression undergo param-
+ eter 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 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 re-
+ sults 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, and is not quoted, 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 PPaatttteerrnn 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 per-
+ formed 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 ex-
+ plicitly, unless the shell option ddoottgglloobb is set. In order to match
+ the filenames ````..'''' and ````....'''', the pattern must begin with ``.'' (for
+ example, ``.?''), even if ddoottgglloobb is set. If the gglloobbsskkiippddoottss shell
+ option is enabled, the filenames ````..'''' and ````....'''' are never matched,
+ even if the pattern begins with a ````..''''. When not matching pathnames,
+ 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, gglloobbsskkiippddoottss, 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 di-
+ rectories 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 se-
+ quence and character set, is matched. If the first char-
+ acter following the [[ is a !! or a ^^ then any character
+ not enclosed is matched. The sorting order of characters
+ in range expressions, and the characters included in the
+ range, are determined by the current locale and the val-
+ ues of the LLCC__CCOOLLLLAATTEE or LLCC__AALLLL shell variables, if set.
+ To obtain the traditional interpretation of range expres-
+ sions, where [[aa--dd]] is equivalent to [[aabbccdd]], set value of
+ the LLCC__AALLLL shell variable to CC, or enable the gglloobbaassccii--
+ iirraannggeess 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 us-
+ ing the syntax [[==_c==]], which matches all characters with
+ the same collation weight (as defined by the current lo-
+ cale) 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, the
+ shell recognizes several extended pattern matching operators. 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 following 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
+
+ Theeexxttgglloobb option changes the behavior of the parser, since the paren-
+ theses are normally treated as operators with syntactic meaning. To
+ ensure that extended matching patterns are parsed correctly, make sure
+ that eexxttgglloobb is enabled before parsing constructs containing the pat-
+ terns, including shell functions and command substitutions.
+
+ When matching filenames, the ddoottgglloobb shell option determines the set of
+ filenames that are tested: when ddoottgglloobb is enabled, the set of file-
+ names includes all files beginning with ``.'', but ``.'' and ``..''
+ must be matched by a pattern or sub-pattern that begins with a dot;
+ when it is disabled, the set does not include any filenames beginning
+ with ``.'' unless the pattern or sub-pattern begins with a ``.''. As
+ above, ``.'' only has a special meaning when matching filenames.
+
+ Complicated extended pattern matching against long strings is slow, es-
+ pecially 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.
+
+ 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. _R_e_d_i_r_e_c_t_i_o_n 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's lifetime manually. The
+ vvaarrrreeddiirr__cclloossee shell option manages this behavior.
+
+ 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 ex-
+ pansion 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 re-
+ sults from the expansion of _w_o_r_d to be opened for appending on file de-
+ scriptor _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 er-
+ ror:
+
+ &&>>_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 DDee--
+ ssccrriippttoorrss 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 un-
+ quoted, all lines of the here-document are subjected to parameter ex-
+ pansion, command substitution, and arithmetic expansion, the character
+ sequence \\<<nneewwlliinnee>> is ignored, and \\ must be used to quote the charac-
+ ters \\, $$, 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 al-
+ lows 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 de-
+ scriptor open for input, a redirection error occurs. If _w_o_r_d evaluates
+ 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, use a shell function (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 af-
+ ter 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 in-
+ terpret 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 be-
+ tween 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 (_l_o_c_a_l _v_a_r_i_a_b_l_e_s). Ordinarily, variables and their values are
+ shared between the function and its caller. If a variable is declared
+ llooccaall, the variable's visible scope is restricted to that function and
+ its children (including the functions it calls).
+
+ In the following description, the _c_u_r_r_e_n_t _s_c_o_p_e is a currently- execut-
+ ing function. Previous scopes consist of that function's caller and so
+ on, back to the "global" scope, where the shell is not executing any
+ shell function. Consequently, a local variable at the current scope is
+ a variable declared using the llooccaall or ddeeccllaarree builtins in the function
+ that is currently executing.
+
+ Local variables "shadow" variables with the same name declared at pre-
+ vious 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 re-
+ main so (appearing as unset) 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 (see below how the lloo--
+ ccaallvvaarr__uunnsseett shell option changes this behavior).
+
+ The FFUUNNCCNNEESSTT variable, if set to a numeric value greater than 0, de-
+ fines a maximum function nesting level. Function invocations that ex-
+ ceed 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 be-
+ fore 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 child shell processes (those created when exe-
+ cuting a separate shell invocation) 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 re-
+ cursive 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 op-
+ erators. 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.
+
+ Integer constants follow the C language definition, without suffixes or
+ character constants. Constants with a leading 0 are interpreted as oc-
+ tal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, num-
+ bers take the form [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal num-
+ ber between 2 and 64 representing the arithmetic base, and _n is a num-
+ ber in that base. If _b_a_s_e_# is omitted, then base 10 is used. When
+ specifying _n, if a non-digit is required, 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 up-
+ percase letters may be used interchangeably to represent numbers be-
+ tween 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 and [[ 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 in-
+ ternally 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 ex-
+ pansions, assignments, and redirections, from left to right, in the
+ following order.
+
+ 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. In the case of such a command (one that consists
+ only of assignment statements and redirections), assignment statements
+ are performed before redirections. Otherwise, the variables are added
+ to the environment of the executed command and do not affect the cur-
+ rent 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 af-
+ fect 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 re-
+ member 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, and the shell creates a new instance of
+ itself 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.
+
+ A _s_u_b_s_h_e_l_l is a copy of the shell process.
+
+ 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 re-
+ set 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 de-
+ fault standard input for the command is the empty file _/_d_e_v_/_n_u_l_l. Oth-
+ erwise, the invoked command inherits the file descriptors of the call-
+ ing 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 in-
+ vocation, 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 ddee--
+ ccllaarree --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, re-
+ placing 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 re-
+ turns 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 in-
+ valid options or missing arguments.
+
+ The exit status of the last command is available in the special parame-
+ ter $?.
+
+ BBaasshh itself returns the exit status of the last command executed, un-
+ less 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 ig-
+ nores 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 ef-
+ fect, 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 us-
+ ing 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.
+
+ When job control is not enabled, and bbaasshh is waiting for a foreground
+ command to complete, the shell receives keyboard-generated signals such
+ as SSIIGGIINNTT (usually generated by ^^CC) that users commonly intend to send
+ to that command. This happens because the shell and the command are in
+ the same process group as the terminal, and ^^CC sends SSIIGGIINNTT to all pro-
+ cesses in that process group.
+
+ When bbaasshh is running without job control enabled and receives SSIIGGIINNTT
+ while waiting for a foreground command, it waits until that foreground
+ command terminates and then decides what to do about the SSIIGGIINNTT:
+
+ 1. If the command terminates due to the SSIIGGIINNTT, bbaasshh concludes that
+ the user meant to end the entire script, and acts on the SSIIGGIINNTT
+ (e.g., by running a SSIIGGIINNTT trap or exiting itself);
+
+ 2. If the command does not terminate due to SSIIGGIINNTT, the program
+ handled the SSIIGGIINNTT itself and did not treat it as a fatal sig-
+ nal. In that case, bbaasshh does not treat SSIIGGIINNTT as a fatal sig-
+ nal, either, instead assuming that the SSIIGGIINNTT was used as part
+ of the program's normal operation (e.g., emacs uses it to abort
+ editing commands) or deliberately discarded. However, bbaasshh will
+ run any trap set on SSIIGGIINNTT, as it does with any other trapped
+ signal it receives while it is waiting for the foreground com-
+ mand to complete, for compatibility.
+
+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 ex-
+ ecution 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 in-
+ terface 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 re-
+ turned 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 job whose command name be-
+ gins with ccee. 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 previous job with a --. A single % (with no accompanying
+ job specification) 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 ex-
+ its.
+
+ 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 causes wwaaiitt to wait until the job or process ter-
+ minates 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 de-
+ scribed above before tracing each command when the --xx option is en-
+ abled. BBaasshh allows these prompt strings to be customized by inserting
+ 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 in-
+ serted 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 value of the PPWWDD shell variable ($$PPWWDD), with $$HHOOMMEE
+ abbreviated with a tilde (uses the value of the
+ PPRROOMMPPTT__DDIIRRTTRRIIMM variable)
+ \\WW the basename of $$PPWWDD, 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 be-
+ low), while the command number is the position in the sequence of com-
+ mands 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
+ pprroommppttvvaarrss shell option (see the description of the sshhoopptt command under
+ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). This can have unwanted side effects if
+ escaped portions of the string appear within command substitution or
+ contain characters special to word expansion.
+
+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. If that file does not exist or cannot be read, the ultimate
+ default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the readline li-
+ brary 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 constructs. 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
+ or using the bbiinndd builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
+
+ 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:
+
+ aaccttiivvee--rreeggiioonn--ssttaarrtt--ccoolloorr
+ A string variable that controls the text color and background
+ when displaying the text in the active region (see the descrip-
+ tion of eennaabbllee--aaccttiivvee--rreeggiioonn below). This string must not take
+ up any physical character positions on the display, so it should
+ consist only of terminal escape sequences. It is output to the
+ terminal before displaying the text in the active region. This
+ variable is reset to the default value whenever the terminal
+ type changes. The default value is the string that puts the
+ terminal in standout mode, as obtained from the terminal's ter-
+ minfo description. A sample value might be "\e[01;33m".
+ aaccttiivvee--rreeggiioonn--eenndd--ccoolloorr
+ A string variable that "undoes" the effects of aaccttiivvee--rree--
+ ggiioonn--ssttaarrtt--ccoolloorr and restores "normal" terminal display appear-
+ ance after displaying text in the active region. This string
+ must not take up any physical character positions on the dis-
+ play, so it should consist only of terminal escape sequences.
+ It is output to the terminal after displaying the text in the
+ active region. This variable is reset to the default value
+ whenever the terminal type changes. The default value is the
+ string that restores the terminal from standout mode, as ob-
+ tained from the terminal's terminfo description. A sample value
+ might be "\e[0m".
+ 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. If there is a color defini-
+ tion in $$LLSS__CCOOLLOORRSS for the custom suffix "readline-colored-com-
+ pletion-prefix", readline uses this color for the common prefix
+ instead of its default.
+ 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, readline
+ will ask whether or not the user wishes to view them; otherwise
+ they are simply listed on the terminal. A zero value means
+ readline should never ask; negative values are treated as zero.
+ 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. This variable
+ is dependent on the LLCC__CCTTYYPPEE locale category, and may change if
+ the locale is changed.
+ 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--aaccttiivvee--rreeggiioonn ((OOnn))
+ The _p_o_i_n_t is the current cursor position, and _m_a_r_k refers to a
+ saved cursor position. The text between the point and mark is
+ referred to as the _r_e_g_i_o_n. When this variable is set to _O_n,
+ readline allows certain commands to designate the region as _a_c_-
+ _t_i_v_e. When the region is active, readline highlights the text
+ in the region using the value of the aaccttiivvee--rreeggiioonn--ssttaarrtt--ccoolloorr,
+ which defaults to the string that enables the terminal's stand-
+ out mode. The active region shows the text inserted by brack-
+ eted-paste and any matching text found by incremental and non-
+ incremental history searches.
+ eennaabbllee--bbrraacckkeetteedd--ppaassttee ((OOnn))
+ When set to OOnn, readline configures the terminal 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 prevents readline from executing any editing
+ commands bound to key sequences appearing in the pasted text.
+ 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 ar-
+ row 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 at-
+ tempts 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. This setting is automatically enabled for terminals
+ of height 1.
+ 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), re-
+ gardless 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. This variable is dependent on the LLCC__CCTTYYPPEE locale
+ category, and may change if the locale is changed.
+ 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 re-
+ ceived 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--ddii--
+ rreeccttoorriieess).
+ 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. This variable is dependent on
+ the LLCC__CCTTYYPPEE locale category, and may change if the locale is
+ changed.
+ 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 in-
+ stead 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 in-
+ stance, 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 op-
+ erator 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 li-
+ brary 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--ddiissppllaayy ((MM--CC--ll))
+ Clear the screen and, if possible, the terminal's scrollback
+ buffer, then redraw the current line, leaving the current line
+ at the top of the screen.
+ cclleeaarr--ssccrreeeenn ((CC--ll))
+ Clear the screen, then redraw the current line, leaving the cur-
+ rent 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.
+ 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.
+ ffeettcchh--hhiissttoorryy
+ With a numeric argument, fetch that entry from the history list
+ and make it the current line. Without an argument, move back to
+ the first entry in the history list.
+ 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 po-
+ sition (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-in-
+ cremental 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 in-
+ serts 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 EEXX--
+ PPAANNSSIIOONN 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.
+ 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, $$EEDD--
+ IITTOORR, 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 ar-
+ gument, uppercase the previous word, but do not move point.
+ ddoowwnnccaassee--wwoorrdd ((MM--ll))
+ Lowercase the current (or following) word. With a negative ar-
+ gument, lowercase the previous word, but do not move point.
+ ccaappiittaalliizzee--wwoorrdd ((MM--cc))
+ Capitalize the current (or following) word. With a negative ar-
+ gument, 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 nu-
+ meric argument, but is otherwise ignored. As a special case, if
+ this command is immediately followed by a character that is nei-
+ ther 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 ar-
+ gument may be used to move backward through the list. This com-
+ mand 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 argument searches for previous oc-
+ currences.
+ cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]]))
+ A character is read and point is moved to the previous occur-
+ rence of that character. A negative argument searches for sub-
+ sequent 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 re-
+ moved, the line will be executed by the shell.
+ ssppeellll--ccoorrrreecctt--wwoorrdd ((CC--xx ss))
+ Perform spelling correction on the current word, treating it as
+ a directory or filename, in the same way as the ccddssppeellll shell
+ option. Word boundaries are the same as those used by
+ sshheellll--ffoorrwwaarrdd--wwoorrdd.
+ gglloobb--ccoommpplleettee--wwoorrdd ((MM--gg))
+ The word before point is treated as a pattern for pathname ex-
+ pansion, with an asterisk implicitly appended. This pattern is
+ used to generate a list of matching filenames for possible com-
+ pletions.
+ gglloobb--eexxppaanndd--wwoorrdd ((CC--xx **))
+ The word before point is treated as a pattern for pathname ex-
+ pansion, and the list of matching filenames is inserted, replac-
+ ing 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 op-
+ tion 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 be-
+ ing 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 de-
+ fined, 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 de-
+ fault 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 un-
+ writable, the history is not saved. If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is
+ set, time stamps are written to the history file, marked with the his-
+ tory 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 HHIISSTTFFIILLEESSIIZZEE lines. If HHIISSTTFFIILLEESSIIZZEE
+ 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 ma-
+ nipulate 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 op-
+ tions.
+
+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 ac-
+ count. 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 ex-
+ pansion character is also treated as quoted if it immediately precedes
+ 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 op-
+ tion 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. If
+ _s_t_r_i_n_g is missing, the string from the most recent search is
+ used; it is an error if there is no previous search string.
+ ^^_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 ex-
+ pand to the zeroth word if there is only one word in the line.
+ %% The first word matched by the most recent `?_s_t_r_i_n_g?' search, if
+ the search string begins with a character that is part of a
+ word.
+ _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 xx is miss-
+ ing, it defaults to 0.
+
+ 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 `:'. These mod-
+ ify, or edit, the word or words selected from the history event.
+
+ 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. The qq and xx modifiers are mutually exclu-
+ sive; the last one supplied is used.
+ ss//_o_l_d//_n_e_w//
+ Substitute _n_e_w for the first occurrence of _o_l_d in the event
+ line. Any character may be used as the delimiter 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 single 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 substi-
+ tutions took place, the last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search.
+ If _n_e_w is null, each matching _o_l_d is deleted.
+ && 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' or `&&' 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 en-
+ vironment 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, but _f_i_l_e_n_a_m_e does not need to be executable. The file
+ searched for in PPAATTHH need not be executable. When bbaasshh is not
+ in _p_o_s_i_x _m_o_d_e, it searches the current directory 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 positional parameters when
+ _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are
+ unchanged. If the --TT option is enabled, .. inherits any trap on
+ DDEEBBUUGG; if it is not, any DDEEBBUUGG trap string is saved and restored
+ around the call to .., and .. unsets the DDEEBBUUGG trap while it exe-
+ cutes. If --TT is not set, and the sourced file changes the DDEEBBUUGG
+ trap, the new value is retained when .. 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 re-
+ turns 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
+ bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d_-_l_i_n_e
+ 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 ap-
+ pear in a rreeaaddlliinnee initialization file such as _._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 en-
+ tered. 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 and RREEAADDLLIINNEE__MMAARRKK
+ variables to the current location of the insertion point
+ and the saved insertion point (the mark), respectively.
+ The shell assigns any numeric argument the user supplied
+ to the RREEAADDLLIINNEE__AARRGGUUMMEENNTT variable. If there was no argu-
+ ment, that variable is not set. If the executed command
+ changes the value of any of RREEAADDLLIINNEE__LLIINNEE, RREEAADD--
+ LLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, 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 in-
+ put.
+
+ 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 ex-
+ ited. 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. The vari-
+ able CCDDPPAATTHH defines the search path for the directory containing
+ _d_i_r: each directory name in CCDDPPAATTHH is searched for _d_i_r. Alter-
+ native directory names in CCDDPPAATTHH are separated by a colon (:).
+ A null directory name in CCDDPPAATTHH is the same as the current di-
+ rectory, i.e., ``..''. If _d_i_r begins with a slash (/), then CCDD--
+ PPAATTHH 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 sym-
+ bolic links to be followed by resolving the link after process-
+ ing instances of _._. in _d_i_r. If _._. appears in _d_i_r, it is pro-
+ cessed 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 successfully determined after a successful directory
+ change, ccdd will return an unsuccessful status. On systems that
+ support it, the --@@ option presents the extended attributes asso-
+ ciated with a file as a directory. An argument of -- is con-
+ verted to $$OOLLDDPPWWDD before the directory change is attempted. If
+ a non-empty directory name from CCDDPPAATTHH is used, or if -- is the
+ first argument, and the directory change is successful, the ab-
+ solute pathname of the new working directory is written to the
+ standard output. If the directory change is successful, ccdd sets
+ the value of the PPWWDD environment variable to the new directory
+ name, and sets the OOLLDDPPWWDD environment variable to the value of
+ the current working directory before the change. 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 op-
+ tion 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 fa-
+ cilities, 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 initial
+ 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 de-
+ fault) to words completed at the end of the
+ line.
+ pplluussddiirrss
+ After any matches defined by the compspec are
+ generated, directory name completion is at-
+ tempted 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. Arguments
+ are passed as with the --FF option.
+ --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 ar-
+ guments 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 cur-
+ rent command line. When it finishes, the possible com-
+ pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY
+ 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 op-
+ tions 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 de-
+ scribed above. The --DD option indicates that other supplied op-
+ tions 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 initial 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 en-
+ closing 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 [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
+ ttyyppeesseett [--aaAAffFFggiiIIllnnrrttuuxx] [--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 at-
+ tributes 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 func-
+ tion. It is ignored in all other cases. The --II option causes
+ local variables to inherit the attributes (except the _n_a_m_e_r_e_f
+ attribute) and value of any existing variable with the same _n_a_m_e
+ at a surrounding scope. If there is no existing variable, the
+ local variable is initially unset. The following options can be
+ used to restrict output to variables with the specified attri-
+ bute 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 in-
+ herit 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 en-
+ vironment.
+
+ 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 as-
+ sign a value to an array variable without using the compound as-
+ signment 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 di-
+ rectories. The default display is on a single line with direc-
+ tory 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 direc-
+ tory in the stack.
+ --cc Clears the directory stack by deleting all of the en-
+ tries.
+ --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 re-
+ ceives 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 ar-
+ gument 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 es-
+ cape characters by default. eecchhoo does not interpret ---- to mean
+ the end of options. eecchhoo interprets the following escape se-
+ quences:
+ \\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 en-
+ abled. 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.
+ Bash will use the value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a
+ colon-separated list of directories in which to search for _f_i_l_e_-
+ _n_a_m_e. The default is system-dependent. The --dd option will
+ delete a builtin previously loaded with --ff. If no _n_a_m_e argu-
+ ments are given, or if the --pp option is supplied, a list of
+ shell builtins is printed. With no other option arguments, the
+ list consists of all enabled shell builtins. If --nn is supplied,
+ only disabled builtins are printed. If --aa is supplied, the list
+ printed includes all builtins, with an indication of whether or
+ not each is enabled. If --ss is supplied, the output is re-
+ stricted to the POSIX _s_p_e_c_i_a_l builtins. If no options are sup-
+ plied and a _n_a_m_e is not a shell builtin, eennaabbllee will attempt to
+ load _n_a_m_e from a shared object named _n_a_m_e, as if the command
+ were ``enable -f _n_a_m_e _n_a_m_e . 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). When listing, a
+ _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to
+ the current command (usually the ffcc command); otherwise 0 is
+ equivalent to -1 and -0 is invalid. 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 otherwise. If
+ _f_i_r_s_t is not specified, it is set to the previous command 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 in-
+ valid 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 _._._.]
+ 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 ex-
+ pected 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 op-
+ tion requires an argument, ggeettooppttss places that argument into the
+ variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automatically;
+ it must be manually reset between multiple calls to ggeettooppttss
+ within the same shell invocation if a new set of parameters is
+ to be used.
+
+ When the end of options is encountered, ggeettooppttss exits with a re-
+ turn 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 supplied as _a_r_g values, ggeettooppttss parses those in-
+ stead.
+
+ 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 OOPP--
+ TTAARRGG 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 op-
+ tion 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 arguments
+ are supplied with --tt, the _n_a_m_e is printed before the hashed full
+ pathname. The --ll option causes output to be displayed in a for-
+ mat that may be reused as input. If no arguments are given, or
+ if only --ll is supplied, information about remembered 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 range of 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 ap-
+ pended 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 or range
+ is supplied as an argument to --dd, or the history expansion sup-
+ plied 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 ex-
+ ecutes _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 op-
+ tion 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.
+ The restore is effected as if a series of sseett commands were exe-
+ cuted to restore the values that were in place before the func-
+ tion. 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. The elements are num-
+ bered from 0 starting at the first directory listed by ddiirrss.
+ With no arguments, ppooppdd removes the top directory from the
+ stack, and changes to the new top directory. Arguments, if sup-
+ plied, have the following meanings:
+ --nn Suppresses the normal change of directory when removing
+ directories from the stack, so that only the stack is ma-
+ nipulated.
+ ++_n Removes the _nth entry counting from the left of the list
+ shown by ddiirrss, starting with zero, from the stack. 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 top element of the directory stack is modified, and the
+ _-_n option was not supplied, ppooppdd uses the ccdd builtin to change
+ to the directory at the top of the stack. If the ccdd fails, ppooppdd
+ returns a non-zero value.
+
+ Otherwise, ppooppdd returns false if an invalid option is encoun-
+ tered, the directory stack is empty, or a non-existent directory
+ stack entry is specified.
+
+ If the ppooppdd command is successful, bash runs ddiirrss to show the
+ final contents of the directory stack, and the return status is
+ 0.
+
+ 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.
+ %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_-
+ _m_e_n_t before quoting it.
+ %%((_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 ar-
+ gument is specified, conversion behaves as if -1 had been
+ given. This is an exception to the usual pprriinnttff behav-
+ ior.
+
+ The %b, %q, and %T directives all use the field width and preci-
+ sion arguments from the format specification and write that many
+ bytes from (or use that wide a field for) the expanded argument,
+ which usually contains more characters than the original.
+
+ 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 ele-
+ ments of the directory stack. 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
+
+ After the stack has been modified, if the --nn option was not sup-
+ plied, ppuusshhdd uses the ccdd builtin to change to the directory at
+ the top of the stack. If the ccdd fails, ppuusshhdd returns a non-zero
+ value.
+
+ Otherwise, if no arguments are supplied, ppuusshhdd returns 0 unless
+ the directory stack is empty. When rotating the directory
+ stack, ppuusshhdd returns 0 unless the directory stack is empty or a
+ non-existent directory stack element is specified.
+
+ If the ppuusshhdd command is successful, bash runs ddiirrss to show the
+ final contents of the directory stack.
+
+ 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 in-
+ valid 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 de-
+ scriptor _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 sec-
+ ond _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 (de-
+ scribed 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 ig-
+ nored.
+ --dd _d_e_l_i_m
+ The first character of _d_e_l_i_m is used to terminate the in-
+ put 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 re-
+ turns immediately, without trying to read any data. The
+ exit status is 0 if input is available on the specified
+ file descriptor, or the read will return EOF, non-zero
+ otherwise. The exit status 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, without the ending de-
+ limiter but otherwise unmodified, is assigned to the variable
+ RREEPPLLYY. The exit status is zero, unless end-of-file is encoun-
+ tered, rreeaadd times out (in which case the status is greater than
+ 128), a variable assignment error (such as assigning to a read-
+ only variable) occurs, or an invalid file descriptor is supplied
+ 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 ar-
+ rays; the --AA option restricts the variables to associative ar-
+ rays. 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 rree--
+ ttuurrnn is executed by a trap handler, the last command used to de-
+ termine 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 exe-
+ cuted 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 signif-
+ icant 8 bits. The return status is non-zero if rreettuurrnn is sup-
+ plied a non-numeric argument, or is used outside a function and
+ not during execution of a script by .. or ssoouurrccee. Any command
+ associated with the RREETTUURRNN trap is executed before execution re-
+ sumes 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, display the name and value of each shell vari-
+ able in a format that can be reused as input for setting or re-
+ setting the currently-set variables. Read-only variables cannot
+ 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 argu-
+ ments remaining after option processing are treated as values
+ for the positional parameters and are assigned, in order, to $$11,
+ $$22, ...... $$_n. Options, if specified, have the following mean-
+ ings:
+ --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 ig-
+ nored 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 ``IG-
+ NOREEOF=10'' had been executed (see SShheellll VVaarrii--
+ aabblleess 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 ap-
+ pear 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.
+ --rr Enable restricted shell mode. This option cannot be un-
+ set once it has been set.
+ --tt Exit after reading and executing one command.
+ --uu Treat unset variables and parameters other than the spe-
+ cial parameters "@" and "*", or array variables sub-
+ scripted with "@" or "*", 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 ex-
+ ecuted 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 op-
+ tions can also be specified as arguments to an invocation of the
+ shell. The current set of options may be found in $$--. The re-
+ turn 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 un-
+ set. _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 param-
+ eters 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 op-
+ tions 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 op-
+ tions, 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 as-
+ sociative array subscripts during arithmetic expression
+ evaluation, while executing builtins that can perform
+ 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 ex-
+ iting 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
+ ccoommppaatt3322
+ ccoommppaatt4400
+ ccoommppaatt4411
+ ccoommppaatt4422
+ ccoommppaatt4433
+ ccoommppaatt4444
+ ccoommppaatt5500
+ These control aspects of the shell's compatibility mode
+ (see SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE below).
+
+ 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 ex-
+ pand 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, or in a shell startup file,
+ arrange to execute the debugger profile before the shell
+ starts, identical to the ----ddeebbuuggggeerr option. If set af-
+ ter invocation, behavior 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 de-
+ scription of FFIIGGNNOORREE. This option is enabled by de-
+ fault.
+
+ 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 se-
+ quence is not taken into account, so bb will not collate
+ between AA and BB, and upper-case and lower-case ASCII
+ characters will collate together.
+
+ gglloobbsskkiippddoottss
+ If set, pathname expansion will never match the file-
+ names ````..'''' and ````....'''', even if the pattern begins with
+ a ````..''''. This option is enabled by default.
+
+ 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 ex-
+ its, 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 op-
+ tion 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 at-
+ tribute 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 at-
+ tempt 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.
+
+ nnooeexxppaanndd__ttrraannssllaattiioonn
+ If set, bbaasshh encloses the translated results of $"..."
+ quoting in single quotes instead of double quotes. If
+ the string is not translated, this has no effect.
+
+ nnuullllgglloobb
+ If set, bbaasshh allows patterns which match no files (see
+ PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string,
+ rather than themselves.
+
+ ppaattssuubb__rreeppllaacceemmeenntt
+ If set, bbaasshh expands occurrences of && in the replacement
+ string of pattern substitution to the text matched by
+ the pattern, as described under PPaarraammeetteerr EExxppaannssiioonn
+ above. This option is enabled by default.
+
+ 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 us-
+ ing the command word resulting from the expanded alias.
+
+ pprroommppttvvaarrss
+ If set, prompt strings undergo parameter expansion, com-
+ mand substitution, arithmetic expansion, and quote re-
+ moval 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 re-
+ stricted 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.
+
+ vvaarrrreeddiirr__cclloossee
+ If set, the shell automatically closes file descriptors
+ assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see RREE--
+ DDIIRREECCTTIIOONN above) instead of leaving them open when the
+ command completes.
+
+ xxppgg__eecchhoo
+ If set, the eecchhoo builtin expands backslash-escape se-
+ quences by default.
+
+ ssuussppeenndd [--ff]
+ Suspend the execution of this shell until it receives a SSIIGGCCOONNTT
+ signal. A login shell, or a shell without job control enabled,
+ cannot be suspended; the --ff option can be used to override this
+ and force the suspension. The return status is 0 unless the
+ shell is a login shell or job control is not enabled and --ff is
+ not supplied.
+
+ 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 de-
+ pends 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
+ The following conditions are applied in the order listed.
+ If the first argument is !!, the result is the negation of
+ the three-argument expression composed of the remaining
+ arguments. the two-argument test using the second and
+ third arguments. If the first argument is exactly (( and
+ the fourth argument is exactly )), the result is the two-
+ argument test of the second and third arguments. Other-
+ wise, 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 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 re-
+ ceives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a sin-
+ gle _s_i_g_s_p_e_c) or --, each specified signal is reset to its origi-
+ nal 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 com-
+ mands associated with each signal. The --ll option causes the
+ shell to print a list of signal names and their corresponding
+ 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) op-
+ tion.
+
+ Signals ignored upon entry to the shell cannot be trapped or re-
+ set. 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 re-
+ turned. 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 specified
+ as a command name, or nothing if ``type -t name'' would not re-
+ turn _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 [--HHSS] --aa
+ uulliimmiitt [--HHSS] [--bbccddeeffiikkllmmnnppqqrrssttuuvvxxPPRRTT [_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, re-
+ spectively. 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, if appropriate, are printed before the value. Other op-
+ tions are interpreted as follows:
+ --aa All current limits are reported; no limits are set
+ --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
+ --RR The maximum time a real-time process can run before
+ blocking, in microseconds
+ --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; --RR, which is in microseconds; --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 increments. The return status is 0
+ unless an invalid option or argument 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, a function with that name, if any, is unset.
+ Each unset variable or function is removed from the environment
+ passed to subsequent commands. If any of BBAASSHH__AALLIIAASSEESS,
+ BBAASSHH__AARRGGVV00, BBAASSHH__CCMMDDSS, BBAASSHH__CCOOMMMMAANNDD, BBAASSHH__SSUUBBSSHHEELLLL, BBAASSHHPPIIDD,
+ CCOOMMPP__WWOORRDDBBRREEAAKKSS, DDIIRRSSTTAACCKK, EEPPOOCCHHRREEAALLTTIIMMEE, EEPPOOCCHHSSEECCOONNDDSS, FFUUNNCC--
+ NNAAMMEE, GGRROOUUPPSS, HHIISSTTCCMMDD, LLIINNEENNOO, RRAANNDDOOMM, SSEECCOONNDDSS, or SSRRAANNDDOOMM 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 or may not be unset.
+
+ wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_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, wwaaiitt waits for all running
+ background jobs and the last-executed process substitution, if
+ its process id is the same as $$!!, and the return status is zero.
+ If the --nn option is supplied, wwaaiitt waits for a single job from
+ the list of _i_ds or, if no _i_ds are supplied, any job, to complete
+ and returns its exit status. If none of the supplied arguments
+ is a child of the shell, or if no arguments are supplied and the
+ shell has no unwaited-for children, the exit status is 127. If
+ the --pp option is supplied, the process or job identifier of the
+ job for which the exit status is returned is assigned to the
+ variable _v_a_r_n_a_m_e named by the option argument. The variable
+ will be unset initially, before any assignment. This is useful
+ only when the --nn option is supplied. Supplying the --ff option,
+ when job control is enabled, forces wwaaiitt to wait for _i_d to ter-
+ minate 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. If wwaaiitt is interrupted by a signal,
+ the return status will be greater than 128, as described under
+ SSIIGGNNAALLSS above. Otherwise, the return status is the exit status
+ of the last process or job waited for.
+
+SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE
+ Bash-4.0 introduced the concept of a _s_h_e_l_l _c_o_m_p_a_t_i_b_i_l_i_t_y _l_e_v_e_l, speci-
+ fied as a set of options to the shopt builtin ( ccoommppaatt3311, ccoommppaatt3322,
+ ccoommppaatt4400, ccoommppaatt4411, and so on). There is only one current compatibil-
+ ity level -- each option is mutually exclusive. The compatibility
+ level is intended to allow users to select behavior from previous ver-
+ sions that is incompatible with newer versions while they migrate
+ scripts to use current features and behavior. It's intended to be a
+ temporary solution.
+
+ This section does not mention behavior that is standard for a particu-
+ lar version (e.g., setting ccoommppaatt3322 means that quoting the rhs of the
+ regexp matching operator quotes special regexp characters in the word,
+ which is default behavior in bash-3.2 and subsequent versions).
+
+ If a user enables, say, ccoommppaatt3322, it may affect the behavior of other
+ compatibility levels up to and including the current compatibility
+ level. The idea is that each compatibility level controls behavior
+ that changed in that version of bbaasshh, but that behavior may have been
+ present in earlier versions. For instance, the change to use locale-
+ based comparisons with the [[[[ command came in bash-4.1, and earlier
+ versions used ASCII-based comparisons, so enabling ccoommppaatt3322 will enable
+ ASCII-based comparisons as well. That granularity may not be suffi-
+ cient for all uses, and as a result users should employ compatibility
+ levels carefully. Read the documentation for a particular feature to
+ find out the current behavior.
+
+ Bash-4.3 introduced a new shell variable: BBAASSHH__CCOOMMPPAATT. The value as-
+ signed to this variable (a decimal version number like 4.2, or an inte-
+ ger corresponding to the ccoommppaatt_N_N option, like 42) determines the com-
+ patibility level.
+
+ Starting with bash-4.4, Bash has begun deprecating older compatibility
+ levels. Eventually, the options will be removed in favor of BBAASSHH__CCOOMM--
+ PPAATT.
+
+ Bash-5.0 is the final version for which there will be an individual
+ shopt option for the previous version. Users should use BBAASSHH__CCOOMMPPAATT on
+ bash-5.0 and later versions.
+
+ The following table describes the behavior changes controlled by each
+ compatibility level setting. The ccoommppaatt_N_N tag is used as shorthand for
+ setting the compatibility level to _N_N using one of the following mecha-
+ nisms. For versions prior to bash-5.0, the compatibility level may be
+ set using the corresponding ccoommppaatt_N_N shopt option. For bash-4.3 and
+ later versions, the BBAASSHH__CCOOMMPPAATT variable is preferred, and it is re-
+ quired for bash-5.1 and later versions.
+
+ ccoommppaatt3311
+ +o quoting the rhs of the [[[[ command's regexp matching oper-
+ ator (=~) has no special effect
+
+ ccoommppaatt3322
+ +o interrupting a command list such as "a ; b ; c" causes
+ the execution of the next command in the list (in
+ bash-4.0 and later versions, the shell acts as if it re-
+ ceived the interrupt, so interrupting one command in a
+ list aborts the execution of the entire list)
+
+ ccoommppaatt4400
+ +o the << and >> operators to the [[[[ command do not consider
+ the current locale when comparing strings; they use ASCII
+ ordering. Bash versions prior to bash-4.1 use ASCII col-
+ lation and _s_t_r_c_m_p(3); bash-4.1 and later use the current
+ locale's collation sequence and _s_t_r_c_o_l_l(3).
+
+ ccoommppaatt4411
+ +o in _p_o_s_i_x mode, ttiimmee may be followed by options and still
+ be recognized as a reserved word (this is POSIX interpre-
+ tation 267)
+ +o in _p_o_s_i_x mode, the parser requires that an even number of
+ single quotes occur in the _w_o_r_d portion of a double-
+ quoted parameter expansion and treats them specially, so
+ that characters within the single quotes are considered
+ quoted (this is POSIX interpretation 221)
+
+ ccoommppaatt4422
+ +o the replacement string in double-quoted pattern substitu-
+ tion does not undergo quote removal, as it does in ver-
+ sions after bash-4.2
+ +o in posix mode, single quotes are considered special when
+ expanding the _w_o_r_d portion of a double-quoted parameter
+ expansion and can be used to quote a closing brace or
+ other special character (this is part of POSIX interpre-
+ tation 221); in later versions, single quotes are not
+ special within double-quoted word expansions
+
+ ccoommppaatt4433
+ +o the shell does not print a warning message if an attempt
+ is made to use a quoted compound assignment as an argu-
+ ment to declare (e.g., declare -a foo='(1 2)'). Later
+ versions warn that this usage is deprecated
+ +o word expansion errors are considered non-fatal errors
+ that cause the current command to fail, even in posix
+ mode (the default behavior is to make them fatal errors
+ that cause the shell to exit)
+ +o when executing a shell function, the loop state
+ (while/until/etc.) is not reset, so bbrreeaakk or ccoonnttiinnuuee in
+ that function will break or continue loops in the calling
+ context. Bash-4.4 and later reset the loop state to pre-
+ vent this
+
+ ccoommppaatt4444
+ +o the shell sets up the values used by BBAASSHH__AARRGGVV and
+ BBAASSHH__AARRGGCC so they can expand to the shell's positional
+ parameters even if extended debugging mode is not enabled
+ +o a subshell inherits loops from its parent context, so
+ bbrreeaakk or ccoonnttiinnuuee will cause the subshell to exit.
+ Bash-5.0 and later reset the loop state to prevent the
+ exit
+ +o variable assignments preceding builtins like eexxppoorrtt and
+ rreeaaddoonnllyy that set attributes continue to affect variables
+ with the same name in the calling environment even if the
+ shell is not in posix mode
+
+ ccoommppaatt5500
+ +o Bash-5.1 changed the way $$RRAANNDDOOMM is generated to intro-
+ duce slightly more randomness. If the shell compatibility
+ level is set to 50 or lower, it reverts to the method
+ from bash-5.0 and previous versions, so seeding the ran-
+ dom number generator by assigning a value to RRAANNDDOOMM will
+ produce the same sequence as in bash-5.0
+ +o If the command hash table is empty, bash versions prior
+ to bash-5.1 printed an informational message to that ef-
+ fect, even when producing output that can be reused as
+ input. Bash-5.1 suppresses that message when the --ll op-
+ tion is supplied.
+
+ ccoommppaatt5511
+ +o The uunnsseett builtin treats attempts to unset array sub-
+ scripts @@ and ** differently depending on whether the ar-
+ ray is indexed or associative, and differently than in
+ previous versions.
+
+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, HHIISSTTFFIILLEE, 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
+ hhiissttoorryy 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 sshhoopptt --uu rree--
+ ssttrriicctteedd__sshheellll.
+
+ 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
+ _~_/_._b_a_s_h___h_i_s_t_o_r_y
+ The default value of HHIISSTTFFIILLEE, the file in which bash saves the
+ command history
+ _~_/_._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_/ and _h_t_t_p_:_/_/_g_i_t_._s_a_v_a_n_-
+ _n_a_h_._g_n_u_._o_r_g_/_c_g_i_t_/_b_a_s_h_._g_i_t_/_s_n_a_p_s_h_o_t_/_b_a_s_h_-_m_a_s_t_e_r_._t_a_r_._g_z.
+
+ 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.2 2022 September 19 BASH(1)
diff --git a/doc/bash.1 b/doc/bash.1
new file mode 100644
index 0000000..55c5622
--- /dev/null
+++ b/doc/bash.1
@@ -0,0 +1,11764 @@
+.\"
+.\" MAN PAGE COMMENTS to
+.\"
+.\" Chet Ramey
+.\" Case Western Reserve University
+.\" chet.ramey@case.edu
+.\"
+.\" Last Change: Mon Sep 19 11:13:21 EDT 2022
+.\"
+.\" bash_builtins, strip all but Built-Ins section
+.if \n(zZ=1 .ig zZ
+.if \n(zY=1 .ig zY
+.TH BASH 1 "2022 September 19" "GNU Bash 5.2"
+.\"
+.\" 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-2022 by the Free Software Foundation, Inc.
+.if t Bash is Copyright \(co 1989-2022 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 historical remote shell daemon, usually \fIrshd\fP,
+or the secure shell daemon \fIsshd\fP.
+If
+.B bash
+determines it is being run non-interactively 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
+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
+.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 command (see
+.SM
+.B SHELL GRAMMAR
+below), the third word of a
+.B case
+or
+.B select
+command
+(only \fBin\fP is valid), or the third word of a
+.B for
+command (only \fBin\fP and \fBdo\fP are valid):
+.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"
+This section describes the syntax of the various forms of shell commands.
+.SS Simple Commands
+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
+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]] [ ! ] \fIcommand1\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ]
+.RE
+.PP
+The standard output of
+.I command1
+is connected via a pipe to the standard input of
+.IR command2 .
+This connection is performed before any redirections specified by the
+.IR command1 (see
+.SM
+.B REDIRECTION
+below).
+If \fB|&\fP is used, \fIcommand1\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 \fIcommand1\fP.
+.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 multi-command pipeline,
+where pipes are created,
+is executed in a \fIsubshell\fP, which is a
+separate process.
+See
+.SM
+\fBCOMMAND EXECUTION ENVIRONMENT\fP
+for a description of subshells and 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
+when job control is not active.
+.SS Lists
+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
+.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
+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 (see
+.SM
+\fBCOMMAND EXECUTION ENVIRONMENT\fP
+below for a description of a subshell environment).
+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.
+The \fIexpression\fP
+undergoes the same expansions
+as if it were within double quotes,
+but double quote characters in \fIexpression\fP are not treated specially
+and are removed.
+.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" .
+The words between the \fB[[\fP and \fB]]\fP do not undergo word splitting
+and pathname expansion.
+The shell performs tilde expansion, parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal on those words
+(the expansions that would occur if the words were enclosed in double quotes).
+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
+(using the POSIX \fIregcomp\fP and \fIregexec\fP interfaces
+usually described 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.
+If any part of the pattern is quoted, the quoted portion is matched literally.
+This means every character in the quoted portion matches itself,
+instead of having any special pattern matching meaning.
+If the pattern is stored in a shell variable, quoting the variable
+expansion forces the entire pattern to be matched literally.
+Treat bracket expressions in regular expressions carefully,
+since normal quoting and pattern characters lose their meanings
+between brackets.
+.if t .sp 0.5
+.if n .sp 1
+The pattern will match if it matches any part of the string.
+Anchor the pattern using the \fB^\fP and \fB$\fP regular expression
+operators to force it to match the entire string.
+The array variable
+.SM
+.B BASH_REMATCH
+records which parts of the string matched the pattern.
+The element of
+.SM
+.B BASH_REMATCH
+with index 0 contains the portion of
+the string matching the entire regular expression.
+Substrings matched by parenthesized subexpressions within the regular
+expression are saved in the remaining
+.SM
+.B BASH_REMATCH
+indices. The element of
+.SM
+.B BASH_REMATCH
+with index \fIn\fP is the portion of the
+string matching the \fIn\fPth parenthesized subexpression.
+Bash sets
+.SM
+.B BASH_REMATCH
+in the global scope; declaring it as a local variable will lead to
+unexpected results.
+.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, and 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).
+.B select
+then displays the
+.SM
+.B PS3
+prompt and reads a line 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 \fBselect\fP command completes and returns 1.
+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, process substitution, and quote removal.
+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,
+continuing the case statement execution as if the pattern list had not matched.
+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
+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 syntax for a coprocess is:
+.RS
+.PP
+\fBcoproc\fP [\fINAME\fP] \fIcommand\fP [\fIredirections\fP]
+.RE
+.PP
+This creates a coprocess named \fINAME\fP.
+\fIcommand\fP may be either a simple command or a compound
+command (see above).
+\fINAME\fP is a shell variable name.
+If \fINAME\fP is not supplied, the default name is \fBCOPROC\fP.
+.PP
+The recommended form to use for a coprocess is
+.RS
+.PP
+\fBcoproc\fP \fINAME\fP { \fIcommand\fP [\fIredirections\fP]; }
+.RE
+.PP
+This form is recommended because simple commands result in the coprocess
+always being named \fBCOPROC\fP, and it is simpler to use and more complete
+than the other compound commands.
+.PP
+If \fIcommand\fP is a compound command, \fINAME\fP is optional. The
+word following \fBcoproc\fP determines whether that word is interpreted
+as a variable name: it is interpreted as \fINAME\fP if it is not a
+reserved word that introduces a compound command.
+If \fIcommand\fP is a simple command, \fINAME\fP is not allowed; this
+is to avoid confusion between \fINAME\fP and the first word of the simple
+command.
+.PP
+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.
+.PP
+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
+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
+\fIfname\fP () \fIcompound\-command\fP [\fIredirection\fP]
+.PD 0
+.TP
+\fBfunction\fP \fIfname\fP [()] \fIcompound\-command\fP [\fIredirection\fP]
+.PD
+This defines a function named \fIfname\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.
+If the \fBfunction\fP reserved word is used, but the
+parentheses are not supplied, the braces are recommended.
+\fIcompound\-command\fP is executed whenever \fIfname\fP is specified as the
+name of a simple command.
+When in \fIposix mode\fP, \fIfname\fP must be a valid shell \fIname\fP
+and may not be the name of one of the
+POSIX \fIspecial builtins\fP.
+In default mode, a function name can be any unquoted shell word that does
+not contain \fB$\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
+Character sequences of the form \fB$\fP\(aq\fIstring\fP\(aq are treated
+as a special variant of single quotes.
+The sequence expands to \fIstring\fP, with backslash-escaped characters
+in \fIstring\fP 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.
+The \fIgettext\fP infrastructure performs the lookup and
+translation, using the \fBLC_MESSAGES\fP, \fBTEXTDOMAINDIR\fP,
+and \fBTEXTDOMAIN\fP shell variables.
+If the current locale is \fBC\fP or \fBPOSIX\fP,
+if there are no translations available,
+or if the string is not translated,
+the dollar sign is ignored.
+This is a form of double quoting, so the string remains double-quoted
+by default, whether or not it is translated and replaced.
+If the \fBnoexpand_translation\fP option is enabled
+using the \fBshopt\fP builtin,
+translated strings are single-quoted instead of double-quoted.
+See the description of
+.B shopt
+below under
+.SM
+.BR SHELL BUILTIN COMMANDS .
+.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 and pathname expansion are 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 \fBinteger\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
+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
+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.
+.PD
+.SS Shell Variables
+The following variables are set by the shell:
+.PP
+.PD 0
+.TP
+.B _
+At shell startup, set to the 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.
+.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.
+If
+.B BASH_COMMAND
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.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.
+.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.
+If
+.B BASH_SUBSHELL
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.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.
+Assignments to
+.SM
+.B HISTCMD
+are ignored.
+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, it expands to a random integer
+between 0 and 32767.
+Assigning
+a value to
+.SM
+.BR RANDOM
+initializes (seeds) the sequence of random numbers.
+If
+.SM
+.B RANDOM
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B READLINE_ARGUMENT
+Any numeric argument given to a readline command that was defined using
+.if t \f(CWbind -x\fP
+.if n "bind -x"
+(see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below)
+when it was invoked.
+.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_MARK
+The position of the mark (saved 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).
+The characters between the insertion point and the mark are often
+called the \fIregion\fP.
+.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, it expands to the number of seconds since shell invocation.
+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.
+The number of seconds at shell invocation and the current time are always
+determined by querying the system clock.
+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 SRANDOM
+This variable expands to a 32-bit pseudo-random number each time it is
+referenced. The random number generator is not linear on systems that
+support \f(CW/dev/urandom\fP or \fIarc4random\fP, so each returned number
+has no relationship to the numbers preceding it.
+The random number generator cannot be seeded, so assignments to this
+variable have no effect.
+If
+.SM
+.B SRANDOM
+is unset, it loses its special properties,
+even if it is subsequently reset.
+.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
+.SM
+.B "SHELL COMPATIBILITY MODE"
+below 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 values correspond to the compatibility levels
+described below under
+.SM
+.BR "SHELL COMPATIBILITY MODE" .
+For example, 4.2 and 42 are valid values that correspond
+to the \fBcompat42\fP \fBshopt\fP option
+and set the compatibility level to 42.
+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
+Expanded and executed similarly to
+.SM
+.B BASH_ENV
+(see \fBINVOCATION\fP above)
+when an interactive 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 this variable is set, and is an array,
+the value of each set element is executed as a command
+prior to issuing each primary prompt.
+If this is set but not an array variable,
+its value is used as a command to execute instead.
+.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
+This variable expands to the full pathname to the shell.
+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 may be of the form [\fIsubscript\fP]=\fIstring\fP.
+Indexed array assignments do not require anything but \fIstring\fP.
+Each \fIvalue\fP in the list is expanded using all the shell expansions
+described below under
+.SM
+.BR EXPANSION .
+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 words in a compound assignment
+may be either assignment statements, for which the subscript is required,
+or a list of words that is interpreted as a sequence of alternating keys
+and values:
+\fIname\fP=\fB( \fP\fIkey1 value1 key2 value2\fP ...\fB)\fP.
+These are treated identically to
+\fIname\fP=\fB(\fP [\fIkey1\fP]=\fIvalue1\fP [\fIkey2\fP]=\fIvalue2\fP ...\fB)\fP.
+The first word in the list determines how the remaining words
+are interpreted; all assignments in a list must be of the same type.
+When using key/value pairs, the keys may not be missing or empty;
+a final missing value is treated like the empty string.
+.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
+The += operator will append to an array variable when assigning
+using the compound assignment syntax; see
+.SM
+.B PARAMETERS
+above.
+.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,
+removes the entire array.
+\fBunset\fP \fIname\fP[\fIsubscript\fP], where
+\fIsubscript\fP is \fB*\fP or \fB@\fP, behaves differently depending on
+whether \fIname\fP is an indexed or associative array.
+If \fIname\fP is an associative array, this unsets the element with
+subscript \fB*\fP or \fB@\fP.
+If \fIname\fP is an indexed array, unset removes all of the elements but
+does not remove the array itself.
+.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
+.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 letters,
+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 letters 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
+(integer or letter).
+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
+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
+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 or \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 or \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}
+.PD 0
+.TP
+${\fIparameter\fP\fB//\fP\fIpattern\fP\fB/\fP\fIstring\fP}
+.TP
+${\fIparameter\fP\fB/#\fP\fIpattern\fP\fB/\fP\fIstring\fP}
+.TP
+${\fIparameter\fP\fB/%\fP\fIpattern\fP\fB/\fP\fIstring\fP}
+.PD
+\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.
+\fIstring\fP undergoes tilde expansion, parameter and variable expansion,
+arithmetic expansion, command and process substitution, and quote removal.
+The match is performed using the rules described under
+.B Pattern Matching
+below.
+In the first form above, only the first match is replaced.
+If there are two slashes separating \fIparameter\fP and \fIpattern\fP
+(the second form above), all matches of \fIpattern\fP are
+replaced with \fIstring\fP.
+If \fIpattern\fP is preceded by \fB#\fP (the third form above),
+it must match at the beginning of the expanded value of \fIparameter\fP.
+If \fIpattern\fP is preceded by \fB%\fP (the fourth form above),
+it must match at the end of the expanded value of \fIparameter\fP.
+If the expansion of \fIstring\fP is null,
+matches of \fIpattern\fP are deleted.
+If \fIstring\fP is null,
+matches of \fIpattern\fP are deleted
+and the \fB/\fP following \fIpattern\fP may be omitted.
+.sp 1
+If the \fBpatsub_replacement\fP shell option is enabled using \fBshopt\fP,
+any unquoted instances of \fB&\fP in \fIstring\fP are replaced with the
+matching portion of \fIpattern\fP.
+.sp 1
+Quoting any part of \fIstring\fP inhibits replacement in the
+expansion of the quoted portion, including replacement strings stored
+in shell variables.
+Backslash will escape \fB&\fP in \fIstring\fP; the backslash is removed
+in order to permit a literal \fB&\fP in the replacement string.
+Backslash can also be used to escape a backslash; \fB\e\e\fP results in
+a literal backslash in the replacement.
+Users should take care if \fIstring\fP is double-quoted to avoid
+unwanted interactions between the backslash and double-quoting, since
+backslash has special meaning within double quotes.
+Pattern substitution performs the check for unquoted \fB&\fP after
+expanding \fIstring\fP;
+shell programmers should quote any occurrences of \fB&\fP
+they want to be taken literally in the replacement
+and ensure any instances of \fB&\fP they want to be replaced are unquoted.
+.sp 1
+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 U
+The expansion is a string that is the value of \fIparameter\fP with lowercase
+alphabetic characters converted to uppercase.
+.TP
+.B u
+The expansion is a string that is the value of \fIparameter\fP with the first
+character converted to uppercase, if it is alphabetic.
+.TP
+.B L
+The expansion is a string that is the value of \fIparameter\fP with uppercase
+alphabetic characters converted to lowercase.
+.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$\(aq...\(aq\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 K
+Produces a possibly-quoted version of the value of \fIparameter\fP,
+except that it prints the values of
+indexed and associative arrays as a sequence of quoted key-value pairs
+(see \fBArrays\fP above).
+.TP
+.B a
+The expansion is a string consisting of flag values representing
+\fIparameter\fP's attributes.
+.TP
+.B k
+Like the K transformation, but expands the keys and values of
+indexed and associative arrays to separate words after word splitting.
+.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
+\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
+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
+undergoes the same expansions
+as if it were within double quotes,
+but double quote characters in \fIexpression\fP are not treated specially
+and are removed.
+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
+\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
+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
+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, and is not quoted, 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.
+In order to match the filenames
+.B ``.''
+and
+.BR ``..'' ,
+the pattern must begin with ``.'' (for example, ``.?''),
+even if
+.B dotglob
+is set.
+If the
+.B globskipdots
+shell option is enabled, the filenames
+.B ``.''
+and
+.BR ``..''
+are never matched, even if the pattern begins with a
+.BR ``.'' .
+When not matching pathnames, 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 globskipdots ,
+.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,
+and the characters included in the range,
+are 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, the shell recognizes several extended pattern matching operators.
+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
+The\fBextglob\fP option changes the behavior of the parser, since the
+parentheses are normally treated as operators with syntactic meaning.
+To ensure that extended matching patterns are parsed correctly, make sure
+that \fBextglob\fP is enabled before parsing constructs containing the
+patterns, including shell functions and command substitutions.
+.PP
+When matching filenames, the \fBdotglob\fP shell option determines
+the set of filenames that are tested:
+when \fBdotglob\fP is enabled, the set of filenames includes all files
+beginning with ``.'', but ``.'' and ``..'' must be matched by a
+pattern or sub-pattern that begins with a dot;
+when it is disabled, the set does not
+include any filenames beginning with ``.'' unless the pattern
+or sub-pattern begins with a ``.''.
+As above, ``.'' only has a special meaning when matching filenames.
+.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
+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.
+\fIRedirection\fP 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's lifetime manually.
+The \fBvarredir_close\fP shell option manages this behavior.
+.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
+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
+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
+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
+.SS 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
+.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
+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
+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"
+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"
+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"
+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, use a shell function (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 (\fIlocal variables\fP).
+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).
+.PP
+In the following description, the \fIcurrent scope\fP is a currently-
+executing function.
+Previous scopes consist of that function's caller and so on,
+back to the "global" scope, where the shell is not executing
+any shell function.
+Consequently, a local variable at the current scope is a variable
+declared using the \fBlocal\fP or \fBdeclare\fP builtins in the
+function that is currently executing.
+.PP
+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
+(appearing as unset)
+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
+(see below how the \fBlocalvar_unset\fP shell option changes this behavior).
+.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 child shell processes
+(those created when executing a separate shell invocation)
+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
+Integer constants follow the C language definition, without suffixes or
+character constants.
+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,
+if a non-digit is required,
+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 and \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, in
+the following order.
+.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.
+In the case of such a command (one that consists only of assignment
+statements and redirections), assignment statements are performed before
+redirections.
+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, and the shell creates a
+new instance of itself
+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
+A \fIsubshell\fP is a copy of the shell process.
+.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"
+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
+The exit status of the last command is available in the special
+parameter $?.
+.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.
+.PP
+When job control is not enabled, and \fBbash\fP is waiting for a foreground
+command to complete, the shell receives keyboard-generated signals
+such as
+.SM
+.B SIGINT
+(usually generated by \fB^C\fP) that users commonly intend to send
+to that command.
+This happens because the shell and the command are in the
+same process group as the terminal, and \fB^C\fP sends
+.SM
+.B SIGINT
+to all processes in that process group.
+.PP
+When \fBbash\fP is running without job control enabled and receives
+.SM
+.B SIGINT
+while waiting for a foreground command, it waits until that foreground
+command terminates and then decides what to do about the
+.SM
+.BR SIGINT :
+.IP 1.
+If the command terminates due to the
+.SM
+.BR SIGINT ,
+\fBbash\fP concludes
+that the user meant to end the entire script, and acts on the
+.SM
+.B SIGINT
+(e.g., by running a
+.SM
+.B SIGINT
+trap or exiting itself);
+.IP 2.
+If the command does not terminate due to
+.SM
+.BR SIGINT ,
+the program handled the
+.SM
+.B SIGINT
+itself and did not treat it as a fatal signal.
+In that case, \fBbash\fP does not treat
+.SM
+.B SIGINT
+as a fatal signal, either, instead assuming that the
+.SM
+.B SIGINT
+was used as part of the program's normal operation
+(e.g., emacs uses it to abort editing
+commands) or deliberately discarded.
+However, \fBbash\fP will run any
+trap set on
+.SM
+.BR SIGINT ,
+as it does with any other trapped signal it
+receives while it is waiting for the foreground command to
+complete, for compatibility.
+.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
+job whose command name begins with
+.BR ce .
+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 causes \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 value of the \fBPWD\fP shell variable (\fB$PWD\fP),
+with
+.SM
+.B $HOME
+abbreviated with a tilde
+(uses the value of the
+.SM
+.B PROMPT_DIRTRIM
+variable)
+.TP
+.B \eW
+the basename of \fB$PWD\fP,
+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).
+This can have unwanted side effects if escaped portions of the string
+appear within command substitution or contain characters special to
+word expansion.
+.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"
+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"
+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 .
+If that file does not exist or cannot be read, the ultimate default is
+.IR /etc/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"
+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"
+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
+or using the \fBbind\fP builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.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 active\-region\-start\-color
+A string variable that controls the text color and background when displaying
+the text in the active region (see the description of
+\fBenable\-active\-region\fP below).
+This string must not take up any physical character positions on the display,
+so it should consist only of terminal escape sequences.
+It is output to the terminal before displaying the text in the active region.
+This variable is reset to the default value whenever the terminal type changes.
+The default value is the string that puts the terminal in standout mode,
+as obtained from the terminal's terminfo description.
+A sample value might be \f(CW"\ee[01;33m"\fP.
+.TP
+.B active\-region\-end\-color
+A string variable that "undoes" the effects of \fBactive\-region\-start\-color\fP
+and restores "normal" terminal display appearance after displaying text
+in the active region.
+This string must not take up any physical character positions on the display,
+so it should consist only of terminal escape sequences.
+It is output to the terminal after displaying the text in the active region.
+This variable is reset to the default value whenever the terminal type changes.
+The default value is the string that restores the terminal from standout mode,
+as obtained from the terminal's terminfo description.
+A sample value might be \f(CW"\ee[0m"\fP.
+.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.
+If there is a color definition in \fB$LS_COLORS\fP for the custom suffix
+"readline-colored-completion-prefix", readline uses this color for
+the common prefix instead of its default.
+.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,
+readline will ask whether or not the user wishes to view them;
+otherwise they are simply listed on the terminal.
+A zero value means readline should never ask; negative values are
+treated as zero.
+.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.
+This variable is dependent on the \fBLC_CTYPE\fP locale category, and
+may change if the locale is changed.
+.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\-active\-region (On)
+The \fIpoint\fP is the current cursor position, and \fImark\fP refers
+to a saved cursor position.
+The text between the point and mark is referred to as the \fIregion\fP.
+When this variable is set to \fIOn\fP, readline allows certain commands
+to designate the region as \fIactive\fP.
+When the region is active, readline highlights the text in the region using
+the value of the \fBactive\-region\-start\-color\fP, which defaults to the
+string that enables
+the terminal's standout mode.
+The active region shows the text inserted by bracketed-paste and any
+matching text found by incremental and non-incremental history searches.
+.TP
+.B enable\-bracketed\-paste (On)
+When set to \fBOn\fP, readline configures the terminal 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 prevents readline from executing any editing commands bound to key
+sequences appearing in the pasted text.
+.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.
+This setting is automatically enabled for terminals of height 1.
+.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.
+This variable is dependent on the \fBLC_CTYPE\fP locale category, and
+may change if the locale is changed.
+.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.
+This variable is dependent on the \fBLC_CTYPE\fP locale category, and
+may change if the locale is changed.
+.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"
+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
+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"
+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
+.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\-display (M\-C\-l)
+Clear the screen and, if possible, the terminal's scrollback buffer,
+then redraw the current line,
+leaving the current line at the top of the screen.
+.TP
+.B clear\-screen (C\-l)
+Clear the screen,
+then redraw the current line,
+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
+.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 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
+fetch\-history
+With a numeric argument, fetch that entry from the history list
+and make it the current line.
+Without an argument, move back to the first entry in the history list.
+.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 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
+.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
+.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
+.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
+.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
+.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
+.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 argument 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 argument 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 spell\-correct\-word (C\-x s)
+Perform spelling correction on the current word, treating it as a directory
+or filename, in the same way as the \fBcdspell\fP shell option.
+Word boundaries are the same as those used by \fBshell\-forward\-word\fP.
+.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
+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"
+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
+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.
+If \fIstring\fP is missing, the string from the most recent search is used;
+it is an error if there is no previous search string.
+.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\d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u''
+(see \fBModifiers\fP below).
+.TP
+.B !#
+The entire command line typed so far.
+.PD
+.SS Word Designators
+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 first word matched by the most recent `?\fIstring\fR?' search,
+if the search string begins with a character that is part of a word.
+.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.
+If \fBx\fP is missing, it defaults to 0.
+.PD
+.PP
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+.SS Modifiers
+After the optional word designator, there may appear a sequence of
+one or more of the following modifiers, each preceded by a `:'.
+These modify, or edit, the word or words selected from the history event.
+.PP
+.PD 0
+.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.
+The \fBq\fP and \fBx\fP modifiers are mutually exclusive; the last one
+supplied is used.
+.TP
+.B s/\fIold\fP/\fInew\fP/
+Substitute
+.I new
+for the first occurrence of
+.I old
+in the event line.
+Any character may be used as the delimiter 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.
+If
+.I new
+is null, each matching
+.I old
+is deleted.
+.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' or `\fB&\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 ,
+but \fIfilename\fP does not need to be executable.
+The file searched for in
+.SM
+.B PATH
+need not be executable.
+When \fBbash\fP is not in \fIposix mode\fP, it searches
+the current directory 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, \fB.\fP inherits any trap on
+\fBDEBUG\fP; if it is not, any \fBDEBUG\fP trap string is saved and
+restored around the call to \fB.\fP, and \fB.\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 \fB.\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
+.TP
+\fBbind\fP \fIreadline-command-line\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 a
+.B readline
+initialization file such as
+.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
+and
+.SM
+.B READLINE_MARK
+variables to the current location of the insertion point and the saved
+insertion point (the mark), respectively.
+The shell assigns any numeric argument the user supplied to the
+.SM
+.B READLINE_ARGUMENT
+variable.
+If there was no argument, that variable is not set.
+If the executed command changes the value of any of
+.SM
+.BR READLINE_LINE ,
+.SM
+.BR READLINE_POINT ,
+or
+.SM
+.BR READLINE_MARK ,
+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.
+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.
+If the directory change is successful, \fBcd\fP sets the value of the
+\fBPWD\fP environment variable to the new directory name, and sets the
+\fBOLDPWD\fP environment variable to the value of the current working
+directory before the change.
+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]
+.br
+[\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] [\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 initial 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
+.ie \n(zZ=1 in \fIbash(1)\fP.
+.el 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.
+Arguments are passed as with the \fB\-F\fP option.
+.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 initial 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\-aAfFgiIlnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
+.PD 0
+.TP
+\fBtypeset\fP [\fB\-aAfFgiIlnrtux\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
+.B \-I
+option causes local variables to inherit the attributes
+(except the \fInameref\fP attribute)
+and value of any existing variable with the same
+\fIname\fP at a surrounding scope.
+If there is no existing variable, the local variable is initially unset.
+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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
+.TP
+.B \-A
+Each \fIname\fP is an associative array variable (see
+.B Arrays
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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"
+.ie \n(zZ=1 in \fIbash(1)\fP)
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP),
+.el 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.
+Bash will use the value of the \fBBASH_LOADABLES_PATH\fP variable as a
+colon-separated list of directories in which to search for \fIfilename\fP.
+The default is system-dependent.
+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.
+If no options are supplied and a \fIname\fP is not a shell builtin,
+\fBenable\fP will attempt to load \fIname\fP from a shared object named
+\fIname\fP, as if the command were
+.if t \f(CWenable \-f\fP \fIname name\fP .
+.if n ``enable -f \fIname name\fP .
+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).
+When listing, a \fIfirst\fP or \fIlast\fP of
+0 is equivalent to \-1 and \-0 is equivalent to the current
+command (usually the \fBfc\fP command); otherwise 0 is equivalent to \-1
+and \-0 is invalid.
+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 [\fIarg ...\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
+supplied as
+.I arg
+values,
+.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 range of 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 or range 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"
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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.
+The restore is effected as if a series of \fBset\fP commands were executed
+to restore the values that were in place before the function.
+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.
+The elements are numbered from 0 starting at the first directory
+listed by \fBdirs\fP.
+With no arguments, \fBpopd\fP
+removes the top directory from the stack, and
+changes 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, from the stack.
+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 top element of the directory stack is modified, and
+the \fI-n\fP option was not supplied, \fBpopd\fP uses the \fBcd\fP
+builtin to change to the directory at the top of the stack.
+If the \fBcd\fP fails, \fBpopd\fP returns a non-zero value.
+.PP
+Otherwise,
+.B popd
+returns false if an invalid option is encountered, the directory stack
+is empty, or a non-existent directory stack entry is specified.
+.PP
+If the
+.B popd
+command is successful,
+bash runs
+.B dirs
+to show the final contents of the directory stack,
+and the return status is 0.
+.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 %Q
+like \fB%q\fP, but applies any supplied precision to the \fIargument\fP
+before quoting it.
+.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
+The %b, %q, and %T directives all use the field width and precision
+arguments from the format specification and write that many bytes from
+(or use that wide a field for) the expanded argument, which usually
+contains more characters than the original.
+.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 elements of
+the directory stack.
+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
+.PD
+.PP
+After the stack has been modified, if the \fB\-n\fP option was not
+supplied, \fBpushd\fP uses the \fBcd\fP builtin to change to the
+directory at the top of the stack.
+If the \fBcd\fP fails, \fBpushd\fP returns a non-zero value.
+.PP
+Otherwise, if no arguments are supplied,
+.B pushd
+returns 0 unless the directory stack is empty.
+When rotating the directory stack,
+.B pushd
+returns 0 unless the directory stack is empty or
+a non-existent directory stack element is specified.
+.PP
+If the
+.B pushd
+command is successful,
+bash runs
+.B dirs
+to show the final contents of the directory stack.
+.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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP)
+.el 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,
+or the read will return EOF,
+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,
+without the ending delimiter but otherwise unmodified,
+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] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP ...]
+.PD 0
+.TP
+\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP ...]
+.PD
+Without options, display the name and value of each shell variable
+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
+.ie \n(zZ=1 in \fIbash(1)\fP),
+.el 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"
+.ie \n(zZ=1 in \fIbash(1)\fP),
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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"
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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 \-r
+Enable restricted shell mode.
+This option cannot be unset once it has been set.
+.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 "*",
+or array variables subscripted with "@" or "*",
+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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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"
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el above
+under
+.SM
+.BR HISTORY .
+.PD 0
+.TP 8
+.B compat31
+.TP 8
+.B compat32
+.TP 8
+.B compat40
+.TP 8
+.B compat41
+.TP 8
+.B compat42
+.TP 8
+.B compat43
+.TP 8
+.B compat44
+.TP 8
+.B compat50
+.PD
+These control aspects of the shell's compatibility mode
+(see
+.SM
+.B "SHELL COMPATIBILITY MODE"
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el below).
+.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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el above
+under
+.SM
+.BR ALIASES .
+This option is enabled by default for interactive shells.
+.TP 8
+.B extdebug
+If set at shell invocation,
+or in a shell startup file,
+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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP)
+.el 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 globskipdots
+If set, pathname expansion will never match the filenames
+.B ``.''
+and
+.BR ``..'' ,
+even if the pattern begins with a
+.BR ``.'' .
+This option is enabled by default.
+.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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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"
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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 noexpand_translation
+If set,
+.B bash
+encloses the translated results of $"..." quoting in single quotes
+instead of double quotes.
+If the string is not translated, this has no effect.
+.TP 8
+.B nullglob
+If set,
+.B bash
+allows patterns which match no
+files (see
+.B Pathname Expansion
+.ie \n(zZ=1 in \fIbash(1)\fP)
+.el above)
+to expand to a null string, rather than themselves.
+.TP 8
+.B patsub_replacement
+If set, \fBbash\fP
+expands occurrences of \fB&\fP in the replacement string of pattern
+substitution to the text matched by the pattern, as described
+under \fBParameter Expansion\fP
+.ie \n(zZ=1 in \fIbash(1)\fP.
+.el above.
+This option is enabled by default.
+.TP 8
+.B progcomp
+If set, the programmable completion facilities (see
+\fBProgrammable Completion\fP
+.ie \n(zZ=1 in \fIbash(1)\fP)
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP.
+.el 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"
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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
+\fB.\fP (\fBsource\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 varredir_close
+If set, the shell automatically closes file descriptors assigned using the
+\fI{varname}\fP redirection syntax (see
+.SM
+.B REDIRECTION
+.ie \n(zZ=1 in \fIbash(1)\fP)
+.el above)
+instead of leaving them open when the command completes.
+.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,
+or a shell without job control enabled,
+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
+or job control is not enabled
+and
+.B \-f
+is not supplied.
+.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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el 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
+The following conditions are applied in the order listed.
+If the first argument is \fB!\fP, the result is the negation of
+the three-argument expression composed of the remaining arguments.
+the two-argument test using the second and third arguments.
+If the first argument is exactly \fB(\fP and the fourth argument is
+exactly \fB)\fP, the result is the two-argument test of the second
+and third 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
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el 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\-HS\fP] \fB\-a\fP
+.PD 0
+.TP
+\fBulimit\fP [\fB\-HS\fP] [\fB\-bcdefiklmnpqrstuvxPRT\fP [\fIlimit\fP]]
+.PD
+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, if appropriate,
+are printed before the value.
+Other options are interpreted as follows:
+.RS
+.PD 0
+.TP
+.B \-a
+All current limits are reported; no limits are set
+.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 \-R
+The maximum time a real-time process can run before blocking, in microseconds
+.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 \-R ,
+which is in microseconds;
+.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, a function with that name, if any, is
+unset.
+Each unset variable or function is removed from the environment
+passed to subsequent commands.
+If any of
+.SM
+.BR BASH_ALIASES ,
+.SM
+.BR BASH_ARGV0 ,
+.SM
+.BR BASH_CMDS ,
+.SM
+.BR BASH_COMMAND ,
+.SM
+.BR BASH_SUBSHELL ,
+.SM
+.BR BASHPID ,
+.SM
+.BR COMP_WORDBREAKS ,
+.SM
+.BR DIRSTACK ,
+.SM
+.BR EPOCHREALTIME ,
+.SM
+.BR EPOCHSECONDS ,
+.SM
+.BR FUNCNAME ,
+.SM
+.BR GROUPS ,
+.SM
+.BR HISTCMD ,
+.SM
+.BR LINENO ,
+.SM
+.BR RANDOM ,
+.SM
+.BR SECONDS ,
+or
+.SM
+.B SRANDOM
+are unset, they lose their special properties, even if they are
+subsequently reset. The exit status is true unless a
+.I name
+is readonly or may not be unset.
+.TP
+\fBwait\fP [\fB\-fn\fP] [\fP\-p\fP \fIvarname\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,
+\fBwait\fP waits for all running background jobs and
+the last-executed process substitution, if its process id is the same as
+\fB$!\fP,
+and the return status is zero.
+If the \fB\-n\fP option is supplied,
+\fBwait\fP waits for a single job
+from the list of \fIid\fPs or, if no \fIid\fPs are supplied, any job,
+to complete and returns its exit status.
+If none of the supplied arguments is a child of the shell, or if no arguments
+are supplied and the shell has no unwaited-for children, the exit status
+is 127.
+If the \fB\-p\fP option is supplied, the process or job identifier of the job
+for which the exit status is returned is assigned to the variable
+\fIvarname\fP named by the option argument.
+The variable will be unset initially, before any assignment.
+This is useful only when the \fB\-n\fP option is supplied.
+Supplying the \fB\-f\fP option, when job control is enabled,
+forces \fBwait\fP to wait for \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.
+If \fBwait\fP is interrupted by a signal, the return status will be greater
+than 128, as described under
+.B SIGNALS
+.ie \n(zZ=1 in \fIbash(1)\fP.
+.el above.
+Otherwise, the return status is the exit status of the last
+process or job waited for.
+.SH "SHELL COMPATIBILITY MODE"
+Bash-4.0 introduced the concept of a \fIshell compatibility level\fP,
+specified as a set of options to the shopt builtin (
+.BR compat31 ,
+.BR compat32 ,
+.BR compat40 ,
+.BR compat41 ,
+and so on).
+There is only one current
+compatibility level -- each option is mutually exclusive.
+The compatibility level is intended to allow users to select behavior
+from previous versions that is incompatible with newer versions
+while they migrate scripts to use current features and
+behavior. It's intended to be a temporary solution.
+.PP
+This section does not mention behavior that is standard for a particular
+version (e.g., setting \fBcompat32\fP means that quoting the rhs of the regexp
+matching operator quotes special regexp characters in the word, which is
+default behavior in bash-3.2 and subsequent versions).
+.PP
+If a user enables, say, \fBcompat32\fP, it may affect the behavior of other
+compatibility levels up to and including the current compatibility level.
+The idea is that each compatibility level controls behavior that changed
+in that version of \fBbash\fP,
+but that behavior may have been present in earlier versions.
+For instance, the change to use locale-based comparisons with the \fB[[\fP
+command came in bash-4.1, and earlier versions used ASCII-based comparisons,
+so enabling \fBcompat32\fP will enable ASCII-based comparisons as well.
+That granularity may not be sufficient for
+all uses, and as a result users should employ compatibility levels carefully.
+Read the documentation for a particular feature to find out the
+current behavior.
+.PP
+Bash-4.3 introduced a new shell variable:
+.SM
+.BR BASH_COMPAT .
+The value assigned
+to this variable (a decimal version number like 4.2, or an integer
+corresponding to the \fBcompat\fP\fINN\fP option, like 42) determines the
+compatibility level.
+.PP
+Starting with bash-4.4, Bash has begun deprecating older compatibility
+levels.
+Eventually, the options will be removed in favor of
+.SM
+.BR BASH_COMPAT .
+.PP
+Bash-5.0 is the final version for which there will be an individual shopt
+option for the previous version. Users should use
+.SM
+.B BASH_COMPAT
+on bash-5.0 and later versions.
+.PP
+The following table describes the behavior changes controlled by each
+compatibility level setting.
+The \fBcompat\fP\fINN\fP tag is used as shorthand for setting the
+compatibility level
+to \fINN\fP using one of the following mechanisms.
+For versions prior to bash-5.0, the compatibility level may be set using
+the corresponding \fBcompat\fP\fINN\fP shopt option.
+For bash-4.3 and later versions, the
+.SM
+.B BASH_COMPAT
+variable is preferred,
+and it is required for bash-5.1 and later versions.
+.TP
+\fBcompat31\fP
+.PD 0
+.RS
+.IP \(bu
+quoting the rhs of the \fB[[\fP command's regexp matching operator (=~)
+has no special effect
+.RE
+.PD
+.TP
+\fBcompat32\fP
+.PD 0
+.RS
+.IP \(bu
+interrupting a command list such as "a ; b ; c" causes the execution
+of the next command in the list (in bash-4.0 and later versions,
+the shell acts as if it received the interrupt, so
+interrupting one command in a list aborts the execution of the
+entire list)
+.RE
+.PD
+.TP
+\fBcompat40\fP
+.PD 0
+.RS
+.IP \(bu
+the \fB<\fP and \fB>\fP operators to the \fB[[\fP command do not
+consider the current locale when comparing strings; they use ASCII
+ordering.
+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).
+.RE
+.PD
+.TP
+\fBcompat41\fP
+.PD 0
+.RS
+.IP \(bu
+in \fIposix\fP mode, \fBtime\fP may be followed by options and still be
+recognized as a reserved word (this is POSIX interpretation 267)
+.IP \(bu
+in \fIposix\fP mode, the parser requires that an even number of single
+quotes occur in the \fIword\fP portion of a double-quoted
+parameter expansion and treats them specially, so that characters within
+the single quotes are considered quoted
+(this is POSIX interpretation 221)
+.RE
+.PD
+.TP
+\fBcompat42\fP
+.PD 0
+.RS
+.IP \(bu
+the replacement string in double-quoted pattern substitution does not
+undergo quote removal, as it does in versions after bash-4.2
+.IP \(bu
+in posix mode, single quotes are considered special when expanding
+the \fIword\fP portion of a double-quoted parameter expansion
+and can be used to quote a closing brace or other special character
+(this is part of POSIX interpretation 221);
+in later versions, single quotes
+are not special within double-quoted word expansions
+.RE
+.PD
+.TP
+\fBcompat43\fP
+.PD 0
+.RS
+.IP \(bu
+the shell does not print a warning message if an attempt is made to
+use a quoted compound assignment as an argument to declare
+(e.g., declare -a foo=\(aq(1 2)\(aq). Later versions warn that this usage is
+deprecated
+.IP \(bu
+word expansion errors are considered non-fatal errors that cause the
+current command to fail, even in posix mode
+(the default behavior is to make them fatal errors that cause the shell
+to exit)
+.IP \(bu
+when executing a shell function, the loop state (while/until/etc.)
+is not reset, so \fBbreak\fP or \fBcontinue\fP in that function will break
+or continue loops in the calling context. Bash-4.4 and later reset
+the loop state to prevent this
+.RE
+.PD
+.TP
+\fBcompat44\fP
+.PD 0
+.RS
+.IP \(bu
+the shell sets up the values used by
+.SM
+.B BASH_ARGV
+and
+.SM
+.B BASH_ARGC
+so they can expand to the shell's positional parameters even if extended
+debugging mode is not enabled
+.IP \(bu
+a subshell inherits loops from its parent context, so \fBbreak\fP
+or \fBcontinue\fP will cause the subshell to exit.
+Bash-5.0 and later reset the loop state to prevent the exit
+.IP \(bu
+variable assignments preceding builtins like \fBexport\fP and \fBreadonly\fP
+that set attributes continue to affect variables with the same
+name in the calling environment even if the shell is not in posix
+mode
+.RE
+.PD
+.TP
+\fBcompat50\fP
+.PD 0
+.RS
+.IP \(bu
+Bash-5.1 changed the way
+.SM
+.B $RANDOM
+is generated to introduce slightly
+more randomness. If the shell compatibility level is set to 50 or
+lower, it reverts to the method from bash-5.0 and previous versions,
+so seeding the random number generator by assigning a value to
+.SM
+.B RANDOM
+will produce the same sequence as in bash-5.0
+.IP \(bu
+If the command hash table is empty, bash versions prior to bash-5.1
+printed an informational message to that effect, even when producing
+output that can be reused as input. Bash-5.1 suppresses that message
+when the \fB\-l\fP option is supplied.
+.RE
+.PD
+.TP
+\fBcompat51\fP
+.PD 0
+.RS
+.IP \(bu
+The \fBunset\fP builtin treats attempts to unset array subscripts \fB@\fP
+and \fB*\fP differently depending on whether the array is indexed or
+associative, and differently than in previous versions.
+.RE
+.PD
+.\" 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 HISTFILE ,
+.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 history
+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 \fBshopt -u restricted_shell\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 ~/.bash_history
+The default value of \fBHISTFILE\fP, the file in which bash saves the
+command history
+.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 and
+\fIhttp://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz\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
+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..d809369
--- /dev/null
+++ b/doc/bash.html
@@ -0,0 +1,14899 @@
+<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%>2022 September 19<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-2022 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 historical remote shell daemon, usually <I>rshd</I>,
+or the secure shell daemon <I>sshd</I>.
+If
+<B>bash</B>
+
+determines it is being run non-interactively 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>
+
+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>
+
+<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 command (see
+<FONT SIZE=-1><B>SHELL GRAMMAR</B>
+
+</FONT>
+below), the third word of a
+<B>case</B>
+
+or
+<B>select</B>
+
+command
+(only <B>in</B> is valid), or the third word of a
+<B>for</B>
+
+command (only <B>in</B> and <B>do</B> are valid):
+<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>
+
+This section describes the syntax of the various forms of shell commands.
+<A NAME="lbAL">&nbsp;</A>
+<H4>Simple Commands</H4>
+
+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>
+
+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>command1</I> [ [<B>|</B>|<B>|&amp;</B>] <I>command2</I> ... ]
+</DL>
+
+<P>
+
+The standard output of
+<I>command1</I>
+
+is connected via a pipe to the standard input of
+<I>command2</I>.
+
+This connection is performed before any redirections specified by the
+<I>command1</I>(see
+
+<FONT SIZE=-1><B>REDIRECTION</B>
+
+</FONT>
+below).
+If <B>|&amp;</B> is used, <I>command1</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 <I>command1</I>.
+<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 multi-command pipeline,
+where pipes are created,
+is executed in a <I>subshell</I>, which is a
+separate process.
+See
+<FONT SIZE=-1><B>COMMAND EXECUTION ENVIRONMENT</B></FONT>
+for a description of subshells and 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
+when job control is not active.
+<A NAME="lbAN">&nbsp;</A>
+<H4>Lists</H4>
+
+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>
+</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>
+
+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 (see
+<FONT SIZE=-1><B>COMMAND EXECUTION ENVIRONMENT</B></FONT>
+below for a description of a subshell environment).
+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.
+The <I>expression</I>
+undergoes the same expansions
+as if it were within double quotes,
+but double quote characters in <I>expression</I> are not treated specially
+and are removed.
+<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>
+The words between the <B>[[</B> and <B>]]</B> do not undergo word splitting
+and pathname expansion.
+The shell performs tilde expansion, parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal on those words
+(the expansions that would occur if the words were enclosed in double quotes).
+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
+(using the POSIX <I>regcomp</I> and <I>regexec</I> interfaces
+usually described 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.
+If any part of the pattern is quoted, the quoted portion is matched literally.
+This means every character in the quoted portion matches itself,
+instead of having any special pattern matching meaning.
+If the pattern is stored in a shell variable, quoting the variable
+expansion forces the entire pattern to be matched literally.
+Treat bracket expressions in regular expressions carefully,
+since normal quoting and pattern characters lose their meanings
+between brackets.
+<P>
+
+
+The pattern will match if it matches any part of the string.
+Anchor the pattern using the <B>^</B> and <B>$</B> regular expression
+operators to force it to match the entire string.
+The array variable
+<FONT SIZE=-1><B>BASH_REMATCH</B>
+
+</FONT>
+records which parts of the string matched the pattern.
+The element of
+<FONT SIZE=-1><B>BASH_REMATCH</B>
+
+</FONT>
+with index 0 contains the portion of
+the string matching the entire regular expression.
+Substrings matched by parenthesized subexpressions within the regular
+expression are saved in the remaining
+<FONT SIZE=-1><B>BASH_REMATCH</B>
+
+</FONT>
+indices. 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.
+Bash sets
+<FONT SIZE=-1><B>BASH_REMATCH</B>
+
+</FONT>
+in the global scope; declaring it as a local variable will lead to
+unexpected results.
+<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, and 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).
+<B>select</B>
+
+then displays the
+<FONT SIZE=-1><B>PS3</B>
+
+</FONT>
+prompt and reads a line 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 <B>select</B> command completes and returns 1.
+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, process substitution, and quote removal.
+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,
+continuing the case statement execution as if the pattern list had not matched.
+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>
+
+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 syntax 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>.
+<I>command</I> may be either a simple command or a compound
+command (see above).
+<I>NAME</I> is a shell variable name.
+If <I>NAME</I> is not supplied, the default name is <B>COPROC</B>.
+<P>
+
+The recommended form to use for a coprocess is
+<DL COMPACT><DT><DD>
+<P>
+
+<B>coproc</B> <I>NAME</I> { <I>command</I> [<I>redirections</I>]; }
+</DL>
+
+<P>
+
+This form is recommended because simple commands result in the coprocess
+always being named <B>COPROC</B>, and it is simpler to use and more complete
+than the other compound commands.
+<P>
+
+If <I>command</I> is a compound command, <I>NAME</I> is optional. The
+word following <B>coproc</B> determines whether that word is interpreted
+as a variable name: it is interpreted as <I>NAME</I> if it is not a
+reserved word that introduces a compound command.
+If <I>command</I> is a simple command, <I>NAME</I> is not allowed; this
+is to avoid confusion between <I>NAME</I> and the first word of the simple
+command.
+<P>
+
+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.
+<P>
+
+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>
+
+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>fname</I> () <I>compound-command</I> [<I>redirection</I>]<DD>
+
+<DT><B>function</B> <I>fname</I> [()] <I>compound-command</I> [<I>redirection</I>]<DD>
+
+This defines a function named <I>fname</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.
+If the <B>function</B> reserved word is used, but the
+parentheses are not supplied, the braces are recommended.
+<I>compound-command</I> is executed whenever <I>fname</I> is specified as the
+name of a simple command.
+When in <I>posix mode</I>, <I>fname</I> must be a valid shell <I>name</I>
+and may not be the name of one of the
+POSIX <I>special builtins</I>.
+In default mode, a function name can be any unquoted shell word that does
+not contain <B>$</B>.
+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>
+
+Character sequences of the form <B>$</B>aq<I>string</I>aq are treated
+as a special variant of single quotes.
+The sequence expands to <I>string</I>, with backslash-escaped characters
+in <I>string</I> 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.
+The <I>gettext</I> infrastructure performs the lookup and
+translation, using the <B>LC_MESSAGES</B>, <B>TEXTDOMAINDIR</B>,
+and <B>TEXTDOMAIN</B> shell variables.
+If the current locale is <B>C</B> or <B>POSIX</B>,
+if there are no translations available,
+or if the string is not translated,
+the dollar sign is ignored.
+This is a form of double quoting, so the string remains double-quoted
+by default, whether or not it is translated and replaced.
+If the <B>noexpand_translation</B> option is enabled
+using the <B>shopt</B> builtin,
+translated strings are single-quoted instead of double-quoted.
+See the description of
+<B>shopt</B>
+
+below under
+<FONT SIZE=-1><B>SHELL</B>BUILTIN<B>COMMANDS</B>.
+
+</FONT>
+<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 and pathname expansion are 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 <B>integer</B> 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>
+
+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>
+
+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.
+
+</DL>
+<A NAME="lbAW">&nbsp;</A>
+<H4>Shell Variables</H4>
+
+The following variables are set by the shell:
+<P>
+
+
+<DL COMPACT>
+<DT><B>_</B>
+
+<DD>
+At shell startup, set to the 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.
+<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.
+If
+<B>BASH_COMMAND</B>
+
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<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.
+<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.
+If
+<B>BASH_SUBSHELL</B>
+
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<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.
+Assignments to
+<FONT SIZE=-1><B>HISTCMD</B>
+
+</FONT>
+are ignored.
+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, it expands to a random integer
+between 0 and 32767.
+Assigning
+a value to
+<FONT SIZE=-1><B>RANDOM</B>
+
+</FONT>
+initializes (seeds) the sequence of random numbers.
+If
+<FONT SIZE=-1><B>RANDOM</B>
+
+</FONT>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+<DT><B>READLINE_ARGUMENT</B>
+
+<DD>
+Any numeric argument given to a readline command that was defined using
+<TT>bind -x</TT>
+
+(see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below)
+when it was invoked.
+<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_MARK</B>
+
+<DD>
+The position of the mark (saved 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).
+The characters between the insertion point and the mark are often
+called the <I>region</I>.
+<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, it expands to the number of seconds since shell invocation.
+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.
+The number of seconds at shell invocation and the current time are always
+determined by querying the system clock.
+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>SRANDOM</B>
+
+<DD>
+This variable expands to a 32-bit pseudo-random number each time it is
+referenced. The random number generator is not linear on systems that
+support <TT>/dev/urandom</TT> or <I>arc4random</I>, so each returned number
+has no relationship to the numbers preceding it.
+The random number generator cannot be seeded, so assignments to this
+variable have no effect.
+If
+<FONT SIZE=-1><B>SRANDOM</B>
+
+</FONT>
+is unset, it loses its special properties,
+even if it is subsequently reset.
+<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
+<FONT SIZE=-1><B>SHELL COMPATIBILITY MODE</B>
+
+</FONT>
+below 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 values correspond to the compatibility levels
+described below under
+<FONT SIZE=-1><B>SHELL COMPATIBILITY MODE</B>.
+
+</FONT>
+For example, 4.2 and 42 are valid values that correspond
+to the <B>compat42</B> <B>shopt</B> option
+and set the compatibility level to 42.
+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>
+Expanded and executed similarly to
+<FONT SIZE=-1><B>BASH_ENV</B>
+
+</FONT>
+(see <B>INVOCATION</B> above)
+when an interactive 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 this variable is set, and is an array,
+the value of each set element is executed as a command
+prior to issuing each primary prompt.
+If this is set but not an array variable,
+its value is used as a command to execute instead.
+<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>
+This variable expands to the full pathname to the shell.
+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> may be of the form [<I>subscript</I>]=<I>string</I>.
+Indexed array assignments do not require anything but <I>string</I>.
+Each <I>value</I> in the list is expanded using all the shell expansions
+described below under
+<FONT SIZE=-1><B>EXPANSION</B>.
+
+</FONT>
+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 words in a compound assignment
+may be either assignment statements, for which the subscript is required,
+or a list of words that is interpreted as a sequence of alternating keys
+and values:
+<I>name</I>=<B>( </B><I>key1 value1 key2 value2</I> ...<B>)</B>.
+These are treated identically to
+<I>name</I>=<B>(</B> [<I>key1</I>]=<I>value1</I> [<I>key2</I>]=<I>value2</I> ...<B>)</B>.
+The first word in the list determines how the remaining words
+are interpreted; all assignments in a list must be of the same type.
+When using key/value pairs, the keys may not be missing or empty;
+a final missing value is treated like the empty string.
+<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>
+
+The += operator will append to an array variable when assigning
+using the compound assignment syntax; see
+<FONT SIZE=-1><B>PARAMETERS</B>
+
+</FONT>
+above.
+<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,
+removes the entire array.
+<B>unset</B> <I>name</I>[<I>subscript</I>], where
+<I>subscript</I> is <B>*</B> or <B>@</B>, behaves differently depending on
+whether <I>name</I> is an indexed or associative array.
+If <I>name</I> is an associative array, this unsets the element with
+subscript <B>*</B> or <B>@</B>.
+If <I>name</I> is an indexed array, unset removes all of the elements but
+does not remove the array itself.
+<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>
+
+<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 letters,
+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 letters 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
+(integer or letter).
+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>
+
+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>
+
+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> or <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> or <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>
+
+<DT>${<I>parameter</I><B>//</B><I>pattern</I><B>/</B><I>string</I>}<DD>
+<DT>${<I>parameter</I><B>/#</B><I>pattern</I><B>/</B><I>string</I>}<DD>
+<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>.
+<I>string</I> undergoes tilde expansion, parameter and variable expansion,
+arithmetic expansion, command and process substitution, and quote removal.
+The match is performed using the rules described under
+<B>Pattern Matching</B>
+
+below.
+In the first form above, only the first match is replaced.
+If there are two slashes separating <I>parameter</I> and <I>pattern</I>
+(the second form above), all matches of <I>pattern</I> are
+replaced with <I>string</I>.
+If <I>pattern</I> is preceded by <B>#</B> (the third form above),
+it must match at the beginning of the expanded value of <I>parameter</I>.
+If <I>pattern</I> is preceded by <B>%</B> (the fourth form above),
+it must match at the end of the expanded value of <I>parameter</I>.
+If the expansion of <I>string</I> is null,
+matches of <I>pattern</I> are deleted.
+If <I>string</I> is null,
+matches of <I>pattern</I> are deleted
+and the <B>/</B> following <I>pattern</I> may be omitted.
+<P>
+If the <B>patsub_replacement</B> shell option is enabled using <B>shopt</B>,
+any unquoted instances of <B>&amp;</B> in <I>string</I> are replaced with the
+matching portion of <I>pattern</I>.
+<P>
+Quoting any part of <I>string</I> inhibits replacement in the
+expansion of the quoted portion, including replacement strings stored
+in shell variables.
+Backslash will escape <B>&amp;</B> in <I>string</I>; the backslash is removed
+in order to permit a literal <B>&amp;</B> in the replacement string.
+Backslash can also be used to escape a backslash; <B>\\</B> results in
+a literal backslash in the replacement.
+Users should take care if <I>string</I> is double-quoted to avoid
+unwanted interactions between the backslash and double-quoting, since
+backslash has special meaning within double quotes.
+Pattern substitution performs the check for unquoted <B>&amp;</B> after
+expanding <I>string</I>;
+shell programmers should quote any occurrences of <B>&amp;</B>
+they want to be taken literally in the replacement
+and ensure any instances of <B>&amp;</B> they want to be replaced are unquoted.
+<P>
+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>U</B>
+
+<DD>
+The expansion is a string that is the value of <I>parameter</I> with lowercase
+alphabetic characters converted to uppercase.
+<DT><B>u</B>
+
+<DD>
+The expansion is a string that is the value of <I>parameter</I> with the first
+character converted to uppercase, if it is alphabetic.
+<DT><B>L</B>
+
+<DD>
+The expansion is a string that is the value of <I>parameter</I> with uppercase
+alphabetic characters converted to lowercase.
+<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>$aq...aq</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>K</B>
+
+<DD>
+Produces a possibly-quoted version of the value of <I>parameter</I>,
+except that it prints the values of
+indexed and associative arrays as a sequence of quoted key-value pairs
+(see <B>Arrays</B> above).
+<DT><B>a</B>
+
+<DD>
+The expansion is a string consisting of flag values representing
+<I>parameter</I>'s attributes.
+<DT><B>k</B>
+
+<DD>
+Like the K transformation, but expands the keys and values of
+indexed and associative arrays to separate words after word splitting.
+
+</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>
+
+<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>
+
+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>
+
+undergoes the same expansions
+as if it were within double quotes,
+but double quote characters in <I>expression</I> are not treated specially
+and are removed.
+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>
+
+<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>
+
+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>
+
+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, and is not quoted, 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.
+In order to match the filenames
+<B>``.''</B>
+
+and
+<B>``..''</B>,
+
+the pattern must begin with ``.'' (for example, ``.?''),
+even if
+<B>dotglob</B>
+
+is set.
+If the
+<B>globskipdots</B>
+
+shell option is enabled, the filenames
+<B>``.''</B>
+
+and
+<B>``..''</B>
+
+are never matched, even if the pattern begins with a
+<B>``.''</B>.
+
+When not matching pathnames, 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>globskipdots</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,
+and the characters included in the range,
+are 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, the shell recognizes several extended pattern matching operators.
+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>
+
+The<B>extglob</B> option changes the behavior of the parser, since the
+parentheses are normally treated as operators with syntactic meaning.
+To ensure that extended matching patterns are parsed correctly, make sure
+that <B>extglob</B> is enabled before parsing constructs containing the
+patterns, including shell functions and command substitutions.
+<P>
+
+When matching filenames, the <B>dotglob</B> shell option determines
+the set of filenames that are tested:
+when <B>dotglob</B> is enabled, the set of filenames includes all files
+beginning with ``.'', but ``.'' and ``..'' must be matched by a
+pattern or sub-pattern that begins with a dot;
+when it is disabled, the set does not
+include any filenames beginning with ``.'' unless the pattern
+or sub-pattern begins with a ``.''.
+As above, ``.'' only has a special meaning when matching filenames.
+<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>
+
+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.
+<I>Redirection</I> 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's lifetime manually.
+The <B>varredir_close</B> shell option manages this behavior.
+<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>
+
+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>
+
+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>
+
+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>
+
+<A NAME="lbBM">&nbsp;</A>
+<H4>Redirecting Standard Output and Standard Error</H4>
+
+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>
+
+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>
+
+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>
+
+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>
+
+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>
+
+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, use a shell function (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 (<I>local variables</I>).
+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).
+<P>
+
+In the following description, the <I>current scope</I> is a currently-
+executing function.
+Previous scopes consist of that function's caller and so on,
+back to the &quot;global&quot; scope, where the shell is not executing
+any shell function.
+Consequently, a local variable at the current scope is a variable
+declared using the <B>local</B> or <B>declare</B> builtins in the
+function that is currently executing.
+<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>
+
+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
+(appearing as unset)
+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
+(see below how the <B>localvar_unset</B> shell option changes this behavior).
+<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 child shell processes
+(those created when executing a separate shell invocation)
+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>
+
+Integer constants follow the C language definition, without suffixes or
+character constants.
+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>,
+if a non-digit is required,
+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> and <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, in
+the following order.
+<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.
+In the case of such a command (one that consists only of assignment
+statements and redirections), assignment statements are performed before
+redirections.
+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, and the shell creates a
+new instance of itself
+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>
+
+A <I>subshell</I> is a copy of the shell process.
+<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>
+
+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>
+
+The exit status of the last command is available in the special
+parameter $?.
+<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.
+<P>
+
+When job control is not enabled, and <B>bash</B> is waiting for a foreground
+command to complete, the shell receives keyboard-generated signals
+such as
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+(usually generated by <B>^C</B>) that users commonly intend to send
+to that command.
+This happens because the shell and the command are in the
+same process group as the terminal, and <B>^C</B> sends
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+to all processes in that process group.
+<P>
+
+When <B>bash</B> is running without job control enabled and receives
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+while waiting for a foreground command, it waits until that foreground
+command terminates and then decides what to do about the
+<FONT SIZE=-1><B>SIGINT</B>:
+
+</FONT>
+<DL COMPACT>
+<DT>1.<DD>
+If the command terminates due to the
+<FONT SIZE=-1><B>SIGINT</B>,
+
+</FONT>
+<B>bash</B> concludes
+that the user meant to end the entire script, and acts on the
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+(e.g., by running a
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+trap or exiting itself);
+<DT>2.<DD>
+If the command does not terminate due to
+<FONT SIZE=-1><B>SIGINT</B>,
+
+</FONT>
+the program handled the
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+itself and did not treat it as a fatal signal.
+In that case, <B>bash</B> does not treat
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+as a fatal signal, either, instead assuming that the
+<FONT SIZE=-1><B>SIGINT</B>
+
+</FONT>
+was used as part of the program's normal operation
+(e.g., emacs uses it to abort editing
+commands) or deliberately discarded.
+However, <B>bash</B> will run any
+trap set on
+<FONT SIZE=-1><B>SIGINT</B>,
+
+</FONT>
+as it does with any other trapped signal it
+receives while it is waiting for the foreground command to
+complete, for compatibility.
+</DL>
+<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
+job whose command name begins with
+<B>ce</B>.
+
+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 causes <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 value of the <B>PWD</B> shell variable (<B>$PWD</B>),
+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 <B>$PWD</B>,
+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).
+This can have unwanted side effects if escaped portions of the string
+appear within command substitution or contain characters special to
+word expansion.
+<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>
+
+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>
+
+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>.
+
+If that file does not exist or cannot be read, the ultimate default is
+<A HREF="file:/etc/inputrc"><I>/etc/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>
+
+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>
+
+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>
+
+or using the <B>bind</B> builtin command (see
+<FONT SIZE=-1><B>SHELL BUILTIN COMMANDS</B>
+
+</FONT>
+below).
+<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>active-region-start-color </B>
+
+<DD>
+A string variable that controls the text color and background when displaying
+the text in the active region (see the description of
+<B>enable-active-region</B> below).
+This string must not take up any physical character positions on the display,
+so it should consist only of terminal escape sequences.
+It is output to the terminal before displaying the text in the active region.
+This variable is reset to the default value whenever the terminal type changes.
+The default value is the string that puts the terminal in standout mode,
+as obtained from the terminal's terminfo description.
+A sample value might be <TT>&quot;\e[01;33m&quot;</TT>.
+<DT><B>active-region-end-color </B>
+
+<DD>
+A string variable that &quot;undoes&quot; the effects of <B>active-region-start-color</B>
+and restores &quot;normal&quot; terminal display appearance after displaying text
+in the active region.
+This string must not take up any physical character positions on the display,
+so it should consist only of terminal escape sequences.
+It is output to the terminal after displaying the text in the active region.
+This variable is reset to the default value whenever the terminal type changes.
+The default value is the string that restores the terminal from standout mode,
+as obtained from the terminal's terminfo description.
+A sample value might be <TT>&quot;\e[0m&quot;</TT>.
+<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.
+If there is a color definition in <B>$LS_COLORS</B> for the custom suffix
+&quot;readline-colored-completion-prefix&quot;, readline uses this color for
+the common prefix instead of its default.
+<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,
+readline will ask whether or not the user wishes to view them;
+otherwise they are simply listed on the terminal.
+A zero value means readline should never ask; negative values are
+treated as zero.
+<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.
+This variable is dependent on the <B>LC_CTYPE</B> locale category, and
+may change if the locale is changed.
+<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-active-region (On)</B>
+
+<DD>
+The <I>point</I> is the current cursor position, and <I>mark</I> refers
+to a saved cursor position.
+The text between the point and mark is referred to as the <I>region</I>.
+When this variable is set to <I>On</I>, readline allows certain commands
+to designate the region as <I>active</I>.
+When the region is active, readline highlights the text in the region using
+the value of the <B>active-region-start-color</B>, which defaults to the
+string that enables
+the terminal's standout mode.
+The active region shows the text inserted by bracketed-paste and any
+matching text found by incremental and non-incremental history searches.
+<DT><B>enable-bracketed-paste (On)</B>
+
+<DD>
+When set to <B>On</B>, readline configures the terminal 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 prevents readline from executing any editing commands bound to key
+sequences appearing in the pasted text.
+<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.
+This setting is automatically enabled for terminals of height 1.
+<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.
+This variable is dependent on the <B>LC_CTYPE</B> locale category, and
+may change if the locale is changed.
+<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.
+This variable is dependent on the <B>LC_CTYPE</B> locale category, and
+may change if the locale is changed.
+<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>
+
+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>
+
+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>
+
+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>
+
+
+<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-display (M-C-l)</B>
+
+<DD>
+Clear the screen and, if possible, the terminal's scrollback buffer,
+then redraw the current line,
+leaving the current line at the top of the screen.
+<DT><B>clear-screen (C-l)</B>
+
+<DD>
+Clear the screen,
+then redraw the current line,
+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>
+
+
+<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>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>fetch-history</B>
+
+<DD>
+With a numeric argument, fetch that entry from the history list
+and make it the current line.
+Without an argument, move back to the first entry in the history list.
+<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>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>
+
+
+<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>
+
+
+<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>
+
+
+<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>
+
+
+<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>
+
+
+<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>
+
+
+<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 argument 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 argument 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>spell-correct-word (C-x s)</B>
+
+<DD>
+Perform spelling correction on the current word, treating it as a directory
+or filename, in the same way as the <B>cdspell</B> shell option.
+Word boundaries are the same as those used by <B>shell-forward-word</B>.
+<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>
+
+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>
+
+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>
+
+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.
+If <I>string</I> is missing, the string from the most recent search is used;
+it is an error if there is no previous search string.
+<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<FONT SIZE=+2>^</FONT><I>string1</I><FONT SIZE=+2>^</FONT><I>string2</I><FONT SIZE=+2>^</FONT>''
+(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>
+
+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 first word matched by the most recent `?<I>string</I>?' search,
+if the search string begins with a character that is part of a word.
+<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.
+If <B>x</B> is missing, it defaults to 0.
+
+</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>
+
+After the optional word designator, there may appear a sequence of
+one or more of the following modifiers, each preceded by a `:'.
+These modify, or edit, the word or words selected from the history event.
+<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.
+The <B>q</B> and <B>x</B> modifiers are mutually exclusive; the last one
+supplied is used.
+<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 character may be used as the delimiter 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.
+If
+<I>new</I>
+
+is null, each matching
+<I>old</I>
+
+is deleted.
+<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>' or `<B>&amp;</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>,
+
+but <I>filename</I> does not need to be executable.
+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>, it searches
+the current directory 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>.</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>.</B>, and <B>.</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>.</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>
+<DT><B>bind</B> <I>readline-command-line</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 a
+<B>readline</B>
+
+initialization file such as
+<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>
+and
+<FONT SIZE=-1><B>READLINE_MARK</B>
+
+</FONT>
+variables to the current location of the insertion point and the saved
+insertion point (the mark), respectively.
+The shell assigns any numeric argument the user supplied to the
+<FONT SIZE=-1><B>READLINE_ARGUMENT</B>
+
+</FONT>
+variable.
+If there was no argument, that variable is not set.
+If the executed command changes the value of any of
+<FONT SIZE=-1><B>READLINE_LINE</B>,
+
+</FONT>
+<FONT SIZE=-1><B>READLINE_POINT</B>,
+
+</FONT>
+or
+<FONT SIZE=-1><B>READLINE_MARK</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.
+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.
+If the directory change is successful, <B>cd</B> sets the value of the
+<B>PWD</B> environment variable to the new directory name, and sets the
+<B>OLDPWD</B> environment variable to the value of the current working
+directory before the change.
+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>]<DD>
+<BR>
+
+[<B>-F</B> <I>function</I>] [<B>-C</B> <I>command</I>] [<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 initial 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.
+Arguments are passed as with the <B>-F</B> option.
+<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 initial 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>-aAfFgiIlnrtux</B>] [<B>-p</B>] [<I>name</I>[=<I>value</I>] ...]<DD>
+
+<DT><B>typeset</B> [<B>-aAfFgiIlnrtux</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
+<B>-I</B>
+
+option causes local variables to inherit the attributes
+(except the <I>nameref</I> attribute)
+and value of any existing variable with the same
+<I>name</I> at a surrounding scope.
+If there is no existing variable, the local variable is initially unset.
+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.
+Bash will use the value of the <B>BASH_LOADABLES_PATH</B> variable as a
+colon-separated list of directories in which to search for <I>filename</I>.
+The default is system-dependent.
+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.
+If no options are supplied and a <I>name</I> is not a shell builtin,
+<B>enable</B> will attempt to load <I>name</I> from a shared object named
+<I>name</I>, as if the command were
+<TT>enable -f</TT> <I>name name</I> .
+
+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).
+When listing, a <I>first</I> or <I>last</I> of
+0 is equivalent to -1 and -0 is equivalent to the current
+command (usually the <B>fc</B> command); otherwise 0 is equivalent to -1
+and -0 is invalid.
+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>arg ...</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
+supplied as
+<I>arg</I>
+
+values,
+<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 range of 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> or range 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.
+The restore is effected as if a series of <B>set</B> commands were executed
+to restore the values that were in place before the function.
+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.
+The elements are numbered from 0 starting at the first directory
+listed by <B>dirs</B>.
+With no arguments, <B>popd</B>
+removes the top directory from the stack, and
+changes 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, from the stack.
+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 top element of the directory stack is modified, and
+the <I>-n</I> option was not supplied, <B>popd</B> uses the <B>cd</B>
+builtin to change to the directory at the top of the stack.
+If the <B>cd</B> fails, <B>popd</B> returns a non-zero value.
+<P>
+
+Otherwise,
+<B>popd</B>
+
+returns false if an invalid option is encountered, the directory stack
+is empty, or a non-existent directory stack entry is specified.
+<P>
+
+If the
+<B>popd</B>
+
+command is successful,
+bash runs
+<B>dirs</B>
+
+to show the final contents of the directory stack,
+and the return status is 0.
+</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>%Q</B>
+
+<DD>
+like <B>%q</B>, but applies any supplied precision to the <I>argument</I>
+before quoting it.
+<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>
+
+The %b, %q, and %T directives all use the field width and precision
+arguments from the format specification and write that many bytes from
+(or use that wide a field for) the expanded argument, which usually
+contains more characters than the original.
+<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 elements of
+the directory stack.
+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
+
+</DL>
+<P>
+
+After the stack has been modified, if the <B>-n</B> option was not
+supplied, <B>pushd</B> uses the <B>cd</B> builtin to change to the
+directory at the top of the stack.
+If the <B>cd</B> fails, <B>pushd</B> returns a non-zero value.
+<P>
+
+Otherwise, if no arguments are supplied,
+<B>pushd</B>
+
+returns 0 unless the directory stack is empty.
+When rotating the directory stack,
+<B>pushd</B>
+
+returns 0 unless the directory stack is empty or
+a non-existent directory stack element is specified.
+<P>
+
+If the
+<B>pushd</B>
+
+command is successful,
+bash runs
+<B>dirs</B>
+
+to show the final contents of the directory stack.
+</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,
+or the read will return EOF,
+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,
+without the ending delimiter but otherwise unmodified,
+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>] [<B>--</B>] [<B>-</B>] [<I>arg</I> ...]<DD>
+
+<DT><B>set</B> [<B>+abefhkmnptuvxBCEHPT</B>] [<B>+o</B> <I>option-name</I>] [<B>--</B>] [<B>-</B>] [<I>arg</I> ...]<DD>
+
+Without options, display the name and value of each shell variable
+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>-r</B>
+
+<DD>
+Enable restricted shell mode.
+This option cannot be unset once it has been set.
+<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;,
+or array variables subscripted with &quot;@&quot; or &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>
+<DT><B>compat32</B>
+
+<DD>
+<DT><B>compat40</B>
+
+<DD>
+<DT><B>compat41</B>
+
+<DD>
+<DT><B>compat42</B>
+
+<DD>
+<DT><B>compat43</B>
+
+<DD>
+<DT><B>compat44</B>
+
+<DD>
+<DT><B>compat50</B>
+
+<DD>
+
+These control aspects of the shell's compatibility mode
+(see
+<FONT SIZE=-1><B>SHELL COMPATIBILITY MODE</B>
+
+</FONT>
+
+below).
+<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,
+or in a shell startup file,
+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>globskipdots</B>
+
+<DD>
+If set, pathname expansion will never match the filenames
+<B>``.''</B>
+
+and
+<B>``..''</B>,
+
+even if the pattern begins with a
+<B>``.''</B>.
+
+This option is enabled by default.
+<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>noexpand_translation</B>
+
+<DD>
+If set,
+<B>bash</B>
+
+encloses the translated results of $&quot;...&quot; quoting in single quotes
+instead of double quotes.
+If the string is not translated, this has no effect.
+<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>patsub_replacement</B>
+
+<DD>
+If set, <B>bash</B>
+expands occurrences of <B>&amp;</B> in the replacement string of pattern
+substitution to the text matched by the pattern, as described
+under <B>Parameter Expansion</B>
+
+above.
+This option is enabled by default.
+<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>.</B> (<B>source</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>varredir_close</B>
+
+<DD>
+If set, the shell automatically closes file descriptors assigned using the
+<I>{varname}</I> redirection syntax (see
+<FONT SIZE=-1><B>REDIRECTION</B>
+
+</FONT>
+
+above)
+instead of leaving them open when the command completes.
+<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,
+or a shell without job control enabled,
+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
+or job control is not enabled
+and
+<B>-f</B>
+
+is not supplied.
+<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>
+The following conditions are applied in the order listed.
+If the first argument is <B>!</B>, the result is the negation of
+the three-argument expression composed of the remaining arguments.
+the two-argument test using the second and third arguments.
+If the first argument is exactly <B>(</B> and the fourth argument is
+exactly <B>)</B>, the result is the two-argument test of the second
+and third 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>-HS</B>] <B>-a</B><DD>
+
+<DT><B>ulimit</B> [<B>-HS</B>] [<B>-bcdefiklmnpqrstuvxPRT</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, if appropriate,
+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; no limits are set
+<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>-R</B>
+
+<DD>
+The maximum time a real-time process can run before blocking, in microseconds
+<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>-R</B>,
+
+which is in microseconds;
+<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, a function with that name, if any, is
+unset.
+Each unset variable or function is removed from the environment
+passed to subsequent commands.
+If any of
+<FONT SIZE=-1><B>BASH_ALIASES</B>,
+
+</FONT>
+<FONT SIZE=-1><B>BASH_ARGV0</B>,
+
+</FONT>
+<FONT SIZE=-1><B>BASH_CMDS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>BASH_COMMAND</B>,
+
+</FONT>
+<FONT SIZE=-1><B>BASH_SUBSHELL</B>,
+
+</FONT>
+<FONT SIZE=-1><B>BASHPID</B>,
+
+</FONT>
+<FONT SIZE=-1><B>COMP_WORDBREAKS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>DIRSTACK</B>,
+
+</FONT>
+<FONT SIZE=-1><B>EPOCHREALTIME</B>,
+
+</FONT>
+<FONT SIZE=-1><B>EPOCHSECONDS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>FUNCNAME</B>,
+
+</FONT>
+<FONT SIZE=-1><B>GROUPS</B>,
+
+</FONT>
+<FONT SIZE=-1><B>HISTCMD</B>,
+
+</FONT>
+<FONT SIZE=-1><B>LINENO</B>,
+
+</FONT>
+<FONT SIZE=-1><B>RANDOM</B>,
+
+</FONT>
+<FONT SIZE=-1><B>SECONDS</B>,
+
+</FONT>
+or
+<FONT SIZE=-1><B>SRANDOM</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 or may not be unset.
+<DT><B>wait</B> [<B>-fn</B>] [-p <I>varname</I>] [<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,
+<B>wait</B> waits for all running background jobs and
+the last-executed process substitution, if its process id is the same as
+<B>$!</B>,
+and the return status is zero.
+If the <B>-n</B> option is supplied,
+<B>wait</B> waits for a single job
+from the list of <I>id</I>s or, if no <I>id</I>s are supplied, any job,
+to complete and returns its exit status.
+If none of the supplied arguments is a child of the shell, or if no arguments
+are supplied and the shell has no unwaited-for children, the exit status
+is 127.
+If the <B>-p</B> option is supplied, the process or job identifier of the job
+for which the exit status is returned is assigned to the variable
+<I>varname</I> named by the option argument.
+The variable will be unset initially, before any assignment.
+This is useful only when the <B>-n</B> option is supplied.
+Supplying the <B>-f</B> option, when job control is enabled,
+forces <B>wait</B> to wait for <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.
+If <B>wait</B> is interrupted by a signal, the return status will be greater
+than 128, as described under
+<B>SIGNALS</B>
+
+
+above.
+Otherwise, the return status is the exit status of the last
+process or job waited for.
+</DL>
+<A NAME="lbDC">&nbsp;</A>
+<H3>SHELL COMPATIBILITY MODE</H3>
+
+Bash-4.0 introduced the concept of a <I>shell compatibility level</I>,
+specified as a set of options to the shopt builtin (
+<B>compat31</B>,
+
+<B>compat32</B>,
+
+<B>compat40</B>,
+
+<B>compat41</B>,
+
+and so on).
+There is only one current
+compatibility level -- each option is mutually exclusive.
+The compatibility level is intended to allow users to select behavior
+from previous versions that is incompatible with newer versions
+while they migrate scripts to use current features and
+behavior. It's intended to be a temporary solution.
+<P>
+
+This section does not mention behavior that is standard for a particular
+version (e.g., setting <B>compat32</B> means that quoting the rhs of the regexp
+matching operator quotes special regexp characters in the word, which is
+default behavior in bash-3.2 and subsequent versions).
+<P>
+
+If a user enables, say, <B>compat32</B>, it may affect the behavior of other
+compatibility levels up to and including the current compatibility level.
+The idea is that each compatibility level controls behavior that changed
+in that version of <B>bash</B>,
+but that behavior may have been present in earlier versions.
+For instance, the change to use locale-based comparisons with the <B>[[</B>
+command came in bash-4.1, and earlier versions used ASCII-based comparisons,
+so enabling <B>compat32</B> will enable ASCII-based comparisons as well.
+That granularity may not be sufficient for
+all uses, and as a result users should employ compatibility levels carefully.
+Read the documentation for a particular feature to find out the
+current behavior.
+<P>
+
+Bash-4.3 introduced a new shell variable:
+<FONT SIZE=-1><B>BASH_COMPAT</B>.
+
+</FONT>
+The value assigned
+to this variable (a decimal version number like 4.2, or an integer
+corresponding to the <B>compat</B><I>NN</I> option, like 42) determines the
+compatibility level.
+<P>
+
+Starting with bash-4.4, Bash has begun deprecating older compatibility
+levels.
+Eventually, the options will be removed in favor of
+<FONT SIZE=-1><B>BASH_COMPAT</B>.
+
+</FONT>
+<P>
+
+Bash-5.0 is the final version for which there will be an individual shopt
+option for the previous version. Users should use
+<FONT SIZE=-1><B>BASH_COMPAT</B>
+
+</FONT>
+on bash-5.0 and later versions.
+<P>
+
+The following table describes the behavior changes controlled by each
+compatibility level setting.
+The <B>compat</B><I>NN</I> tag is used as shorthand for setting the
+compatibility level
+to <I>NN</I> using one of the following mechanisms.
+For versions prior to bash-5.0, the compatibility level may be set using
+the corresponding <B>compat</B><I>NN</I> shopt option.
+For bash-4.3 and later versions, the
+<FONT SIZE=-1><B>BASH_COMPAT</B>
+
+</FONT>
+variable is preferred,
+and it is required for bash-5.1 and later versions.
+<DL COMPACT>
+<DT><B>compat31</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+quoting the rhs of the <B>[[</B> command's regexp matching operator (=~)
+has no special effect
+</DL></DL>
+
+
+<DT><B>compat32</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+interrupting a command list such as &quot;a ; b ; c&quot; causes the execution
+of the next command in the list (in bash-4.0 and later versions,
+the shell acts as if it received the interrupt, so
+interrupting one command in a list aborts the execution of the
+entire list)
+</DL></DL>
+
+
+<DT><B>compat40</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+the <B>&lt;</B> and <B>&gt;</B> operators to the <B>[[</B> command do not
+consider the current locale when comparing strings; they use ASCII
+ordering.
+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).
+
+</DL></DL>
+
+
+<DT><B>compat41</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+in <I>posix</I> mode, <B>time</B> may be followed by options and still be
+recognized as a reserved word (this is POSIX interpretation 267)
+<DT>*<DD>
+in <I>posix</I> mode, the parser requires that an even number of single
+quotes occur in the <I>word</I> portion of a double-quoted
+parameter expansion and treats them specially, so that characters within
+the single quotes are considered quoted
+(this is POSIX interpretation 221)
+</DL></DL>
+
+
+<DT><B>compat42</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+the replacement string in double-quoted pattern substitution does not
+undergo quote removal, as it does in versions after bash-4.2
+<DT>*<DD>
+in posix mode, single quotes are considered special when expanding
+the <I>word</I> portion of a double-quoted parameter expansion
+and can be used to quote a closing brace or other special character
+(this is part of POSIX interpretation 221);
+in later versions, single quotes
+are not special within double-quoted word expansions
+</DL></DL>
+
+
+<DT><B>compat43</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+the shell does not print a warning message if an attempt is made to
+use a quoted compound assignment as an argument to declare
+(e.g., declare -a foo=aq(1 2)aq). Later versions warn that this usage is
+deprecated
+<DT>*<DD>
+word expansion errors are considered non-fatal errors that cause the
+current command to fail, even in posix mode
+(the default behavior is to make them fatal errors that cause the shell
+to exit)
+<DT>*<DD>
+when executing a shell function, the loop state (while/until/etc.)
+is not reset, so <B>break</B> or <B>continue</B> in that function will break
+or continue loops in the calling context. Bash-4.4 and later reset
+the loop state to prevent this
+</DL></DL>
+
+
+<DT><B>compat44</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+the shell sets up the values used by
+<FONT SIZE=-1><B>BASH_ARGV</B>
+
+</FONT>
+and
+<FONT SIZE=-1><B>BASH_ARGC</B>
+
+</FONT>
+so they can expand to the shell's positional parameters even if extended
+debugging mode is not enabled
+<DT>*<DD>
+a subshell inherits loops from its parent context, so <B>break</B>
+or <B>continue</B> will cause the subshell to exit.
+Bash-5.0 and later reset the loop state to prevent the exit
+<DT>*<DD>
+variable assignments preceding builtins like <B>export</B> and <B>readonly</B>
+that set attributes continue to affect variables with the same
+name in the calling environment even if the shell is not in posix
+mode
+</DL></DL>
+
+
+<DT><B>compat50</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+Bash-5.1 changed the way
+<FONT SIZE=-1><B>$RANDOM</B>
+
+</FONT>
+is generated to introduce slightly
+more randomness. If the shell compatibility level is set to 50 or
+lower, it reverts to the method from bash-5.0 and previous versions,
+so seeding the random number generator by assigning a value to
+<FONT SIZE=-1><B>RANDOM</B>
+
+</FONT>
+will produce the same sequence as in bash-5.0
+<DT>*<DD>
+If the command hash table is empty, bash versions prior to bash-5.1
+printed an informational message to that effect, even when producing
+output that can be reused as input. Bash-5.1 suppresses that message
+when the <B>-l</B> option is supplied.
+</DL></DL>
+
+
+<DT><B>compat51</B><DD>
+
+<DL COMPACT><DT><DD>
+<DL COMPACT>
+<DT>*<DD>
+The <B>unset</B> builtin treats attempts to unset array subscripts <B>@</B>
+and <B>*</B> differently depending on whether the array is indexed or
+associative, and differently than in previous versions.
+</DL></DL>
+
+
+
+
+</DL>
+<A NAME="lbDD">&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>HISTFILE</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>history</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>shopt -u restricted_shell</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="lbDE">&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="lbDF">&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:~/.bash_history"><I>~/.bash_history</I></A>
+
+<DD>
+The default value of <B>HISTFILE</B>, the file in which bash saves the
+command history
+<DT>
+<A HREF="file:~/.inputrc"><I>~/.inputrc</I></A>
+
+<DD>
+Individual <I>readline</I> initialization file
+
+</DL>
+<A NAME="lbDG">&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="lbDH">&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> and
+<I><A HREF="http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz">http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz</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="lbDI">&nbsp;</A>
+<H3>BUGS</H3>
+
+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.2<TH ALIGN=CENTER width=33%>2022 September 19<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">SHELL COMPATIBILITY MODE</A><DD>
+<DT><A HREF="#lbDD">RESTRICTED SHELL</A><DD>
+<DT><A HREF="#lbDE">SEE ALSO</A><DD>
+<DT><A HREF="#lbDF">FILES</A><DD>
+<DT><A HREF="#lbDG">AUTHORS</A><DD>
+<DT><A HREF="#lbDH">BUG REPORTS</A><DD>
+<DT><A HREF="#lbDI">BUGS</A><DD>
+</DL>
+<HR>
+This document was created by man2html from /usr/local/src/bash/bash-20220907/doc/bash.1.<BR>
+Time: 19 September 2022 12:02:51 EDT
+</BODY>
+</HTML>
diff --git a/doc/bash.info b/doc/bash.info
new file mode 100644
index 0000000..6d31de6
--- /dev/null
+++ b/doc/bash.info
@@ -0,0 +1,12675 @@
+This is bash.info, produced by makeinfo version 6.8 from bashref.texi.
+
+This text is a brief description of the features that are present in the
+Bash shell (version 5.2, 19 September 2022).
+
+ This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.2.
+
+ Copyright (C) 1988-2022 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.2, 19 September 2022). The Bash home page is
+<http://www.gnu.org/software/bash/>.
+
+ This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.2.
+
+ 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
+......................
+
+Character sequences of the form $'STRING' are treated as a special kind
+of single quotes. The sequence expands to STRING, with
+backslash-escaped characters in STRING 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
+...................................
+
+* Menu:
+
+* Creating Internationalized Scripts:: How to use translations and different
+ languages in your scripts.
+
+Prefixing a double-quoted string with a dollar sign ('$'), such as
+$"hello, world", will cause the string to be translated according to the
+current locale. The 'gettext' infrastructure performs the lookup and
+translation, using the 'LC_MESSAGES', 'TEXTDOMAINDIR', and 'TEXTDOMAIN'
+shell variables, as explained below. See the gettext documentation for
+additional details not covered here. If the current locale is 'C' or
+'POSIX', if there are no translations available, of if the string is not
+translated, the dollar sign is ignored. Since this is a form of double
+quoting, the string remains double-quoted by default, whether or not it
+is translated and replaced. If the 'noexpand_translation' option is
+enabled using the 'shopt' builtin (*note The Shopt Builtin::),
+translated strings are single-quoted instead of double-quoted.
+
+ The rest of this section is a brief overview of how you use gettext
+to create translations for strings in a shell script named SCRIPTNAME.
+There are more details in the gettext documentation.
+
+
+File: bash.info, Node: Creating Internationalized Scripts, Up: Locale Translation
+
+Once you've marked the strings in your script that you want to translate
+using $"...", you create a gettext "template" file using the command
+
+ bash --dump-po-strings SCRIPTNAME > DOMAIN.pot
+
+The DOMAIN is your "message domain". It's just an arbitrary string
+that's used to identify the files gettext needs, like a package or
+script name. It needs to be unique among all the message domains on
+systems where you install the translations, so gettext knows which
+translations correspond to your script. You'll use the template file to
+create translations for each target language. The template file
+conventionally has the suffix '.pot'.
+
+ You copy this template file to a separate file for each target
+language you want to support (called "PO" files, which use the suffix
+'.po'). PO files use various naming conventions, but when you are
+working to translate a template file into a particular language, you
+first copy the template file to a file whose name is the language you
+want to target, with the '.po' suffix. For instance, the Spanish
+translations of your strings would be in a file named 'es.po', and to
+get started using a message domain named "example," you would run
+
+ cp example.pot es.po
+
+Ultimately, PO files are often named DOMAIN.po and installed in
+directories that contain multiple translation files for a particular
+language.
+
+ Whichever naming convention you choose, you will need to translate
+the strings in the PO files into the appropriate languages. This has to
+be done manually.
+
+ When you have the translations and PO files complete, you'll use the
+gettext tools to produce what are called "MO" files, which are compiled
+versions of the PO files the gettext tools use to look up translations
+efficiently. MO files are also called "message catalog" files. You use
+the 'msgfmt' program to do this. For instance, if you had a file with
+Spanish translations, you could run
+
+ msgfmt -o es.mo es.po
+
+to produce the corresponding MO file.
+
+ Once you have the MO files, you decide where to install them and use
+the 'TEXTDOMAINDIR' shell variable to tell the gettext tools where they
+are. Make sure to use the same message domain to name the MO files as
+you did for the PO files when you install them.
+
+ Your users will use the 'LANG' or 'LC_MESSAGES' shell variables to
+select the desired language.
+
+ You set the 'TEXTDOMAIN' variable to the script's message domain. As
+above, you use the message domain to name your translation files.
+
+ You, or possibly your users, set the 'TEXTDOMAINDIR' variable to the
+name of a directory where the message catalog files are stored. If you
+install the message files into the system's standard message catalog
+directory, you don't need to worry about this variable.
+
+ The directory where the message catalog files are stored varies
+between systems. Some 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 the '.mo' suffix. If you use the 'TEXTDOMAIN' variable, you may
+need to set the 'TEXTDOMAINDIR' variable to the location of the message
+catalog files, as above. It's common to use both variables in this
+fashion: '$TEXTDOMAINDIR'/'$LC_MESSAGES'/LC_MESSAGES/'$TEXTDOMAIN'.mo.
+
+ If you used that last convention, and you wanted to store the message
+catalog files with Spanish (es) and Esperanto (eo) translations into a
+local directory you use for custom translation files, you could run
+
+ TEXTDOMAIN=example
+ TEXTDOMAINDIR=/usr/local/share/locale
+
+ cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo
+ cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo
+
+ When all of this is done, and the message catalog files containing
+the compiled translations are installed in the correct location, your
+users will be able to see translated strings in any of the supported
+languages by setting the 'LANG' or 'LC_MESSAGES' environment variables
+before running your script.
+
+
+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:
+
+* Reserved Words:: Words that have special meaning to the shell.
+* 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: Reserved Words, Next: Simple Commands, Up: Shell Commands
+
+3.2.1 Reserved Words
+--------------------
+
+Reserved words are words that have special meaning to the shell. They
+are used to begin and end the shell's compound commands.
+
+ The following words are recognized as reserved when unquoted and the
+first word of a command (see below for exceptions):
+
+'if' 'then' 'elif' 'else' 'fi' 'time'
+'for' 'in' 'until' 'while' 'do' 'done'
+'case' 'esac' 'coproc''select''function'
+'{' '}' '[[' ']]' '!'
+
+'in' is recognized as a reserved word if it is the third word of a
+'case' or 'select' command. 'in' and 'do' are recognized as reserved
+words if they are the third word in a 'for' command.
+
+
+File: bash.info, Node: Simple Commands, Next: Pipelines, Prev: Reserved Words, Up: Shell Commands
+
+3.2.2 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.3 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 COMMAND1.
+
+ 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 COMMAND1.
+
+ 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 multi-command pipeline, where pipes are created, 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 when job control is not
+active.
+
+ 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.4 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.5 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.5.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.5.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, arithmetic expansion, process substitution, and quote
+ removal.
+
+ 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, continuing the case
+ statement execution as if the pattern list had not matched.
+
+ 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, and 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. 'select' then displays the 'PS3' prompt and
+ reads a line 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 and returns 1. 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::). The EXPRESSION
+ undergoes the same expansions as if it were within double quotes,
+ but double quote characters in EXPRESSION are not treated specially
+ are removed. If the value of the expression is non-zero, the
+ return status is 0; otherwise the return status is 1.
+
+'[[...]]'
+ [[ 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::.
+ The words between the '[[' and ']]' do not undergo word splitting
+ and filename expansion. The shell performs tilde expansion,
+ parameter and variable expansion, arithmetic expansion, command
+ substitution, process substitution, and quote removal on those
+ words (the expansions that would occur if the words were enclosed
+ in double quotes). 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.
+
+ If you quote any part of the pattern, using any of the shell's
+ quoting mechanisms, the quoted portion is matched literally. This
+ means every character in the quoted portion matches itself, instead
+ of having any special pattern matching meaning.
+
+ An additional binary operator, '=~', is available, with the same
+ precedence as '==' and '!='. When you use '=~', the string to the
+ right of the operator is considered a POSIX extended regular
+ expression pattern and matched accordingly (using the POSIX
+ 'regcomp' and 'regexec' interfaces usually described in regex(3)).
+ The return value is 0 if the string matches the pattern, and 1 if
+ it does not. If the regular expression is syntactically incorrect,
+ the conditional expression returns 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.
+
+ You can quote any part of the pattern to force the quoted portion
+ to be matched literally instead of as a regular expression (see
+ above). If the pattern is stored in a shell variable, quoting the
+ variable expansion forces the entire pattern to be matched
+ literally.
+
+ The pattern will match if it matches any part of the string. If
+ you want to force the pattern to match the entire string, anchor
+ the pattern using the '^' and '$' regular expression operators.
+
+ For example, the following will match a line (stored in the shell
+ variable 'line') if there is a sequence of characters anywhere in
+ the value consisting of any number, including zero, of characters
+ in the 'space' character class, immediately followed by zero or one
+ instances of 'a', then a 'b':
+
+ [[ $line =~ [[:space:]]*(a)?b ]]
+
+ That means values for 'line' like 'aab', ' aaaaaab', 'xaby', and '
+ ab' will all match, as will a line containing a 'b' anywhere in its
+ value.
+
+ 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 '.'.
+
+ Likewise, if you want to include a character in your pattern that
+ has a special meaning to the regular expression grammar, you must
+ make sure it's not quoted. If you want to anchor a pattern at the
+ beginning or end of the string, for instance, you cannot quote the
+ '^' or '$' characters using any form of shell quoting.
+
+ If you want to match 'initial string' at the start of a line, the
+ following will work:
+ [[ $line =~ ^"initial string" ]]
+ but this will not:
+ [[ $line =~ "^initial string" ]]
+ because in the second example the '^' is quoted and doesn't have
+ its usual special meaning.
+
+ It is sometimes difficult to specify a regular expression properly
+ without using quotes, or to keep track of the quoting used by
+ regular expressions while paying attention to shell quoting and the
+ shell's quote removal. 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. For example, the
+ following is equivalent to the pattern used above:
+
+ pattern='[[:space:]]*(a)?b'
+ [[ $line =~ $pattern ]]
+
+ Shell programmers should take special care with backslashes, since
+ backslashes are used by both the shell and regular expressions to
+ remove the special meaning from the following character. This
+ means that after the shell's word expansions complete (*note Shell
+ Expansions::), any backslashes remaining in parts of the pattern
+ that were originally not quoted can remove the special meaning of
+ pattern characters. If any part of the pattern is quoted, the
+ shell does its best to ensure that the regular expression treats
+ those remaining backslashes as literal, if they appeared in a
+ quoted portion.
+
+ 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 pattern passed to
+ the regular expression parser is '\.'. The backslash removes the
+ special meaning from '.', so the literal '.' matches. In the
+ second two examples, the pattern passed to the regular expression
+ parser has the backslash quoted (e.g., '\\\.'), which will not
+ match the string, since it does not contain a backslash. 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.
+
+ Bracket expressions in regular expressions can be sources of errors
+ as well, since characters that are normally special in regular
+ expressions lose their special meanings between brackets. However,
+ you can use bracket expressions to match special pattern characters
+ without quoting them, so they are sometimes useful for this
+ purpose.
+
+ Though it might seem like a strange way to write it, the following
+ pattern will match a '.' in the string:
+
+ [[ . =~ [.] ]]
+
+ The shell performs any word expansions before passing the pattern
+ to the regular expression functions, so you can assume that the
+ shell's quoting takes precedence. As noted above, the regular
+ expression parser will interpret any unquoted backslashes remaining
+ in the pattern after shell expansion according to its own rules.
+ The intention is to avoid making shell programmers quote things
+ twice as much as possible, so shell quoting should be sufficient to
+ quote special pattern characters where that's necessary.
+
+ The array variable 'BASH_REMATCH' records which parts of the string
+ matched the pattern. The element of 'BASH_REMATCH' with index 0
+ contains the portion of the string matching the entire regular
+ expression. Substrings matched by parenthesized subexpressions
+ within the regular expression are saved in the remaining
+ 'BASH_REMATCH' indices. The element of 'BASH_REMATCH' with index N
+ is the portion of the string matching the Nth parenthesized
+ subexpression.
+
+ Bash sets 'BASH_REMATCH' in the global scope; declaring it as a
+ local variable will lead to unexpected results.
+
+ 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.5.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 forces the shell to
+ create a subshell (*note Command Execution Environment::), and each
+ of the commands in LIST is executed in that subshell environment.
+ 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.6 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 syntax for a coprocess is:
+
+ coproc [NAME] COMMAND [REDIRECTIONS]
+
+This creates a coprocess named NAME. COMMAND may be either a simple
+command (*note Simple Commands::) or a compound command (*note Compound
+Commands::). NAME is a shell variable name. If NAME is not supplied,
+the default name is 'COPROC'.
+
+ The recommended form to use for a coprocess is
+
+ coproc NAME { COMMAND; }
+
+This form is recommended because simple commands result in the coprocess
+always being named 'COPROC', and it is simpler to use and more complete
+than the other compound commands.
+
+ There are other forms of coprocesses:
+
+ coproc NAME COMPOUND-COMMAND
+ coproc COMPOUND-COMMAND
+ coproc SIMPLE-COMMAND
+
+If COMMAND is a compound command, NAME is optional. The word following
+'coproc' determines whether that word is interpreted as a variable name:
+it is interpreted as NAME if it is not a reserved word that introduces a
+compound command. If COMMAND is a simple command, NAME is not allowed;
+this is to avoid confusion between NAME and 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.7 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,
+which is available at
+<https://www.gnu.org/software/parallel/parallel_tutorial.html>.
+
+
+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:
+ FNAME () COMPOUND-COMMAND [ REDIRECTIONS ]
+
+ or
+
+ function FNAME [()] COMPOUND-COMMAND [ REDIRECTIONS ]
+
+ This defines a shell function named FNAME. 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. If the 'function' reserved word is used,
+but the parentheses are not supplied, the braces are recommended.
+COMPOUND-COMMAND is executed whenever FNAME is specified as the name of
+a simple command. When the shell is in POSIX mode (*note Bash POSIX
+Mode::), FNAME must be a valid shell name and may not be the same as one
+of the special builtins (*note Special Builtins::). In default mode, a
+function name can be any unquoted shell word that does not contain '$'.
+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 ("local variables"). Ordinarily, variables and their values are
+shared between a function and its caller. These variables are visible
+only to the function and the commands it invokes. This is particularly
+important when a shell function calls other functions.
+
+ In the following description, the "current scope" is a currently-
+executing function. Previous scopes consist of that function's caller
+and so on, back to the "global" scope, where the shell is not executing
+any shell function. Consequently, a local variable at the current local
+scope is a variable declared using the 'local' or 'declare' builtins in
+the function that is currently executing.
+
+ 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 (appearing as unset) 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 (see below how
+'localvar_unset'shell option changes this behavior).
+
+ 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 child shell
+processes (those created when executing a separate shell invocation)
+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 (*note
+Shell Parameter Expansion::). 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 and filename expansion are 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
+ filename 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.
+
+
+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 letters, 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
+letters 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 (integer or
+letter). 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.
+
+ $ v=123
+ $ echo ${v-unset}
+ 123
+
+'${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.
+
+ $ var=
+ $ : ${var:=DEFAULT}
+ $ echo $var
+ DEFAULT
+
+'${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.
+
+ $ var=
+ $ : ${var:?var is unset or null}
+ bash: var: var is unset or null
+
+'${PARAMETER:+WORD}'
+ If PARAMETER is null or unset, nothing is substituted, otherwise
+ the expansion of WORD is substituted.
+
+ $ var=123
+ $ echo ${var:+var is set and not null}
+ var is set and not null
+
+'${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 '@' or '*', 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 '@' or '*', 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, '$0' 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 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}'
+'${PARAMETER//PATTERN/STRING}'
+'${PARAMETER/#PATTERN/STRING}'
+'${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. STRING undergoes tilde
+ expansion, parameter and variable expansion, arithmetic expansion,
+ command and process substitution, and quote removal. The match is
+ performed according to the rules described below (*note Pattern
+ Matching::).
+
+ In the first form above, only the first match is replaced. If
+ there are two slashes separating PARAMETER and PATTERN (the second
+ form above), all matches of PATTERN are replaced with STRING. If
+ PATTERN is preceded by '#' (the third form above), it must match at
+ the beginning of the expanded value of PARAMETER. If PATTERN is
+ preceded by '%' (the fourth form above), it must match at the end
+ of the expanded value of PARAMETER. If the expansion of STRING is
+ null, matches of PATTERN are deleted. If STRING is null, matches
+ of PATTERN are deleted and the '/' following PATTERN may be
+ omitted.
+
+ If the 'patsub_replacement' shell option is enabled using 'shopt',
+ any unquoted instances of '&' in STRING are replaced with the
+ matching portion of PATTERN. This is intended to duplicate a
+ common 'sed' idiom.
+
+ Quoting any part of STRING inhibits replacement in the expansion of
+ the quoted portion, including replacement strings stored in shell
+ variables. Backslash will escape '&' in STRING; the backslash is
+ removed in order to permit a literal '&' in the replacement string.
+ Users should take care if STRING is double-quoted to avoid unwanted
+ interactions between the backslash and double-quoting, since
+ backslash has special meaning within double quotes. Pattern
+ substitution performs the check for unquoted '&' after expanding
+ STRING, so users should ensure to properly quote any occurrences of
+ '&' they want to be taken literally in the replacement and ensure
+ any instances of '&' they want to be replaced are unquoted.
+
+ For instance,
+
+ var=abcdef
+ rep='& '
+ echo ${var/abc/& }
+ echo "${var/abc/& }"
+ echo ${var/abc/$rep}
+ echo "${var/abc/$rep}"
+
+ will display four lines of "abc def", while
+
+ var=abcdef
+ rep='& '
+ echo ${var/abc/\& }
+ echo "${var/abc/\& }"
+ echo ${var/abc/"& "}
+ echo ${var/abc/"$rep"}
+
+ will display four lines of "& def". Like the pattern removal
+ operators, double quotes surrounding the replacement string quote
+ the expanded characters, while double quotes enclosing the entire
+ parameter substitution do not, since the expansion is performed in
+ a context that doesn't take any enclosing double quotes into
+ account.
+
+ Since backslash can escape '&', it can also escape a backslash in
+ the replacement string. This means that '\\' will insert a literal
+ backslash into the replacement, so these two 'echo' commands
+
+ var=abcdef
+ rep='\\&xyz'
+ echo ${var/abc/\\&xyz}
+ echo ${var/abc/$rep}
+
+ will both output '\abcxyzdef'.
+
+ It should rarely be necessary to enclose only STRING in double
+ quotes.
+
+ 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:
+
+ 'U'
+ The expansion is a string that is the value of PARAMETER with
+ lowercase alphabetic characters converted to uppercase.
+ 'u'
+ The expansion is a string that is the value of PARAMETER with
+ the first character converted to uppercase, if it is
+ alphabetic.
+ 'L'
+ The expansion is a string that is the value of PARAMETER with
+ uppercase alphabetic characters converted to lowercase.
+ '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.
+ 'K'
+ Produces a possibly-quoted version of the value of PARAMETER,
+ except that it prints the values of indexed and associative
+ arrays as a sequence of quoted key-value pairs (*note
+ Arrays::).
+ 'a'
+ The expansion is a string consisting of flag values
+ representing PARAMETER's attributes.
+ 'k'
+ Like the 'K' transformation, but expands the keys and values
+ of indexed and associative arrays to separate words after word
+ splitting.
+
+ 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
+ filename 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 undergoes the same expansions as if it were within
+double quotes, but double quote characters in EXPRESSION are not treated
+specially and are removed. 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, and is not quoted, 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. In order to match
+the filenames '.' and '..', the pattern must begin with '.' (for
+example, '.?'), even if 'dotglob' is set. If the 'globskipdots' shell
+option is enabled, the filenames '.' and '..' are never matched, even if
+the pattern begins with a '.'. When not matching filenames, 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', 'globskipdots', '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, and the
+ characters included in the range, are 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 '[aBbCcDdxYyZz]', 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,
+the shell recognizes several extended pattern matching operators. In
+the following description, a PATTERN-LIST is a list of one or more
+patterns separated by a '|'. When matching filenames, the 'dotglob'
+shell option determines the set of filenames that are tested, as
+described above. 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.
+
+ The 'extglob' option changes the behavior of the parser, since the
+parentheses are normally treated as operators with syntactic meaning.
+To ensure that extended matching patterns are parsed correctly, make
+sure that 'extglob' is enabled before parsing constructs containing the
+patterns, including shell functions and command substitutions.
+
+ When matching filenames, the 'dotglob' shell option determines the
+set of filenames that are tested: when 'dotglob' is enabled, the set of
+filenames includes all files beginning with '.', but the filenames '.'
+and '..' must be matched by a pattern or sub-pattern that begins with a
+dot; when it is disabled, the set does not include any filenames
+beginning with "." unless the pattern or sub-pattern begins with a '.'.
+As above, '.' only has a special meaning when matching filenames.
+
+ 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's lifetime manually. The 'varredir_close' shell
+option manages this behavior (*note The Shopt Builtin::).
+
+ 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. Filename
+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, in the
+following order.
+
+ 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. In the case of such a command (one that
+consists only of assignment statements and redirections), assignment
+statements are performed before redirections. 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.
+
+ A "subshell" is a copy of the shell process.
+
+ 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.
+
+ The exit status of the last command is available in the special
+parameter $? (*note Special Parameters::).
+
+
+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.
+
+ When job control is not enabled, and Bash is waiting for a foreground
+command to complete, the shell receives keyboard-generated signals such
+as 'SIGINT' (usually generated by '^C') that users commonly intend to
+send to that command. This happens because the shell and the command
+are in the same process group as the terminal, and '^C' sends 'SIGINT'
+to all processes in that process group. See *note Job Control::, for a
+more in-depth discussion of process groups.
+
+ When Bash is running without job control enabled and receives
+'SIGINT' while waiting for a foreground command, it waits until that
+foreground command terminates and then decides what to do about the
+'SIGINT':
+
+ 1. If the command terminates due to the 'SIGINT', Bash concludes that
+ the user meant to end the entire script, and acts on the 'SIGINT'
+ (e.g., by running a 'SIGINT' trap or exiting itself);
+
+ 2. If the pipeline does not terminate due to 'SIGINT', the program
+ handled the 'SIGINT' itself and did not treat it as a fatal signal.
+ In that case, Bash does not treat 'SIGINT' as a fatal signal,
+ either, instead assuming that the 'SIGINT' was used as part of the
+ program's normal operation (e.g., 'emacs' uses it to abort editing
+ commands) or deliberately discarded. However, Bash will run any
+ trap set on 'SIGINT', as it does with any other trapped signal it
+ receives while it is waiting for the foreground command to
+ complete, for compatibility.
+
+
+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 creates a new instance of itself 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 and, depending on the operating system, one
+or more optional arguments for that interpreter. 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 one or more optional
+arguments 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 supplied to the script. The details of how the
+interpreter line is split into an interpreter name and a set of
+arguments vary across systems. 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 a single argument
+to a maximum of 32 characters, so it's not portable to assume that using
+more than one argument will work.
+
+ 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. It's
+a common idiom to use 'env' to find 'bash' even if it's been installed
+in another directory: '#!/usr/bin/env bash' will find the first
+occurrence of 'bash' in '$PATH'.
+
+
+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, but FILENAME does not need to be
+ executable. When Bash is not in POSIX mode, it searches the
+ current directory 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, '.' inherits any trap on
+ 'DEBUG'; if it is not, any 'DEBUG' trap string is saved and
+ restored around the call to '.', and '.' 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 '.'
+ 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. 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.
+
+ If the directory change is successful, 'cd' sets the value of the
+ 'PWD' environment variable to the new directory name, and sets the
+ 'OLDPWD' environment variable to the value of the current working
+ directory before the change.
+
+ 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 [ARG ...]
+
+ '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 supplied as ARG values, '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 '$#' down 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
+ The following conditions are applied in the order listed.
+
+ 1. If the first argument is '!', the result is the negation
+ of the three-argument expression composed of the
+ remaining arguments.
+ 2. If the first argument is exactly '(' and the fourth
+ argument is exactly ')', the result is the two-argument
+ test of the second and third arguments.
+ 3. 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, a function with that name, if any, is
+ unset. Readonly variables and functions may not be unset. Some
+ shell variables lose their special behavior if they are unset; such
+ behavior is noted in the description of the individual variables.
+ The return status is zero unless a NAME is readonly or may not be
+ unset.
+
+
+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
+ bind READLINE-COMMAND-LINE
+
+ 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' and 'READLINE_MARK' variables
+ to the current location of the insertion point and the saved
+ insertion point (the MARK), respectively. The shell assigns
+ any numeric argument the user supplied to the
+ 'READLINE_ARGUMENT' variable. If there was no argument, that
+ variable is not set. If the executed command changes the
+ value of any of 'READLINE_LINE', 'READLINE_POINT', or
+ 'READLINE_MARK', 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 [-aAfFgiIlnrtux] [-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 '-I' option causes local variables to inherit the attributes
+ (except the 'nameref' attribute) and value of any existing variable
+ with the same NAME at a surrounding scope. If there is no existing
+ variable, the local variable is initially unset.
+
+ 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.
+ Bash will use the value of the 'BASH_LOADABLES_PATH' variable as a
+ colon-separated list of directories in which to search for
+ FILENAME. The default is system-dependent. 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::).
+
+ If no options are supplied and a NAME is not a shell builtin,
+ 'enable' will attempt to load NAME from a shared object named NAME,
+ as if the command were 'enable -f NAME NAME'.
+
+ 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 restore is
+ effected as if a series of 'set' commands were executed to restore
+ the values that were in place before the function. 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.
+ '%Q'
+ like '%q', but applies any supplied precision to the ARGUMENT
+ before quoting it.
+ '%(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.
+
+ The %b, %q, and %T directives all use the field width and precision
+ arguments from the format specification and write that many bytes
+ from (or use that wide a field for) the expanded argument, which
+ usually contains more characters than the original.
+
+ 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.
+
+ 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 any data. The exit status is 0 if input is available on
+ the specified file descriptor, or the read will return EOF,
+ non-zero otherwise. The exit status is greater than 128 if
+ the timeout is exceeded.
+
+ '-u FD'
+ Read input from file descriptor FD.
+
+ If no NAMEs are supplied, the line read, without the ending
+ delimiter but otherwise unmodified, 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'.
+
+'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 [-HS] -a
+ ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [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; no limits are set.
+
+ '-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.
+
+ '-R'
+ The maximum time a real-time process can run before blocking,
+ in microseconds.
+
+ '-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 more than one
+ resource is specified, the limit name and unit, if appropriate, are
+ printed before the value. 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; '-R', which is in
+ microseconds; '-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.
+
+ '-r'
+ Enable restricted shell mode. This option cannot be unset
+ once it has been set.
+
+ '-t'
+ Exit after reading and executing one command.
+
+ '-u'
+ Treat unset variables and parameters other than the special
+ parameters '@' or '*', or array variables subscripted with '@'
+ 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'
+ 'compat32'
+ 'compat40'
+ 'compat41'
+ 'compat42'
+ 'compat43'
+ 'compat44'
+ These control aspects of the shell's compatibility mode (*note
+ Shell Compatibility Mode::).
+
+ '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, or in a shell startup file,
+ 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.
+
+ 'globskipdots'
+ If set, filename expansion will never match the filenames '.'
+ and '..', even if the pattern begins with a '.'. This option
+ is enabled by default.
+
+ '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 (*note Conditional Constructs::, when
+ performing pattern substitution word expansions, or when
+ filtering possible completions as part of programmable
+ completion.
+
+ 'noexpand_translation'
+ If set, Bash encloses the translated results of $"..."
+ quoting in single quotes instead of double quotes. If the
+ string is not translated, this has no effect.
+
+ 'nullglob'
+ If set, Bash allows filename patterns which match no files to
+ expand to a null string, rather than themselves.
+
+ 'patsub_replacement'
+ If set, Bash expands occurrences of '&' in the replacement
+ string of pattern substitution to the text matched by the
+ pattern, as described above (*note Shell Parameter
+ Expansion::). This option is enabled by default.
+
+ '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.
+
+ 'varredir_close'
+ If set, the shell automatically closes file descriptors
+ assigned using the '{varname}' redirection syntax (*note
+ Redirections::) instead of leaving them open when the command
+ completes.
+
+ 'xpg_echo'
+ If set, the 'echo' builtin expands backslash-escape sequences
+ by default.
+
+
+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::).
+
+'_'
+ ($_, an underscore.) At shell startup, set to the 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.
+
+'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. If
+ 'BASH_COMMAND' is unset, it loses its special properties, even if
+ it is subsequently reset.
+
+'BASH_COMPAT'
+ The value is used to set the shell's compatibility level. *Note
+ Shell Compatibility Mode::, 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 values correspond to the
+ compatibility levels described below (*note Shell Compatibility
+ Mode::). For example, 4.2 and 42 are valid values that correspond
+ to the 'compat42' 'shopt' option and set the compatibility level to
+ 42. 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.
+
+'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. If 'BASH_SUBSHELL' is unset, it loses its special
+ properties, even if it is subsequently reset.
+
+'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'
+ Expanded and executed similarly to 'BASH_ENV' (*note Bash Startup
+ Files::) when an interactive 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. Assignments to 'HISTCMD' are ignored. 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. If 'LINENO' is unset, it loses its special properties,
+ even if it is subsequently reset.
+
+'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 this variable is set, and is an array, the value of each set
+ element is interpreted as a command to execute before printing the
+ primary prompt ('$PS1'). If this is set but not an array variable,
+ its value is used as a command to execute instead.
+
+'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, it expands to a random
+ integer between 0 and 32767. Assigning a value to this variable
+ seeds the random number generator. If 'RANDOM' is unset, it loses
+ its special properties, even if it is subsequently reset.
+
+'READLINE_ARGUMENT'
+ Any numeric argument given to a Readline command that was defined
+ using 'bind -x' (*note Bash Builtins:: when it was invoked.
+
+'READLINE_LINE'
+ The contents of the Readline line buffer, for use with 'bind -x'
+ (*note Bash Builtins::).
+
+'READLINE_MARK'
+ The position of the "mark" (saved insertion point) in the Readline
+ line buffer, for use with 'bind -x' (*note Bash Builtins::). The
+ characters between the insertion point and the mark are often
+ called the "region".
+
+'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. The number of seconds
+ at shell invocation and the current time are always determined by
+ querying the system clock. If 'SECONDS' is unset, it loses its
+ special properties, even if it is subsequently reset.
+
+'SHELL'
+ This environment variable expands to the full pathname to the
+ shell. 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.
+
+'SRANDOM'
+ This variable expands to a 32-bit pseudo-random number each time it
+ is referenced. The random number generator is not linear on
+ systems that support '/dev/urandom' or 'arc4random', so each
+ returned number has no relationship to the numbers preceding it.
+ The random number generator cannot be seeded, so assignments to
+ this variable have no effect. If 'SRANDOM' is unset, it loses its
+ special properties, even if it is subsequently reset.
+
+'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.
+* Shell Compatibility Mode:: How Bash supports behavior that was present
+ in earlier versions and has changed.
+
+
+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 historical
+remote shell daemon, usually 'rshd', or the secure shell daemon 'sshd'.
+If Bash determines it is being run non-interactively 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 an 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) and without specifying the '-c' option, 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 values of the set elements of the
+ 'PROMPT_COMMAND' array variable as commands 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. If the 'cdspell' shell option is enabled, the shell will attempt
+ simple spelling correction for directory arguments to the 'cd'
+ builtin (see the description of the 'cdspell' option to the 'shopt'
+ builtin in *note The Shopt Builtin::). The 'cdspell' option is
+ only effective in interactive shells.
+
+ 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 (*note
+Conditional Constructs::) and the 'test' and '[' builtin commands (*note
+Bourne Shell Builtins::). 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.
+
+ Integer constants follow the C language definition, without suffixes
+or character constants. 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, if a non-digit is required, 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, use a shell function (*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 may be 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.
+
+ Each VALUE in the list undergoes all the shell expansions described
+above (*note Shell Expansions::).
+
+ When assigning to an associative array, the words in a compound
+assignment may be either assignment statements, for which the subscript
+is required, or a list of words that is interpreted as a sequence of
+alternating keys and values: NAME=(KEY1 VALUE1 KEY2 VALUE2 ... ). These
+are treated identically to NAME=( [KEY1]=VALUE1 [KEY2]=VALUE2 ... ).
+The first word in the list determines how the remaining words are
+interpreted; all assignments in a list must be of the same type. When
+using key/value pairs, the keys may not be missing or empty; a final
+missing value is treated like the empty string.
+
+ 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.
+
+ The '+=' operator will append to an array variable when assigning
+using the compound assignment syntax; see *note Shell Parameters::
+above.
+
+ 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. 'unset NAME[SUBSCRIPT]' behaves differently depending on the
+array type when given a subscript of '*' or '@'. When NAME is an
+associative array, it removes the element with key '*' or '@'. If NAME
+is an indexed array, 'unset' removes all of the elements, but does not
+remove the array itself.
+
+ 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]
+
+ Removes elements from the directory stack. The elements are
+ numbered from 0 starting at the first directory listed by 'dirs';
+ that is, 'popd' is equivalent to 'popd +0'.
+
+ When no arguments are given, 'popd' removes the top directory from
+ the stack and changes to the new top directory.
+
+ Arguments, if supplied, have the following meanings:
+
+ '-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, from the stack.
+ '-N'
+ Removes the Nth directory (counting from the right of the list
+ printed by 'dirs'), starting with zero, from the stack.
+
+ If the top element of the directory stack is modified, and the '-n'
+ option was not supplied, 'popd' uses the 'cd' builtin to change to
+ the directory at the top of the stack. If the 'cd' fails, 'popd'
+ returns a non-zero value.
+
+ Otherwise, 'popd' returns an unsuccessful status if an invalid
+ option is encountered, the directory stack is empty, or a
+ non-existent directory stack entry is specified.
+
+ If the 'popd' command is successful, Bash runs 'dirs' to show the
+ final contents of the directory stack, and the return status is 0.
+
+'pushd'
+ pushd [-n] [+N | -N | DIR]
+
+ 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, 'pushd' exchanges the top two
+ elements of the directory stack.
+
+ Arguments, if supplied, have the following meanings:
+
+ '-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.
+
+ After the stack has been modified, if the '-n' option was not
+ supplied, 'pushd' uses the 'cd' builtin to change to the directory
+ at the top of the stack. If the 'cd' fails, 'pushd' returns a
+ non-zero value.
+
+ Otherwise, if no arguments are supplied, 'pushd' returns 0 unless
+ the directory stack is empty. When rotating the directory stack,
+ 'pushd' returns 0 unless the directory stack is empty or a
+ non-existent directory stack element is specified.
+
+ If the 'pushd' command is successful, Bash runs 'dirs' to show the
+ final contents of the directory stack.
+
+
+File: bash.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features
+
+6.9 Controlling the Prompt
+==========================
+
+Bash examines the value of the array variable 'PROMPT_COMMAND' just
+before printing each primary prompt. If any elements in
+'PROMPT_COMMAND' are set and non-null, Bash executes each value, in
+numeric order, 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 value of the 'PWD' shell variable ('$PWD'), 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::). This can have unwanted side effects if escaped portions of
+the string appear within command substitution or contain characters
+special to word expansion.
+
+
+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', 'HISTFILE',
+ '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
+ 'history' 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 'shopt -u
+ restricted_shell'.
+
+ 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.
+
+ The restricted shell mode is only one component of a useful
+restricted environment. It should be accompanied by setting 'PATH' to a
+value that allows execution of only a few verified commands (commands
+that allow shell escapes are particularly vulnerable), changing the
+current directory to a non-writable directory other than '$HOME' after
+login, not allowing the restricted shell to execute shell scripts, and
+cleaning the environment of variables that cause some commands to modify
+their behavior (e.g., 'VISUAL' or 'PAGER').
+
+ Modern systems provide more secure ways to implement a restricted
+environment, such as 'jails', 'zones', or 'containers'.
+
+
+File: bash.info, Node: Bash POSIX Mode, Next: Shell Compatibility 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. Bash will not insert a command without the execute bit set into the
+ command hash table, even if it returns it as a (last-ditch) result
+ from a '$PATH' search.
+
+ 4. The message printed by the job control code and builtins when a job
+ exits with a non-zero status is 'Done(status)'.
+
+ 5. The message printed by the job control code and builtins when a job
+ is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example,
+ 'SIGTSTP'.
+
+ 6. Alias expansion is always enabled, even in non-interactive shells.
+
+ 7. Reserved words appearing in a context where reserved words are
+ recognized do not undergo alias expansion.
+
+ 8. Alias expansion is performed when initially parsing a command
+ substitution. The default mode generally defers it, when enabled,
+ until the command substitution is executed. This means that
+ command substitution will not expand aliases that are defined after
+ the command substitution is initially parsed (e.g., as part of a
+ function definition).
+
+ 9. 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.
+
+ 10. The POSIX startup files are executed ('$ENV') rather than the
+ normal Bash files.
+
+ 11. Tilde expansion is only performed on assignments preceding a
+ command name, rather than on all assignment statements on the line.
+
+ 12. The default history file is '~/.sh_history' (this is the default
+ value of '$HISTFILE').
+
+ 13. Redirection operators do not perform filename expansion on the
+ word in the redirection unless the shell is interactive.
+
+ 14. Redirection operators do not perform word splitting on the word in
+ the redirection.
+
+ 15. 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.
+
+ 16. Function names may not be the same as one of the POSIX special
+ builtins.
+
+ 17. POSIX special builtins are found before shell functions during
+ command lookup.
+
+ 18. When printing shell function definitions (e.g., by 'type'), Bash
+ does not print the 'function' keyword.
+
+ 19. Literal tildes that appear as the first character in elements of
+ the 'PATH' variable are not expanded as described above under *note
+ Tilde Expansion::.
+
+ 20. 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.
+
+ 21. 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.
+
+ 22. The parser does not recognize 'time' as a reserved word if the
+ next token begins with a '-'.
+
+ 23. The '!' character does not introduce history expansion within a
+ double-quoted string, even if the 'histexpand' option is enabled.
+
+ 24. 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.
+
+ 25. 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.
+
+ 26. 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. For any
+ other simple command, the shell aborts execution of that command,
+ and execution continues at the top level ("the shell shall not
+ perform any further processing of the command in which the error
+ occurred").
+
+ 27. 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.
+
+ 28. Non-interactive shells exit if FILENAME in '.' FILENAME is not
+ found.
+
+ 29. Non-interactive shells exit if a syntax error in an arithmetic
+ expansion results in an invalid expression.
+
+ 30. Non-interactive shells exit if a parameter expansion error occurs.
+
+ 31. 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.
+
+ 32. While variable indirection is available, it may not be applied to
+ the '#' and '?' special parameters.
+
+ 33. Expanding the '*' special parameter in a pattern context where the
+ expansion is double-quoted does not treat the '$*' as if it were
+ double-quoted.
+
+ 34. Assignment statements preceding POSIX special builtins persist in
+ the shell environment after the builtin completes.
+
+ 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. 'trap -p' displays signals whose dispositions are set to SIG_DFL
+ and those that were ignored when the shell started.
+
+ 43. The '.' and 'source' builtins do not search the current directory
+ for the filename argument if it is not found by searching 'PATH'.
+
+ 44. 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.
+
+ 45. 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.
+
+ 46. When the 'alias' builtin displays alias definitions, it does not
+ display them with a leading 'alias ' unless the '-p' option is
+ supplied.
+
+ 47. When the 'set' builtin is invoked without options, it does not
+ display shell function names and definitions.
+
+ 48. 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.
+
+ 49. 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.
+
+ 50. 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.
+
+ 51. 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.
+
+ 52. When listing the history, the 'fc' builtin does not include an
+ indication of whether or not a history entry has been modified.
+
+ 53. The default editor used by 'fc' is 'ed'.
+
+ 54. 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'.
+
+ 55. The 'vi' editing mode will invoke the 'vi' editor directly when
+ the 'v' command is run, instead of checking '$VISUAL' and
+ '$EDITOR'.
+
+ 56. 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.
+
+ 57. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
+ and '-f' options.
+
+ 58. 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.
+
+ 59. 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.
+
+ 60. The 'printf' builtin uses 'double' (via 'strtod') to convert
+ arguments corresponding to floating point conversion specifiers,
+ instead of 'long double' if it's available. The 'L' length
+ modifier forces 'printf' to use 'long double' if it's available.
+
+ 61. 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: Shell Compatibility Mode, Prev: Bash POSIX Mode, Up: Bash Features
+
+6.12 Shell Compatibility Mode
+=============================
+
+Bash-4.0 introduced the concept of a "shell compatibility level",
+specified as a set of options to the shopt builtin ('compat31',
+'compat32', 'compat40', 'compat41', and so on). There is only one
+current compatibility level - each option is mutually exclusive. The
+compatibility level is intended to allow users to select behavior from
+previous versions that is incompatible with newer versions while they
+migrate scripts to use current features and behavior. It's intended to
+be a temporary solution.
+
+ This section does not mention behavior that is standard for a
+particular version (e.g., setting 'compat32' means that quoting the rhs
+of the regexp matching operator quotes special regexp characters in the
+word, which is default behavior in bash-3.2 and subsequent versions).
+
+ If a user enables, say, 'compat32', it may affect the behavior of
+other compatibility levels up to and including the current compatibility
+level. The idea is that each compatibility level controls behavior that
+changed in that version of Bash, but that behavior may have been present
+in earlier versions. For instance, the change to use locale-based
+comparisons with the '[[' command came in bash-4.1, and earlier versions
+used ASCII-based comparisons, so enabling 'compat32' will enable
+ASCII-based comparisons as well. That granularity may not be sufficient
+for all uses, and as a result users should employ compatibility levels
+carefully. Read the documentation for a particular feature to find out
+the current behavior.
+
+ Bash-4.3 introduced a new shell variable: 'BASH_COMPAT'. The value
+assigned to this variable (a decimal version number like 4.2, or an
+integer corresponding to the 'compat'NN option, like 42) determines the
+compatibility level.
+
+ Starting with bash-4.4, Bash has begun deprecating older
+compatibility levels. Eventually, the options will be removed in favor
+of 'BASH_COMPAT'.
+
+ Bash-5.0 is the final version for which there will be an individual
+shopt option for the previous version. Users should use 'BASH_COMPAT'
+on bash-5.0 and later versions.
+
+ The following table describes the behavior changes controlled by each
+compatibility level setting. The 'compat'NN tag is used as shorthand
+for setting the compatibility level to NN using one of the following
+mechanisms. For versions prior to bash-5.0, the compatibility level may
+be set using the corresponding 'compat'NN shopt option. For bash-4.3
+and later versions, the 'BASH_COMPAT' variable is preferred, and it is
+required for bash-5.1 and later versions.
+
+'compat31'
+ * quoting the rhs of the '[[' command's regexp matching operator
+ (=~) has no special effect
+
+'compat32'
+ * interrupting a command list such as "a ; b ; c" causes the
+ execution of the next command in the list (in bash-4.0 and
+ later versions, the shell acts as if it received the
+ interrupt, so interrupting one command in a list aborts the
+ execution of the entire list)
+
+'compat40'
+ * the '<' and '>' operators to the '[[' command do not consider
+ the current locale when comparing strings; they use ASCII
+ ordering. 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).
+
+'compat41'
+ * in posix mode, 'time' may be followed by options and still be
+ recognized as a reserved word (this is POSIX interpretation
+ 267)
+ * in posix mode, the parser requires that an even number of
+ single quotes occur in the WORD portion of a double-quoted
+ ${...} parameter expansion and treats them specially, so that
+ characters within the single quotes are considered quoted
+ (this is POSIX interpretation 221)
+
+'compat42'
+ * the replacement string in double-quoted pattern substitution
+ does not undergo quote removal, as it does in versions after
+ bash-4.2
+ * in posix mode, single quotes are considered special when
+ expanding the WORD portion of a double-quoted ${...} parameter
+ expansion and can be used to quote a closing brace or other
+ special character (this is part of POSIX interpretation 221);
+ in later versions, single quotes are not special within
+ double-quoted word expansions
+
+'compat43'
+ * the shell does not print a warning message if an attempt is
+ made to use a quoted compound assignment as an argument to
+ declare (e.g., declare -a foo='(1 2)'). Later versions warn
+ that this usage is deprecated
+ * word expansion errors are considered non-fatal errors that
+ cause the current command to fail, even in posix mode (the
+ default behavior is to make them fatal errors that cause the
+ shell to exit)
+ * when executing a shell function, the loop state
+ (while/until/etc.) is not reset, so 'break' or 'continue' in
+ that function will break or continue loops in the calling
+ context. Bash-4.4 and later reset the loop state to prevent
+ this
+
+'compat44'
+ * the shell sets up the values used by 'BASH_ARGV' and
+ 'BASH_ARGC' so they can expand to the shell's positional
+ parameters even if extended debugging mode is not enabled
+ * a subshell inherits loops from its parent context, so 'break'
+ or 'continue' will cause the subshell to exit. Bash-5.0 and
+ later reset the loop state to prevent the exit
+ * variable assignments preceding builtins like 'export' and
+ 'readonly' that set attributes continue to affect variables
+ with the same name in the calling environment even if the
+ shell is not in posix mode
+
+'compat50 (set using BASH_COMPAT)'
+ * Bash-5.1 changed the way '$RANDOM' is generated to introduce
+ slightly more randomness. If the shell compatibility level is
+ set to 50 or lower, it reverts to the method from bash-5.0 and
+ previous versions, so seeding the random number generator by
+ assigning a value to 'RANDOM' will produce the same sequence
+ as in bash-5.0
+ * If the command hash table is empty, Bash versions prior to
+ bash-5.1 printed an informational message to that effect, even
+ when producing output that can be reused as input. Bash-5.1
+ suppresses that message when the '-l' option is supplied.
+
+'compat51 (set using BASH_COMPAT)'
+ * The 'unset' builtin will unset the array 'a' given an argument
+ like 'a[@]'. Bash-5.2 will unset an element with key '@'
+ (associative arrays) or remove all the elements without
+ unsetting the array (indexed arrays)
+ * arithmetic commands ( ((...)) ) and the expressions in an
+ arithmetic for statement can be expanded more than once
+ * expressions used as arguments to arithmetic operators in the
+ '[[' conditional command can be expanded more than once
+ * the expressions in substring parameter brace expansion can be
+ expanded more than once
+ * the expressions in the $(( ... )) word expansion can be
+ expanded more than once
+ * arithmetic expressions used as indexed array subscripts can be
+ expanded more than once
+ * 'test -v', when given an argument of 'A[@]', where A is an
+ existing associative array, will return true if the array has
+ any set elements. Bash-5.2 will look for and report on a key
+ named '@'
+ * the ${PARAMETER[:]=VALUE} word expansion will return VALUE,
+ before any variable-specific transformations have been
+ performed (e.g., converting to lowercase). Bash-5.2 will
+ return the final value assigned to the variable.
+ * Parsing command substitutions will behave as if extended glob
+ (*note The Shopt Builtin::) is enabled, so that parsing a
+ command substitution containing an extglob pattern (say, as
+ part of a shell function) will not fail. This assumes the
+ intent is to enable extglob before the command is executed and
+ word expansions are performed. It will fail at word expansion
+ time if extglob hasn't been enabled by the time the command is
+ executed.
+
+
+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 job whose command name begins with
+'ce'. 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 causes '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] [-p VARNAME] [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, 'wait' waits
+ for all running background jobs and the last-executed process
+ substitution, if its process id is the same as $!, and the return
+ status is zero. If the '-n' option is supplied, 'wait' waits for a
+ single job from the list of PIDs or JOBSPECs or, if no arguments
+ are supplied, any job, to complete and returns its exit status. If
+ none of the supplied arguments is a child of the shell, or if no
+ arguments are supplied and the shell has no unwaited-for children,
+ the exit status is 127. If the '-p' option is supplied, the
+ process or job identifier of the job for which the exit status is
+ returned is assigned to the variable VARNAME named by the option
+ argument. The variable will be unset initially, before any
+ assignment. This is useful only when the '-n' option is supplied.
+ Supplying the '-f' option, when job control is enabled, forces
+ 'wait' to wait for each PID or JOBSPEC to terminate before
+ returning its status, instead of returning when it changes status.
+ If neither JOBSPEC nor PID specifies an active child process of the
+ shell, the return status is 127. If 'wait' is interrupted by a
+ signal, the return status will be greater than 128, as described
+ above (*note Signals::). Otherwise, the return status is the exit
+ status of the last process or job waited for.
+
+'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, or a shell without job control enabled,
+ cannot be suspended; the '-f' option can be used to override this
+ and force the suspension. The return status is 0 unless the shell
+ is a login shell or job control is not enabled and '-f' is not
+ supplied.
+
+ 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 might 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 to 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 their 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'. The 'bind' builtin command can also
+be used to set Readline keybindings and variables. *Note Bash
+Builtins::.
+
+ 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.
+
+ 'active-region-start-color'
+ A string variable that controls the text color and background
+ when displaying the text in the active region (see the
+ description of 'enable-active-region' below). This string
+ must not take up any physical character positions on the
+ display, so it should consist only of terminal escape
+ sequences. It is output to the terminal before displaying the
+ text in the active region. This variable is reset to the
+ default value whenever the terminal type changes. The default
+ value is the string that puts the terminal in standout mode,
+ as obtained from the terminal's terminfo description. A
+ sample value might be '\e[01;33m'.
+
+ 'active-region-end-color'
+ A string variable that "undoes" the effects of
+ 'active-region-start-color' and restores "normal" terminal
+ display appearance after displaying text in the active region.
+ This string must not take up any physical character positions
+ on the display, so it should consist only of terminal escape
+ sequences. It is output to the terminal after displaying the
+ text in the active region. This variable is reset to the
+ default value whenever the terminal type changes. The default
+ value is the string that restores the terminal from standout
+ mode, as obtained from the terminal's terminfo description. A
+ sample value might be '\e[0m'.
+
+ '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. If there is a
+ color definition in 'LS_COLORS' for the custom suffix
+ 'readline-colored-completion-prefix', Readline uses this color
+ for the common prefix instead of its default. 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 or equal to this value, Readline will ask whether or not
+ the user wishes to view them; otherwise, they are simply
+ listed. This variable must be set to an integer value greater
+ than or equal to zero. A zero value means Readline should
+ never ask; negative values are treated as zero. 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. This variable is dependent on the
+ 'LC_CTYPE' locale category, and may change if the locale is
+ changed.
+
+ '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-active-region'
+ The "point" is the current cursor position, and "mark" refers
+ to a saved cursor position (*note Commands For Moving::). The
+ text between the point and mark is referred to as the
+ "region". When this variable is set to 'On', Readline allows
+ certain commands to designate the region as "active". When
+ the region is active, Readline highlights the text in the
+ region using the value of the 'active-region-start-color',
+ which defaults to the string that enables the terminal's
+ standout mode. The active region shows the text inserted by
+ bracketed-paste and any matching text found by incremental and
+ non-incremental history searches. The default is 'On'.
+
+ 'enable-bracketed-paste'
+ When set to 'On', Readline configures the terminal 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 is called putting the
+ terminal into "bracketed paste mode"; it prevents Readline
+ from executing any editing commands bound to key sequences
+ appearing in the pasted text. The default is 'On'.
+
+ '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. This variable is automatically set to 'on'
+ for terminals of height 1. 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. This variable is
+ dependent on the 'LC_CTYPE' locale category, and may change if
+ the locale is changed.
+
+ '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. This
+ variable is dependent on the 'LC_CTYPE' locale category, and
+ may change if the locale is changed.
+
+ '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 be 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 150 or more possible completions for a word,
+ # ask whether or not the user 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 (M-C-f)'
+ Move forward to the end of the next word. Words are delimited by
+ non-quoted shell metacharacters.
+
+'shell-backward-word (M-C-b)'
+ 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-display (M-C-l)'
+ Clear the screen and, if possible, the terminal's scrollback
+ buffer, then redraw the current line, leaving the current line at
+ the top of the screen.
+
+'clear-screen (C-l)'
+ Clear the screen, then 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.
+ This command sets the region to the matched text and activates the
+ mark.
+
+'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.
+ This command sets the region to the matched text and activates the
+ mark.
+
+'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.
+
+'operate-and-get-next (C-o)'
+ Accept the current line for return to the calling application as if
+ a newline had been entered, 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.
+
+'fetch-history ()'
+ With a numeric argument, fetch that entry from the history list and
+ make it the current line. Without an argument, move back to the
+ first entry in the history list.
+
+
+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.
+
+ Bracketed paste sets the region (the characters between point and
+ the mark) to the inserted text. It uses the concept of an _active
+ mark_: when the mark is active, Readline redisplay uses the
+ terminal's standout mode to denote the region.
+
+'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. With a negative
+ numeric argument, kill backward from the cursor to the beginning of
+ the current line.
+
+'backward-kill-line (C-x Rubout)'
+ Kill backward from the cursor to the beginning of the current line.
+ With a negative numeric argument, kill forward from the cursor to
+ the end 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 (M-C-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 'shell-forward-word'.
+
+'shell-backward-kill-word ()'
+ Kill the word behind point. Word boundaries are the same as
+ 'shell-backward-word'.
+
+'shell-transpose-words (M-C-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. Word
+ boundaries are the same as 'shell-forward-word' and
+ '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 keyboard 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 argument 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 argument 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.
+
+'spell-correct-word (C-x s)'
+ Perform spelling correction on the current word, treating it as a
+ directory or filename, in the same way as the 'cdspell' shell
+ option. Word boundaries are the same as those used by
+ 'shell-forward-word'.
+
+'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'.
+
+'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 initial 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. Arguments are passed as
+ with the '-F' option.
+
+ '-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 initial 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
+completions that Bash adds to the default Readline set. These include
+things like command name completion, variable completion for words
+beginning with '$' or '${', 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 <https://github.com/scop/bash-completion/>. 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).
+
+ When listing, a FIRST or LAST of 0 is equivalent to -1 and -0 is
+ equivalent to the current command (usually the 'fc' command);
+ otherwise 0 is equivalent to -1 and -0 is invalid.
+
+ 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
+ interpreted 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 range of 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.
+
+ If a FILENAME argument is supplied when any of the '-w', '-r',
+ '-a', or '-n' options is used, Bash uses FILENAME as the history
+ file. If not, then the value of the 'HISTFILE' variable is used.
+
+ The return value is 0 unless an invalid option is encountered, an
+ error occurs while reading or writing the history file, an invalid
+ OFFSET or range is supplied as an argument to '-d', or the history
+ expansion supplied as an argument to '-p' fails.
+
+
+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. If
+ STRING is missing, the string from the most recent search is used;
+ it is an error if there is no previous search string.
+
+'^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 first word matched by the most recent '?STRING?' search, if the
+ search string begins with a character that is part of a word.
+
+'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 'x' is
+ missing, it defaults to 0.
+
+ 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 ':'. These modify,
+or edit, the word or words selected from the history event.
+
+'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. The 'q' and 'x' modifiers are mutually
+ exclusive; the last one supplied is used.
+
+'s/OLD/NEW/'
+ Substitute NEW for the first occurrence of OLD in the event line.
+ Any character may be used as the delimiter 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 '&'. If OLD is null, it is set to the last OLD
+ substituted, or, if no previous history substitutions took place,
+ the last STRING in a !?STRING'[?]' search. If NEW is null, each
+ matching OLD is deleted. 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' or '&' 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, message translation
+ files, some supplemental documentation, a number of example
+ loadable builtin commands, and a set of header files for developing
+ loadable builtins. You may need additional privileges to install
+ 'bash' to your desired destination, so 'sudo make install' might be
+ required. More information about controlling the locations where
+ 'bash' and other files are installed is below (*note Installation
+ Names::).
+
+ 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', 'po', 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.69 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 support 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.; that is, the "installation prefix" defaults to
+'/usr/local'. You can specify an installation prefix other than
+'/usr/local' by giving 'configure' the option '--prefix=PATH', or by
+specifying a value for the 'prefix' 'make' variable when running 'make
+install' (e.g., 'make install prefix=PATH'). The 'prefix' variable
+provides a default for 'exec_prefix' and other variables used when
+installing bash.
+
+ 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.
+
+ If you would like to change the installation locations for a single
+run, you can specify these variables as arguments to 'make': 'make
+install exec_prefix=/' will install 'bash' and 'bashbug' into '/bin'
+instead of the default '/usr/local/bin'.
+
+ If you want to see the files bash will install and where it will
+install them without changing anything on your system, specify the
+variable 'DESTDIR' as an argument to 'make'. Its value should be the
+absolute directory path you'd like to use as the root of your sample
+installation tree. For example,
+
+ mkdir /fs1/bash-install
+ make install DESTDIR=/fs1/bash-install
+
+will install 'bash' into '/fs1/bash-install/usr/local/bin/bash', the
+documentation into directories within
+'/fs1/bash-install/usr/local/share', the example loadable builtins into
+'/fs1/bash-install/usr/local/lib/bash', and so on. You can use the
+usual 'exec_prefix' and 'prefix' variables to alter the directory paths
+beneath the value of 'DESTDIR'.
+
+ The GNU Makefile standards provide a more complete description of
+these variables and their effects.
+
+
+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 needs 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-libintl-prefix[=PREFIX]'
+ Define this to make Bash link with a locally-installed version of
+ the libintl library instead of the version in 'lib/intl'.
+
+'--with-libiconv-prefix[=PREFIX]'
+ Define this to make Bash look for libiconv in PREFIX instead of the
+ standard system locations. There is no version included with Bash.
+
+'--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, linked, and installed, 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-separate-helpfiles'
+ Use external files for the documentation displayed by the 'help'
+ builtin instead of storing the text internally.
+
+'--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 'alt-array-implementation',
+'disabled-builtins', 'direxpand-default', 'strict-posix-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-alt-array-implementation'
+ This builds bash using an alternate implementation of arrays (*note
+ Arrays::) that provides faster access at the expense of using more
+ memory (sometimes many times more, depending on how sparse an array
+ is).
+
+'--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-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-translatable-strings'
+ Enable support for '$"STRING"' translatable strings (*note Locale
+ Translation::).
+
+'--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/> and from
+<http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz>.
+
+ 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 a '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 275)
+* alias: Bash Builtins. (line 11)
+* bg: Job Control Builtins.
+ (line 7)
+* bind: Bash Builtins. (line 21)
+* break: Bourne Shell Builtins.
+ (line 37)
+* builtin: Bash Builtins. (line 108)
+* caller: Bash Builtins. (line 117)
+* cd: Bourne Shell Builtins.
+ (line 45)
+* command: Bash Builtins. (line 134)
+* compgen: Programmable Completion Builtins.
+ (line 12)
+* complete: Programmable Completion Builtins.
+ (line 30)
+* compopt: Programmable Completion Builtins.
+ (line 238)
+* continue: Bourne Shell Builtins.
+ (line 90)
+* declare: Bash Builtins. (line 154)
+* dirs: Directory Stack Builtins.
+ (line 7)
+* disown: Job Control Builtins.
+ (line 104)
+* echo: Bash Builtins. (line 257)
+* enable: Bash Builtins. (line 306)
+* eval: Bourne Shell Builtins.
+ (line 99)
+* exec: Bourne Shell Builtins.
+ (line 107)
+* exit: Bourne Shell Builtins.
+ (line 125)
+* export: Bourne Shell Builtins.
+ (line 132)
+* fc: Bash History Builtins.
+ (line 10)
+* fg: Job Control Builtins.
+ (line 17)
+* getopts: Bourne Shell Builtins.
+ (line 148)
+* hash: Bourne Shell Builtins.
+ (line 192)
+* help: Bash Builtins. (line 342)
+* history: Bash History Builtins.
+ (line 46)
+* jobs: Job Control Builtins.
+ (line 27)
+* kill: Job Control Builtins.
+ (line 58)
+* let: Bash Builtins. (line 361)
+* local: Bash Builtins. (line 369)
+* logout: Bash Builtins. (line 385)
+* mapfile: Bash Builtins. (line 390)
+* popd: Directory Stack Builtins.
+ (line 35)
+* printf: Bash Builtins. (line 436)
+* pushd: Directory Stack Builtins.
+ (line 69)
+* pwd: Bourne Shell Builtins.
+ (line 212)
+* read: Bash Builtins. (line 488)
+* readarray: Bash Builtins. (line 585)
+* readonly: Bourne Shell Builtins.
+ (line 222)
+* return: Bourne Shell Builtins.
+ (line 241)
+* set: The Set Builtin. (line 11)
+* shift: Bourne Shell Builtins.
+ (line 262)
+* shopt: The Shopt Builtin. (line 9)
+* source: Bash Builtins. (line 594)
+* suspend: Job Control Builtins.
+ (line 116)
+* test: Bourne Shell Builtins.
+ (line 275)
+* times: Bourne Shell Builtins.
+ (line 360)
+* trap: Bourne Shell Builtins.
+ (line 366)
+* type: Bash Builtins. (line 599)
+* typeset: Bash Builtins. (line 631)
+* ulimit: Bash Builtins. (line 637)
+* umask: Bourne Shell Builtins.
+ (line 415)
+* unalias: Bash Builtins. (line 743)
+* unset: Bourne Shell Builtins.
+ (line 433)
+* 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 126)
+* ]]: Conditional Constructs.
+ (line 126)
+* {: 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 84)
+* 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 55)
+* #: Special Parameters. (line 39)
+* $: Special Parameters. (line 51)
+* $!: Special Parameters. (line 56)
+* $#: Special Parameters. (line 40)
+* $$: Special Parameters. (line 52)
+* $*: Special Parameters. (line 10)
+* $-: Special Parameters. (line 47)
+* $0: Special Parameters. (line 61)
+* $?: Special Parameters. (line 43)
+* $@: Special Parameters. (line 23)
+* $_: Bash Variables. (line 14)
+* *: Special Parameters. (line 9)
+* -: Special Parameters. (line 46)
+* 0: Special Parameters. (line 60)
+* ?: Special Parameters. (line 42)
+* @: Special Parameters. (line 22)
+* _: Bash Variables. (line 13)
+* active-region-end-color: Readline Init File Syntax.
+ (line 51)
+* active-region-start-color: Readline Init File Syntax.
+ (line 38)
+* auto_resume: Job Control Variables.
+ (line 6)
+* BASH: Bash Variables. (line 23)
+* BASHOPTS: Bash Variables. (line 26)
+* BASHPID: Bash Variables. (line 35)
+* BASH_ALIASES: Bash Variables. (line 42)
+* BASH_ARGC: Bash Variables. (line 51)
+* BASH_ARGV: Bash Variables. (line 64)
+* BASH_ARGV0: Bash Variables. (line 76)
+* BASH_CMDS: Bash Variables. (line 84)
+* BASH_COMMAND: Bash Variables. (line 93)
+* BASH_COMPAT: Bash Variables. (line 100)
+* BASH_ENV: Bash Variables. (line 116)
+* BASH_EXECUTION_STRING: Bash Variables. (line 122)
+* BASH_LINENO: Bash Variables. (line 125)
+* BASH_LOADABLES_PATH: Bash Variables. (line 133)
+* BASH_REMATCH: Bash Variables. (line 137)
+* BASH_SOURCE: Bash Variables. (line 145)
+* BASH_SUBSHELL: Bash Variables. (line 152)
+* BASH_VERSINFO: Bash Variables. (line 158)
+* BASH_VERSION: Bash Variables. (line 181)
+* BASH_XTRACEFD: Bash Variables. (line 184)
+* bell-style: Readline Init File Syntax.
+ (line 64)
+* bind-tty-special-chars: Readline Init File Syntax.
+ (line 71)
+* blink-matching-paren: Readline Init File Syntax.
+ (line 76)
+* CDPATH: Bourne Shell Variables.
+ (line 9)
+* CHILD_MAX: Bash Variables. (line 195)
+* colored-completion-prefix: Readline Init File Syntax.
+ (line 81)
+* colored-stats: Readline Init File Syntax.
+ (line 91)
+* COLUMNS: Bash Variables. (line 202)
+* comment-begin: Readline Init File Syntax.
+ (line 97)
+* completion-display-width: Readline Init File Syntax.
+ (line 102)
+* completion-ignore-case: Readline Init File Syntax.
+ (line 109)
+* completion-map-case: Readline Init File Syntax.
+ (line 114)
+* completion-prefix-display-length: Readline Init File Syntax.
+ (line 120)
+* completion-query-items: Readline Init File Syntax.
+ (line 127)
+* COMPREPLY: Bash Variables. (line 254)
+* COMP_CWORD: Bash Variables. (line 208)
+* COMP_KEY: Bash Variables. (line 237)
+* COMP_LINE: Bash Variables. (line 214)
+* COMP_POINT: Bash Variables. (line 219)
+* COMP_TYPE: Bash Variables. (line 227)
+* COMP_WORDBREAKS: Bash Variables. (line 241)
+* COMP_WORDS: Bash Variables. (line 247)
+* convert-meta: Readline Init File Syntax.
+ (line 138)
+* COPROC: Bash Variables. (line 260)
+* DIRSTACK: Bash Variables. (line 264)
+* disable-completion: Readline Init File Syntax.
+ (line 148)
+* echo-control-characters: Readline Init File Syntax.
+ (line 153)
+* editing-mode: Readline Init File Syntax.
+ (line 158)
+* EMACS: Bash Variables. (line 274)
+* emacs-mode-string: Readline Init File Syntax.
+ (line 164)
+* enable-active-region: Readline Init File Syntax.
+ (line 174)
+* enable-bracketed-paste: Readline Init File Syntax.
+ (line 187)
+* enable-keypad: Readline Init File Syntax.
+ (line 196)
+* ENV: Bash Variables. (line 279)
+* EPOCHREALTIME: Bash Variables. (line 284)
+* EPOCHSECONDS: Bash Variables. (line 292)
+* EUID: Bash Variables. (line 299)
+* EXECIGNORE: Bash Variables. (line 303)
+* expand-tilde: Readline Init File Syntax.
+ (line 207)
+* FCEDIT: Bash Variables. (line 316)
+* FIGNORE: Bash Variables. (line 320)
+* FUNCNAME: Bash Variables. (line 326)
+* FUNCNEST: Bash Variables. (line 343)
+* GLOBIGNORE: Bash Variables. (line 348)
+* GROUPS: Bash Variables. (line 355)
+* histchars: Bash Variables. (line 361)
+* HISTCMD: Bash Variables. (line 376)
+* HISTCONTROL: Bash Variables. (line 382)
+* HISTFILE: Bash Variables. (line 398)
+* HISTFILESIZE: Bash Variables. (line 402)
+* HISTIGNORE: Bash Variables. (line 413)
+* history-preserve-point: Readline Init File Syntax.
+ (line 211)
+* history-size: Readline Init File Syntax.
+ (line 217)
+* HISTSIZE: Bash Variables. (line 433)
+* HISTTIMEFORMAT: Bash Variables. (line 440)
+* HOME: Bourne Shell Variables.
+ (line 13)
+* horizontal-scroll-mode: Readline Init File Syntax.
+ (line 226)
+* HOSTFILE: Bash Variables. (line 448)
+* HOSTNAME: Bash Variables. (line 459)
+* HOSTTYPE: Bash Variables. (line 462)
+* IFS: Bourne Shell Variables.
+ (line 18)
+* IGNOREEOF: Bash Variables. (line 465)
+* input-meta: Readline Init File Syntax.
+ (line 235)
+* INPUTRC: Bash Variables. (line 475)
+* INSIDE_EMACS: Bash Variables. (line 479)
+* isearch-terminators: Readline Init File Syntax.
+ (line 245)
+* keymap: Readline Init File Syntax.
+ (line 252)
+* LANG: Creating Internationalized Scripts.
+ (line 51)
+* LANG <1>: Bash Variables. (line 485)
+* LC_ALL: Bash Variables. (line 489)
+* LC_COLLATE: Bash Variables. (line 493)
+* LC_CTYPE: Bash Variables. (line 500)
+* LC_MESSAGES: Creating Internationalized Scripts.
+ (line 51)
+* LC_MESSAGES <1>: Bash Variables. (line 505)
+* LC_NUMERIC: Bash Variables. (line 509)
+* LC_TIME: Bash Variables. (line 513)
+* LINENO: Bash Variables. (line 517)
+* LINES: Bash Variables. (line 522)
+* MACHTYPE: Bash Variables. (line 528)
+* MAIL: Bourne Shell Variables.
+ (line 22)
+* MAILCHECK: Bash Variables. (line 532)
+* MAILPATH: Bourne Shell Variables.
+ (line 27)
+* MAPFILE: Bash Variables. (line 540)
+* mark-modified-lines: Readline Init File Syntax.
+ (line 282)
+* mark-symlinked-directories: Readline Init File Syntax.
+ (line 287)
+* match-hidden-files: Readline Init File Syntax.
+ (line 292)
+* menu-complete-display-prefix: Readline Init File Syntax.
+ (line 299)
+* meta-flag: Readline Init File Syntax.
+ (line 235)
+* OLDPWD: Bash Variables. (line 544)
+* OPTARG: Bourne Shell Variables.
+ (line 34)
+* OPTERR: Bash Variables. (line 547)
+* OPTIND: Bourne Shell Variables.
+ (line 38)
+* OSTYPE: Bash Variables. (line 551)
+* output-meta: Readline Init File Syntax.
+ (line 304)
+* page-completions: Readline Init File Syntax.
+ (line 312)
+* PATH: Bourne Shell Variables.
+ (line 42)
+* PIPESTATUS: Bash Variables. (line 554)
+* POSIXLY_CORRECT: Bash Variables. (line 559)
+* PPID: Bash Variables. (line 569)
+* PROMPT_COMMAND: Bash Variables. (line 573)
+* PROMPT_DIRTRIM: Bash Variables. (line 579)
+* PS0: Bash Variables. (line 585)
+* PS1: Bourne Shell Variables.
+ (line 48)
+* PS2: Bourne Shell Variables.
+ (line 53)
+* PS3: Bash Variables. (line 590)
+* PS4: Bash Variables. (line 595)
+* PWD: Bash Variables. (line 603)
+* RANDOM: Bash Variables. (line 606)
+* READLINE_ARGUMENT: Bash Variables. (line 612)
+* READLINE_LINE: Bash Variables. (line 616)
+* READLINE_MARK: Bash Variables. (line 620)
+* READLINE_POINT: Bash Variables. (line 626)
+* REPLY: Bash Variables. (line 630)
+* revert-all-at-newline: Readline Init File Syntax.
+ (line 322)
+* SECONDS: Bash Variables. (line 633)
+* SHELL: Bash Variables. (line 642)
+* SHELLOPTS: Bash Variables. (line 647)
+* SHLVL: Bash Variables. (line 656)
+* show-all-if-ambiguous: Readline Init File Syntax.
+ (line 329)
+* show-all-if-unmodified: Readline Init File Syntax.
+ (line 335)
+* show-mode-in-prompt: Readline Init File Syntax.
+ (line 344)
+* skip-completed-text: Readline Init File Syntax.
+ (line 350)
+* SRANDOM: Bash Variables. (line 661)
+* TEXTDOMAIN: Creating Internationalized Scripts.
+ (line 51)
+* TEXTDOMAINDIR: Creating Internationalized Scripts.
+ (line 51)
+* TIMEFORMAT: Bash Variables. (line 670)
+* TMOUT: Bash Variables. (line 708)
+* TMPDIR: Bash Variables. (line 720)
+* UID: Bash Variables. (line 724)
+* vi-cmd-mode-string: Readline Init File Syntax.
+ (line 363)
+* vi-ins-mode-string: Readline Init File Syntax.
+ (line 374)
+* visible-stats: Readline Init File Syntax.
+ (line 385)
+
+
+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 131)
+* 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 11)
+* backward-kill-word (M-<DEL>): Commands For Killing.
+ (line 28)
+* 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 66)
+* character-search (C-]): Miscellaneous Commands.
+ (line 42)
+* character-search-backward (M-C-]): Miscellaneous Commands.
+ (line 47)
+* clear-display (M-C-l): Commands For Moving. (line 48)
+* clear-screen (C-l): Commands For Moving. (line 53)
+* 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 69)
+* copy-forward-word (): Commands For Killing.
+ (line 74)
+* copy-region-as-kill (): Commands For Killing.
+ (line 65)
+* 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 57)
+* digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6)
+* display-shell-version (C-x C-v): Miscellaneous Commands.
+ (line 116)
+* do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands.
+ (line 14)
+* downcase-word (M-l): Commands For Text. (line 62)
+* 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)
+* fetch-history (): Commands For History.
+ (line 103)
+* 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 33)
+* forward-word (M-f): Commands For Moving. (line 18)
+* glob-complete-word (M-g): Miscellaneous Commands.
+ (line 98)
+* glob-expand-word (C-x *): Miscellaneous Commands.
+ (line 104)
+* glob-list-expansions (C-x g): Miscellaneous Commands.
+ (line 110)
+* history-and-alias-expand-line (): Miscellaneous Commands.
+ (line 134)
+* history-expand-line (M-^): Miscellaneous Commands.
+ (line 124)
+* history-search-backward (): Commands For History.
+ (line 57)
+* history-search-forward (): Commands For History.
+ (line 51)
+* history-substring-search-backward (): Commands For History.
+ (line 69)
+* history-substring-search-forward (): Commands For History.
+ (line 63)
+* insert-comment (M-#): Miscellaneous Commands.
+ (line 61)
+* insert-completions (M-*): Commands For Completion.
+ (line 22)
+* insert-last-argument (M-. or M-_): Miscellaneous Commands.
+ (line 137)
+* kill-line (C-k): Commands For Killing.
+ (line 6)
+* kill-region (): Commands For Killing.
+ (line 61)
+* kill-whole-line (): Commands For Killing.
+ (line 19)
+* kill-word (M-d): Commands For Killing.
+ (line 23)
+* magic-space (): Miscellaneous Commands.
+ (line 127)
+* 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 45)
+* non-incremental-reverse-search-history (M-p): Commands For History.
+ (line 39)
+* operate-and-get-next (C-o): Commands For History.
+ (line 96)
+* overwrite-mode (): Commands For Text. (line 70)
+* 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 57)
+* 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 37)
+* shell-backward-word (M-C-b): Commands For Moving. (line 30)
+* shell-expand-line (M-C-e): Miscellaneous Commands.
+ (line 119)
+* shell-forward-word (M-C-f): Commands For Moving. (line 26)
+* shell-kill-word (M-C-d): Commands For Killing.
+ (line 32)
+* shell-transpose-words (M-C-t): Commands For Killing.
+ (line 41)
+* skip-csi-sequence (): Miscellaneous Commands.
+ (line 52)
+* spell-correct-word (C-x s): Miscellaneous Commands.
+ (line 92)
+* start-kbd-macro (C-x (): Keyboard Macros. (line 6)
+* tilde-expand (M-&): Miscellaneous Commands.
+ (line 30)
+* transpose-chars (C-t): Commands For Text. (line 47)
+* transpose-words (M-t): Commands For Text. (line 53)
+* undo (C-_ or C-x C-u): Miscellaneous Commands.
+ (line 23)
+* universal-argument (): Numeric Arguments. (line 10)
+* unix-filename-rubout (): Commands For Killing.
+ (line 52)
+* unix-line-discard (C-u): Commands For Killing.
+ (line 16)
+* unix-word-rubout (C-w): Commands For Killing.
+ (line 48)
+* upcase-word (M-u): Commands For Text. (line 58)
+* yank (C-y): Commands For Killing.
+ (line 79)
+* yank-last-arg (M-. or M-_): Commands For History.
+ (line 84)
+* yank-nth-arg (M-C-y): Commands For History.
+ (line 75)
+* yank-pop (M-y): Commands For Killing.
+ (line 82)
+
+
+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)
+* Compatibility Level: Shell Compatibility Mode.
+ (line 6)
+* Compatibility Mode: Shell Compatibility Mode.
+ (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)
+* internationalized scripts: Creating Internationalized Scripts.
+ (line 3)
+* 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)
+* reserved words: Reserved Words. (line 6)
+* 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)
+* string translations: Creating Internationalized Scripts.
+ (line 3)
+* 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: Top896
+Node: Introduction2815
+Node: What is Bash?3028
+Node: What is a shell?4139
+Node: Definitions6674
+Node: Basic Shell Features9622
+Node: Shell Syntax10838
+Node: Shell Operation11861
+Node: Quoting13151
+Node: Escape Character14452
+Node: Single Quotes14934
+Node: Double Quotes15279
+Node: ANSI-C Quoting16554
+Node: Locale Translation17861
+Node: Creating Internationalized Scripts19169
+Node: Comments23283
+Node: Shell Commands23898
+Node: Reserved Words24833
+Node: Simple Commands25586
+Node: Pipelines26237
+Node: Lists29233
+Node: Compound Commands31025
+Node: Looping Constructs32034
+Node: Conditional Constructs34526
+Node: Command Grouping49011
+Node: Coprocesses50486
+Node: GNU Parallel53146
+Node: Shell Functions54060
+Node: Shell Parameters61942
+Node: Positional Parameters66327
+Node: Special Parameters67226
+Node: Shell Expansions70437
+Node: Brace Expansion72561
+Node: Tilde Expansion75292
+Node: Shell Parameter Expansion77910
+Node: Command Substitution96258
+Node: Arithmetic Expansion97610
+Node: Process Substitution98575
+Node: Word Splitting99692
+Node: Filename Expansion101633
+Node: Pattern Matching104379
+Node: Quote Removal109378
+Node: Redirections109670
+Node: Executing Commands119327
+Node: Simple Command Expansion119994
+Node: Command Search and Execution122101
+Node: Command Execution Environment124476
+Node: Environment127508
+Node: Exit Status129168
+Node: Signals130949
+Node: Shell Scripts134395
+Node: Shell Builtin Commands137419
+Node: Bourne Shell Builtins139454
+Node: Bash Builtins160917
+Node: Modifying Shell Behavior191770
+Node: The Set Builtin192112
+Node: The Shopt Builtin202710
+Node: Special Builtins218619
+Node: Shell Variables219595
+Node: Bourne Shell Variables220029
+Node: Bash Variables222130
+Node: Bash Features254942
+Node: Invoking Bash255952
+Node: Bash Startup Files261962
+Node: Interactive Shells267090
+Node: What is an Interactive Shell?267498
+Node: Is this Shell Interactive?268144
+Node: Interactive Shell Behavior268956
+Node: Bash Conditional Expressions272582
+Node: Shell Arithmetic277221
+Node: Aliases280162
+Node: Arrays282772
+Node: The Directory Stack289160
+Node: Directory Stack Builtins289941
+Node: Controlling the Prompt294198
+Node: The Restricted Shell297160
+Node: Bash POSIX Mode299767
+Node: Shell Compatibility Mode311682
+Node: Job Control320246
+Node: Job Control Basics320703
+Node: Job Control Builtins325702
+Node: Job Control Variables331494
+Node: Command Line Editing332647
+Node: Introduction and Notation334315
+Node: Readline Interaction335935
+Node: Readline Bare Essentials337123
+Node: Readline Movement Commands338909
+Node: Readline Killing Commands339866
+Node: Readline Arguments341784
+Node: Searching342825
+Node: Readline Init File345008
+Node: Readline Init File Syntax346266
+Node: Conditional Init Constructs369849
+Node: Sample Init File374042
+Node: Bindable Readline Commands377163
+Node: Commands For Moving378364
+Node: Commands For History380412
+Node: Commands For Text385403
+Node: Commands For Killing389049
+Node: Numeric Arguments392079
+Node: Commands For Completion393215
+Node: Keyboard Macros397403
+Node: Miscellaneous Commands398088
+Node: Readline vi Mode404030
+Node: Programmable Completion404934
+Node: Programmable Completion Builtins412711
+Node: A Programmable Completion Example423460
+Node: Using History Interactively428705
+Node: Bash History Facilities429386
+Node: Bash History Builtins432388
+Node: History Interaction437409
+Node: Event Designators441026
+Node: Word Designators442377
+Node: Modifiers444134
+Node: Installing Bash445939
+Node: Basic Installation447073
+Node: Compilers and Options450792
+Node: Compiling For Multiple Architectures451530
+Node: Installation Names453219
+Node: Specifying the System Type455325
+Node: Sharing Defaults456039
+Node: Operation Controls456709
+Node: Optional Features457664
+Node: Reporting Bugs468880
+Node: Major Differences From The Bourne Shell470152
+Node: GNU Free Documentation License486998
+Node: Indexes512172
+Node: Builtin Index512623
+Node: Reserved Word Index519447
+Node: Variable Index521892
+Node: Function Index538663
+Node: Concept Index552444
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/doc/bash.pdf b/doc/bash.pdf
new file mode 100644
index 0000000..b8f7dd6
--- /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..b6a4bbe
--- /dev/null
+++ b/doc/bash.ps
@@ -0,0 +1,10469 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.22.4
+%%CreationDate: Mon Sep 19 12:02:42 2022
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%+ font Symbol
+%%DocumentSuppliedResources: procset grops 1.22 4
+%%Pages: 87
+%%PageOrder: Ascend
+%%DocumentMedia: Default 612 792 0 () ()
+%%Orientation: Portrait
+%%EndComments
+%%BeginDefaults
+%%PageMedia: Default
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset grops 1.22 4
+%!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-2022 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 .868(If the)158 292.8 R F2<ad63>3.368 E F0 .867(option is pr\
+esent, then commands are read from the \214rst non-option ar)3.368 F
+(gument)-.18 E F3(com-)3.567 E(mand_string)158 304.8 Q F0 5.726(.I).22 G
+3.226(ft)-5.726 G .726(here are ar)-3.226 F .727(guments after the)-.18
+F F3(command_string)3.427 E F0 3.227(,t).22 G .727(he \214rst ar)-3.227
+F .727(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.51 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.2)72 768 Q
+(2022 September 19)135.955 E(1)190.115 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)143.5 165.6 Q
+(o\214le)-.45 E F0(,).18 E F2(~/.bash_lo)2.305 E(gin)-.1 E F0 2.805(,o)
+.24 G(r)-2.805 E F2(~/.pr)2.305 E(o\214le)-.45 E F0 5.305(.B).18 G 2.805
+(yd)-5.305 G(ef)-2.805 E(ault,)-.1 E F1(bash)2.805 E F0 .305
+(reads these \214les when it is in)2.805 F -.2(vo)-.4 G -.1(ke).2 G
+2.805(da).1 G(s)-2.805 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 .161(Do not read and e)144
+194.4 R -.15(xe)-.15 G .162(cute the personal initialization \214le).15
+F F2(~/.bashr)2.162 E(c)-.37 E F0 .162(if the shell is interacti)2.972 F
+-.15(ve)-.25 G 5.162(.T).15 G .162(his op-)-5.162 F(tion 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 .352(optio\
+n, whose standard input and error are both connected to terminals \(as \
+determined by)108 504 R F2(isatty)2.863 E F0 .353(\(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 .076(the \214rst one that e)108 621.6 R .076
+(xists and is readable.)-.15 F(The)5.076 E F1(\255\255nopr)2.576 E
+(o\214le)-.18 E F0 .076
+(option may be used when the shell is started to in-)2.576 F
+(hibit 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.2)72 768 Q(2022 September 19)135.955 E(2)
+190.115 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.173 E(o\214le)-.45 E F0(and)3.203 E F4(~/.pr)2.523 E(o\214le)-.45 E F0
+3.023(,i).18 G 3.024(nt)-3.023 G .524(hat order)-3.024 F 5.524(.T)-.55 G
+(he)-5.524 E F2(\255\255nopr)3.024 E(o\214le)-.18 E F0 .524
+(option may be used to inhibit this beha)3.024 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 .521
+(as when e)108 314.4 R -.15(xe)-.15 G .521
+(cuted by the historical remote shell daemon, usually).15 F F4 -.1(rs)
+3.021 G(hd).1 E F0 3.021(,o)C 3.021(rt)-3.021 G .521
+(he secure shell daemon)-3.021 F F4(sshd)3.022 E F0 5.522(.I)C(f)-5.522
+E F2(bash)108 326.4 Q F0 1.523(determines it is being run non-interacti)
+4.023 F -.15(ve)-.25 G 1.523(ly in this f).15 F 1.522
+(ashion, it reads and e)-.1 F -.15(xe)-.15 G 1.522(cutes commands from)
+.15 F F4(~/.bashr)108 338.4 Q(c)-.37 E F0 2.847(,i)C 2.847(ft)-2.847 G
+.347(hat \214le e)-2.847 F .347(xists and is readable.)-.15 F .348
+(It will not do this if in)5.347 F -.2(vo)-.4 G -.1(ke).2 G 2.848(da).1
+G(s)-2.848 E F2(sh)2.848 E F0 5.348(.T)C(he)-5.348 E F2<adad6e6f72>2.848
+E(c)-.18 E F0 .348(option may be)2.848 F .61(used to inhibit this beha)
+108 350.4 R(vior)-.2 E 3.11(,a)-.4 G .61(nd the)-3.11 F F2<adad72>3.11 E
+(c\214le)-.18 E F0 .609
+(option may be used to force another \214le to be read, b)3.11 F .609
+(ut nei-)-.2 F(ther)108 362.4 Q F4 -.1(rs)2.5 G(hd).1 E F0(nor)2.5 E F4
+(sshd)2.5 E F0(generally in)2.5 E -.2(vo)-.4 G .2 -.1(ke t).2 H
+(he shell with those options or allo).1 E 2.5(wt)-.25 G
+(hem to be speci\214ed.)-2.5 E .433(If the shell is started with the ef)
+108 379.2 R(fecti)-.25 E .733 -.15(ve u)-.25 H .433
+(ser \(group\) id not equal to the real user \(group\) id, and the).15 F
+F2<ad70>2.934 E F0(op-)2.934 E 1.124(tion is not supplied, no startup \
+\214les are read, shell functions are not inherited from the en)108
+391.2 R 1.124(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
+.313(ed when unquoted and either the \214rst w)-.15 F .314
+(ord of a command \(see)-.1 F F1 .314(SHELL GRAMMAR)2.814 F F0(belo)
+2.564 E .314(w\), the third)-.25 F -.1(wo)108 628.8 S .644(rd of a).1 F
+F2(case)3.144 E F0(or)3.144 E F2(select)3.143 E F0 .643(command \(only)
+3.143 F F2(in)3.143 E F0 .643(is v)3.143 F .643(alid\), or the third w)
+-.25 F .643(ord of a)-.1 F F2 -.25(fo)3.143 G(r).25 E F0 .643
+(command \(only)3.143 F F2(in)3.143 E F0(and)3.143 E F2(do)3.143 E F0
+(are v)108 640.8 Q(alid\):)-.25 E F2 11.295(!c)144 657.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
+669.6 R F6(SHELL GRAMMAR)72 686.4 Q F0
+(This section describes the syntax of the v)108 698.4 Q
+(arious forms of shell commands.)-.25 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(3)190.115 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/F1 10/Times-Bold@0
+SF(Simple Commands)87 84 Q F0(A)108 96 Q/F2 10/Times-Italic@0 SF .389
+(simple command)2.889 F F0 .389(is a sequence of optional v)2.889 F .388
+(ariable assignments follo)-.25 F .388(wed by)-.25 F F1(blank)2.888 E F0
+.388(-separated w)B .388(ords and)-.1 F .815
+(redirections, and terminated by a)108 108 R F2(contr)3.315 E .815
+(ol oper)-.45 F(ator)-.15 E F0 5.815(.T)C .815(he \214rst w)-5.815 F
+.816(ord speci\214es the command to be e)-.1 F -.15(xe)-.15 G(cuted,).15
+E(and is passed as ar)108 120 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(The return v)108 136.8 Q(alue of a)
+-.25 E F2(simple command)2.5 E F0(is its e)2.5 E(xit status, or 128+)
+-.15 E F2(n)A F0(if the command is terminated by signal)3.333 E F2(n)
+2.86 E F0(.).24 E F1(Pipelines)87 153.6 Q F0(A)108 165.6 Q F2(pipeline)
+2.996 E F0 .496(is a sequence of one or more commands separated by one \
+of the control operators)2.996 F F1(|)2.996 E F0(or)2.996 E F1(|&)2.996
+E F0 5.496(.T)C(he)-5.496 E(format for a pipeline is:)108 177.6 Q([)144
+194.4 Q F1(time)A F0([)2.5 E F1<ad70>A F0(]] [ ! ])A F2(command1)2.5 E
+F0 2.5([[)2.5 G F1(|)-2.5 E/F3 10/Symbol SF<ef>A F1(|&)A F0(])A F2
+(command2)2.5 E F0(... ])2.5 E .799(The standard output of)108 211.2 R
+F2(command1)3.499 E F0 .799
+(is connected via a pipe to the standard input of)3.299 F F2(command2)
+3.5 E F0 5.8(.T).02 G .8(his con-)-5.8 F .215
+(nection is performed before an)108 223.2 R 2.715(yr)-.15 G .214
+(edirections speci\214ed by the)-2.715 F F2(command1)2.914 E F0(\(see)A
+/F4 9/Times-Bold@0 SF(REDIRECTION)2.714 E F0(belo)2.464 E 2.714(w\). If)
+-.25 F F1(|&)2.714 E F0 .126(is used,)108 235.2 R F2(command1)2.626 E F0
+1.226 -.55('s s)D .126(tandard error).55 F 2.626(,i)-.4 G 2.626(na)
+-2.626 G .126(ddition to its standard output, is connected to)-2.626 F
+F2(command2)2.626 E F0 1.226 -.55('s s)D(tandard).55 E .028
+(input through the pipe; it is shorthand for)108 247.2 R F1 .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 259.2 Q 2.5(yr)-.15 G
+(edirections speci\214ed by)-2.5 E F2(command1)2.5 E F0(.)A .48
+(The return status of a pipeline is the e)108 276 R .48
+(xit status of the last command, unless the)-.15 F F1(pipefail)2.98 E F0
+.48(option is enabled.)2.98 F(If)108 288 Q F1(pipefail)2.687 E F0 .187
+(is enabled, the pipeline')2.687 F 2.687(sr)-.55 G .186
+(eturn status is the v)-2.687 F .186
+(alue of the last \(rightmost\) command to e)-.25 F .186(xit with a)-.15
+F .61(non-zero status, or zero if all commands e)108 300 R .611
+(xit successfully)-.15 F 5.611(.I)-.65 G 3.111(ft)-5.611 G .611
+(he reserv)-3.111 F .611(ed w)-.15 F(ord)-.1 E F1(!)3.111 E F0 .611
+(precedes a pipeline, the)5.611 F -.15(ex)108 312 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 324
+Q(alue.)-.25 E .298(If the)108 340.8 R F1(time)2.799 E F0(reserv)2.799 E
+.299(ed w)-.15 F .299(ord precedes a pipeline, the elapsed as well as u\
+ser and system time consumed by its)-.1 F -.15(exe)108 352.8 S .14
+(cution are reported when the pipeline terminates.).15 F(The)5.139 E F1
+<ad70>2.639 E F0 .139(option changes the output format to that spec-)
+2.639 F .302(i\214ed by POSIX.)108 364.8 R .303(When the shell is in)
+5.302 F F2 .303(posix mode)2.803 F F0 2.803(,i)C 2.803(td)-2.803 G .303
+(oes not recognize)-2.803 F F1(time)2.803 E F0 .303(as a reserv)2.803 F
+.303(ed w)-.15 F .303(ord if the ne)-.1 F(xt)-.15 E(tok)108 376.8 Q .736
+(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.235
+(wt)-.25 G(he)-3.235 E .879
+(timing information should be displayed; see the description of)108
+388.8 R F4(TIMEFORMA)3.38 E(T)-.855 E F0(under)3.13 E F1 .88(Shell V)
+3.38 F(ariables)-.92 E F0(be-)3.38 E(lo)108 400.8 Q -.65(w.)-.25 G .162
+(When the shell is in)108 417.6 R F2 .162(posix mode)2.662 F F0(,)A F1
+(time)2.662 E F0 .162(may be follo)2.662 F .161(wed by a ne)-.25 F 2.661
+(wline. In)-.25 F .161(this case, the shell displays the to-)2.661 F
+.243(tal user and system time consumed by the shell and its children.)
+108 429.6 R(The)5.243 E F4(TIMEFORMA)2.743 E(T)-.855 E F0 -.25(va)2.493
+G .243(riable may be used).25 F
+(to specify the format of the time information.)108 441.6 Q .304(Each c\
+ommand in a multi-command pipeline, where pipes are created, is e)108
+458.4 R -.15(xe)-.15 G .303(cuted in a).15 F F2(subshell)2.803 E F0
+2.803(,w)C .303(hich is a)-2.803 F .207(separate process.)108 470.4 R
+(See)5.207 E F4 .208(COMMAND EXECUTION ENVIR)2.708 F(ONMENT)-.27 E F0
+.208(for a description of subshells and a sub-)2.458 F .927(shell en)108
+482.4 R 3.427(vironment. If)-.4 F(the)3.427 E F1(lastpipe)3.427 E F0
+.927(option is enabled using the)3.427 F F1(shopt)3.427 E F0 -.2(bu)
+3.427 G .927(iltin \(see the description of).2 F F1(shopt)3.426 E F0
+(belo)108 494.4 Q(w\), the last element of a pipeline may be run by the\
+ shell process when job control is not acti)-.25 E -.15(ve)-.25 G(.).15
+E F1(Lists)87 511.2 Q F0(A)108 523.2 Q F2(list)2.849 E F0 .349(is a seq\
+uence of one or more pipelines separated by one of the operators)2.849 F
+F1(;)2.85 E F0(,)A F1(&)2.85 E F0(,)A F1(&&)2.85 E F0 2.85(,o)C(r)-2.85
+E F1(||)2.85 E F0 2.85(,a)C .35(nd option-)-2.85 F
+(ally terminated by one of)108 535.2 Q F1(;)2.5 E F0(,)A F1(&)2.5 E F0
+2.5(,o)C(r)-2.5 E F1(<newline>)2.5 E F0(.)A .961
+(Of these list operators,)108 552 R F1(&&)3.461 E F0(and)3.461 E F1(||)
+3.461 E F0(ha)3.461 E 1.261 -.15(ve e)-.2 H .961(qual precedence, follo)
+.15 F .96(wed by)-.25 F F1(;)3.46 E F0(and)3.46 E F1(&)3.46 E F0 3.46
+(,w)C .96(hich ha)-3.46 F 1.26 -.15(ve e)-.2 H .96(qual prece-).15 F
+(dence.)108 564 Q 2.5(As)108 580.8 S(equence of one or more ne)-2.5 E
+(wlines may appear in a)-.25 E F2(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 597.6 R F1(&)
+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 F2(bac)2.529 E(kgr)-.2 E(ound)-.45 E F0
+(in)2.529 E 2.678(as)108 609.6 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 .778(to as)108 621.6 R F2(async)3.278 E(hr)
+-.15 E(onous)-.45 E F0 3.278(commands. Commands)3.278 F .779
+(separated by a)3.278 F F1(;)3.279 E F0 .779(are e)3.279 F -.15(xe)-.15
+G .779(cuted sequentially; the shell w).15 F .779(aits for)-.1 F
+(each command to terminate in turn.)108 633.6 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 .172(AND and OR lists are sequences of one \
+or more pipelines separated by the)108 650.4 R F1(&&)2.671 E F0(and)
+2.671 E F1(||)2.671 E F0 .171(control operators, re-)2.671 F(specti)108
+662.4 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 F2(command1)144 679.2 Q F1(&&)
+2.5 E F2(command2)2.5 E(command2)108.2 696 Q F0(is e)2.52 E -.15(xe)-.15
+G(cuted if, and only if,).15 E F2(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
+712.8 Q F2(command1)144 729.6 Q F1(||)2.5 E F2(command2)2.5 E F0
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(4)190.115 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-Italic@0 SF(command2)108.2 84 Q F0 .434(is e)2.954 F -.15(xe)-.15
+G .434(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 .435
+(The return status of AND)5.435 F(and OR lists is the e)108 96 Q
+(xit status of the last command e)-.15 E -.15(xe)-.15 G
+(cuted in the list.).15 E/F2 10/Times-Bold@0 SF(Compound Commands)87
+112.8 Q F0(A)108 124.8 Q F1 1.054(compound command)3.554 F F0 1.054
+(is one of the follo)3.554 F 3.553(wing. In)-.25 F 1.053(most cases a)
+3.553 F F1(list)3.553 E F0 1.053(in a command')3.553 F 3.553(sd)-.55 G
+1.053(escription may be)-3.553 F 1.026
+(separated from the rest of the command by one or more ne)108 136.8 R
+1.026(wlines, and may be follo)-.25 F 1.027(wed by a ne)-.25 F 1.027
+(wline in)-.25 F(place of a semicolon.)108 148.8 Q(\()108 165.6 Q F1
+(list)A F0(\))A F1(list)144 165.6 Q F0 .215(is e)2.715 F -.15(xe)-.15 G
+.215(cuted in a subshell \(see).15 F/F3 9/Times-Bold@0 SF .215
+(COMMAND EXECUTION ENVIR)2.715 F(ONMENT)-.27 E F0(belo)2.465 E 2.714(wf)
+-.25 G .214(or a descrip-)-2.714 F .209(tion of a subshell en)144 177.6
+R 2.709(vironment\). V)-.4 F .209(ariable assignments and b)-1.11 F .209
+(uiltin commands that af)-.2 F .21(fect the shell')-.25 F(s)-.55 E(en)
+144 189.6 Q 1.069(vironment do not remain in ef)-.4 F 1.069
+(fect after the command completes.)-.25 F 1.068
+(The return status is the e)6.069 F(xit)-.15 E(status of)144 201.6 Q F1
+(list)2.5 E F0(.)A({)108 218.4 Q F1(list)2.5 E F0 2.5(;})C F1(list)144
+218.4 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 F1(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 230.4 R .715(is kno)3.215 F .715(wn as a)-.25 F F1
+(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 F1(list)
+3.214 E F0 5.714(.N)C(ote)-5.714 E .219(that unlik)144 242.4 R 2.719(et)
+-.1 G .219(he metacharacters)-2.719 F F2(\()2.719 E F0(and)2.719 E F2
+(\))2.719 E F0(,)A F2({)2.719 E F0(and)2.719 E F2(})2.719 E F0(are)2.719
+E F1 -.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 254.4 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 266.4 Q F1
+(list)2.5 E F0(by whitespace or another shell metacharacter)2.5 E(.)-.55
+E(\(\()108 283.2 Q F1 -.2(ex)C(pr).2 E(ession)-.37 E F0(\)\))A(The)144
+295.2 Q F1 -.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 307.2 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 .186(is 1.)144 319.2 R
+(The)5.186 E F1 -.2(ex)2.686 G(pr).2 E(ession)-.37 E F0(under)2.686 E
+.186(goes the same e)-.18 F .186
+(xpansions as if it were within double quotes, b)-.15 F .187(ut double)
+-.2 F(quote characters in)144 331.2 Q F1 -.2(ex)2.5 G(pr).2 E(ession)
+-.37 E F0(are not treated specially and are remo)2.5 E -.15(ve)-.15 G
+(d.).15 E F2([[)108 348 Q F1 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F2(]])
+2.5 E F0 .003(Return a status of 0 or 1 depending on the e)144 360 R
+-.25(va)-.25 G .003(luation of the conditional e).25 F(xpression)-.15 E
+F1 -.2(ex)2.503 G(pr).2 E(ession)-.37 E F0 5.003(.E)C(x-)-5.003 E .758
+(pressions are composed of the primaries described belo)144 372 R 3.259
+(wu)-.25 G(nder)-3.259 E F3(CONDITION)3.259 E .759(AL EXPRESSIONS)-.18 F
+F4(.)A F0 .065(The w)144 384 R .065(ords between the)-.1 F F2([[)2.565 E
+F0(and)2.565 E F2(]])2.565 E F0 .065(do not under)2.565 F .065(go w)-.18
+F .065(ord splitting and pathname e)-.1 F 2.565(xpansion. The)-.15 F
+(shell)2.565 E .483(performs tilde e)144 396 R .483
+(xpansion, parameter and v)-.15 F .483(ariable e)-.25 F .483
+(xpansion, arithmetic e)-.15 F .483(xpansion, command sub-)-.15 F .201
+(stitution, process substitution, and quote remo)144 408 R -.25(va)-.15
+G 2.701(lo).25 G 2.701(nt)-2.701 G .201(hose w)-2.701 F .201
+(ords \(the e)-.1 F .2(xpansions that w)-.15 F .2(ould occur)-.1 F .382
+(if the w)144 420 R .382(ords were enclosed in double quotes\).)-.1 F
+.382(Conditional operators such as)5.382 F F2<ad66>2.882 E F0 .382
+(must be unquoted)2.882 F(to be recognized as primaries.)144 432 Q
+(When used with)144 450 Q 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 the current locale.)-.15 E .503(When the)144 468
+R F2(==)3.003 E F0(and)3.002 E F2(!=)3.002 E F0 .502(operators are 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 480 R
+3.31(wu)-.25 G(nder)-3.31 E F2 -.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
+F2(ext-)3.31 E(glob)144 492 Q F0 .313(shell option were enabled.)2.814 F
+(The)5.313 E F2(=)2.813 E F0 .313(operator is equi)2.813 F -.25(va)-.25
+G .313(lent to).25 F F2(==)2.813 E F0 5.313(.I)C 2.813(ft)-5.313 G(he)
+-2.813 E F2(nocasematch)2.813 E F0 .313(shell op-)2.813 F .029
+(tion is enabled, the match is performed without re)144 504 R -.05(ga)
+-.15 G .03(rd to the case of alphabetic characters.).05 F .03(The re-)
+5.03 F .259(turn v)144 516 R .259(alue is 0 if the string matches \()
+-.25 F F2(==)A F0 2.759(\)o)C 2.759(rd)-2.759 G .259(oes not match \()
+-2.759 F F2(!=)A F0 2.759(\)t)C .259(he pattern, and 1 otherwise.)-2.759
+F(An)5.258 E(y)-.15 E(part of the pattern may be quoted to force the qu\
+oted portion to be matched as a string.)144 528 Q .243
+(An additional binary operator)144 546 R(,)-.4 E F2(=~)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 F2(==)2.743 E F0(and)2.743 E
+F2(!=)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 558 R .182(xtended re)-.15 F .181(gular e)-.15 F .181(xpression and)
+-.15 F 2.623(matched accordingly \(using the POSIX)144 570 R F1 -.37(re)
+5.124 G(gcomp)-.03 E F0(and)5.124 E F1 -.37(re)5.124 G -.1(ge)-.03 G
+(xec)-.1 E F0(interf)5.124 E 2.624(aces usually described in)-.1 F F1
+-.37(re)144 582 S -.1(ge)-.03 G(x)-.1 E F0 3.272(\(3\)\). The)B .772
+(return v)3.272 F .772
+(alue is 0 if the string matches the pattern, and 1 otherwise.)-.25 F
+.771(If the re)5.771 F(gular)-.15 E -.15(ex)144 594 S .508
+(pression is syntactically incorrect, the conditional e).15 F
+(xpression')-.15 E 3.008(sr)-.55 G .509(eturn v)-3.008 F .509
+(alue is 2.)-.25 F .509(If the)5.509 F F2(nocase-)3.009 E(match)144 606
+Q F0 1.307(shell option is enabled, the match is performed without re)
+3.807 F -.05(ga)-.15 G 1.306(rd to the case of alphabetic).05 F 2.599
+(characters. If)144 618 R(an)2.599 E 2.599(yp)-.15 G .099
+(art of the pattern is quoted, the quoted portion is matched literally)
+-2.599 F 5.1(.T)-.65 G .1(his means)-5.1 F -2.15 -.25(ev e)144 630 T
+.032(ry character in the quoted portion matches itself, instead of ha)
+.25 F .031(ving an)-.2 F 2.531(ys)-.15 G .031(pecial pattern matching)
+-2.531 F 3.041(meaning. If)144 642 R .542
+(the pattern is stored in a shell v)3.041 F .542(ariable, quoting the v)
+-.25 F .542(ariable e)-.25 F .542(xpansion forces the en-)-.15 F 1.825
+(tire pattern to be matched literally)144 654 R 6.825(.T)-.65 G 1.825
+(reat brack)-7.175 F 1.825(et e)-.1 F 1.825(xpressions in re)-.15 F
+1.825(gular e)-.15 F 1.825(xpressions carefully)-.15 F(,)-.65 E(since n\
+ormal quoting and pattern characters lose their meanings between brack)
+144 666 Q(ets.)-.1 E .838(The pattern will match if it matches an)144
+684 R 3.338(yp)-.15 G .838(art of the string.)-3.338 F .839
+(Anchor the pattern using the)5.839 F F2(^)3.339 E F0(and)3.339 E F2($)
+3.339 E F0(re)144 696 Q .847(gular e)-.15 F .846
+(xpression operators to force it to match the entire string.)-.15 F .846
+(The array v)5.846 F(ariable)-.25 E F3 -.27(BA)3.346 G(SH_RE-).27 E(MA)
+144 708 Q(TCH)-.855 E F0 .321
+(records which parts of the string matched the pattern.)2.571 F .322
+(The element of)5.322 F F3 -.27(BA)2.822 G(SH_REMA).27 E(TCH)-.855 E F0
+.583(with inde)144 720 R 3.083(x0)-.15 G .582
+(contains the portion of the string matching the entire re)-.001 F .582
+(gular e)-.15 F 3.082(xpression. Substrings)-.15 F(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(5)190.115 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 .249
+(matched by parenthesized sube)144 84 R .249(xpressions within the re)
+-.15 F .249(gular e)-.15 F .249(xpression are sa)-.15 F -.15(ve)-.2 G
+2.749(di).15 G 2.75(nt)-2.749 G .25(he remaining)-2.75 F/F1 9
+/Times-Bold@0 SF -.27(BA)144 96 S(SH_REMA).27 E(TCH)-.855 E F0 1.13
+(indices. The element of)3.38 F F1 -.27(BA)3.63 G(SH_REMA).27 E(TCH)
+-.855 E F0 1.13(with inde)3.38 F(x)-.15 E/F2 10/Times-Italic@0 SF(n)3.63
+E F0 1.13(is the portion of the)3.63 F 1.125(string matching the)144 108
+R F2(n)3.625 E F0 1.125(th parenthesized sube)B 3.625(xpression. Bash)
+-.15 F(sets)3.626 E F1 -.27(BA)3.626 G(SH_REMA).27 E(TCH)-.855 E F0
+1.126(in the global)3.376 F(scope; declaring it as a local v)144 120 Q
+(ariable will lead to une)-.25 E(xpected results.)-.15 E .786
+(Expressions may be combined using the follo)144 138 R .785
+(wing operators, listed in decreasing order of prece-)-.25 F(dence:)144
+150 Q/F3 10/Times-Bold@0 SF(\()144 168 Q F2 -.2(ex)2.5 G(pr).2 E(ession)
+-.37 E F3(\))2.5 E F0 .522(Returns the v)180 180 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 192 Q F3(!)144 204
+Q F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0 -.35(Tr)180 216 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 228 S(pr).2 E(ession1)-.37 E F3(&&)2.5 E F2 -.2(ex)2.5 G(pr).2 E
+(ession2)-.37 E F0 -.35(Tr)180 240 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 252 S(pr).2 E(ession1)-.37 E F3
+(||)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0 -.35(Tr)180 264 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 280.8
+Q F3(&&)2.676 E F0(and)2.676 E F3(||)2.676 E F0 .175(operators do not e)
+2.676 F -.25(va)-.25 G(luate).25 E F2 -.2(ex)2.675 G(pr).2 E(ession2)
+-.37 E F0 .175(if the v)2.675 F .175(alue of)-.25 F F2 -.2(ex)2.675 G
+(pr).2 E(ession1)-.37 E F0 .175(is suf)2.675 F .175(\214cient to de-)
+-.25 F(termine the return v)144 292.8 Q
+(alue of the entire conditional e)-.25 E(xpression.)-.15 E F3 -.25(fo)
+108 309.6 S(r).25 E F2(name)2.5 E F0 2.5([[)2.5 G F3(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 F3(do)A F2(list)2.5
+E F0(;)2.5 E F3(done)2.5 E F0 .423(The list of w)144 321.6 R .423
+(ords follo)-.1 F(wing)-.25 E F3(in)2.923 E F0 .423(is e)2.923 F .423
+(xpanded, generating a list of items.)-.15 F .424(The v)5.424 F(ariable)
+-.25 E F2(name)2.924 E F0 .424(is set to)2.924 F .653
+(each element of this list in turn, and)144 333.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 F3(in)3.153 E F2(wor)3.153 E(d)-.37 E F0 .653
+(is omitted, the)3.153 F F3 -.25(fo)3.153 G(r).25 E F0 .648(command e)
+144 345.6 R -.15(xe)-.15 G(cutes).15 E F2(list)3.148 E F0 .648
+(once for each positional parameter that is set \(see)3.148 F F1 -.666
+(PA)3.149 G(RAMETERS).666 E F0(belo)2.899 E(w\).)-.25 E .154
+(The return status is the e)144 357.6 R .153
+(xit status of the last command that e)-.15 F -.15(xe)-.15 G 2.653
+(cutes. If).15 F .153(the e)2.653 F .153(xpansion of the items)-.15 F
+(follo)144 369.6 Q(wing)-.25 E F3(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 F3 -.25(fo)108 386.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 F3(do)2.5 E F2
+(list)2.5 E F0(;)2.5 E F3(done)2.5 E F0 1.235(First, the arithmetic e)
+144 398.4 R(xpression)-.15 E F2 -.2(ex)3.735 G(pr1).2 E F0 1.235(is e)
+3.735 F -.25(va)-.25 G 1.236
+(luated according to the rules described belo).25 F 3.736(wu)-.25 G
+(nder)-3.736 E F1 .562(ARITHMETIC EV)144 410.4 R(ALU)-1.215 E -.855(AT)
+-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0 .562(The arithmetic e)
+5.062 F(xpression)-.15 E F2 -.2(ex)3.062 G(pr2).2 E F0 .561(is then e)
+3.061 F -.25(va)-.25 G .561(luated repeatedly until).25 F .591(it e)144
+422.4 R -.25(va)-.25 G .591(luates to zero.).25 F .592(Each time)5.591 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 .592(is e)
+3.092 F -.15(xe)-.15 G .592(cuted and the arith-).15 F .229(metic e)144
+434.4 R(xpression)-.15 E F2 -.2(ex)2.729 G(pr3).2 E F0 .229(is e)2.729 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.728(te)-2.729 G -.25(va)-2.978 G
+.228(luates to 1.).25 F .227(The return v)144 446.4 R .227
+(alue is the e)-.25 F .227(xit status of the last command in)-.15 F F2
+(list)2.728 E F0 .228(that is e)2.728 F -.15(xe)-.15 G .228(cuted, or f)
+.15 F .228(alse if an)-.1 F 2.728(yo)-.15 G 2.728(ft)-2.728 G(he)-2.728
+E -.15(ex)144 458.4 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E F3
+(select)108 475.2 Q F2(name)2.5 E F0([)2.5 E F3(in)2.5 E F2(wor)2.5 E(d)
+-.37 E F0 2.5(];)2.5 G F3(do)A F2(list)2.5 E F0(;)2.5 E F3(done)2.5 E F0
+1.358(The list of w)144 487.2 R 1.358(ords follo)-.1 F(wing)-.25 E F3
+(in)3.858 E F0 1.358(is e)3.858 F 1.357
+(xpanded, generating a list of items, and the set of e)-.15 F(xpanded)
+-.15 E -.1(wo)144 499.2 S .601(rds is printed on the standard error).1 F
+3.101(,e)-.4 G .601(ach preceded by a number)-3.101 F 5.601(.I)-.55 G
+3.101(ft)-5.601 G(he)-3.101 E F3(in)3.101 E F2(wor)3.101 E(d)-.37 E F0
+.602(is omitted, the)3.101 F .188
+(positional parameters are printed \(see)144 511.2 R F1 -.666(PA)2.688 G
+(RAMETERS).666 E F0(belo)2.438 E(w\).)-.25 E F3(select)5.188 E F0 .188
+(then displays the)2.688 F F1(PS3)2.687 E F0(prompt)2.437 E .46
+(and reads a line from the standard input.)144 523.2 R .461
+(If the line consists of a number corresponding to one of)5.46 F .141
+(the displayed w)144 535.2 R .141(ords, then the v)-.1 F .141(alue of)
+-.25 F F2(name)3.001 E F0 .141(is set to that w)2.821 F 2.641(ord. If)
+-.1 F .141(the line is empty)2.641 F 2.641(,t)-.65 G .141(he w)-2.641 F
+.141(ords and)-.1 F 1.048(prompt are displayed ag)144 547.2 R 3.548
+(ain. If)-.05 F 1.048(EOF is read, the)3.548 F F3(select)3.548 E F0
+1.048(command completes and returns 1.)3.548 F(An)6.048 E(y)-.15 E .32
+(other v)144 559.2 R .32(alue read causes)-.25 F F2(name)3.18 E F0 .32
+(to be set to null.)3 F .32(The line read is sa)5.32 F -.15(ve)-.2 G
+2.82(di).15 G 2.82(nt)-2.82 G .319(he v)-2.82 F(ariable)-.25 E F1(REPL)
+2.819 E(Y)-.828 E F4(.)A F0(The)4.819 E F2(list)144.09 571.2 Q F0 .055
+(is e)3.235 F -.15(xe)-.15 G .056(cuted after each selection until a).15
+F F3(br)2.556 E(eak)-.18 E F0 .056(command is e)2.556 F -.15(xe)-.15 G
+2.556(cuted. The).15 F -.15(ex)2.556 G .056(it status of).15 F F3
+(select)2.556 E F0(is)2.556 E(the e)144 583.2 Q
+(xit status of the last command e)-.15 E -.15(xe)-.15 G(cuted in).15 E
+F2(list)2.59 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 F3(case)108 600 Q F2(wor)2.5 E(d)-.37
+E F3(in)2.5 E F0 2.5([[)2.5 G(\(])-2.5 E F2(pattern)2.5 E F0([)2.5 E F3
+(|)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 F3(esac)2.5 E F0(A)144 612 Q F3(case)3.265 E F0 .764
+(command \214rst e)3.265 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 .764(in turn, using the)3.264 F .883
+(matching rules described under)144 624 R F3 -.1(Pa)3.384 G(tter).1 E
+3.384(nM)-.15 G(atching)-3.384 E F0(belo)3.384 E 4.684 -.65(w. T)-.25 H
+(he).65 E F2(wor)3.384 E(d)-.37 E F0 .884(is e)3.384 F .884
+(xpanded using tilde e)-.15 F(x-)-.15 E .95(pansion, parameter and v)144
+636 R .95(ariable e)-.25 F .95(xpansion, arithmetic e)-.15 F .95
+(xpansion, command substitution, process)-.15 F .18
+(substitution and quote remo)144 648 R -.25(va)-.15 G 2.681(l. Each).25
+F F2(pattern)2.681 E F0 -.15(ex)2.681 G .181(amined is e).15 F .181
+(xpanded using tilde e)-.15 F .181(xpansion, param-)-.15 F .103
+(eter and v)144 660 R .103(ariable e)-.25 F .103(xpansion, arithmetic e)
+-.15 F .103(xpansion, command substitution, process substitution, and)
+-.15 F .138(quote remo)144 672 R -.25(va)-.15 G 2.638(l. If).25 F(the)
+2.638 E F3(nocasematch)2.638 E F0 .139
+(shell option is enabled, the match is performed without re)2.638 F -.05
+(ga)-.15 G(rd).05 E .209(to the case of alphabetic characters.)144 684 R
+.209(When a match is found, the corresponding)5.209 F F2(list)2.708 E F0
+.208(is e)2.708 F -.15(xe)-.15 G 2.708(cuted. If).15 F(the)144 696 Q F3
+(;;)3.349 E F0 .849(operator is used, no subsequent matches are attempt\
+ed after the \214rst pattern match.)3.349 F(Using)5.85 E F3(;&)144 708 Q
+F0 .254(in place of)2.754 F F3(;;)2.754 E F0 .254(causes e)2.754 F -.15
+(xe)-.15 G .254(cution to continue with the).15 F F2(list)2.754 E F0
+.254(associated with the ne)2.754 F .253(xt set of patterns.)-.15 F
+(Using)144 720 Q F3(;;&)3.378 E F0 .878(in place of)3.378 F F3(;;)3.378
+E F0 .878(causes the shell to test the ne)3.378 F .878
+(xt pattern list in the statement, if an)-.15 F 2.178 -.65(y, a)-.15 H
+(nd).65 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(6)190.115 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 -.15(exe)144 84 S
+.159(cute an).15 F 2.659(ya)-.15 G(ssociated)-2.659 E/F1 10
+/Times-Italic@0 SF(list)2.659 E F0 .159
+(on a successful match, continuing the case statement e)2.659 F -.15(xe)
+-.15 G .158(cution as if the).15 F .182(pattern list had not matched.)
+144 96 R .183(The e)5.183 F .183
+(xit status is zero if no pattern matches.)-.15 F .183
+(Otherwise, it is the e)5.183 F(xit)-.15 E(status of the last command e)
+144 108 Q -.15(xe)-.15 G(cuted in).15 E F1(list)2.5 E F0(.)A/F2 10
+/Times-Bold@0 SF(if)108 124.8 Q F1(list)2.5 E F0(;)A F2(then)2.5 E F1
+(list)2.5 E F0 2.5(;[)C F2(elif)A F1(list)2.5 E F0(;)A F2(then)2.5 E F1
+(list)2.5 E F0 2.5(;].)C(.. [)-2.5 E F2(else)2.5 E F1(list)2.5 E F0 2.5
+(;])C F2<8c>A F0(The)144 136.8 Q F2(if)2.978 E F1(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 F2(then)2.978 E F1(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 F2(elif)2.977 E F1(list)2.977 E F0 1.087(is e)144 148.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 F2(then)3.587 E F1(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 160.8 R .103(Otherwise, the)5.104 F F2(else)
+2.603 E F1(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 172.8 Q -.15
+(xe)-.15 G(cuted, or zero if no condition tested true.).15 E F2(while)
+108 189.6 Q F1(list-1)2.5 E F0(;)A F2(do)2.5 E F1(list-2)2.5 E F0(;)A F2
+(done)2.5 E(until)108 201.6 Q F1(list-1)2.5 E F0(;)A F2(do)2.5 E F1
+(list-2)2.5 E F0(;)A F2(done)2.5 E F0(The)144 213.6 Q F2(while)3.45 E F0
+.95(command continuously e)3.45 F -.15(xe)-.15 G .95(cutes the list).15
+F F1(list-2)3.45 E F0 .95(as long as the last command in the list)3.45 F
+F1(list-1)144 225.6 Q F0 .205(returns an e)2.705 F .205
+(xit status of zero.)-.15 F(The)5.205 E F2(until)2.705 E F0 .205
+(command is identical to the)2.705 F F2(while)2.705 E F0 .205
+(command, e)2.705 F(xcept)-.15 E .599(that the test is ne)144 237.6 R
+-.05(ga)-.15 G(ted:).05 E F1(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 F1(list-1)3.19
+E F0 .6(returns a non-zero)3.1 F -.15(ex)144 249.6 S .205(it status.).15
+F .205(The e)5.205 F .205(xit status of the)-.15 F F2(while)2.705 E F0
+(and)2.705 E F2(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 261.6 S(cuted in).15
+E F1(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 F2(Copr)87 278.4 Q(ocesses)-.18 E F0
+(A)108 290.4 Q F1(copr)3.712 E(ocess)-.45 E F0 1.212
+(is a shell command preceded by the)3.712 F F2(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 302.4 R F2(&)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 314.4 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 syntax for a coprocess is:)
+108 331.2 Q F2(copr)144 348 Q(oc)-.18 E F0([)2.5 E F1 -.27(NA)C(ME).27 E
+F0(])A F1(command)2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ections)-.37 E
+F0(])A .598(This creates a coprocess named)108 364.8 R F1 -.27(NA)3.099
+G(ME).27 E F0(.)A F1(command)5.599 E F0 .599
+(may be either a simple command or a compound com-)3.099 F 1.4
+(mand \(see abo)108 376.8 R -.15(ve)-.15 G(\).).15 E F1 -.27(NA)6.4 G
+(ME).27 E F0 1.4(is a shell v)3.9 F 1.4(ariable name.)-.25 F(If)6.4 E F1
+-.27(NA)3.9 G(ME).27 E F0 1.4(is not supplied, the def)3.9 F 1.4
+(ault name is)-.1 F F2(CO-)3.9 E(PR)108 388.8 Q(OC)-.3 E F0(.)A
+(The recommended form to use for a coprocess is)108 405.6 Q F2(copr)144
+422.4 Q(oc)-.18 E F1 -.27(NA)2.5 G(ME).27 E F0({)2.5 E F1(command)2.5 E
+F0([)2.5 E F1 -.37(re)C(dir).37 E(ections)-.37 E F0(]; })A 1.313(This f\
+orm is recommended because simple commands result in the coprocess al)
+108 439.2 R -.1(wa)-.1 G 1.313(ys being named).1 F F2(CO-)3.813 E(PR)108
+451.2 Q(OC)-.3 E F0 2.5(,a)C(nd it is simpler to use and more complete \
+than the other compound commands.)-2.5 E(If)108 468 Q F1(command)3.062 E
+F0 .562(is a compound command,)3.062 F F1 -.27(NA)3.062 G(ME).27 E F0
+.561(is optional. The w)3.061 F .561(ord follo)-.1 F(wing)-.25 E F2
+(copr)3.061 E(oc)-.18 E F0 .561(determines whether)3.061 F .338(that w)
+108 480 R .338(ord is interpreted as a v)-.1 F .338
+(ariable name: it is interpreted as)-.25 F F1 -.27(NA)2.839 G(ME).27 E
+F0 .339(if it is not a reserv)2.839 F .339(ed w)-.15 F .339
+(ord that intro-)-.1 F 1.122(duces a compound command.)108 492 R(If)
+6.121 E F1(command)3.621 E F0 1.121(is a simple command,)3.621 F F1 -.27
+(NA)3.621 G(ME).27 E F0 1.121(is not allo)3.621 F 1.121
+(wed; this is to a)-.25 F -.2(vo)-.2 G(id).2 E(confusion between)108 504
+Q F1 -.27(NA)2.5 G(ME).27 E F0(and the \214rst w)2.5 E
+(ord of the simple command.)-.1 E .09(When the coprocess is e)108 520.8
+R -.15(xe)-.15 G .09(cuted, the shell creates an array v).15 F .09
+(ariable \(see)-.25 F F2(Arrays)2.59 E F0(belo)2.59 E .09(w\) named)-.25
+F F1 -.27(NA)2.59 G(ME).27 E F0 .09(in the)2.59 F(conte)108 532.8 Q .303
+(xt of the e)-.15 F -.15(xe)-.15 G .303(cuting shell.).15 F .302
+(The standard output of)5.302 F F1(command)3.002 E F0 .302
+(is connected via a pipe to a \214le descriptor)3.572 F .587(in the e)
+108 544.8 R -.15(xe)-.15 G .587
+(cuting shell, and that \214le descriptor is assigned to).15 F F1 -.27
+(NA)3.087 G(ME).27 E F0 3.087([0]. The)B .587(standard input of)3.087 F
+F1(command)3.287 E F0(is)3.858 E 2.029
+(connected via a pipe to a \214le descriptor in the e)108 556.8 R -.15
+(xe)-.15 G 2.029
+(cuting shell, and that \214le descriptor is assigned to).15 F F1 -.27
+(NA)108 568.8 S(ME).27 E F0 2.879([1]. This)B .379
+(pipe is established before an)2.879 F 2.879(yr)-.15 G .379
+(edirections speci\214ed by the command \(see)-2.879 F/F3 9/Times-Bold@0
+SF(REDIRECTION)2.879 E F0(belo)108 580.8 Q 3.426(w\). The)-.25 F .926
+(\214le descriptors can be utilized as ar)3.426 F .925
+(guments to shell commands and redirections using stan-)-.18 F .286
+(dard w)108 592.8 R .286(ord e)-.1 F 2.786(xpansions. Other)-.15 F .286
+(than those created to e)2.786 F -.15(xe)-.15 G .286
+(cute command and process substitutions, the \214le de-).15 F
+(scriptors are not a)108 604.8 Q -.25(va)-.2 G(ilable in subshells.).25
+E 1.676(The process ID of the shell spa)108 621.6 R 1.676(wned to e)-.15
+F -.15(xe)-.15 G 1.676(cute the coprocess is a).15 F -.25(va)-.2 G 1.676
+(ilable as the v).25 F 1.676(alue of the v)-.25 F(ariable)-.25 E F1 -.27
+(NA)108 633.6 S(ME).27 E F0 2.5(_PID. The)B F2(wait)2.5 E F0 -.2(bu)2.5
+G(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
+650.4 R F2(copr)2.836 E(oc)-.18 E F0 .336(command al)2.836 F -.1(wa)-.1
+G .336(ys returns success.).1 F
+(The return status of a coprocess is the e)108 662.4 Q(xit status of)
+-.15 E F1(command)2.5 E F0(.)A F2(Shell Function De\214nitions)87 679.2
+Q F0 2.698(As)108 691.2 S .198
+(hell function is an object that is called lik)-2.698 F 2.698(eas)-.1 G
+.198(imple command and e)-2.698 F -.15(xe)-.15 G .197
+(cutes a compound command with).15 F 2.5(an)108 703.2 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(GNU Bash 5.2)72
+768 Q(2022 September 19)135.955 E(7)190.115 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
+/Times-Italic@0 SF(fname)108 84 Q F0(\(\))2.5 E F1(compound\255command)
+2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ection)-.37 E F0(])A/F2 10
+/Times-Bold@0 SF(function)108 96 Q F1(fname)2.5 E F0([\(\)])2.5 E F1
+(compound\255command)2.5 E F0([)2.5 E F1 -.37(re)C(dir).37 E(ection)-.37
+E F0(])A .216(This de\214nes a function named)144 108 R F1(fname)2.716 E
+F0 5.217(.T)C .217(he reserv)-5.217 F .217(ed w)-.15 F(ord)-.1 E F2
+(function)2.717 E F0 .217(is optional.)2.717 F .217(If the)5.217 F F2
+(function)2.717 E F0(re-)2.717 E(serv)144 120 Q .68(ed w)-.15 F .68
+(ord is supplied, the parentheses are optional.)-.1 F(The)5.68 E F1
+(body)3.18 E F0 .68(of the function is the compound)3.18 F(command)144
+132 Q F1(compound\255command)2.784 E F0(\(see)3.354 E F2 .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 F1(list)144 144 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 F2 .044(Compound Commands)
+2.544 F F0(abo)144 156 Q -.15(ve)-.15 G 5.531(.I).15 G 3.031(ft)-5.531 G
+(he)-3.031 E F2(function)3.032 E F0(reserv)3.032 E .532(ed w)-.15 F .532
+(ord is used, b)-.1 F .532
+(ut the parentheses are not supplied, the braces are)-.2 F(recommended.)
+144 168 Q F1(compound\255command)6.254 E F0 1.254(is e)3.754 F -.15(xe)
+-.15 G 1.254(cuted whene).15 F -.15(ve)-.25 G(r).15 E F1(fname)3.753 E
+F0 1.253(is speci\214ed as the name of a)3.753 F 1.252(simple command.)
+144 180 R 1.252(When in)6.252 F F1 1.252(posix mode)3.752 F F0(,)A F1
+(fname)3.752 E F0 1.252(must be a v)3.752 F 1.252(alid shell)-.25 F F1
+(name)3.753 E F0 1.253(and may not be the)3.753 F .089
+(name of one of the POSIX)144 192 R F1 .089(special b)2.589 F(uiltins)
+-.2 E F0 5.089(.I)C 2.589(nd)-5.089 G(ef)-2.589 E .089
+(ault mode, a function name can be an)-.1 F 2.588(yu)-.15 G(nquoted)
+-2.588 E .164(shell w)144 204 R .164(ord that does not contain)-.1 F F2
+($)2.665 E F0 5.165(.A)C .465 -.15(ny r)-5.165 H .165(edirections \(see)
+.15 F/F3 9/Times-Bold@0 SF(REDIRECTION)2.665 E F0(belo)2.415 E .165
+(w\) speci\214ed when a)-.25 F .061
+(function is de\214ned are performed when the function is e)144 216 R
+-.15(xe)-.15 G 2.561(cuted. The).15 F -.15(ex)2.56 G .06
+(it status of a function de\214-).15 F .579(nition is zero unless a syn\
+tax error occurs or a readonly function with the same name already e)144
+228 R(x-)-.15 E 2.593(ists. When)144 240 R -.15(exe)2.593 G .093
+(cuted, the e).15 F .093(xit status of a function is the e)-.15 F .093
+(xit status of the last command e)-.15 F -.15(xe)-.15 G .092(cuted in)
+.15 F(the body)144 252 Q 5(.\()-.65 G(See)-5 E 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 268.8 Q F0 .982(In a non-interacti)108 280.8 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 F2(interacti)3.482 E -.1(ve)-.1 G(_comments).1
+E F0 .982(option to the)3.482 F F2(shopt)3.482 E F0 -.2(bu)108 292.8 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 F2(#)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 304.8 R
+.605(An interacti)5.605 F .905 -.15(ve s)-.25 H .605(hell without the)
+.15 F F2(interacti)3.105 E -.1(ve)-.1 G(_com-).1 E(ments)108 316.8 Q F0
+.34(option enabled does not allo)2.84 F 2.84(wc)-.25 G 2.84
+(omments. The)-2.84 F F2(interacti)2.84 E -.1(ve)-.1 G(_comments).1 E F0
+.34(option is on by def)2.84 F .34(ault in in-)-.1 F(teracti)108 328.8 Q
+.3 -.15(ve s)-.25 H(hells.).15 E F4 -.11(QU)72 345.6 S -.438(OT).11 G
+(ING).438 E F1(Quoting)108 357.6 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
+369.6 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 381.6 Q -.15
+(ve)-.25 G(nt parameter e).15 E(xpansion.)-.15 E .288(Each of the)108
+398.4 R F1(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(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 410.4 Q 1.345
+(When the command history e)108 427.2 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 F1(history e)108 439.2 Q(xpansion)-.2 E F0(character)2.5 E 2.5
+(,u)-.4 G(sually)-2.5 E F2(!)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 456 Q F1(escape c)2.69 E
+(har)-.15 E(acter)-.15 E F0 2.5(,s).73 G
+(ingle quotes, and double quotes.)-2.5 E 2.962(An)108 472.8 S .463
+(on-quoted backslash \()-2.962 F F2(\\)A F0 2.963(\)i)C 2.963(st)-2.963
+G(he)-2.963 E F1 .463(escape c)3.153 F(har)-.15 E(acter)-.15 E F0 5.463
+(.I).73 G 2.963(tp)-5.463 G(reserv)-2.963 E .463(es the literal v)-.15 F
+.463(alue of the ne)-.25 F .463(xt character that)-.15 F(follo)108 484.8
+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 F2(\\)4.053 E F0(<ne)A 1.553
+(wline> pair appears, and the backslash is not itself)-.25 F .347
+(quoted, the)108 496.8 R F2(\\)2.847 E F0(<ne)A .347
+(wline> is treated as a line continuation \(that is, it is remo)-.25 F
+-.15(ve)-.15 G 2.848(df).15 G .348(rom the input stream and ef-)-2.848 F
+(fecti)108 508.8 Q -.15(ve)-.25 G(ly ignored\).).15 E .295
+(Enclosing characters in single quotes preserv)108 525.6 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 537.6 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 554.4 R .034
+(es the literal v)-.15 F .034
+(alue of all characters within the quotes, with the)-.25 F -.15(ex)108
+566.4 S .108(ception of).15 F F2($)2.608 E F0(,)A F2<92>2.608 E F0(,)A
+F2(\\)2.608 E F0 2.608(,a)C .107(nd, when history e)-2.608 F .107
+(xpansion is enabled,)-.15 F F2(!)2.607 E F0 5.107(.W)C .107
+(hen the shell is in)-5.107 F F1 .107(posix mode)2.607 F F0 2.607(,t)C
+(he)-2.607 E F2(!)2.607 E F0 .107(has no)2.607 F .46
+(special meaning within double quotes, e)108 578.4 R -.15(ve)-.25 G 2.96
+(nw).15 G .46(hen history e)-2.96 F .46(xpansion is enabled.)-.15 F .46
+(The characters)5.46 F F2($)2.96 E F0(and)2.96 E F2<92>2.96 E F0(re-)
+2.96 E .563(tain their special meaning within double quotes.)108 590.4 R
+.562(The backslash retains its special meaning only when fol-)5.563 F
+(lo)108 602.4 Q .601(wed by one of the follo)-.25 F .602
+(wing characters:)-.25 F F2($)3.102 E F0(,)A F2<92>3.102 E F0(,)A F2(")
+3.935 E F0(,).833 E F2(\\)3.102 E F0 3.102(,o)C(r)-3.102 E F2(<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 614.4 R .131
+(If enabled, history e)5.131 F .13(xpansion will be performed unless an)
+-.15 F F2(!)2.63 E F0
+(appearing in double quotes is escaped using a backslash.)108 626.4 Q
+(The backslash preceding the)5 E F2(!)2.5 E F0(is not remo)5 E -.15(ve)
+-.15 G(d.).15 E(The special parameters)108 643.2 Q F2(*)2.5 E F0(and)2.5
+E F2(@)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 .148
+(Character sequences of the form)108 660 R F2($)2.649 E F0<08>A F1
+(string)A F0 2.649<0861>C .149(re treated as a special v)-2.649 F .149
+(ariant of single quotes.)-.25 F .149(The sequence e)5.149 F(x-)-.15 E
+.528(pands to)108 672 R F1(string)3.028 E F0 3.028(,w)C .528
+(ith backslash-escaped characters in)-3.028 F F1(string)3.027 E F0 .527
+(replaced as speci\214ed by the ANSI C standard.)3.027 F
+(Backslash escape sequences, if present, are decoded as follo)108 684 Q
+(ws:)-.25 E F2(\\a)144 696 Q F0(alert \(bell\))180 696 Q F2(\\b)144 708
+Q F0(backspace)180 708 Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955
+E(8)190.115 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/F1 10/Times-Bold@0
+SF(\\e)144 84 Q(\\E)144 96 Q F0(an escape character)180 96 Q F1(\\f)144
+108 Q F0(form feed)180 108 Q F1(\\n)144 120 Q F0(ne)180 120 Q 2.5(wl)
+-.25 G(ine)-2.5 E F1(\\r)144 132 Q F0(carriage return)180 132 Q F1(\\t)
+144 144 Q F0(horizontal tab)180 144 Q F1(\\v)144 156 Q F0 -.15(ve)180
+156 S(rtical tab).15 E F1(\\\\)144 168 Q F0(backslash)180 168 Q F1<5c08>
+144 180 Q F0(single quote)180 180 Q F1(\\")144 192 Q F0(double quote)180
+192 Q F1(\\?)144 204 Q F0(question mark)180 204 Q F1(\\)144 216 Q/F2 10
+/Times-Italic@0 SF(nnn)A F0(the eight-bit character whose v)180 216 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 F1(\\x)144 228 Q F2(HH)A F0
+(the eight-bit character whose v)180 228 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 240 Q F2(HHHH)A F0
+1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 252 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 264 Q 2.5(xd)-.15 G(igits\))-2.5 E F1
+(\\U)144 276 Q F2(HHHHHHHH)A F0 .548
+(the Unicode \(ISO/IEC 10646\) character whose v)180 288 R .547
+(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
+3.047 E(HHH)180 300 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\))
+-2.5 E F1(\\c)144 312 Q F2(x)A F0 2.5(ac)180 312 S(ontrol-)-2.5 E F2(x)A
+F0(character)2.5 E(The e)108 328.8 Q(xpanded result is single-quoted, a\
+s if the dollar sign had not been present.)-.15 E 2.64(Ad)108 345.6 S
+.14(ouble-quoted string preceded by a dollar sign \()-2.64 F F1($)A F0
+(")A F2(string)A F0 .14
+("\) will cause the string to be translated according)B .785
+(to the current locale.)108 357.6 R(The)5.785 E F2 -.1(ge)3.284 G(tte).1
+E(xt)-.2 E F0 .784
+(infrastructure performs the lookup and translation, using the)3.284 F
+F1(LC_MES-)3.284 E(SA)108 369.6 Q(GES)-.55 E F0(,)A F1(TEXTDOMAINDIR)
+2.76 E F0 2.76(,a)C(nd)-2.76 E F1(TEXTDOMAIN)2.76 E F0 .261(shell v)
+2.761 F 2.761(ariables. If)-.25 F .261(the current locale is)2.761 F F1
+(C)2.761 E F0(or)2.761 E F1(POSIX)2.761 E F0(,)A .792
+(if there are no translations a)108 381.6 R -.25(va)-.2 G .791(ilable, \
+or if the string is not translated, the dollar sign is ignored.).25 F
+.791(This is a)5.791 F .534
+(form of double quoting, so the string remains double-quoted by def)108
+393.6 R .535(ault, whether or not it is translated and)-.1 F 2.798
+(replaced. If)108 405.6 R(the)2.798 E F1(noexpand_translation)2.797 E F0
+.297(option is enabled using the)2.797 F F1(shopt)2.797 E F0 -.2(bu)
+2.797 G .297(iltin, translated strings are sin-).2 F 2.044
+(gle-quoted instead of double-quoted.)108 417.6 R 2.044
+(See the description of)7.044 F F1(shopt)4.545 E F0(belo)4.545 E 4.545
+(wu)-.25 G(nder)-4.545 E/F3 9/Times-Bold@0 SF(SHELL)4.545 E/F4 9
+/Times-Roman@0 SF -.09(BU)C(IL).09 E(TIN)-.828 E F3(COM-)A(MANDS)108
+429.6 Q F4(.)A/F5 10.95/Times-Bold@0 SF -.81(PA)72 446.4 S(RAMETERS).81
+E F0(A)108 458.4 Q F2(par)4.575 E(ameter)-.15 E F0 .825
+(is an entity that stores v)4.055 F 3.325(alues. It)-.25 F .825
+(can be a)3.325 F F2(name)3.684 E F0 3.324(,an).18 G(umber)-3.324 E
+3.324(,o)-.4 G 3.324(ro)-3.324 G .824(ne of the special characters)
+-3.324 F .801(listed belo)108 470.4 R 3.301(wu)-.25 G(nder)-3.301 E F1
+.801(Special P)3.301 F(arameters)-.1 E F0 5.802(.A)C F2(variable)-2.21 E
+F0 .802(is a parameter denoted by a)3.482 F F2(name)3.662 E F0 5.802(.A)
+.18 G -.25(va)-2.5 G .802(riable has a).25 F F2(value)108 482.4 Q F0
+.369(and zero or more)2.869 F F2(attrib)2.869 E(utes)-.2 E F0 5.369(.A)C
+(ttrib)-5.369 E .369(utes are assigned using the)-.2 F F1(declar)2.868 E
+(e)-.18 E F0 -.2(bu)2.868 G .368(iltin command \(see).2 F F1(declar)
+2.868 E(e)-.18 E F0(belo)108 494.4 Q 2.5(wi)-.25 G(n)-2.5 E F3(SHELL B)
+2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F4(\).)A F0 2.754(Ap)108 511.2 S
+.254(arameter is set if it has been assigned a v)-2.754 F 2.754
+(alue. The)-.25 F .254(null string is a v)2.754 F .255(alid v)-.25 F
+2.755(alue. Once)-.25 F 2.755(av)2.755 G .255(ariable is set, it)-3.005
+F(may be unset only by using the)108 523.2 Q F1(unset)2.5 E F0 -.2(bu)
+2.5 G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)
+-.828 E F0(belo)2.25 E(w\).)-.25 E(A)108 540 Q F2(variable)2.79 E F0
+(may be assigned to by a statement of the form)2.68 E F2(name)144 556.8
+Q F0(=[)A F2(value)A F0(])A(If)108 573.6 Q F2(value)3.023 E F0 .233
+(is not gi)2.913 F -.15(ve)-.25 G .233(n, the v).15 F .232
+(ariable is assigned the null string.)-.25 F(All)5.232 E F2(values)3.022
+E F0(under)3.002 E .232(go tilde e)-.18 F .232(xpansion, parameter)-.15
+F .515(and v)108 585.6 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 F3(EXP)3.015 E(ANSION)-.666 E F0(belo)108 597.6 Q 2.699
+(w\). If)-.25 F .199(the v)2.699 F .199(ariable has its)-.25 F F1
+(integer)2.698 E F0(attrib)2.698 E .198(ute set, then)-.2 F F2(value)
+2.988 E F0 .198(is e)2.878 F -.25(va)-.25 G .198
+(luated as an arithmetic e).25 F .198(xpression e)-.15 F -.15(ve)-.25 G
+(n).15 E .745(if the $\(\(...\)\) e)108 609.6 R .745
+(xpansion is not used \(see)-.15 F F1 .745(Arithmetic Expansion)3.245 F
+F0(belo)3.245 E 3.246(w\). W)-.25 F .746(ord splitting and pathname e)
+-.8 F(x-)-.15 E 1.364(pansion are not performed.)108 621.6 R 1.364
+(Assignment statements may also appear as ar)6.364 F 1.363
+(guments to the)-.18 F F1(alias)3.863 E F0(,)A F1(declar)3.863 E(e)-.18
+E F0(,)A F1(typeset)108 633.6 Q F0(,)A F1(export)3.964 E F0(,)A F1 -.18
+(re)3.964 G(adonly).18 E F0 3.964(,a)C(nd)-3.964 E F1(local)3.964 E F0
+-.2(bu)3.964 G 1.464(iltin commands \().2 F F2(declar)A(ation)-.15 E F0
+3.964(commands\). When)3.964 F(in)3.964 E F2 1.465(posix mode)3.965 F F0
+(,)A 1.142(these b)108 645.6 R 1.142
+(uiltins may appear in a command after one or more instances of the)-.2
+F F1(command)3.641 E F0 -.2(bu)3.641 G 1.141(iltin and retain).2 F
+(these assignment statement properties.)108 657.6 Q .376(In the conte)
+108 674.4 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 686.4 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 698.4 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 F2(declar)A(ation)-.15 E
+F0 2.664(commands\). When)2.664 F .164(+= is)2.664 F .132
+(applied to a v)108 710.4 R .132(ariable for which the)-.25 F F1
+(integer)2.632 E F0(attrib)2.632 E .132(ute has been set,)-.2 F F2
+(value)2.632 E F0 .131(is e)2.631 F -.25(va)-.25 G .131
+(luated as an arithmetic e).25 F(xpres-)-.15 E 1.226
+(sion and added to the v)108 722.4 R(ariable')-.25 E 3.726(sc)-.55 G
+1.227(urrent v)-3.726 F 1.227(alue, which is also e)-.25 F -.25(va)-.25
+G 3.727(luated. When).25 F 1.227(+= is applied to an array)3.727 F
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(9)190.115 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 -.25(va)108 84 S
+.115(riable using compound assignment \(see).25 F/F1 10/Times-Bold@0 SF
+(Arrays)2.615 E F0(belo)2.615 E .115(w\), the v)-.25 F(ariable')-.25 E
+2.615(sv)-.55 G .114(alue is not unset \(as it is when us-)-2.865 F .387
+(ing =\), and ne)108 96 R 2.887(wv)-.25 G .388
+(alues are appended to the array be)-3.137 F .388
+(ginning at one greater than the array')-.15 F 2.888(sm)-.55 G .388
+(aximum inde)-2.888 F(x)-.15 E 1.597(\(for inde)108 108 R -.15(xe)-.15 G
+4.097(da).15 G 1.596(rrays\) or added as additional k)-4.097 F -.15(ey)
+-.1 G<ad76>.15 E 1.596(alue pairs in an associati)-.25 F 1.896 -.15
+(ve a)-.25 H(rray).15 E 6.596(.W)-.65 G 1.596(hen applied to a)-6.596 F
+(string-v)108 120 Q(alued v)-.25 E(ariable,)-.25 E/F2 10/Times-Italic@0
+SF(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 136.8 S .882
+(ariable can be assigned the)-3.632 F F2(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 148.8 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 F2(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 2.918(able. This)108 160.8 R
+(allo)2.918 E .418(ws v)-.25 F .418
+(ariables to be manipulated indirectly)-.25 F 5.419(.W)-.65 G(hene)
+-5.419 E -.15(ve)-.25 G 2.919(rt).15 G .419(he nameref v)-2.919 F .419
+(ariable is referenced, as-)-.25 F .133
+(signed to, unset, or has its attrib)108 172.8 R .132
+(utes modi\214ed \(other than using or changing the)-.2 F F2(namer)2.632
+E(ef)-.37 E F0(attrib)2.632 E .132(ute itself\), the)-.2 F 1.356
+(operation is actually performed on the v)108 184.8 R 1.357
+(ariable speci\214ed by the nameref v)-.25 F(ariable')-.25 E 3.857(sv)
+-.55 G 3.857(alue. A)-4.107 F 1.357(nameref is)3.857 F .972
+(commonly used within shell functions to refer to a v)108 196.8 R .971
+(ariable whose name is passed as an ar)-.25 F .971(gument to the)-.18 F
+2.5(function. F)108 208.8 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/F3 10/Courier@0 SF(declare -n ref=$1)144 226.8 Q
+F0 .302(inside the function creates a nameref v)108 244.8 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 256.8 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 268.8 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 280.8 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 292.8 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
+304.8 Q -.15(ve)-.25 G 3.032(nt).15 G(he)-3.032 E F1(namer)3.032 E(ef)
+-.18 E F0(attrib)3.032 E 3.032(ute. Ho)-.2 F(we)-.25 E -.15(ve)-.25 G
+1.332 -.4(r, n).15 H .532(ameref v).4 F .531
+(ariables can reference array v)-.25 F .531(ariables and subscripted ar)
+-.25 F(-)-.2 E .533(ray v)108 316.8 R 3.033(ariables. Namerefs)-.25 F
+.533(can be unset using the)3.033 F F1<ad6e>3.033 E F0 .533
+(option to the)3.033 F F1(unset)3.033 E F0 -.2(bu)3.034 G 3.034
+(iltin. Otherwise,).2 F(if)3.034 E F1(unset)3.034 E F0 .534(is e)3.034 F
+-.15(xe)-.15 G(-).15 E .443(cuted with the name of a nameref v)108 328.8
+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 340.8 Q F1 -.2(Po)87 357.6 S(sitional P).2 E
+(arameters)-.1 E F0(A)108 369.6 Q F2 .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 381.6 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 393.6 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(positional parameters are temporarily replaced when a shel\
+l function is e)108 405.6 Q -.15(xe)-.15 G(cuted \(see).15 E/F4 9
+/Times-Bold@0 SF(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E 1.404(When \
+a positional parameter consisting of more than a single digit is e)108
+422.4 R 1.403(xpanded, it must be enclosed in)-.15 F(braces \(see)108
+434.4 Q F4(EXP)2.5 E(ANSION)-.666 E F0(belo)2.25 E(w\).)-.25 E F1
+(Special P)87 451.2 Q(arameters)-.1 E F0 1.674(The shell treats se)108
+463.2 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 475.2 Q(wed.)-.25 E F1(*)108 487.2 Q F0
+.224(Expands to the positional parameters, starting from one.)144 487.2
+R .223(When the e)5.224 F .223(xpansion is not within double)-.15 F .662
+(quotes, each positional parameter e)144 499.2 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 511.2 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 523.2 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 535.2 R F4(IFS)3.39 E F0 .89
+(special v)3.14 F 3.39(ariable. That)-.25 F .89(is, ")3.39 F F1($*)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
+F1($1)A F2(c)A F1($2)A F2(c)A F1(...)A F0(",)A(where)144 547.2 Q F2(c)
+3.532 E F0 .832(is the \214rst character of the v)3.642 F .832
+(alue of the)-.25 F F4(IFS)3.332 E F0 -.25(va)3.082 G 3.332(riable. If)
+.25 F F4(IFS)3.332 E F0 .833(is unset, the parameters are)3.082 F
+(separated by spaces.)144 559.2 Q(If)5 E F4(IFS)2.5 E F0
+(is null, the parameters are joined without interv)2.25 E
+(ening separators.)-.15 E F1(@)108 571.2 Q F0 .722
+(Expands to the positional parameters, starting from one.)144 571.2 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 583.2 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 595.2 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 607.2 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 619.2 R 1.091
+(xpands to a separate w)-.15 F 3.59(ord. That)-.1 F 1.09(is, ")3.59 F F1
+($@)A F0 3.59("i)C(s)-3.59 E(equi)144 631.2 Q -.25(va)-.25 G .412
+(lent to ").25 F F1($1)A F0 2.912("")C F1($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
+643.2 R .379(ginning part of the original w)-.15 F .379(ord, and the e)
+-.1 F .379(xpansion of the)-.15 F .771
+(last parameter is joined with the last part of the original w)144 655.2
+R 3.271(ord. When)-.1 F .772(there are no positional pa-)3.271 F
+(rameters, ")144 667.2 Q F1($@)A F0 2.5("a)C(nd)-2.5 E F1($@)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 F1(#)108 679.2 Q F0
+(Expands to the number of positional parameters in decimal.)144 679.2 Q
+F1(?)108 691.2 Q F0(Expands to the e)144 691.2 Q
+(xit status of the most recently e)-.15 E -.15(xe)-.15 G(cuted fore).15
+E(ground pipeline.)-.15 E F1<ad>108 703.2 Q F0 .882
+(Expands to the current option \215ags as speci\214ed upon in)144 703.2
+R -.2(vo)-.4 G .881(cation, by the).2 F F1(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 715.2 Q F1<ad69>2.5 E F0(option\).)2.5 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(10)185.115 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($)108 84 Q F0 .839
+(Expands to the process ID of the shell. In a subshell, it e)144 84 R
+.839(xpands to the process ID of the current)-.15 F
+(shell, not the subshell.)144 96 Q F1(!)108 108 Q F0 .499(Expands to th\
+e process ID of the job most recently placed into the background, wheth\
+er e)144 108 R -.15(xe)-.15 G(cuted).15 E
+(as an asynchronous command or using the)144 120 Q F1(bg)2.5 E F0 -.2
+(bu)2.5 G(iltin \(see).2 E/F2 9/Times-Bold@0 SF(JOB CONTR)2.5 E(OL)-.27
+E F0(belo)2.25 E(w\).)-.25 E F1(0)108 132 Q F0 .886
+(Expands to the name of the shell or shell script.)144 132 R .886
+(This is set at shell initialization.)5.886 F(If)5.887 E F1(bash)3.387 E
+F0 .887(is in-)3.387 F -.2(vo)144 144 S -.1(ke).2 G 2.668(dw).1 G .168
+(ith a \214le of commands,)-2.668 F F1($0)2.668 E F0 .167
+(is set to the name of that \214le.)2.667 F(If)5.167 E F1(bash)2.667 E
+F0 .167(is started with the)2.667 F F1<ad63>2.667 E F0(op-)2.667 E .895
+(tion, then)144 156 R F1($0)3.395 E F0 .895(is set to the \214rst ar)
+3.395 F .895(gument after the string to be e)-.18 F -.15(xe)-.15 G .896
+(cuted, if one is present.).15 F(Other)5.896 E(-)-.2 E
+(wise, it is set to the \214lename used to in)144 168 Q -.2(vo)-.4 G -.1
+(ke).2 G F1(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 F1(Shell V)
+87 184.8 Q(ariables)-.92 E F0(The follo)108 196.8 Q(wing v)-.25 E
+(ariables are set by the shell:)-.25 E F1(_)108 213.6 Q F0 1.526
+(At shell startup, set to the pathname used to in)144 213.6 R -.2(vo)-.4
+G 1.725 -.1(ke t).2 H 1.525(he shell or shell script being e).1 F -.15
+(xe)-.15 G 1.525(cuted as).15 F .173(passed in the en)144 225.6 R .173
+(vironment or ar)-.4 F .173(gument list.)-.18 F(Subsequently)5.173 E
+2.673(,e)-.65 G .173(xpands to the last ar)-2.823 F .174
+(gument to the pre-)-.18 F .337(vious simple command e)144 237.6 R -.15
+(xe)-.15 G .337(cuted in the fore).15 F .336(ground, after e)-.15 F
+2.836(xpansion. Also)-.15 F .336(set to the full pathname)2.836 F .365
+(used to in)144 249.6 R -.2(vo)-.4 G .565 -.1(ke e).2 H .365
+(ach command e).1 F -.15(xe)-.15 G .366(cuted and placed in the en).15 F
+.366(vironment e)-.4 F .366(xported to that command.)-.15 F(When checki\
+ng mail, this parameter holds the name of the mail \214le currently bei\
+ng check)144 261.6 Q(ed.)-.1 E F1 -.3(BA)108 273.6 S(SH).3 E F0
+(Expands to the full \214lename used to in)144 273.6 Q -.2(vo)-.4 G .2
+-.1(ke t).2 H(his instance of).1 E F1(bash)2.5 E F0(.)A F1 -.3(BA)108
+285.6 S(SHOPTS).3 E F0 2.549(Ac)144 297.6 S .049
+(olon-separated list of enabled shell options.)-2.549 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 F1<ad73>2.548 E F0 .115(option to the)144 309.6 R
+F1(shopt)2.616 E F0 -.2(bu)2.616 G .116(iltin command \(see).2 F F2 .116
+(SHELL B)2.616 F(UIL)-.09 E .116(TIN COMMANDS)-.828 F F0(belo)2.366 E
+2.616(w\). The)-.25 F .116(options ap-)2.616 F 1.067(pearing in)144
+321.6 R F2 -.27(BA)3.567 G(SHOPTS).27 E F0 1.067(are those reported as)
+3.317 F/F3 10/Times-Italic@0 SF(on)3.797 E F0(by)3.807 E F1(shopt)3.567
+E F0 6.066(.I)C 3.566(ft)-6.066 G 1.066(his v)-3.566 F 1.066
+(ariable is in the en)-.25 F(vironment)-.4 E(when)144 333.6 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 345.6 Q(ariable is read-only)-.25 E(.)-.65 E F1 -.3(BA)108
+357.6 S(SHPID).3 E F0 .188(Expands to the process ID of the current)144
+369.6 R F1(bash)2.688 E F0 2.687(process. This)2.687 F(dif)2.687 E .187
+(fers from)-.25 F F1($$)2.687 E F0 .187(under certain circum-)2.687 F
+.548(stances, such as subshells that do not require)144 381.6 R F1(bash)
+3.048 E F0 .548(to be re-initialized.)3.048 F .549(Assignments to)5.549
+F F2 -.27(BA)3.049 G(SHPID).27 E F0(ha)144 393.6 Q .3 -.15(ve n)-.2 H
+2.5(oe).15 G -.25(ff)-2.5 G 2.5(ect. If).25 F F1 -.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 F1 -.3(BA)108 405.6 S(SH_ALIASES).3 E F0 1.195(An associati)144
+417.6 R 1.495 -.15(ve a)-.25 H 1.195(rray v).15 F 1.195(ariable whose m\
+embers correspond to the internal list of aliases as main-)-.25 F .16
+(tained by the)144 429.6 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 441.6 R
+-.15(ve)-.15 G 7.003(df).15 G 4.503(rom the alias list.)-7.003 F(If)
+9.502 E F1 -.3(BA)144 453.6 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 465.6 S(SH_ARGC).3 E F0 .934(An array v)144 477.6 R
+.934(ariable whose v)-.25 F .934
+(alues are the number of parameters in each frame of the current)-.25 F
+F1(bash)3.435 E F0 -.15(exe)144 489.6 S .535(cution call stack.).15 F
+.535(The number of parameters to the current subroutine \(shell functio\
+n or script)5.535 F -.15(exe)144 501.6 S .141(cuted with).15 F F1(.)
+2.641 E F0(or)2.641 E F1(sour)2.641 E(ce)-.18 E F0 2.641(\)i)C 2.641(sa)
+-2.641 G 2.641(tt)-2.641 G .142(he top of the stack.)-2.641 F .142
+(When a subroutine is e)5.142 F -.15(xe)-.15 G .142
+(cuted, the number of).15 F 1.265(parameters passed is pushed onto)144
+513.6 R F2 -.27(BA)3.765 G(SH_ARGC).27 E/F4 9/Times-Roman@0 SF(.)A F0
+1.265(The shell sets)5.765 F F2 -.27(BA)3.765 G(SH_ARGC).27 E F0 1.265
+(only when in e)3.515 F(x-)-.15 E .947(tended deb)144 525.6 R .947
+(ugging mode \(see the description of the)-.2 F F1(extdeb)3.447 E(ug)-.2
+E F0 .947(option to the)3.447 F F1(shopt)3.447 E F0 -.2(bu)3.448 G .948
+(iltin belo).2 F(w\).)-.25 E(Setting)144 537.6 Q F1(extdeb)3.363 E(ug)
+-.2 E F0 .863(after the shell has started to e)3.363 F -.15(xe)-.15 G
+.862(cute a script, or referencing this v).15 F .862(ariable when)-.25 F
+F1(extdeb)144 549.6 Q(ug)-.2 E F0
+(is not set, may result in inconsistent v)2.5 E(alues.)-.25 E F1 -.3(BA)
+108 561.6 S(SH_ARGV).3 E F0 .206(An array v)144 573.6 R .206
+(ariable containing all of the parameters in the current)-.25 F F1(bash)
+2.706 E F0 -.15(exe)2.706 G .207(cution call stack.).15 F .207
+(The \214-)5.207 F .567(nal parameter of the last subroutine call is at\
+ the top of the stack; the \214rst parameter of the initial)144 585.6 R
+1.424(call is at the bottom.)144 597.6 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
+609.6 S(SH_ARGV).27 E F4(.)A F0 .854(The shell sets)5.354 F F2 -.27(BA)
+3.354 G(SH_ARGV).27 E F0 .853(only when in e)3.104 F .853(xtended deb)
+-.15 F .853(ugging mode \(see the de-)-.2 F .475(scription of the)144
+621.6 R F1(extdeb)2.975 E(ug)-.2 E F0 .475(option to the)2.975 F F1
+(shopt)2.975 E F0 -.2(bu)2.975 G .475(iltin belo).2 F 2.975
+(w\). Setting)-.25 F F1(extdeb)2.976 E(ug)-.2 E F0 .476
+(after the shell has)2.976 F .45(started to e)144 633.6 R -.15(xe)-.15 G
+.45(cute a script, or referencing this v).15 F .45(ariable when)-.25 F
+F1(extdeb)2.95 E(ug)-.2 E F0 .45(is not set, may result in in-)2.95 F
+(consistent v)144 645.6 Q(alues.)-.25 E F1 -.3(BA)108 657.6 S(SH_ARGV0)
+.3 E F0 .25(When referenced, this v)144 669.6 R .25(ariable e)-.25 F
+.251(xpands to the name of the shell or shell script \(identical to)-.15
+F F1($0)2.751 E F0 2.751(;s)C(ee)-2.751 E .041
+(the description of special parameter 0 abo)144 681.6 R -.15(ve)-.15 G
+2.541(\). Assignment).15 F(to)2.541 E F1 -.3(BA)2.541 G(SH_ARGV0).3 E F0
+.04(causes the v)2.541 F .04(alue as-)-.25 F .216
+(signed to also be assigned to)144 693.6 R F1($0)2.716 E F0 5.216(.I)C
+(f)-5.216 E F1 -.3(BA)2.716 G(SH_ARGV0).3 E F0 .216
+(is unset, it loses its special properties, e)2.716 F -.15(ve)-.25 G
+2.716(ni).15 G(f)-2.716 E(it is subsequently reset.)144 705.6 Q
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(11)185.115 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_CMDS).3 E F0 .668(An associati)144 96 R .968 -.15
+(ve a)-.25 H .668(rray v).15 F .668(ariable whose members correspond to\
+ the internal hash table of commands)-.25 F .195(as maintained by the)
+144 108 R F1(hash)2.695 E F0 -.2(bu)2.695 G 2.695(iltin. Elements).2 F
+.196(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 doe\
+s not cause command names to be remo)144 120 R -.15(ve)-.15 G 3.352(df)
+.15 G .852(rom the hash)-3.352 F 2.5(table. If)144 132 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 144 S(SH_COMMAND).3 E F0 1.242
+(The command currently being e)144 156 R -.15(xe)-.15 G 1.243
+(cuted or about to be e).15 F -.15(xe)-.15 G 1.243
+(cuted, unless the shell is e).15 F -.15(xe)-.15 G 1.243(cuting a).15 F
+.263(command as the result of a trap, in which case it is the command e)
+144 168 R -.15(xe)-.15 G .262(cuting at the time of the trap.).15 F(If)
+144 180 Q F1 -.3(BA)2.5 G(SH_COMMAND).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 192 S(SH_EXECUTION_STRING).3 E F0(The command ar)
+144 204 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 216 S(SH_LINENO).3 E F0 .692
+(An array v)144 228 R .692(ariable whose members are the line numbers i\
+n source \214les where each corresponding)-.25 F .97(member of)144 240 R
+/F2 9/Times-Bold@0 SF(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/F3 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 252 R F1
+(${B)A(ASH_SOURCE[)-.3 E F3($i+1)A F1(]})A F0 17.171(\)w)C(here)-17.171
+E F1(${FUNCN)17.172 E(AME[)-.2 E F3($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 264 Q(ASH_LINENO[)
+-.3 E F3($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
+276 Q(.)-.55 E F1 -.3(BA)108 288 S(SH_LO).3 E(AD)-.4 E(ABLES_P)-.35 E
+-.95(AT)-.74 G(H).95 E F0 4.07(Ac)144 300 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 312 Q F1(enable)2.5 E F0(command.)
+2.5 E F1 -.3(BA)108 324 S(SH_REMA).3 E(TCH)-.95 E F0 .006(An array v)144
+336 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 348 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 360 R(x)-.15 E
+F3(n)3.498 E F0 .997(is the portion of the string matching the)3.498 F
+F3(n)3.497 E F0 .997(th parenthesized sube)B(xpres-)-.15 E(sion.)144 372
+Q F1 -.3(BA)108 384 S(SH_SOURCE).3 E F0 .125(An array v)144 396 R .125(\
+ariable whose members are the source \214lenames where the correspondin\
+g shell function)-.25 F .781(names in the)144 408 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 F3($i)A F1(]})A
+F0(is)3.28 E(de\214ned in the \214le)144 420 Q F1(${B)2.5 E(ASH_SOURCE[)
+-.3 E F3($i)A F1(]})A F0(and called from)2.5 E F1(${B)2.5 E(ASH_SOURCE[)
+-.3 E F3($i+1)A F1(]})A F0(.)A F1 -.3(BA)108 432 S(SH_SUBSHELL).3 E F0
+.296(Incremented by one within each subshell or subshell en)144 444 R
+.296(vironment when the shell be)-.4 F .297(gins e)-.15 F -.15(xe)-.15 G
+(cuting).15 E 1.277(in that en)144 456 R 3.777(vironment. The)-.4 F
+1.277(initial v)3.777 F 1.277(alue is 0.)-.25 F(If)6.277 E F1 -.3(BA)
+3.777 G(SH_SUBSHELL).3 E F0 1.276(is unset, it loses its special)3.777 F
+(properties, e)144 468 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 -.3(BA)108 480 S
+(SH_VERSINFO).3 E F0 2.644(Ar)144 492 S .144(eadonly array v)-2.644 F
+.144(ariable whose members hold v)-.25 F .144
+(ersion information for this instance of)-.15 F F1(bash)2.645 E F0 5.145
+(.T)C(he)-5.145 E -.25(va)144 504 S
+(lues assigned to the array members are as follo).25 E(ws:)-.25 E F1 -.3
+(BA)144 522 S(SH_VERSINFO[).3 E F0(0)A F1(])A F0(The major v)264 522 Q
+(ersion number \(the)-.15 E F3 -.37(re)2.5 G(lease).37 E F0(\).)A F1 -.3
+(BA)144 534 S(SH_VERSINFO[).3 E F0(1)A F1(])A F0(The minor v)264 534 Q
+(ersion number \(the)-.15 E F3(ver)2.5 E(sion)-.1 E F0(\).)A F1 -.3(BA)
+144 546 S(SH_VERSINFO[).3 E F0(2)A F1(])A F0(The patch le)264 546 Q -.15
+(ve)-.25 G(l.).15 E F1 -.3(BA)144 558 S(SH_VERSINFO[).3 E F0(3)A F1(])A
+F0(The b)264 558 Q(uild v)-.2 E(ersion.)-.15 E F1 -.3(BA)144 570 S
+(SH_VERSINFO[).3 E F0(4)A F1(])A F0(The release status \(e.g.,)264 570 Q
+F3(beta1)2.5 E F0(\).)A F1 -.3(BA)144 582 S(SH_VERSINFO[).3 E F0(5)A F1
+(])A F0(The v)264 582 Q(alue of)-.25 E F2(MA)2.5 E(CHTYPE)-.495 E/F4 9
+/Times-Roman@0 SF(.)A F1 -.3(BA)108 594 S(SH_VERSION).3 E F0
+(Expands to a string describing the v)144 606 Q
+(ersion of this instance of)-.15 E F1(bash)2.5 E F0(.)A F1(COMP_CW)108
+618 Q(ORD)-.1 E F0 .397(An inde)144 630 R 2.897(xi)-.15 G(nto)-2.897 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 .396(This v)5.396 F
+(ari-)-.25 E 1.18(able is a)144 642 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.181(he programmable completion f)-3.681 F
+1.181(acilities \(see)-.1 F F1(Pr)144 654 Q(ogrammable Completion)-.18 E
+F0(belo)2.5 E(w\).)-.25 E F1(COMP_KEY)108 666 Q F0(The k)144 678 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 690 Q F0 1.208
+(The current command line.)144 702 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.207(xternal com-)-.15 F
+1.037(mands in)144 714 R -.2(vo)-.4 G -.1(ke).2 G 3.537(db).1 G 3.537
+(yt)-3.537 G 1.037(he programmable completion f)-3.537 F 1.037
+(acilities \(see)-.1 F F1(Pr)3.537 E 1.037(ogrammable Completion)-.18 F
+F0(be-)3.537 E(lo)144 726 Q(w\).)-.25 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(12)185.115 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/F1 10/Times-Bold@0
+SF(COMP_POINT)108 84 Q F0 .667(The inde)144 96 R 3.167(xo)-.15 G 3.167
+(ft)-3.167 G .666(he current cursor position relati)-3.167 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 .666(If the)5.666 F .534
+(current cursor position is at the end of the current command, the v)144
+108 R .535(alue of this v)-.25 F .535(ariable is equal to)-.25 F F1
+(${#COMP_LINE})144 120 Q F0 5.705(.T)C .705(his v)-5.705 F .704
+(ariable is a)-.25 F -.25(va)-.2 G .704
+(ilable only in shell functions and e).25 F .704(xternal commands in-)
+-.15 F -.2(vo)144 132 S -.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
+144 Q F0 .041(Set to an inte)144 156 R .041(ger v)-.15 F .041(alue corr\
+esponding to the type of completion attempted that caused a completion)
+-.25 F .338(function to be called:)144 168 R/F2 10/Times-Italic@0 SF -.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 .637 -.15(ve t)-.25 H(abs,).15 E F2(!)144 180 Q F0 3.067(,f)C
+.567(or listing alternati)-3.067 F -.15(ve)-.25 G 3.067(so).15 G 3.067
+(np)-3.067 G .567(artial w)-3.067 F .567(ord completion,)-.1 F F2(@)
+3.067 E F0 3.067(,t)C 3.067(ol)-3.067 G .567(ist completions if the w)
+-3.067 F .567(ord is not un-)-.1 F .418(modi\214ed, or)144 192 R F2(%)
+2.918 E F0 2.918(,f)C .418(or menu completion.)-2.918 F .417(This v)
+5.417 F .417(ariable is a)-.25 F -.25(va)-.2 G .417
+(ilable only in shell functions and e).25 F(xter)-.15 E(-)-.2 E .704
+(nal commands in)144 204 R -.2(vo)-.4 G -.1(ke).2 G 3.204(db).1 G 3.204
+(yt)-3.204 G .704(he programmable completion f)-3.204 F .704
+(acilities \(see)-.1 F F1(Pr)3.204 E .704(ogrammable Comple-)-.18 F
+(tion)144 216 Q F0(belo)2.5 E(w\).)-.25 E F1(COMP_W)108 228 Q(ORDBREAKS)
+-.1 E F0 1.336(The set of characters that the)144 240 R F1 -.18(re)3.836
+G(adline).18 E F0 1.336(library treats as w)3.836 F 1.335
+(ord separators when performing w)-.1 F(ord)-.1 E 3.125(completion. If)
+144 252 R/F3 9/Times-Bold@0 SF(COMP_W)3.125 E(ORDBREAKS)-.09 E F0 .626
+(is unset, it loses its special properties, e)2.875 F -.15(ve)-.25 G
+3.126(ni).15 G 3.126(fi)-3.126 G 3.126(ti)-3.126 G 3.126(ss)-3.126 G
+(ubse-)-3.126 E(quently reset.)144 264 Q F1(COMP_W)108 276 Q(ORDS)-.1 E
+F0 .654(An array v)144 288 R .654(ariable \(see)-.25 F F1(Arrays)3.154 E
+F0(belo)3.154 E .654(w\) consisting of the indi)-.25 F .653(vidual w)
+-.25 F .653(ords in the current command)-.1 F 3.191(line. The)144 300 R
+.692(line is split into w)3.192 F .692(ords as)-.1 F F1 -.18(re)3.192 G
+(adline).18 E F0 -.1(wo)3.192 G .692(uld split it, using).1 F F3(COMP_W)
+3.192 E(ORDBREAKS)-.09 E F0 .692(as de-)2.942 F 1.558(scribed abo)144
+312 R -.15(ve)-.15 G 6.558(.T).15 G 1.558(his v)-6.558 F 1.558
+(ariable is a)-.25 F -.25(va)-.2 G 1.558
+(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 4.057
+(db).1 G 4.057(yt)-4.057 G 1.557(he programmable)-4.057 F(completion f)
+144 324 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 336 Q(OC)-.3 E F0 .168(An array v)
+144 348 R .168(ariable \(see)-.25 F F1(Arrays)2.668 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 360 Q F1(Copr)2.5 E(ocesses)
+-.18 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(DIRST)108 372 Q -.55(AC)
+-.9 G(K).55 E F0 .79(An array v)144 384 R .79(ariable \(see)-.25 F F1
+(Arrays)3.29 E F0(belo)3.289 E .789
+(w\) containing the current contents of the directory stack.)-.25 F(Di-)
+5.789 E .099(rectories appear in the stack in the order the)144 396 R
+2.599(ya)-.15 G .099(re displayed by the)-2.599 F F1(dirs)2.599 E F0 -.2
+(bu)2.599 G 2.599(iltin. Assigning).2 F .099(to mem-)2.599 F .84
+(bers of this array v)144 408 R .84
+(ariable may be used to modify directories already in the stack, b)-.25
+F .84(ut the)-.2 F F1(pushd)3.34 E F0(and)144 420 Q F1(popd)3.45 E F0
+-.2(bu)3.45 G .951(iltins must be used to add and remo).2 F 1.251 -.15
+(ve d)-.15 H 3.451(irectories. Assignment).15 F .951(to this v)3.451 F
+.951(ariable will)-.25 F .379(not change the current directory)144 432 R
+5.379(.I)-.65 G(f)-5.379 E F3(DIRST)2.879 E -.495(AC)-.81 G(K).495 E F0
+.378(is unset, it loses its special properties, e)2.629 F -.15(ve)-.25 G
+2.878(ni).15 G 2.878(fi)-2.878 G 2.878(ti)-2.878 G(s)-2.878 E
+(subsequently reset.)144 444 Q F1(EPOCHREAL)108 456 Q(TIME)-.92 E F0
+.337(Each time this parameter is referenced, it e)144 468 R .338
+(xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)144
+480 Q F2(time)2.917 E F0 .417(\(3\)\) as a \215oating point v)B .416
+(alue with micro-second granularity)-.25 F 5.416(.A)-.65 G .416
+(ssignments to)-5.416 F F3(EPOCHRE-)2.916 E(AL)144 492 Q(TIME)-.828 E F0
+1.09(are ignored.)3.34 F(If)6.09 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.591(ni).15 G 3.591(fi)-3.591 G 3.591(ti)-3.591 G(s)-3.591 E
+(subsequently reset.)144 504 Q F1(EPOCHSECONDS)108 516 Q F0 .338
+(Each time this parameter is referenced, it e)144 528 R .337
+(xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)144
+540 Q F2(time)4.041 E F0 4.041(\(3\)\). Assignments)B(to)4.041 E F3
+(EPOCHSECONDS)4.041 E F0 1.542(are ignored.)3.792 F(If)6.542 E F3
+(EPOCHSECONDS)4.042 E F0 1.542(is unset, it)3.792 F
+(loses its special properties, e)144 552 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 564 Q F0 1.104(Expands to the ef)144 564 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.103(This v)6.103 F 1.103
+(ariable is)-.25 F(readonly)144 576 Q(.)-.65 E F1(FUNCN)108 588 Q(AME)
+-.2 E F0 .478(An array v)144 600 R .479
+(ariable containing the names of all shell functions currently in the e)
+-.25 F -.15(xe)-.15 G .479(cution call stack.).15 F .277
+(The element with inde)144 612 R 2.777(x0i)-.15 G 2.777(st)-2.777 G .276
+(he name of an)-2.777 F 2.776(yc)-.15 G(urrently-e)-2.776 E -.15(xe)-.15
+G .276(cuting shell function.).15 F .276(The bottom-most)5.276 F .384
+(element \(the one with the highest inde)144 624 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 .385
+(ariable e)-.25 F .385(xists only when a shell func-)-.15 F .076
+(tion is e)144 636 R -.15(xe)-.15 G 2.576(cuting. Assignments).15 F(to)
+2.576 E F3(FUNCN)2.576 E(AME)-.18 E F0(ha)2.326 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.575 E
+(AME)-.18 E F0 .075(is unset, it loses its)2.325 F
+(special properties, e)144 648 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 .11(This v)144
+666 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.611 E -.2(NA)144 678 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 690 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.184
+(at line number)144 702 R F1(${B)3.684 E(ASH_LINENO[)-.3 E F2($i)A F1
+(]})A F0 6.184(.T)C(he)-6.184 E F1(caller)3.683 E F0 -.2(bu)3.683 G
+1.183(iltin displays the current call stack using).2 F
+(this information.)144 714 Q(GNU Bash 5.2)72 768 Q(2022 September 19)
+135.955 E(13)185.115 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(GR)108 84 Q(OUPS)-.3 E F0 1.228(An array v)144 96 R 1.228(ariable co\
+ntaining the list of groups of which the current user is a member)-.25 F
+6.229(.A)-.55 G(ssign-)-6.229 E .572(ments to)144 108 R/F2 9
+/Times-Bold@0 SF(GR)3.072 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 F2(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.071(fi)-3.072 G 3.071(ti)-3.071 G(s)
+-3.071 E(subsequently reset.)144 120 Q F1(HISTCMD)108 132 Q F0 2.81
+(The history number)144 144 R 5.31(,o)-.4 G 5.31(ri)-5.31 G(nde)-5.31 E
+5.311(xi)-.15 G 5.311(nt)-5.311 G 2.811
+(he history list, of the current command.)-5.311 F 2.811(Assignments to)
+7.811 F F2(HISTCMD)144 156 Q F0 1.135(are ignored.)3.385 F(If)6.135 E F2
+(HISTCMD)3.635 E F0 1.135(is unset, it loses its special properties, e)
+3.385 F -.15(ve)-.25 G 3.634(ni).15 G 3.634(fi)-3.634 G 3.634(ti)-3.634
+G 3.634(ss)-3.634 G(ubse-)-3.634 E(quently reset.)144 168 Q F1(HOSTN)108
+180 Q(AME)-.2 E F0(Automatically set to the name of the current host.)
+144 192 Q F1(HOSTTYPE)108 204 Q F0 .222(Automatically set to a string t\
+hat uniquely describes the type of machine on which)144 216 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
+228 R(def)2.5 E(ault is system-dependent.)-.1 E F1(LINENO)108 240 Q F0
+1.408(Each time this parameter is referenced, the shell substitutes a d\
+ecimal number representing the)144 252 R .078(current sequential line n\
+umber \(starting with 1\) within a script or function.)144 264 R .079
+(When not in a script or)5.078 F .307(function, the v)144 276 R .307
+(alue substituted is not guaranteed to be meaningful.)-.25 F(If)5.306 E
+F2(LINENO)2.806 E F0 .306(is unset, it loses its)2.556 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 F1(MA)108 300 Q
+(CHTYPE)-.55 E F0 .898(Automatically set to a string that fully describ\
+es the system type on which)144 312 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 324 Q/F3 10
+/Times-Italic@0 SF(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 336 Q F0 .294
+(An array v)144 348 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 360 S(riable name is supplied.).25 E F1
+(OLDPWD)108 372 Q F0(The pre)144 384 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 396 Q(ARG)-.9 E F0 1.626(The v)144 408 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 F2
+(SHELL)4.127 E -.09(BU)144 420 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)
+2.25 E(w\).)-.25 E F1(OPTIND)108 432 Q F0 1.652(The inde)144 444 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 F2(SHELL)4.151 E -.09(BU)144 456
+S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1(OSTYPE)108
+468 Q F0 .329(Automatically set to a string that describes the operatin\
+g system on which)144 480 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 492 Q(ault is system-dependent.)
+-.1 E F1(PIPEST)108 504 Q -.95(AT)-.9 G(US).95 E F0 .61(An array v)144
+516 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 528 Q -.15
+(xe)-.15 G(cuted fore).15 E
+(ground pipeline \(which may contain only a single command\).)-.15 E F1
+(PPID)108 540 Q F0(The process ID of the shell')144 540 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 552 Q F0(The current w)144 552 Q
+(orking directory as set by the)-.1 E F1(cd)2.5 E F0(command.)2.5 E F1
+(RANDOM)108 564 Q F0 .417(Each time this parameter is referenced, it e)
+144 576 R .417(xpands to a random inte)-.15 F .417
+(ger between 0 and 32767.)-.15 F(As-)5.417 E .551(signing a v)144 588 R
+.551(alue to)-.25 F F2(RANDOM)3.051 E F0 .551
+(initializes \(seeds\) the sequence of random numbers.)2.801 F(If)5.55 E
+F2(RANDOM)3.05 E F0(is)2.8 E(unset, it loses its special properties, e)
+144 600 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_ARGUMENT)108 612 Q F0
+(An)144 624 Q 4.694(yn)-.15 G 2.194(umeric ar)-4.694 F 2.194(gument gi)
+-.18 F -.15(ve)-.25 G 4.694(nt).15 G 4.694(oar)-4.694 G 2.194
+(eadline command that w)-4.694 F 2.194(as de\214ned using)-.1 F/F4 10
+/Courier@0 SF 2.195(bind -x)4.695 F F0(\(see)4.695 E F2(SHELL B)144 636
+Q(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\) when it w)-.25 E
+(as in)-.1 E -.2(vo)-.4 G -.1(ke).2 G(d.).1 E F1(READLINE_LINE)108 648 Q
+F0 1.547(The contents of the)144 660 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 1.547(bind -x)4.047 F F0(\(see)4.047 E F2 1.546
+(SHELL B)4.047 F(UIL)-.09 E 1.546(TIN COM-)-.828 F(MANDS)144 672 Q F0
+(belo)2.25 E(w\).)-.25 E F1(READLINE_MARK)108 684 Q F0 .106
+(The position of the mark \(sa)144 696 R -.15(ve)-.2 G 2.606(di).15 G
+.106(nsertion point\) in the)-2.606 F F1 -.18(re)2.607 G(adline).18 E F0
+.107(line b)2.607 F(uf)-.2 E(fer)-.25 E 2.607(,f)-.4 G .107(or use with)
+-2.607 F F4 .107(bind -x)2.607 F F0(\(see)144 708 Q F2 1.017(SHELL B)
+3.517 F(UIL)-.09 E 1.017(TIN COMMANDS)-.828 F F0(belo)3.267 E 3.516
+(w\). The)-.25 F 1.016(characters between the insertion point and the)
+3.516 F(mark are often called the)144 720 Q F3 -.37(re)2.5 G(gion)-.03 E
+F0(.)A(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(14)185.115 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 10/Times-Bold@0
+SF(READLINE_POINT)108 84 Q F0 .313
+(The position of the insertion point in the)144 96 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/F2 10/Courier@0 SF .314(bind -x)2.814 F F0
+(\(see)2.814 E/F3 9/Times-Bold@0 SF(SHELL)2.814 E -.09(BU)144 108 S(IL)
+.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F1(REPL)108 120 Q
+(Y)-.92 E F0(Set to the line of input read by the)144 132 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 144 Q F0 .178
+(Each time this parameter is referenced, it e)144 156 R .177
+(xpands to the number of seconds since shell in)-.15 F -.2(vo)-.4 G
+(cation.).2 E .712(If a v)144 168 R .712(alue is assigned to)-.25 F F3
+(SECONDS)3.212 E/F4 9/Times-Roman@0 SF(,)A F0 .712(the v)2.962 F .712
+(alue returned upon subsequent references is the number)-.25 F .628
+(of seconds since the assignment plus the v)144 180 R .627
+(alue assigned.)-.25 F .627(The number of seconds at shell in)5.627 F
+-.2(vo)-.4 G(ca-).2 E .111(tion and the current time are al)144 192 R
+-.1(wa)-.1 G .111(ys determined by querying the system clock.).1 F(If)
+5.112 E F3(SECONDS)2.612 E F0 .112(is un-)2.362 F
+(set, it loses its special properties, e)144 204 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 216 Q F0 3.263(Ac)144 228 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 240 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 F3 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 252 R F3
+(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 264 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 276 Q(ariable is read-only)-.25 E(.)-.65 E F1(SHL)108 288 Q
+(VL)-.92 E F0(Incremented by one each time an instance of)144 300 Q F1
+(bash)2.5 E F0(is started.)2.5 E F1(SRANDOM)108 312 Q F0 .761(This v)144
+324 R .761(ariable e)-.25 F .761(xpands to a 32-bit pseudo-random numbe\
+r each time it is referenced. The random)-.15 F .564
+(number generator is not linear on systems that support)144 336 R F2
+(/dev/urandom)3.065 E F0(or)3.065 E F5(ar)3.065 E(c4r)-.37 E(andom)-.15
+E F0 3.065(,s)C 3.065(oe)-3.065 G(ach)-3.065 E .788
+(returned number has no relationship to the numbers preceding it.)144
+348 R .787(The random number generator)5.787 F .087
+(cannot be seeded, so assignments to this v)144 360 R .087(ariable ha)
+-.25 F .387 -.15(ve n)-.2 H 2.587(oe).15 G -.25(ff)-2.587 G 2.588
+(ect. If).25 F F3(SRANDOM)2.588 E F0 .088(is unset, it loses its)2.338 F
+(special 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(UID)108 384 Q
+F0(Expands to the user ID of the current user)144 384 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 400.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 412.8
+Q -.65(w.)-.25 G F1 -.3(BA)108 429.6 S(SH_COMP).3 E -.95(AT)-.74 G F0
+.502(The v)144 441.6 R .502(alue is used to set the shell')-.25 F 3.002
+(sc)-.55 G .502(ompatibility le)-3.002 F -.15(ve)-.25 G 3.002(l. See).15
+F F3 .503(SHELL COMP)3.002 F -.855(AT)-.666 G .503(IBILITY MODE).855 F
+F0(be-)2.753 E(lo)144 453.6 Q 2.663(wf)-.25 G .163
+(or a description of the v)-2.663 F .162(arious compatibility le)-.25 F
+-.15(ve)-.25 G .162(ls and their ef).15 F 2.662(fects. The)-.25 F -.25
+(va)2.662 G .162(lue may be a dec-).25 F .33
+(imal number \(e.g., 4.2\) or an inte)144 465.6 R .33
+(ger \(e.g., 42\) corresponding to the desired compatibility le)-.15 F
+-.15(ve)-.25 G 2.83(l. If).15 F F1 -.3(BA)144 477.6 S(SH_COMP).3 E -.95
+(AT)-.74 G F0 .861
+(is unset or set to the empty string, the compatibility le)4.311 F -.15
+(ve)-.25 G 3.36(li).15 G 3.36(ss)-3.36 G .86(et to the def)-3.36 F(ault)
+-.1 E .39(for the current v)144 489.6 R 2.89(ersion. If)-.15 F F1 -.3
+(BA)2.89 G(SH_COMP).3 E -.95(AT)-.74 G F0 .39(is set to a v)3.84 F .39
+(alue that is not one of the v)-.25 F .39(alid compati-)-.25 F .278
+(bility le)144 501.6 R -.15(ve)-.25 G .278
+(ls, the shell prints an error message and sets the compatibility le).15
+F -.15(ve)-.25 G 2.777(lt).15 G 2.777(ot)-2.777 G .277(he def)-2.777 F
+.277(ault for the)-.1 F 1.4(current v)144 513.6 R 3.9(ersion. The)-.15 F
+-.25(va)3.901 G 1.401(lid v).25 F 1.401
+(alues correspond to the compatibility le)-.25 F -.15(ve)-.25 G 1.401
+(ls described belo).15 F 3.901(wu)-.25 G(nder)-3.901 E F3 .154
+(SHELL COMP)144 525.6 R -.855(AT)-.666 G .154(IBILITY MODE).855 F F4(.)A
+F0 -.15(Fo)4.654 G 2.654(re).15 G .154(xample, 4.2 and 42 are v)-2.804 F
+.153(alid v)-.25 F .153(alues that correspond to the)-.25 F F1 .773
+(compat42 shopt)144 537.6 R F0 .774(option and set the compatibility le)
+3.273 F -.15(ve)-.25 G 3.274(lt).15 G 3.274(o4)-3.274 G 3.274(2. The)
+-3.274 F .774(current v)3.274 F .774(ersion is also a v)-.15 F(alid)-.25
+E -.25(va)144 549.6 S(lue.).25 E F1 -.3(BA)108 561.6 S(SH_ENV).3 E F0
+.506(If this parameter is set when)144 573.6 R F1(bash)3.006 E F0 .506
+(is e)3.006 F -.15(xe)-.15 G .505(cuting a shell script, its v).15 F
+.505(alue is interpreted as a \214lename)-.25 F .39
+(containing commands to initialize the shell, as in)144 585.6 R F5
+(~/.bashr)2.39 E(c)-.37 E F0 5.39(.T).31 G .39(he v)-5.39 F .391
+(alue of)-.25 F F3 -.27(BA)2.891 G(SH_ENV).27 E F0 .391(is subjected)
+2.641 F .525(to parameter e)144 597.6 R .525
+(xpansion, command substitution, and arithmetic e)-.15 F .525
+(xpansion before being interpreted)-.15 F(as a \214lename.)144 609.6 Q
+F3 -.666(PA)5 G(TH)-.189 E F0
+(is not used to search for the resultant \214lename.)2.25 E F1 -.3(BA)
+108 621.6 S(SH_XTRA).3 E(CEFD)-.55 E F0 .48(If set to an inte)144 633.6
+R .48(ger corresponding to a v)-.15 F .481(alid \214le descriptor)-.25 F
+(,)-.4 E F1(bash)2.981 E F0 .481(will write the trace output gener)2.981
+F(-)-.2 E 3.114(ated when)144 645.6 R F2 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 F3 -.27(BA)144 657.6 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 F3 -.27(BA)2.638 G
+(SH_XTRA).27 E(CEFD)-.495 E F0 .138(or assigning it)2.388 F 2.531(the e\
+mpty string causes the trace output to be sent to the standard error)144
+669.6 R 7.53(.N)-.55 G 2.53(ote that setting)-7.53 F F3 -.27(BA)144
+681.6 S(SH_XTRA).27 E(CEFD)-.495 E F0 .74(to 2 \(the standard error \
+\214le descriptor\) and then unsetting it will result in the)2.99 F
+(standard error being closed.)144 693.6 Q F1(CDP)108 705.6 Q -.95(AT)
+-.74 G(H).95 E F0 1.248(The search path for the)144 717.6 R F1(cd)3.748
+E F0 3.748(command. This)3.748 F 1.247
+(is a colon-separated list of directories in which the)3.748 F 3.795
+(shell looks for destination directories speci\214ed by the)144 729.6 R
+F1(cd)6.295 E F0 6.296(command. A)6.296 F 3.796(sample v)6.296 F 3.796
+(alue is)-.25 F(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(15)
+185.115 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/F1 10/Courier@0 SF
+(".:~:/usr")144 84 Q F0(.)A/F2 10/Times-Bold@0 SF(CHILD_MAX)108 96 Q F0
+.997(Set the number of e)144 108 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.497(wt)-.25 G(his)-3.497 E -.25(va)144 120
+S 1.077(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.078
+(alue \(cur)-.25 F(-)-.2 E(rently 8192\) that this may not e)144 132 Q
+2.5(xceed. The)-.15 F(minimum v)2.5 E(alue is system-dependent.)-.25 E
+F2(COLUMNS)108 144 Q F0 .829(Used by the)144 156 R F2(select)3.329 E F0
+.828(compound command to determine the terminal width when printing sel\
+ection)3.329 F 3.466(lists. Automatically)144 168 R .966(set if the)
+3.466 F F2(checkwinsize)3.466 E F0 .966
+(option is enabled or in an interacti)3.466 F 1.266 -.15(ve s)-.25 H
+.966(hell upon re-).15 F(ceipt of a)144 180 Q/F3 9/Times-Bold@0 SF
+(SIGWINCH)2.5 E/F4 9/Times-Roman@0 SF(.)A F2(COMPREPL)108 192 Q(Y)-.92 E
+F0 .848(An array v)144 204 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 216 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
+228 Q F2(EMA)108 240 Q(CS)-.55 E F0(If)144 252 Q F2(bash)2.536 E F0 .036
+(\214nds this v)2.536 F .036(ariable in the en)-.25 F .036
+(vironment when the shell starts with v)-.4 F(alue)-.25 E F1(t)2.535 E
+F0 2.535(,i)C 2.535(ta)-2.535 G .035(ssumes that the)-2.535 F
+(shell is running in an Emacs shell b)144 264 Q(uf)-.2 E
+(fer and disables line editing.)-.25 E F2(ENV)108 276 Q F0 .67
+(Expanded and e)144 276 R -.15(xe)-.15 G .67(cuted similarly to).15 F F3
+-.27(BA)3.17 G(SH_ENV).27 E F0(\(see)2.92 E F2(INV)3.17 E(OCA)-.45 E
+(TION)-.95 E F0(abo)3.171 E -.15(ve)-.15 G 3.171(\)w).15 G .671
+(hen an interacti)-3.171 F -.15(ve)-.25 G(shell is in)144 288 Q -.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 300 Q F0 2.717(Ac)144 312 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 324 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 336 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 348 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
+360 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 372 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 384 Q F2(extglob)2.5 E F0(shell option.)
+2.5 E F2(FCEDIT)108 396 Q F0(The def)144 408 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 420 Q F0
+2.599(Ac)144 432 S .098(olon-separated list of suf)-2.599 F<8c78>-.25 E
+.098(es to ignore when performing \214lename completion \(see)-.15 F F3
+(READLINE)2.598 E F0(belo)144 444 Q 2.704(w\). A)-.25 F .204
+(\214lename whose suf)2.704 F .205(\214x matches one of the entries in)
+-.25 F F3(FIGNORE)2.705 E F0 .205(is e)2.455 F .205
+(xcluded from the list)-.15 F(of matched \214lenames.)144 456 Q 2.5(As)5
+G(ample v)-2.5 E(alue is)-.25 E F1(".o:~")2.5 E F0(.)A F2(FUNCNEST)108
+468 Q F0 .231(If set to a numeric v)144 480 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 492 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 504 Q F0 2.923(Ac)144 516 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 528 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 F3
+(GLOBIGNORE)144 540 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 552 Q(OL)-.3 E F0
+2.653(Ac)144 564 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 .49(of v)144 576 R .49(alues includes)
+-.25 F F5(ignor)3 E(espace)-.37 E F0 2.99(,l).18 G .49(ines which be)
+-2.99 F .49(gin with a)-.15 F F2(space)2.99 E F0 .49
+(character are not sa)2.99 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 588 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 600 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 612 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 624 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 F3(HISTCONTR)2.763 E(OL)-.27 E F0 .263
+(is unset, or does not include)2.513 F 2.941(av)144 636 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 F3
+(HISTIGNORE)144 648 Q F4(.)A F0 1.981(The second and subsequent lines o\
+f a multi-line compound command are not)6.482 F
+(tested, and are added to the history re)144 660 Q -.05(ga)-.15 G
+(rdless of the v).05 E(alue of)-.25 E F3(HISTCONTR)2.5 E(OL)-.27 E F4(.)
+A F2(HISTFILE)108 672 Q F0 .181
+(The name of the \214le in which command history is sa)144 684 R -.15
+(ve)-.2 G 2.681(d\().15 G(see)-2.681 E F3(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 696 Q F5(~/.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(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(16)185.115 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(HISTFILESIZE)108 84 Q F0 1.623
+(The maximum number of lines contained in the history \214le.)144 96 R
+1.622(When this v)6.623 F 1.622(ariable is assigned a)-.25 F -.25(va)144
+108 S .124(lue, the history \214le is truncated, if necessary).25 F
+2.624(,t)-.65 G 2.624(oc)-2.624 G .125
+(ontain no more than that number of lines by re-)-2.624 F(mo)144 120 Q
+.066(ving the oldest entries.)-.15 F .065(The history \214le is also tr\
+uncated to this size after writing it when a shell)5.066 F -.15(ex)144
+132 S 2.927(its. If).15 F .427(the v)2.927 F .428
+(alue is 0, the history \214le is truncated to zero size.)-.25 F .428
+(Non-numeric v)5.428 F .428(alues and numeric)-.25 F -.25(va)144 144 S
+.152(lues less than zero inhibit truncation.).25 F .152
+(The shell sets the def)5.152 F .152(ault v)-.1 F .152(alue to the v)
+-.25 F .151(alue of)-.25 F F1(HISTSIZE)2.651 E F0(after reading an)144
+156 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1(HISTIGNORE)108 168 Q F0
+2.657(Ac)144 180 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 192 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 204 R F1(*)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/F2 9/Times-Bold@0
+SF(HISTCONTR)144 216 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
+F1(&)A F0(')A 1.44(matches the pre)144 228 R 1.44(vious history line.)
+-.25 F(`)6.44 E F1(&)A F0 3.94('m)C 1.44
+(ay be escaped using a backslash; the backslash is re-)-3.94 F(mo)144
+240 Q -.15(ve)-.15 G 3.95(db).15 G 1.45(efore attempting a match.)-3.95
+F 1.45(The second and subsequent lines of a multi-line compound)6.45 F
+1.269(command are not tested, and are added to the history re)144 252 R
+-.05(ga)-.15 G 1.269(rdless of the v).05 F 1.269(alue of)-.25 F F2
+(HISTIGNORE)3.77 E/F3 9/Times-Roman@0 SF(.)A F0
+(The pattern matching honors the setting of the)144 264 Q F1(extglob)2.5
+E F0(shell option.)2.5 E F1(HISTSIZE)108 276 Q F0 1.387
+(The number of commands to remember in the command history \(see)144 288
+R F2(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 300 S .412(lue is 0, commands are not sa)
+.25 F -.15(ve)-.2 G 2.913(di).15 G 2.913(nt)-2.913 G .413
+(he history list.)-2.913 F .413(Numeric v)5.413 F .413
+(alues less than zero result in e)-.25 F(v-)-.25 E .344
+(ery command being sa)144 312 R -.15(ve)-.2 G 2.844(do).15 G 2.844(nt)
+-2.844 G .343(he history list \(there is no limit\).)-2.844 F .343
+(The shell sets the def)5.343 F .343(ault v)-.1 F .343(alue to)-.25 F
+(500 after reading an)144 324 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1
+(HISTTIMEFORMA)108 336 Q(T)-.95 E F0 .951(If this v)144 348 R .951
+(ariable is set and not null, its v)-.25 F .952
+(alue is used as a format string for)-.25 F/F4 10/Times-Italic@0 SF
+(strftime)3.452 E F0 .952(\(3\) to print the)B .673
+(time stamp associated with each history entry displayed by the)144 360
+R F1(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 372 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 384 Q
+F1(HOME)108 396 Q F0 1.27
+(The home directory of the current user; the def)144 408 R 1.27(ault ar)
+-.1 F 1.27(gument for the)-.18 F F1(cd)3.77 E F0 -.2(bu)3.77 G 1.27
+(iltin command.).2 F(The)6.27 E -.25(va)144 420 S(lue of this v).25 E
+(ariable is also used when performing tilde e)-.25 E(xpansion.)-.15 E F1
+(HOSTFILE)108 432 Q F0 1.015
+(Contains the name of a \214le in the same format as)144 444 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 456 R .551
+(The list of possible hostname completions may be changed while)5.551 F
+1.058(the shell is running; the ne)144 468 R 1.059
+(xt time hostname completion is attempted after the v)-.15 F 1.059
+(alue is changed,)-.25 F F1(bash)144 480 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 F2(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 492 R F1(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 504
+Q(When)5 E F2(HOSTFILE)2.5 E F0(is unset, the hostname list is cleared.)
+2.25 E F1(IFS)108 516 Q F0(The)144 516 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 528 S(rds with the).1 E F1 -.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 F1(IGNOREEOF)108 540 Q
+F0 .503(Controls the action of an interacti)144 552 R .803 -.15(ve s)
+-.25 H .503(hell on receipt of an).15 F F2(EOF)3.003 E F0 .503
+(character as the sole input.)2.753 F .504(If set,)5.504 F .426(the v)
+144 564 R .426(alue is the number of consecuti)-.25 F -.15(ve)-.25 G F2
+(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 576 R F1(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 588 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
+F2(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F1
+(INPUTRC)108 600 Q F0 .261(The \214lename for the)144 612 R F1 -.18(re)
+2.761 G(adline).18 E F0 .261(startup \214le, o)2.761 F -.15(ve)-.15 G
+.26(rriding the def).15 F .26(ault of)-.1 F F4(~/.inputr)4.426 E(c)-.37
+E F0(\(see)4.426 E F2(READLINE)2.76 E F0(be-)2.51 E(lo)144 624 Q(w\).)
+-.25 E F1(INSIDE_EMA)108 636 Q(CS)-.55 E F0 .033(If this v)144 648 R
+.033(ariable appears in the en)-.25 F .033
+(vironment when the shell starts,)-.4 F F1(bash)2.534 E F0 .034
+(assumes that it is running in-)2.534 F(side an Emacs shell b)144 660 Q
+(uf)-.2 E(fer and may disable line editing, depending on the v)-.25 E
+(alue of)-.25 E F1(TERM)2.5 E F0(.)A F1(LANG)108 672 Q F0 1.24
+(Used to determine the locale cate)144 672 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 684 Q F1(LC_)2.5 E F0(.)A F1(LC_ALL)108 696 Q F0 .973
+(This v)144 708 R .973(ariable o)-.25 F -.15(ve)-.15 G .973
+(rrides the v).15 F .973(alue of)-.25 F F2(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 720 Q(.)-.65 E
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(17)185.115 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/F1 10/Times-Bold@0
+SF(LC_COLLA)108 84 Q(TE)-.95 E F0 .412(This v)144 96 R .412(ariable det\
+ermines the collation order used when sorting the results of pathname e)
+-.25 F(xpansion,)-.15 E 1.464(and determines the beha)144 108 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
+120 Q(xpansion and pattern matching.)-.15 E F1(LC_CTYPE)108 132 Q F0
+1.936(This v)144 144 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 156 Q
+(xpansion and pattern matching.)-.15 E F1(LC_MESSA)108 168 Q(GES)-.55 E
+F0(This v)144 180 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 192 Q F0(This v)144 204 Q(ariable determines the locale cate)-.25 E
+(gory used for number formatting.)-.15 E F1(LC_TIME)108 216 Q F0(This v)
+144 228 Q(ariable determines the locale cate)-.25 E
+(gory used for data and time formatting.)-.15 E F1(LINES)108 240 Q F0
+.054(Used by the)144 240 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 252 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 9/Times-Bold@0 SF(SIGWINCH)144 264 Q/F3
+9/Times-Roman@0 SF(.)A F1(MAIL)108 276 Q F0 .421
+(If this parameter is set to a \214le or directory name and the)144 276
+R F2(MAILP)2.922 E -.855(AT)-.666 G(H).855 E F0 -.25(va)2.672 G .422
+(riable is not set,).25 F F1(bash)2.922 E F0(in-)2.922 E
+(forms the user of the arri)144 288 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 300 Q F0 .099
+(Speci\214es ho)144 312 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 324 R .224(If this v)5.224 F .224(ariable is unset,)-.25 F
+(or set to a v)144 336 Q(alue that is not a number greater than or equa\
+l to zero, the shell disables mail checking.)-.25 E F1(MAILP)108 348 Q
+-.95(AT)-.74 G(H).95 E F0 2.99(Ac)144 360 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 372 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 384 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 396 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 408 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 420 Q
+(ar/mail/)-.25 E F1($USER)A F0(\).)A F1(OPTERR)108 432 Q F0 .389
+(If set to the v)144 444 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 456 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 468 Q -.15(xe)
+-.15 G(cuted.).15 E F1 -.74(PA)108 480 S(TH)-.21 E F0 .587
+(The search path for commands.)144 480 R .588
+(It is a colon-separated list of directories in which the shell looks)
+5.587 F .472(for commands \(see)144 492 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 504 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 516 R .868
+(The def)5.868 F .867(ault path is system-dependent, and is set by the)
+-.1 F(administrator who installs)144 528 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/lo-)2.5 E(cal/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
+144 540 Q F0(.)A F1(POSIXL)108 552 Q(Y_CORRECT)-.92 E F0 .472(If this v)
+144 564 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 576 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 588 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 600 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 612 Q(OMPT_COMMAND)-.3 E F0 .155
+(If this v)144 624 R .155(ariable is set, and is an array)-.25 F 2.655
+(,t)-.65 G .155(he v)-2.655 F .155(alue of each set element is e)-.25 F
+-.15(xe)-.15 G .155(cuted as a command prior).15 F .407
+(to issuing each primary prompt.)144 636 R .407(If this is set b)5.407 F
+.407(ut not an array v)-.2 F .407(ariable, its v)-.25 F .407
+(alue is used as a com-)-.25 F(mand to e)144 648 Q -.15(xe)-.15 G
+(cute instead.).15 E F1(PR)108 660 Q(OMPT_DIR)-.3 E(TRIM)-.4 E F0 .676
+(If set to a number greater than zero, the v)144 672 R .676
+(alue is used as the number of trailing directory compo-)-.25 F .923
+(nents to retain when e)144 684 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
+(Characters remo)144 696 Q -.15(ve)-.15 G 2.5(da).15 G
+(re replaced with an ellipsis.)-2.5 E F1(PS0)108 708 Q F0 1.174(The v)
+144 708 R 1.174(alue of this parameter is e)-.25 F 1.174(xpanded \(see)
+-.15 F F2(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 720 Q
+-.15(xe)-.15 G(cuted.).15 E(GNU Bash 5.2)72 768 Q(2022 September 19)
+135.955 E(18)185.115 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/F1 10/Times-Bold@0
+SF(PS1)108 84 Q F0 .065(The v)144 84 R .065(alue of this parameter is e)
+-.25 F .065(xpanded \(see)-.15 F/F2 9/Times-Bold@0 SF(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 96 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 108 Q
+F0 .117(The v)144 108 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
+120 Q(ault is `)-.1 E(`)-.74 E F1(>)A F0 -.74('')2.5 G(.).74 E F1(PS3)
+108 132 Q F0 1.116(The v)144 132 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 144 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E F1(PS4)108 156 Q F0 .1
+(The v)144 156 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 168 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 180 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 192 Q F0 .542(This v)144 204 R .542(ariable e)-.25 F .542
+(xpands to the full pathname to the shell.)-.15 F .543
+(If it is not set when the shell starts,)5.543 F F1(bash)3.043 E F0
+(assigns to it the full pathname of the current user')144 216 Q 2.5(sl)
+-.55 G(ogin shell.)-2.5 E F1(TIMEFORMA)108 228 Q(T)-.95 E F0 .827(The v)
+144 240 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 252 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 264 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 276 Q
+(ws; the braces denote optional portions.)-.25 E F1(%%)144 294 Q F0 2.5
+(Al)194 294 S(iteral)-2.5 E F1(%)2.5 E F0(.)A F1(%[)144 306 Q/F3 10
+/Times-Italic@0 SF(p)A F1(][l]R)A F0(The elapsed time in seconds.)194
+306 Q F1(%[)144 318 Q F3(p)A F1(][l]U)A F0
+(The number of CPU seconds spent in user mode.)194 318 Q F1(%[)144 330 Q
+F3(p)A F1(][l]S)A F0(The number of CPU seconds spent in system mode.)194
+330 Q F1(%P)144 342 Q F0
+(The CPU percentage, computed as \(%U + %S\) / %R.)194 342 Q .87
+(The optional)144 358.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 370.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 382.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 394.8 Q
+(alue 3 is used.)-.25 E .668(The optional)144 411.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 423.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 440.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 452.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
+464.4 R(trailing ne)2.5 E
+(wline is added when the format string is displayed.)-.25 E F1(TMOUT)108
+476.4 Q F0 .941(If set to a v)144 488.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 500.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 512.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 524.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 536.4
+Q -.15(ve)-.25 G(.).15 E F1(TMPDIR)108 548.4 Q F0 .39(If set,)144 560.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 572.4 Q 2.5(su)
+-.55 G(se.)-2.5 E F1(auto_r)108 584.4 Q(esume)-.18 E F0 .531(This v)144
+596.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 608.4 R
+.538(ord simple commands without redirections are treated as candidates\
+ for resumption of an)-.1 F -.15(ex)144 620.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
+632.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 644.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 .605
+(match the name of a stopped job e)144 656.4 R .606(xactly; if set to)
+-.15 F F3(substring)3.446 E F0 3.106(,t).22 G .606
+(he string supplied needs to match a)-3.106 F .885
+(substring of the name of a stopped job)144 668.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 680.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 692.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(identi\214er)144 704.4 Q(.)-.55
+E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(19)185.115 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/F1 10/Times-Bold@0
+SF(histchars)108 84 Q F0 .545(The tw)144 96 R 3.045(oo)-.1 G 3.045(rt)
+-3.045 G .545(hree characters which control history e)-3.045 F .546
+(xpansion and tok)-.15 F .546(enization \(see)-.1 F/F2 9/Times-Bold@0 SF
+(HIST)3.046 E(OR)-.162 E 2.796(YE)-.315 G(X-)-2.796 E -.666(PA)144 108 S
+(NSION).666 E F0(belo)2.988 E 3.238(w\). The)-.25 F .738
+(\214rst character is the)3.238 F/F3 10/Times-Italic@0 SF .737
+(history e)3.237 F(xpansion)-.2 E F0(character)3.237 E 3.237(,t)-.4 G
+.737(he character which sig-)-3.237 F .76(nals the start of a history e)
+144 120 R .761(xpansion, normally `)-.15 F F1(!)A F0 3.261('. The)B .761
+(second character is the)3.261 F F3(quic)3.261 E 3.261(ks)-.2 G
+(ubstitution)-3.261 E F0(character)144 132 Q 3.477(,w)-.4 G .977
+(hich is used as shorthand for re-running the pre)-3.477 F .976
+(vious command entered, substituting)-.25 F .13
+(one string for another in the command.)144 144 R .131(The def)5.13 F
+.131(ault is `)-.1 F F1(^)A F0 2.631('. The)B .131
+(optional third character is the char)2.631 F(-)-.2 E .276(acter which \
+indicates that the remainder of the line is a comment when found as the\
+ \214rst character)144 156 R .459(of a w)144 168 R .459(ord, normally `)
+-.1 F F1(#)A F0 2.959('. The)B .459
+(history comment character causes history substitution to be skipped)
+2.959 F .467(for the remaining w)144 180 R .467(ords on the line.)-.1 F
+.466(It does not necessarily cause the shell parser to treat the rest)
+5.467 F(of the line as a comment.)144 192 Q F1(Arrays)87 208.8 Q(Bash)
+108 220.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 232.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 244.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 256.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
+268.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 285.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 297.6 Q F0(]=)A F3(value)A
+F0 5.507(.T)C(he)-5.507 E F3(subscript)3.347 E F0 .507
+(is treated as an arithmetic e)3.687 F .507(xpression that must e)-.15 F
+-.25(va)-.25 G .507(luate to a number).25 F 5.506(.T)-.55 G 3.006(oe)
+-6.306 G(x-)-3.156 E 1.192(plicitly declare an inde)108 309.6 R -.15(xe)
+-.15 G 3.692(da).15 G(rray)-3.692 E 3.692(,u)-.65 G(se)-3.692 E F1
+(declar)3.692 E 3.693<65ad>-.18 G(a)-3.693 E F3(name)3.693 E F0(\(see)
+3.693 E F2 1.193(SHELL B)3.693 F(UIL)-.09 E 1.193(TIN COMMANDS)-.828 F
+F0(belo)3.443 E(w\).)-.25 E F1(de-)6.193 E(clar)108 321.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 338.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
+355.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 367.2 Q
+(.)-.65 E 1.647
+(Arrays are assigned to using compound assignments of the form)108 384 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 396 Q F0 .212(may be of the form [)2.712 F F3
+(subscript)A F0(]=)A F3(string)A F0 5.211(.I)C(nde)-5.211 E -.15(xe)-.15
+G 2.711(da).15 G .211(rray assignments do not require an)-2.711 F .211
+(ything b)-.15 F(ut)-.2 E F3(string)2.711 E F0(.)A(Each)108 408 Q F3
+(value)2.529 E F0 .029(in the list is e)2.529 F .029
+(xpanded using all the shell e)-.15 F .029(xpansions described belo)-.15
+F 2.529(wu)-.25 G(nder)-2.529 E F2(EXP)2.529 E(ANSION)-.666 E/F4 9
+/Times-Roman@0 SF(.)A F0(When)4.53 E .996(assigning to inde)108 420 R
+-.15(xe)-.15 G 3.496(da).15 G .996(rrays, if the optional brack)-3.496 F
+.996(ets and subscript are supplied, that inde)-.1 F 3.495(xi)-.15 G
+3.495(sa)-3.495 G .995(ssigned to;)-3.495 F .416(otherwise the inde)108
+432 R 2.916(xo)-.15 G 2.916(ft)-2.916 G .417
+(he element assigned is the last inde)-2.916 F 2.917(xa)-.15 G .417
+(ssigned to by the statement plus one.)-2.917 F(Inde)5.417 E(x-)-.15 E
+(ing starts at zero.)108 444 Q 1.288(When assigning to an associati)108
+460.8 R 1.588 -.15(ve a)-.25 H(rray).15 E 3.788(,t)-.65 G 1.288(he w)
+-3.788 F 1.288(ords in a compound assignment may be either assignment)
+-.1 F .608
+(statements, for which the subscript is required, or a list of w)108
+472.8 R .608(ords that is interpreted as a sequence of alter)-.1 F(-)-.2
+E 1.957(nating k)108 484.8 R -.15(ey)-.1 G 4.457(sa).15 G 1.957(nd v)
+-4.457 F(alues:)-.25 E F3(name)4.457 E F0(=)A F1(\()A F3 -.1(ke)4.457 G
+1.957(y1 value1 k)-.2 F -.3(ey)-.1 G 4.457(2v).3 G(alue2)-4.457 E F0
+(...)4.457 E F1(\))A F0 6.957(.T)C 1.956
+(hese are treated identically to)-6.957 F F3(name)4.456 E F0(=)A F1(\()A
+F0([)108 496.8 Q F3 -.1(ke)C(y1)-.2 E F0(]=)A F3(value1)A F0([)3.132 E
+F3 -.1(ke)C(y2)-.2 E F0(]=)A F3(value2)A F0(...)3.132 E F1(\))A F0 5.632
+(.T)C .632(he \214rst w)-5.632 F .633(ord in the list determines ho)-.1
+F 3.133(wt)-.25 G .633(he remaining w)-3.133 F .633(ords are inter)-.1 F
+(-)-.2 E .154
+(preted; all assignments in a list must be of the same type.)108 508.8 R
+.153(When using k)5.153 F -.15(ey)-.1 G(/v).15 E .153(alue pairs, the k)
+-.25 F -.15(ey)-.1 G 2.653(sm).15 G .153(ay not be)-2.653 F
+(missing or empty; a \214nal missing v)108 520.8 Q(alue is treated lik)
+-.25 E 2.5(et)-.1 G(he empty string.)-2.5 E .239
+(This syntax is also accepted by the)108 537.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
+549.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 561.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 573.6 Q F3(name)2.677 E F0 2.677(,s)C 2.677(on)-2.677 G -2.25
+-.15(eg a)-2.677 H(ti).15 E .477 -.15(ve i)-.25 H .177
+(ndices count back from the end of the array).15 F 2.677(,a)-.65 G .177
+(nd an inde)-2.677 F 2.676(xo)-.15 G 2.676<66ad>-2.676 G 2.676(1r)-2.676
+G .176(eferences the last el-)-2.676 F(ement.)108 585.6 Q .716
+(The += operator will append to an array v)108 602.4 R .717
+(ariable when assigning using the compound assignment syntax;)-.25 F
+(see)108 614.4 Q F2 -.666(PA)2.5 G(RAMETERS).666 E F0(abo)2.25 E -.15
+(ve)-.15 G(.).15 E(An)108 631.2 Q 3.576(ye)-.15 G 1.076
+(lement of an array may be referenced using ${)-3.576 F F3(name)A F0([)A
+F3(subscript)A F0 3.575(]}. The)B 1.075(braces are required to a)3.575 F
+-.2(vo)-.2 G(id).2 E 1.541(con\215icts with pathname e)108 643.2 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.042 E F0(.)A 1.057
+(These subscripts dif)108 655.2 R 1.057(fer only when the w)-.25 F 1.057
+(ord appears within double quotes.)-.1 F 1.056(If the w)6.056 F 1.056
+(ord is double-quoted,)-.1 F(${)108 667.2 Q F3(name)A F0 .52([*]} e)B
+.52(xpands to a single w)-.15 F .52(ord with the v)-.1 F .521
+(alue of each array member separated by the \214rst character)-.25 F
+1.375(of the)108 679.2 R F2(IFS)3.875 E F0 1.375(special v)3.625 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.374(to a separate w)
+3.875 F 3.874(ord. When)-.1 F 2.027(there are no array members, ${)108
+691.2 R F3(name)A F0 2.028([@]} e)B 2.028(xpands to nothing.)-.15 F
+2.028(If the double-quoted e)7.028 F 2.028(xpansion occurs)-.15 F .759
+(within a w)108 703.2 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 .515(and the e)108
+715.2 R .516(xpansion of the last parameter is joined with the last par\
+t of the original w)-.15 F 3.016(ord. This)-.1 F .516(is analogous)3.016
+F .228(to the e)108 727.2 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.727 E -.15(ve)-.15 G 2.727
+(\). ${#).15 F F3(name)A F0([)A F3(subscript)A F0(]})A(GNU Bash 5.2)72
+768 Q(2022 September 19)135.955 E(20)185.115 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 -.15(ex)108 84 S
+.886(pands to the length of ${).15 F/F1 10/Times-Italic@0 SF(name)A F0
+([)A F1(subscript)A F0 3.386(]}. If)B F1(subscript)3.386 E F0(is)3.386 E
+/F2 10/Times-Bold@0 SF(*)3.386 E F0(or)3.386 E F2(@)3.386 E F0 3.386(,t)
+C .886(he e)-3.386 F .886(xpansion is the number of ele-)-.15 F .295
+(ments in the array)108 96 R 5.295(.I)-.65 G 2.795(ft)-5.295 G(he)-2.795
+E F1(subscript)3.135 E F0 .295(used to reference an element of an inde)
+3.475 F -.15(xe)-.15 G 2.794(da).15 G .294(rray e)-2.794 F -.25(va)-.25
+G .294(luates to a number).25 F .628
+(less than zero, it is interpreted as relati)108 108 R .928 -.15(ve t)
+-.25 H 3.128(oo).15 G .629(ne greater than the maximum inde)-3.128 F
+3.129(xo)-.15 G 3.129(ft)-3.129 G .629(he array)-3.129 F 3.129(,s)-.65 G
+3.129(on)-3.129 G -2.25 -.15(eg a)-3.129 H(ti).15 E -.15(ve)-.25 G
+(indices count back from the end of the array)108 120 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
+136.8 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 148.8 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 F2(bash)2.5 E
+F0(will create an array if necessary)2.5 E(.)-.65 E(An array v)108 165.6
+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
+.417(It is possible to obtain the k)108 182.4 R -.15(ey)-.1 G 2.918(s\()
+.15 G .418(indices\) of an array as well as the v)-2.918 F 2.918
+(alues. ${)-.25 F F2(!)A F1(name)A F0([)A F1(@)A F0 .418(]} and ${)B F2
+(!)A F1(name)A F0([)A F1(*)A F0(]})A -.15(ex)108 194.4 S .75
+(pand to the indices assigned in array v).15 F(ariable)-.25 E F1(name)
+3.249 E F0 5.749(.T)C .749
+(he treatment when in double quotes is similar to)-5.749 F(the e)108
+206.4 Q(xpansion of the special parameters)-.15 E F1(@)2.5 E F0(and)2.5
+E F1(*)2.5 E F0(within double quotes.)2.5 E(The)108 223.2 Q F2(unset)
+2.766 E F0 -.2(bu)2.766 G .267(iltin is used to destro).2 F 2.767(ya)-.1
+G(rrays.)-2.767 E F2(unset)5.267 E F1(name)2.767 E F0([)A F1(subscript)A
+F0 2.767(]d)C(estro)-2.767 E .267(ys the array element at inde)-.1 F(x)
+-.15 E F1(sub-)2.767 E(script)108 235.2 Q F0 2.858(,f)C .358
+(or both inde)-2.858 F -.15(xe)-.15 G 2.858(da).15 G .358(nd associati)
+-2.858 F .658 -.15(ve a)-.25 H 2.858(rrays. Ne).15 F -.05(ga)-.15 G(ti)
+.05 E .658 -.15(ve s)-.25 H .358(ubscripts to inde).15 F -.15(xe)-.15 G
+2.858(da).15 G .358(rrays are interpreted as de-)-2.858 F 1.204
+(scribed abo)108 247.2 R -.15(ve)-.15 G 6.204(.U).15 G 1.204
+(nsetting the last element of an array v)-6.204 F 1.205
+(ariable does not unset the v)-.25 F(ariable.)-.25 E F2(unset)6.205 E F1
+(name)3.705 E F0(,)A(where)108 259.2 Q F1(name)3.413 E F0 .913
+(is an array)3.413 F 3.413(,r)-.65 G(emo)-3.413 E -.15(ve)-.15 G 3.413
+(st).15 G .912(he entire array)-3.413 F(.)-.65 E F2(unset)5.912 E F1
+(name)3.412 E F0([)A F1(subscript)A F0 .912(], where)B F1(subscript)
+3.412 E F0(is)3.412 E F2(*)3.412 E F0(or)3.412 E F2(@)3.412 E F0 3.412
+(,b)C(e-)-3.412 E(ha)108 271.2 Q -.15(ve)-.2 G 3.125(sd).15 G(if)-3.125
+E .625(ferently depending on whether)-.25 F F1(name)3.125 E F0 .626
+(is an inde)3.125 F -.15(xe)-.15 G 3.126(do).15 G 3.126(ra)-3.126 G
+(ssociati)-3.126 E .926 -.15(ve a)-.25 H(rray).15 E 5.626(.I)-.65 G(f)
+-5.626 E F1(name)3.126 E F0 .626(is an associati)3.126 F -.15(ve)-.25 G
+(array)108 283.2 Q 3.067(,t)-.65 G .567
+(his unsets the element with subscript)-3.067 F F2(*)3.067 E F0(or)3.067
+E F2(@)3.067 E F0 5.567(.I)C(f)-5.567 E F1(name)3.067 E F0 .567
+(is an inde)3.067 F -.15(xe)-.15 G 3.067(da).15 G(rray)-3.067 E 3.067
+(,u)-.65 G .567(nset remo)-3.067 F -.15(ve)-.15 G 3.067(sa).15 G .567
+(ll of the)-3.067 F(elements b)108 295.2 Q(ut does not remo)-.2 E .3
+-.15(ve t)-.15 H(he array itself.).15 E .028(When using a v)108 312 R
+.028(ariable name with a subscript as an ar)-.25 F .029
+(gument to a command, such as with)-.18 F F2(unset)2.529 E F0 2.529(,w)C
+.029(ithout us-)-2.529 F .938(ing the w)108 324 R .938(ord e)-.1 F .938
+(xpansion syntax described abo)-.15 F -.15(ve)-.15 G 3.437(,t).15 G .937
+(he ar)-3.437 F .937(gument is subject to pathname e)-.18 F 3.437
+(xpansion. If)-.15 F(path-)3.437 E(name e)108 336 Q
+(xpansion is not desired, the ar)-.15 E(gument should be quoted.)-.18 E
+(The)108 352.8 Q F2(declar)2.683 E(e)-.18 E F0(,)A F2(local)2.683 E F0
+2.683(,a)C(nd)-2.683 E F2 -.18(re)2.683 G(adonly).18 E F0 -.2(bu)2.683 G
+.184(iltins each accept a).2 F F2<ad61>2.684 E F0 .184
+(option to specify an inde)2.684 F -.15(xe)-.15 G 2.684(da).15 G .184
+(rray and a)-2.684 F F2<ad41>2.684 E F0(op-)2.684 E .042
+(tion to specify an associati)108 364.8 R .341 -.15(ve a)-.25 H(rray).15
+E 5.041(.I)-.65 G 2.541(fb)-5.041 G .041(oth options are supplied,)
+-2.541 F F2<ad41>2.541 E F0(tak)2.541 E .041(es precedence.)-.1 F(The)
+5.041 E F2 -.18(re)2.541 G(ad).18 E F0 -.2(bu)2.541 G .041(iltin ac-).2
+F .863(cepts a)108 376.8 R F2<ad61>3.363 E F0 .864
+(option to assign a list of w)3.363 F .864
+(ords read from the standard input to an array)-.1 F 5.864(.T)-.65 G(he)
+-5.864 E F2(set)3.364 E F0(and)3.364 E F2(declar)3.364 E(e)-.18 E F0 -.2
+(bu)108 388.8 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 405.6 Q(ANSION)-.81 E F0 .76(Expansion is perfo\
+rmed on the command line after it has been split into w)108 417.6 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 429.6 S .2(pansion performed:).15 F F1(br)
+2.971 E .201(ace e)-.15 F(xpansion)-.2 E F0(,).24 E F1 .201(tilde e)
+2.831 F(xpansion)-.2 E F0(,).24 E F1(par)3.951 E .201
+(ameter and variable e)-.15 F(xpansion)-.2 E F0(,).24 E F1 .201
+(command sub-)2.901 F(stitution)108 441.6 Q F0(,).24 E F1(arithmetic e)
+2.83 E(xpansion)-.2 E F0(,).24 E F1(wor)2.84 E 2.5(ds)-.37 G(plitting)
+-2.5 E F0 2.5(,a).22 G(nd)-2.5 E F1(pathname e)3.75 E(xpansion)-.2 E F0
+(.).24 E .419(The order of e)108 458.4 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 470.4
+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 482.4 Q .257
+(On systems that can support it, there is an additional e)108 499.2 R
+.257(xpansion a)-.15 F -.25(va)-.2 G(ilable:).25 E F1(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 511.2 Q 2.5(,v)-.4 G
+(ariable, and arithmetic e)-2.75 E(xpansion and command substitution.)
+-.15 E .002(After these e)108 528 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 540 Q .3 -.15(ve b)-.2 H
+(een quoted themselv).15 E(es \()-.15 E F1(quote r)A(emo)-.37 E(val)-.1
+E F0(\).)A .172(Only brace e)108 556.8 R .172(xpansion, w)-.15 F .171
+(ord splitting, and pathname e)-.1 F .171
+(xpansion can increase the number of w)-.15 F .171(ords of the e)-.1 F
+(x-)-.15 E .776(pansion; other e)108 568.8 R .776(xpansions e)-.15 F
+.776(xpand a single w)-.15 F .776(ord to a single w)-.1 F 3.276
+(ord. The)-.1 F .776(only e)3.276 F .776(xceptions to this are the e)
+-.15 F(x-)-.15 E .696(pansions of ")108 580.8 R F2($@)A F0 3.196("a)C
+.696(nd ")-3.196 F F2(${)A F1(name)A F2([@]})A F0 .696
+(", and, in most cases,)B F2($*)3.196 E F0(and)3.196 E F2(${)3.196 E F1
+(name)A F2([*]})A F0 .695(as e)3.196 F .695(xplained abo)-.15 F .995
+-.15(ve \()-.15 H(see).15 E/F4 9/Times-Bold@0 SF -.666(PA)3.195 G(-).666
+E(RAMETERS)108 592.8 Q/F5 9/Times-Roman@0 SF(\).)A F2(Brace Expansion)87
+609.6 Q F1(Br)108.58 621.6 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 633.6 Q F1 .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 .073(form of an optional)108 645.6 R F1(pr)3.823 E(eamble)
+-.37 E F0 2.573(,f).18 G(ollo)-2.573 E .073
+(wed by either a series of comma-separated strings or a sequence e)-.25
+F(xpres-)-.15 E .49(sion between a pair of braces, follo)108 657.6 R
+.489(wed by an optional)-.25 F F1(postscript)4.239 E F0 5.489(.T).68 G
+.489(he preamble is pre\214x)-5.489 F .489(ed to each string)-.15 F .659
+(contained within the braces, and the postscript is then appended to ea\
+ch resulting string, e)108 669.6 R .659(xpanding left to)-.15 F(right.)
+108 681.6 Q .719(Brace e)108 698.4 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 710.4 Q 2.5(ed. F)-.15 F(or e)-.15 E(xample, a)-.15 E F2({)A F0
+(d,c,b)A F2(})A F0 2.5(ee)C(xpands into `ade ace abe'.)-2.65 E 3.148(As)
+108 727.2 S .648(equence e)-3.148 F .648(xpression tak)-.15 F .649
+(es the form)-.1 F F2({)3.149 E F1(x)A F2(..)A F1(y)A F2([..)A F1(incr)A
+F2(]})A F0 3.149(,w)C(here)-3.149 E F1(x)3.149 E F0(and)3.149 E F1(y)
+3.149 E F0 .649(are either inte)3.149 F .649
+(gers or single letters, and)-.15 F(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(21)185.115 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/F1 10
+/Times-Italic@0 SF(incr)108 84 Q F0 2.615(,a)C 2.615(no)-2.615 G .115
+(ptional increment, is an inte)-2.615 F(ger)-.15 E 5.115(.W)-.55 G .115
+(hen inte)-5.115 F .115(gers are supplied, the e)-.15 F .115
+(xpression e)-.15 F .115(xpands to each num-)-.15 F 1.013(ber between)
+108 96 R F1(x)3.513 E F0(and)3.513 E F1(y)3.513 E F0 3.513(,i)C(nclusi)
+-3.513 E -.15(ve)-.25 G 6.013(.S).15 G 1.013(upplied inte)-6.013 F 1.013
+(gers may be pre\214x)-.15 F 1.013(ed with)-.15 F F1(0)3.513 E F0 1.013
+(to force each term to ha)3.513 F 1.314 -.15(ve t)-.2 H(he).15 E .015
+(same width.)108 108 R .015(When either)5.015 F F1(x)2.515 E F0(or)2.515
+E F1(y)2.515 E F0(be)2.515 E .014(gins with a zero, the shell attempts \
+to force all generated terms to contain)-.15 F 1.13
+(the same number of digits, zero-padding where necessary)108 120 R 6.131
+(.W)-.65 G 1.131(hen letters are supplied, the e)-6.131 F 1.131
+(xpression e)-.15 F(x-)-.15 E .485(pands to each character le)108 132 R
+.485(xicographically between)-.15 F F1(x)2.985 E F0(and)2.984 E F1(y)
+2.984 E F0 2.984(,i)C(nclusi)-2.984 E -.15(ve)-.25 G 2.984(,u).15 G .484
+(sing the def)-2.984 F .484(ault C locale.)-.1 F .484(Note that)5.484 F
+(both)108 144 Q F1(x)2.966 E F0(and)2.966 E F1(y)2.966 E F0 .467
+(must be of the same type \(inte)2.966 F .467(ger or letter\).)-.15 F
+.467(When the increment is supplied, it is used as the)5.467 F(dif)108
+156 Q(ference between each term.)-.25 E(The def)5 E
+(ault increment is 1 or \2551 as appropriate.)-.1 E .582(Brace e)108
+172.8 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 .015
+(are preserv)108 184.8 R .015(ed in the result.)-.15 F .015
+(It is strictly te)5.015 F(xtual.)-.15 E/F2 10/Times-Bold@0 SF(Bash)
+5.016 E F0 .016(does not apply an)2.516 F 2.516(ys)-.15 G .016
+(yntactic interpretation to the con-)-2.516 F(te)108 196.8 Q
+(xt of the e)-.15 E(xpansion or the te)-.15 E(xt between the braces.)
+-.15 E 2.502(Ac)108 213.6 S .002(orrectly-formed brace e)-2.502 F .001(\
+xpansion must contain unquoted opening and closing braces, and at least\
+ one un-)-.15 F .457(quoted comma or a v)108 225.6 R .458
+(alid sequence e)-.25 F 2.958(xpression. An)-.15 F 2.958(yi)-.15 G .458
+(ncorrectly formed brace e)-2.958 F .458(xpansion is left unchanged.)
+-.15 F(A)108 237.6 Q F2({)2.522 E F0(or)2.522 E F2(,)2.522 E F0 .022
+(may be quoted with a backslash to pre)2.522 F -.15(ve)-.25 G .021
+(nt its being considered part of a brace e).15 F 2.521(xpression. T)-.15
+F 2.521(oa)-.8 G -.2(vo)-2.721 G(id).2 E .172
+(con\215icts with parameter e)108 249.6 R .172(xpansion, the string)-.15
+F F2(${)2.672 E F0 .172(is not considered eligible for brace e)2.672 F
+.172(xpansion, and inhibits)-.15 F(brace e)108 261.6 Q
+(xpansion until the closing)-.15 E F2(})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 278.4 R(longer than in the abo)108 290.4 Q .3
+-.15(ve ex)-.15 H(ample:).15 E(mkdir /usr/local/src/bash/{old,ne)144
+307.2 Q -.65(w,)-.25 G(dist,b).65 E(ugs})-.2 E(or)108 319.2 Q(cho)144
+331.2 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 348 R .618
+(xpansion introduces a slight incompatibility with historical v)-.15 F
+.618(ersions of)-.15 F F2(sh)3.118 E F0(.)A F2(sh)5.618 E F0 .618
+(does not treat open-)3.118 F .248
+(ing or closing braces specially when the)108 360 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 F2(Bash)5.247 E F0(remo)108 372 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 F2(sh)
+3.53 E F0(as)3.53 E F1(\214le{1,2})108 384 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 F1 .514(\214le1 \214le2)4.925 F F0 .514(after e)
+3.034 F .514(xpansion by)-.15 F F2(bash)3.014 E F0(.)A .436
+(If strict compatibility with)108 396 R F2(sh)2.936 E F0 .436
+(is desired, start)2.936 F F2(bash)2.936 E F0 .436(with the)2.936 F F2
+(+B)2.936 E F0 .436(option or disable brace e)2.936 F .437
+(xpansion with the)-.15 F F2(+B)108 408 Q F0(option to the)2.5 E F2(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 F2 -.18(Ti)87 424.8 S
+(lde Expansion).18 E F0 1.087(If a w)108 436.8 R 1.087(ord be)-.1 F
+1.087(gins with an unquoted tilde character \(`)-.15 F F2(~)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 448.8 R F1(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 460.8 R .725
+(wing the tilde are treated as a possible)-.25 F F1(lo)108 472.8 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 484.8 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 496.8 Q .092
+(If the tilde-pre\214x is a `~+', the v)108 513.6 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 525.6 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 .879
+(tilde in the tilde-pre\214x consist of a number)108 537.6 R F1(N)3.379
+E F0 3.379(,o)C .879(ptionally pre\214x)-3.379 F .88
+(ed by a `+' or a `\255', the tilde-pre\214x is re-)-.15 F .138(placed \
+with the corresponding element from the directory stack, as it w)108
+549.6 R .138(ould be displayed by the)-.1 F F2(dirs)2.638 E F0 -.2(bu)
+2.638 G(iltin).2 E(in)108 561.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.838(dw).1 G
+.338(ith the tilde-pre\214x as an ar)-2.838 F 2.838(gument. If)-.18 F
+.338(the characters follo)2.838 F .338
+(wing the tilde in the tilde-pre\214x consist)-.25 F
+(of a number without a leading `+' or `\255', `+' is assumed.)108 573.6
+Q(If the login name is in)108 590.4 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 607.2 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 F2(:)2.667 E F0 .167(or the \214rst)2.667 F F2(=)
+2.666 E F0 5.166(.I)C(n)-5.166 E .467(these cases, tilde e)108 619.2 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 631.2 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 648 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 660 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 672 S(cept for the).15 E F1(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 F1
+(posix mode)2.5 E F0(.)A F2 -.1(Pa)87 688.8 S(rameter Expansion).1 E F0
+.2(The `)108 700.8 R F2($)A F0 2.7('c)C .199
+(haracter introduces parameter e)-2.7 F .199
+(xpansion, command substitution, or arithmetic e)-.15 F 2.699
+(xpansion. The)-.15 F(pa-)2.699 E .314(rameter name or symbol to be e)
+108 712.8 R .314
+(xpanded may be enclosed in braces, which are optional b)-.15 F .314
+(ut serv)-.2 F 2.814(et)-.15 G 2.814(op)-2.814 G(rotect)-2.814 E .415
+(the v)108 724.8 R .415(ariable to be e)-.25 F .415
+(xpanded from characters immediately follo)-.15 F .414
+(wing it which could be interpreted as part of)-.25 F(GNU Bash 5.2)72
+768 Q(2022 September 19)135.955 E(22)185.115 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(the name.)108 84 Q
+1.189(When braces are used, the matching ending brace is the \214rst `)
+108 100.8 R/F1 10/Times-Bold@0 SF(})A F0 3.69('n)C 1.19
+(ot escaped by a backslash or within a)-3.69 F .822
+(quoted string, and not within an embedded arithmetic e)108 112.8 R .821
+(xpansion, command substitution, or parameter e)-.15 F(x-)-.15 E
+(pansion.)108 124.8 Q(${)108 141.6 Q/F2 10/Times-Italic@0 SF(par)A
+(ameter)-.15 E F0(})A .106(The v)144 153.6 R .106(alue of)-.25 F F2(par)
+2.606 E(ameter)-.15 E F0 .106(is substituted.)2.606 F .106
+(The braces are required when)5.106 F F2(par)3.856 E(ameter)-.15 E F0
+.106(is a positional pa-)3.336 F .111
+(rameter with more than one digit, or when)144 165.6 R F2(par)3.861 E
+(ameter)-.15 E F0 .111(is follo)3.341 F .11
+(wed by a character which is not to be)-.25 F .208
+(interpreted as part of its name.)144 177.6 R(The)5.208 E F2(par)2.708 E
+(ameter)-.15 E F0 .208(is a shell parameter as described abo)2.708 F
+-.15(ve)-.15 G F1 -.74(PA)2.858 G(RAME-).74 E(TERS)144 189.6 Q 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 .347(If the \214rst character of)108 206.4 R F2(par)2.846 E
+(ameter)-.15 E F0 .346(is an e)2.846 F .346(xclamation point \()-.15 F
+F1(!)A F0 .346(\), and)B F2(par)2.846 E(ameter)-.15 E F0 .346(is not a)
+2.846 F F2(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 218.4 S -2.15 -.25(ev e)-2.906 H 2.906
+(lo).25 G 2.906(fi)-2.906 G(ndirection.)-2.906 E F1(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 F2(par)2.906 E(ameter)-.15 E F0 .406
+(as the ne)2.906 F(w)-.25 E F2(par)2.907 E(ame-)-.15 E(ter)108 230.4 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 242.4 Q F2(par)2.542 E(ameter)-.15 E F0 5.042(.T)C .042
+(his is kno)-5.042 F .042(wn as)-.25 F F2(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 254.4 S .249(pansion, command substitution, and arithmetic e).15
+F 2.749(xpansion. If)-.15 F F2(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 266.4 R F2(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 278.4 R .387
+(xceptions to this are the e)-.15 F .387(xpansions of ${)-.15 F F1(!)A
+F2(pr)A(e\214x)-.37 E F1(*)A F0 2.887(}a)C .387(nd ${)-2.887 F F1(!)A F2
+(name)A F0([)A F2(@)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
+290.4 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 307.2 R -.65(w,)-.25 G F2(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 319.2 Q(xpansion.)-.15 E .067
+(When not performing substring e)108 336 R .067
+(xpansion, using the forms documented belo)-.15 F 2.567(w\()-.25 G
+(e.g.,)-2.567 E F1(:-)2.567 E F0(\),)A F1(bash)2.567 E F0 .066
+(tests for a pa-)2.567 F(rameter that is unset or null.)108 348 Q(Omitt\
+ing the colon results in a test only for a parameter that is unset.)5 E
+(${)108 364.8 Q F2(par)A(ameter)-.15 E F1<3aad>A F2(wor)A(d)-.37 E F0(})
+A F1 .722(Use Default V)144 376.8 R(alues)-.92 E F0 5.722(.I)C(f)-5.722
+E F2(par)4.472 E(ameter)-.15 E F0 .723(is unset or null, the e)3.952 F
+.723(xpansion of)-.15 F F2(wor)3.563 E(d)-.37 E F0 .723(is substituted.)
+3.993 F(Other)5.723 E(-)-.2 E(wise, the v)144 388.8 Q(alue of)-.25 E F2
+(par)3.75 E(ameter)-.15 E F0(is substituted.)3.23 E(${)108 400.8 Q F2
+(par)A(ameter)-.15 E F1(:=)A F2(wor)A(d)-.37 E F0(})A F1 .812
+(Assign Default V)144 412.8 R(alues)-.92 E F0 5.812(.I)C(f)-5.812 E F2
+(par)4.562 E(ameter)-.15 E F0 .812(is unset or null, the e)4.042 F .812
+(xpansion of)-.15 F F2(wor)3.652 E(d)-.37 E F0 .812(is assigned to)4.082
+F F2(pa-)4.561 E -.15(ra)144 424.8 S(meter).15 E F0 5.741(.T).73 G .741
+(he v)-5.741 F .741(alue of)-.25 F F2(par)4.491 E(ameter)-.15 E F0 .742
+(is then substituted.)3.972 F .742
+(Positional parameters and special parame-)5.742 F
+(ters may not be assigned to in this w)144 436.8 Q(ay)-.1 E(.)-.65 E(${)
+108 448.8 Q F2(par)A(ameter)-.15 E F1(:?)A F2(wor)A(d)-.37 E F0(})A F1
+.535(Display Err)144 460.8 R .535(or if Null or Unset)-.18 F F0 5.535
+(.I)C(f)-5.535 E F2(par)4.285 E(ameter)-.15 E F0 .535
+(is null or unset, the e)3.765 F .535(xpansion of)-.15 F F2(wor)3.035 E
+(d)-.37 E F0 .535(\(or a mes-)3.035 F .012(sage to that ef)144 472.8 R
+.012(fect if)-.25 F F2(wor)2.852 E(d)-.37 E F0 .013(is not present\) is\
+ written to the standard error and the shell, if it is not in-)3.282 F
+(teracti)144 484.8 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 F2(par)2.5 E(ameter)-.15 E F0
+(is substituted.)2.5 E(${)108 496.8 Q F2(par)A(ameter)-.15 E F1(:+)A F2
+(wor)A(d)-.37 E F0(})A F1 .745(Use Alter)144 508.8 R .745(nate V)-.15 F
+(alue)-.92 E F0 5.745(.I)C(f)-5.745 E F2(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 520.8 Q F2(wor)2.84 E(d)-.37 E F0
+(is substituted.)3.27 E(${)108 532.8 Q F2(par)A(ameter)-.15 E F1(:)A F2
+(of)A(fset)-.18 E F0(})A(${)108 544.8 Q F2(par)A(ameter)-.15 E F1(:)A F2
+(of)A(fset)-.18 E F1(:)A F2(length)A F0(})A F1 .002(Substring Expansion)
+144 556.8 R F0 5.002(.E)C .002(xpands to up to)-5.002 F F2(length)2.502
+E F0 .002(characters of the v)2.502 F .002(alue of)-.25 F F2(par)2.502 E
+(ameter)-.15 E F0 .002(starting at the)2.502 F .004
+(character speci\214ed by)144 568.8 R F2(of)2.504 E(fset)-.18 E F0 5.003
+(.I)C(f)-5.003 E F2(par)2.503 E(ameter)-.15 E F0(is)2.503 E F1(@)2.503 E
+F0(or)2.503 E F1(*)2.503 E F0 2.503(,a)C 2.503(ni)-2.503 G(nde)-2.503 E
+-.15(xe)-.15 G 2.503(da).15 G .003(rray subscripted by)-2.503 F F1(@)
+2.503 E F0(or)2.503 E F1(*)2.503 E F0 2.503(,o)C 2.503(ra)-2.503 G(n)
+-2.503 E(associati)144 580.8 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 F2(length)3.222 E F0 .722(is omitted, e)
+3.222 F .722(xpands to the)-.15 F .043(substring of the v)144 592.8 R
+.043(alue of)-.25 F F2(par)2.543 E(ameter)-.15 E F0 .042
+(starting at the character speci\214ed by)2.543 F F2(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 604.8 R(alue.)-.25 E F2(length)5.846 E F0(and)3.346 E
+F2(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 616.8 Q(w\).)-.25 E
+(If)144 640.8 Q F2(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 652.8 R .045(alue of)-.25 F F2(par)2.546 E(ameter)
+-.15 E F0 5.046(.I)C(f)-5.046 E F2(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 664.8 Q .203(fset in characters from the end of the v)-.25 F
+.202(alue of)-.25 F F2(par)2.702 E(ameter)-.15 E F0 .202
+(rather than a number of characters, and)2.702 F .557(the e)144 676.8 R
+.557(xpansion is the characters between)-.15 F F2(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 688.8 Q -.2
+(vo)-.2 G(id being confused with the).2 E F1(:-)2.5 E F0 -.15(ex)2.5 G
+(pansion.).15 E(If)144 712.8 Q F2(par)3.284 E(ameter)-.15 E F0(is)3.284
+E F1(@)3.284 E F0(or)3.284 E F1(*)3.284 E F0 3.284(,t)C .784
+(he result is)-3.284 F F2(length)3.284 E F0 .784
+(positional parameters be)3.284 F .783(ginning at)-.15 F F2(of)3.283 E
+(fset)-.18 E F0 5.783(.A)C(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15(ve)
+-.25 G F2(of)144 724.8 Q(fset)-.18 E F0 1.551(is tak)4.051 F 1.551
+(en relati)-.1 F 1.851 -.15(ve t)-.25 H 4.051(oo).15 G 1.551
+(ne greater than the greatest positional parameter)-4.051 F 4.051(,s)-.4
+G 4.052(oa)-4.051 G 4.052(no)-4.052 G -.25(ff)-4.052 G 1.552
+(set of \2551).25 F(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E
+(23)185.115 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 -.25(eva)144 84 S
+.555(luates to the last positional parameter).25 F 5.555(.I)-.55 G 3.055
+(ti)-5.555 G 3.055(sa)-3.055 G 3.055(ne)-3.055 G .555(xpansion error if)
+-3.205 F/F1 10/Times-Italic@0 SF(length)3.055 E F0 -.25(eva)3.055 G .555
+(luates to a number).25 F(less than zero.)144 96 Q(If)144 120 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
+132 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 144 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 156 Q(Substring e)144 180 Q
+(xpansion applied to an associati)-.15 E .3 -.15(ve a)-.25 H
+(rray produces unde\214ned results.).15 E .821(Substring inde)144 204 R
+.821(xing is zero-based unless the positional parameters are used, in w\
+hich case the in-)-.15 F(de)144 216 Q .159(xing starts at 1 by def)-.15
+F 2.659(ault. If)-.1 F F1(of)2.659 E(fset)-.18 E F0 .159
+(is 0, and the positional parameters are used,)2.659 F/F2 10
+/Times-Bold@0 SF($0)2.659 E F0 .159(is pre\214x)2.659 F .159(ed to)-.15
+F(the list.)144 228 Q(${)108 244.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(*)A
+F0(})A(${)108 256.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(@)A F0(})A F2 .085
+(Names matching pr)144 268.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 280.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 292.8 Q
+(ariable name e)-.25 E(xpands to a separate w)-.15 E(ord.)-.1 E(${)108
+309.6 Q F2(!)A F1(name)A F0([)A F1(@)A F0(]})A(${)108 321.6 Q F2(!)A F1
+(name)A F0([)A F1(*)A F0(]})A F2 1.137(List of array k)144 333.6 R(eys)
+-.1 E F0 6.136(.I)C(f)-6.136 E F1(name)3.636 E F0 1.136(is an array v)
+3.636 F 1.136(ariable, e)-.25 F 1.136
+(xpands to the list of array indices \(k)-.15 F -.15(ey)-.1 G 1.136
+(s\) as-).15 F .397(signed in)144 345.6 R F1(name)2.897 E F0 5.397(.I)C
+(f)-5.397 E F1(name)2.897 E F0 .397(is not an array)2.897 F 2.897(,e)
+-.65 G .397(xpands to 0 if)-3.047 F F1(name)2.897 E F0 .397
+(is set and null otherwise.)2.897 F(When)5.397 E F1(@)2.897 E F0
+(is used and the e)144 357.6 Q
+(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 374.4 Q F2(#)A F1(par)A
+(ameter)-.15 E F0(})A F2 -.1(Pa)144 386.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 398.4 Q F0(is)3.626 E F2(*)
+2.896 E F0(or)2.896 E F2(@)2.896 E F0 2.896(,t)C .396(he v)-2.896 F .397
+(alue substituted is the number of positional parameters.)-.25 F(If)
+5.397 E F1(par)4.147 E(ameter)-.15 E F0 .397(is an ar)3.627 F(-)-.2 E
+.781(ray name subscripted by)144 410.4 R F2(*)3.281 E F0(or)3.281 E F2
+(@)3.281 E F0 3.281(,t)C .781(he v)-3.281 F .78
+(alue substituted is the number of elements in the array)-.25 F 5.78(.I)
+-.65 G(f)-5.78 E F1(par)145.25 422.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 434.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 446.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 463.2 Q F1
+(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)-.37 E F0(})A(${)108 475.2 Q F1
+(par)A(ameter)-.15 E F2(##)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 487.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 499.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 511.2 Q F2 -.1(Pa)3.132 G(tter).1 E 3.132(nM)-.15 G(atching)-3.132 E
+F0(belo)3.132 E 4.432 -.65(w. I)-.25 H 3.132(ft).65 G .632
+(he pattern matches the be)-3.132 F .632(ginning of the v)-.15 F .633
+(alue of)-.25 F F1(par)4.383 E(ameter)-.15 E F0(,).73 E 1.152
+(then the result of the e)144 523.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
+535.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 547.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 .303(sion is the resultant list.)144 559.2 R(If)
+5.303 E F1(par)4.053 E(ameter)-.15 E F0 .303(is an array v)3.533 F .303
+(ariable subscripted with)-.25 F F2(@)2.804 E F0(or)2.804 E F2(*)2.804 E
+F0 2.804(,t)C .304(he pattern re-)-2.804 F(mo)144 571.2 Q -.25(va)-.15 G
+2.988(lo).25 G .487
+(peration is applied to each member of the array in turn, and the e)
+-2.988 F .487(xpansion is the resultant)-.15 F(list.)144 583.2 Q(${)108
+600 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108 612
+Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144
+624 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 636
+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 648 S(tter).1
+E 3.314(nM)-.15 G(atching)-3.314 E F0(belo)3.314 E 4.614 -.65(w. I)-.25
+H 3.314(ft).65 G .814(he pattern matches a trailing portion of the e)
+-3.314 F .814(xpanded v)-.15 F .814(alue of)-.25 F F1(pa-)4.564 E -.15
+(ra)144 660 S(meter).15 E F0 3.817(,t).73 G 1.317
+(hen the result of the e)-3.817 F 1.317(xpansion is the e)-.15 F 1.317
+(xpanded v)-.15 F 1.316(alue of)-.25 F F1(par)5.066 E(ameter)-.15 E F0
+1.316(with the shortest)4.546 F 1.084(matching pattern \(the `)144 672 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
+684 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 696 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 708 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 720 Q
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(24)185.115 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(${)108 84 Q/F1 10
+/Times-Italic@0 SF(par)A(ameter)-.15 E/F2 10/Times-Bold@0 SF(/)A F1
+(pattern)A F2(/)A F1(string)A F0(})A(${)108 96 Q F1(par)A(ameter)-.15 E
+F2(//)A F1(pattern)A F2(/)A F1(string)A F0(})A(${)108 108 Q F1(par)A
+(ameter)-.15 E F2(/#)A F1(pattern)A F2(/)A F1(string)A F0(})A(${)108 120
+Q F1(par)A(ameter)-.15 E F2(/%)A F1(pattern)A F2(/)A F1(string)A F0(})A
+F2 -.1(Pa)144 132 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 144 Q F1 -.8(Pa)6.034 G -.15(ra).8 G(meter).15 E F0 1.034
+(is e)3.534 F 1.033(xpanded and the longest match of)-.15 F F1(pattern)
+3.533 E F0(ag)3.533 E 1.033(ainst its v)-.05 F 1.033
+(alue is replaced with)-.25 F F1(string)144 156 Q F0(.)A F1(string)5.499
+E F0(under)2.999 E .499(goes tilde e)-.18 F .499
+(xpansion, parameter and v)-.15 F .499(ariable e)-.25 F .499
+(xpansion, arithmetic e)-.15 F(xpansion,)-.15 E 1.137
+(command and process substitution, and quote remo)144 168 R -.25(va)-.15
+G 3.637(l. The).25 F 1.137(match is performed using the rules)3.637 F
+.075(described under)144 180 R F2 -.1(Pa)2.575 G(tter).1 E 2.575(nM)-.15
+G(atching)-2.575 E F0(belo)2.575 E 3.875 -.65(w. I)-.25 H 2.575(nt).65 G
+.075(he \214rst form abo)-2.575 F -.15(ve)-.15 G 2.575(,o).15 G .076
+(nly the \214rst match is replaced.)-2.575 F .48(If there are tw)144 192
+R 2.98(os)-.1 G .48(lashes separating)-2.98 F F1(par)2.98 E(ameter)-.15
+E F0(and)2.98 E F1(pattern)2.98 E F0 .48(\(the second form abo)2.98 F
+-.15(ve)-.15 G .48(\), all matches of).15 F F1(pattern)144 204 Q F0 .374
+(are replaced with)2.874 F F1(string)2.874 E F0 5.374(.I)C(f)-5.374 E F1
+(pattern)2.874 E F0 .374(is preceded by)2.874 F F2(#)2.874 E F0 .374
+(\(the third form abo)2.874 F -.15(ve)-.15 G .375(\), it must match).15
+F .089(at the be)144 216 R .089(ginning of the e)-.15 F .088(xpanded v)
+-.15 F .088(alue of)-.25 F F1(par)2.588 E(ameter)-.15 E F0 5.088(.I)C(f)
+-5.088 E F1(pattern)2.588 E F0 .088(is preceded by)2.588 F F2(%)2.588 E
+F0 .088(\(the fourth form)2.588 F(abo)144 228 Q -.15(ve)-.15 G .315
+(\), it must match at the end of the e).15 F .315(xpanded v)-.15 F .315
+(alue of)-.25 F F1(par)2.815 E(ameter)-.15 E F0 5.315(.I)C 2.815(ft)
+-5.315 G .315(he e)-2.815 F .315(xpansion of)-.15 F F1(string)2.815 E F0
+(is)2.815 E .399(null, matches of)144 240 R F1(pattern)2.899 E F0 .399
+(are deleted.)2.899 F(If)5.399 E F1(string)2.898 E F0 .398
+(is null, matches of)2.898 F F1(pattern)2.898 E F0 .398
+(are deleted and the)2.898 F F2(/)2.898 E F0(fol-)2.898 E(lo)144 252 Q
+(wing)-.25 E F1(pattern)2.5 E F0(may be omitted.)2.5 E .95(If the)144
+276 R F2(patsub_r)3.45 E(eplacement)-.18 E F0 .95
+(shell option is enabled using)3.45 F F2(shopt)3.45 E F0 3.45(,a)C 1.25
+-.15(ny u)-3.45 H .95(nquoted instances of).15 F F2(&)3.45 E F0(in)3.45
+E F1(string)144 288 Q F0(are replaced with the matching portion of)2.5 E
+F1(pattern)2.5 E F0(.)A .75(Quoting an)144 312 R 3.25(yp)-.15 G .75
+(art of)-3.25 F F1(string)3.25 E F0 .749(inhibits replacement in the e)
+3.249 F .749(xpansion of the quoted portion, including)-.15 F .767
+(replacement strings stored in shell v)144 324 R 3.267
+(ariables. Backslash)-.25 F .767(will escape)3.267 F F2(&)3.267 E F0(in)
+3.267 E F1(string)3.267 E F0 3.267(;t)C .768(he backslash is)-3.267 F
+(remo)144 336 Q -.15(ve)-.15 G 2.669(di).15 G 2.669(no)-2.669 G .169
+(rder to permit a literal)-2.669 F F2(&)2.669 E F0 .169
+(in the replacement string.)2.669 F .169
+(Backslash can also be used to es-)5.169 F 1.428(cape a backslash;)144
+348 R F2(\\\\)3.928 E F0 1.428
+(results in a literal backslash in the replacement.)3.928 F 1.428
+(Users should tak)6.428 F 3.929(ec)-.1 G 1.429(are if)-3.929 F F1
+(string)144 360 Q F0 .292(is double-quoted to a)2.792 F -.2(vo)-.2 G
+.292(id unw).2 F .292
+(anted interactions between the backslash and double-quoting,)-.1 F .053
+(since backslash has special meaning within double quotes.)144 372 R
+-.15(Pa)5.053 G .054(ttern substitution performs the check).15 F .07
+(for unquoted)144 384 R F2(&)2.57 E F0 .07(after e)2.57 F(xpanding)-.15
+E F1(string)2.569 E F0 2.569(;s)C .069(hell programmers should quote an)
+-2.569 F 2.569(yo)-.15 G .069(ccurrences of)-2.569 F F2(&)2.569 E F0
+(the)2.569 E(y)-.15 E -.1(wa)144 396 S 1.112(nt to be tak).1 F 1.112
+(en literally in the replacement and ensure an)-.1 F 3.612(yi)-.15 G
+1.112(nstances of)-3.612 F F2(&)3.612 E F0(the)3.612 E 3.613(yw)-.15 G
+1.113(ant to be re-)-3.713 F(placed are unquoted.)144 408 Q .687(If the)
+144 432 R F2(nocasematch)3.187 E F0 .687
+(shell option is enabled, the match is performed without re)3.187 F -.05
+(ga)-.15 G .687(rd to the case of).05 F .736(alphabetic characters.)144
+444 R(If)5.736 E F1(par)4.486 E(ameter)-.15 E F0(is)3.966 E F2(@)3.236 E
+F0(or)3.236 E F2(*)3.236 E F0 3.236(,t)C .736
+(he substitution operation is applied to each posi-)-3.236 F .655
+(tional parameter in turn, and the e)144 456 R .654
+(xpansion is the resultant list.)-.15 F(If)5.654 E F1(par)4.404 E
+(ameter)-.15 E F0 .654(is an array v)3.884 F(ariable)-.25 E .347
+(subscripted with)144 468 R F2(@)2.847 E F0(or)2.847 E F2(*)2.847 E F0
+2.847(,t)C .348(he substitution operation is applied to each member of \
+the array in turn,)-2.847 F(and the e)144 480 Q
+(xpansion is the resultant list.)-.15 E(${)108 496.8 Q F1(par)A(ameter)
+-.15 E F2(^)A F1(pattern)A F0(})A(${)108 508.8 Q F1(par)A(ameter)-.15 E
+F2(^^)A F1(pattern)A F0(})A(${)108 520.8 Q F1(par)A(ameter)-.15 E F2(,)A
+F1(pattern)A F0(})A(${)108 532.8 Q F1(par)A(ameter)-.15 E F2(,,)A F1
+(pattern)A F0(})A F2 .438(Case modi\214cation)144 544.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 556.8 Q
+F0 .373(is e)2.873 F .374
+(xpanded to produce a pattern just as in pathname e)-.15 F 2.874
+(xpansion. Each)-.15 F .374(character in the e)2.874 F(x-)-.15 E .514
+(panded v)144 568.8 R .514(alue of)-.25 F F1(par)3.014 E(ameter)-.15 E
+F0 .514(is tested ag)3.014 F(ainst)-.05 E F1(pattern)3.014 E F0 3.014
+(,a)C .513(nd, if it matches the pattern, its case is con-)-3.014 F -.15
+(ve)144 580.8 S 2.822(rted. The).15 F .323
+(pattern should not attempt to match more than one character)2.822 F
+5.323(.T)-.55 G(he)-5.323 E F2(^)2.823 E F0 .323(operator con)2.823 F
+-.15(ve)-.4 G(rts).15 E(lo)144 592.8 Q .181(wercase letters matching)
+-.25 F F1(pattern)2.681 E F0 .181(to uppercase; the)2.681 F F2(,)2.681 E
+F0 .181(operator con)2.681 F -.15(ve)-.4 G .18
+(rts matching uppercase letters).15 F .085(to lo)144 604.8 R 2.585
+(wercase. The)-.25 F F2(^^)2.585 E F0(and)2.585 E F2(,,)2.585 E F0 -.15
+(ex)2.585 G .085(pansions con).15 F -.15(ve)-.4 G .085
+(rt each matched character in the e).15 F .085(xpanded v)-.15 F .085
+(alue; the)-.25 F F2(^)2.585 E F0(and)144 616.8 Q F2(,)3.591 E F0 -.15
+(ex)3.591 G 1.091(pansions match and con).15 F -.15(ve)-.4 G 1.091
+(rt only the \214rst character in the e).15 F 1.09(xpanded v)-.15 F 3.59
+(alue. If)-.25 F F1(pattern)3.59 E F0(is)3.59 E 1.12
+(omitted, it is treated lik)144 628.8 R 3.62(ea)-.1 G F2(?)A F0 3.62(,w)
+C 1.12(hich matches e)-3.62 F -.15(ve)-.25 G 1.121(ry character).15 F
+6.121(.I)-.55 G(f)-6.121 E F1(par)4.871 E(ameter)-.15 E F0(is)4.351 E F2
+(@)3.621 E F0(or)3.621 E F2(*)3.621 E F0 3.621(,t)C 1.121(he case)-3.621
+F .339(modi\214cation operation is applied to each positional parameter\
+ in turn, and the e)144 640.8 R .339(xpansion is the re-)-.15 F .249
+(sultant list.)144 652.8 R(If)5.249 E F1(par)3.999 E(ameter)-.15 E F0
+.249(is an array v)3.479 F .249(ariable subscripted with)-.25 F F2(@)
+2.749 E F0(or)2.75 E F2(*)2.75 E F0 2.75(,t)C .25
+(he case modi\214cation oper)-2.75 F(-)-.2 E
+(ation is applied to each member of the array in turn, and the e)144
+664.8 Q(xpansion is the resultant list.)-.15 E(${)108 681.6 Q F1(par)A
+(ameter)-.15 E F2(@)A F1(oper)A(ator)-.15 E F0(})A F2 -.1(Pa)144 693.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 705.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
+717.6 Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(25)185.115 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/F1 10/Times-Bold@0
+SF(U)144 84 Q F0 .143(The e)180 84 R .142
+(xpansion is a string that is the v)-.15 F .142(alue of)-.25 F/F2 10
+/Times-Italic@0 SF(par)2.642 E(ameter)-.15 E F0 .142(with lo)2.642 F
+.142(wercase alphabetic charac-)-.25 F(ters con)180 96 Q -.15(ve)-.4 G
+(rted to uppercase.).15 E F1(u)144 108 Q F0 .429(The e)180 108 R .429
+(xpansion is a string that is the v)-.15 F .429(alue of)-.25 F F2(par)
+2.929 E(ameter)-.15 E F0 .43(with the \214rst character con)2.93 F -.15
+(ve)-.4 G(rted).15 E(to uppercase, if it is alphabetic.)180 120 Q F1(L)
+144 132 Q F0 .125(The e)180 132 R .124
+(xpansion is a string that is the v)-.15 F .124(alue of)-.25 F F2(par)
+2.624 E(ameter)-.15 E F0 .124(with uppercase alphabetic charac-)2.624 F
+(ters con)180 144 Q -.15(ve)-.4 G(rted to lo).15 E(wercase.)-.25 E F1(Q)
+144 156 Q F0 1.064(The e)180 156 R 1.064
+(xpansion is a string that is the v)-.15 F 1.065(alue of)-.25 F F2(par)
+3.565 E(ameter)-.15 E F0 1.065(quoted in a format that can be)3.565 F
+(reused as input.)180 168 Q F1(E)144 180 Q F0 .441(The e)180 180 R .441
+(xpansion is a string that is the v)-.15 F .441(alue of)-.25 F F2(par)
+2.941 E(ameter)-.15 E F0 .44(with backslash escape sequences)2.94 F -.15
+(ex)180 192 S(panded as with the).15 E F1($\010...\010)2.5 E F0
+(quoting mechanism.)2.5 E F1(P)144 204 Q F0 1.072(The e)180 204 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 F2(par)3.573 E(ameter)-.15 E
+F0 1.073(as if it)3.573 F(were a prompt string \(see)180 216 Q F1(PR)2.5
+E(OMPTING)-.3 E F0(belo)2.5 E(w\).)-.25 E F1(A)144 228 Q F0 1.138(The e)
+180 228 R 1.138
+(xpansion is a string in the form of an assignment statement or)-.15 F
+F1(declar)3.637 E(e)-.18 E F0(command)3.637 E(that, if e)180 240 Q -.25
+(va)-.25 G(luated, will recreate).25 E F2(par)2.5 E(ameter)-.15 E F0
+(with its attrib)2.5 E(utes and v)-.2 E(alue.)-.25 E F1(K)144 252 Q F0
+1.339(Produces a possibly-quoted v)180 252 R 1.339(ersion of the v)-.15
+F 1.339(alue of)-.25 F F2(par)3.839 E(ameter)-.15 E F0 3.839(,e)C 1.34
+(xcept that it prints the)-3.989 F -.25(va)180 264 S .258(lues of inde)
+.25 F -.15(xe)-.15 G 2.757(da).15 G .257(nd associati)-2.757 F .557 -.15
+(ve a)-.25 H .257(rrays as a sequence of quoted k).15 F -.15(ey)-.1 G
+(-v).15 E .257(alue pairs \(see)-.25 F F1(Ar)2.757 E(-)-.37 E(rays)180
+276 Q F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(a)144 288 Q F0(The e)180
+288 Q(xpansion is a string consisting of \215ag v)-.15 E
+(alues representing)-.25 E F2(par)2.5 E(ameter)-.15 E F0 1.1 -.55('s a)D
+(ttrib).55 E(utes.)-.2 E F1(k)144 300 Q F0(Lik)180 300 Q 2.657(et)-.1 G
+.157(he K transformation, b)-2.657 F .157(ut e)-.2 F .157(xpands the k)
+-.15 F -.15(ey)-.1 G 2.657(sa).15 G .157(nd v)-2.657 F .157
+(alues of inde)-.25 F -.15(xe)-.15 G 2.657(da).15 G .158(nd associati)
+-2.657 F .458 -.15(ve a)-.25 H -.2(r-).15 G(rays to separate w)180 312 Q
+(ords after w)-.1 E(ord splitting.)-.1 E(If)144 328.8 Q F2(par)4.403 E
+(ameter)-.15 E F0(is)3.883 E F1(@)3.153 E F0(or)3.153 E F1(*)3.153 E F0
+3.153(,t)C .653(he operation is applied to each positional parameter in\
+ turn, and the e)-3.153 F(x-)-.15 E .403(pansion is the resultant list.)
+144 340.8 R(If)5.403 E F2(par)4.153 E(ameter)-.15 E F0 .403
+(is an array v)3.633 F .403(ariable subscripted with)-.25 F F1(@)2.903 E
+F0(or)2.903 E F1(*)2.903 E F0 2.903(,t)C .403(he opera-)-2.903 F
+(tion is applied to each member of the array in turn, and the e)144
+352.8 Q(xpansion is the resultant list.)-.15 E .708(The result of the e)
+144 376.8 R .708(xpansion is subject to w)-.15 F .708
+(ord splitting and pathname e)-.1 F .708(xpansion as described be-)-.15
+F(lo)144 388.8 Q -.65(w.)-.25 G F1(Command Substitution)87 405.6 Q F2
+1.697(Command substitution)108 417.6 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 429.6 Q F1($\()144 446.4 Q F2
+(command)A F1(\))1.666 E F0(or)108 458.4 Q F1<92>144 470.4 Q F2(command)
+A F1<92>A(Bash)108 487.2 Q F0 .089(performs the e)2.589 F .089
+(xpansion by e)-.15 F -.15(xe)-.15 G(cuting).15 E F2(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 499.2 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 511.2 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 F1($\(cat)2.691 E F2(\214le)
+2.691 E F1(\))A F0(can be replaced by the equi)108 523.2 Q -.25(va)-.25
+G(lent b).25 E(ut f)-.2 E(aster)-.1 E F1($\(<)2.5 E F2(\214le)2.5 E F1
+(\))A F0(.)A 1.724(When the old-style backquote form of substitution is\
+ used, backslash retains its literal meaning e)108 540 R(xcept)-.15 E
+.315(when follo)108 552 R .315(wed by)-.25 F F1($)2.815 E F0(,)A F1<92>
+2.815 E F0 2.815(,o)C(r)-2.815 E F1(\\)2.815 E F0 5.315(.T)C .314(he \
+\214rst backquote not preceded by a backslash terminates the command su\
+b-)-5.315 F 3.886(stitution. When)108 564 R 1.386(using the $\()3.886 F
+F2(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 576 Q(.)-.65 E .894
+(Command substitutions may be nested.)108 592.8 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 604.8 Q .422
+(If the substitution appears within double quotes, w)108 621.6 R .422
+(ord splitting and pathname e)-.1 F .423(xpansion are not performed)-.15
+F(on the results.)108 633.6 Q F1(Arithmetic Expansion)87 650.4 Q F0
+1.035(Arithmetic e)108 662.4 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 674.4 Q(xpansion is:)-.15 E F1($\(\()
+144 691.2 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(\)\))A F0(The)108 708 Q
+F2 -.2(ex)2.735 G(pr).2 E(ession)-.37 E F0(under)2.975 E .235
+(goes the same e)-.18 F .236
+(xpansions as if it were within double quotes, b)-.15 F .236
+(ut double quote charac-)-.2 F 2.8(ters in)108 720 R F2 -.2(ex)5.3 G(pr)
+.2 E(ession)-.37 E F0 2.799(are not treated specially and are remo)5.3 F
+-.15(ve)-.15 G 5.299(d. All).15 F(tok)5.299 E 2.799(ens in the e)-.1 F
+2.799(xpression under)-.15 F(go)-.18 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(26)185.115 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 .919
+(parameter and v)108 84 R .919(ariable e)-.25 F .919
+(xpansion, command substitution, and quote remo)-.15 F -.25(va)-.15 G
+3.419(l. The).25 F .92(result is treated as the)3.419 F(arithmetic e)108
+96 Q(xpression to be e)-.15 E -.25(va)-.25 G 2.5(luated. Arithmetic).25
+F -.15(ex)2.5 G(pansions may be nested.).15 E 1.379(The e)108 112.8 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/F1 9/Times-Bold@0 SF 1.378(ARITHMETIC EV)3.878 F
+(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F2 9/Times-Roman@0 SF(.)A F0
+(If)5.878 E/F3 10/Times-Italic@0 SF -.2(ex)108 124.8 S(pr).2 E(ession)
+-.37 E F0(is in)2.74 E -.25(va)-.4 G(lid,).25 E/F4 10/Times-Bold@0 SF
+(bash)2.5 E F0(prints a message indicating f)2.5 E
+(ailure and no substitution occurs.)-.1 E F4(Pr)87 141.6 Q
+(ocess Substitution)-.18 E F3(Pr)108 153.6 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 165.6 Q F4(<\()3.251 E F3
+(list)A F4(\)).833 E F0(or)3.251 E F4(>\()3.251 E F3(list)A F4(\)).833 E
+F0 5.751(.T)C .751(he process)-5.751 F F3(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 177.6 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 F4(>\()2.648 E F3(list)A F4(\)).833 E
+F0 .56(form is used, writing to the \214le will pro)108 189.6 R .56
+(vide input for)-.15 F F3(list)3.059 E F0 5.559(.I)C 3.059(ft)-5.559 G
+(he)-3.059 E F4(<\()3.059 E F3(list)A F4(\)).833 E F0 .559
+(form is used, the \214le passed as an)3.059 F(ar)108 201.6 Q .308
+(gument should be read to obtain the output of)-.18 F F3(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 213.6 Q F3(FIFOs)A F0 2.5(\)o)C 2.5(rt)
+-2.5 G(he)-2.5 E F4(/de)2.5 E(v/fd)-.15 E F0
+(method of naming open \214les.)2.5 E .897(When a)108 230.4 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 242.4 Q(xpansion.)-.15 E F4
+-.75(Wo)87 259.2 S(rd Splitting).75 E F0 1.142
+(The shell scans the results of parameter e)108 271.2 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 283.2 Q
+F3(wor)2.84 E 2.5(ds)-.37 G(plitting)-2.5 E F0(.).22 E .063
+(The shell treats each character of)108 300 R F1(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 312 R(If)5.207 E F1(IFS)2.707 E F0 .207(is unset, or its v)2.457 F
+.207(alue is e)-.25 F(xactly)-.15 E F4(<space><tab><newline>)2.708 E F0
+(,)A .837(the def)108 324 R .837(ault, then sequences of)-.1 F F4
+(<space>)3.337 E F0(,)A F4(<tab>)3.337 E F0 3.337(,a)C(nd)-3.337 E F4
+(<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 336 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 F1(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 348 R 3.737(ords. If)-.1 F F1(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 F4(space)108
+360 Q F0(,)A F4(tab)2.506 E F0 2.506(,a)C(nd)-2.506 E F4(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 372 R .92(alue of)-.25 F F1(IFS)3.42 E F0(\(an)3.17
+E F1(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 F1(IFS)3.42 E F0 .92(that is not)3.17 F
+F1(IFS)3.42 E F0(whitespace,)3.17 E .428(along with an)108 384 R 2.928
+(ya)-.15 G(djacent)-2.928 E F1(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 F1(IFS)2.928 E F0 .429(whitespace charac-)2.679
+F(ters is also treated as a delimiter)108 396 Q 5(.I)-.55 G 2.5(ft)-5 G
+(he v)-2.5 E(alue of)-.25 E F1(IFS)2.5 E F0(is null, no w)2.25 E
+(ord splitting occurs.)-.1 E .783(Explicit null ar)108 412.8 R .783
+(guments \()-.18 F F4 .833("").833 G F0(or)2.449 E F4 .833<0808>4.115 G
+F0 3.282(\)a)C .782
+(re retained and passed to commands as empty strings.)-3.282 F .782
+(Unquoted im-)5.782 F .178(plicit null ar)108 424.8 R .179
+(guments, resulting from the e)-.18 F .179
+(xpansion of parameters that ha)-.15 F .479 -.15(ve n)-.2 H 2.679(ov).15
+G .179(alues, are remo)-2.929 F -.15(ve)-.15 G 2.679(d. If).15 F 2.679
+(ap)2.679 G(a-)-2.679 E .319(rameter with no v)108 436.8 R .319
+(alue is e)-.25 F .319(xpanded within double quotes, a null ar)-.15 F
+.319(gument results and is retained and passed)-.18 F
+(to a command as an empty string.)108 448.8 Q(When a quoted null ar)5 E
+.001(gument appears as part of a w)-.18 F .001(ord whose e)-.1 F
+(xpansion)-.15 E .984(is non-null, the null ar)108 460.8 R .984
+(gument is remo)-.18 F -.15(ve)-.15 G 3.483(d. That).15 F .983
+(is, the w)3.483 F(ord)-.1 E/F5 10/Courier@0 SF -5.167<ad64082008>3.483
+F F0(becomes)3.483 E F5<ad64>3.483 E F0 .983(after w)3.483 F .983
+(ord splitting and)-.1 F(null ar)108 472.8 Q(gument remo)-.18 E -.25(va)
+-.15 G(l.).25 E(Note that if no e)108 489.6 Q
+(xpansion occurs, no splitting is performed.)-.15 E F4 -.1(Pa)87 506.4 S
+(thname Expansion).1 E F0 .37(After w)108 518.4 R .37
+(ord splitting, unless the)-.1 F F4<ad66>2.87 E F0 .37
+(option has been set,)2.87 F F4(bash)2.87 E F0 .371(scans each w)2.871 F
+.371(ord for the characters)-.1 F F4(*)2.871 E F0(,)A F4(?)2.871 E F0
+2.871(,a)C(nd)-2.871 E F4([)2.871 E F0(.)A .634
+(If one of these characters appears, and is not quoted, then the w)108
+530.4 R .634(ord is re)-.1 F -.05(ga)-.15 G .633(rded as a).05 F F3
+(pattern)4.383 E F0 3.133(,a).24 G .633(nd replaced)-3.133 F 1.34(with \
+an alphabetically sorted list of \214lenames matching the pattern \(see)
+108 542.4 R F1 -.09(Pa)3.84 G(tter).09 E 3.59(nM)-.135 G(atching)-3.59 E
+F0(belo)3.59 E 3.84(w\). If)-.25 F(no)3.84 E .534
+(matching \214lenames are found, and the shell option)108 554.4 R F4
+(nullglob)3.034 E F0 .534(is not enabled, the w)3.034 F .534
+(ord is left unchanged.)-.1 F(If)5.534 E(the)108 566.4 Q F4(nullglob)
+3.284 E F0 .785(option is set, and no matches are found, the w)3.284 F
+.785(ord is remo)-.1 F -.15(ve)-.15 G 3.285(d. If).15 F(the)3.285 E F4
+(failglob)3.285 E F0 .785(shell option is)3.285 F .754(set, and no matc\
+hes are found, an error message is printed and the command is not e)108
+578.4 R -.15(xe)-.15 G 3.254(cuted. If).15 F .754(the shell)3.254 F
+(option)108 590.4 Q F4(nocaseglob)3.263 E F0 .763
+(is enabled, the match is performed without re)3.263 F -.05(ga)-.15 G
+.764(rd to the case of alphabetic characters.).05 F .039
+(When a pattern is used for pathname e)108 602.4 R .039
+(xpansion, the character)-.15 F F4 -.63(``)2.539 G -.55(.').63 G(')-.08
+E F0 .039(at the start of a name or immediately fol-)5.039 F(lo)108
+614.4 Q .19(wing a slash must be matched e)-.25 F(xplicitly)-.15 E 2.69
+(,u)-.65 G .19(nless the shell option)-2.69 F F4(dotglob)2.691 E F0 .191
+(is set.)2.691 F .191(In order to match the \214le-)5.191 F(names)108
+626.4 Q F4 -.63(``)3.645 G -.55(.').63 G(')-.08 E F0(and)6.145 E F4 -.63
+(``)3.645 G(..).63 E -.63('')-.55 G F0 3.645(,t).63 G 1.145
+(he pattern must be)-3.645 F 1.145(gin with `)-.15 F(`.)-.74 E 2.625
+-.74('' \()-.7 H 1.145(for e).74 F 1.145(xample, `)-.15 F(`.?')-.74 E
+1.145('\), e)-.74 F -.15(ve)-.25 G 3.645(ni).15 G(f)-3.645 E F4(dotglob)
+3.644 E F0 1.144(is set.)3.644 F 1.144(If the)6.144 F F4(globskipdots)
+108 638.4 Q F0 .153(shell option is enabled, the \214lenames)2.653 F F4
+-.63(``)2.653 G -.55(.').63 G(')-.08 E F0(and)5.153 E F4 -.63(``)2.654 G
+(..).63 E -.63('')-.55 G F0 .154(are ne)5.784 F -.15(ve)-.25 G 2.654(rm)
+.15 G .154(atched, e)-2.654 F -.15(ve)-.25 G 2.654(ni).15 G 2.654(ft)
+-2.654 G .154(he pattern be-)-2.654 F .12(gins with a)108 650.4 R F4
+-.63(``)2.62 G -.55(.').63 G(')-.08 E F0 5.12(.W)C .12
+(hen not matching pathnames, the)-5.12 F F4 -.63(``)2.62 G -.55(.').63 G
+(')-.08 E F0 .12(character is not treated specially)5.12 F 5.12(.W)-.65
+G .12(hen matching)-5.12 F 3.54(ap)108 662.4 S 1.04
+(athname, the slash character must al)-3.54 F -.1(wa)-.1 G 1.04
+(ys be matched e).1 F 1.041(xplicitly by a slash in the pattern, b)-.15
+F 1.041(ut in other)-.2 F .132(matching conte)108 674.4 R .132
+(xts it can be matched by a special pattern character as described belo)
+-.15 F 2.631(wu)-.25 G(nder)-2.631 E F1 -.09(Pa)2.631 G(tter).09 E 2.381
+(nM)-.135 G(atch-)-2.381 E(ing)108 686.4 Q F2(.)A F0 .605
+(See the description of)5.105 F F4(shopt)3.105 E F0(belo)3.105 E 3.106
+(wu)-.25 G(nder)-3.106 E F1 .606(SHELL B)3.106 F(UIL)-.09 E .606
+(TIN COMMANDS)-.828 F F0 .606(for a description of the)2.856 F F4(no-)
+3.106 E(caseglob)108 698.4 Q F0(,)A F4(nullglob)2.5 E F0(,)A F4
+(globskipdots)2.5 E F0(,)A F4(failglob)2.5 E F0 2.5(,a)C(nd)-2.5 E F4
+(dotglob)2.5 E F0(shell options.)2.5 E(The)108 715.2 Q F1(GLOBIGNORE)
+2.562 E F0 .062(shell v)2.312 F .061
+(ariable may be used to restrict the set of \214le names matching a)-.25
+F F3(pattern)3.811 E F0 5.061(.I).24 G(f)-5.061 E F1(GLO-)2.561 E
+(BIGNORE)108 727.2 Q F0 2.015(is set, each matching \214le name that al\
+so matches one of the patterns in)4.264 F F1(GLOBIGNORE)4.515 E F0(is)
+4.265 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(27)185.115 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(remo)108 84 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 10/Times-Bold@0 SF(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 9/Times-Bold@0 SF(GLOBIGNORE)108 96 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
+108 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 120 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 132 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 9/Times-Roman@0 SF(.)A F0(The)108 144 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 156 Q F1
+(extglob)2.5 E F0(shell option.)2.5 E F1 -.1(Pa)108 172.8 S(tter).1 E
+2.5(nM)-.15 G(atching)-2.5 E F0(An)108 189.6 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 2.721
+(itself. The)108 201.6 R .221(NUL character may not occur in a pattern.)
+2.721 F 2.721(Ab)5.221 G .221(ackslash escapes the follo)-2.721 F .222
+(wing character; the es-)-.25 F .418
+(caping backslash is discarded when matching.)108 213.6 R .418
+(The special pattern characters must be quoted if the)5.418 F 2.918(ya)
+-.15 G .418(re to)-2.918 F(be matched literally)108 225.6 Q(.)-.65 E
+(The special pattern characters ha)108 242.4 Q .3 -.15(ve t)-.2 H
+(he follo).15 E(wing meanings:)-.25 E F1(*)144 259.2 Q F0 .376
+(Matches an)180 259.2 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 271.2
+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 283.2 R 1.058(If follo)6.058 F 1.058(wed by a)-.25 F F1(/)3.558 E
+F0(,)A(tw)180 295.2 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 307.2 Q
+F0(Matches an)180 307.2 Q 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E
+F1([...])144 319.2 Q F0 .579(Matches an)180 319.2 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 331.2 R/F4 10/Times-Italic@0 SF -.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 343.2 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 355.2 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 1.045
+(The sorting order of characters in range e)180 367.2 R 1.044
+(xpressions, and the characters included in the)-.15 F 2.34
+(range, are determined by the current locale and the v)180 379.2 R 2.341
+(alues of the)-.25 F F2(LC_COLLA)4.841 E(TE)-.855 E F0(or)4.591 E F2
+(LC_ALL)180 391.2 Q F0 1.079(shell v)3.329 F 1.079(ariables, if set.)
+-.25 F 2.679 -.8(To o)6.079 H 1.079
+(btain the traditional interpretation of range e).8 F(xpres-)-.15 E .392
+(sions, where)180 403.2 R F1([a\255d])2.892 E F0 .392(is equi)2.892 F
+-.25(va)-.25 G .392(lent to).25 F F1([abcd])2.893 E F0 2.893(,s)C .393
+(et v)-2.893 F .393(alue of the)-.25 F F1(LC_ALL)2.893 E F0 .393
+(shell v)2.893 F .393(ariable to)-.25 F F1(C)2.893 E F0(,)A .9
+(or enable the)180 415.2 R F1(globasciiranges)3.4 E F0 .9(shell option.)
+3.4 F(A)5.899 E F1<ad>3.399 E F0 .899
+(may be matched by including it as the)3.399 F .405
+(\214rst or last character in the set.)180 427.2 R(A)5.405 E F1(])2.905
+E F0 .405(may be matched by including it as the \214rst character)2.905
+F(in the set.)180 439.2 Q -.4(Wi)180 457.2 S(thin).4 E F1([)3.071 E F0
+(and)3.071 E F1(])3.071 E F0(,)A F4 -.15(ch)3.071 G(ar).15 E .571
+(acter classes)-.15 F F0 .571(can be speci\214ed using the syntax)3.071
+F F1([:)3.07 E F4(class)A F1(:])A F0 3.07(,w)C(here)-3.07 E F4(class)
+3.07 E F0(is one of the follo)180 469.2 Q
+(wing classes de\214ned in the POSIX standard:)-.25 E F1 5.889
+(alnum alpha ascii blank cntrl digit graph lo)180 481.2 R 5.889
+(wer print punct space up-)-.1 F 5(per w)180 493.2 R 5(ord xdigit)-.1 F
+F0 4.29(Ac)180 505.2 S 1.789(haracter class matches an)-4.29 F 4.289(yc)
+-.15 G 1.789(haracter belonging to that class.)-4.289 F(The)6.789 E F1
+-.1(wo)4.289 G(rd).1 E F0(character)4.289 E
+(class matches letters, digits, and the character _.)180 517.2 Q -.4(Wi)
+180 535.2 S(thin).4 E F1([)4.536 E F0(and)4.536 E F1(])4.536 E F0 4.536
+(,a)C(n)-4.536 E F4 2.036(equivalence class)4.536 F F0 2.037
+(can be speci\214ed using the syntax)4.536 F F1([=)4.537 E F4(c)A F1(=])
+A F0 4.537(,w)C(hich)-4.537 E .125(matches all characters with the same\
+ collation weight \(as de\214ned by the current locale\) as)180 547.2 R
+(the character)180 559.2 Q F4(c)2.5 E F0(.)A -.4(Wi)180 577.2 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 .539(If the)108 594 R F1(extglob)3.039 E F0 .539
+(shell option is enabled using the)3.039 F F1(shopt)3.039 E F0 -.2(bu)
+3.039 G .54(iltin, the shell recognizes se).2 F -.15(ve)-.25 G .54
+(ral e).15 F .54(xtended pattern)-.15 F .038(matching operators.)108 606
+R .038(In the follo)5.038 F .038(wing description, a)-.25 F F4
+(pattern-list)2.538 E F0 .037
+(is a list of one or more patterns separated by)2.538 F(a)108 618 Q F1
+(|)2.5 E F0 5(.C)C
+(omposite patterns may be formed using one or more of the follo)-5 E
+(wing sub-patterns:)-.25 E F1(?\()144 642 Q F4(pattern-list).833 E F1
+(\)).833 E F0(Matches zero or one occurrence of the gi)180 654 Q -.15
+(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(*\()144 666 Q F4(pattern-list)
+.833 E F1(\)).833 E F0(Matches zero or more occurrences of the gi)180
+678 Q -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(+\()144 690 Q F4
+(pattern-list).833 E F1(\)).833 E F0
+(Matches one or more occurrences of the gi)180 702 Q -.15(ve)-.25 G 2.5
+(np).15 G(atterns)-2.5 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955
+E(28)185.115 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(@\()144 84 Q/F2 10/Times-Italic@0 SF(pattern-list).833 E F1(\)).833 E
+F0(Matches one 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 an)180 120 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(The)108 136.8 Q F1(extglob)A F0
+.477(option changes the beha)2.977 F .477(vior of the parser)-.2 F 2.977
+(,s)-.4 G .478(ince the parentheses are normally treated as opera-)
+-2.977 F .105(tors with syntactic meaning.)108 148.8 R 1.705 -.8(To e)
+5.105 H .105(nsure that e).8 F .105
+(xtended matching patterns are parsed correctly)-.15 F 2.604(,m)-.65 G
+(ak)-2.604 E 2.604(es)-.1 G .104(ure that)-2.604 F F1(extglob)108 160.8
+Q F0 1.355(is enabled before parsing constructs containing the patterns\
+, including shell functions and com-)3.854 F(mand substitutions.)108
+172.8 Q .988(When matching \214lenames, the)108 189.6 R F1(dotglob)3.488
+E F0 .988
+(shell option determines the set of \214lenames that are tested: when)
+3.488 F F1(dotglob)108 201.6 Q F0 1.391
+(is enabled, the set of \214lenames includes all \214les be)3.891 F
+1.392(ginning with `)-.15 F(`.)-.74 E -.74('')-.7 G 3.892(,b).74 G 1.392
+(ut `)-4.092 F(`.)-.74 E 2.872 -.74('' a)-.7 H 1.392(nd `).74 F(`..)-.74
+E 2.872 -.74('' m)-.7 H 1.392(ust be).74 F .298
+(matched by a pattern or sub-pattern that be)108 213.6 R .298
+(gins with a dot; when it is disabled, the set does not include an)-.15
+F(y)-.15 E .327(\214lenames be)108 225.6 R .327(ginning with `)-.15 F
+(`.)-.74 E 1.807 -.74('' u)-.7 H .327
+(nless the pattern or sub-pattern be).74 F .327(gins with a `)-.15 F(`.)
+-.74 E -.74('')-.7 G 5.327(.A).74 G 2.827(sa)-5.327 G(bo)-2.827 E -.15
+(ve)-.15 G 2.828(,`).15 G(`.)-3.568 E 1.808 -.74('' o)-.7 H .328
+(nly has a).74 F(special meaning when matching \214lenames.)108 237.6 Q
+.969(Complicated e)108 254.4 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 .09
+(alternations and the strings contain multiple matches.)108 266.4 R .091
+(Using separate matches ag)5.091 F .091(ainst shorter strings, or us-)
+-.05 F(ing arrays of strings instead of a single long string, may be f)
+108 278.4 Q(aster)-.1 E(.)-.55 E F1(Quote Remo)87 295.2 Q -.1(va)-.1 G
+(l).1 E F0 1.113(After the preceding e)108 307.2 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 319.2 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 336 Q F0 .545
+(Before a command is e)108 348 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 .429
+(by the shell.)108 360 R F2(Redir)5.428 E(ection)-.37 E F0(allo)2.928 E
+.428(ws commands' \214le handles to be duplicated, opened, closed, made\
+ to refer to)-.25 F(dif)108 372 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 384 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 .862(may precede or appear an)108
+396 R .862(ywhere within a)-.15 F F2 .862(simple command)3.702 F F0 .862
+(or may follo)4.132 F 3.362(wa)-.25 G F2(command).2 E F0 5.862(.R).77 G
+.862(edirections are)-5.862 F(processed in the order the)108 408 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 424.8 R .771(ord of)-.1 F .292(the form {)
+108 436.8 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 448.8 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 460.8 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
+.794(persists be)108 472.8 R .794(yond the scope of the command, allo)
+-.15 F .793(wing the shell programmer to manage the \214le descriptor')
+-.25 F(s)-.55 E(lifetime manually)108 484.8 Q 5(.T)-.65 G(he)-5 E F1 -.1
+(va)2.5 G(rr).1 E(edir_close)-.18 E F0(shell option manages this beha)
+2.5 E(vior)-.2 E(.)-.55 E .283(In the follo)108 501.6 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 513.6 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 525.6 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 542.4 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 554.4 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 566.4 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 578.4 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 595.2 Q -.15
+(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 612 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 628.8
+Q F2(dirlist)2.85 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144
+645.6 Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .505
+(directs only the standard output to \214le)108 662.4 R F2(dirlist)3.355
+E F0 3.005(,b).68 G .505(ecause the standard error w)-3.005 F .505
+(as duplicated from the standard)-.1 F
+(output before the standard output w)108 674.4 Q(as redirected to)-.1 E
+F2(dirlist)2.85 E F0(.).68 E F1(Bash)108 691.2 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 703.2 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 715.2 Q
+(vior described belo)-.2 E -.65(w.)-.25 G(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(29)185.115 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(/de)144 84 Q(v/fd/)-.15 E/F2 10/Times-Italic@0 SF(fd)A F0(If)180 96 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 F1(/de)144 108
+Q(v/stdin)-.15 E F0(File descriptor 0 is duplicated.)180 120 Q F1(/de)
+144 132 Q(v/stdout)-.15 E F0(File descriptor 1 is duplicated.)180 144 Q
+F1(/de)144 156 Q(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180
+168 Q F1(/de)144 180 Q(v/tcp/)-.15 E F2(host)A F1(/)A F2(port)A F0(If)
+180 192 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 204 Q F1(bash)2.5 E F0
+(attempts to open the corresponding TCP sock)2.5 E(et.)-.1 E F1(/de)144
+216 Q(v/udp/)-.15 E F2(host)A F1(/)A F2(port)A F0(If)180 228 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 240 Q F1(bash)2.5 E F0
+(attempts to open the corresponding UDP sock)2.5 E(et.)-.1 E 2.5(Af)108
+256.8 S(ailure to open or create a \214le causes the redirection to f)
+-2.6 E(ail.)-.1 E .045(Redirections using \214le descriptors greater th\
+an 9 should be used with care, as the)108 273.6 R 2.546(ym)-.15 G .046
+(ay con\215ict with \214le de-)-2.546 F
+(scriptors the shell uses internally)108 285.6 Q(.)-.65 E F1(Redir)87
+302.4 Q(ecting Input)-.18 E F0 .391
+(Redirection of input causes the \214le whose name results from the e)
+108 314.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 326.4 Q F2
+(n)2.86 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 343.2 Q([)144 360 Q F2
+(n)A F0(])A F1(<)A F2(wor)A(d)-.37 E F1(Redir)87 376.8 Q(ecting Output)
+-.18 E F0 .174
+(Redirection of output causes the \214le whose name results from the e)
+108 388.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 .084(ing on \214le descriptor)108 400.8
+R F2(n)2.944 E F0 2.583(,o).24 G 2.583(rt)-2.583 G .083
+(he standard output \(\214le descriptor 1\) if)-2.583 F F2(n)2.943 E F0
+.083(is not speci\214ed.)2.823 F .083(If the \214le does not e)5.083 F
+(x-)-.15 E(ist it is created; if it does e)108 412.8 Q
+(xist it is truncated to zero size.)-.15 E
+(The general format for redirecting output is:)108 429.6 Q([)144 446.4 Q
+F2(n)A F0(])A F1(>)A F2(wor)A(d)-.37 E F0 .154
+(If the redirection operator is)108 463.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 475.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 487.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
+499.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
+516 S(pending Redir).25 E(ected Output)-.18 E F0 .642
+(Redirection of output in this f)108 528 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 .454
+(opened for appending on \214le descriptor)108 540 R F2(n)3.315 E F0
+2.955(,o).24 G 2.955(rt)-2.955 G .455
+(he standard output \(\214le descriptor 1\) if)-2.955 F F2(n)3.315 E F0
+.455(is not speci\214ed.)3.195 F(If)5.455 E(the \214le does not e)108
+552 Q(xist it is created.)-.15 E
+(The general format for appending output is:)108 568.8 Q([)144 585.6 Q
+F2(n)A F0(])A F1(>>)A F2(wor)A(d)-.37 E F1(Redir)87 602.4 Q
+(ecting Standard Output and Standard Err)-.18 E(or)-.18 E F0 .249
+(This construct allo)108 614.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
+626.4 Q(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E
+(There are tw)108 643.2 Q 2.5(of)-.1 G
+(ormats for redirecting standard output and standard error:)-2.5 E F1
+(&>)144 660 Q F2(wor)A(d)-.37 E F0(and)108 672 Q F1(>&)144 684 Q F2(wor)
+A(d)-.37 E F0(Of the tw)108 700.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 717.6 Q F2(wor)A(d)-.37 E F0(2)2.5
+E F1(>&)A F0(1)A(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(30)
+185.115 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 .114
+(When using the second form,)108 84 R/F1 10/Times-Italic@0 SF(wor)2.614
+E(d)-.37 E F0 .114(may not e)2.614 F .114(xpand to a number or)-.15 F/F2
+10/Times-Bold@0 SF<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
+96 Q F2(Duplicating File Descriptors)2.5 E F0(belo)2.5 E
+(w\) for compatibility reasons.)-.25 E F2 -.25(Ap)87 112.8 S
+(pending Standard Output and Standard Err).25 E(or)-.18 E F0 .249
+(This construct allo)108 124.8 R .249(ws both the standard output \(\
+\214le descriptor 1\) and the standard error output \(\214le descrip-)
+-.25 F(tor 2\) to be appended to the \214le whose name is the e)108
+136.8 Q(xpansion of)-.15 E F1(wor)2.84 E(d)-.37 E F0(.).77 E
+(The format for appending standard output and standard error is:)108
+153.6 Q F2(&>>)144 170.4 Q F1(wor)A(d)-.37 E F0
+(This is semantically equi)108 187.2 Q -.25(va)-.25 G(lent to).25 E F2
+(>>)144 204 Q F1(wor)A(d)-.37 E F0(2)2.5 E F2(>&)A F0(1)A(\(see)108
+220.8 Q F2(Duplicating File Descriptors)2.5 E F0(belo)2.5 E(w\).)-.25 E
+F2(Her)87 237.6 Q 2.5(eD)-.18 G(ocuments)-2.5 E F0 .33(This type of red\
+irection instructs the shell to read input from the current source unti\
+l a line containing only)108 249.6 R F1(delimiter)108.35 261.6 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 273.6 Q F1(n)2.5 E F0(if)2.5 E
+F1(n)2.5 E F0(is speci\214ed\) for a command.)2.5 E
+(The format of here-documents is:)108 290.4 Q([)144 307.2 Q F1(n)A F0(])
+A F2(<<)A F0([)A F2<ad>A F0(])A F1(wor)A(d)-.37 E(her)164 319.2 Q
+(e-document)-.37 E(delimiter)144 331.2 Q F0 .301(No parameter and v)108
+348 R .302(ariable e)-.25 F .302
+(xpansion, command substitution, arithmetic e)-.15 F .302
+(xpansion, or pathname e)-.15 F(xpansion)-.15 E .381(is performed on)108
+360 R F1(wor)3.221 E(d)-.37 E F0 5.381(.I).77 G 2.881(fa)-5.381 G .681
+-.15(ny p)-2.881 H .381(art of).15 F F1(wor)3.221 E(d)-.37 E F0 .381
+(is quoted, the)3.651 F F1(delimiter)3.231 E F0 .381
+(is the result of quote remo)3.611 F -.25(va)-.15 G 2.881(lo).25 G(n)
+-2.881 E F1(wor)3.221 E(d)-.37 E F0(,).77 E .773
+(and the lines in the here-document are not e)108 372 R 3.274
+(xpanded. If)-.15 F F1(wor)3.274 E(d)-.37 E F0 .774
+(is unquoted, all lines of the here-document)3.274 F 1.195
+(are subjected to parameter e)108 384 R 1.194
+(xpansion, command substitution, and arithmetic e)-.15 F 1.194
+(xpansion, the character se-)-.15 F(quence)108 396 Q F2(\\<newline>)2.5
+E F0(is ignored, and)2.5 E F2(\\)2.5 E F0
+(must be used to quote the characters)2.5 E F2(\\)2.5 E F0(,)A F2($)2.5
+E F0 2.5(,a)C(nd)-2.5 E F2<92>2.5 E F0(.)A .601
+(If the redirection operator is)108 412.8 R F2(<<\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 424.8 Q F1(delimiter)2.85 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 F2(Her)87 441.6 Q 2.5(eS)-.18 G(trings)-2.5 E F0
+2.5(Av)108 453.6 S(ariant of here documents, the format is:)-2.75 E([)
+144 470.4 Q F1(n)A F0(])A F2(<<<)A F1(wor)A(d)-.37 E F0(The)108 487.2 Q
+F1(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 499.2 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 511.2 R .374(wline appended\
+, to the command on its standard input \(or \214le descrip-)-.25 F(tor)
+108 523.2 Q F1(n)2.5 E F0(if)2.5 E F1(n)2.5 E F0(is speci\214ed\).)2.5 E
+F2(Duplicating File Descriptors)87 540 Q F0(The redirection operator)108
+552 Q([)144 568.8 Q F1(n)A F0(])A F2(<&)A F1(wor)A(d)-.37 E F0 .126
+(is used to duplicate input \214le descriptors.)108 585.6 R(If)5.127 E
+F1(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
+597.6 Q F1(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 F1(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 609.6 R(If)5.149 E F1(wor)
+2.989 E(d)-.37 E F0 -.25(eva)3.419 G .149(luates to).25 F F2<ad>2.649 E
+F0 2.65<2c8c>C .15(le descriptor)-2.65 F F1(n)3.01 E F0 .15(is closed.)
+2.89 F(If)5.15 E F1(n)3.01 E F0 .15(is not speci\214ed,)2.89 F
+(the standard input \(\214le descriptor 0\) is used.)108 621.6 Q
+(The operator)108 638.4 Q([)144 655.2 Q F1(n)A F0(])A F2(>&)A F1(wor)A
+(d)-.37 E F0 .444
+(is used similarly to duplicate output \214le descriptors.)108 672 R(If)
+5.444 E F1(n)3.304 E F0 .443
+(is not speci\214ed, the standard output \(\214le descrip-)3.183 F .565
+(tor 1\) is used.)108 684 R .565(If the digits in)5.565 F F1(wor)3.406 E
+(d)-.37 E F0 .566(do not specify a \214le descriptor open for output, a\
+ redirection error oc-)3.836 F 3.204(curs. If)108 696 R F1(wor)3.544 E
+(d)-.37 E F0 -.25(eva)3.974 G .704(luates to).25 F F2<ad>3.204 E F0
+3.204<2c8c>C .704(le descriptor)-3.204 F F1(n)3.563 E F0 .703
+(is closed.)3.443 F .703(As a special case, if)5.703 F F1(n)3.203 E F0
+.703(is omitted, and)3.203 F F1(wor)3.203 E(d)-.37 E F0(does)3.203 E
+.965(not e)108 708 R .965(xpand to one or more digits or)-.15 F F2<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 720 Q(viously)-.25 E(.)-.65 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(31)185.115 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-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.018(st).15 G .518
+(he \214le descriptor)-3.018 F F2(digit)3.018 E F0 .518
+(to \214le descriptor)3.018 F F2(n)3.378 E F0 3.018(,o).24 G 3.018(rt)
+-3.018 G .517(he standard input \(\214le descriptor 0\) if)-3.018 F F2
+(n)3.017 E F0 .517(is not speci-)3.017 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.767(st).15 G .267(he \214le descriptor)-2.767 F F2
+(digit)2.767 E F0 .267(to \214le descriptor)2.767 F F2(n)3.127 E F0
+2.767(,o).24 G 2.767(rt)-2.767 G .268
+(he standard output \(\214le descriptor 1\) if)-2.767 F F2(n)2.768 E F0
+.268(is not speci-)2.768 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 .518(causes the \214le whose name is the e)108
+266.4 R .518(xpansion of)-.15 F F2(wor)3.358 E(d)-.37 E F0 .518
+(to be opened for both reading and writing on \214le de-)3.788 F
+(scriptor)108 278.4 Q F2(n)2.86 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 .528(to recursi)108 403.2 R
+-.15(ve)-.25 G .528(ly e).15 F .528(xpand the replacement te)-.15 F
+3.028(xt. If)-.15 F .528(the last character of the alias v)3.028 F .529
+(alue is a)-.25 F F2(blank)3.299 E F0 3.029(,t).67 G .529(hen the ne)
+-3.029 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 .742
+(There is no mechanism for using ar)108 448.8 R .741
+(guments in the replacement te)-.18 F 3.241(xt. If)-.15 F(ar)3.241 E
+.741(guments are needed, use a shell)-.18 F(function \(see)108 460.8 Q
+F4(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E .282(Aliases are not e)108
+477.6 R .282(xpanded when the shell is not interacti)-.15 F -.15(ve)-.25
+G 2.782(,u).15 G .282(nless the)-2.782 F F1(expand_aliases)2.783 E F0
+.283(shell option is set us-)2.783 F(ing)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 .551(not af)108
+566.4 R .551(fected by the ne)-.25 F 3.051(wa)-.25 G 3.051(lias. This)
+-3.051 F(beha)3.051 E .551(vior is also an issue when functions are e)
+-.2 F -.15(xe)-.15 G 3.051(cuted. Aliases).15 F .552(are e)3.052 F(x-)
+-.15 E .426(panded when a function de\214nition is read, not when the f\
+unction is e)108 578.4 R -.15(xe)-.15 G .425
+(cuted, because a function de\214nition).15 F .403(is itself a command.)
+108 590.4 R .403
+(As a consequence, aliases de\214ned in a function are not a)5.403 F
+-.25(va)-.2 G .404(ilable until after that func-).25 F .862(tion is e)
+108 602.4 R -.15(xe)-.15 G 3.362(cuted. T).15 F 3.362(ob)-.8 G 3.362(es)
+-3.362 G .862(afe, al)-3.362 F -.1(wa)-.1 G .862
+(ys put alias de\214nitions on a separate line, and do not use).1 F F1
+(alias)3.362 E F0 .862(in com-)3.362 F(pound 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.2)72 768 Q
+(2022 September 19)135.955 E(32)185.115 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(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 .368
+(riables local to the function may be declared with the)1.11 F F2(local)
+2.868 E F0 -.2(bu)2.868 G .368(iltin command \().2 F/F3 10
+/Times-Italic@0 SF .368(local variables)B F0 2.868(\). Ordinar)B(-)-.2 E
+(ily)108 189.6 Q 2.88(,v)-.65 G .38(ariables and their v)-3.13 F .38
+(alues are shared between the function and its caller)-.25 F 5.38(.I)
+-.55 G 2.88(fav)-5.38 G .38(ariable is declared)-3.13 F F2(local)2.88 E
+F0(,)A(the v)108 201.6 Q(ariable')-.25 E 2.5(sv)-.55 G(isible scope is \
+restricted to that function and its children \(including the functions \
+it calls\).)-2.5 E .727(In the follo)108 218.4 R .727
+(wing description, the)-.25 F F3(curr)3.227 E .727(ent scope)-.37 F F0
+.726(is a currently- e)3.226 F -.15(xe)-.15 G .726(cuting function.).15
+F(Pre)5.726 E .726(vious scopes consist)-.25 F 1.003(of that function')
+108 230.4 R 3.503(sc)-.55 G 1.004
+(aller and so on, back to the "global" scope, where the shell is not e)
+-3.503 F -.15(xe)-.15 G 1.004(cuting an).15 F 3.504(ys)-.15 G(hell)
+-3.504 E 3.41(function. Consequently)108 242.4 R 3.41(,al)-.65 G .91
+(ocal v)-3.41 F .909(ariable at the current scope is a v)-.25 F .909
+(ariable declared using the)-.25 F F2(local)3.409 E F0(or)3.409 E F2
+(de-)3.409 E(clar)108 254.4 Q(e)-.18 E F0 -.2(bu)2.5 G
+(iltins in the function that is currently e).2 E -.15(xe)-.15 G(cuting.)
+.15 E .635(Local v)108 271.2 R .635(ariables "shado)-.25 F .635(w" v)
+-.25 F .635(ariables with the same name declared at pre)-.25 F .636
+(vious scopes.)-.25 F -.15(Fo)5.636 G 3.136(ri).15 G .636
+(nstance, a local)-3.136 F -.25(va)108 283.2 S .581
+(riable declared in a function hides a global v).25 F .58
+(ariable of the same name: references and assignments refer)-.25 F .182
+(to the local v)108 295.2 R .182(ariable, lea)-.25 F .183
+(ving the global v)-.2 F .183(ariable unmodi\214ed.)-.25 F .183
+(When the function returns, the global v)5.183 F(ariable)-.25 E
+(is once ag)108 307.2 Q(ain visible.)-.05 E .727(The shell uses)108 324
+R F3 .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 336 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 348 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 360 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 372 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
+388.8 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 400.8 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 412.8 Q(ariable named)-.25 E F3(var)2.5 E F0(.)A
+(The)108 429.6 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 441.6 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 3.325(av)108 453.6 S .824(ariable at the current local scope is\
+ unset, it will remain so \(appearing as unset\) until it is reset in t\
+hat)-3.575 F 1.141(scope or until the function returns.)108 465.6 R
+1.141(Once the function returns, an)6.141 F 3.641(yi)-.15 G 1.141
+(nstance of the v)-3.641 F 1.142(ariable at a pre)-.25 F(vious)-.25 E
+.977(scope will become visible.)108 477.6 R .976
+(If the unset acts on a v)5.977 F .976(ariable at a pre)-.25 F .976
+(vious scope, an)-.25 F 3.476(yi)-.15 G .976(nstance of a v)-3.476 F
+(ariable)-.25 E .007(with that name that had been shado)108 489.6 R .008
+(wed will become visible \(see belo)-.25 F 2.508(wh)-.25 G .508 -.25
+(ow t)-2.508 H(he).25 E F2(localv)2.508 E(ar_unset)-.1 E F0 .008
+(shell option)2.508 F(changes this beha)108 501.6 Q(vior\).)-.2 E(The)
+108 518.4 Q F2(FUNCNEST)3.529 E F0 -.25(va)3.529 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
+530.4 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 .043(If the b)108 547.2 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
+.044(cution resumes with).15 F 1.012(the ne)108 559.2 R 1.012
+(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.511 E F0 1.011
+(trap is e)3.511 F -.15(xe)-.15 G(cuted).15 E .213(before e)108 571.2 R
+-.15(xe)-.15 G .213(cution resumes.).15 F .213
+(When a function completes, the v)5.213 F .214
+(alues of the positional parameters and the spe-)-.25 F(cial parameter)
+108 583.2 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.359
+(Function names and de\214nitions may be listed with the)108 600 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.858 E F2(typeset)3.858 E F0 -.2(bu)3.858 G 1.358(iltin com-).2 F
+3.39(mands. The)108 612 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
+.047(\214le and line number)108 624 R 2.546(,i)-.4 G 2.546(ft)-2.546 G
+(he)-2.546 E F2(extdeb)2.546 E(ug)-.2 E F0 .046
+(shell option is enabled\).)2.546 F .046(Functions may be e)5.046 F .046
+(xported so that child shell)-.15 F .492
+(processes \(those created when e)108 636 R -.15(xe)-.15 G .492
+(cuting a separate shell in).15 F -.2(vo)-.4 G .492
+(cation\) automatically ha).2 F .793 -.15(ve t)-.2 H .493
+(hem de\214ned with).15 F(the)108 648 Q F2<ad66>3.201 E F0 .701
+(option to the)3.201 F F2(export)3.201 E F0 -.2(bu)3.201 G 3.201
+(iltin. A).2 F .7(function de\214nition may be deleted using the)3.201 F
+F2<ad66>3.2 E F0 .7(option to the)3.2 F F2(unset)3.2 E F0 -.2(bu)108 660
+S(iltin.).2 E .371(Functions may be recursi)108 676.8 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 .323
+(stack and restrict the number of function in)108 688.8 R -.2(vo)-.4 G
+2.822(cations. By).2 F(def)2.822 E .322
+(ault, no limit is imposed on the number of re-)-.1 F(cursi)108 700.8 Q
+.3 -.15(ve c)-.25 H(alls.).15 E(GNU Bash 5.2)72 768 Q(2022 September 19)
+135.955 E(33)185.115 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.95
+/Times-Bold@0 SF(ARITHMETIC EV)72 84 Q(ALU)-1.478 E -1.04(AT)-.657 G
+(ION)1.04 E F0 1.088(The shell allo)108 96 R 1.088(ws arithmetic e)-.25
+F 1.089(xpressions to be e)-.15 F -.25(va)-.25 G 1.089
+(luated, under certain circumstances \(see the).25 F/F2 10/Times-Bold@0
+SF(let)3.589 E F0(and)3.589 E F2(de-)3.589 E(clar)108 108 Q(e)-.18 E F0
+-.2(bu)3.453 G .953(iltin commands, the).2 F F2(\(\()3.453 E F0 .952
+(compound command, and)3.452 F F2 .952(Arithmetic Expansion)3.452 F F0
+3.452(\). Ev)B .952(aluation is done in)-.25 F<8c78>108 120 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 132 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 144 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 156 Q/F3 10/Times-Italic@0 SF(id)108
+172.8 Q F2(++)A F3(id)2.5 E F2<adad>A F0 -.25(va)144 184.8 S
+(riable post-increment and post-decrement).25 E F2 2.5<ad2b>108 196.8 S
+F0(unary minus and plus)144 196.8 Q F2(++)108 208.8 Q F3(id)A F2<adad>
+2.5 E F3(id)A F0 -.25(va)144 220.8 S
+(riable pre-increment and pre-decrement).25 E F2 2.5(!~)108 232.8 S F0
+(logical and bitwise ne)144 232.8 Q -.05(ga)-.15 G(tion).05 E F2(**)108
+244.8 Q F0 -.15(ex)144 244.8 S(ponentiation).15 E F2 2.5(*/%)108 256.8 S
+F0(multiplication, di)144 256.8 Q(vision, remainder)-.25 E F2 2.5<2bad>
+108 268.8 S F0(addition, subtraction)144 268.8 Q F2(<< >>)108 280.8 Q F0
+(left and right bitwise shifts)144 280.8 Q F2(<= >= < >)108 292.8 Q F0
+(comparison)144 304.8 Q F2(== !=)108 316.8 Q F0(equality and inequality)
+144 316.8 Q F2(&)108 328.8 Q F0(bitwise AND)144 328.8 Q F2(^)108 340.8 Q
+F0(bitwise e)144 340.8 Q(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F2(|)
+108 352.8 Q F0(bitwise OR)144 352.8 Q F2(&&)108 364.8 Q F0(logical AND)
+144 364.8 Q F2(||)108 376.8 Q F0(logical OR)144 376.8 Q F3 -.2(ex)108
+388.8 S(pr).2 E F2(?)A F3 -.2(ex)C(pr).2 E F2(:)A F3 -.2(ex)C(pr).2 E F0
+(conditional operator)144 400.8 Q F2 2.5(=*)108 412.8 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 424.8 Q F3 -.2(ex)108 436.8 S
+(pr1).2 E F2(,)2.5 E F3 -.2(ex)2.5 G(pr2).2 E F0(comma)144 448.8 Q .68
+(Shell v)108 465.6 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 477.6 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 489.6 S .165(pansion syntax.).15 F 2.665(As)5.165 G
+.165(hell v)-2.665 F .165(ariable that is null or unset e)-.25 F -.25
+(va)-.25 G .165(luates to 0 when referenced by name without us-).25 F
+.42(ing the parameter e)108 501.6 R .42(xpansion syntax.)-.15 F .42
+(The v)5.42 F .421(alue of a v)-.25 F .421(ariable is e)-.25 F -.25(va)
+-.25 G .421(luated as an arithmetic e).25 F .421(xpression when)-.15 F
+.154(it is referenced, or when a v)108 513.6 R .154
+(ariable which has been gi)-.25 F -.15(ve)-.25 G 2.654(nt).15 G(he)
+-2.654 E F3(inte)2.654 E -.1(ge)-.4 G(r).1 E F0(attrib)2.654 E .153
+(ute using)-.2 F F2(declar)2.653 E 2.653<65ad>-.18 G(i)-2.653 E F0 .153
+(is assigned a)2.653 F -.25(va)108 525.6 S 2.857(lue. A).25 F .357
+(null v)2.857 F .357(alue e)-.25 F -.25(va)-.25 G .357(luates to 0.).25
+F 2.857(As)5.357 G .357(hell v)-2.857 F .357(ariable need not ha)-.25 F
+.657 -.15(ve i)-.2 H(ts).15 E F3(inte)2.857 E -.1(ge)-.4 G(r).1 E F0
+(attrib)2.857 E .357(ute turned on to be used)-.2 F(in an e)108 537.6 Q
+(xpression.)-.15 E(Inte)108 554.4 Q .518(ger constants follo)-.15 F
+3.018(wt)-.25 G .518(he C language de\214nition, without suf)-3.018 F
+<8c78>-.25 E .517(es or character constants.)-.15 F .517(Constants with)
+5.517 F 3.282(al)108 566.4 S .782
+(eading 0 are interpreted as octal numbers.)-3.282 F 3.283(Al)5.782 G
+.783(eading 0x or 0X denotes he)-3.283 F 3.283(xadecimal. Otherwise,)
+-.15 F(num-)3.283 E .816(bers tak)108 578.4 R 3.316(et)-.1 G .816
+(he form [)-3.316 F F3(base#)A F0 .815(]n, where the optional)B F3(base)
+3.315 E F0 .815(is a decimal number between 2 and 64 representing)3.315
+F .349(the arithmetic base, and)108 590.4 R F3(n)2.849 E F0 .349
+(is a number in that base.)2.849 F(If)5.35 E F3(base#)2.85 E F0 .35
+(is omitted, then base 10 is used.)2.85 F .35(When speci-)5.35 F(fying)
+108 602.4 Q F3(n)2.975 E F0 2.975(,i)C 2.975(fan)-2.975 G .474(on-digit\
+ is required, the digits greater than 9 are represented by the lo)-2.975
+F .474(wercase letters, the up-)-.25 F .518
+(percase letters, @, and _, in that order)108 614.4 R 5.518(.I)-.55 G(f)
+-5.518 E F3(base)3.018 E F0 .518(is less than or equal to 36, lo)3.018 F
+.518(wercase and uppercase letters)-.25 F
+(may be used interchangeably to represent numbers between 10 and 35.)108
+626.4 Q .235(Operators are e)108 643.2 R -.25(va)-.25 G .235
+(luated in order of precedence.).25 F(Sub-e)5.234 E .234
+(xpressions in parentheses are e)-.15 F -.25(va)-.25 G .234
+(luated \214rst and may).25 F -.15(ove)108 655.2 S
+(rride the precedence rules abo).15 E -.15(ve)-.15 G(.).15 E F1
+(CONDITION)72 672 Q(AL EXPRESSIONS)-.219 E F0 .255(Conditional e)108 684
+R .255(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.756 E F0 -.2(bu)2.756 G .256(iltin commands to test).2 F .134
+(\214le attrib)108 696 R .134
+(utes and perform string and arithmetic comparisons.)-.2 F(The)5.133 E
+F2(test)2.633 E F0(and)2.633 E F2([)2.633 E F0 .133
+(commands determine their be-)2.633 F(ha)108 708 Q .197
+(vior based on the number of ar)-.2 F .198
+(guments; see the descriptions of those commands for an)-.18 F 2.698(yo)
+-.15 G .198(ther command-)-2.698 F(speci\214c actions.)108 720 Q
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(34)185.115 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 .235
+(Expressions are formed from the follo)108 84 R .234
+(wing unary or binary primaries.)-.25 F/F1 10/Times-Bold@0 SF(Bash)5.234
+E F0 .234(handles se)2.734 F -.15(ve)-.25 G .234(ral \214lenames spe-)
+.15 F .424(cially when the)108 96 R 2.924(ya)-.15 G .424(re used in e)
+-2.924 F 2.925(xpressions. If)-.15 F .425(the operating system on which)
+2.925 F F1(bash)2.925 E F0 .425(is running pro)2.925 F .425(vides these)
+-.15 F .345(special \214les, bash will use them; otherwise it will emul\
+ate them internally with this beha)108 108 R .344(vior: If an)-.2 F(y)
+-.15 E/F2 10/Times-Italic@0 SF(\214le)2.844 E F0(ar)2.844 E(-)-.2 E .805
+(gument to one of the primaries is of the form)108 120 R F2(/de)3.305 E
+(v/fd/n)-.15 E F0 3.306(,t)C .806(hen \214le descriptor)-3.306 F F2(n)
+3.306 E F0 .806(is check)3.306 F 3.306(ed. If)-.1 F(the)3.306 E F2
+(\214le)3.306 E F0(ar)3.306 E(gu-)-.18 E .03
+(ment to one of the primaries is one of)108 132 R F2(/de)2.53 E(v/stdin)
+-.15 E F0(,)A F2(/de)2.529 E(v/stdout)-.15 E F0 2.529(,o)C(r)-2.529 E F2
+(/de)2.529 E(v/stderr)-.15 E F0 2.529<2c8c>C .029
+(le descriptor 0, 1, or 2, respec-)-2.529 F(ti)108 144 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 .721
+(Unless otherwise speci\214ed, primaries that operate on \214les follo)
+108 160.8 R 3.221(ws)-.25 G .722(ymbolic links and operate on the tar)
+-3.221 F(get)-.18 E(of the link, rather than the link itself.)108 172.8
+Q 1.096(When used with)108 190.8 R F1([[)3.596 E F0 3.596(,t)C(he)-3.596
+E F1(<)3.596 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.095
+E F1(test)3.595 E F0(com-)3.595 E(mand sorts using ASCII ordering.)108
+202.8 Q F1<ad61>108 226.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 226.8 S
+(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1<ad62>108
+238.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 238.8 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
+250.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 250.8 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 262.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 262.8 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 274.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 274.8 S(ue if).35 E F2
+(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1<ad66>108 286.8 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 286.8 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 298.8
+Q F2(\214le)2.5 E F0 -.35(Tr)144 298.8 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 310.8 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 310.8 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 322.8 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 322.8 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 334.8 Q F2(\214le)2.5 E F0 -.35(Tr)144
+334.8 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 346.8 Q F2(\214le)
+2.5 E F0 -.35(Tr)144 346.8 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 358.8 Q F2(\214le)2.5 E F0
+-.35(Tr)144 358.8 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 370.8 Q F2(fd)
+2.5 E F0 -.35(Tr)144 370.8 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 382.8 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 382.8 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
+394.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 394.8 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 406.8 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 406.8 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
+418.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 418.8 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 430.8 Q F2(\214le)2.5 E
+F0 -.35(Tr)144 430.8 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 442.8 Q F2(\214le)2.5 E
+F0 -.35(Tr)144 442.8 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 454.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 454.8 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 466.8 Q F2
+(\214le)2.5 E F0 -.35(Tr)144 466.8 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 478.8 Q F1
+(\255ef)2.5 E F2(\214le2)2.5 E F0 -.35(Tr)144 490.8 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 502.8 Q F0<ad>2.5 E F1
+(nt)A F2(\214le2)2.5 E F0 -.35(Tr)144 514.8 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 526.8 Q F0<ad>2.5 E F1(ot)A F2(\214le2)2.5 E F0 -.35(Tr)144
+538.8 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 550.8 Q
+F2(optname)2.5 E F0 -.35(Tr)144 562.8 S .262(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.763 E F0(option to the)144 574.8 Q F1(set)2.5 E F0 -.2(bu)2.5 G
+(iltin belo).2 E -.65(w.)-.25 G F1<ad76>108 586.8 Q F2(varname)2.5 E F0
+-.35(Tr)144 598.8 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 610.8 Q F2(varname)2.5 E F0 -.35(Tr)144 622.8 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 634.8 Q F2(string)
+2.5 E F0 -.35(Tr)144 646.8 S(ue if the length of).35 E F2(string)2.5 E
+F0(is zero.)2.5 E F2(string)108 658.8 Q F1<ad6e>108 670.8 Q F2(string)
+2.5 E F0 -.35(Tr)144 682.8 S(ue if the length of).35 E F2(string)2.84 E
+F0(is non-zero.)2.72 E F2(string1)108 699.6 Q F1(==)2.5 E F2(string2)2.5
+E F0(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(35)185.115 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
+/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 .862(ue if the strings are equal.).35
+F F2(=)5.861 E F0 .861(should be used with the)3.361 F F2(test)3.361 E
+F0 .861(command for POSIX conformance.)3.361 F .446(When used with the)
+144 108 R F2([[)2.946 E F0 .446
+(command, this performs pattern matching as described abo)2.946 F .747
+-.15(ve \()-.15 H F2(Compound).15 E(Commands)144 120 Q F0(\).)A F1
+(string1)108 136.8 Q F2(!=)2.5 E F1(string2)2.5 E F0 -.35(Tr)144 148.8 S
+(ue if the strings are not equal.).35 E F1(string1)108 165.6 Q F2(<)2.5
+E F1(string2)2.5 E F0 -.35(Tr)144 177.6 S(ue if).35 E F1(string1)2.5 E
+F0(sorts before)2.5 E F1(string2)2.5 E F0(le)2.5 E(xicographically)-.15
+E(.)-.65 E F1(string1)108 194.4 Q F2(>)2.5 E F1(string2)2.5 E F0 -.35
+(Tr)144 206.4 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
+223.2 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 235.2 Q F0 .385(is one of)2.635 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.884 E(g1)-.37 E F0 .845(is equal to, not equal to, less than, les\
+s than or equal to, greater than, or greater than or equal to)144 247.2
+R F1(ar)144 259.2 Q(g2)-.37 E F0 3.59(,r)C(especti)-3.59 E -.15(ve)-.25
+G(ly).15 E(.)-.65 E F1(Ar)7.1 E(g1)-.37 E F0(and)3.59 E F1(ar)3.92 E(g2)
+-.37 E F0 1.089(may be positi)3.61 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.589(gers. When)-.15 F 1.089(used with the)3.589 F F2([[)3.589 E F0
+(command,)144 271.2 Q F1(Ar)4.447 E(g1)-.37 E F0(and)3.437 E F1(Ar)4.447
+E(g2)-.37 E F0 .937(are e)3.457 F -.25(va)-.25 G .937
+(luated as arithmetic e).25 F .937(xpressions \(see)-.15 F F3 .937
+(ARITHMETIC EV)3.437 F(ALU)-1.215 E(A-)-.54 E(TION)144 283.2 Q F0(abo)
+2.25 E -.15(ve)-.15 G(\).).15 E/F4 10.95/Times-Bold@0 SF
+(SIMPLE COMMAND EXP)72 300 Q(ANSION)-.81 E F0 .614
+(When a simple command is e)108 312 R -.15(xe)-.15 G .614
+(cuted, the shell performs the follo).15 F .613(wing e)-.25 F .613
+(xpansions, assignments, and redi-)-.15 F
+(rections, from left to right, in the follo)108 324 Q(wing order)-.25 E
+(.)-.55 E(1.)108 340.8 Q 1.848(The w)144 340.8 R 1.848
+(ords that the parser has mark)-.1 F 1.848(ed as v)-.1 F 1.849
+(ariable assignments \(those preceding the command)-.25 F
+(name\) and redirections are sa)144 352.8 Q -.15(ve)-.2 G 2.5(df).15 G
+(or later processing.)-2.5 E(2.)108 369.6 Q .18(The w)144 369.6 R .18
+(ords that are not v)-.1 F .179
+(ariable assignments or redirections are e)-.25 F 2.679(xpanded. If)-.15
+F(an)2.679 E 2.679(yw)-.15 G .179(ords remain af-)-2.779 F .346(ter e)
+144 381.6 R .346(xpansion, the \214rst w)-.15 F .346(ord is tak)-.1 F
+.347(en to be the name of the command and the remaining w)-.1 F .347
+(ords are)-.1 F(the ar)144 393.6 Q(guments.)-.18 E(3.)108 410.4 Q
+(Redirections are performed as described abo)144 410.4 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 427.2 Q .717(The te)144 427.2 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
+.339(command substitution, arithmetic e)144 439.2 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 451.2 Q
+.587(If no command name results, the v)108 468 R .586
+(ariable assignments af)-.25 F .586(fect the current shell en)-.25 F
+3.086(vironment. In)-.4 F .586(the case of)3.086 F .371(such a command \
+\(one that consists only of assignment statements and redirections\), a\
+ssignment statements)108 480 R .835(are performed before redirections.)
+108 492 R .835(Otherwise, the v)5.835 F .835
+(ariables are added to the en)-.25 F .835(vironment of the e)-.4 F -.15
+(xe)-.15 G(cuted).15 E .838(command and do not af)108 504 R .838
+(fect the current shell en)-.25 F 3.338(vironment. If)-.4 F(an)3.338 E
+3.338(yo)-.15 G 3.338(ft)-3.338 G .839
+(he assignments attempts to assign a)-3.338 F -.25(va)108 516 S
+(lue to a readonly v).25 E(ariable, an error occurs, and the command e)
+-.25 E(xits with a non-zero status.)-.15 E .15
+(If no command name results, redirections are performed, b)108 532.8 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 544.8
+Q(xit with a non-zero status.)-.15 E 1.064
+(If there is a command name left after e)108 561.6 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
+573.6 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 585.6 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 597.6
+Q(xits with a status of zero.)-.15 E F4(COMMAND EXECUTION)72 614.4 Q F0
+.547(After a command has been split into w)108 626.4 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 638.4 Q(wing actions are tak)-.25 E
+(en.)-.1 E .379(If the command name contains no slashes, the shell atte\
+mpts to locate it.)108 655.2 R .379(If there e)5.379 F .379
+(xists a shell function by)-.15 F .246(that name, that function is in)
+108 667.2 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 679.2 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 696 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 708 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
+720 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(GNU Bash 5.2)72
+768 Q(2022 September 19)135.955 E(36)185.115 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 .72
+(search of the directories in)108 84 R/F1 9/Times-Bold@0 SF -.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 96 R/F2 10/Times-Bold@0 SF
+(command_not_f)3.456 E(ound_han-)-.25 E(dle)108 108 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 120 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 132 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 144 Q 1.089(If the search is successfu\
+l, or if the command name contains one or more slashes, the shell e)108
+160.8 R -.15(xe)-.15 G 1.09(cutes the).15 F .198
+(named program in a separate e)108 172.8 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 184.8 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.048(If this e)108 201.6 R
+-.15(xe)-.15 G 1.048(cution f).15 F 1.048
+(ails because the \214le is not in e)-.1 F -.15(xe)-.15 G 1.049
+(cutable format, and the \214le is not a directory).15 F 3.549(,i)-.65 G
+3.549(ti)-3.549 G 3.549(sa)-3.549 G(s-)-3.549 E .143(sumed to be a)108
+213.6 R/F3 10/Times-Italic@0 SF .143(shell script)2.643 F F0 2.643
+(,a\214)C .143(le containing shell commands, and the shell creates a ne)
+-2.643 F 2.643(wi)-.25 G .143(nstance of itself to)-2.643 F -.15(exe)108
+225.6 S .136(cute it.).15 F .136
+(This subshell reinitializes itself, so that the ef)5.136 F .137
+(fect is as if a ne)-.25 F 2.637(ws)-.25 G .137(hell had been in)-2.637
+F -.2(vo)-.4 G -.1(ke).2 G 2.637(dt).1 G 2.637(oh)-2.637 G(andle)-2.637
+E .866(the script, with the e)108 237.6 R .866
+(xception that the locations of commands remembered by the parent \(see)
+-.15 F F2(hash)3.365 E F0(belo)3.365 E(w)-.25 E(under)108 249.6 Q F1
+(SHELL B)2.5 E(UIL)-.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 266.4 R .347(ginning with)-.15 F F2
+(#!)2.847 E F0 2.847(,t)C .348(he remainder of the \214rst line speci\
+\214es an interpreter for the pro-)-2.847 F 3.178(gram. The)108 278.4 R
+.678(shell e)3.178 F -.15(xe)-.15 G .678(cutes the speci\214ed interpre\
+ter on operating systems that do not handle this e).15 F -.15(xe)-.15 G
+(cutable).15 E .206(format themselv)108 290.4 R 2.706(es. The)-.15 F(ar)
+2.706 E .206(guments to the interpreter consist of a single optional ar)
+-.18 F .206(gument follo)-.18 F .206(wing the in-)-.25 F .268
+(terpreter name on the \214rst line of the program, follo)108 302.4 R
+.267(wed by the name of the program, follo)-.25 F .267(wed by the com-)
+-.25 F(mand ar)108 314.4 Q(guments, if an)-.18 E -.65(y.)-.15 G/F5 10.95
+/Times-Bold@0 SF(COMMAND EXECUTION ENVIR)72 331.2 Q(ONMENT)-.329 E F0
+(The shell has an)108 343.2 Q F3 -.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 360 Q 1.405(open \214les inherited by the shell at in)144 360 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 372 S(iltin).2 E<83>108 388.8 Q(the current w)144
+388.8 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
+405.6 Q(the \214le creation mode mask as set by)144 405.6 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 422.4 Q(current traps set by)144 422.4 Q F2(trap)2.5 E F0<83>108
+439.2 Q .257(shell parameters that are set by v)144 439.2 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 451.2 Q(vironment)-.4 E<83>108 468 Q
+(shell functions de\214ned during e)144 468 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 484.8 Q
+(options enabled at in)144 484.8 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 501.6 Q(options enabled by)144 501.6 Q F2(shopt)2.5 E F0
+<83>108 518.4 Q(shell aliases de\214ned with)144 518.4 Q F2(alias)2.5 E
+F0<83>108 535.2 Q -.25(va)144 535.2 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
+F1(PPID)2.5 E F0 .426(When a simple command other than a b)108 552 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 564 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 576 Q<83>108 592.8 Q 1.055(the shell')144 592.8 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 604.8 Q<83>108 621.6 Q(the current w)144 621.6 Q
+(orking directory)-.1 E<83>108 638.4 Q(the \214le creation mode mask)144
+638.4 Q<83>108 655.2 Q .857(shell v)144 655.2 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 667.2 Q(vironment)
+-.4 E<83>108 684 Q .306(traps caught by the shell are reset to the v)144
+684 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 696 Q
+2.5(Ac)108 712.8 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(A)108 729.6 Q F3(subshell)2.5 E F0(is a cop)2.5 E 2.5
+(yo)-.1 G 2.5(ft)-2.5 G(he shell process.)-2.5 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(37)185.115 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 .577(Command subs\
+titution, commands grouped with parentheses, and asynchronous commands \
+are in)108 84 R -.2(vo)-.4 G -.1(ke).2 G 3.077(di).1 G(n)-3.077 E 2.744
+(as)108 96 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 108 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 120 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 132 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
+148.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
+/F1 10/Times-Bold@0 SF<ad65>3.876 E F0 1.376(option from the parent)
+3.876 F 2.5(shell. When)108 160.8 R(not in)2.5 E/F2 10/Times-Italic@0 SF
+(posix mode)2.5 E F0(,)A F1(bash)2.5 E F0(clears the)2.5 E F1<ad65>2.5 E
+F0(option in such subshells.)2.5 E .404(If a command is follo)108 177.6
+R .404(wed by a)-.25 F F1(&)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
+189.6 R F2(/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 201.6 Q/F3 10.95/Times-Bold@0 SF
+(ENVIR)72 218.4 Q(ONMENT)-.329 E F0 2.343(When a program is in)108 230.4
+R -.2(vo)-.4 G -.1(ke).2 G 4.843(di).1 G 4.843(ti)-4.843 G 4.843(sg)
+-4.843 G -2.15 -.25(iv e)-4.843 H 4.843(na).25 G 4.843(na)-4.843 G 2.343
+(rray of strings called the)-4.843 F F2(en)5.033 E(vir)-.4 E(onment)-.45
+E F0 7.343(.T).68 G 2.344(his is a list of)-7.343 F F2(name)108 242.4 Q
+F0<ad>A F2(value)A F0(pairs, of the form)2.5 E F2(name)2.86 E F0(=)A F2
+(value)A F0(.).18 E .439(The shell pro)108 259.2 R .438(vides se)-.15 F
+-.15(ve)-.25 G .438(ral w).15 F .438(ays to manipulate the en)-.1 F
+2.938(vironment. On)-.4 F(in)2.938 E -.2(vo)-.4 G .438
+(cation, the shell scans its o).2 F .438(wn en-)-.25 F .709(vironment a\
+nd creates a parameter for each name found, automatically marking it fo\
+r)108 271.2 R F2 -.2(ex)3.209 G(port).2 E F0 .709(to child pro-)3.889 F
+2.704(cesses. Ex)108 283.2 R .203(ecuted commands inherit the en)-.15 F
+2.703(vironment. The)-.4 F F1(export)2.703 E F0(and)2.703 E F1(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 .332
+(eters and functions to be added to and deleted from the en)108 295.2 R
+2.832(vironment. If)-.4 F .332(the v)2.832 F .332
+(alue of a parameter in the en-)-.25 F .132
+(vironment is modi\214ed, the ne)108 307.2 R 2.632(wv)-.25 G .131
+(alue becomes part of the en)-2.882 F .131
+(vironment, replacing the old.)-.4 F .131(The en)5.131 F(vironment)-.4 E
+.32(inherited by an)108 319.2 R 2.82(ye)-.15 G -.15(xe)-2.97 G .321
+(cuted command consists of the shell').15 F 2.821(si)-.55 G .321
+(nitial en)-2.821 F .321(vironment, whose v)-.4 F .321
+(alues may be modi-)-.25 F .534(\214ed in the shell, less an)108 331.2 R
+3.034(yp)-.15 G .534(airs remo)-3.034 F -.15(ve)-.15 G 3.034(db).15 G
+3.034(yt)-3.034 G(he)-3.034 E F1(unset)3.034 E F0 .534(command, plus an)
+3.034 F 3.033(ya)-.15 G .533(dditions via the)-3.033 F F1(export)3.033 E
+F0(and)3.033 E F1(de-)3.033 E(clar)108 343.2 Q 2.5<65ad>-.18 G(x)-2.5 E
+F0(commands.)2.5 E .562(The en)108 360 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 372 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 384 Q(vironment seen by that command.)
+-.4 E .81(If the)108 400.8 R F1<ad6b>3.31 E F0 .81
+(option is set \(see the)3.31 F F1(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 412.8 Q
+(vironment for a command, not just those that precede the command name.)
+-.4 E(When)108 429.6 Q F1(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 F1(_)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 441.6 Q(vironment.)-.4 E F3
+(EXIT ST)72 458.4 Q -1.04(AT)-.986 G(US)1.04 E F0 .15(The e)108 470.4 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 482.4 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 494.4 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
+506.4 Q(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15
+(Fo)108 523.2 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 535.2 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 547.2 Q F2(N)2.5 E F0(,)A F1(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 564 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 576 Q(ut is not e)-.2 E -.15(xe)
+-.15 G(cutable, the return status is 126.).15 E(If a command f)108 592.8
+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 609.6 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 621.6 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 633.6 Q(guments.)-.18
+E(The e)108 650.4 Q(xit status of the last command is a)-.15 E -.25(va)
+-.2 G(ilable in the special parameter $?.).25 E F1(Bash)108 667.2 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 679.2
+Q(xits with a non-zero v)-.15 E 2.5(alue. See)-.25 F(also the)2.5 E F1
+(exit)2.5 E F0 -.2(bu)2.5 G(iltin command belo).2 E -.65(w.)-.25 G F3
+(SIGN)72 696 Q(ALS)-.219 E F0(When)108 708 Q F1(bash)2.503 E F0 .002
+(is interacti)2.502 F -.15(ve)-.25 G 2.502(,i).15 G 2.502(nt)-2.502 G
+.002(he absence of an)-2.502 F 2.502(yt)-.15 G .002(raps, it ignores)
+-2.502 F F4(SIGTERM)2.502 E F0 .002(\(so that)2.252 F F1 .002(kill 0)
+2.502 F F0 .002(does not kill an in-)2.502 F(teracti)108 720 Q 1.215
+-.15(ve s)-.25 H .915(hell\), and).15 F F4(SIGINT)3.415 E F0 .915
+(is caught and handled \(so that the)3.165 F F1(wait)3.415 E F0 -.2(bu)
+3.416 G .916(iltin is interruptible\).).2 F .916(In all cases,)5.916 F
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(38)185.115 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/Times-Bold@0
+SF(bash)108 84 Q F0(ignores)2.5 E/F2 9/Times-Bold@0 SF(SIGQ)2.5 E(UIT)
+-.09 E/F3 9/Times-Roman@0 SF(.)A F0(If job control is in ef)4.5 E(fect,)
+-.25 E F1(bash)2.5 E F0(ignores)2.5 E F2(SIGTTIN)2.5 E F3(,)A F2(SIGTT)
+2.25 E(OU)-.162 E F3(,)A F0(and)2.25 E F2(SIGTSTP)2.5 E F3(.)A F0(Non-b)
+108 100.8 Q 1.065(uiltin commands run by)-.2 F F1(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 112.8 R .747(job control is not in ef)3.247 F .747
+(fect, asynchronous commands ignore)-.25 F F2(SIGINT)3.248 E F0(and)
+2.998 E F2(SIGQ)3.248 E(UIT)-.09 E F0 .748(in addi-)2.998 F .653
+(tion to these inherited handlers.)108 124.8 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 136.8 Q F2
+(SIGTTIN)2.5 E F3(,)A F2(SIGTT)2.25 E(OU)-.162 E F3(,)A F0(and)2.25 E F2
+(SIGTSTP)2.5 E F3(.)A F0 2.045(The shell e)108 153.6 R 2.045
+(xits by def)-.15 F 2.045(ault upon receipt of a)-.1 F F2(SIGHUP)4.545 E
+F3(.)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 F2(SIGHUP)108 165.6 Q F0
+1.005(to all jobs, running or stopped.)3.255 F 1.004
+(Stopped jobs are sent)6.005 F F2(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 F2(SIGHUP)108 177.6 Q F3(.)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 189.6 R F1(diso)
+3.857 E(wn)-.1 E F0 -.2(bu)3.857 G 1.357(iltin \(see).2 F F2 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 F2
+(SIGHUP)108 201.6 Q F0(using)2.25 E F1(diso)2.5 E(wn \255h)-.1 E F0(.)A
+.166(If the)108 218.4 R F1(huponexit)2.666 E F0 .166
+(shell option has been set with)2.666 F F1(shopt)2.666 E F0(,)A F1(bash)
+2.666 E F0 .166(sends a)2.666 F F2(SIGHUP)2.666 E F0 .166
+(to all jobs when an interacti)2.416 F -.15(ve)-.25 G(login shell e)108
+230.4 Q(xits.)-.15 E(If)108 247.2 Q F1(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 259.2 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 .327
+(via the)108 271.2 R F1(wait)2.827 E F0 -.2(bu)2.827 G .327(iltin, the \
+reception of a signal for which a trap has been set will cause the).2 F
+F1(wait)2.826 E F0 -.2(bu)2.826 G .326(iltin to re-).2 F
+(turn immediately with an e)108 283.2 Q
+(xit status greater than 128, immediately after which the trap is e)-.15
+E -.15(xe)-.15 G(cuted.).15 E .498(When job control is not enabled, and)
+108 300 R F1(bash)2.998 E F0 .498(is w)2.998 F .498(aiting for a fore)
+-.1 F .499(ground command to complete, the shell re-)-.15 F(cei)108 312
+Q -.15(ve)-.25 G 2.606(sk).15 G -.15(ey)-2.706 G .105
+(board-generated signals such as).15 F F2(SIGINT)2.605 E F0 .105
+(\(usually generated by)2.355 F F1(^C)2.605 E F0 2.605(\)t)C .105
+(hat users commonly intend to)-2.605 F .423(send to that command.)108
+324 R .424(This happens because the shell and the command are in the sa\
+me process group as)5.424 F(the terminal, and)108 336 Q F1(^C)2.5 E F0
+(sends)2.5 E F2(SIGINT)2.5 E F0(to all processes in that process group.)
+2.25 E(When)108 352.8 Q F1(bash)3.801 E F0 1.3
+(is running without job control enabled and recei)3.8 F -.15(ve)-.25 G
+(s).15 E F2(SIGINT)3.8 E F0 1.3(while w)3.55 F 1.3(aiting for a fore)-.1
+F(ground)-.15 E .809(command, it w)108 364.8 R .809
+(aits until that fore)-.1 F .81
+(ground command terminates and then decides what to do about the)-.15 F
+F2(SIG-)3.31 E(INT)108 376.8 Q F3(:)A F0(1.)108 393.6 Q .003
+(If the command terminates due to the)144 393.6 R F2(SIGINT)2.503 E F3
+(,)A F1(bash)2.252 E F0 .002
+(concludes that the user meant to end the entire)2.502 F
+(script, and acts on the)144 405.6 Q F2(SIGINT)2.5 E F0
+(\(e.g., by running a)2.25 E F2(SIGINT)2.5 E F0(trap or e)2.25 E
+(xiting itself\);)-.15 E(2.)108 422.4 Q .288
+(If the command does not terminate due to)144 422.4 R F2(SIGINT)2.788 E
+F3(,)A F0 .288(the program handled the)2.538 F F2(SIGINT)2.789 E F0 .289
+(itself and did)2.539 F .728(not treat it as a f)144 434.4 R .728
+(atal signal.)-.1 F .728(In that case,)5.728 F F1(bash)3.228 E F0 .728
+(does not treat)3.228 F F2(SIGINT)3.228 E F0 .728(as a f)2.978 F .728
+(atal signal, either)-.1 F 3.228(,i)-.4 G(n-)-3.228 E .771
+(stead assuming that the)144 446.4 R F2(SIGINT)3.271 E F0 -.1(wa)3.021 G
+3.271(su).1 G .771(sed as part of the program')-3.271 F 3.272(sn)-.55 G
+.772(ormal operation \(e.g., emacs)-3.272 F .41
+(uses it to abort editing commands\) or deliberately discarded.)144
+458.4 R(Ho)5.409 E(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F1(bash)3.309 E
+F0 .409(will run an)2.909 F 2.909(yt)-.15 G .409(rap set)-2.909 F(on)144
+470.4 Q F2(SIGINT)3.788 E F3(,)A F0 1.288(as it does with an)3.538 F
+3.788(yo)-.15 G 1.288(ther trapped signal it recei)-3.788 F -.15(ve)-.25
+G 3.789(sw).15 G 1.289(hile it is w)-3.789 F 1.289(aiting for the fore-)
+-.1 F(ground command to complete, for compatibility)144 482.4 Q(.)-.65 E
+/F4 10.95/Times-Bold@0 SF(JOB CONTR)72 499.2 Q(OL)-.329 E/F5 10
+/Times-Italic@0 SF -.25(Jo)108 511.2 S 3.369(bc).25 G(ontr)-3.369 E(ol)
+-.45 E F0 .868(refers to the ability to selecti)3.879 F -.15(ve)-.25 G
+.868(ly stop \().15 F F5(suspend)A F0 3.368(\)t)C .868(he e)-3.368 F
+-.15(xe)-.15 G .868(cution of processes and continue \().15 F F5 -.37
+(re)C(-).37 E(sume)108 523.2 Q F0 2.664(\)t)C .164(heir e)-2.664 F -.15
+(xe)-.15 G .164(cution at a later point.).15 F 2.665(Au)5.165 G .165
+(ser typically emplo)-2.665 F .165(ys this f)-.1 F .165
+(acility via an interacti)-.1 F .465 -.15(ve i)-.25 H(nterf).15 E .165
+(ace sup-)-.1 F(plied jointly by the operating system k)108 535.2 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 .785(The shell associates a)108 552 R
+F5(job)5.025 E F0 .785(with each pipeline.)3.515 F .784(It k)5.785 F
+.784(eeps a table of currently e)-.1 F -.15(xe)-.15 G .784
+(cuting jobs, which may be).15 F .324(listed with the)108 564 R F1(jobs)
+2.824 E F0 2.824(command. When)2.824 F F1(bash)2.825 E F0 .325
+(starts a job asynchronously \(in the)2.825 F F5(bac)3.095 E(kgr)-.2 E
+(ound)-.45 E F0 .325(\), it prints a line).77 F(that looks lik)108 576 Q
+(e:)-.1 E([1] 25647)144 592.8 Q .241(indicating that this job is job nu\
+mber 1 and that the process ID of the last process in the pipeline asso\
+ciated)108 609.6 R .732(with this job is 25647.)108 621.6 R .733
+(All of the processes in a single pipeline are members of the same job)
+5.732 F(.)-.4 E F1(Bash)5.733 E F0(uses)3.233 E(the)108 633.6 Q F5(job)
+4.24 E F0(abstraction as the basis for job control.)2.73 E 1.982 -.8
+(To f)108 650.4 T .382(acilitate the implementation of the user interf)
+.7 F .382(ace to job control, the operating system maintains the no-)-.1
+F 1.537(tion of a)108 662.4 R F5(curr)4.037 E 1.537(ent terminal pr)-.37
+F 1.537(ocess gr)-.45 F 1.537(oup ID)-.45 F F0 6.537(.M)C 1.538
+(embers of this process group \(processes whose process)-6.537 F .023
+(group ID is equal to the current terminal process group ID\) recei)108
+674.4 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023
+(board-generated signals such as).15 F F2(SIG-)2.522 E(INT)108 686.4 Q
+F3(.)A F0 1.215(These processes are said to be in the)5.715 F F5(for)
+5.685 E -.4(eg)-.37 G -.45(ro).4 G(und).45 E F0(.).77 E F5(Bac)6.795 E
+(kgr)-.2 E(ound)-.45 E F0 1.216(processes are those whose process)4.485
+F .146(group ID dif)108 698.4 R .146(fers from the terminal')-.25 F .146
+(s; such processes are immune to k)-.55 F -.15(ey)-.1 G .145
+(board-generated signals.).15 F .145(Only fore-)5.145 F .16
+(ground processes are allo)108 710.4 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.052(minal. Background)108 722.4 R .551
+(processes which attempt to read from \(write to when)3.052 F F6 .551
+(stty tostop)3.051 F F0 .551(is in ef)3.051 F .551(fect\) the)-.25 F
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(39)185.115 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 .717
+(terminal are sent a)108 84 R/F1 9/Times-Bold@0 SF .717(SIGTTIN \(SIGTT)
+3.217 F(OU\))-.162 E F0 .718(signal by the k)2.967 F(ernel')-.1 E 3.218
+(st)-.55 G .718(erminal dri)-3.218 F -.15(ve)-.25 G 1.518 -.4(r, w).15 H
+.718(hich, unless caught, sus-).4 F(pends the process.)108 96 Q 1.088
+(If the operating system on which)108 112.8 R/F2 10/Times-Bold@0 SF
+(bash)3.588 E F0 1.088(is running supports job control,)3.588 F F2(bash)
+3.587 E F0 1.087(contains f)3.587 F 1.087(acilities to use it.)-.1 F -.8
+(Ty)108 124.8 S .301(ping the).8 F/F3 10/Times-Italic@0 SF(suspend)3.141
+E F0 .301(character \(typically)3.571 F F2(^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.143(stopped and returns control to)108 136.8 R F2(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.142(character \(typically)5.412 F F2(^Y)4.642 E F0 4.642(,C)C
+(ontrol-Y\))-4.642 E .021(causes the process to be stopped when it atte\
+mpts to read input from the terminal, and control to be returned)108
+148.8 R(to)108 160.8 Q F2(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
+F2(bg)3.392 E F0 .892(command to continue it in the)3.392 F .17
+(background, the)108 172.8 R F2(fg)2.67 E F0 .17
+(command to continue it in the fore)2.67 F .17(ground, or the)-.15 F F2
+(kill)2.67 E F0 .17(command to kill it.)2.67 F(A)5.17 E F2(^Z)2.67 E F0
+(tak)2.67 E .17(es ef-)-.1 F 1.419(fect immediately)108 184.8 R 3.919
+(,a)-.65 G 1.418(nd has the additional side ef)-3.919 F 1.418
+(fect of causing pending output and typeahead to be dis-)-.25 F(carded.)
+108 196.8 Q .777(There are a number of w)108 213.6 R .777
+(ays to refer to a job in the shell.)-.1 F .777(The character)5.777 F F2
+(%)3.277 E F0 .777(introduces a job speci\214cation)3.277 F(\()108 225.6
+Q F3(jobspec)A F0 3.458(\). Job)B(number)3.458 E F3(n)3.818 E F0 .957
+(may be referred to as)3.697 F F2(%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 237.6 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F2(%ce)3.09 E
+F0 .59(refers to a)3.09 F .385(stopped job whose command name be)108
+249.6 R .385(gins with)-.15 F F2(ce)2.885 E F0 5.385(.I)C 2.885(fap)
+-5.385 G .385(re\214x matches more than one job,)-2.885 F F2(bash)2.885
+E F0 .385(reports an)2.885 F(error)108 261.6 Q 5.194(.U)-.55 G(sing)
+-5.194 E F2(%?ce)2.694 E F0 2.694(,o)C 2.694(nt)-2.694 G .194
+(he other hand, refers to an)-2.694 F 2.694(yj)-.15 G .194
+(ob containing the string)-2.694 F F2(ce)2.694 E F0 .194
+(in its command line.)2.694 F .194(If the)5.194 F .306
+(substring matches more than one job,)108 273.6 R F2(bash)2.806 E F0
+.306(reports an error)2.806 F 5.306(.T)-.55 G .306(he symbols)-5.306 F
+F2(%%)2.806 E F0(and)2.806 E F2(%+)2.806 E F0 .306(refer to the shell')
+2.806 F(s)-.55 E .132(notion of the)108 285.6 R F3(curr)2.832 E .133
+(ent job)-.37 F F0 2.633(,w).23 G .133
+(hich is the last job stopped while it w)-2.633 F .133(as in the fore)
+-.1 F .133(ground or started in the back-)-.15 F 2.576(ground. The)108
+297.6 R F3(pr)3.826 E -.15(ev)-.37 G .076(ious job).15 F F0 .076
+(may be referenced using)2.806 F F2<25ad>2.576 E F0 5.076(.I)C 2.576(ft)
+-5.076 G .075(here is only a single job,)-2.576 F F2(%+)2.575 E F0(and)
+2.575 E F2<25ad>2.575 E F0 .075(can both)2.575 F .317
+(be used to refer to that job)108 309.6 R 5.317(.I)-.4 G 2.817(no)-5.317
+G .317(utput pertaining to jobs \(e.g., the output of the)-2.817 F F2
+(jobs)2.817 E F0 .317(command\), the current)2.817 F .033(job is al)108
+321.6 R -.1(wa)-.1 G .033(ys \215agged with a).1 F F2(+)2.533 E F0 2.533
+(,a)C .033(nd the pre)-2.533 F .033(vious job with a)-.25 F F2<ad>2.533
+E F0 5.033(.A)C .033(single % \(with no accompan)-2.5 F .032
+(ying job speci-)-.15 F(\214cation\) also refers to the current job)108
+333.6 Q(.)-.4 E .443
+(Simply naming a job can be used to bring it into the fore)108 350.4 R
+(ground:)-.15 E F2(%1)2.944 E F0 .444(is a synon)2.944 F .444(ym for)
+-.15 F F2 -.63(``)2.944 G .444(fg %1').63 F(')-.63 E F0 2.944(,b)C
+(ringing)-2.944 E 1.473(job 1 from the background into the fore)108
+362.4 R 3.973(ground. Similarly)-.15 F(,)-.65 E F2 -.63(``)3.972 G 1.472
+(%1 &').63 F(')-.63 E F0 1.472(resumes job 1 in the background,)3.972 F
+(equi)108 374.4 Q -.25(va)-.25 G(lent to).25 E F2 -.63(``)2.5 G(bg %1')
+.63 E(')-.63 E F0(.)A .13(The shell learns immediately whene)108 391.2 R
+-.15(ve)-.25 G 2.63(raj).15 G .13(ob changes state.)-2.63 F(Normally)
+5.131 E(,)-.65 E F2(bash)2.631 E F0 -.1(wa)2.631 G .131
+(its until it is about to print a).1 F .158
+(prompt before reporting changes in a job')108 403.2 R 2.658(ss)-.55 G
+.158(tatus so as to not interrupt an)-2.658 F 2.657(yo)-.15 G .157
+(ther output.)-2.657 F .157(If the)5.157 F F2<ad62>2.657 E F0 .157
+(option to)2.657 F(the)108 415.2 Q F2(set)2.647 E F0 -.2(bu)2.647 G .147
+(iltin command is enabled,).2 F F2(bash)2.647 E F0 .148
+(reports such changes immediately)2.648 F 5.148(.A)-.65 G .448 -.15
+(ny t)-5.148 H .148(rap on).15 F F1(SIGCHLD)2.648 E F0 .148(is e)2.398 F
+-.15(xe)-.15 G(-).15 E(cuted for each child that e)108 427.2 Q(xits.)
+-.15 E .033(If an attempt to e)108 444 R(xit)-.15 E F2(bash)2.533 E F0
+.033(is made while jobs are stopped \(or)2.533 F 2.532(,i)-.4 G 2.532
+(ft)-2.532 G(he)-2.532 E F2(checkjobs)2.532 E F0 .032
+(shell option has been enabled)2.532 F 1.002(using the)108 456 R F2
+(shopt)3.502 E F0 -.2(bu)3.502 G 1.002
+(iltin, running\), the shell prints a w).2 F 1.002
+(arning message, and, if the)-.1 F F2(checkjobs)3.503 E F0 1.003
+(option is en-)3.503 F .956(abled, lists the jobs and their statuses.)
+108 468 R(The)5.955 E F2(jobs)3.455 E F0 .955
+(command may then be used to inspect their status.)3.455 F .955(If a)
+5.955 F .603(second attempt to e)108 480 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 492 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E .645
+(When the shell is w)108 508.8 R .645
+(aiting for a job or process using the)-.1 F F2(wait)3.144 E F0 -.2(bu)
+3.144 G .644(iltin, and job control is enabled,).2 F F2(wait)3.144 E F0
+(will)3.144 E .282(return when the job changes state. The)108 520.8 R F2
+<ad66>2.782 E F0 .282(option causes)2.782 F F2(wait)2.782 E F0 .282
+(to w)2.782 F .282(ait until the job or process terminates be-)-.1 F
+(fore returning.)108 532.8 Q/F4 10.95/Times-Bold@0 SF(PR)72 549.6 Q
+(OMPTING)-.329 E F0 .645(When e)108 561.6 R -.15(xe)-.15 G .645
+(cuting interacti).15 F -.15(ve)-.25 G(ly).15 E(,)-.65 E F2(bash)3.145 E
+F0 .645(displays the primary prompt)3.145 F F1(PS1)3.145 E F0 .645
+(when it is ready to read a command,)2.895 F .427
+(and the secondary prompt)108 573.6 R F1(PS2)2.927 E F0 .427
+(when it needs more input to complete a command.)2.677 F F2(Bash)5.428 E
+F0(displays)2.928 E F1(PS0)2.928 E F0(after)2.678 E .038
+(it reads a command b)108 585.6 R .038(ut before e)-.2 F -.15(xe)-.15 G
+.038(cuting it.).15 F F2(Bash)5.038 E F0(displays)2.537 E F1(PS4)2.537 E
+F0 .037(as described abo)2.287 F .337 -.15(ve b)-.15 H .037
+(efore tracing each com-).15 F 1.121(mand when the)108 597.6 R F2<ad78>
+3.621 E F0 1.122(option is enabled.)3.621 F F2(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 609.6 Q(ws:)-.25 E F2(\\a)144 621.6 Q F0
+(an ASCII bell character \(07\))180 621.6 Q F2(\\d)144 633.6 Q F0
+(the date in "W)180 633.6 Q(eekday Month Date" format \(e.g., "T)-.8 E
+(ue May 26"\))-.45 E F2(\\D{)144 645.6 Q F3(format)A F2(})A F0(the)180
+657.6 Q F3(format)3.927 E F0 1.427(is passed to)3.927 F F3(strftime)
+3.927 E F0 1.427
+(\(3\) and the result is inserted into the prompt string; an)B(empty)180
+669.6 Q F3(format)2.5 E F0
+(results in a locale-speci\214c time representation.)2.5 E
+(The braces are required)5 E F2(\\e)144 681.6 Q F0
+(an ASCII escape character \(033\))180 681.6 Q F2(\\h)144 693.6 Q F0
+(the hostname up to the \214rst `.)180 693.6 Q(')-.7 E F2(\\H)144 705.6
+Q F0(the hostname)180 705.6 Q F2(\\j)144 717.6 Q F0
+(the number of jobs currently managed by the shell)180 717.6 Q
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(40)185.115 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(\\l)144 84 Q F0(the basename of the shell')180 84 Q 2.5(st)-.55 G
+(erminal de)-2.5 E(vice name)-.25 E F1(\\n)144 96 Q F0(ne)180 96 Q
+(wline)-.25 E F1(\\r)144 108 Q F0(carriage return)180 108 Q F1(\\s)144
+120 Q F0(the name of the shell, the basename of)180 120 Q F1($0)2.5 E F0
+(\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F1(\\t)144
+132 Q F0(the current time in 24-hour HH:MM:SS format)180 132 Q F1(\\T)
+144 144 Q F0(the current time in 12-hour HH:MM:SS format)180 144 Q F1
+(\\@)144 156 Q F0(the current time in 12-hour am/pm format)180 156 Q F1
+(\\A)144 168 Q F0(the current time in 24-hour HH:MM format)180 168 Q F1
+(\\u)144 180 Q F0(the username of the current user)180 180 Q F1(\\v)144
+192 Q F0(the v)180 192 Q(ersion of)-.15 E F1(bash)2.5 E F0
+(\(e.g., 2.00\))2.5 E F1(\\V)144 204 Q F0(the release of)180 204 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 216 Q F0 .119(the v)180 216
+R .119(alue of the)-.25 F F1(PWD)2.619 E F0 .119(shell v)2.619 F .119
+(ariable \()-.25 F F1($PWD)A F0 .119(\), with)B/F2 9/Times-Bold@0 SF
+($HOME)2.619 E F0(abbre)2.369 E .119(viated with a tilde \(uses)-.25 F
+(the v)180 228 Q(alue of the)-.25 E F2(PR)2.5 E(OMPT_DIR)-.27 E(TRIM)
+-.36 E F0 -.25(va)2.25 G(riable\)).25 E F1(\\W)144 240 Q F0
+(the basename of)180 240 Q F1($PWD)2.5 E F0 2.5(,w)C(ith)-2.5 E F2
+($HOME)2.5 E F0(abbre)2.25 E(viated with a tilde)-.25 E F1(\\!)144 252 Q
+F0(the history number of this command)180 252 Q F1(\\#)144 264 Q F0
+(the command number of this command)180 264 Q F1(\\$)144 276 Q F0
+(if the ef)180 276 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 288 Q/F3 10
+/Times-Italic@0 SF(nnn)A F0
+(the character corresponding to the octal number)180 288 Q F3(nnn)2.5 E
+F1(\\\\)144 300 Q F0 2.5(ab)180 300 S(ackslash)-2.5 E F1(\\[)144 312 Q
+F0(be)180 312 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 324 Q F1(\\])144 336 Q F0
+(end a sequence of non-printing characters)180 336 Q .119
+(The command number and the history number are usually dif)108 352.8 R
+.12(ferent: the history number of a command is its)-.25 F .547(position\
+ in the history list, which may include commands restored from the hist\
+ory \214le \(see)108 364.8 R F2(HIST)3.046 E(OR)-.162 E(Y)-.315 E F0
+(be-)2.796 E(lo)108 376.8 Q .354(w\), while the command number is the p\
+osition in the sequence of commands e)-.25 F -.15(xe)-.15 G .355
+(cuted during the current).15 F .823(shell session.)108 388.8 R .822
+(After the string is decoded, it is e)5.823 F .822
+(xpanded via parameter e)-.15 F .822(xpansion, command substitution,)
+-.15 F .682(arithmetic e)108 400.8 R .682(xpansion, and quote remo)-.15
+F -.25(va)-.15 G .682(l, subject to the v).25 F .683(alue of the)-.25 F
+F1(pr)3.183 E(omptv)-.18 E(ars)-.1 E F0 .683(shell option \(see the de-)
+3.183 F 1.198(scription of the)108 412.8 R F1(shopt)3.698 E F0 1.198
+(command under)3.698 F F2 1.197(SHELL B)3.697 F(UIL)-.09 E 1.197
+(TIN COMMANDS)-.828 F F0(belo)3.447 E 3.697(w\). This)-.25 F 1.197
+(can ha)3.697 F 1.497 -.15(ve u)-.2 H(nw).15 E(anted)-.1 E .322(side ef)
+108 424.8 R .322(fects if escaped portions of the string appear within \
+command substitution or contain characters spe-)-.25 F(cial to w)108
+436.8 Q(ord e)-.1 E(xpansion.)-.15 E/F4 10.95/Times-Bold@0 SF(READLINE)
+72 453.6 Q F0 .151
+(This is the library that handles reading input when using an interacti)
+108 465.6 R .45 -.15(ve s)-.25 H .15(hell, unless the).15 F F1
+(\255\255noediting)2.65 E F0(option)2.65 E .384(is gi)108 477.6 R -.15
+(ve)-.25 G 2.884(na).15 G 2.884(ts)-2.884 G .384(hell in)-2.884 F -.2
+(vo)-.4 G 2.884(cation. Line).2 F .384
+(editing is also used when using the)2.884 F F1<ad65>2.885 E F0 .385
+(option to the)2.885 F F1 -.18(re)2.885 G(ad).18 E F0 -.2(bu)2.885 G
+2.885(iltin. By).2 F(de-)2.885 E -.1(fa)108 489.6 S 1.407
+(ult, the line editing commands are similar to those of Emacs.).1 F
+3.906(Av)6.406 G 1.406(i-style line editing interf)-3.906 F 1.406
+(ace is also)-.1 F -.2(av)108 501.6 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 F1 .85(\255o emacs)3.35 F F0(or)3.35 E F1 .85(\255o vi)3.35 F F0
+.85(options to the)3.35 F F1(set)3.35 E F0 -.2(bu)3.35 G(iltin).2 E
+(\(see)108 513.6 Q F2 .763(SHELL B)3.263 F(UIL)-.09 E .763(TIN COMMANDS)
+-.828 F F0(belo)3.013 E 3.263(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 F1(+o)3.262 E
+(emacs)108 525.6 Q F0(or)2.5 E F1(+o vi)2.5 E F0(options to the)2.5 E F1
+(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(Readline Notation)87 542.4 Q
+F0 .463(In this section, the Emacs-style notation is used to denote k)
+108 554.4 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 F3 -.1(ke)C(y)-.2 E F0(,)A
+1.153(e.g., C\255n means Control\255N.)108 566.4 R(Similarly)6.153 E(,)
+-.65 E F3(meta)4.033 E F0 -.1(ke)3.913 G 1.153(ys are denoted by M\255)
+-.05 F F3 -.1(ke)C(y)-.2 E F0 3.652(,s)C 3.652(oM)-3.652 G 1.152
+(\255x means Meta\255X.)-3.652 F(\(On)6.152 E -.1(ke)108 578.4 S .83
+(yboards without a)-.05 F F3(meta)3.71 E F0 -.1(ke)3.59 G 2.13 -.65
+(y, M)-.05 H<ad>.65 E F3(x)A F0 .83(means ESC)3.33 F F3(x)3.33 E F0 3.33
+(,i)C .831(.e., press the Escape k)-3.33 F 1.131 -.15(ey t)-.1 H .831
+(hen the).15 F F3(x)4.101 E F0 -.1(ke)3.861 G 4.631 -.65(y. T)-.05 H
+.831(his mak).65 F(es)-.1 E .6(ESC the)108 590.4 R F3 .6(meta pr)3.1 F
+(e\214x)-.37 E F0 5.6(.T)C .6(he combination M\255C\255)-5.6 F F3(x)A F0
+.599(means ESC\255Control\255)3.099 F F3(x)A F0 3.099(,o)C 3.099(rp)
+-3.099 G .599(ress the Escape k)-3.099 F .899 -.15(ey t)-.1 H .599
+(hen hold).15 F(the Control k)108 602.4 Q .3 -.15(ey w)-.1 H
+(hile pressing the).15 E F3(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G(\))
+.65 E .595(Readline commands may be gi)108 619.2 R -.15(ve)-.25 G 3.096
+(nn).15 G(umeric)-3.096 E F3(ar)3.426 E(guments)-.37 E F0 3.096(,w).27 G
+.596(hich normally act as a repeat count.)-3.096 F(Sometimes,)5.596 E
+(ho)108 631.2 Q(we)-.25 E -.15(ve)-.25 G 1.419 -.4(r, i).15 H 3.119(ti)
+.4 G 3.119(st)-3.119 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.018(acts in the forw)108 643.2 R 1.018
+(ard direction \(e.g.,)-.1 F F1(kill\255line)3.518 E F0 3.518(\)c)C
+1.018(auses that command to act in a backw)-3.518 F 1.019
+(ard direction.)-.1 F(Com-)6.019 E(mands whose beha)108 655.2 Q
+(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo)
+-.25 E -.65(w.)-.25 G .812(When a command is described as)108 672 R F3
+(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 .811
+(or possible future retrie)-3.311 F -.25(va)-.25 G 3.311(l\().25 G F3
+(yank-)-3.311 E(ing)108 684 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 F3
+.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 696 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 708 Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(41)185.115 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(Readline Initialization)87 84 Q F0 .091(Readline is customized by pu\
+tting commands in an initialization \214le \(the)108 96 R/F2 10
+/Times-Italic@0 SF(inputr)2.591 E(c)-.37 E F0 2.591(\214le\). The)2.591
+F .092(name of this \214le)2.591 F .573(is tak)108 108 R .573
+(en from the v)-.1 F .573(alue of the)-.25 F/F3 9/Times-Bold@0 SF
+(INPUTRC)3.073 E F0 -.25(va)2.823 G 3.073(riable. If).25 F .573(that v)
+3.073 F .573(ariable is unset, the def)-.25 F .573(ault is)-.1 F F2
+(~/.inputr)2.573 E(c)-.37 E F0 5.572(.I).31 G 3.072(ft)-5.572 G(hat)
+-3.072 E 3.061(\214le does)108 120 R .561(not e)3.061 F .562
+(xist or cannot be read, the ultimate def)-.15 F .562(ault is)-.1 F F2
+(/etc/inputr)4.212 E(c)-.37 E F0 5.562(.W).31 G .562
+(hen a program which uses the)-5.562 F .175(readline library starts up,\
+ the initialization \214le is read, and the k)108 132 R .474 -.15(ey b)
+-.1 H .174(indings and v).15 F .174(ariables are set.)-.25 F .174
+(There are)5.174 F .238(only a fe)108 144 R 2.738(wb)-.25 G .238
+(asic constructs allo)-2.738 F .239
+(wed in the readline initialization \214le.)-.25 F .239
+(Blank lines are ignored.)5.239 F .239(Lines be)5.239 F(gin-)-.15 E .554
+(ning with a)108 156 R F1(#)3.054 E F0 .554(are comments.)3.054 F .554
+(Lines be)5.554 F .554(ginning with a)-.15 F F1($)3.054 E F0 .554
+(indicate conditional constructs.)3.054 F .553(Other lines denote)5.553
+F -.1(ke)108 168 S 2.5(yb)-.05 G(indings and v)-2.5 E(ariable settings.)
+-.25 E .986(The def)108 184.8 R .986(ault k)-.1 F -.15(ey)-.1 G .987
+(-bindings may be changed with an).15 F F2(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 196.8 Q(wn commands and bindings.)-.25 E -.15
+(Fo)108 213.6 S 2.5(re).15 G(xample, placing)-2.65 E
+(M\255Control\255u: uni)144 230.4 Q -.15(ve)-.25 G(rsal\255ar).15 E
+(gument)-.18 E(or)108 242.4 Q(C\255Meta\255u: uni)144 254.4 Q -.15(ve)
+-.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 266.4 Q F2(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 F2(univer)2.58 E
+(sal\255ar)-.1 E(gument)-.37 E F0(.).68 E 1.011(The follo)108 283.2 R
+1.011(wing symbolic character names are recognized:)-.25 F F2 -.4(RU)
+3.511 G(BOUT).4 E F0(,)1.27 E F2(DEL)4.091 E F0(,).53 E F2(ESC)4.021 E
+F0(,).72 E F2(LFD)4.091 E F0(,).28 E F2(NEWLINE)4.21 E F0(,).73 E F2
+(RET)4.14 E F0(,)1.27 E F2(RETURN)108.63 295.2 Q F0(,)1.1 E F2(SPC)2.83
+E F0(,).72 E F2(SP)2.83 E -.3(AC)-.9 G(E).3 E F0 2.5(,a).73 G(nd)-2.5 E
+F2 -.5(TA)2.5 G(B).5 E F0(.).27 E .209
+(In addition to command names, readline allo)108 312 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 324 Q F2(macr)2.5 E(o)-.45 E F0(\).)A F1
+(Readline K)87 340.8 Q(ey Bindings)-.25 E F0 .366
+(The syntax for controlling k)108 352.8 R .666 -.15(ey b)-.1 H .366
+(indings in the).15 F F2(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 364.8 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 .139(\214ed in one of tw)108
+376.8 R 2.638(ow)-.1 G .138(ays: as a symbolic k)-2.738 F .438 -.15
+(ey n)-.1 H .138(ame, possibly with).15 F F2(Meta\255)2.638 E F0(or)
+2.638 E F2(Contr)2.638 E(ol\255)-.45 E F0(pre\214x)2.638 E .138
+(es, or as a k)-.15 F .438 -.15(ey s)-.1 H(e-).15 E(quence.)108 388.8 Q
+.16(When using the form)108 405.6 R F1 -.1(ke)2.66 G(yname).1 E F0(:)A
+F2(function\255name).833 E F0(or)2.66 E F2(macr)2.66 E(o)-.45 E F0(,)A
+F2 -.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 417.6 R(or e)
+-.15 E(xample:)-.15 E(Control-u: uni)144 441.6 Q -.15(ve)-.25 G
+(rsal\255ar).15 E(gument)-.18 E(Meta-Rubout: backw)144 453.6 Q
+(ard-kill-w)-.1 E(ord)-.1 E(Control-o: "> output")144 465.6 Q .699
+(In the abo)108 482.4 R .998 -.15(ve ex)-.15 H(ample,).15 E F2(C\255u)
+3.038 E F0 .698(is bound to the function)3.448 F F1(uni)3.198 E -.1(ve)
+-.1 G(rsal\255ar).1 E(gument)-.1 E F0(,)A F2(M\255DEL)3.878 E F0 .698
+(is bound to the func-)3.728 F(tion)108 494.4 Q F1
+(backward\255kill\255w)2.758 E(ord)-.1 E F0 2.758(,a)C(nd)-2.758 E F2
+(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
+506.4 Q(xt)-.15 E/F4 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 523.2 R F1("k)2.556
+E(eyseq")-.1 E F0(:)A F2(function\255name).833 E F0(or)2.556 E F2(macr)
+2.556 E(o)-.45 E F0(,)A F1 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055
+(fers from)-.25 F F1 -.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 535.2 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 547.2 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 559.2 Q("\\C\255u": uni)144 583.2 Q -.15(ve)
+-.25 G(rsal\255ar).15 E(gument)-.18 E
+("\\C\255x\\C\255r": re\255read\255init\255\214le)144 595.2 Q
+("\\e[11~": "Function K)144 607.2 Q .3 -.15(ey 1)-.25 H(").15 E .314
+(In this e)108 624 R(xample,)-.15 E F2(C\255u)2.654 E F0 .314(is ag)
+3.064 F .315(ain bound to the function)-.05 F F1(uni)2.815 E -.1(ve)-.1
+G(rsal\255ar).1 E(gument)-.1 E F0(.)A F2 .315(C\255x C\255r)5.155 F F0
+.315(is bound to the func-)3.545 F(tion)108 636 Q F1 -.18(re)2.5 G<ad72>
+.18 E(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F2(ESC [ 1 1 ~)
+3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F4(Function Key 1)
+2.5 E F0(.)A(The full set of GNU Emacs style escape sequences is)108
+652.8 Q F1<5c43ad>144 664.8 Q F0(control pre\214x)180 664.8 Q F1<5c4dad>
+144 676.8 Q F0(meta pre\214x)180 676.8 Q F1(\\e)144 688.8 Q F0
+(an escape character)180 688.8 Q F1(\\\\)144 700.8 Q F0(backslash)180
+700.8 Q F1(\\")144 712.8 Q F0(literal ")180 712.8 Q(GNU Bash 5.2)72 768
+Q(2022 September 19)135.955 E(42)185.115 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<5c08>144 84 Q F0(literal \010)180 84 Q(In addition to the GNU Emacs \
+style escape sequences, a second set of backslash escapes is a)108 100.8
+Q -.25(va)-.2 G(ilable:).25 E F1(\\a)144 112.8 Q F0(alert \(bell\))180
+112.8 Q F1(\\b)144 124.8 Q F0(backspace)180 124.8 Q F1(\\d)144 136.8 Q
+F0(delete)180 136.8 Q F1(\\f)144 148.8 Q F0(form feed)180 148.8 Q F1
+(\\n)144 160.8 Q F0(ne)180 160.8 Q(wline)-.25 E F1(\\r)144 172.8 Q F0
+(carriage return)180 172.8 Q F1(\\t)144 184.8 Q F0(horizontal tab)180
+184.8 Q F1(\\v)144 196.8 Q F0 -.15(ve)180 196.8 S(rtical tab).15 E F1
+(\\)144 208.8 Q/F2 10/Times-Italic@0 SF(nnn)A F0
+(the eight-bit character whose v)180 208.8 Q(alue is the octal v)-.25 E
+(alue)-.25 E F2(nnn)2.5 E F0(\(one to three digits\))2.5 E F1(\\x)144
+220.8 Q F2(HH)A F0(the eight-bit character whose v)180 220.8 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 1.142
+(When entering the te)108 237.6 R 1.141(xt of a macro, single or double\
+ quotes must be used to indicate a macro de\214nition.)-.15 F .089
+(Unquoted te)108 249.6 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
+261.6 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
+F1(Bash)108 278.4 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 F1(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 290.4 R .345 -.15
+(ve u)-.25 H .046(se by using the).15 F F1<ad6f>2.546 E F0 .046
+(option to the)2.546 F F1(set)2.546 E F0 -.2(bu)2.546 G .046
+(iltin command).2 F(\(see)108 302.4 Q/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
+(Readline V)87 319.2 Q(ariables)-.92 E F0 .044(Readline has v)108 331.2
+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 F2(inpu-)2.553 E(tr)108 343.2 Q(c)-.37 E
+F0(\214le with a statement of the form)2.81 E F1(set)144 360 Q F2
+(variable\255name value)2.5 E F0(or using the)108 372 Q F1(bind)2.5 E F0
+-.2(bu)2.5 G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E
+(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E .79
+(Except where noted, readline v)108 388.8 R .79(ariables can tak)-.25 F
+3.29(et)-.1 G .79(he v)-3.29 F(alues)-.25 E F1(On)3.29 E F0(or)3.29 E F1
+(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 400.8 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 412.8 Q -.15(ve)-.25 G .467
+(\), and "1" are equi).15 F -.25(va)-.25 G .468(lent to).25 F F1(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 F1(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
+424.8 S(lues are:).25 E F1(acti)108 441.6 Q -.1(ve)-.1 G<ad72>.1 E
+(egion\255start\255color)-.18 E F0 2.73(As)144 453.6 S .23(tring v)-2.73
+F .23(ariable that controls the te)-.25 F .229
+(xt color and background when displaying the te)-.15 F .229
+(xt in the acti)-.15 F -.15(ve)-.25 G(re)144 465.6 Q 1.526
+(gion \(see the description of)-.15 F F1(enable\255acti)4.026 E -.1(ve)
+-.1 G<ad72>.1 E(egion)-.18 E F0(belo)4.026 E 4.026(w\). This)-.25 F
+1.526(string must not tak)4.026 F 4.027(eu)-.1 G 4.027(pa)-4.027 G -.15
+(ny)-4.027 G(ph)144 477.6 Q .284
+(ysical character positions on the display)-.05 F 2.784(,s)-.65 G 2.784
+(oi)-2.784 G 2.784(ts)-2.784 G .283
+(hould consist only of terminal escape sequences.)-2.784 F .45
+(It is output to the terminal before displaying the te)144 489.6 R .45
+(xt in the acti)-.15 F .75 -.15(ve r)-.25 H -.15(eg).15 G 2.95
+(ion. This).15 F -.25(va)2.95 G .45(riable is reset to).25 F .379
+(the def)144 501.6 R .379(ault v)-.1 F .379(alue whene)-.25 F -.15(ve)
+-.25 G 2.879(rt).15 G .379(he terminal type changes.)-2.879 F .379
+(The def)5.379 F .379(ault v)-.1 F .378
+(alue is the string that puts the)-.25 F .654
+(terminal in standout mode, as obtained from the terminal')144 513.6 R
+3.155(st)-.55 G .655(erminfo description.)-3.155 F 3.155(As)5.655 G .655
+(ample v)-3.155 F(alue)-.25 E(might be)144 525.6 Q/F4 10/Courier@0 SF
+("\\e[01;33m")2.5 E F0(.)A F1(acti)108 537.6 Q -.1(ve)-.1 G<ad72>.1 E
+(egion\255end\255color)-.18 E F0 3.909(As)144 549.6 S 1.409(tring v)
+-3.909 F 1.408(ariable that "undoes" the ef)-.25 F 1.408(fects of)-.25 F
+F1(acti)3.908 E -.1(ve)-.1 G<ad72>.1 E(egion\255start\255color)-.18 E F0
+1.408(and restores "normal")3.908 F .216
+(terminal display appearance after displaying te)144 561.6 R .216
+(xt in the acti)-.15 F .516 -.15(ve r)-.25 H -.15(eg).15 G 2.716
+(ion. This).15 F .216(string must not tak)2.716 F 2.716(eu)-.1 G(p)
+-2.716 E(an)144 573.6 Q 3.738(yp)-.15 G -.05(hy)-3.738 G 1.238
+(sical character positions on the display).05 F 3.737(,s)-.65 G 3.737
+(oi)-3.737 G 3.737(ts)-3.737 G 1.237
+(hould consist only of terminal escape se-)-3.737 F 2.927(quences. It)
+144 585.6 R .427(is output to the terminal after displaying the te)2.927
+F .428(xt in the acti)-.15 F .728 -.15(ve r)-.25 H -.15(eg).15 G 2.928
+(ion. This).15 F -.25(va)2.928 G .428(riable is).25 F .519
+(reset to the def)144 597.6 R .518(ault v)-.1 F .518(alue whene)-.25 F
+-.15(ve)-.25 G 3.018(rt).15 G .518(he terminal type changes.)-3.018 F
+.518(The def)5.518 F .518(ault v)-.1 F .518(alue is the string that)-.25
+F .251(restores the terminal from standout mode, as obtained from the t\
+erminal')144 609.6 R 2.752(st)-.55 G .252(erminfo description.)-2.752 F
+(A)5.252 E(sample v)144 621.6 Q(alue might be)-.25 E F4("\\e[0m")2.5 E
+F0(.)A F1(bell\255style \(audible\))108 633.6 Q F0 .011
+(Controls what happens when readline w)144 645.6 R .011
+(ants to ring the terminal bell.)-.1 F .01(If set to)5.01 F F1(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 657.6 R .94(If set to)5.94 F F1(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 F1(audible)3.44 E F0(,)A
+(readline attempts to ring the terminal')144 669.6 Q 2.5(sb)-.55 G(ell.)
+-2.5 E F1(bind\255tty\255special\255chars \(On\))108 681.6 Q F0 .056
+(If set to)144 693.6 R F1(On)2.556 E F0 2.556(,r)C .056(eadline attempt\
+s to bind the control characters treated specially by the k)-2.556 F
+(ernel')-.1 E 2.555(st)-.55 G(ermi-)-2.555 E(nal dri)144 705.6 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(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E
+(43)185.115 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(blink\255matching\255par)108 84 Q(en \(Off\))-.18 E F0 .21(If set to)
+144 96 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 108 Q F1(color)108 120 Q
+(ed\255completion\255pr)-.18 E(e\214x \(Off\))-.18 E F0 .515(If set to)
+144 132 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 144 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 156 Q F0
+(en)3.077 E .577(vironment v)-.4 F 3.077(ariable. If)-.25 F .577
+(there is a color de\214nition in)3.077 F F1($LS_COLORS)3.077 E F0 .577
+(for the cus-)3.077 F .134(tom suf)144 168 R .135(\214x "readline-color\
+ed-completion-pre\214x", readline uses this color for the common pre\
+\214x in-)-.25 F(stead of its def)144 180 Q(ault.)-.1 E F1(color)108 192
+Q(ed\255stats \(Off\))-.18 E F0 1.58(If set to)144 204 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
+216 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 228 Q(`#')-.63 E('\))-.63 E F0 .884
+(The string that is inserted when the readline)144 240 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 252 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 264 Q F0 1.453(The number of screen columns used to display possibl\
+e matches when performing completion.)144 276 R .193(The v)144 288 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 300 Q(The def)5 E
+(ault v)-.1 E(alue is \2551.)-.25 E F1(completion\255ignor)108 312 Q
+(e\255case \(Off\))-.18 E F0(If set to)144 324 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 336 Q F0 .094(If set to)144 348 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 360 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 372 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 384 R 1.275
+(without modi\214cation.)144 396 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 408 S(lue are replaced with an \
+ellipsis when displaying possible completions.).25 E F1
+(completion\255query\255items \(100\))108 420 Q F0 .529
+(This determines when the user is queried about vie)144 432 R .53
+(wing the number of possible completions gen-)-.25 F .561(erated by the)
+144 444 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 456 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 468 S .368
+(riable, readline will ask whether or not the user wishes to vie).25 F
+2.867(wt)-.25 G .367(hem; otherwise the)-2.867 F 2.867(ya)-.15 G .367
+(re simply)-2.867 F .672(listed on the terminal.)144 480 R 3.172(Az)
+5.672 G .673(ero v)-3.172 F .673(alue means readline should ne)-.25 F
+-.15(ve)-.25 G 3.173(ra).15 G .673(sk; ne)-3.173 F -.05(ga)-.15 G(ti).05
+E .973 -.15(ve v)-.25 H .673(alues are treated)-.1 F(as zero.)144 492 Q
+F1(con)108 504 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .613(If set to)
+144 516 R F1(On)3.113 E F0 3.113(,r)C .613(eadline will con)-3.113 F
+-.15(ve)-.4 G .613(rt characters with the eighth bit set to an ASCII k)
+.15 F .912 -.15(ey s)-.1 H .612(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 .542(meta pr)3.042 F
+(e-)-.37 E<8c78>144 540 Q F0 3.751(\). The)B(def)3.751 E 1.251(ault is)
+-.1 F F2(On)3.751 E F0 3.751(,b)C 1.251(ut readline will set it to)
+-3.951 F F2(Of)3.75 E(f)-.18 E F0 1.25
+(if the locale contains eight-bit characters.)3.75 F 1.141(This v)144
+552 R 1.141(ariable is dependent on the)-.25 F F1(LC_CTYPE)3.641 E F0
+1.141(locale cate)3.641 F(gory)-.15 E 3.641(,a)-.65 G 1.142
+(nd may change if the locale is)-3.641 F(changed.)144 564 Q F1
+(disable\255completion \(Off\))108 576 Q F0 .038(If set to)144 588 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 600 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 612 Q(ol\255characters \(On\))-.18 E F0 1.21
+(When set to)144 624 R F1(On)3.71 E F0 3.71(,o)C 3.71(no)-3.71 G 1.211
+(perating systems that indicate the)-3.71 F 3.711(ys)-.15 G 1.211
+(upport it, readline echoes a character)-3.711 F
+(corresponding to a signal generated from the k)144 636 Q -.15(ey)-.1 G
+(board.).15 E F1(editing\255mode \(emacs\))108 648 Q F0 .142
+(Controls whether readline be)144 660 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.641 E F0
+(or)2.641 E F2(vi)2.641 E F0(.)A F1(editing\255mode)5.141 E F0
+(can be set to either)144 672 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E
+F0(.)A F1(emacs\255mode\255string \(@\))108 684 Q F0 .517(If the)144 696
+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 .622
+(last line of the primary prompt when emacs editing mode is acti)144 708
+R -.15(ve)-.25 G 5.622(.T).15 G .622(he v)-5.622 F .621(alue is e)-.25 F
+.621(xpanded lik)-.15 F 3.121(ea)-.1 G -.1(ke)144 720 S 3.339(yb)-.05 G
+.839(inding, so the standard set of meta- and control pre\214x)-3.339 F
+.84(es and backslash escape sequences is)-.15 F(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(44)185.115 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 -.2(av)144 84 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 96 Q/F1 10/Times-Bold@0 SF(enable\255acti)108 108 Q -.1(ve)-.1 G
+<ad72>.1 E(egion \(On\))-.18 E F0(The)144 120 Q/F2 10/Times-Italic@0 SF
+(point)3.245 E F0 .746(is the current cursor position, and)3.245 F F2
+(mark)3.246 E F0 .746(refers to a sa)3.246 F -.15(ve)-.2 G 3.246(dc).15
+G .746(ursor position.)-3.246 F .746(The te)5.746 F .746(xt be-)-.15 F
+.344(tween the point and mark is referred to as the)144 132 R F2 -.37
+(re)2.844 G(gion)-.03 E F0 5.344(.W)C .344(hen this v)-5.344 F .344
+(ariable is set to)-.25 F F2(On)2.844 E F0 2.844(,r)C .344(eadline al-)
+-2.844 F(lo)144 144 Q .098(ws certain commands to designate the re)-.25
+F .098(gion as)-.15 F F2(active)2.598 E F0 5.098(.W)C .098(hen the re)
+-5.098 F .098(gion is acti)-.15 F -.15(ve)-.25 G 2.598(,r).15 G .098
+(eadline high-)-2.598 F .971(lights the te)144 156 R .971(xt in the re)
+-.15 F .971(gion using the v)-.15 F .971(alue of the)-.25 F F1(acti)3.47
+E -.1(ve)-.1 G<ad72>.1 E(egion\255start\255color)-.18 E F0 3.47(,w)C .97
+(hich def)-3.47 F .97(aults to)-.1 F .484
+(the string that enables the terminal')144 168 R 2.985(ss)-.55 G .485
+(tandout mode.)-2.985 F .485(The acti)5.485 F .785 -.15(ve r)-.25 H -.15
+(eg).15 G .485(ion sho).15 F .485(ws the te)-.25 F .485(xt inserted by)
+-.15 F(brack)144 180 Q(eted-paste and an)-.1 E 2.5(ym)-.15 G(atching te)
+-2.5 E(xt found by incremental and non-incremental history searches.)
+-.15 E F1(enable\255brack)108 192 Q(eted\255paste \(On\))-.1 E F0 .841
+(When set to)144 204 R F1(On)3.341 E F0 3.341(,r)C .841(eadline con\214\
+gures the terminal to insert each paste into the editing b)-3.341 F(uf)
+-.2 E .84(fer as a)-.25 F .799(single string of characters, instead of \
+treating each character as if it had been read from the k)144 216 R -.15
+(ey)-.1 G(-).15 E 3.159(board. This)144 228 R(pre)3.159 E -.15(ve)-.25 G
+.659(nts readline from e).15 F -.15(xe)-.15 G .659(cuting an).15 F 3.158
+(ye)-.15 G .658(diting commands bound to k)-3.158 F .958 -.15(ey s)-.1 H
+.658(equences ap-).15 F(pearing in the pasted te)144 240 Q(xt.)-.15 E F1
+(enable\255k)108 252 Q(eypad \(Off\))-.1 E F0 .892(When set to)144 264 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 276 Q 2.5(wk)-.25 G -.15(ey)-2.6
+G(s.).15 E F1(enable\255meta\255k)108 288 Q(ey \(On\))-.1 E F0 .64
+(When set to)144 300 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 312 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 324 Q F0(If set to)144 336 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 348 Q(eser)-.18 E -.1
+(ve)-.1 G(\255point \(Off\)).1 E F0 .552(If set to)144 360 R F1(On)3.052
+E F0 3.052(,t)C .552(he history code attempts to place point at the sam\
+e location on each history line re-)-3.052 F(trie)144 372 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 384 Q F0 .949(Set the maximum number of history entries sa)144 396 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 408 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 420 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 432 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
+(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 444 Q F1
+(horizontal\255scr)108 456 Q(oll\255mode \(Off\))-.18 E F0 .449
+(When set to)144 468 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 480 R(w)-.25 E 2.5(line. This)144 492 R
+(setting is automatically enabled for terminals of height 1.)2.5 E F1
+(input\255meta \(Off\))108 504 Q F0 1.062(If set to)144 516 R F1(On)
+3.562 E F0 3.562(,r)C 1.061(eadline will enable eight-bit input \(that \
+is, it will not strip the eighth bit from the)-3.562 F .335
+(characters it reads\), re)144 528 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 540 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 1.866(eight-bit characters.)144 552 R
+1.866(This v)6.866 F 1.867(ariable is dependent on the)-.25 F F1
+(LC_CTYPE)4.367 E F0 1.867(locale cate)4.367 F(gory)-.15 E 4.367(,a)-.65
+G 1.867(nd may)-4.367 F(change if the locale is changed.)144 564 Q F1
+(isear)108 576 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 588 R -.15(xe)-.15 G(cut-).15 E
+.934(ing the character as a command.)144 600 R .935(If this v)5.935 F
+.935(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.435(nav).15 G .935
+(alue, the characters)-3.685 F F2(ESC)3.435 E F0(and)144 612 Q F2
+(C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F1 -.1(ke)
+108 624 S(ymap \(emacs\)).1 E F0 2.021(Set the current readline k)144
+636 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.02
+(emacs, emacs\255standar)4.52 F(d,)-.37 E .041
+(emacs\255meta, emacs\255ctlx, vi, vi\255command)144 648 R F0 2.542(,a)C
+(nd)-2.542 E F2(vi\255insert)2.832 E F0(.).68 E F2(vi)5.042 E F0 .042
+(is equi)2.542 F -.25(va)-.25 G .042(lent to).25 F F2(vi\255command)
+2.542 E F0(;)A F2(emacs)2.542 E F0 .449(is equi)144 660 R -.25(va)-.25 G
+.449(lent to).25 F F2(emacs\255standar)2.949 E(d)-.37 E F0 5.449(.T)C
+.449(he def)-5.449 F .449(ault v)-.1 F .449(alue is)-.25 F F2(emacs)
+3.139 E F0 2.948(;t).27 G .448(he v)-2.948 F .448(alue of)-.25 F F1
+(editing\255mode)2.948 E F0 .448(also af-)2.948 F(fects the def)144 672
+Q(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1 -.1(ke)108 684 S
+(yseq\255timeout \(500\)).1 E F0 .367(Speci\214es the duration)144 696 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 .668 -.15(ey s)
+-.1 H(equence).15 E .525(\(one that can form a complete k)144 708 R .825
+-.15(ey s)-.1 H .524(equence using the input read so f).15 F(ar)-.1 E
+3.024(,o)-.4 G 3.024(rc)-3.024 G .524(an tak)-3.024 F 3.024(ea)-.1 G
+.524(dditional in-)-3.024 F .806(put to complete a longer k)144 720 R
+1.106 -.15(ey s)-.1 H 3.306(equence\). If).15 F .806(no input is recei)
+3.306 F -.15(ve)-.25 G 3.306(dw).15 G .807(ithin the timeout,)-3.306 F
+F2 -.37(re)3.307 G(adline).37 E F0(will)3.307 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(45)185.115 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 .907
+(use the shorter b)144 84 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 .906(alue of)-.25 F
+.05(1000 means that)144 96 R/F1 10/Times-Italic@0 SF -.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 108 R(alue,)-.25
+E F1 -.37(re)2.551 G(adline).37 E F0 .051(will w)2.551 F .051
+(ait until another k)-.1 F .351 -.15(ey i)-.1 H 2.551(sp).15 G(ressed)
+-2.551 E(to decide which k)144 120 Q .3 -.15(ey s)-.1 H
+(equence to complete.).15 E/F2 10/Times-Bold@0 SF(mark\255dir)108 132 Q
+(ectories \(On\))-.18 E F0(If set to)144 144 Q F2(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 F2(mark\255modi\214ed\255lines \(Off\))108 156 Q F0(If set to)144
+168 Q F2(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 F2
+(*)A F0(\).)A F2(mark\255symlink)108 180 Q(ed\255dir)-.1 E
+(ectories \(Off\))-.18 E F0 .175(If set to)144 192 R F2(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 204
+Q(alue of)-.25 E F2(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F2
+(match\255hidden\255\214les \(On\))108 216 Q F0 .193(This v)144 228 R
+.193(ariable, when set to)-.25 F F2(On)2.693 E F0 2.693(,c)C .192
+(auses readline to match \214les whose names be)-2.693 F .192
+(gin with a `.)-.15 F 2.692('\()-.7 G(hidden)-2.692 E .456
+(\214les\) when performing \214lename completion.)144 240 R .456
+(If set to)5.456 F F2(Off)2.956 E F0 2.956(,t)C .456(he leading `.)
+-2.956 F 2.956('m)-.7 G .457(ust be supplied by the)-2.956 F
+(user in the \214lename to be completed.)144 252 Q F2
+(menu\255complete\255display\255pr)108 264 Q(e\214x \(Off\))-.18 E F0
+1.586(If set to)144 276 R F2(On)4.086 E F0 4.086(,m)C 1.585(enu complet\
+ion displays the common pre\214x of the list of possible completions)
+-4.086 F(\(which may be empty\) before c)144 288 Q
+(ycling through the list.)-.15 E F2(output\255meta \(Off\))108 300 Q F0
+.506(If set to)144 312 R F2(On)3.006 E F0 3.006(,r)C .507(eadline will \
+display characters with the eighth bit set directly rather than as a me\
+ta-)-3.006 F(pre\214x)144 324 Q .885(ed escape sequence.)-.15 F .884
+(The def)5.884 F .884(ault is)-.1 F F1(Of)3.384 E(f)-.18 E F0 3.384(,b)C
+.884(ut readline will set it to)-3.584 F F1(On)3.384 E F0 .884
+(if the locale contains)3.384 F 1.866(eight-bit characters.)144 336 R
+1.866(This v)6.866 F 1.867(ariable is dependent on the)-.25 F F2
+(LC_CTYPE)4.367 E F0 1.867(locale cate)4.367 F(gory)-.15 E 4.367(,a)-.65
+G 1.867(nd may)-4.367 F(change if the locale is changed.)144 348 Q F2
+(page\255completions \(On\))108 360 Q F0 .809(If set to)144 372 R F2(On)
+3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F F1(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 384 Q F2
+(print\255completions\255horizontally \(Off\))108 396 Q F0 .227
+(If set to)144 408 R F2(On)2.727 E F0 2.727(,r)C .227(eadline will disp\
+lay completions with matches sorted horizontally in alphabetical or)
+-2.727 F(-)-.2 E(der)144 420 Q 2.5(,r)-.4 G(ather than do)-2.5 E
+(wn the screen.)-.25 E F2 -2.29 -.18(re v)108 432 T
+(ert\255all\255at\255newline \(Off\)).08 E F0 .699(If set to)144 444 R
+F2(On)3.199 E F0 3.199(,r)C .699
+(eadline will undo all changes to history lines before returning when)
+-3.199 F F2(accept\255line)3.198 E F0(is)3.198 E -.15(exe)144 456 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 F2 -.18(re)144 468 S(adline)
+.18 E F0(.)A F2(sho)108 480 Q(w\255all\255if\255ambiguous \(Off\))-.1 E
+F0 .304(This alters the def)144 492 R .304(ault beha)-.1 F .304
+(vior of the completion functions.)-.2 F .304(If set to)5.304 F F2(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 504 R(bell.)144 516 Q F2
+(sho)108 528 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.346
+(This alters the def)144 540 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 F2(sho)144 552 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 F2(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 564 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 576 Q F2
+(sho)108 588 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 1.021
+(If set to)144 600 R F2(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 612 Q(The mode strings are user)5 E
+(-settable \(e.g.,)-.2 E F1(emacs\255mode\255string)2.5 E F0(\).)A F2
+(skip\255completed\255text \(Off\))108 624 Q F0 .095(If set to)144 636 R
+F2(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 648 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 660 R
+1.394(ord being com-)-.1 F(pleted, so portions of the w)144 672 Q
+(ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F2
+(vi\255cmd\255mode\255string \(\(cmd\)\))108 684 Q F0 .517(If the)144
+696 R F1(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 708 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 720 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(GNU Bash 5.2)72 768 Q(2022 September 19)135.955
+E(46)185.115 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 .315
+(escape sequences is a)144 84 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 can b\
+e used to embed a terminal control sequence into the mode string.)144 96
+Q/F1 10/Times-Bold@0 SF(vi\255ins\255mode\255string \(\(ins\)\))108 108
+Q F0 .517(If the)144 120 R/F2 10/Times-Italic@0 SF
+(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
+132 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 144 S .923(panded lik).15 F
+3.423(eak)-.1 G 1.223 -.15(ey b)-3.523 H .924
+(inding, so the standard set of meta- and control pre\214x).15 F .924
+(es and backslash es-)-.15 F .245(cape sequences is a)144 156 R -.25(va)
+-.2 G 2.745(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.745 F
+.244(gin and end sequences of non-printing)-.15 F(characters, which can\
+ be used to embed a terminal control sequence into the mode string.)144
+168 Q F1(visible\255stats \(Off\))108 180 Q F0 .846(If set to)144 192 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(stat)3.346 E F0 .846
+(\(2\) is appended to the \214lename)B
+(when listing possible completions.)144 204 Q F1
+(Readline Conditional Constructs)87 220.8 Q F0 .05
+(Readline implements a f)108 232.8 R .05(acility similar in spirit to t\
+he conditional compilation features of the C preprocessor)-.1 F .096
+(which allo)108 244.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 256.8 Q -.15(ve)-.25 G 2.5
+(su).15 G(sed.)-2.5 E F1($if)108 273.6 Q F0(The)144 273.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 285.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 297.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 314.4 Q F0(The)180 314.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 326.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 338.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 350.4 Q F1(term)144 367.2 Q F0(The)180 367.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 379.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 391.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
+403.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.84 E
+F0 2.5(,f).77 G(or instance.)-2.5 E F1 -.1(ve)144 420 S(rsion).1 E F0
+(The)180 432 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 444 Q F1 -.1
+(ve)2.772 G(rsion).1 E F0 -.15(ex)2.772 G .272
+(pands to the current readline v).15 F 2.771(ersion. The)-.15 F .271
+(set of comparison operators in-)2.771 F(cludes)180 456 Q F1(=)3.063 E
+F0 3.063(,\()C(and)-3.063 E F1(==)3.063 E F0(\),)A F1(!=)3.063 E F0(,)A
+F1(<=)3.063 E F0(,)A F1(>=)3.063 E F0(,)A F1(<)3.063 E F0 3.063(,a)C(nd)
+-3.063 E F1(>)3.064 E F0 5.564(.T)C .564(he v)-5.564 F .564
+(ersion number supplied on the right side)-.15 F .318
+(of the operator consists of a major v)180 468 R .318(ersion number)-.15
+F 2.818(,a)-.4 G 2.818(no)-2.818 G .318
+(ptional decimal point, and an op-)-2.818 F .1(tional minor v)180 480 R
+.1(ersion \(e.g.,)-.15 F F1(7.1)2.6 E F0 .1(\). If the minor v)B .101
+(ersion is omitted, it is assumed to be)-.15 F F1(0)2.601 E F0 5.101(.T)
+C(he)-5.101 E .06(operator may be separated from the string)180 492 R F1
+-.1(ve)2.56 G(rsion).1 E F0 .06(and from the v)2.56 F .06
+(ersion number ar)-.15 F(gument)-.18 E(by whitespace.)180 504 Q F1
+(application)144 520.8 Q F0(The)180 532.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
+544.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
+556.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 568.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 580.8
+Q(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 604.8 Q F0
+(Bash)2.5 E 2.5(#Q)180 616.8 S(uote the current or pre)-2.5 E(vious w)
+-.25 E(ord)-.1 E("\\C\255xq": "\\eb\\"\\ef\\"")180 628.8 Q F1($endif)180
+640.8 Q F2(variable)144 657.6 Q F0(The)180 669.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
+681.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 693.6 R .13
+(the v)180 705.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 717.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(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(47)
+185.115 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($endif)108 84 Q F0(This command, as seen in the pre)144 84 Q(vious e)
+-.25 E(xample, terminates an)-.15 E F1($if)2.5 E F0(command.)2.5 E F1
+($else)108 100.8 Q F0(Commands in this branch of the)144 100.8 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 117.6 Q F0 .356
+(This directi)144 129.6 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 141.6 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 10/Times-Italic@0 SF(/etc/inputr)2.5
+E(c)-.37 E F0(:)A F1($include)144 165.6 Q F2(/etc/inputr)5.833 E(c)-.37
+E F1(Sear)87 182.4 Q(ching)-.18 E F0 .835(Readline pro)108 194.4 R .835
+(vides commands for searching through the command history \(see)-.15 F
+/F3 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 206.4 Q
+(There are tw)5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.51 E
+(emental)-.37 E F0(and)3.01 E F2(non-incr)2.86 E(emental)-.37 E F0(.).51
+E .697(Incremental searches be)108 223.2 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 235.2 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 247.2 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 259.2 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 271.2 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 283.2 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 295.2 Q 2.938 -.8(To \214)
+108 312 T 1.339(nd other matching entries in the history list, type Con\
+trol-S or Control-R as appropriate.).8 F 1.339(This will)6.339 F .675
+(search backw)108 324 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 336 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 348 R F2(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 360 Q
+.653(Readline remembers the last incremental search string.)108 376.8 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 388.8 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 405.6 R(The searc\
+h string may be typed by the user or be part of the contents of the cur\
+rent line.)108 417.6 Q F1(Readline Command Names)87 434.4 Q F0 1.391
+(The follo)108 446.4 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 458.4 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 470.4 Q F2(point)3.41 E
+F0 .91(refers to the current cursor position, and)3.41 F F2(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 482.4 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 F2 -.37(re)
+2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 499.2 Q(or Mo)-.25 E(ving)-.1
+E(beginning\255of\255line \(C\255a\))108 511.2 Q F0(Mo)144 523.2 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 535.2 Q F0(Mo)144 547.2 Q .3 -.15
+(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108
+559.2 S(rward\255char \(C\255f\)).25 E F0(Mo)144 571.2 Q .3 -.15(ve f)
+-.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1
+(backward\255char \(C\255b\))108 583.2 Q F0(Mo)144 595.2 Q .3 -.15(ve b)
+-.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 607.2 S(rward\255w)
+.25 E(ord \(M\255f\))-.1 E F0(Mo)144 619.2 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 631.2 Q F1(backward\255w)108 643.2 Q
+(ord \(M\255b\))-.1 E F0(Mo)144 655.2 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 667.2 Q F1(shell\255f)108 679.2
+Q(orward\255w)-.25 E(ord)-.1 E F0(Mo)144 691.2 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 703.2 Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955
+E(48)185.115 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(shell\255backward\255w)108 84 Q(ord)-.1 E F0(Mo)144 96 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 108 Q
+F1(pr)108 120 Q -.15(ev)-.18 G(ious\255scr).15 E(een\255line)-.18 E F0
+.891(Attempt to mo)144 132 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 1.055
+(This will not ha)144 144 R 1.355 -.15(ve t)-.2 H 1.055(he desired ef)
+.15 F 1.056(fect if the current readline line does not tak)-.25 F 3.556
+(eu)-.1 G 3.556(pm)-3.556 G 1.056(ore than one)-3.556 F(ph)144 156 Q(ys\
+ical line or if point is not greater than the length of the prompt plus\
+ the screen width.)-.05 E F1(next\255scr)108 168 Q(een\255line)-.18 E F0
+.638(Attempt to mo)144 180 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 .194(will not ha)
+144 192 R .494 -.15(ve t)-.2 H .194(he desired ef).15 F .194
+(fect if the current readline line does not tak)-.25 F 2.695(eu)-.1 G
+2.695(pm)-2.695 G .195(ore than one ph)-2.695 F(ysical)-.05 E .164(line\
+ or if the length of the current readline line is not greater than the \
+length of the prompt plus the)144 204 R(screen width.)144 216 Q F1
+(clear\255display \(M\255C\255l\))108 228 Q F0 1.498
+(Clear the screen and, if possible, the terminal')144 240 R 3.999(ss)
+-.55 G 1.499(crollback b)-3.999 F(uf)-.2 E(fer)-.25 E 3.999(,t)-.4 G
+1.499(hen redra)-3.999 F 3.999(wt)-.15 G 1.499(he current line,)-3.999 F
+(lea)144 252 Q(ving the current line at the top of the screen.)-.2 E F1
+(clear\255scr)108 264 Q(een \(C\255l\))-.18 E F0 1.36
+(Clear the screen, then redra)144 276 R 3.86(wt)-.15 G 1.36
+(he current line, lea)-3.86 F 1.36
+(ving the current line at the top of the screen.)-.2 F -.4(Wi)144 288 S
+(th an ar).4 E
+(gument, refresh the current line without clearing the screen.)-.18 E F1
+-.18(re)108 300 S(draw\255curr).18 E(ent\255line)-.18 E F0
+(Refresh the current line.)144 312 Q F1(Commands f)87 328.8 Q
+(or Manipulating the History)-.25 E(accept\255line \(Newline, Retur)108
+340.8 Q(n\))-.15 E F0 .158(Accept the line re)144 352.8 R -.05(ga)-.15 G
+.158(rdless of where the cursor is.).05 F .158
+(If this line is non-empty)5.158 F 2.659(,a)-.65 G .159
+(dd it to the history list)-2.659 F .699(according to the state of the)
+144 364.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 376.8 Q F1(pr)108
+388.8 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0
+(Fetch the pre)144 400.8 Q(vious command from the history list, mo)-.25
+E(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 412.8
+Q F0(Fetch the ne)144 424.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 436.8 Q F0(Mo)144 448.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 460.8 Q F0(Mo)144 472.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
+(operate\255and\255get\255next \(C\255o\))108 484.8 Q F0 .947
+(Accept the current line for e)144 496.8 R -.15(xe)-.15 G .948
+(cution and fetch the ne).15 F .948(xt line relati)-.15 F 1.248 -.15
+(ve t)-.25 H 3.448(ot).15 G .948(he current line from the)-3.448 F .73
+(history for editing.)144 508.8 R 3.23(An)5.73 G .73(umeric ar)-3.23 F
+.729
+(gument, if supplied, speci\214es the history entry to use instead of)
+-.18 F(the current line.)144 520.8 Q F1(fetch\255history)108 532.8 Q F0
+-.4(Wi)144 544.8 S .256(th a numeric ar).4 F .256
+(gument, fetch that entry from the history list and mak)-.18 F 2.757(ei)
+-.1 G 2.757(tt)-2.757 G .257(he current line.)-2.757 F -.4(Wi)5.257 G
+(th-).4 E(out an ar)144 556.8 Q(gument, mo)-.18 E .3 -.15(ve b)-.15 H
+(ack to the \214rst entry in the history list.).15 E F1 -2.29 -.18(re v)
+108 568.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.471
+(Search backw)144 580.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 592.8 Q F1 -.25(fo)108 604.8 S
+(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131
+(Search forw)144 616.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 628.8 Q F1
+(non\255incr)108 640.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 652.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 664.8 S
+(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 676.8 Q
+(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18
+E F0 1.353(Search forw)144 688.8 R 1.354(ard through the history using \
+a non-incremental search for a string supplied by the)-.1 F(user)144
+700.8 Q(.)-.55 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(49)
+185.115 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(history\255sear)108 84 Q(ch\255f)-.18 E(orward)-.25 E F0 .249
+(Search forw)144 96 R .249(ard through the history for the string of ch\
+aracters between the start of the current line)-.1 F(and the point.)144
+108 Q(This is a non-incremental search.)5 E F1(history\255sear)108 120 Q
+(ch\255backward)-.18 E F0 .95(Search backw)144 132 R .951(ard through t\
+he history for the string of characters between the start of the curren\
+t)-.1 F(line and the point.)144 144 Q(This is a non-incremental search.)
+5 E F1(history\255substring\255sear)108 156 Q(ch\255backward)-.18 E F0
+.951(Search backw)144 168 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 180 R/F2 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 192 R(is a non-incremental search.)2.5 E F1
+(history\255substring\255sear)108 204 Q(ch\255f)-.18 E(orward)-.25 E F0
+.249(Search forw)144 216 R .249(ard through the history for the string \
+of characters between the start of the current line)-.1 F .318
+(and the point.)144 228 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 240 Q F1(yank\255nth\255ar)108 252 Q 2.5(g\()-.1 G
+<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 264 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 .772(at point.)144
+276 R -.4(Wi)5.773 G .773(th an ar).4 F(gument)-.18 E F2(n)3.633 E F0
+3.273(,i).24 G .773(nsert the)-3.273 F F2(n)3.273 E F0 .773(th w)B .773
+(ord from the pre)-.1 F .773(vious command \(the w)-.25 F .773
+(ords in the)-.1 F(pre)144 288 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 F2(n)2.791 E F0 .291(th w)B .291
+(ord from the end of)-.1 F .281(the pre)144 300 R .281(vious command.)
+-.25 F .281(Once the ar)5.281 F(gument)-.18 E F2(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 F2(n)A F0(")A(history e)144 312 Q
+(xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 324 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 336 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 348 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 360 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
+.416(to the \214rst call\) of each line in turn.)144 372 R(An)5.416 E
+2.916(yn)-.15 G .416(umeric ar)-2.916 F .416
+(gument supplied to these successi)-.18 F .716 -.15(ve c)-.25 H .416
+(alls de-).15 F 1.218(termines the direction to mo)144 384 R 1.518 -.15
+(ve t)-.15 H 1.218(hrough the history).15 F 6.218(.A)-.65 G(ne)-2.5 E
+-.05(ga)-.15 G(ti).05 E 1.517 -.15(ve a)-.25 H -.18(rg).15 G 1.217
+(ument switches the direction).18 F .494
+(through the history \(back or forw)144 396 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
+408 S(rd, as if the "!$" history e).1 E(xpansion had been speci\214ed.)
+-.15 E F1(shell\255expand\255line \(M\255C\255e\))108 420 Q F0 .623
+(Expand the line as the shell does.)144 432 R .622
+(This performs alias and history e)5.622 F .622
+(xpansion as well as all of the)-.15 F(shell w)144 444 Q(ord e)-.1 E 2.5
+(xpansions. See)-.15 F/F3 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 456 Q F0 .938
+(Perform history e)144 468 R .939(xpansion on the current line.)-.15 F
+(See)5.939 E F3(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 480 Q(xpansion.)-.15 E F1(magic\255space)
+108 492 Q F0 .438(Perform history e)144 504 R .438
+(xpansion on the current line and insert a space.)-.15 F(See)5.437 E F3
+(HIST)2.937 E(OR)-.162 E 2.687(YE)-.315 G(XP)-2.687 E(ANSION)-.666 E F0
+(be-)2.687 E(lo)144 516 Q 2.5(wf)-.25 G(or a description of history e)
+-2.5 E(xpansion.)-.15 E F1(alias\255expand\255line)108 528 Q F0 .394
+(Perform alias e)144 540 R .394(xpansion on the current line.)-.15 F
+(See)5.395 E F3(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 552 Q F1
+(history\255and\255alias\255expand\255line)108 564 Q F0
+(Perform history and alias e)144 576 Q(xpansion on the current line.)
+-.15 E F1(insert\255last\255ar)108 588 Q(gument \(M\255.)-.1 E 2.5(,M)
+.833 G -1.667(\255_ \))-2.5 F F0 2.5(As)144 600 S(ynon)-2.5 E(ym for)
+-.15 E F1(yank\255last\255ar)2.5 E(g)-.1 E F0(.)A F1
+(edit\255and\255execute\255command \(C\255x C\255e\))108 612 Q F0(In)144
+624 Q -.2(vo)-.4 G .347 -.1(ke a).2 H 2.647(ne).1 G .146
+(ditor on the current command line, and e)-2.647 F -.15(xe)-.15 G .146
+(cute the result as shell commands.).15 F F1(Bash)5.146 E F0(at-)2.646 E
+(tempts to in)144 636 Q -.2(vo)-.4 G -.1(ke).2 G F3($VISU)2.6 E(AL)-.54
+E/F4 9/Times-Roman@0 SF(,)A F3($EDIT)2.25 E(OR)-.162 E F4(,)A F0(and)
+2.25 E F2(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 652.8 Q(or Changing T)-.25 E
+(ext)-.92 E F2(end\255of\255\214le)108 664.8 Q F1(\(usually C\255d\))2.5
+E F0 .798(The character indicating end-of-\214le as set, for e)144 676.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 .167
+(there are no characters on the line, and point is at the be)144 688.8 R
+.167(ginning of the line, readline interprets it as)-.15 F
+(the end of input and returns)144 700.8 Q F3(EOF)2.5 E F4(.)A F0
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(50)185.115 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(delete\255char \(C\255d\))108 84 Q F0 .441
+(Delete the character at point.)144 96 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 108 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 120 Q F0 .553(Delete the character behind the cursor)144 132 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 144 Q F1 -.25
+(fo)108 156 S(rward\255backward\255delete\255char).25 E F0 .473
+(Delete the character under the cursor)144 168 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 180 Q F1
+(quoted\255insert \(C\255q, C\255v\))108 192 Q F0 .779(Add the ne)144
+204 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 216 S(ample.).15 E F1(tab\255insert \(C\255v T)
+108 228 Q(AB\))-.9 E F0(Insert a tab character)144 240 Q(.)-.55 E F1
+(self\255insert \(a, b, A, 1, !, ...\))108 252 Q F0
+(Insert the character typed.)144 264 Q F1(transpose\255chars \(C\255t\))
+108 276 Q F0 .321(Drag the character before point forw)144 288 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 .372
+(If point is at the end of the line, then this transposes the tw)144 300
+R 2.872(oc)-.1 G .372(haracters before point.)-2.872 F(Ne)5.372 E -.05
+(ga)-.15 G(ti).05 E .672 -.15(ve a)-.25 H -.2(r-).15 G(guments ha)144
+312 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1
+(transpose\255w)108 324 Q(ords \(M\255t\))-.1 E F0 .023(Drag the w)144
+336 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 348 Q 2.5
+(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 360 Q
+(ord \(M\255u\))-.1 E F0 1.699(Uppercase the current \(or follo)144 372
+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 384 S(rd, b).1 E
+(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 396 Q
+(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 408 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 420 S(rd, b).1 E(ut do not mo)-.2 E .3
+-.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 432 Q
+(ord \(M\255c\))-.1 E F0 1.975(Capitalize the current \(or follo)144 444
+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 456 S(rd, b).1
+E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 468
+S(rwrite\255mode).1 E F0 -.8(To)144 480 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 492 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 504 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 516 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 528 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 540 Q
+(By def)5 E(ault, this command is unbound.)-.1 E F1(Killing and Y)87
+556.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 568.8 Q F0
+(Kill the te)144 580.8 Q(xt from point to the end of the line.)-.15 E F1
+(backward\255kill\255line \(C\255x Rubout\))108 592.8 Q F0(Kill backw)
+144 604.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1
+(unix\255line\255discard \(C\255u\))108 616.8 Q F0(Kill backw)144 628.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 640.8 Q F0
+(Kill all characters on the current line, no matter where point is.)144
+652.8 Q F1(kill\255w)108 664.8 Q(ord \(M\255d\))-.1 E F0 .729
+(Kill from point to the end of the current w)144 676.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 688.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 700.8 Q
+(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 712.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(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(51)185.115 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/F1 10/Times-Bold@0
+SF(shell\255kill\255w)108 84 Q(ord)-.1 E F0 .728
+(Kill from point to the end of the current w)144 96 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 108 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 120 Q(ord)-.1 E F0 3.025(Kill the w)144 132 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 144 Q(ord)-.1 E F0(.)A F1(unix\255w)108 156 Q
+(ord\255rubout \(C\255w\))-.1 E F0 .364(Kill the w)144 168 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
+180 Q F1(unix\255\214lename\255rubout)108 192 Q F0 .167(Kill the w)144
+204 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 216 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 228 Q F0
+(Delete all spaces and tabs around point.)144 240 Q F1(kill\255r)108 252
+Q(egion)-.18 E F0(Kill the te)144 264 Q(xt in the current re)-.15 E
+(gion.)-.15 E F1(copy\255r)108 276 Q(egion\255as\255kill)-.18 E F0(Cop)
+144 288 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 300 Q(ord)-.1 E F0(Cop)144 312 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 324
+Q(ord)-.1 E F0(.)A F1(copy\255f)108 336 Q(orward\255w)-.25 E(ord)-.1 E
+F0(Cop)144 348 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 360 Q(ord)-.1 E F0(.)A F1
+(yank \(C\255y\))108 372 Q F0 -1(Ya)144 384 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 396 Q F0
+(Rotate the kill ring, and yank the ne)144 408 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 424.8 Q
+(guments)-.1 E(digit\255ar)108 436.8 Q
+(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .367
+(Add this digit to the ar)144 448.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 460.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G
+(ument.).18 E F1(uni)108 472.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1
+E F0 .779(This is another w)144 484.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
+496.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144
+508.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 520.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 532.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 544.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 556.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 573.6 Q(complete \(T)108 585.6 Q(AB\))-.9 E F0 1.137
+(Attempt to perform completion on the te)144 597.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 609.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 621.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 633.6 Q F1
+(possible\255completions \(M\255?\))108 645.6 Q F0
+(List the possible completions of the te)144 657.6 Q(xt before point.)
+-.15 E F1(insert\255completions \(M\255*\))108 669.6 Q F0 .783
+(Insert all completions of the te)144 681.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
+693.6 Q F0(.)A F1(menu\255complete)108 705.6 Q F0 .929(Similar to)144
+717.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 729.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(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(52)185.115 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 .829
+(completions, inserting each match in turn.)144 84 R .828
+(At the end of the list of completions, the bell is rung)5.828 F .727
+(\(subject to the setting of)144 96 R/F1 10/Times-Bold@0 SF
+(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 108 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 120 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 132 Q F0 .82(Identical to)144 144 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 156 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 168 Q F0 .234
+(Deletes the character under the cursor if not at the be)144 180 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 192 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
+204 Q(ault.)-.1 E F1(complete\255\214lename \(M\255/\))108 216 Q F0
+(Attempt \214lename completion on the te)144 228 Q(xt before point.)-.15
+E F1(possible\255\214lename\255completions \(C\255x /\))108 240 Q F0
+(List the possible completions of the te)144 252 Q
+(xt before point, treating it as a \214lename.)-.15 E F1
+(complete\255user)108 264 Q(name \(M\255~\))-.15 E F0
+(Attempt completion on the te)144 276 Q
+(xt before point, treating it as a username.)-.15 E F1(possible\255user)
+108 288 Q(name\255completions \(C\255x ~\))-.15 E F0
+(List the possible completions of the te)144 300 Q
+(xt before point, treating it as a username.)-.15 E F1(complete\255v)108
+312 Q(ariable \(M\255$\))-.1 E F0(Attempt completion on the te)144 324 Q
+(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1
+(possible\255v)108 336 Q(ariable\255completions \(C\255x $\))-.1 E F0
+(List the possible completions of the te)144 348 Q
+(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1
+(complete\255hostname \(M\255@\))108 360 Q F0
+(Attempt completion on the te)144 372 Q
+(xt before point, treating it as a hostname.)-.15 E F1
+(possible\255hostname\255completions \(C\255x @\))108 384 Q F0
+(List the possible completions of the te)144 396 Q
+(xt before point, treating it as a hostname.)-.15 E F1
+(complete\255command \(M\255!\))108 408 Q F0 .581
+(Attempt completion on the te)144 420 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 432 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 444 Q -.15(xe)-.15 G
+(cutable \214lenames, in that order).15 E(.)-.55 E F1
+(possible\255command\255completions \(C\255x !\))108 456 Q F0
+(List the possible completions of the te)144 468 Q
+(xt before point, treating it as a command name.)-.15 E F1
+(dynamic\255complete\255history \(M\255T)108 480 Q(AB\))-.9 E F0 .425
+(Attempt completion on the te)144 492 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 504 Q F1(dab)108 516 Q(br)-.1 E
+-.15(ev)-.18 G(\255expand).15 E F0 .61
+(Attempt menu completion on the te)144 528 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 540 Q F1
+(complete\255into\255braces \(M\255{\))108 552 Q F0 .4(Perform \214lena\
+me completion and insert the list of possible completions enclosed with\
+in braces so)144 564 R(the list is a)144 576 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 592.8 S(yboard Macr).25 E(os)-.18
+E(start\255kbd\255macr)108 604.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\))
+.833 E F0(Be)144 616.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 628.8 Q 2.5(o\()-.18 G
+(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 640.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 652.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5
+E F0(Re-e)144 664.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 676.8 Q -.15(ey)-.1 G(board.).15
+E F1(print\255last\255kbd\255macr)108 688.8 Q 2.5(o\()-.18 G(\))-2.5 E
+F0(Print the last k)144 700.8 Q -.15(ey)-.1 G
+(board macro de\214ned in a format suitable for the).15 E F2(inputr)2.5
+E(c)-.37 E F0(\214le.)2.5 E(GNU Bash 5.2)72 768 Q(2022 September 19)
+135.955 E(53)185.115 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/F1 10/Times-Bold@0
+SF(Miscellaneous)87 84 Q -.18(re)108 96 S<ad72>.18 E
+(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.777
+(Read in the contents of the)144 108 R/F2 10/Times-Italic@0 SF(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 120 Q F1(abort \(C\255g\))108 132 Q F0 3.248
+(Abort the current editing command and ring the terminal')144 144 R
+5.749(sb)-.55 G 3.249(ell \(subject to the setting of)-5.749 F F1
+(bell\255style)144 156 Q F0(\).)A F1(do\255lo)108 168 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 180 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 192 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 204 Q(e\214x\255meta \(ESC\))-.18 E F0
+(Metafy the ne)144 216 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 228 Q F0
+(Incremental undo, separately remembered for each line.)144 240 Q F1
+-2.29 -.18(re v)108 252 T(ert\255line \(M\255r\)).08 E F0 .23
+(Undo all changes made to this line.)144 264 R .231(This is lik)5.23 F
+2.731(ee)-.1 G -.15(xe)-2.881 G .231(cuting the).15 F F1(undo)2.731 E F0
+.231(command enough times to re-)2.731 F
+(turn the line to its initial state.)144 276 Q F1
+(tilde\255expand \(M\255&\))108 288 Q F0(Perform tilde e)144 300 Q
+(xpansion on the current w)-.15 E(ord.)-.1 E F1
+(set\255mark \(C\255@, M\255<space>\))108 312 Q F0
+(Set the mark to the point.)144 324 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 336 Q F0(Sw)144
+348 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 360 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 372 Q(ch \(C\255]\))-.18 E F0 3.111(Ac)144 384 S
+.611(haracter is read and point is mo)-3.111 F -.15(ve)-.15 G 3.112(dt)
+.15 G 3.112(ot)-3.112 G .612(he ne)-3.112 F .612
+(xt occurrence of that character)-.15 F 5.612(.A)-.55 G(ne)-2.5 E -.05
+(ga)-.15 G(ti).05 E .912 -.15(ve a)-.25 H -.18(rg).15 G(u-).18 E
+(ment searches for pre)144 396 Q(vious occurrences.)-.25 E F1
+(character\255sear)108 408 Q(ch\255backward \(M\255C\255]\))-.18 E F0
+2.695(Ac)144 420 S .194(haracter is read and point is mo)-2.695 F -.15
+(ve)-.15 G 2.694(dt).15 G 2.694(ot)-2.694 G .194(he pre)-2.694 F .194
+(vious occurrence of that character)-.25 F 5.194(.A)-.55 G(ne)-2.5 E
+-.05(ga)-.15 G(ti).05 E .494 -.15(ve a)-.25 H -.2(r-).15 G
+(gument searches for subsequent occurrences.)144 432 Q F1
+(skip\255csi\255sequence)108 444 Q F0 1.826
+(Read enough characters to consume a multi-k)144 456 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 468 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 480 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 492 R(uf)-.2 E(fer)-.25 E 5.026(.T)
+-.55 G(his)-5.026 E(is unbound by def)144 504 Q(ault, b)-.1 E
+(ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108
+516 Q F0 -.4(Wi)144 528 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 540 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 552 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 564 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 576 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 588 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 600 Q -.15
+(ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G
+(cuted by the shell.).15 E F1(spell\255corr)108 612 Q(ect\255w)-.18 E
+(ord \(C\255x s\))-.1 E F0 .42
+(Perform spelling correction on the current w)144 624 R .421
+(ord, treating it as a directory or \214lename, in the same)-.1 F -.1
+(wa)144 636 S 4.718(ya).1 G 4.718(st)-4.718 G(he)-4.718 E F1(cdspell)
+4.718 E F0 2.218(shell option.)4.718 F -.8(Wo)7.217 G 2.217
+(rd boundaries are the same as those used by).8 F F1(shell\255f)4.717 E
+(or)-.25 E(-)-.37 E(ward\255w)144 648 Q(ord)-.1 E F0(.)A F1
+(glob\255complete\255w)108 660 Q(ord \(M\255g\))-.1 E F0 .791(The w)144
+672 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
+684 R(pattern is used to generate a list of matching \214lenames for po\
+ssible completions.)2.5 E F1(glob\255expand\255w)108 696 Q
+(ord \(C\255x *\))-.1 E F0 .176(The w)144 708 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 720 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(GNU Bash 5.2)72 768
+Q(2022 September 19)135.955 E(54)185.115 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(before pathname e)
+144 84 Q(xpansion.)-.15 E/F1 10/Times-Bold@0 SF
+(glob\255list\255expansions \(C\255x g\))108 96 Q F0 .923(The list of e)
+144 108 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
+120 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 132 S(pansion.).15 E F1(dump\255functions)108 144 Q F0 .627
+(Print all of the functions and their k)144 156 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 168 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 180 Q(ariables)-.1 E F0
+.762(Print all of the settable readline v)144 192 R .762
+(ariables and their v)-.25 F .763(alues to the readline output stream.)
+-.25 F .763(If a nu-)5.763 F .109(meric ar)144 204 R .109
+(gument is supplied, the output is formatted in such a w)-.18 F .108
+(ay that it can be made part of an)-.1 F F2(in-)2.608 E(putr)144 216 Q
+(c)-.37 E F0(\214le.)2.5 E F1(dump\255macr)108 228 Q(os)-.18 E F0 .592
+(Print all of the readline k)144 240 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 252 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 264 Q F1(display\255shell\255v)108 276 Q
+(ersion \(C\255x C\255v\))-.1 E F0(Display v)144 288 Q
+(ersion information about the current instance of)-.15 E F1(bash)2.5 E
+F0(.)A F1(Pr)87 304.8 Q(ogrammable Completion)-.18 E F0 .146(When w)108
+316.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 328.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(programmable completion f)108 340.8 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 357.6 R .497
+(If the command w)5.497 F .498
+(ord is the empty string \(completion attempted at)-.1 F .234(the be)108
+369.6 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<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 381.6 R .823
+(for the w)108 393.6 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 search\
+ed for)-.1 F 2.866(\214rst. If)108 405.6 R .367(no compspec is found fo\
+r the full pathname, an attempt is made to \214nd a compspec for the po\
+rtion)2.866 F(follo)108 417.6 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 429.6 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 441.6 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
+453.6 Q(xpansion.)-.15 E .817(Once a compspec has been found, it is use\
+d to generate the list of matching w)108 470.4 R 3.317(ords. If)-.1 F
+3.317(ac)3.317 G .817(ompspec is not)-3.317 F(found, the def)108 482.4 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 499.2 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 511.2 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 523.2 Q(ariable)-.25 E F3(FIGNORE)2.5 E F0
+(is used to \214lter the matches.)2.25 E(An)108 540 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 552 S
+.554(rds generated by the pattern need not match the w).1 F .555
+(ord being completed.)-.1 F(The)5.555 E F3(GLOBIGNORE)3.055 E F0 .555
+(shell v)2.805 F(ari-)-.25 E
+(able is not used to \214lter the matches, b)108 564 Q(ut the)-.2 E F3
+(FIGNORE)2.5 E F0 -.25(va)2.25 G(riable is used.).25 E(Ne)108 580.8 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
+592.8 R F3(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 604.8 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
+616.8 R 1.396(xpansion, as described abo)-.15 F 1.696 -.15(ve u)-.15 H
+(nder).15 E F3(EXP)3.896 E(ANSION)-.666 E/F4 9/Times-Roman@0 SF(.)A F0
+1.396(The results are split using the rules described)5.896 F(abo)108
+628.8 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 640.8 Q
+(ords become the possible completions.)-.1 E .233
+(After these matches ha)108 657.6 R .533 -.15(ve b)-.2 H .233
+(een generated, an).15 F 2.733(ys)-.15 G .234
+(hell function or command speci\214ed with the)-2.733 F F1<ad46>2.734 E
+F0(and)2.734 E F1<ad43>2.734 E F0(op-)2.734 E 4.209(tions is in)108
+669.6 R -.2(vo)-.4 G -.1(ke).2 G 6.709(d. When).1 F 4.208
+(the command or function is in)6.709 F -.2(vo)-.4 G -.1(ke).2 G 4.208
+(d, the).1 F F3(COMP_LINE)6.708 E F4(,)A F3(COMP_POINT)6.458 E F4(,)A F3
+(COMP_KEY)108 681.6 Q F4(,)A F0(and)2.407 E F3(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
+693.6 S .986(hell function is being in)-3.486 F -.2(vo)-.4 G -.1(ke).2 G
+.986(d, the).1 F F3(COMP_W)3.486 E(ORDS)-.09 E F0(and)3.236 E F3
+(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 705.6 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 717.6 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 729.6
+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(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(55)185.115 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 .715
+(completions ag)108 84 R .715(ainst the w)-.05 F .714(ord being complet\
+ed is performed; the function or command has complete free-)-.1 F
+(dom in generating the matches.)108 96 Q(An)108 112.8 Q 2.937(yf)-.15 G
+.437(unction speci\214ed with)-2.937 F/F1 10/Times-Bold@0 SF<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 124.8 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 9/Times-Bold@0
+SF(COMPREPL)108 136.8 Q(Y)-.828 E F0(array v)2.25 E
+(ariable, one per array element.)-.25 E(Ne)108 153.6 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
+165.6 R .359(should print a list of completions, one per line, to the s\
+tandard output.)2.859 F .358(Backslash may be used)5.359 F
+(to escape a ne)108 177.6 Q(wline, if necessary)-.25 E(.)-.65 E .376
+(After all of the possible completions are generated, an)108 194.4 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 206.4 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 218.4 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 230.4 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 242.4 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 254.4 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
+271.2 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 comple\
+tion code as the list of possible completions.)108 283.2 Q .246
+(If the pre)108 300 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 312 Q F0(when the compspec w)2.5 E
+(as de\214ned, directory name completion is attempted.)-.1 E .462
+(If the)108 328.8 R F1 .462(\255o plusdirs)2.962 F F0 .462(option w)
+2.962 F .462(as supplied to)-.1 F F1(complete)2.962 E F0 .462
+(when the compspec w)2.962 F .462(as de\214ned, directory name com-)-.1
+F(pletion is attempted and an)108 340.8 Q 2.5(ym)-.15 G
+(atches are added to the results of the other actions.)-2.5 E .559
+(By def)108 357.6 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 369.6 R .632(The def)5.632 F(ault)-.1
+E F1(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 381.6 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 393.6 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 405.6 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
+417.6 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 434.4 R .632(tions force\
+ readline to append a slash to completed names which are symbolic links\
+ to directories, subject)108 446.4 R 2.762(to the v)108 458.4 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 470.4
+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
+487.2 R .191(This is most useful when used in combina-)5.191 F 1.172
+(tion with a def)108 499.2 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 511.2 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 523.2 R .665
+(being attempted \(supplied as the \214rst ar)108 535.2 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
+547.2 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 559.2 Q(uilt dynamicall\
+y as completion is attempted, rather than being loaded all at once.)-.2
+E -.15(Fo)108 576 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 588 Q(wing def)-.25 E
+(ault completion function w)-.1 E(ould load completions dynamically:)-.1
+E/F3 10/Courier@0 SF(_completion_loader\(\))108 604.8 Q({)108 616.8 Q 6
+(.")144 628.8 S
+(/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124)-6 E(})108
+640.8 Q(complete -D -F _completion_loader -o bashdefault -o default)108
+652.8 Q/F4 10.95/Times-Bold@0 SF(HIST)72 681.6 Q(OR)-.197 E(Y)-.383 E F0
+.372(When the)108 693.6 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/F5
+10/Times-Italic@0 SF .371(command history)2.871 F F0(,)A .304
+(the list of commands pre)108 705.6 R .304(viously typed.)-.25 F .304
+(The v)5.304 F .304(alue of the)-.25 F F2(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 717.6 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 F2(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
+729.6 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F2(EXP)2.787 E
+(ANSION)-.666 E F0(abo)2.537 E -.15(ve)-.15 G(\)).15 E(GNU Bash 5.2)72
+768 Q(2022 September 19)135.955 E(56)185.115 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 -.2(bu)108 84 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/F1 9/Times-Bold@0 SF
+(HISTIGNORE)4.065 E F0(and)3.815 E F1(HISTCONTR)108 96 Q(OL)-.27 E/F2 9
+/Times-Roman@0 SF(.)A F0 .082
+(On startup, the history is initialized from the \214le named by the v)
+108 112.8 R(ariable)-.25 E F1(HISTFILE)2.583 E F0(\(def)2.333 E(ault)-.1
+E/F3 10/Times-Italic@0 SF(~/.bash_history)2.583 E F0(\).)A .315
+(The \214le named by the v)108 124.8 R .315(alue of)-.25 F F1(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 136.8 R .658(alue of)-.25 F F1
+(HISTFILESIZE)3.158 E F2(.)A F0(If)5.158 E/F4 10/Times-Bold@0 SF
+(HISTFILESIZE)3.158 E F0 .659(is unset, or set to null, a non-numeric)
+3.158 F -.25(va)108 148.8 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 160.8 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 172.8 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 184.8 Q F1(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 F1
+($HISTSIZE)3.559 E F0 1.059(lines are)3.309 F .159
+(copied from the history list to)108 196.8 R F1($HISTFILE)2.659 E F2(.)A
+F0 .159(If the)4.659 F F4(histappend)2.658 E F0 .158
+(shell option is enabled \(see the description of)2.658 F F4(shopt)108
+208.8 Q F0(under)2.581 E F1 .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 220.8 R -.15(ve)-.15 G 2.697(rwritten. If)
+.15 F F1(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 232.8 R F1(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 244.8 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 256.8
+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 268.8 R F1(HISTFILESIZE)3.257 E
+F0 3.257(lines. If)3.007 F F1(HISTFILESIZE)3.257 E F0 .757
+(is unset, or set to null, a non-)3.007 F(numeric v)108 280.8 Q
+(alue, or a numeric v)-.25 E
+(alue less than zero, the history \214le is not truncated.)-.25 E .298
+(The b)108 297.6 R .298(uiltin command)-.2 F F4(fc)2.798 E F0(\(see)
+2.798 E F1 .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 309.6 R
+(The)5.472 E F4(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 .001
+(manipulate the history \214le.)108 321.6 R .001
+(When using command-line editing, search commands are a)5.001 F -.25(va)
+-.2 G .002(ilable in each edit-).25 F(ing mode that pro)108 333.6 Q
+(vide access to the history list.)-.15 E 1.486(The shell allo)108 350.4
+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(HISTCONTR)3.985
+E(OL)-.27 E F0(and)3.735 E F1(HISTIGNORE)108 362.4 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 F4
+(cmdhist)108 374.4 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 386.4 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 F4(lithist)3.577 E F0
+.374(shell option causes the shell to sa)108 398.4 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 410.4 R F4(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
+422.4 Q/F5 10.95/Times-Bold@0 SF(HIST)72 439.2 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 451.2 R .611
+(xpansion feature that is similar to the history e)-.15 F .61
+(xpansion in)-.15 F F4(csh)3.11 E F0 5.61(.T)C .61(his section)-5.61 F
+.87(describes what syntax features are a)108 463.2 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
+.95(can be disabled using the)108 475.2 R F4(+H)3.449 E F0 .949
+(option to the)3.449 F F4(set)3.449 E F0 -.2(bu)3.449 G .949
+(iltin command \(see).2 F F1 .949(SHELL B)3.449 F(UIL)-.09 E .949
+(TIN COMMANDS)-.828 F F0(be-)3.199 E(lo)108 487.2 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 504 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 516 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 528 Q(.)-.65 E 1.163(History e)
+108 544.8 R 1.163(xpansion is performed immediately after a complete li\
+ne is read, before the shell breaks it into)-.15 F -.1(wo)108 556.8 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 568.8 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 580.8 R .766
+(The line selected from the)5.766 F .253(history is the)108 592.8 R F3
+-.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 F3(wor)
+2.753 E(ds)-.37 E F0 5.253(.V)C(arious)-6.363 E F3(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 604.8 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 616.8
+R -.15(ve)-.25 G(ral).15 E F3(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 628.8 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 F4(!)
+3.688 E F0 .355(by def)3.688 F(ault.)-.1 E .79(Only backslash \()108
+640.8 R F4(\\).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 652.8 R
+(string.)108 664.8 Q(Se)108 681.6 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 693.6 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 F4(=)3.162 E F0 5.662(.I)C 3.162(ft)-5.662 G(he)-3.162 E F4
+(extglob)3.162 E F0 .662(shell option is enabled,)3.162 F F4(\()3.162 E
+F0(will also inhibit e)108 705.6 Q(xpansion.)-.15 E(Se)108 722.4 Q -.15
+(ve)-.25 G .109(ral shell options settable with the).15 F F4(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(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(57)185.115 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 .232(If the)108 84
+R/F1 10/Times-Bold@0 SF(histv)2.732 E(erify)-.1 E F0 .231
+(shell option is enabled \(see the description of the)2.731 F F1(shopt)
+2.731 E F0 -.2(bu)2.731 G .231(iltin belo).2 F .231(w\), and)-.25 F F1
+-.18(re)2.731 G(adline).18 E F0 .231(is be-)2.731 F .449(ing used, hist\
+ory substitutions are not immediately passed to the shell parser)108 96
+R 5.449(.I)-.55 G .449(nstead, the e)-5.449 F .449(xpanded line is)-.15
+F 2.228(reloaded into the)108 108 R F1 -.18(re)4.728 G(adline).18 E F0
+2.228(editing b)4.728 F(uf)-.2 E 2.228(fer for further modi\214cation.)
+-.25 F(If)7.228 E F1 -.18(re)4.728 G(adline).18 E F0 2.228
+(is being used, and the)4.728 F F1(histr)108 120 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 F1 -.18(re)
+3.702 G(adline).18 E F0(editing)3.702 E -.2(bu)108 132 S -.25(ff).2 G
+.304(er for correction.).25 F(The)5.304 E F1<ad70>2.804 E F0 .304
+(option to the)2.804 F F1(history)2.804 E F0 -.2(bu)2.804 G .303
+(iltin command may be used to see what a history e).2 F(x-)-.15 E .52
+(pansion will do before using it.)108 144 R(The)5.52 E F1<ad73>3.02 E F0
+.52(option to the)3.02 F F1(history)3.02 E F0 -.2(bu)3.02 G .52
+(iltin may be used to add commands to the).2 F
+(end of the history list without actually e)108 156 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 1.109(The shell allo)108 172.8 R
+1.108(ws control of the v)-.25 F 1.108
+(arious characters used by the history e)-.25 F 1.108
+(xpansion mechanism \(see the de-)-.15 F .162(scription of)108 184.8 R
+F1(histchars)2.662 E F0(abo)2.662 E .462 -.15(ve u)-.15 H(nder).15 E F1
+.163(Shell V)2.662 F(ariables)-.92 E F0 2.663(\). The)B .163
+(shell uses the history comment character to mark)2.663 F
+(history timestamps when writing the history \214le.)108 196.8 Q F1(Ev)
+87 213.6 Q(ent Designators)-.1 E F0 .205(An e)108 225.6 R -.15(ve)-.25 G
+.204(nt designator is a reference to a command line entry in the histor\
+y list.).15 F .204(Unless the reference is abso-)5.204 F(lute, e)108
+237.6 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 F1(!)108 254.4 Q
+F0 1.607(Start a history substitution, e)144 254.4 R 1.607
+(xcept when follo)-.15 F 1.607(wed by a)-.25 F F1(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 266.4 Q F1(extglob)2.5 E F0
+(shell option is enabled using the)2.5 E F1(shopt)2.5 E F0 -.2(bu)2.5 G
+(iltin\).).2 E F1(!)108 278.4 Q/F2 10/Times-Italic@0 SF(n)A F0
+(Refer to command line)144 278.4 Q F2(n)2.86 E F0(.).24 E F1<21ad>108
+290.4 Q F2(n)A F0(Refer to the current command minus)144 290.4 Q F2(n)
+2.86 E F0(.).24 E F1(!!)108 302.4 Q F0(Refer to the pre)144 302.4 Q
+(vious command.)-.25 E(This is a synon)5 E(ym for `!\2551'.)-.15 E F1(!)
+108 314.4 Q F2(string)A F0 .865(Refer to the most recent command preced\
+ing the current position in the history list starting with)144 314.4 R
+F2(string)144.34 326.4 Q F0(.).22 E F1(!?)108 338.4 Q F2(string)A F1
+([?])A F0 1.503(Refer to the most recent command preceding the current \
+position in the history list containing)144 350.4 R F2(string)144.34
+362.4 Q F0 5.497(.T).22 G .497(he trailing)-5.497 F F1(?)2.997 E F0 .497
+(may be omitted if)2.997 F F2(string)3.337 E F0 .496(is follo)3.216 F
+.496(wed immediately by a ne)-.25 F 2.996(wline. If)-.25 F F2(string)
+2.996 E F0(is)2.996 E .39(missing, the string from the most recent sear\
+ch is used; it is an error if there is no pre)144 374.4 R .391
+(vious search)-.25 F(string.)144 386.4 Q/F3 12/Times-Bold@0 SF(^)108
+403.4 Q F2(string1)-5 I F3(^)5 I F2(string2)-5 I F3(^)5 I F0 .753
+(Quick substitution.)144 410.4 R .753(Repeat the pre)5.753 F .753
+(vious command, replacing)-.25 F F2(string1)3.593 E F0(with)3.253 E F2
+(string2)3.592 E F0 5.752(.E).02 G(qui)-5.752 E -.25(va)-.25 G .752
+(lent to).25 F -.74(``)144 422.4 S(!!:s).74 E/F4 12/Times-Roman@0 SF(^)5
+I F2(string1)-5 I F4(^)5 I F2(string2)-5 I F4(^)5 I F0 1.48 -.74('' \()
+-5 L(see).74 E F1(Modi\214ers)2.5 E F0(belo)2.5 E(w\).)-.25 E F1(!#)108
+434.4 Q F0(The entire command line typed so f)144 434.4 Q(ar)-.1 E(.)
+-.55 E F1 -.75(Wo)87 451.2 S(rd Designators).75 E F0 -.8(Wo)108 463.2 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 475.2 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 .515
+(are numbered from the be)108 487.2 R .516
+(ginning of the line, with the \214rst w)-.15 F .516
+(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)5.516 G .516(rds are in-)
+.8 F(serted into the current line separated by single spaces.)108 499.2
+Q F1 2.5(0\()108 516 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 528 Q
+2.5(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E
+F2(n)108.36 540 Q F0(The)144 540 Q F2(n)2.5 E F0(th w)A(ord.)-.1 E F1(^)
+108 552 Q F0(The \214rst ar)144 552 Q 2.5(gument. That)-.18 F(is, w)2.5
+E(ord 1.)-.1 E F1($)108 564 Q F0 .064(The last w)144 564 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 576 Q(ord in the line.)-.1 E F1(%)
+108 588 Q F0 1.419(The \214rst w)144 588 R 1.419
+(ord matched by the most recent `?)-.1 F F2(string)A F0 1.42
+(?' search, if the search string be)B 1.42(gins with a)-.15 F
+(character that is part of a w)144 600 Q(ord.)-.1 E F2(x)108.77 612 Q F1
+<ad>A F2(y)A F0 2.5(Ar)144 612 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 624 Q F0 .316(All of the w)144 624 R .316(ords b)-.1 F .316
+(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.815 E F0 .315(if there is)2.815 F(just one w)144 636 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 648 Q F0(Abbre)144 648 Q(viates)-.25 E F2(x\255$)2.5 E F0(.)
+A F1<78ad>108 660 Q F0(Abbre)144 660 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
+2.5(ord. If)-.1 F F1(x)2.5 E F0(is missing, it def)2.5 E(aults to 0.)-.1
+E(If a w)108 676.8 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 693.6 Q F0 .183(After the optional w)108 705.6 R .183
+(ord designator)-.1 F 2.683(,t)-.4 G .184
+(here may appear a sequence of one or more of the follo)-2.683 F .184
+(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 717.6 Q
+(These modify)5 E 2.5(,o)-.65 G 2.5(re)-2.5 G(dit, the w)-2.5 E
+(ord or w)-.1 E(ords selected from the history e)-.1 E -.15(ve)-.25 G
+(nt.).15 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(58)185.115
+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(h)108 84 Q F0(Remo)144 84 Q .3 -.15(ve a t)-.15 H
+(railing \214lename component, lea).15 E(ving only the head.)-.2 E F1(t)
+108 96 Q F0(Remo)144 96 Q .3 -.15(ve a)-.15 H
+(ll leading \214lename components, lea).15 E(ving the tail.)-.2 E F1(r)
+108 108 Q F0(Remo)144 108 Q .3 -.15(ve a t)-.15 H(railing suf).15 E
+(\214x of the form)-.25 E/F2 10/Times-Italic@0 SF(.xxx)2.5 E F0 2.5(,l)C
+(ea)-2.5 E(ving the basename.)-.2 E F1(e)108 120 Q F0(Remo)144 120 Q .3
+-.15(ve a)-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1
+(p)108 132 Q F0(Print the ne)144 132 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 144 Q F0
+(Quote the substituted w)144 144 Q
+(ords, escaping further substitutions.)-.1 E F1(x)108 156 Q F0 .386
+(Quote the substituted w)144 156 R .386(ords as with)-.1 F F1(q)2.886 E
+F0 2.886(,b)C .386(ut break into w)-3.086 F .385(ords at)-.1 F F1
+(blanks)2.885 E F0 .385(and ne)2.885 F 2.885(wlines. The)-.25 F F1(q)
+2.885 E F0(and)2.885 E F1(x)2.885 E F0(modi\214ers are mutually e)144
+168 Q(xclusi)-.15 E -.15(ve)-.25 G 2.5(;t).15 G
+(he last one supplied is used.)-2.5 E F1(s/)108 180 Q F2(old)A F1(/)A F2
+(ne)A(w)-.15 E F1(/)A F0(Substitute)144 192 Q F2(ne)3.328 E(w)-.15 E F0
+.469(for the \214rst occurrence of)3.278 F F2(old)3.199 E F0 .469
+(in the e)3.739 F -.15(ve)-.25 G .469(nt line.).15 F(An)5.469 E 2.969
+(yc)-.15 G .469(haracter may be used as the)-2.969 F .954
+(delimiter in place of /.)144 204 R .953
+(The \214nal delimiter is optional if it is the last character of the e)
+5.953 F -.15(ve)-.25 G .953(nt line.).15 F .131
+(The delimiter may be quoted in)144 216 R F2(old)2.861 E F0(and)3.401 E
+F2(ne)2.991 E(w)-.15 E F0 .131(with a single backslash.)2.941 F .131
+(If & appears in)5.131 F F2(ne)2.991 E(w)-.15 E F0 2.631(,i).31 G 2.631
+(ti)-2.631 G 2.631(sr)-2.631 G(e-)-2.631 E .62(placed by)144 228 R F2
+(old)3.349 E F0 5.619(.A).77 G .619(single backslash will quote the &.)
+-2.5 F(If)5.619 E F2(old)3.349 E F0 .619(is null, it is set to the last)
+3.889 F F2(old)3.349 E F0(substi-)3.889 E .486(tuted, or)144 240 R 2.986
+(,i)-.4 G 2.986(fn)-2.986 G 2.986(op)-2.986 G(re)-2.986 E .486
+(vious history substitutions took place, the last)-.25 F F2(string)3.326
+E F0 .487(in a)3.206 F F1(!?)2.987 E F2(string)A F1([?])A F0 2.987
+(search. If)5.487 F F2(ne)144.36 252 Q(w)-.15 E F0
+(is null, each matching)2.81 E F2(old)2.73 E F0(is deleted.)3.27 E F1(&)
+108 264 Q F0(Repeat the pre)144 264 Q(vious substitution.)-.25 E F1(g)
+108 276 Q F0 .398(Cause changes to be applied o)144 276 R -.15(ve)-.15 G
+2.898(rt).15 G .398(he entire e)-2.898 F -.15(ve)-.25 G .398(nt line.)
+.15 F .397(This is used in conjunction with `)5.398 F F1(:s)A F0 2.897
+('\()C(e.g.,)-2.897 E(`)144 288 Q F1(:gs/)A F2(old)A F1(/)A F2(ne)A(w)
+-.15 E F1(/)A F0 .35('\) or `)B F1(:&)A F0 2.85('. If)B .35(used with `)
+2.85 F F1(:s)A F0 .35(', an)B 2.85(yd)-.15 G .351
+(elimiter can be used in place of /, and the \214nal de-)-2.85 F
+(limiter is optional if it is the last character of the e)144 300 Q -.15
+(ve)-.25 G(nt line.).15 E(An)5 E F1(a)2.5 E F0(may be used as a synon)
+2.5 E(ym for)-.15 E F1(g)2.5 E F0(.)A F1(G)108 312 Q F0(Apply the follo)
+144 312 Q(wing `)-.25 E F1(s)A F0 2.5('o)C 2.5(r`)-2.5 G F1(&)-2.5 E 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/F3 10.95/Times-Bold@0 SF(SHELL B)72 328.8 Q(UIL)-.11 E
+(TIN COMMANDS)-1.007 E F0 .063(Unless otherwise noted, each b)108 340.8
+R .062(uiltin command documented in this section as accepting options p\
+receded by)-.2 F F1<ad>108 352.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 364.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 376.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 1.154(speci\214ed as accepting options interpret ar)
+108 388.8 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F1<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
+400.8 Q -.15(ve)-.25 G(nt this interpretation.).15 E F1(:)108 418.8 Q F0
+([)2.5 E F2(ar)A(guments)-.37 E F0(])A .451(No ef)144 430.8 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 442.8 R
+(return status is zero.)2.5 E F1(.)110.5 459.6 Q F2(\214lename)6.666 E
+F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A F1(sour)108 471.6 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 483.6 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.33
+(status of the last command e)144 495.6 R -.15(xe)-.15 G 1.331
+(cuted from).15 F F2(\214lename)5.741 E F0 6.331(.I).18 G(f)-6.331 E F2
+(\214lename)5.741 E F0 1.331(does not contain a slash, \214le-)4.011 F
+.023(names in)144 507.6 R/F4 9/Times-Bold@0 SF -.666(PA)2.523 G(TH)-.189
+E F0 .022(are used to \214nd the directory containing)2.273 F F2
+(\214lename)4.432 E F0 2.522(,b).18 G(ut)-2.722 E F2(\214lename)2.522 E
+F0 .022(does not need to be)2.522 F -.15(exe)144 519.6 S 3.86
+(cutable. The).15 F 1.36(\214le searched for in)3.86 F F4 -.666(PA)3.86
+G(TH)-.189 E F0 1.361(need not be e)3.61 F -.15(xe)-.15 G 3.861
+(cutable. When).15 F F1(bash)3.861 E F0 1.361(is not in)3.861 F F2
+(posix)3.861 E(mode)144 531.6 Q F0 2.772(,i)C 2.772(ts)-2.772 G .272
+(earches the current directory if no \214le is found in)-2.772 F F4
+-.666(PA)2.771 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .271(If the)
+4.771 F F1(sour)2.771 E(cepath)-.18 E F0 .271(option to the)2.771 F F1
+(shopt)144 543.6 Q F0 -.2(bu)3.659 G 1.159(iltin command is turned of).2
+F 1.159(f, the)-.25 F F4 -.666(PA)3.659 G(TH)-.189 E F0 1.159
+(is not searched.)3.409 F 1.16(If an)6.159 F(y)-.15 E F2(ar)3.66 E
+(guments)-.37 E F0 1.16(are supplied,)3.66 F(the)144 555.6 Q 3.692(yb)
+-.15 G 1.192(ecome the positional parameters when)-3.692 F F2
+(\214lename)3.692 E F0 1.192(is e)3.692 F -.15(xe)-.15 G 3.691
+(cuted. Otherwise).15 F 1.191(the positional pa-)3.691 F .82
+(rameters are unchanged.)144 567.6 R .82(If the)5.82 F F1<ad54>3.32 E F0
+.82(option is enabled,)3.32 F F1(.)3.32 E F0 .82(inherits an)3.32 F 3.32
+(yt)-.15 G .82(rap on)-3.32 F F1(DEB)3.32 E(UG)-.1 E F0 3.32(;i)C 3.32
+(fi)-3.32 G 3.32(ti)-3.32 G 3.32(sn)-3.32 G(ot,)-3.32 E(an)144 579.6 Q
+(y)-.15 E F1(DEB)3.323 E(UG)-.1 E F0 .823(trap string is sa)3.323 F -.15
+(ve)-.2 G 3.322(da).15 G .822(nd restored around the call to)-3.322 F F1
+(.)3.322 E F0 3.322(,a)C(nd)-3.322 E F1(.)3.322 E F0 .822(unsets the)
+3.322 F F1(DEB)3.322 E(UG)-.1 E F0(trap)3.322 E .226(while it e)144
+591.6 R -.15(xe)-.15 G 2.726(cutes. If).15 F F1<ad54>2.727 E F0 .227
+(is not set, and the sourced \214le changes the)2.727 F F1(DEB)2.727 E
+(UG)-.1 E F0 .227(trap, the ne)2.727 F 2.727(wv)-.25 G .227(alue is)
+-2.977 F .891(retained when)144 603.6 R F1(.)3.391 E F0 3.391
+(completes. The)3.391 F .891
+(return status is the status of the last command e)3.391 F .89
+(xited within the)-.15 F(script \(0 if no commands are e)144 615.6 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 632.4 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 644.4 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 656.4 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 668.4 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 680.4 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 692.4 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 704.4 Q(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(59)185.115 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(bg)108 84 Q F0([)2.5 E/F2 10/Times-Italic@0 SF(jobspec)A F0(...])2.5
+E .745(Resume each suspended job)144 96 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 108 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 120 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 132 Q(as started without job control.)-.1 E
+F1(bind)108 148.8 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 160.8 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 172.8 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 184.8 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 196.8 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 208.8 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 F1(bind)108 220.8 Q F2 -.37(re)2.5 G
+(adline-command-line).37 E F0 .238(Display current)144 232.8 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 .04(macro, or set a)144 244.8 R F1 -.18(re)2.54 G(adline).18 E
+F0 -.25(va)2.54 G 2.54(riable. Each).25 F .039(non-option ar)2.54 F .039
+(gument is a command as it w)-.18 F .039(ould appear in a)-.1 F F1 -.18
+(re)144 256.8 S(adline).18 E F0 .182(initialization \214le such as)2.681
+F F2(.inputr)2.912 E(c)-.37 E F0 2.682(,b).31 G .182
+(ut each binding or command must be passed as a sep-)-2.882 F 1.907
+(arate ar)144 268.8 R 1.907
+(gument; e.g., '"\\C\255x\\C\255r": re\255read\255init\255\214le'.)-.18
+F 1.907(Options, if supplied, ha)6.907 F 2.207 -.15(ve t)-.2 H 1.907
+(he follo).15 F(wing)-.25 E(meanings:)144 280.8 Q F1<ad6d>144 292.8 Q F2
+-.1(ke)2.5 G(ymap)-.2 E F0(Use)180 304.8 Q F2 -.1(ke)5.158 G(ymap)-.2 E
+F0 2.658(as the k)5.348 F -.15(ey)-.1 G 2.658(map to be af).15 F 2.659
+(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E F2 -.1(ke)
+180 316.8 S(ymap)-.2 E F0 3.193(names are)5.883 F F2 3.193
+(emacs, emacs\255standar)5.693 F 3.192
+(d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E
+(vi\255command)180 328.8 Q F0 4.089(,a)C(nd)-4.089 E F2(vi\255insert)
+4.379 E F0(.).68 E F2(vi)6.589 E F0 1.589(is equi)4.089 F -.25(va)-.25 G
+1.589(lent to).25 F F2(vi\255command)4.089 E F0(\()4.089 E F2(vi\255mo)A
+(ve)-.1 E F0 1.59(is also a syn-)4.089 F(on)180 340.8 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 352.8 Q F0
+(List the names of all)180 352.8 Q F1 -.18(re)2.5 G(adline).18 E F0
+(functions.)2.5 E F1<ad70>144 364.8 Q F0(Display)180 364.8 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 376.8
+Q F0(List current)180 376.8 Q F1 -.18(re)2.5 G(adline).18 E F0
+(function names and bindings.)2.5 E F1<ad73>144 388.8 Q F0(Display)180
+388.8 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 400.8 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 412.8 Q
+F0(Display)180 412.8 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 424.8 Q F0(Display)180 424.8 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 436.8 Q F0(List current)180 436.8 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 448.8 Q F2(\214lename)2.5 E F0(Read k)180
+460.8 Q .3 -.15(ey b)-.1 H(indings from).15 E F2(\214lename)2.5 E F0(.)A
+F1<ad71>144 472.8 Q F2(function)2.5 E F0(Query about which k)180 484.8 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 496.8 Q F2(function)
+2.5 E F0(Unbind all k)180 508.8 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 520.8 Q
+F2 -.1(ke)2.5 G(yseq)-.2 E F0(Remo)180 532.8 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 544.8 Q F2 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F2
+(shell\255command)A F0(Cause)180 556.8 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 568.8 Q F0 1.765(is e)
+4.265 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 580.8 S(adline).18 E
+F0 .375(line b)2.874 F(uf)-.2 E .375(fer and the)-.25 F F3
+(READLINE_POINT)2.875 E F0(and)2.625 E F3(READLINE_MARK)2.875 E F0 -.25
+(va)2.625 G .375(riables to the).25 F 1.186
+(current location of the insertion point and the sa)180 592.8 R -.15(ve)
+-.2 G 3.685(di).15 G 1.185(nsertion point \(the mark\), respec-)-3.685 F
+(ti)180 604.8 Q -.15(ve)-.25 G(ly).15 E 5.377(.T)-.65 G .377
+(he shell assigns an)-5.377 F 2.877(yn)-.15 G .377(umeric ar)-2.877 F
+.377(gument the user supplied to the)-.18 F F3(READLINE_AR-)2.878 E
+(GUMENT)180 616.8 Q F0 -.25(va)3.605 G 3.855(riable. If).25 F 1.355
+(there w)3.855 F 1.354(as no ar)-.1 F 1.354(gument, that v)-.18 F 1.354
+(ariable is not set.)-.25 F 1.354(If the e)6.354 F -.15(xe)-.15 G(cuted)
+.15 E .343(command changes the v)180 628.8 R .343(alue of an)-.25 F
+2.843(yo)-.15 G(f)-2.843 E F3(READLINE_LINE)2.844 E/F4 9/Times-Roman@0
+SF(,)A F3(READLINE_POINT)2.594 E F4(,)A F0(or)2.594 E F3(READ-)2.844 E
+(LINE_MARK)180 640.8 Q F4(,)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
+652.8 Q F0 .83(List all k)180 652.8 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 664.8 Q(The return v)
+144 681.6 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 698.4 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .054
+(Exit from within a)144 710.4 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 722.4 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(GNU Bash 5.2)72 768
+Q(2022 September 19)135.955 E(60)185.115 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(is 0 unless)144 84
+Q/F1 10/Times-Italic@0 SF(n)2.5 E F0(is not greater than or equal to 1.)
+2.5 E/F2 10/Times-Bold@0 SF -.2(bu)108 100.8 S(iltin).2 E F1(shell\255b)
+2.5 E(uiltin)-.2 E F0([)2.5 E F1(ar)A(guments)-.37 E F0(])A(Ex)144 112.8
+Q .77(ecute the speci\214ed shell b)-.15 F .77(uiltin, passing it)-.2 F
+F1(ar)3.601 E(guments)-.37 E F0 3.271(,a).27 G .771(nd return its e)
+-3.271 F .771(xit status.)-.15 F .771(This is useful)5.771 F .616
+(when de\214ning a function whose name is the same as a shell b)144
+124.8 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144
+136.8 R .57(uiltin within the function.)-.2 F(The)5.57 E F2(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 148.8 Q(alse if)-.1
+E F1(shell\255b)2.84 E(uiltin)-.2 E F0(is not a shell b)2.74 E
+(uiltin command.)-.2 E F2(caller)108 165.6 Q F0([)2.5 E F1 -.2(ex)C(pr)
+.2 E F0(])A .254(Returns the conte)144 177.6 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 F2(.)2.753 E F0(or)2.753 E F2(sour)144 189.6 Q
+(ce)-.18 E F0 -.2(bu)2.824 G 2.824(iltins\). W).2 F(ithout)-.4 E F1 -.2
+(ex)2.824 G(pr).2 E F0(,)A F2(caller)2.824 E F0 .324
+(displays the line number and source \214lename of the current)2.824 F
+.254(subroutine call.)144 201.6 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 F1 -.2(ex)2.753 G(pr).2 E F0(,)A F2(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 213.6 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001
+(This e)144 225.6 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 237.6 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 F1 -.2(ex)3.02 G(pr).2 E F0 .52
+(does not corre-)3.02 F(spond to a v)144 249.6 Q
+(alid position in the call stack.)-.25 E F2(cd)108 266.4 Q F0([)2.5 E F2
+<ad4c>A F0(|[)A F2<ad50>A F0([)2.5 E F2<ad65>A F0(]] [\255@]] [)A F1
+(dir)A F0(])A .322(Change the current directory to)144 278.4 R F1(dir)
+2.822 E F0 5.322(.i)C(f)-5.322 E F1(dir)2.822 E F0 .321
+(is not supplied, the v)2.822 F .321(alue of the)-.25 F/F3 9
+/Times-Bold@0 SF(HOME)2.821 E F0 .321(shell v)2.571 F .321(ariable is)
+-.25 F .929(the def)144 290.4 R 3.429(ault. The)-.1 F -.25(va)3.429 G
+(riable).25 E F3(CDP)3.429 E -.855(AT)-.666 G(H).855 E F0 .93
+(de\214nes the search path for the directory containing)3.179 F F1(dir)
+3.78 E F0 3.43(:e).73 G(ach)-3.43 E .407(directory name in)144 302.4 R
+F3(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 .407(is searched for)2.657 F
+F1(dir)2.907 E F0 5.407(.A)C(lternati)-5.407 E .707 -.15(ve d)-.25 H
+.407(irectory names in).15 F F3(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0
+.406(are sepa-)2.656 F .799(rated by a colon \(:\).)144 314.4 R 3.299
+(An)5.799 G .799(ull directory name in)-3.299 F F3(CDP)3.299 E -.855(AT)
+-.666 G(H).855 E F0 .799(is the same as the current directory)3.049 F
+3.3(,i)-.65 G(.e.,)-3.3 E -.74(``)144 326.4 S F2(.).74 E F0 -.74('')C
+5.428(.I).74 G(f)-5.428 E F1(dir)3.278 E F0(be)3.658 E .428
+(gins with a slash \(/\), then)-.15 F F3(CDP)2.928 E -.855(AT)-.666 G(H)
+.855 E F0 .428(is not used.)2.678 F(The)5.428 E F2<ad50>2.927 E F0 .427
+(option causes)2.927 F F2(cd)2.927 E F0 .427(to use the)2.927 F(ph)144
+338.4 Q .167
+(ysical directory structure by resolving symbolic links while tra)-.05 F
+-.15(ve)-.2 G(rsing).15 E F1(dir)2.668 E F0 .168(and before processing)
+2.668 F 1.225(instances of)144 350.4 R F1(..)3.725 E F0(in)3.725 E F1
+(dir)3.725 E F0 1.225(\(see also the)3.725 F F2<ad50>3.725 E F0 1.225
+(option to the)3.725 F F2(set)3.725 E F0 -.2(bu)3.725 G 1.225
+(iltin command\); the).2 F F2<ad4c>3.725 E F0 1.225(option forces)3.725
+F .411(symbolic links to be follo)144 362.4 R .411
+(wed by resolving the link after processing instances of)-.25 F F1(..)
+2.911 E F0(in)2.911 E F1(dir)2.911 E F0 5.411(.I)C(f)-5.411 E F1(..)
+2.912 E F0(ap-)2.912 E .341(pears in)144 374.4 R F1(dir)2.841 E F0 2.841
+(,i)C 2.841(ti)-2.841 G 2.841(sp)-2.841 G .341(rocessed by remo)-2.841 F
+.341(ving the immediately pre)-.15 F .34(vious pathname component from)
+-.25 F F1(dir)2.84 E F0(,)A .175(back to a slash or the be)144 386.4 R
+.175(ginning of)-.15 F F1(dir)2.675 E F0 5.175(.I)C 2.675(ft)-5.175 G
+(he)-2.675 E F2<ad65>2.676 E F0 .176(option is supplied with)2.676 F F2
+<ad50>2.676 E F0 2.676(,a)C .176(nd the current w)-2.676 F(ork-)-.1 E
+.341(ing directory cannot be successfully determined after a successful\
+ directory change,)144 398.4 R F2(cd)2.84 E F0 .34(will return)2.84 F
+.356(an unsuccessful status.)144 410.4 R .356
+(On systems that support it, the)5.356 F F2<ad40>2.857 E F0 .357
+(option presents the e)2.857 F .357(xtended attrib)-.15 F(utes)-.2 E .07
+(associated with a \214le as a directory)144 422.4 R 5.07(.A)-.65 G
+2.569(na)-5.07 G -.18(rg)-2.569 G .069(ument of).18 F F2<ad>2.569 E F0
+.069(is con)2.569 F -.15(ve)-.4 G .069(rted to).15 F F3($OLDPWD)2.569 E
+F0 .069(before the direc-)2.319 F .306(tory change is attempted.)144
+434.4 R .306(If a non-empty directory name from)5.306 F F3(CDP)2.806 E
+-.855(AT)-.666 G(H).855 E F0 .306(is used, or if)2.556 F F2<ad>2.807 E
+F0 .307(is the \214rst)2.807 F(ar)144 446.4 Q .116(gument, and the dire\
+ctory change is successful, the absolute pathname of the ne)-.18 F 2.615
+(ww)-.25 G .115(orking direc-)-2.715 F .15
+(tory is written to the standard output.)144 458.4 R .15
+(If the directory change is successful,)5.15 F F2(cd)2.65 E F0 .15
+(sets the v)2.65 F .15(alue of the)-.25 F F2(PWD)144 470.4 Q F0(en)2.958
+E .458(vironment v)-.4 F .458(ariable to the ne)-.25 F 2.958(wd)-.25 G
+.458(irectory name, and sets the)-2.958 F F2(OLDPWD)2.957 E F0(en)2.957
+E .457(vironment v)-.4 F(ari-)-.25 E .125(able to the v)144 482.4 R .125
+(alue of the current w)-.25 F .126(orking directory before the change.)
+-.1 F .126(The return v)5.126 F .126(alue is true if the)-.25 F
+(directory w)144 494.4 Q(as successfully changed; f)-.1 E
+(alse otherwise.)-.1 E F2(command)108 511.2 Q F0([)2.5 E F2(\255pVv)A F0
+(])A F1(command)2.5 E F0([)2.5 E F1(ar)A(g)-.37 E F0(...])2.5 E(Run)144
+523.2 Q F1(command)2.765 E F0(with)3.335 E F1(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
+535.2 R F3 -.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 F1
+(command)3.202 E F0(is)3.772 E .4(performed using a def)144 547.2 R .4
+(ault v)-.1 F .4(alue for)-.25 F F3 -.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 559.2 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 F1
+(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 571.2 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 F1(command)3.617 E F0 .817(to be displayed; the)4.087
+F F2<ad56>144 583.2 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 595.2 R F1(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 F1
+(command)144.2 607.2 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 619.2 S
+(iltin is the e).2 E(xit status of)-.15 E F1(command)2.7 E F0(.).77 E F2
+(compgen)108 636 Q F0([)2.5 E F1(option)A F0 2.5(][)C F1(wor)-2.5 E(d)
+-.37 E F0(])A .013(Generate possible completion matches for)144 648 R F1
+(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F1(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 660 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 672 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 684 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 708 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
+720 R(If)5.02 E F1(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only)2.52
+F(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(61)185.115 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
+(those completions matching)144 84 Q/F1 10/Times-Italic@0 SF(wor)2.5 E
+(d)-.37 E F0(will be displayed.)2.5 E(The return v)144 108 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 10
+/Times-Bold@0 SF(complete)108 124.8 Q F0([)2.5 E F2(\255abcdefgjksuv)A
+F0 2.5(][)C F2<ad6f>-2.5 E F1(comp-option)2.5 E F0 2.5(][)C F2(\255DEI)
+-2.5 E F0 2.5(][)C F2<ad41>-2.5 E F1(action)2.5 E F0 2.5(][)C F2<ad47>
+-2.5 E F1(globpat)2.5 E F0 2.5(][)C F2<ad57>-2.5 E F1(wor)2.5 E(dlist)
+-.37 E F0(])A([)144 136.8 Q F2<ad46>A F1(function)2.5 E F0 2.5(][)C F2
+<ad43>-2.5 E F1(command)2.5 E F0 2.5(][)C F2<ad58>-2.5 E F1(\214lterpat)
+2.5 E F0 2.5(][)C F2<ad50>-2.5 E F1(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C
+F2<ad53>-2.5 E F1(suf)2.5 E<8c78>-.18 E F0(])A F1(name)2.5 E F0([)2.5 E
+F1(name ...)A F0(])A F2(complete \255pr)108 148.8 Q F0([)2.5 E F2
+(\255DEI)A F0 2.5(][)C F1(name)-2.5 E F0(...])2.5 E .633(Specify ho)144
+160.8 R 3.133(wa)-.25 G -.18(rg)-3.133 G .633(uments to each).18 F F1
+(name)3.133 E F0 .633(should be completed.)3.133 F .634(If the)5.634 F
+F2<ad70>3.134 E F0 .634(option is supplied, or if no)3.134 F .14
+(options are supplied, e)144 172.8 R .139
+(xisting completion speci\214cations are printed in a w)-.15 F .139
+(ay that allo)-.1 F .139(ws them to be)-.25 F .31(reused as input.)144
+184.8 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 F1(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 F1
+(name)2.81 E F0(s)A 1.208
+(are supplied, all completion speci\214cations.)144 196.8 R(The)6.208 E
+F2<ad44>3.708 E F0 1.207(option indicates that other supplied options)
+3.707 F .5(and actions should apply to the `)144 208.8 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
+220.8 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 232.8 R
+(`empty')-.74 E 3.376('c)-.74 G .876(ommand completion; that is, com-)
+-3.376 F .448(pletion attempted on a blank line.)144 244.8 R(The)5.447 E
+F2<ad49>2.947 E F0 .447
+(option indicates that other supplied options and actions)2.947 F .123
+(should apply to completion on the initial non-assignment w)144 256.8 R
+.123(ord on the line, or after a command de-)-.1 F 1.021
+(limiter such as)144 268.8 R F2(;)3.521 E F0(or)3.521 E F2(|)3.521 E F0
+3.521(,w)C 1.021(hich is usually command name completion.)-3.521 F 1.02
+(If multiple options are sup-)6.02 F .707(plied, the)144 280.8 R F2
+<ad44>3.207 E F0 .707(option tak)3.207 F .707(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 .708(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F2
+<ad49>3.208 E F0 5.708(.I)C 3.208(fa)-5.708 G 1.008 -.15(ny o)-3.208 H
+(f).15 E F2<ad44>3.208 E F0(,)A F2<ad45>144 292.8 Q F0 2.604(,o)C(r)
+-2.604 E F2<ad49>2.604 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15
+G(ther)-2.603 E F1(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 304.8 Q .152
+(The process of applying these completion speci\214cations when w)144
+328.8 R .153(ord completion is attempted is de-)-.1 F(scribed abo)144
+340.8 Q .3 -.15(ve u)-.15 H(nder).15 E F2(Pr)2.5 E
+(ogrammable Completion)-.18 E F0(.)A .556
+(Other options, if speci\214ed, ha)144 364.8 R .856 -.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.055 E F0(,)A F2<ad57>3.055 E F0 3.055
+(,a)C(nd)-3.055 E F2<ad58>3.055 E F0 .722(options \(and, if necessary)
+144 376.8 R 3.222(,t)-.65 G(he)-3.222 E F2<ad50>3.222 E F0(and)3.222 E
+F2<ad53>3.222 E F0 .723
+(options\) should be quoted to protect them from e)3.222 F(xpan-)-.15 E
+(sion before the)144 388.8 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 400.8 Q
+F1(comp-option)2.5 E F0(The)184 412.8 Q F1(comp-option)2.791 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 424.8 Q F1
+(comp-option)5 E F0(may be one of:)2.5 E F2(bashdefault)184 436.8 Q F0
+.281(Perform the rest of the def)224 448.8 R(ault)-.1 E F2(bash)2.781 E
+F0 .281(completions if the compspec generates no)2.781 F(matches.)224
+460.8 Q F2(default)184 472.8 Q F0 2.876(Use readline')224 472.8 R 5.376
+(sd)-.55 G(ef)-5.376 E 2.875
+(ault \214lename completion if the compspec generates no)-.1 F(matches.)
+224 484.8 Q F2(dir)184 496.8 Q(names)-.15 E F0(Perform directory name c\
+ompletion if the compspec generates no matches.)224 508.8 Q F2
+(\214lenames)184 520.8 Q F0 -.7(Te)224 532.8 S .137(ll readline that th\
+e compspec generates \214lenames, so it can perform an).7 F 2.637<798c>
+-.15 G(le-)-2.637 E .134(name\255speci\214c processing \(lik)224 544.8 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
+556.8 R .45(Intended to be used with shell)5.45 F(functions.)224 568.8 Q
+F2(noquote)184 580.8 Q F0 -.7(Te)224 580.8 S .814
+(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F
+3.314(ya)-.15 G .814(re \214lenames \(quoting)-3.314 F
+(\214lenames is the def)224 592.8 Q(ault\).)-.1 E F2(nosort)184 604.8 Q
+F0 -.7(Te)224 604.8 S(ll readline not to sort the list of possible comp\
+letions alphabetically).7 E(.)-.65 E F2(nospace)184 616.8 Q F0 -.7(Te)
+224 616.8 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
+628.8 Q F2(plusdirs)184 640.8 Q F0 1.985(After an)224 640.8 R 4.485(ym)
+-.15 G 1.985
+(atches de\214ned by the compspec are generated, directory name)-4.485 F
+.583(completion is attempted and an)224 652.8 R 3.084(ym)-.15 G .584
+(atches are added to the results of the other)-3.084 F(actions.)224
+664.8 Q F2<ad41>144 676.8 Q F1(action)2.5 E F0(The)184 688.8 Q F1
+(action)2.5 E F0(may be one of the follo)2.5 E
+(wing to generate a list of possible completions:)-.25 E F2(alias)184
+700.8 Q F0(Alias names.)224 700.8 Q(May also be speci\214ed as)5 E F2
+<ad61>2.5 E F0(.)A(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(62)
+185.115 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/F1 10/Times-Bold@0
+SF(arrayv)184 84 Q(ar)-.1 E F0(Array v)224 96 Q(ariable names.)-.25 E F1
+(binding)184 108 Q(Readline)224 108 Q F0 -.1(ke)2.5 G 2.5(yb)-.05 G
+(inding names.)-2.5 E F1 -.2(bu)184 120 S(iltin).2 E F0
+(Names of shell b)224 120 Q(uiltin commands.)-.2 E
+(May also be speci\214ed as)5 E F1<ad62>2.5 E F0(.)A F1(command)184 132
+Q F0(Command names.)224 144 Q(May also be speci\214ed as)5 E F1<ad63>2.5
+E F0(.)A F1(dir)184 156 Q(ectory)-.18 E F0(Directory names.)224 168 Q
+(May also be speci\214ed as)5 E F1<ad64>2.5 E F0(.)A F1(disabled)184 180
+Q F0(Names of disabled shell b)224 192 Q(uiltins.)-.2 E F1(enabled)184
+204 Q F0(Names of enabled shell b)224 204 Q(uiltins.)-.2 E F1(export)184
+216 Q F0(Names of e)224 216 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
+228 Q F0(File names.)224 228 Q(May also be speci\214ed as)5 E F1<ad66>
+2.5 E F0(.)A F1(function)184 240 Q F0(Names of shell functions.)224 252
+Q F1(gr)184 264 Q(oup)-.18 E F0(Group names.)224 264 Q
+(May also be speci\214ed as)5 E F1<ad67>2.5 E F0(.)A F1(helptopic)184
+276 Q F0(Help topics as accepted by the)224 288 Q F1(help)2.5 E F0 -.2
+(bu)2.5 G(iltin.).2 E F1(hostname)184 300 Q F0(Hostnames, as tak)224 312
+Q(en from the \214le speci\214ed by the)-.1 E/F2 9/Times-Bold@0 SF
+(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 324 Q F0
+(Job names, if job control is acti)224 324 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 336 S
+(yw).1 E(ord)-.1 E F0(Shell reserv)224 348 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
+360 Q F0(Names of running jobs, if job control is acti)224 360 Q -.15
+(ve)-.25 G(.).15 E F1(ser)184 372 Q(vice)-.1 E F0(Service names.)224 372
+Q(May also be speci\214ed as)5 E F1<ad73>2.5 E F0(.)A F1(setopt)184 384
+Q F0 -1.11(Va)224 384 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 396 Q F0(Shell option names as accepted by the)224 396 Q F1
+(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 408 Q F0
+(Signal names.)224 408 Q F1(stopped)184 420 Q F0
+(Names of stopped jobs, if job control is acti)224 420 Q -.15(ve)-.25 G
+(.).15 E F1(user)184 432 Q F0(User names.)224 432 Q
+(May also be speci\214ed as)5 E F1<ad75>2.5 E F0(.)A F1 -.1(va)184 444 S
+(riable).1 E F0(Names of all shell v)224 444 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 456 Q/F3
+10/Times-Italic@0 SF(command)2.5 E(command)184 468 Q F0 1.056(is e)3.556
+F -.15(xe)-.15 G 1.056(cuted in a subshell en).15 F 1.056
+(vironment, and its output is used as the possible)-.4 F 2.5
+(completions. Ar)184 480 R(guments are passed as with the)-.18 E F1
+<ad46>2.5 E F0(option.)2.5 E F1<ad46>144 492 Q F3(function)2.5 E F0 .113
+(The shell function)184 504 R F3(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 .114(the func-)2.614 F .817(tion is e)184 516 R
+-.15(xe)-.15 G .817(cuted, the \214rst ar).15 F .817(gument \()-.18 F F1
+($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .816
+(he name of the command whose ar)-3.316 F(guments)-.18 E 1.407
+(are being completed, the second ar)184 528 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 .104(third ar)184 540 R .104
+(gument \()-.18 F F1($3)A F0 2.604(\)i)C 2.604(st)-2.604 G .104(he w)
+-2.604 F .104(ord preceding the w)-.1 F .103
+(ord being completed on the current com-)-.1 F .101(mand line.)184 552 R
+.101(When it \214nishes, the possible completions are retrie)5.101 F
+-.15(ve)-.25 G 2.602(df).15 G .102(rom the v)-2.602 F .102(alue of the)
+-.25 F F2(COMPREPL)184 564 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E
+F1<ad47>144 576 Q F3(globpat)2.5 E F0 1.008(The pathname e)184 588 R
+1.008(xpansion pattern)-.15 F F3(globpat)3.507 E F0 1.007(is e)3.507 F
+1.007(xpanded to generate the possible comple-)-.15 F(tions.)184 600 Q
+F1<ad50>144 612 Q F3(pr)2.5 E(e\214x)-.37 E(pr)184 624 Q(e\214x)-.37 E
+F0 .534(is added at the be)3.034 F .534
+(ginning of each possible completion after all other options ha)-.15 F
+-.15(ve)-.2 G(been applied.)184 636 Q F1<ad53>144 648 Q F3(suf)2.5 E
+<8c78>-.18 E(suf)184 648 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 660 Q F3(wor)2.5 E
+(dlist)-.37 E F0(The)184 672 Q F3(wor)3.64 E(dlist)-.37 E F0 1.14
+(is split using the characters in the)3.64 F F2(IFS)3.64 E F0 1.139
+(special v)3.39 F 1.139(ariable as delimiters, and)-.25 F .98
+(each resultant w)184 684 R .98(ord is e)-.1 F 3.481(xpanded. Shell)-.15
+F .981(quoting is honored within)3.481 F F3(wor)3.481 E(dlist)-.37 E F0
+3.481(,i)C 3.481(no)-3.481 G .981(rder to)-3.481 F(pro)184 696 Q .766
+(vide a mechanism for the w)-.15 F .765
+(ords to contain shell metacharacters or characters in the)-.1 F -.25
+(va)184 708 S 1.964(lue of).25 F F2(IFS)4.464 E/F4 9/Times-Roman@0 SF(.)
+A F0 1.964
+(The possible completions are the members of the resultant list which)
+6.464 F(match the w)184 720 Q(ord being completed.)-.1 E(GNU Bash 5.2)72
+768 Q(2022 September 19)135.955 E(63)185.115 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/F1 10/Times-Bold@0
+SF<ad58>144 84 Q/F2 10/Times-Italic@0 SF(\214lterpat)2.5 E(\214lterpat)
+184 96 Q F0 .456(is a pattern as used for pathname e)2.956 F 2.956
+(xpansion. It)-.15 F .455(is applied to the list of possible)2.956 F
+1.596(completions generated by the preceding options and ar)184 108 R
+1.596(guments, and each completion)-.18 F(matching)184 120 Q F2
+(\214lterpat)3.205 E F0 .705(is remo)3.205 F -.15(ve)-.15 G 3.205(df).15
+G .704(rom the list.)-3.205 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)
+3.204 E F0(in)3.204 E F2(\214lterpat)3.204 E F0(ne)3.204 E -.05(ga)-.15
+G .704(tes the pattern;).05 F(in this case, an)184 132 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 .466(The return v)144 148.8 R .466
+(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.967 E F0
+(or)2.967 E F1<ad72>2.967 E F0 .467(is sup-)2.967 F 1.362
+(plied without a)144 160.8 R F2(name)3.862 E F0(ar)3.862 E 1.361
+(gument, an attempt is made to remo)-.18 F 1.661 -.15(ve a c)-.15 H
+1.361(ompletion speci\214cation for a).15 F F2(name)144 172.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 189.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 201.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 .726
+(completion if no)144 213.6 R F2(name)3.226 E F0 3.226(sa)C .726
+(re supplied.)-3.226 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 .725
+(n, display the completion options for).15 F(each)144 225.6 Q F2(name)
+3.223 E F0 .723(or the current completion.)3.223 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 .724(alid for the)-.25 F F1(com-)3.224 E(plete)144 237.6 Q F0 -.2(bu)
+2.678 G .178(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.227(the `)144 249.6 R(`def)-.74 E(ault')-.1 E 3.727('c)-.74 G 1.228(o\
+mmand completion; that is, completion attempted on a command for which \
+no)-3.727 F 2.039(completion has pre)144 261.6 R 2.039
+(viously been de\214ned.)-.25 F(The)7.038 E F1<ad45>4.538 E F0 2.038
+(option indicates that other supplied options)4.538 F 1.538
+(should apply to `)144 273.6 R(`empty')-.74 E 4.038('c)-.74 G 1.539
+(ommand completion; that is, completion attempted on a blank line.)
+-4.038 F(The)144 285.6 Q F1<ad49>3.02 E F0 .52(option indicates that ot\
+her supplied options should apply to completion on the initial non-)3.02
+F .867(assignment w)144 297.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.368(,w)C .868(hich is usually com-)
+-3.368 F(mand name completion.)144 309.6 Q .432(The return v)144 333.6 R
+.431(alue is true unless an in)-.25 F -.25(va)-.4 G .431
+(lid option is supplied, an attempt is made to modify the op-).25 F
+(tions for a)144 345.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 362.4 Q F0([)
+2.5 E F2(n)A F0(])A .85(Resume the ne)144 374.4 R .85
+(xt iteration of the enclosing)-.15 F F1 -.25(fo)3.35 G(r).25 E F0(,)A
+F1(while)3.351 E F0(,)A F1(until)3.351 E F0 3.351(,o)C(r)-3.351 E F1
+(select)3.351 E F0 3.351(loop. If)3.351 F F2(n)3.711 E F0 .851
+(is speci\214ed, re-)3.591 F .204(sume at the)144 386.4 R F2(n)2.704 E
+F0 .204(th enclosing loop.)B F2(n)5.564 E F0 .204(must be)2.944 F/F3 10
+/Symbol SF<b3>2.704 E F0 2.703(1. If)2.704 F F2(n)3.063 E F0 .203
+(is greater than the number of enclosing loops,)2.943 F 1.183
+(the last enclosing loop \(the `)144 398.4 R(`top-le)-.74 E -.15(ve)-.25
+G(l').15 E 3.683('l)-.74 G 1.183(oop\) is resumed.)-3.683 F 1.184
+(The return v)6.184 F 1.184(alue is 0 unless)-.25 F F2(n)3.684 E F0
+1.184(is not)3.684 F(greater than or equal to 1.)144 410.4 Q F1(declar)
+108 427.2 Q(e)-.18 E F0([)2.5 E F1(\255aAfFgiIlnrtux)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 F1(typeset)108 439.2 Q F0([)2.5 E F1(\255aAfFgiIlnrtux)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.265(Declare v)144 451.2 R 1.265
+(ariables and/or gi)-.25 F 1.565 -.15(ve t)-.25 H 1.265(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.764(nt).15 G 1.264(hen display the v)
+-3.764 F 1.264(alues of)-.25 F -.25(va)144 463.2 S 3.46(riables. The).25
+F F1<ad70>3.46 E F0 .96(option will display the attrib)3.46 F .96
+(utes and v)-.2 F .96(alues of each)-.25 F F2(name)3.82 E F0 5.96(.W).18
+G(hen)-5.96 E F1<ad70>3.46 E F0 .96(is used)3.46 F(with)144 475.2 Q F2
+(name)2.775 E F0(ar)2.775 E .275
+(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 .274(re ignored.)-2.775 F(When)
+5.274 E F1<ad70>2.774 E F0 .274(is supplied)2.774 F(without)144 487.2 Q
+F2(name)3.789 E F0(ar)3.789 E 1.289(guments, it will display the attrib)
+-.18 F 1.289(utes and v)-.2 F 1.29(alues of all v)-.25 F 1.29
+(ariables ha)-.25 F 1.29(ving the at-)-.2 F(trib)144 499.2 Q .38
+(utes speci\214ed by the additional options.)-.2 F .38
+(If no other options are supplied with)5.38 F F1<ad70>2.88 E F0(,)A F1
+(declar)2.88 E(e)-.18 E F0(will)2.88 E 1.106(display the attrib)144
+511.2 R 1.106(utes and v)-.2 F 1.106(alues of all shell v)-.25 F 3.606
+(ariables. The)-.25 F F1<ad66>3.606 E F0 1.107
+(option will restrict the display to)3.606 F .3(shell functions.)144
+523.2 R(The)5.3 E F1<ad46>2.8 E F0 .299(option inhibits the display of \
+function de\214nitions; only the function name)2.8 F 1.54(and attrib)144
+535.2 R 1.54(utes are printed.)-.2 F 1.54(If the)6.54 F F1(extdeb)4.04 E
+(ug)-.2 E F0 1.54(shell option is enabled using)4.04 F F1(shopt)4.04 E
+F0 4.04(,t)C 1.54(he source \214le)-4.04 F .648
+(name and line number where each)144 547.2 R F2(name)3.148 E F0 .648
+(is de\214ned are displayed as well.)3.148 F(The)5.648 E F1<ad46>3.148 E
+F0 .648(option implies)3.148 F F1<ad66>144 559.2 Q F0 5.836(.T)C(he)
+-5.836 E F1<ad67>3.336 E F0 .836(option forces v)3.336 F .837
+(ariables to be created or modi\214ed at the global scope, e)-.25 F -.15
+(ve)-.25 G 3.337(nw).15 G(hen)-3.337 E F1(de-)3.337 E(clar)144 571.2 Q
+(e)-.18 E F0 .819(is e)3.319 F -.15(xe)-.15 G .819
+(cuted in a shell function.).15 F .818
+(It is ignored in all other cases.)5.818 F(The)5.818 E F1<ad49>3.318 E
+F0 .818(option causes local)3.318 F -.25(va)144 583.2 S .693
+(riables to inherit the attrib).25 F .693(utes \(e)-.2 F .693(xcept the)
+-.15 F F2(namer)3.194 E(ef)-.37 E F0(attrib)3.194 E .694(ute\) and v)-.2
+F .694(alue of an)-.25 F 3.194(ye)-.15 G .694(xisting v)-3.344 F
+(ariable)-.25 E .82(with the same)144 595.2 R F2(name)3.32 E F0 .82
+(at a surrounding scope.)3.32 F .82(If there is no e)5.82 F .82
+(xisting v)-.15 F .82(ariable, the local v)-.25 F .82(ariable is)-.25 F
+.379(initially unset.)144 607.2 R .379(The follo)5.379 F .379
+(wing options can be used to restrict output to v)-.25 F .38
+(ariables with the speci\214ed)-.25 F(attrib)144 619.2 Q(ute or to gi)
+-.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F1<ad61>144
+631.2 Q F0(Each)180 631.2 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 643.2 Q F0(Each)180
+643.2 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 655.2 Q F0(Use function names only)180
+655.2 Q(.)-.65 E F1<ad69>144 667.2 Q F0 .558(The v)180 667.2 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 .557
+(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION)180 679.2 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 691.2 Q
+F0 .909(When the v)180 691.2 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 .91(rted to lo).15 F(wer)-.25 E(-)-.2 E 2.5(case. The)180 703.2 R
+(upper)2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F1<ad6e>144 715.2
+Q F0(Gi)180 715.2 Q 1.62 -.15(ve e)-.25 H(ach).15 E F2(name)3.82 E F0
+(the)3.82 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.518(That other v)180 727.2 R 1.518(ariable is de\214ned by the v)-.25
+F 1.519(alue of)-.25 F F2(name)4.019 E F0 6.519(.A)C 1.519
+(ll references, assignments, and)-6.519 F(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(64)185.115 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(attrib)180 84 Q
+.227(ute modi\214cations to)-.2 F/F1 10/Times-Italic@0 SF(name)2.726 E
+F0 2.726(,e)C .226(xcept those using or changing the)-2.876 F/F2 10
+/Times-Bold@0 SF<ad6e>2.726 E F0(attrib)2.726 E .226(ute itself, are)-.2
+F .808(performed on the v)180 96 R .808(ariable referenced by)-.25 F F1
+(name)3.308 E F0 1.908 -.55('s v)D 3.308(alue. The).3 F .809
+(nameref attrib)3.309 F .809(ute cannot be)-.2 F(applied to array v)180
+108 Q(ariables.)-.25 E F2<ad72>144 120 Q F0(Mak)180 120 Q(e)-.1 E F1
+(name)3.655 E F0 3.655(sr)C(eadonly)-3.655 E 6.154(.T)-.65 G 1.154
+(hese names cannot then be assigned v)-6.154 F 1.154
+(alues by subsequent as-)-.25 F(signment statements or unset.)180 132 Q
+F2<ad74>144 144 Q F0(Gi)180 144 Q .729 -.15(ve e)-.25 H(ach).15 E F1
+(name)2.929 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.93 E F2(RETURN)2.93 E F0
+(traps from the calling shell.)180 156 Q(The trace attrib)5 E
+(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2<ad75>144 168
+Q F0 .91(When the v)180 168 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 .909(rted to upper).15 F(-)-.2 E 2.5(case. The)180 180 R(lo)
+2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad78>144
+192 Q F0(Mark)180 192 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 .143
+(Using `+' instead of `\255' turns of)144 208.8 R 2.643(ft)-.25 G .143
+(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .144
+(xceptions that)-.15 F F2(+a)2.644 E F0(and)2.644 E F2(+A)2.644 E F0
+.144(may not)2.644 F .579(be used to destro)144 220.8 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 .578(used in a)3.078 F(function,)144 232.8 Q F2
+(declar)3.543 E(e)-.18 E F0(and)3.543 E F2(typeset)3.543 E F0(mak)3.543
+E 3.543(ee)-.1 G(ach)-3.543 E F1(name)3.543 E F0 1.043
+(local, as with the)3.543 F F2(local)3.544 E F0 1.044
+(command, unless the)3.544 F F2<ad67>3.544 E F0 1.205
+(option is supplied.)144 244.8 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 256.8 Q F0 5.217(.W)C .217
+(hen using)-5.217 F F2<ad61>2.717 E F0(or)2.717 E F2<ad41>2.717 E F0
+.217(and the compound assignment syntax to create array v)2.717 F .218
+(ariables, addi-)-.25 F .882(tional attrib)144 268.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 280.8 Q -.25(va)-.4 G .365(lid optio\
+n is encountered, an attempt is made to de\214ne a function using).25 F
+/F3 10/Courier@0 SF .366(\255f foo=bar)2.866 F F0 2.866(,a)C 2.866(na)
+-2.866 G(t-)-2.866 E .549(tempt is made to assign a v)144 292.8 R .549
+(alue to a readonly v)-.25 F .548
+(ariable, an attempt is made to assign a v)-.25 F .548(alue to an)-.25 F
+1.748(array v)144 304.8 R 1.748
+(ariable without using the compound assignment syntax \(see)-.25 F F2
+(Arrays)4.249 E F0(abo)4.249 E -.15(ve)-.15 G 1.749(\), one of the).15 F
+F1(names)144 316.8 Q F0 .359(is not a v)2.859 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.212(only v)144 328.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.213(ariable, or an attempt is)
+-.25 F(made to display a non-e)144 340.8 Q(xistent function with)-.15 E
+F2<ad66>2.5 E F0(.)A F2(dirs [\255clpv] [+)108 357.6 Q F1(n)A F2 2.5(][)
+C<ad>-2.5 E F1(n)A F2(])A F0 -.4(Wi)144 369.6 S .329
+(thout options, displays the list of currently remembered directories.)
+.4 F .328(The def)5.328 F .328(ault display is on a)-.1 F 1.238
+(single line with directory names separated by spaces.)144 381.6 R 1.238
+(Directories are added to the list with the)6.238 F F2(pushd)144 393.6 Q
+F0 .928(command; the)3.428 F F2(popd)3.428 E F0 .928(command remo)3.428
+F -.15(ve)-.15 G 3.428(se).15 G .928(ntries from the list.)-3.428 F .928
+(The current directory is al-)5.928 F -.1(wa)144 405.6 S
+(ys the \214rst directory in the stack.).1 E F2<ad63>144 417.6 Q F0
+(Clears the directory stack by deleting all of the entries.)180 417.6 Q
+F2<ad6c>144 429.6 Q F0 .881
+(Produces a listing using full pathnames; the def)180 429.6 R .882
+(ault listing format uses a tilde to denote)-.1 F(the home directory)180
+441.6 Q(.)-.65 E F2<ad70>144 453.6 Q F0
+(Print the directory stack with one entry per line.)180 453.6 Q F2<ad76>
+144 465.6 Q F0 .273(Print the directory stack with one entry per line, \
+pre\214xing each entry with its inde)180 465.6 R 2.772(xi)-.15 G 2.772
+(nt)-2.772 G(he)-2.772 E(stack.)180 477.6 Q F2(+)144 489.6 Q F1(n)A F0
+1.564(Displays the)180 489.6 R F1(n)4.064 E F0 1.565
+(th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F2
+(dirs)4.065 E F0 1.565(when in)4.065 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
+(without options, starting with zero.)180 501.6 Q F2<ad>144 513.6 Q F1
+(n)A F0 1.194(Displays the)180 513.6 R F1(n)3.694 E F0 1.194
+(th entry counting from the right of the list sho)B 1.194(wn by)-.25 F
+F2(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 525.6 Q .257(The return v)144
+542.4 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258
+(lid option is supplied or).25 F F1(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 554.4 Q F2(diso)108 571.2 Q(wn)-.1 E F0([)2.5 E F2
+(\255ar)A F0 2.5(][)C F2<ad68>-2.5 E F0 2.5(][)C F1(jobspec)-2.5 E F0
+(... |)2.5 E F1(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 583.2 S .122
+(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach).15 E F1(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 F1(jobspec)4.362 E F0 .121(is not present, and)2.932
+F .096(neither the)144 595.2 R F2<ad61>2.596 E F0 .096(nor the)2.596 F
+F2<ad72>2.596 E F0 .096(option is supplied, the)2.596 F F1(curr)2.596 E
+.096(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F2
+<ad68>2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each)
+.15 F F1(jobspec)145.74 607.2 Q F0 .586(is not remo)3.396 F -.15(ve)-.15
+G 3.086(df).15 G .585(rom the table, b)-3.086 F .585(ut is mark)-.2 F
+.585(ed so that)-.1 F/F4 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .585
+(is not sent to the job if the)2.835 F .962(shell recei)144 619.2 R -.15
+(ve)-.25 G 3.462(sa).15 G F4(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 .962
+(If no)5.462 F F1(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F2
+<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.359(jobs; the)144 631.2 R F2
+<ad72>3.859 E F0 1.359(option without a)3.859 F F1(jobspec)5.599 E F0
+(ar)4.169 E 1.358(gument restricts operation to running jobs.)-.18 F
+1.358(The return)6.358 F -.25(va)144 643.2 S(lue is 0 unless a).25 E F1
+(jobspec)4.24 E F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E
+F2(echo)108 660 Q F0([)2.5 E F2(\255neE)A F0 2.5(][)C F1(ar)-2.5 E(g)
+-.37 E F0(...])2.5 E .424(Output the)144 672 R F1(ar)2.924 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 .308
+(error occurs.)144 684 R(If)5.308 E F2<ad6e>2.808 E F0 .308
+(is speci\214ed, the trailing ne)2.808 F .308(wline is suppressed.)-.25
+F .307(If the)5.308 F F2<ad65>2.807 E F0 .307(option is gi)2.807 F -.15
+(ve)-.25 G .307(n, inter).15 F(-)-.2 E .197(pretation of the follo)144
+696 R .198(wing backslash-escaped characters is enabled.)-.25 F(The)
+5.198 E F2<ad45>2.698 E F0 .198(option disables the in-)2.698 F .067
+(terpretation of these escape characters, e)144 708 R -.15(ve)-.25 G
+2.567(no).15 G 2.567(ns)-2.567 G .067(ystems where the)-2.567 F 2.567
+(ya)-.15 G .067(re interpreted by def)-2.567 F 2.567(ault. The)-.1 F F2
+(xpg_echo)144 720 Q F0 .601
+(shell option may be used to dynamically determine whether or not)3.101
+F F2(echo)3.102 E F0 -.15(ex)3.102 G .602(pands these).15 F
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(65)185.115 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 .659
+(escape characters by def)144 84 R(ault.)-.1 E/F1 10/Times-Bold@0 SF
+(echo)5.659 E F0 .659(does not interpret)3.159 F F1<adad>3.159 E F0 .659
+(to mean the end of options.)3.159 F F1(echo)5.658 E F0(inter)3.158 E(-)
+-.2 E(prets the follo)144 96 Q(wing escape sequences:)-.25 E F1(\\a)144
+108 Q F0(alert \(bell\))180 108 Q F1(\\b)144 120 Q F0(backspace)180 120
+Q F1(\\c)144 132 Q F0(suppress further output)180 132 Q F1(\\e)144 144 Q
+(\\E)144 156 Q F0(an escape character)180 156 Q F1(\\f)144 168 Q F0
+(form feed)180 168 Q F1(\\n)144 180 Q F0(ne)180 180 Q 2.5(wl)-.25 G(ine)
+-2.5 E F1(\\r)144 192 Q F0(carriage return)180 192 Q F1(\\t)144 204 Q F0
+(horizontal tab)180 204 Q F1(\\v)144 216 Q F0 -.15(ve)180 216 S
+(rtical tab).15 E F1(\\\\)144 228 Q F0(backslash)180 228 Q F1(\\0)144
+240 Q/F2 10/Times-Italic@0 SF(nnn)A F0(the eight-bit character whose v)
+180 240 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 252 Q F2(HH)A F0
+(the eight-bit character whose v)180 252 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 264 Q F2(HHHH)A F0
+1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 276 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 288 Q 2.5(xd)-.15 G(igits\))-2.5 E F1
+(\\U)144 300 Q F2(HHHHHHHH)A F0 .548
+(the Unicode \(ISO/IEC 10646\) character whose v)180 312 R .547
+(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
+3.047 E(HHH)180 324 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\))
+-2.5 E F1(enable)108 340.8 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 .277(Enable and disable b)144 352.8 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 .834
+(the same name as a shell b)144 364.8 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.333(nt).15 G(hough)-3.333 E .989
+(the shell normally searches for b)144 376.8 R .989
+(uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>3.489 E F0 .99
+(is used, each)3.49 F F2(name)3.49 E F0 .99(is dis-)3.49 F .649
+(abled; otherwise,)144 388.8 R F2(names)3.148 E F0 .648(are enabled.)
+3.148 F -.15(Fo)5.648 G 3.148(re).15 G .648(xample, to use the)-3.298 F
+F1(test)3.148 E F0 .648(binary found via the)3.148 F/F3 9/Times-Bold@0
+SF -.666(PA)3.148 G(TH)-.189 E F0(in-)2.898 E .538(stead of the shell b)
+144 400.8 R .538(uiltin v)-.2 F .538(ersion, run)-.15 F/F4 10/Courier@0
+SF .538(enable -n test)3.038 F F0 5.538(.T)C(he)-5.538 E F1<ad66>3.038 E
+F0 .539(option means to load the ne)3.038 F(w)-.25 E -.2(bu)144 412.8 S
+1.365(iltin command).2 F F2(name)4.225 E F0 1.365(from shared object)
+4.045 F F2(\214lename)5.775 E F0 3.865(,o).18 G 3.865(ns)-3.865 G 1.365
+(ystems that support dynamic loading.)-3.865 F .606(Bash will use the v)
+144 424.8 R .606(alue of the)-.25 F F1 -.3(BA)3.106 G(SH_LO).3 E(AD)-.4
+E(ABLES_P)-.35 E -.95(AT)-.74 G(H).95 E F0 -.25(va)3.106 G .606
+(riable as a colon-separated list of).25 F .549
+(directories in which to search for)144 436.8 R F2(\214lename)3.049 E F0
+5.549(.T)C .549(he def)-5.549 F .548(ault is system-dependent.)-.1 F
+(The)5.548 E F1<ad64>3.048 E F0 .548(option will)3.048 F .546
+(delete a b)144 448.8 R .546(uiltin pre)-.2 F .546(viously loaded with)
+-.25 F F1<ad66>3.046 E F0 5.547(.I)C 3.047(fn)-5.547 G(o)-3.047 E F2
+(name)3.047 E F0(ar)3.047 E .547(guments are gi)-.18 F -.15(ve)-.25 G
+.547(n, or if the).15 F F1<ad70>3.047 E F0 .547(option is)3.047 F .546
+(supplied, a list of shell b)144 460.8 R .545(uiltins is printed.)-.2 F
+-.4(Wi)5.545 G .545(th no other option ar).4 F .545
+(guments, the list consists of all)-.18 F .695(enabled shell b)144 472.8
+R 3.195(uiltins. If)-.2 F F1<ad6e>3.195 E F0 .695
+(is supplied, only disabled b)3.195 F .695(uiltins are printed.)-.2 F
+(If)5.695 E F1<ad61>3.195 E F0 .695(is supplied, the)3.195 F .262
+(list printed includes all b)144 484.8 R .261
+(uiltins, with an indication of whether or not each is enabled.)-.2 F
+(If)5.261 E F1<ad73>2.761 E F0 .261(is sup-)2.761 F .268
+(plied, the output is restricted to the POSIX)144 496.8 R F2(special)
+2.768 E F0 -.2(bu)2.768 G 2.768(iltins. If).2 F .269
+(no options are supplied and a)2.768 F F2(name)2.769 E F0 .285
+(is not a shell b)144 508.8 R(uiltin,)-.2 E F1(enable)2.784 E F0 .284
+(will attempt to load)2.784 F F2(name)2.784 E F0 .284
+(from a shared object named)2.784 F F2(name)2.784 E F0 2.784(,a)C 2.784
+(si)-2.784 G 2.784(ft)-2.784 G(he)-2.784 E 1.41(command were)144 520.8 R
+F4 1.41(enable \255f)3.91 F F2 1.41(name name)3.91 F F0 6.41(.T)3.91 G
+1.41(he return v)-6.41 F 1.41(alue is 0 unless a)-.25 F F2(name)4.27 E
+F0 1.41(is not a shell)4.09 F -.2(bu)144 532.8 S
+(iltin or there is an error loading a ne).2 E 2.5(wb)-.25 G
+(uiltin from a shared object.)-2.7 E F1 -2.3 -.15(ev a)108 549.6 T(l).15
+E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 561.6 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 .478(and e)144 573.6 R -.15(xe)-.15 G
+.478(cuted by the shell, and its e).15 F .478
+(xit status is returned as the v)-.15 F .479(alue of)-.25 F F1 -2.3 -.15
+(ev a)2.979 H(l).15 E F0 5.479(.I)C 2.979(ft)-5.479 G .479(here are no)
+-2.979 F F2(ar)3.309 E(gs)-.37 E F0(,).27 E(or only null ar)144 585.6 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 602.4 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 614.4 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 626.4 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 .48(the zeroth ar)144 638.4 R .48(gument passed to)
+-.18 F F2(command)3.18 E F0 5.48(.T).77 G .48(his is what)-5.48 F F2(lo)
+3.07 E(gin)-.1 E F0 .48(\(1\) does.).24 F(The)5.48 E F1<ad63>2.98 E F0
+.48(option causes)2.98 F F2(com-)3.18 E(mand)144 650.4 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 662.4 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 674.4 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 686.4 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 698.4 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 710.4 Q
+(If there is a redirection error)5 E 2.5(,t)-.4 G
+(he return status is 1.)-2.5 E(GNU Bash 5.2)72 768 Q(2022 September 19)
+135.955 E(66)185.115 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(exit)108 84 Q F0([)2.5 E/F2 10/Times-Italic@0 SF(n)A F0(])A .096
+(Cause the shell to e)144 84 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
+96 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 112.8 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 124.8 Q F0
+.256(The supplied)144 136.8 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 148.8 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 160.8 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 172.8 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 184.8 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 196.8 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 208.8 Q F1(fc)108 225.6 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
+237.6 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 249.6 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
+261.6 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 273.6 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 .071
+(is used as an of)144 285.6 R .071
+(fset from the current command number\).)-.25 F .071(When listing, a)
+5.071 F F2<8c72>2.571 E(st)-.1 E F0(or)2.571 E F2(last)2.571 E F0 .071
+(of 0 is equi)2.571 F -.25(va)-.25 G(-).25 E .653
+(lent to \2551 and \2550 is equi)144 297.6 R -.25(va)-.25 G .653
+(lent to the current command \(usually the).25 F F1(fc)3.153 E F0 .653
+(command\); otherwise 0 is)3.153 F(equi)144 309.6 Q -.25(va)-.25 G .242
+(lent to \2551 and \2550 is in).25 F -.25(va)-.4 G 2.742(lid. If).25 F
+F2(last)2.832 E F0 .242
+(is not speci\214ed, it is set to the current command for list-)3.422 F
+.092(ing \(so that)144 321.6 R/F4 10/Courier@0 SF .092(fc \255l \25510)
+2.592 F F0 .093(prints the last 10 commands\) and to)2.592 F F2<8c72>
+4.503 E(st)-.1 E F0 2.593(otherwise. If)3.273 F F2<8c72>4.503 E(st)-.1 E
+F0 .093(is not speci-)3.273 F(\214ed, it is set to the pre)144 333.6 Q
+(vious command for editing and \25516 for listing.)-.25 E(The)144 357.6
+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 369.6 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 381.6 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 393.6 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 .006(ther v)144 405.6 R .006
+(ariable is set,)-.25 F F2(vi)4.171 E F0 .005(is used.)4.171 F .005
+(When editing is complete, the edited commands are echoed and e)5.005 F
+(x-)-.15 E(ecuted.)144 417.6 Q .788(In the second form,)144 441.6 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 453.6 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 465.6 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 477.6 Q .142(If the \214rst form is used, the return v)144
+501.6 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 513.6
+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 .788(last command e)144 525.6 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
+537.6 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F2(cmd)3.836 E F0 1.136
+(does not)4.406 F(specify a v)144 549.6 Q
+(alid history line, in which case)-.25 E F1(fc)2.5 E F0(returns f)2.5 E
+(ailure.)-.1 E F1(fg)108 566.4 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume)
+144 578.4 Q F2(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 F2(jobspec)5.653 E F0
+1.413(is not present, the)4.223 F(shell')144 590.4 Q 3.116(sn)-.55 G
+.616(otion of the)-3.116 F F2(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 602.4 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 F2(jobspec)145.74 614.4 Q
+F0(does not specify a v)2.81 E(alid job or)-.25 E F2(jobspec)4.24 E F0
+(speci\214es a job that w)2.81 E(as started without job control.)-.1 E
+F1(getopts)108 631.2 Q F2(optstring name)2.5 E F0([)2.5 E F2(ar)A 2.5
+(g.)-.37 G(..)-2.5 E F0(])A F1(getopts)144 643.2 Q F0 .793
+(is used by shell procedures to parse positional parameters.)3.293 F F2
+(optstring)6.023 E F0 .793(contains the option)3.513 F .15
+(characters to be recognized; if a character is follo)144 655.2 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 667.2 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 .636
+(acters may not be used as option characters.)144 679.2 R .636
+(Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F1(getopts)
+3.136 E F0 .636(places the ne)3.136 F .635(xt op-)-.15 F .029
+(tion in the shell v)144 691.2 R(ariable)-.25 E F2(name)2.889 E F0 2.529
+(,i).18 G(nitializing)-2.529 E F2(name)2.889 E F0 .029(if it does not e)
+2.709 F .03(xist, and the inde)-.15 F 2.53(xo)-.15 G 2.53(ft)-2.53 G .03
+(he ne)-2.53 F .03(xt ar)-.15 F(gu-)-.18 E .066
+(ment to be processed into the v)144 703.2 R(ariable)-.25 E F3(OPTIND)
+2.566 E/F5 9/Times-Roman@0 SF(.)A F3(OPTIND)4.566 E F0 .065
+(is initialized to 1 each time the shell or a)2.315 F .885
+(shell script is in)144 715.2 R -.2(vo)-.4 G -.1(ke).2 G 3.385(d. When)
+.1 F .885(an option requires an ar)3.385 F(gument,)-.18 E F1(getopts)
+3.385 E F0 .885(places that ar)3.385 F .885(gument into)-.18 F .567
+(the v)144 727.2 R(ariable)-.25 E F3(OPT)3.067 E(ARG)-.81 E F5(.)A F0
+.566(The shell does not reset)5.067 F F3(OPTIND)3.066 E F0 .566
+(automatically; it must be manually reset)2.816 F(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(67)185.115 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 .389
+(between multiple calls to)144 84 R/F1 10/Times-Bold@0 SF(getopts)2.889
+E F0 .389(within the same shell in)2.889 F -.2(vo)-.4 G .39
+(cation if a ne).2 F 2.89(ws)-.25 G .39(et of parameters is to)-2.89 F
+(be used.)144 96 Q 2.044(When the end of options is encountered,)144 120
+R F1(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/F2 9/Times-Bold@0 SF(OPTIND)144 132
+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/F3 10/Times-Italic@0
+SF(name)2.5 E F0(is set to ?.)2.5 E F1(getopts)144 156 Q F0 .485
+(normally parses the positional parameters, b)2.985 F .485
+(ut if more ar)-.2 F .485(guments are supplied as)-.18 F F3(ar)3.315 E
+(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 168 Q F1(getopts)2.5 E F0
+(parses those instead.)2.5 E F1(getopts)144 192 Q F0 .345
+(can report errors in tw)2.845 F 2.845(ow)-.1 G 2.845(ays. If)-2.945 F
+.345(the \214rst character of)2.845 F F3(optstring)3.075 E F0 .345
+(is a colon,)3.065 F F3(silent)3.185 E F0 .345(error re-)3.525 F 1.668
+(porting is used.)144 204 R 1.668
+(In normal operation, diagnostic messages are printed when in)6.668 F
+-.25(va)-.4 G 1.669(lid options or).25 F .394(missing option ar)144 216
+R .394(guments are encountered.)-.18 F .394(If the v)5.394 F(ariable)
+-.25 E F2(OPTERR)2.894 E F0 .394(is set to 0, no error messages)2.644 F
+(will be displayed, e)144 228 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5
+G(he \214rst character of)-2.5 E F3(optstring)2.73 E F0(is not a colon.)
+2.72 E .666(If an in)144 252 R -.25(va)-.4 G .666(lid option is seen,)
+.25 F F1(getopts)3.166 E F0 .667(places ? into)3.167 F F3(name)3.527 E
+F0 .667(and, if not silent, prints an error message)3.347 F .4
+(and unsets)144 264 R F2(OPT)2.9 E(ARG)-.81 E/F4 9/Times-Roman@0 SF(.)A
+F0(If)4.899 E F1(getopts)2.899 E F0 .399
+(is silent, the option character found is placed in)2.899 F F2(OPT)2.899
+E(ARG)-.81 E F0 .399(and no)2.649 F(diagnostic message is printed.)144
+276 Q 1.241(If a required ar)144 300 R 1.241(gument is not found, and)
+-.18 F F1(getopts)3.741 E F0 1.241(is not silent, a question mark \()
+3.741 F F1(?).833 E F0 3.742(\)i).833 G 3.742(sp)-3.742 G 1.242
+(laced in)-3.742 F F3(name)144.36 312 Q F0(,).18 E F2(OPT)2.714 E(ARG)
+-.81 E F0 .213(is unset, and a diagnostic message is printed.)2.463 F
+(If)5.213 E F1(getopts)2.713 E F0 .213(is silent, then a colon \()2.713
+F F1(:).833 E F0(\)).833 E(is placed in)144 324 Q F3(name)2.86 E F0(and)
+2.68 E F2(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)
+2.25 E F1(getopts)144 348 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 360 Q F1(hash)108 376.8
+Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1<ad70>-2.5 E F3(\214lename)2.5 E
+F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F3(name)-2.5 E F0(])A .858
+(Each time)144 388.8 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 F3(name)
+3.718 E F0 .858(is determined by searching)3.538 F .956
+(the directories in)144 400.8 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 412.8
+R F1<ad70>2.743 E F0 .243
+(option is supplied, no path search is performed, and)2.743 F F3
+(\214lename)4.653 E F0 .242(is used as the full \214lename)2.923 F .615
+(of the command.)144 424.8 R(The)5.615 E F1<ad72>3.115 E F0 .615
+(option causes the shell to for)3.115 F .615
+(get all remembered locations.)-.18 F(The)5.615 E F1<ad64>3.115 E F0
+(op-)3.115 E .294(tion causes the shell to for)144 436.8 R .294
+(get the remembered location of each)-.18 F F3(name)2.793 E F0 5.293(.I)
+C 2.793(ft)-5.293 G(he)-2.793 E F1<ad74>2.793 E F0 .293
+(option is supplied,)2.793 F .028(the full pathname to which each)144
+448.8 R F3(name)2.528 E F0 .028(corresponds is printed.)2.528 F .028
+(If multiple)5.028 F F3(name)2.528 E F0(ar)2.528 E .028
+(guments are sup-)-.18 F .176(plied with)144 460.8 R F1<ad74>2.676 E F0
+2.676(,t)C(he)-2.676 E F3(name)2.676 E F0 .175
+(is printed before the hashed full pathname.)2.676 F(The)5.175 E F1
+<ad6c>2.675 E F0 .175(option causes output to)2.675 F .783
+(be displayed in a format that may be reused as input.)144 472.8 R .783
+(If no ar)5.783 F .783(guments are gi)-.18 F -.15(ve)-.25 G .783
+(n, or if only).15 F F1<ad6c>3.283 E F0(is)3.283 E .807
+(supplied, information about remembered commands is printed.)144 484.8 R
+.807(The return status is true unless a)5.807 F F3(name)144.36 496.8 Q
+F0(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.)
+.25 E F1(help)108 513.6 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F3
+(pattern)-2.5 E F0(])A .866(Display helpful information about b)144
+525.6 R .867(uiltin commands.)-.2 F(If)5.867 E F3(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 .224(help on all commands matching)144
+537.6 R F3(pattern)3.974 E F0 2.723(;o).24 G .223
+(therwise help for all the b)-2.723 F .223
+(uiltins and shell control struc-)-.2 F(tures is printed.)144 549.6 Q F1
+<ad64>144 561.6 Q F0(Display a short description of each)180 561.6 Q F3
+(pattern)2.5 E F1<ad6d>144 573.6 Q F0(Display the description of each)
+180 573.6 Q F3(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G
+(ormat)-2.5 E F1<ad73>144 585.6 Q F0
+(Display only a short usage synopsis for each)180 585.6 Q F3(pattern)2.5
+E F0(The return status is 0 unless no command matches)144 602.4 Q F3
+(pattern)3.75 E F0(.).24 E F1(history [)108 619.2 Q F3(n)A F1(])A
+(history \255c)108 631.2 Q(history \255d)108 643.2 Q F3(of)2.5 E(fset)
+-.18 E F1(history \255d)108 655.2 Q F3(start)2.5 E F0<ad>A F3(end)A F1
+(history \255anrw)108 667.2 Q F0([)2.5 E F3(\214lename)A F0(])A F1
+(history \255p)108 679.2 Q F3(ar)2.5 E(g)-.37 E F0([)2.5 E F3(ar)A 2.5
+(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 691.2 Q F3(ar)2.5 E(g)
+-.37 E F0([)2.5 E F3(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)144
+703.2 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 715.2 R .38(An ar)5.38 F .38(gument of)-.18
+F F3(n)3.24 E F0 .38(lists only the last)3.12 F F3(n)3.24 E F0 2.88
+(lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E F2(HISTTIMEFOR-)
+2.88 E(MA)144 727.2 Q(T)-.855 E F0 1.491
+(is set and not null, it is used as a format string for)3.741 F F3
+(strftime)3.992 E F0 1.492(\(3\) to display the time stamp)B
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(68)185.115 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 .379
+(associated with each displayed history entry)144 84 R 5.379(.N)-.65 G
+2.878(oi)-5.379 G(nterv)-2.878 E .378
+(ening blank is printed between the format-)-.15 F .814
+(ted time stamp and the history line.)144 96 R(If)5.814 E/F1 10
+/Times-Italic@0 SF(\214lename)3.314 E F0 .814
+(is supplied, it is used as the name of the history)3.314 F
+(\214le; if not, the v)144 108 Q(alue of)-.25 E/F2 9/Times-Bold@0 SF
+(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/F3 10/Times-Bold@0 SF
+<ad63>144 120 Q F0(Clear the history list by deleting all the entries.)
+180 120 Q F3<ad64>144 132 Q F1(of)2.5 E(fset)-.18 E F0 .39
+(Delete the history entry at position)180 144 R F1(of)2.889 E(fset)-.18
+E F0 5.389(.I)C(f)-5.389 E F1(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 156 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 168 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 F3(history -d)2.5 E F0(command.)2.5 E F3
+<ad64>144 180 Q F1(start)2.5 E F0<ad>A F1(end)A F0 1.25
+(Delete the range of history entries between positions)180 192 R F1
+(start)3.75 E F0(and)3.75 E F1(end)3.75 E F0 3.75(,i)C(nclusi)-3.75 E
+-.15(ve)-.25 G 6.25(.P).15 G(ositi)-6.25 E -.15(ve)-.25 G(and ne)180 204
+Q -.05(ga)-.15 G(ti).05 E .3 -.15(ve v)-.25 H(alues for)-.1 E F1(start)
+2.5 E F0(and)2.5 E F1(end)2.5 E F0(are interpreted as described abo)2.5
+E -.15(ve)-.15 G(.).15 E F3<ad61>144 216 Q F0 .564(Append the `)180 216
+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 228 Q
+(ginning of the current)-.15 E F3(bash)2.5 E F0(session, b)2.5 E
+(ut not already appended to the history \214le.)-.2 E F3<ad6e>144 240 Q
+F0 .854(Read the history lines not already read from the history \214le\
+ into the current history list.)180 240 R .772
+(These are lines appended to the history \214le since the be)180 252 R
+.773(ginning of the current)-.15 F F3(bash)3.273 E F0(ses-)3.273 E
+(sion.)180 264 Q F3<ad72>144 276 Q F0(Read the contents of the history \
+\214le and append them to the current history list.)180 276 Q F3<ad77>
+144 288 Q F0(Write the current history list to the history \214le, o)180
+288 Q -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G
+(ontents.)-2.5 E F3<ad70>144 300 Q F0 .626
+(Perform history substitution on the follo)180 300 R(wing)-.25 E F1(ar)
+3.125 E(gs)-.37 E F0 .625(and display the result on the standard)3.125 F
+2.975(output. Does)180 312 R .475
+(not store the results in the history list.)2.975 F(Each)5.475 E F1(ar)
+2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F
+(normal history e)180 324 Q(xpansion.)-.15 E F3<ad73>144 336 Q F0 .363
+(Store the)180 336 R F1(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 348 Q -.15(ve)
+-.15 G 2.5(db).15 G(efore the)-2.5 E F1(ar)2.83 E(gs)-.37 E F0
+(are added.)2.77 E .145(If the)144 364.8 R F2(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 376.8 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 388.8 R .956
+(ginning with the history comment character follo)-.15 F .956
+(wed immediately by a digit)-.25 F .833
+(are interpreted as timestamps for the follo)144 400.8 R .833
+(wing history entry)-.25 F 5.832(.T)-.65 G .832(he return v)-5.832 F
+.832(alue is 0 unless an in-)-.25 F -.25(va)144 412.8 S .168(lid option\
+ is encountered, an error occurs while reading or writing the history \
+\214le, an in).25 F -.25(va)-.4 G(lid).25 E F1(of)2.669 E(f-)-.18 E(set)
+144 424.8 Q F0 .341(or range is supplied as an ar)2.841 F .341
+(gument to)-.18 F F3<ad64>2.841 E F0 2.841(,o)C 2.84(rt)-2.841 G .34
+(he history e)-2.84 F .34(xpansion supplied as an ar)-.15 F .34
+(gument to)-.18 F F3<ad70>144 436.8 Q F0 -.1(fa)2.5 G(ils.).1 E F3(jobs)
+108 453.6 Q F0([)2.5 E F3(\255lnprs)A F0 2.5(][)C F1(jobspec)A F0(... ])
+2.5 E F3(jobs \255x)108 465.6 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 477.6 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 F3<ad6c>144 489.6 Q F0
+(List process IDs in addition to the normal information.)180 489.6 Q F3
+<ad6e>144 501.6 Q F0 .193(Display information only about jobs that ha)
+180 501.6 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 513.6 Q F3<ad70>
+144 525.6 Q F0(List only the process ID of the job')180 525.6 Q 2.5(sp)
+-.55 G(rocess group leader)-2.5 E(.)-.55 E F3<ad72>144 537.6 Q F0
+(Display only running jobs.)180 537.6 Q F3<ad73>144 549.6 Q F0
+(Display only stopped jobs.)180 549.6 Q(If)144 566.4 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 578.4 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 595.2 R F3
+<ad78>2.894 E F0 .394(option is supplied,)2.894 F F3(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 607.2 Q
+-.15(xe)-.15 G(cutes).15 E F1(command)2.7 E F0(passing it)3.27 E F1(ar)
+2.83 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15
+E F3(kill)108 624 Q F0([)2.5 E F3<ad73>A F1(sigspec)2.5 E F0(|)2.5 E F3
+<ad6e>2.5 E F1(signum)2.5 E F0(|)2.5 E F3<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 F3
+(kill \255l)108 636 Q F0(|)A F3<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 .017(Send the signal named by)
+144 648 R F1(sigspec)2.857 E F0(or)2.827 E F1(signum)2.857 E F0 .017
+(to the processes named by)2.837 F F1(pid)3.767 E F0(or)3.287 E F1
+(jobspec)4.257 E F0(.).31 E F1(sigspec)5.357 E F0(is)2.827 E .318
+(either a case-insensiti)144 660 R .618 -.15(ve s)-.25 H .318
+(ignal name such as).15 F F2(SIGKILL)2.818 E F0 .319
+(\(with or without the)2.569 F F2(SIG)2.819 E F0 .319
+(pre\214x\) or a signal)2.569 F(number;)144 672 Q F1(signum)3.268 E F0
+.427(is a signal number)3.247 F 5.427(.I)-.55 G(f)-5.427 E F1(sigspec)
+3.267 E F0 .427(is not present, then)3.237 F F2(SIGTERM)2.927 E F0 .427
+(is assumed.)2.677 F .427(An ar)5.427 F(-)-.2 E .313(gument of)144 684 R
+F3<ad6c>2.813 E F0 .314(lists the signal names.)2.814 F .314(If an)5.314
+F 2.814(ya)-.15 G -.18(rg)-2.814 G .314(uments are supplied when).18 F
+F3<ad6c>2.814 E F0 .314(is gi)2.814 F -.15(ve)-.25 G .314
+(n, the names of).15 F .12(the signals corresponding to the ar)144 696 R
+.119(guments are listed, and the return status is 0.)-.18 F(The)5.119 E
+F1 -.2(ex)2.619 G(it_status).2 E F0(ar)2.619 E(-)-.2 E .799(gument to)
+144 708 R F3<ad6c>3.299 E F0 .799
+(is a number specifying either a signal number or the e)3.299 F .8
+(xit status of a process termi-)-.15 F .963(nated by a signal.)144 720 R
+(The)5.962 E F3<ad4c>3.462 E F0 .962(option is equi)3.462 F -.25(va)-.25
+G .962(lent to).25 F F3<ad6c>3.462 E F0(.)A F3(kill)5.962 E F0 .962
+(returns true if at least one signal w)3.462 F(as)-.1 E(GNU Bash 5.2)72
+768 Q(2022 September 19)135.955 E(69)185.115 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
+(successfully sent, or f)144 84 Q(alse if an error occurs or an in)-.1 E
+-.25(va)-.4 G(lid option is encountered.).25 E/F1 10/Times-Bold@0 SF
+(let)108 100.8 Q/F2 10/Times-Italic@0 SF(ar)2.5 E(g)-.37 E F0([)2.5 E F2
+(ar)A(g)-.37 E F0(...])2.5 E(Each)144 112.8 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 9/Times-Bold@0 SF .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 124.8 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 141.6 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 153.6 S 2.542(re).15 G .042(ach ar)
+-2.542 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F F2
+(name)2.902 E F0 .042(is created, and assigned)2.722 F F2(value)2.832 E
+F0 5.042(.T).18 G(he)-5.042 E F2(option)2.542 E F0 .041(can be)2.541 F
+(an)144 165.6 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
+177.6 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 .509
+(of shell options is made local to the function in which)144 189.6 R F1
+(local)3.01 E F0 .51(is in)3.01 F -.2(vo)-.4 G -.1(ke).2 G .51
+(d: shell options changed us-).1 F 1.171(ing the)144 201.6 R F1(set)
+3.671 E F0 -.2(bu)3.671 G 1.171
+(iltin inside the function are restored to their original v).2 F 1.17
+(alues when the function re-)-.25 F 3.38(turns. The)144 213.6 R .88
+(restore is ef)3.38 F .88(fected as if a series of)-.25 F F1(set)3.381 E
+F0 .881(commands were e)3.381 F -.15(xe)-.15 G .881
+(cuted to restore the v).15 F(alues)-.25 E .788
+(that were in place before the function.)144 225.6 R -.4(Wi)5.788 G .788
+(th no operands,).4 F F1(local)3.288 E F0 .787(writes a list of local v)
+3.288 F .787(ariables to)-.25 F .654(the standard output.)144 237.6 R
+.654(It is an error to use)5.654 F F1(local)3.154 E F0 .654
+(when not within a function.)3.154 F .655(The return status is 0)5.654 F
+(unless)144 249.6 Q F1(local)2.5 E F0(is used outside a function, an in)
+2.5 E -.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
+266.4 Q F0(Exit a login shell.)144 266.4 Q F1(map\214le)108 283.2 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 295.2 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 .159(Read lines from the standard input into the inde)144 307.2 R
+-.15(xe)-.15 G 2.659(da).15 G .159(rray v)-2.659 F(ariable)-.25 E F2
+(arr)2.989 E(ay)-.15 E F0 2.659(,o).32 G 2.658(rf)-2.659 G .158
+(rom \214le descriptor)-2.658 F F2(fd)4.628 E F0 1.248(if the)144 319.2
+R F1<ad75>3.748 E F0 1.248(option is supplied.)3.748 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.749 E(ay)-.15 E F0 6.249(.O)C 1.249(ptions, if supplied,)
+-6.249 F(ha)144 331.2 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad64>144 343.2 Q F0 .911
+(The \214rst character of)180 343.2 R F2(delim)3.411 E F0 .911
+(is used to terminate each input line, rather than ne)3.411 F 3.41
+(wline. If)-.25 F F2(delim)180 355.2 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 367.2 Q F0(Cop)180 367.2 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 379.2 Q F0(Be)180
+379.2 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.73 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 391.2 Q F0
+(Discard the \214rst)180 391.2 Q F2(count)2.5 E F0(lines read.)2.5 E F1
+<ad74>144 403.2 Q F0(Remo)180 403.2 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 415.2 Q F0
+(Read lines from \214le descriptor)180 415.2 Q F2(fd)2.5 E F0
+(instead of the standard input.)2.5 E F1<ad43>144 427.2 Q F0(Ev)180
+427.2 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.75 E F0(.).32 E F1<ad63>144 439.2
+Q F0(Specify the number of lines read between each call to)180 439.2 Q
+F2(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 456 Q F1<ad43>2.967 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 .262(plied the inde)144 468 R 2.762(xo)-.15 G
+2.762(ft)-2.762 G .262(he ne)-2.762 F .261(xt array element to be assig\
+ned and the line to be assigned to that element)-.15 F .274
+(as additional ar)144 480 R(guments.)-.18 E F2(callbac)5.274 E(k)-.2 E
+F0 .274(is e)2.774 F -.25(va)-.25 G .274
+(luated after the line is read b).25 F .275
+(ut before the array element is)-.2 F(assigned.)144 492 Q
+(If not supplied with an e)144 508.8 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 525.6 Q F0 .797
+(returns successfully unless an in)3.298 F -.25(va)-.4 G .797
+(lid option or option ar).25 F .797(gument is supplied,)-.18 F F2(arr)
+3.297 E(ay)-.15 E F0 .797(is in-)3.297 F -.25(va)144 537.6 S
+(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 554.4 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 566.4 Q -.15(ve)-.15 G 3.091
+(se).15 G .591(ntries from the directory stack.)-3.091 F .592
+(The elements are numbered from 0 starting at the \214rst)5.591 F .665
+(directory listed by)144 578.4 R F1(dirs)3.165 E F0 5.665(.W)C .665
+(ith no ar)-6.065 F(guments,)-.18 E F1(popd)3.165 E F0(remo)3.165 E -.15
+(ve)-.15 G 3.165(st).15 G .664(he top directory from the stack, and)
+-3.165 F(changes to the ne)144 590.4 Q 2.5(wt)-.25 G(op directory)-2.5 E
+5(.A)-.65 G -.18(rg)-5 G(uments, if supplied, ha).18 E .3 -.15(ve t)-.2
+H(he follo).15 E(wing meanings:)-.25 E F1<ad6e>144 602.4 Q F0 .551
+(Suppresses the normal change of directory when remo)180 602.4 R .551
+(ving directories from the stack, so)-.15 F
+(that only the stack is manipulated.)180 614.4 Q F1(+)144 626.4 Q F2(n)A
+F0(Remo)180 626.4 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 .779
+(from the stack.)180 638.4 R -.15(Fo)5.779 G 3.279(re).15 G(xample:)
+-3.429 E/F4 10/Courier@0 SF .779(popd +0)3.279 F F0(remo)3.279 E -.15
+(ve)-.15 G 3.279(st).15 G .779(he \214rst directory)-3.279 F(,)-.65 E F4
+.78(popd +1)3.28 F F0 .78(the sec-)3.28 F(ond.)180 650.4 Q F1<ad>144
+662.4 Q F2(n)A F0(Remo)180 662.4 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 674.4 R(or e)-.15 E(xample:)-.15 E F4(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 F4(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .093
+(If the top element of the directory stack is modi\214ed, and the)144
+691.2 R F2(-n)2.593 E F0 .094(option w)2.594 F .094(as not supplied,)-.1
+F F1(popd)2.594 E F0(uses)2.594 E(the)144 703.2 Q F1(cd)2.697 E F0 -.2
+(bu)2.697 G .196
+(iltin to change to the directory at the top of the stack.).2 F .196
+(If the)5.196 F F1(cd)2.696 E F0 -.1(fa)2.696 G(ils,).1 E F1(popd)2.696
+E F0 .196(returns a non-)2.696 F(zero v)144 715.2 Q(alue.)-.25 E
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(70)185.115 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(Otherwise,)144 84
+Q/F1 10/Times-Bold@0 SF(popd)2.67 E F0 .17(returns f)2.67 F .17
+(alse if an in)-.1 F -.25(va)-.4 G .171
+(lid option is encountered, the directory stack is empty).25 F 2.671(,o)
+-.65 G 2.671(ra)-2.671 G(non-e)144 96 Q
+(xistent directory stack entry is speci\214ed.)-.15 E 1.556(If the)144
+112.8 R F1(popd)4.056 E F0 1.556(command is successful, bash runs)4.056
+F F1(dirs)4.056 E F0 1.556(to sho)4.056 F 4.055(wt)-.25 G 1.555
+(he \214nal contents of the directory)-4.055 F
+(stack, and the return status is 0.)144 124.8 Q F1(printf)108 141.6 Q F0
+([)2.5 E F1<ad76>A/F2 10/Times-Italic@0 SF(var)2.5 E F0(])A F2(format)
+2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A .357(Write the formatted)
+144 153.6 R F2(ar)2.857 E(guments)-.37 E F0 .357
+(to the standard output under the control of the)2.857 F F2(format)2.858
+E F0 5.358(.T)C(he)-5.358 E F1<ad76>2.858 E F0(op-)2.858 E .714
+(tion causes the output to be assigned to the v)144 165.6 R(ariable)-.25
+E F2(var)3.214 E F0 .714(rather than being printed to the standard)3.214
+F(output.)144 177.6 Q(The)144 201.6 Q F2(format)3.017 E F0 .517(is a ch\
+aracter string which contains three types of objects: plain characters,\
+ which are)3.017 F .704(simply copied to standard output, character esc\
+ape sequences, which are con)144 213.6 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 225.6 R .037
+(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 237.6 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 249.6 Q
+(xtensions:)-.15 E F1(%b)144 261.6 Q F0(causes)180 261.6 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 273.6 Q(ay as)
+-.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 285.6 Q F0(causes)180 285.6 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 297.6 Q F1(%Q)144 309.6 Q F0(lik)180 309.6 Q(e)-.1 E F1(%q)
+2.5 E F0 2.5(,b)C(ut applies an)-2.7 E 2.5(ys)-.15 G
+(upplied precision to the)-2.5 E F2(ar)2.5 E(gument)-.37 E F0
+(before quoting it.)2.5 E F1(%\()144 321.6 Q F2(datefmt)A F1(\)T)A F0
+(causes)180 333.6 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 345.6 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
+357.6 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 369.6 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 381.6 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 393.6 Q(vior)-.2 E(.)-.55 E .902
+(The %b, %q, and %T directi)144 410.4 R -.15(ve)-.25 G 3.401(sa).15 G
+.901(ll use the \214eld width and precision ar)-3.401 F .901
+(guments from the format)-.18 F .357(speci\214cation and write that man)
+144 422.4 R 2.857(yb)-.15 G .358
+(ytes from \(or use that wide a \214eld for\) the e)-2.857 F .358
+(xpanded ar)-.15 F(gument,)-.18 E
+(which usually contains more characters than the original.)144 434.4 Q
+(Ar)144 451.2 Q .464(guments to non-string format speci\214ers are trea\
+ted as C constants, e)-.18 F .463(xcept that a leading plus or)-.15 F
+1.258(minus sign is allo)144 463.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 475.2 Q(alue of the follo)
+-.25 E(wing character)-.25 E(.)-.55 E(The)144 492 Q F2(format)2.515 E F0
+.015(is reused as necessary to consume all of the)2.515 F F2(ar)2.515 E
+(guments)-.37 E F0 5.015(.I)C 2.514(ft)-5.015 G(he)-2.514 E F2(format)
+2.514 E F0 .014(requires more)2.514 F F2(ar)2.514 E(-)-.2 E(guments)144
+504 Q F0 .565(than are supplied, the e)3.065 F .566
+(xtra format speci\214cations beha)-.15 F .866 -.15(ve a)-.2 H 3.066(si)
+.15 G 3.066(faz)-3.066 G .566(ero v)-3.066 F .566(alue or null string,)
+-.25 F(as appropriate, had been supplied.)144 516 Q(The return v)5 E
+(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd)
+108 532.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 544.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 556.8 R 3.139(wt)
+-.25 G .639(op of the)-3.139 F .088(stack the current w)144 568.8 R .088
+(orking directory)-.1 F 5.088(.W)-.65 G .088(ith no ar)-5.488 F
+(guments,)-.18 E F1(pushd)2.589 E F0 -.15(ex)2.589 G .089
+(changes the top tw).15 F 2.589(oe)-.1 G .089(lements of)-2.589 F
+(the directory stack.)144 580.8 Q(Ar)5 E(guments, if supplied, ha)-.18 E
+.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad6e>144
+592.8 Q F0 1.811(Suppresses the normal change of directory when rotatin\
+g or adding directories to the)180 592.8 R
+(stack, so that only the stack is manipulated.)180 604.8 Q F1(+)144
+616.8 Q F2(n)A F0 1.267(Rotates the stack so that the)180 616.8 R F2(n)
+3.767 E F0 1.268(th directory \(counting from the left of the list sho)B
+1.268(wn by)-.25 F F1(dirs)180 628.8 Q F0 2.5(,s)C
+(tarting with zero\) is at the top.)-2.5 E F1<ad>144 640.8 Q F2(n)A F0
+.92(Rotates the stack so that the)180 640.8 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 652.8 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
+-2.5 E F2(dir)144.35 664.8 Q F0(Adds)180 664.8 Q F2(dir)2.85 E F0
+(to the directory stack at the top)3.23 E .434
+(After the stack has been modi\214ed, if the)144 681.6 R F1<ad6e>2.934 E
+F0 .434(option w)2.934 F .435(as not supplied,)-.1 F F1(pushd)2.935 E F0
+.435(uses the)2.935 F F1(cd)2.935 E F0 -.2(bu)2.935 G .435(iltin to).2 F
+(change to the directory at the top of the stack.)144 693.6 Q(If the)5 E
+F1(cd)2.5 E F0 -.1(fa)2.5 G(ils,).1 E F1(pushd)2.5 E F0
+(returns a non-zero v)2.5 E(alue.)-.25 E 1.78(Otherwise, if no ar)144
+710.4 R 1.78(guments are supplied,)-.18 F F1(pushd)4.28 E F0 1.78
+(returns 0 unless the directory stack is empty)4.28 F(.)-.65 E .881
+(When rotating the directory stack,)144 722.4 R F1(pushd)3.381 E F0 .881
+(returns 0 unless the directory stack is empty or a non-)3.381 F
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(71)185.115 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 -.15(ex)144 84 S
+(istent directory stack element is speci\214ed.).15 E 1.278(If the)144
+100.8 R/F1 10/Times-Bold@0 SF(pushd)3.778 E F0 1.278
+(command is successful, bash runs)3.778 F F1(dirs)3.778 E F0 1.277
+(to sho)3.777 F 3.777(wt)-.25 G 1.277
+(he \214nal contents of the directory)-3.777 F(stack.)144 112.8 Q F1
+(pwd)108 129.6 Q F0([)2.5 E F1(\255LP)A F0(])A .844
+(Print the absolute pathname of the current w)144 141.6 R .845
+(orking directory)-.1 F 5.845(.T)-.65 G .845
+(he pathname printed contains no)-5.845 F .182(symbolic links if the)144
+153.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 .181(iltin command is).2 F 3.263
+(enabled. If)144 165.6 R(the)3.263 E F1<ad4c>3.263 E F0 .763
+(option is used, the pathname printed may contain symbolic links.)3.263
+F .764(The return)5.764 F .405(status is 0 unless an error occurs while\
+ reading the name of the current directory or an in)144 177.6 R -.25(va)
+-.4 G .405(lid op-).25 F(tion is supplied.)144 189.6 Q F1 -.18(re)108
+206.4 S(ad).18 E F0([)3.816 E F1(\255ers)A F0 3.816(][)C F1<ad61>-3.816
+E/F2 10/Times-Italic@0 SF(aname)3.816 E F0 3.816(][)C F1<ad64>-3.816 E
+F2(delim)3.816 E F0 3.816(][)C F1<ad69>-3.816 E F2(te)3.816 E(xt)-.2 E
+F0 3.816(][)C F1<ad6e>-3.816 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.817
+(][)C F1<ad4e>-3.817 E F2(nc)3.817 E(har)-.15 E(s)-.1 E F0 3.817(][)C F1
+<ad70>-3.817 E F2(pr)3.817 E(ompt)-.45 E F0 3.817(][)C F1<ad74>-3.817 E
+F2(timeout)3.817 E F0 3.817(][)C F1<ad75>-3.817 E F2(fd)3.817 E F0(])A
+([)108 218.4 Q F2(name)A F0(...])2.5 E .516(One line is read from the s\
+tandard input, or from the \214le descriptor)144 230.4 R F2(fd)3.016 E
+F0 .516(supplied as an ar)3.016 F .516(gument to)-.18 F(the)144 242.4 Q
+F1<ad75>2.935 E F0 .435(option, split into w)2.935 F .435
+(ords as described abo)-.1 F .735 -.15(ve u)-.15 H(nder).15 E F1 -.75
+(Wo)2.935 G .435(rd Splitting).75 F F0 2.935(,a)C .436(nd the \214rst w)
+-2.935 F .436(ord is as-)-.1 F .376(signed to the \214rst)144 254.4 R F2
+(name)3.236 E F0 2.876(,t).18 G .376(he second w)-2.876 F .376
+(ord to the second)-.1 F F2(name)3.236 E F0 2.876(,a).18 G .376
+(nd so on.)-2.876 F .375(If there are more w)5.376 F(ords)-.1 E .236
+(than names, the remaining w)144 266.4 R .237(ords and their interv)-.1
+F .237(ening delimiters are assigned to the last)-.15 F F2(name)3.097 E
+F0 5.237(.I).18 G(f)-5.237 E .875(there are fe)144 278.4 R .875(wer w)
+-.25 F .875(ords read from the input stream than names, the remaining n\
+ames are assigned)-.1 F .517(empty v)144 290.4 R 3.017(alues. The)-.25 F
+.517(characters in)3.017 F/F3 9/Times-Bold@0 SF(IFS)3.017 E F0 .518
+(are used to split the line into w)2.767 F .518
+(ords using the same rules the)-.1 F .027(shell uses for e)144 302.4 R
+.026(xpansion \(described abo)-.15 F .326 -.15(ve u)-.15 H(nder).15 E F1
+-.75(Wo)2.526 G .026(rd Splitting).75 F F0 2.526(\). The)B .026
+(backslash character \()2.526 F F1(\\)A F0 2.526(\)m)C(ay)-2.526 E .488
+(be used to remo)144 314.4 R .788 -.15(ve a)-.15 H .788 -.15(ny s).15 H
+.488(pecial meaning for the ne).15 F .488
+(xt character read and for line continuation.)-.15 F(Op-)5.489 E
+(tions, if supplied, ha)144 326.4 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad61>144 338.4 Q F2(aname)2.5 E F0 1.026
+(The w)180 350.4 R 1.026
+(ords are assigned to sequential indices of the array v)-.1 F(ariable)
+-.25 E F2(aname)3.855 E F0 3.525(,s).18 G 1.025(tarting at 0.)-3.525 F
+F2(aname)180.33 362.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 374.4 Q F2(delim)2.5 E
+F0 .28(The \214rst character of)180 386.4 R F2(delim)2.78 E F0 .281
+(is used to terminate the input line, rather than ne)2.78 F 2.781
+(wline. If)-.25 F F2(de-)2.781 E(lim)180 398.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 410.4 Q F0 .373
+(If the standard input is coming from a terminal,)180 410.4 R F1 -.18
+(re)2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.872 E F0(abo)
+2.622 E -.15(ve)-.15 G 2.872(\)i).15 G 2.872(su)-2.872 G(sed)-2.872 E
+.218(to obtain the line.)180 422.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 434.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 446.4 Q F2(te)2.5 E(xt)
+-.2 E F0(If)180 446.4 Q F1 -.18(re)2.716 G(adline).18 E F0 .216
+(is being used to read the line,)2.716 F F2(te)2.716 E(xt)-.2 E F0 .216
+(is placed into the editing b)2.716 F(uf)-.2 E .215(fer before edit-)
+-.25 F(ing be)180 458.4 Q(gins.)-.15 E F1<ad6e>144 470.4 Q F2(nc)2.5 E
+(har)-.15 E(s)-.1 E F1 -.18(re)180 482.4 S(ad).18 E F0 .322
+(returns after reading)2.822 F F2(nc)2.823 E(har)-.15 E(s)-.1 E F0 .323
+(characters rather than w)2.823 F .323
+(aiting for a complete line of in-)-.1 F(put, b)180 494.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 506.4 Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 518.4 S
+(ad).18 E F0 1.269(returns after reading e)3.77 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.269(aiting for a complete)-.1 F .274
+(line of input, unless EOF is encountered or)180 530.4 R F1 -.18(re)
+2.775 G(ad).18 E F0 .275(times out.)2.775 F .275
+(Delimiter characters encoun-)5.275 F 1.003
+(tered in the input are not treated specially and do not cause)180 542.4
+R F1 -.18(re)3.502 G(ad).18 E F0 1.002(to return until)3.502 F F2(nc)
+3.502 E(har)-.15 E(s)-.1 E F0 .608(characters are read.)180 554.4 R .608
+(The result is not split on the characters in)5.608 F F1(IFS)3.108 E F0
+3.108(;t)C .609(he intent is that the)-3.108 F -.25(va)180 566.4 S .67
+(riable is assigned e).25 F .669
+(xactly the characters read \(with the e)-.15 F .669
+(xception of backslash; see the)-.15 F F1<ad72>180 578.4 Q F0
+(option belo)2.5 E(w\).)-.25 E F1<ad70>144 590.4 Q F2(pr)2.5 E(ompt)-.45
+E F0(Display)180 602.4 Q F2(pr)3.66 E(ompt)-.45 E F0 1.161
+(on standard error)3.66 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 614.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 626.4 Q F0 .544(Backslash does not act as an escape character)
+180 626.4 R 5.543(.T)-.55 G .543
+(he backslash is considered to be part of)-5.543 F .492(the line.)180
+638.4 R .492(In particular)5.492 F 2.992(,ab)-.4 G(ackslash-ne)-2.992 E
+.493(wline pair may not then be used as a line continua-)-.25 F(tion.)
+180 650.4 Q F1<ad73>144 662.4 Q F0(Silent mode.)180 662.4 Q
+(If input is coming from a terminal, characters are not echoed.)5 E F1
+<ad74>144 674.4 Q F2(timeout)2.5 E F0(Cause)180 686.4 Q F1 -.18(re)2.929
+G(ad).18 E F0 .428(to time out and return f)2.929 F .428
+(ailure if a complete line of input \(or a speci\214ed num-)-.1 F .56
+(ber of characters\) is not read within)180 698.4 R F2(timeout)3.061 E
+F0(seconds.)3.061 E F2(timeout)5.561 E F0 .561(may be a decimal number)
+3.061 F(with a fractional portion follo)180 710.4 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
+722.4 R .506(fect when reading)-.25 F(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(72)185.115 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 .59(from re)180 84
+R .59(gular \214les.)-.15 F(If)5.59 E/F1 10/Times-Bold@0 SF -.18(re)3.09
+G(ad).18 E F0 .589(times out,)3.09 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 .589
+(artial input read into the speci\214ed).15 F -.25(va)180 96 S(riable)
+.25 E/F2 10/Times-Italic@0 SF(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 .228(The e)180 108 R .228
+(xit status is 0 if input is a)-.15 F -.25(va)-.2 G .228
+(ilable on the speci\214ed \214le descriptor).25 F 2.728(,o)-.4 G 2.727
+(rt)-2.728 G .227(he read will re-)-2.727 F 1.224(turn EOF)180 120 R
+3.724(,n)-.8 G 1.224(on-zero otherwise.)-3.724 F 1.224(The e)6.224 F
+1.225(xit status is greater than 128 if the timeout is e)-.15 F(x-)-.15
+E(ceeded.)180 132 Q F1<ad75>144 144 Q F2(fd)2.5 E F0
+(Read input from \214le descriptor)180 144 Q F2(fd)2.5 E F0(.)A .522
+(If no)144 160.8 R F2(names)3.382 E F0 .522
+(are supplied, the line read, without the ending delimiter b)3.292 F
+.522(ut otherwise unmodi\214ed, is)-.2 F 1.186(assigned to the v)144
+172.8 R(ariable)-.25 E/F3 9/Times-Bold@0 SF(REPL)3.686 E(Y)-.828 E/F4 9
+/Times-Roman@0 SF(.)A F0 1.186(The e)5.686 F 1.186
+(xit status is zero, unless end-of-\214le is encountered,)-.15 F F1 -.18
+(re)3.687 G(ad).18 E F0 .961
+(times out \(in which case the status is greater than 128\), a v)144
+184.8 R .96(ariable assignment error \(such as as-)-.25 F .706
+(signing to a readonly v)144 196.8 R .706(ariable\) occurs, or an in)
+-.25 F -.25(va)-.4 G .706(lid \214le descriptor is supplied as the ar)
+.25 F .707(gument to)-.18 F F1<ad75>144 208.8 Q F0(.)A F1 -.18(re)108
+225.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 237.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.096
+(quent assignment.)144 249.6 R 1.096(If the)6.096 F F1<ad66>3.596 E F0
+1.097(option is supplied, the functions corresponding to the)3.596 F F2
+(names)3.597 E F0 1.097(are so)3.597 F(mark)144 261.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 .776(ables to associati)144 273.6 R 1.076 -.15(ve a)-.25 H 3.276
+(rrays. If).15 F .777(both options are supplied,)3.276 F F1<ad41>3.277 E
+F0(tak)3.277 E .777(es precedence.)-.1 F .777(If no)5.777 F F2(name)
+3.637 E F0(ar)3.457 E(gu-)-.18 E .522(ments are gi)144 285.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
+.521(The other)5.521 F .295(options may be used to restrict the output \
+to a subset of the set of readonly names.)144 297.6 R(The)5.296 E F1
+<ad70>2.796 E F0(option)2.796 E .786
+(causes output to be displayed in a format that may be reused as input.)
+144 309.6 R .786(If a v)5.786 F .785(ariable name is fol-)-.25 F(lo)144
+321.6 Q .717(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 333.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 345.6 Q F0
+(that is not a function.)2.68 E F1 -.18(re)108 362.4 S(tur).18 E(n)-.15
+E F0([)2.5 E F2(n)A F0(])A .02(Causes a function to stop e)144 374.4 R
+-.15(xe)-.15 G .02(cuting and return the v).15 F .021
+(alue speci\214ed by)-.25 F F2(n)2.881 E F0 .021(to its caller)2.761 F
+5.021(.I)-.55 G(f)-5.021 E F2(n)2.881 E F0 .021(is omitted,)2.761 F .597
+(the return status is that of the last command e)144 386.4 R -.15(xe)
+-.15 G .596(cuted in the function body).15 F 5.596(.I)-.65 G(f)-5.596 E
+F1 -.18(re)3.096 G(tur).18 E(n)-.15 E F0 .596(is e)3.096 F -.15(xe)-.15
+G(cuted).15 E .267(by a trap handler)144 398.4 R 2.767(,t)-.4 G .267
+(he last command used to determine the status is the last command e)
+-2.767 F -.15(xe)-.15 G .268(cuted be-).15 F .02(fore the trap handler)
+144 410.4 R 5.02(.I)-.55 G(f)-5.02 E F1 -.18(re)2.52 G(tur).18 E(n)-.15
+E F0 .02(is e)2.52 F -.15(xe)-.15 G .02(cuted during a).15 F F1(DEB)2.52
+E(UG)-.1 E F0 .02(trap, the last command used to deter)2.52 F(-)-.2 E
+.885(mine the status is the last command e)144 422.4 R -.15(xe)-.15 G
+.886(cuted by the trap handler before).15 F F1 -.18(re)3.386 G(tur).18 E
+(n)-.15 E F0 -.1(wa)3.386 G 3.386(si).1 G -1.9 -.4(nv o)-3.386 H -.1(ke)
+.4 G 3.386(d. If).1 F F1 -.18(re)144 434.4 S(tur).18 E(n)-.15 E F0 .628
+(is used outside a function, b)3.128 F .628(ut during e)-.2 F -.15(xe)
+-.15 G .628(cution of a script by the).15 F F1(.)3.127 E F0(\()5.627 E
+F1(sour)A(ce)-.18 E F0 3.127(\)c)C .627(ommand, it)-3.127 F .588
+(causes the shell to stop e)144 446.4 R -.15(xe)-.15 G .588
+(cuting that script and return either).15 F F2(n)3.448 E F0 .589
+(or the e)3.329 F .589(xit status of the last com-)-.15 F .326(mand e)
+144 458.4 R -.15(xe)-.15 G .326(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 .325
+(is supplied, the return v)2.826 F .325(alue is)-.25 F .444
+(its least signi\214cant 8 bits.)144 470.4 R .444
+(The return status is non-zero if)5.444 F F1 -.18(re)2.945 G(tur).18 E
+(n)-.15 E F0 .445(is supplied a non-numeric ar)2.945 F(gu-)-.18 E .381
+(ment, or is used outside a function and not during e)144 482.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.38(.A)C .68 -.15(ny c)-5.38 H(om-).15 E
+.749(mand associated with the)144 494.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 .75(cution resumes after the function).15 F(or script.)144 506.4 Q F1
+(set)108 523.2 Q F0([)2.5 E F1(\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1
+<ad6f>-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1<adad>-2.5 E F0 2.5
+(][)C F1<ad>-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1
+(set)108 535.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 F1<adad>-2.5 E F0 2.5(][)C F1
+<ad>-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144
+547.2 S .574(thout options, display the name and v).4 F .574
+(alue of each shell v)-.25 F .573
+(ariable in a format that can be reused)-.25 F .113
+(as input for setting or resetting the currently-set v)144 559.2 R 2.613
+(ariables. Read-only)-.25 F -.25(va)2.613 G .113
+(riables cannot be reset.).25 F(In)5.113 E F2 1.032(posix mode)144 571.2
+R F0 3.532(,o)C 1.032(nly shell v)-3.532 F 1.032(ariables are listed.)
+-.25 F 1.032(The output is sorted according to the current locale.)6.032
+F .58(When options are speci\214ed, the)144 583.2 R 3.081(ys)-.15 G .581
+(et or unset shell attrib)-3.081 F 3.081(utes. An)-.2 F 3.081(ya)-.15 G
+-.18(rg)-3.081 G .581(uments remaining after op-).18 F .161
+(tion processing are treated as v)144 595.2 R .161
+(alues for the positional parameters and are assigned, in order)-.25 F
+2.66(,t)-.4 G(o)-2.66 E F1($1)2.66 E F0(,)A F1($2)144 607.2 Q 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 619.2 Q F0
+1.377(Each v)184 619.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.378(xport attrib)-.15 F
+1.378(ute and)-.2 F(mark)184 631.2 Q(ed for e)-.1 E(xport to the en)-.15
+E(vironment of subsequent commands.)-.4 E F1<ad62>144 643.2 Q F0 .132
+(Report the status of terminated background jobs immediately)184 643.2 R
+2.632(,r)-.65 G .131(ather than before the ne)-2.632 F(xt)-.15 E
+(primary prompt.)184 655.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 667.2 Q F0
+.087(Exit immediately if a)184 667.2 R F2(pipeline)2.587 E F0 .087
+(\(which may consist of a single)2.587 F F2 .088(simple command)2.588 F
+F0 .088(\), a)B F2(list)2.588 E F0 2.588(,o)C(r)-2.588 E(a)184 679.2 Q
+F2 1.521(compound command)4.021 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 .079(The shell does not e)184
+691.2 R .079(xit if the command that f)-.15 F .08
+(ails is part of the command list immediately)-.1 F(follo)184 703.2 Q
+1.655(wing a)-.25 F F1(while)4.155 E F0(or)4.155 E F1(until)4.155 E F0
+-.1(ke)4.155 G(yw)-.05 E 1.655(ord, part of the test follo)-.1 F 1.654
+(wing the)-.25 F F1(if)4.154 E F0(or)4.154 E F1(elif)4.154 E F0(reserv)
+4.154 E(ed)-.15 E -.1(wo)184 715.2 S .581(rds, part of an).1 F 3.081(yc)
+-.15 G .581(ommand e)-3.081 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 .582(list e)3.082 F .582
+(xcept the command follo)-.15 F(wing)-.25 E .918(the \214nal)184 727.2 R
+F1(&&)3.418 E F0(or)3.418 E F1(||)3.418 E F0 3.418(,a)C 1.218 -.15(ny c)
+-3.418 H .918(ommand in a pipeline b).15 F .917
+(ut the last, or if the command')-.2 F 3.417(sr)-.55 G(eturn)-3.417 E
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(73)185.115 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 -.25(va)184 84 S
+.66(lue is being in).25 F -.15(ve)-.4 G .66(rted with).15 F/F1 10
+/Times-Bold@0 SF(!)3.16 E F0 5.661(.I)C 3.161(fac)-5.661 G .661
+(ompound command other than a subshell returns a)-3.161 F 1.113
+(non-zero status because a command f)184 96 R 1.112(ailed while)-.1 F F1
+<ad65>3.612 E F0 -.1(wa)3.612 G 3.612(sb).1 G 1.112
+(eing ignored, the shell does)-3.612 F .177(not e)184 108 R 2.677
+(xit. A)-.15 F .177(trap on)2.677 F F1(ERR)2.677 E F0 2.677(,i)C 2.678
+(fs)-2.677 G .178(et, is e)-2.678 F -.15(xe)-.15 G .178
+(cuted before the shell e).15 F 2.678(xits. This)-.15 F .178
+(option applies to)2.678 F .618(the shell en)184 120 R .617
+(vironment and each subshell en)-.4 F .617(vironment separately \(see)
+-.4 F/F2 9/Times-Bold@0 SF .617(COMMAND EXE-)3.117 F .642(CUTION ENVIR)
+184 132 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 .643(cuting all).15 F(the commands in the subshell.)184 144 Q
+.999(If a compound command or shell function e)184 162 R -.15(xe)-.15 G
+.999(cutes in a conte).15 F .998(xt where)-.15 F F1<ad65>3.498 E F0 .998
+(is being ig-)3.498 F .089(nored, none of the commands e)184 174 R -.15
+(xe)-.15 G .089(cuted within the compound command or function body).15 F
+.503(will be af)184 186 R .503(fected by the)-.25 F F1<ad65>3.002 E F0
+.502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f)-3.002 E F1
+<ad65>3.002 E F0 .502(is set and a command returns a f)3.002 F .502
+(ailure sta-)-.1 F 4.183(tus. If)184 198 R 4.183(ac)4.183 G 1.683
+(ompound command or shell function sets)-4.183 F F1<ad65>4.184 E F0
+1.684(while e)4.184 F -.15(xe)-.15 G 1.684(cuting in a conte).15 F(xt)
+-.15 E(where)184 210 Q F1<ad65>3.154 E F0 .654
+(is ignored, that setting will not ha)3.154 F .953 -.15(ve a)-.2 H .953
+-.15(ny e).15 H -.25(ff).15 G .653(ect until the compound command).25 F
+(or the command containing the function call completes.)184 222 Q F1
+<ad66>144 234 Q F0(Disable pathname e)184 234 Q(xpansion.)-.15 E F1
+<ad68>144 246 Q F0 .988(Remember the location of commands as the)184 246
+R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 F -.15(xe)
+-.15 G 3.488(cution. This).15 F .988(is en-)3.488 F(abled by def)184 258
+Q(ault.)-.1 E F1<ad6b>144 270 Q F0 .514(All ar)184 270 R .514
+(guments in the form of assignment statements are placed in the en)-.18
+F .513(vironment for a)-.4 F
+(command, not just those that precede the command name.)184 282 Q F1
+<ad6d>144 294 Q F0 .148(Monitor mode.)184 294 R .148
+(Job control is enabled.)5.148 F .149(This option is on by def)5.148 F
+.149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .651
+(on systems that support it \(see)184 306 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 .65
+(processes run in a separate)3.151 F .678(process group.)184 318 R .679
+(When a background job completes, the shell prints a line containing it\
+s)5.678 F -.15(ex)184 330 S(it status.).15 E F1<ad6e>144 342 Q F0 .653
+(Read commands b)184 342 R .653(ut do not e)-.2 F -.15(xe)-.15 G .653
+(cute them.).15 F .652(This may be used to check a shell script for)
+5.653 F(syntax errors.)184 354 Q(This is ignored by interacti)5 E .3
+-.15(ve s)-.25 H(hells.).15 E F1<ad6f>144 366 Q/F3 10/Times-Italic@0 SF
+(option\255name)2.5 E F0(The)184 378 Q F3(option\255name)2.5 E F0
+(can be one of the follo)2.5 E(wing:)-.25 E F1(allexport)184 390 Q F0
+(Same as)224 402 Q F1<ad61>2.5 E F0(.)A F1(braceexpand)184 414 Q F0
+(Same as)224 426 Q F1<ad42>2.5 E F0(.)A F1(emacs)184 438 Q F0 .089
+(Use an emacs-style command line editing interf)224 438 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 450 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 462 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 474 Q(exit)-.18 E F0(Same as)224 474 Q F1<ad65>2.5 E F0(.)A F1
+(errtrace)184 486 Q F0(Same as)224 486 Q F1<ad45>2.5 E F0(.)A F1
+(functrace)184 498 Q F0(Same as)224 510 Q F1<ad54>2.5 E F0(.)A F1
+(hashall)184 522 Q F0(Same as)224 522 Q F1<ad68>2.5 E F0(.)A F1
+(histexpand)184 534 Q F0(Same as)224 546 Q F1<ad48>2.5 E F0(.)A F1
+(history)184 558 Q F0 .586(Enable command history)224 558 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 570 Q
+(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184
+582 Q(eeof)-.18 E F0 1.657(The ef)224 594 R 1.657
+(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF(IGNOREEOF=10)
+4.156 E F0 1.656(had been e)4.156 F -.15(xe)-.15 G(cuted).15 E(\(see)224
+606 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 618 S(yw).1 E(ord)-.1 E F0(Same as)224 630 Q F1
+<ad6b>2.5 E F0(.)A F1(monitor)184 642 Q F0(Same as)224 642 Q F1<ad6d>2.5
+E F0(.)A F1(noclob)184 654 Q(ber)-.1 E F0(Same as)224 666 Q F1<ad43>2.5
+E F0(.)A F1(noexec)184 678 Q F0(Same as)224 678 Q F1<ad6e>2.5 E F0(.)A
+F1(noglob)184 690 Q F0(Same as)224 690 Q F1<ad66>2.5 E F0(.)A F1(nolog)
+184 702 Q F0(Currently ignored.)224 702 Q F1(notify)184 714 Q F0
+(Same as)224 714 Q F1<ad62>2.5 E F0(.)A(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(74)185.115 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/F1 10/Times-Bold@0
+SF(nounset)184 84 Q F0(Same as)224 84 Q F1<ad75>2.5 E F0(.)A F1(onecmd)
+184 96 Q F0(Same as)224 96 Q F1<ad74>2.5 E F0(.)A F1(ph)184 108 Q
+(ysical)-.15 E F0(Same as)224 108 Q F1<ad50>2.5 E F0(.)A F1(pipefail)184
+120 Q F0 1.029(If set, the return v)224 120 R 1.029
+(alue of a pipeline is the v)-.25 F 1.03
+(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 132 R
+1.136
+(xit with a non-zero status, or zero if all commands in the pipeline)
+-.15 F -.15(ex)224 144 S(it successfully).15 E 5(.T)-.65 G
+(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 156 Q F0
+2.09(Change the beha)224 156 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
+168 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.462 E(w)-.25 E .954
+(for a reference to a document that details ho)224 180 R 3.455(wp)-.25 G
+.955(osix mode af)-3.455 F .955(fects bash')-.25 F 3.455(sb)-.55 G(e-)
+-3.455 E(ha)224 192 Q(vior)-.2 E(.)-.55 E F1(pri)184 204 Q(vileged)-.1 E
+F0(Same as)224 216 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 228 S(rbose).1 E
+F0(Same as)224 228 Q F1<ad76>2.5 E F0(.)A F1(vi)184 240 Q F0 .209
+(Use a vi-style command line editing interf)224 240 R 2.709(ace. This)
+-.1 F .209(also af)2.709 F .209(fects the editing in-)-.25 F(terf)224
+252 Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1
+(xtrace)184 264 Q F0(Same as)224 264 Q F1<ad78>2.5 E F0(.)A(If)184 282 Q
+F1<ad6f>3.052 E F0 .552(is supplied with no)3.052 F F2(option\255name)
+3.053 E F0 3.053(,t)C .553(he v)-3.053 F .553
+(alues of the current options are printed.)-.25 F(If)5.553 E F1(+o)184
+294 Q F0 1.072(is supplied with no)3.572 F F2(option\255name)3.572 E F0
+3.572(,a)C 1.071(series of)-.001 F F1(set)3.571 E F0 1.071
+(commands to recreate the current)3.571 F
+(option settings is displayed on the standard output.)184 306 Q F1<ad70>
+144 318 Q F0 -.45(Tu)184 318 S 1.071(rn on).45 F F2(privile)4.821 E -.1
+(ge)-.4 G(d).1 E F0 3.572(mode. In)4.341 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.072
+(\214les are not pro-)3.322 F 1.501
+(cessed, shell functions are not inherited from the en)184 330 R 1.5
+(vironment, and the)-.4 F F3(SHELLOPTS)4 E/F4 9/Times-Roman@0 SF(,)A F3
+-.27(BA)184 342 S(SHOPTS).27 E F4(,)A F3(CDP)2.774 E -.855(AT)-.666 G(H)
+.855 E F4(,)A F0(and)2.774 E F3(GLOBIGNORE)3.024 E F0 -.25(va)2.774 G
+.524(riables, if the).25 F 3.025(ya)-.15 G .525(ppear in the en)-3.025 F
+(vironment,)-.4 E .38(are ignored.)184 354 R .38
+(If the shell is started with the ef)5.38 F(fecti)-.25 E .679 -.15(ve u)
+-.25 H .379(ser \(group\) id not equal to the real).15 F .461
+(user \(group\) id, and the)184 366 R F1<ad70>2.961 E F0 .461
+(option is not supplied, these actions are tak)2.961 F .462
+(en and the ef)-.1 F(fec-)-.25 E(ti)184 378 Q .695 -.15(ve u)-.25 H .395
+(ser id is set to the real user id.).15 F .395(If the)5.395 F F1<ad70>
+2.895 E F0 .394(option is supplied at startup, the ef)2.895 F(fecti)-.25
+E -.15(ve)-.25 G .386(user id is not reset.)184 390 R -.45(Tu)5.386 G
+.386(rning this option of).45 F 2.886(fc)-.25 G .387(auses the ef)-2.886
+F(fecti)-.25 E .687 -.15(ve u)-.25 H .387(ser and group ids to be).15 F
+(set to the real user and group ids.)184 402 Q F1<ad72>144 414 Q F0
+(Enable restricted shell mode.)184 414 Q
+(This option cannot be unset once it has been set.)5 E F1<ad74>144 426 Q
+F0(Exit after reading and e)184 426 Q -.15(xe)-.15 G
+(cuting one command.).15 E F1<ad75>144 438 Q F0 -.35(Tr)184 438 S .774
+(eat unset v).35 F .773(ariables and parameters other than the special \
+parameters "@" and "*", or)-.25 F .459(array v)184 450 R .459(ariables \
+subscripted with "@" or "*", as an error when performing parameter e)
+-.25 F(x-)-.15 E 2.891(pansion. If)184 462 R -.15(ex)2.891 G .391
+(pansion is attempted on an unset v).15 F .391(ariable or parameter)-.25
+F 2.89(,t)-.4 G .39(he shell prints an)-2.89 F
+(error message, and, if not interacti)184 474 Q -.15(ve)-.25 G 2.5(,e)
+.15 G(xits with a non-zero status.)-2.65 E F1<ad76>144 486 Q F0
+(Print shell input lines as the)184 486 Q 2.5(ya)-.15 G(re read.)-2.5 E
+F1<ad78>144 498 Q F0 .315(After e)184 498 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.236(or arithmetic)184 510 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 522 Q(xpanded ar)-.15 E
+(guments or associated w)-.18 E(ord list.)-.1 E F1<ad42>144 534 Q F0
+1.205(The shell performs brace e)184 534 R 1.205(xpansion \(see)-.15 F
+F1 1.205(Brace Expansion)3.705 F F0(abo)3.705 E -.15(ve)-.15 G 3.706
+(\). This).15 F 1.206(is on by de-)3.706 F -.1(fa)184 546 S(ult.).1 E F1
+<ad43>144 558 Q F0 .214(If set,)184 558 R F1(bash)2.714 E F0 .214
+(does not o)2.714 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.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F
+3.053(tors. This)184 570 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 582 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
+<ad45>144 594 Q F0 .104(If set, an)184 594 R 2.604(yt)-.15 G .104
+(rap on)-2.604 F F1(ERR)2.604 E F0 .103
+(is inherited by shell functions, command substitutions, and com-)2.604
+F .838(mands e)184 606 R -.15(xe)-.15 G .838(cuted in a subshell en).15
+F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839
+(trap is normally not inherited in)3.339 F(such cases.)184 618 Q F1
+<ad48>144 630 Q F0(Enable)184 630 Q F1(!)3.032 E F0 .532
+(style history substitution.)5.532 F .531(This option is on by def)5.532
+F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 642 Q -.15
+(ve)-.25 G(.).15 E F1<ad50>144 654 Q F0 .959
+(If set, the shell does not resolv)184 654 R 3.459(es)-.15 G .959
+(ymbolic links when e)-3.459 F -.15(xe)-.15 G .96
+(cuting commands such as).15 F F1(cd)3.46 E F0 1.453
+(that change the current w)184 666 R 1.453(orking directory)-.1 F 6.453
+(.I)-.65 G 3.952(tu)-6.453 G 1.452(ses the ph)-3.952 F 1.452
+(ysical directory structure in-)-.05 F 3.334(stead. By)184 678 R(def)
+3.334 E(ault,)-.1 E F1(bash)3.334 E F0(follo)3.334 E .834
+(ws the logical chain of directories when performing com-)-.25 F
+(mands which change the current directory)184 690 Q(.)-.65 E F1<ad54>144
+702 Q F0 .89(If set, an)184 702 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 714 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 726 Q F0
+(traps are normally not inherited in such cases.)2.5 E(GNU Bash 5.2)72
+768 Q(2022 September 19)135.955 E(75)185.115 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<adad>144 84 Q F0 .401(If no ar)184 84 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.4 E(the positional parameters are set to the)184 96 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 108 Q F0 .796
+(Signal the end of options, cause all remaining)184 108 R F2(ar)3.297 E
+(g)-.37 E F0 3.297(st)C 3.297(ob)-3.297 G 3.297(ea)-3.297 G .797
+(ssigned to the positional pa-)-3.297 F 3.022(rameters. The)184 120 R F1
+<ad78>3.022 E F0(and)3.022 E F1<ad76>3.022 E F0 .522
+(options are turned of)3.022 F 3.022(f. If)-.25 F .522(there are no)
+3.022 F F2(ar)3.022 E(g)-.37 E F0 .521(s, the positional pa-)B
+(rameters remain unchanged.)184 132 Q .425(The options are of)144 148.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 .178
+(to be turned of)144 160.8 R 2.678(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 .177(cation of the shell.).2 F(The)5.177 E .066
+(current set of options may be found in)144 172.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 .067(lid option).25 F
+(is encountered.)144 184.8 Q F1(shift)108 201.6 Q F0([)2.5 E F2(n)A F0
+(])A .429(The positional parameters from)144 213.6 R F2(n)2.929 E F0
+.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G
+.428(rameters represented by the num-).15 F(bers)144 225.6 Q F1($#)2.582
+E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0<ad>A F2(n)A F0 .082
+(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga)
+-.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to)
+.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06
+(is 0, no parameters are changed.)144 237.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 .143(positional parameters are not changed.)144 249.6 R
+.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0
+.144(is greater than)2.884 F F1($#)2.644 E F0
+(or less than zero; otherwise 0.)144 261.6 Q F1(shopt)108 278.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 290.4 S .64(ggle the v).8 F .639
+(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E
+5.639(.T)-.55 G .639(he settings can be either those)-5.639 F .374
+(listed belo)144 302.4 R 1.674 -.65(w, o)-.25 H 1.174 -.4(r, i).65 H
+2.874(ft).4 G(he)-2.874 E F1<ad6f>2.874 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 .375(option to the)2.875 F F1(set)2.875 E F0 -.2
+(bu)2.875 G .375(iltin com-).2 F 2.566(mand. W)144 314.4 R .066
+(ith no options, or with the)-.4 F F1<ad70>2.566 E F0 .066
+(option, a list of all settable options is displayed, with an in-)2.566
+F .074(dication of whether or not each is set; if)144 326.4 R F2
+(optnames)2.574 E F0 .074
+(are supplied, the output is restricted to those op-)2.574 F 3.105
+(tions. The)144 338.4 R F1<ad70>3.105 E F0 .605(option causes output to\
+ be displayed in a form that may be reused as input.)3.105 F(Other)5.605
+E(options ha)144 350.4 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad73>144 362.4 Q F0(Enable \(set\) each)180
+362.4 Q F2(optname)2.5 E F0(.)A F1<ad75>144 374.4 Q F0
+(Disable \(unset\) each)180 374.4 Q F2(optname)2.5 E F0(.)A F1<ad71>144
+386.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\
+tus indicates whether the)180 386.4 R F2(optname)2.504 E F0(is)2.504 E
+.256(set or unset.)180 398.4 R .256(If multiple)5.256 F F2(optname)2.756
+E F0(ar)2.756 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.755(,t)C .255
+(he return status is zero if)-2.755 F(all)180 410.4 Q F2(optnames)2.5 E
+F0(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 422.4 Q F0
+(Restricts the v)180 422.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 .624(If either)144 439.2 R F1
+<ad73>3.124 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 .984
+(set or unset, respecti)144 451.2 R -.15(ve)-.25 G(ly).15 E 5.984(.U)
+-.65 G .984(nless otherwise noted, the)-5.984 F F1(shopt)3.484 E F0 .983
+(options are disabled \(unset\) by de-)3.483 F -.1(fa)144 463.2 S(ult.)
+.1 E 1.544(The return status when listing options is zero if all)144 480
+R F2(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.)4.045 F
+.696
+(When setting or unsetting options, the return status is zero unless an)
+144 492 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695(alid shell)
+-.25 F(option.)144 504 Q(The list of)144 520.8 Q F1(shopt)2.5 E F0
+(options is:)2.5 E F1(assoc_expand_once)144 538.8 Q F0 1.944
+(If set, the shell suppresses multiple e)184 550.8 R -.25(va)-.25 G
+1.945(luation of associati).25 F 2.245 -.15(ve a)-.25 H 1.945
+(rray subscripts during).15 F .885(arithmetic e)184 562.8 R .885
+(xpression e)-.15 F -.25(va)-.25 G .885(luation, while e).25 F -.15(xe)
+-.15 G .885(cuting b).15 F .885(uiltins that can perform v)-.2 F .885
+(ariable as-)-.25 F(signments, and while e)184 574.8 Q -.15(xe)-.15 G
+(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E F1
+(autocd)144 586.8 Q F0 .199
+(If set, a command name that is the name of a directory is e)184 586.8 R
+-.15(xe)-.15 G .2(cuted as if it were the ar).15 F(gu-)-.18 E
+(ment to the)184 598.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 610.8 Q(ars)-.1 E F0 .156(If set, an ar)184 622.8 R .156
+(gument to the)-.18 F F1(cd)2.656 E F0 -.2(bu)2.656 G .155
+(iltin command that is not a directory is assumed to be the).2 F
+(name of a v)184 634.8 Q(ariable whose v)-.25 E
+(alue is the directory to change to.)-.25 E F1(cdspell)144 646.8 Q F0
+1.055
+(If set, minor errors in the spelling of a directory component in a)184
+646.8 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988
+(corrected. The)184 658.8 R 1.488(errors check)3.988 F 1.487
+(ed for are transposed characters, a missing character)-.1 F 3.987(,a)
+-.4 G(nd)-3.987 E .77(one character too man)184 670.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 682.8 Q
+(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.)
+.15 E F1(checkhash)144 694.8 Q F0 .737(If set,)184 706.8 R F1(bash)3.237
+E F0 .736(checks that a command found in the hash table e)3.237 F .736
+(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184
+718.8 Q(If a hashed command no longer e)5 E
+(xists, a normal path search is performed.)-.15 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(76)185.115 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-Bold@0
+SF(checkjobs)144 84 Q F0 .448(If set,)184 96 R F1(bash)2.948 E F0 .448
+(lists the status of an)2.948 F 2.949(ys)-.15 G .449
+(topped and running jobs before e)-2.949 F .449(xiting an interacti)-.15
+F -.15(ve)-.25 G 2.662(shell. If)184 108 R(an)2.662 E 2.661(yj)-.15 G
+.161(obs are running, this causes the e)-2.661 F .161
+(xit to be deferred until a second e)-.15 F .161(xit is at-)-.15 F 1.472
+(tempted without an interv)184 120 R 1.473(ening command \(see)-.15 F/F2
+9/Times-Bold@0 SF 1.473(JOB CONTR)3.973 F(OL)-.27 E F0(abo)3.723 E -.15
+(ve)-.15 G 3.973(\). The).15 F 1.473(shell al-)3.973 F -.1(wa)184 132 S
+(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G(obs are stopped.)
+-2.5 E F1(checkwinsize)144 144 Q F0 1.09(If set,)184 156 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 168 Q 3.35(,u)-.65 G .85(pdates the v)-3.35 F .85
+(alues of)-.25 F F2(LINES)3.35 E F0(and)3.1 E F2(COLUMNS)3.35 E/F3 9
+/Times-Roman@0 SF(.)A F0 .85(This option is enabled by de-)5.35 F -.1
+(fa)184 180 S(ult.).1 E F1(cmdhist)144 192 Q F0 .173(If set,)184 192 R
+F1(bash)2.673 E F0 .173(attempts to sa)2.673 F .473 -.15(ve a)-.2 H .172
+(ll lines of a multiple-line command in the same history en-).15 F(try)
+184 204 Q 5.596(.T)-.65 G .597(his allo)-5.596 F .597
+(ws easy re-editing of multi-line commands.)-.25 F .597
+(This option is enabled by de-)5.597 F -.1(fa)184 216 S 1.288(ult, b).1
+F 1.288(ut only has an ef)-.2 F 1.288
+(fect if command history is enabled, as described abo)-.25 F 1.587 -.15
+(ve u)-.15 H(nder).15 E F2(HIST)184 228 Q(OR)-.162 E(Y)-.315 E F3(.)A F1
+(compat31)144 240 Q(compat32)144 252 Q(compat40)144 264 Q(compat41)144
+276 Q(compat42)144 288 Q(compat43)144 300 Q(compat44)144 312 Q(compat50)
+144 324 Q F0 .889(These control aspects of the shell')184 336 R 3.389
+(sc)-.55 G .889(ompatibility mode \(see)-3.389 F F2 .889(SHELL COMP)
+3.389 F -.855(AT)-.666 G(IBILITY).855 E(MODE)184 348 Q F0(belo)2.25 E
+(w\).)-.25 E F1(complete_fullquote)144 364.8 Q F0 .654(If set,)184 376.8
+R F1(bash)3.153 E F0 .653(quotes all shell metacharacters in \214lename\
+s and directory names when per)3.153 F(-)-.2 E 1.524
+(forming completion.)184 388.8 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
+400.8 R .028(metacharacters appear in shell v)184 412.8 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 424.8 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 436.8 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
+448.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 460.8 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 477.6 Q(expand)-.18 E F0 .486
+(If set,)184 489.6 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
+501.6 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 513.6 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 530.4 Q F0 .858(If set,)184
+530.4 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 542.4 Q(xist.)-.15
+E F1(dotglob)144 559.2 Q F0 .165(If set,)184 559.2 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 571.2 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 588 Q F0 .516(If set, a non-interacti)184
+588 R .816 -.15(ve s)-.25 H .516(hell will not e).15 F .516
+(xit if it cannot e)-.15 F -.15(xe)-.15 G .517
+(cute the \214le speci\214ed as an ar).15 F(-)-.2 E(gument to the)184
+600 Q 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 616.8 Q F0 .717
+(If set, aliases are e)184 628.8 R .717(xpanded as described abo)-.15 F
+1.017 -.15(ve u)-.15 H(nder).15 E F2(ALIASES)3.217 E F3(.)A F0 .716
+(This option is enabled)5.217 F(by def)184 640.8 Q(ault for interacti)
+-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(extdeb)144 657.6 Q(ug)-.2 E F0
+.17(If set at shell in)184 669.6 R -.2(vo)-.4 G .17
+(cation, or in a shell startup \214le, arrange to e).2 F -.15(xe)-.15 G
+.17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.082
+(before the shell starts, identical to the)184 681.6 R F1<adad646562>
+3.582 E(ugger)-.2 E F0 3.581(option. If)3.581 F 1.081(set after in)3.581
+F -.2(vo)-.4 G 1.081(cation, be-).2 F(ha)184 693.6 Q
+(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184
+710.4 Q F0(The)220 710.4 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 722.4
+Q(gument.)-.18 E(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(77)
+185.115 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/F1 10/Times-Bold@0
+SF(2.)184 84 Q F0 1.667(If the command run by the)220 84 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 96 Q
+-.15(xe)-.15 G(cuted.).15 E F1(3.)184 112.8 Q F0 .84
+(If the command run by the)220 112.8 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 124.8 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 136.8 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 153.6 Q/F2 9/Times-Bold@0 SF -.27(BA)220
+153.6 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
+165.6 Q -.15(ve)-.15 G(\).).15 E F1(5.)184 182.4 Q F0 1.637(Function tr\
+acing is enabled: command substitution, shell functions, and sub-)220
+182.4 R(shells in)220 194.4 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)
+-2.5 E F1(\()2.5 E/F3 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 211.2 Q F0 1.082(Error tracing is enabled: comm\
+and substitution, shell functions, and subshells)220 211.2 R(in)220
+223.2 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F3
+(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 240 Q F0 .4(If set, the e)184 240 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 252 Q
+F0(are enabled.)2.5 E F1(extquote)144 268.8 Q F0 .86(If set,)184 280.8 R
+F1($)3.36 E F0<08>A F3(string)A F0 3.36<0861>C(nd)-3.36 E F1($)3.36 E F0
+(")A F3(string)A F0 3.36("q)C .86(uoting is performed within)-3.36 F F1
+(${)3.36 E F3(par)A(ameter)-.15 E F1(})A F0 -.15(ex)3.36 G .86
+(pansions en-).15 F(closed in double quotes.)184 292.8 Q
+(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 309.6 Q
+F0 .243(If set, patterns which f)184 309.6 R .243
+(ail to match \214lenames during pathname e)-.1 F .243
+(xpansion result in an e)-.15 F(x-)-.15 E(pansion error)184 321.6 Q(.)
+-.55 E F1 -.25(fo)144 338.4 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
+.936(If set, the suf)184 350.4 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 362.4 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 374.4 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/F4 9/Times-Roman@0 SF(.)A F0 .448(This option is)4.948
+F(enabled by def)184 386.4 Q(ault.)-.1 E F1(globasciiranges)144 403.2 Q
+F0 2.519(If set, range e)184 415.2 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 427.2 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 439.2 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 451.2 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 463.2 Q(.)-.55 E
+F1(globskipdots)144 480 Q F0 .285(If set, pathname e)184 492 R .285
+(xpansion will ne)-.15 F -.15(ve)-.25 G 2.785(rm).15 G .285
+(atch the \214lenames)-2.785 F F1 -.63(``)2.785 G -.55(.').63 G(')-.08 E
+F0(and)5.285 E F1 -.63(``)2.784 G(..).63 E -.63('')-.55 G F0 2.784(,e)
+.63 G -.15(ve)-3.034 G 2.784(ni).15 G 2.784(ft)-2.784 G .284(he pat-)
+-2.784 F(tern be)184 504 Q(gins with a)-.15 E F1 -.63(``)2.5 G -.55(.')
+.63 G(')-.08 E F0 5(.T)C(his option is enabled by def)-5 E(ault.)-.1 E
+F1(globstar)144 520.8 Q F0 .518(If set, the pattern)184 520.8 R F1(**)
+3.018 E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F
+.519(xt will match all \214les and zero)-.15 F .432
+(or more directories and subdirectories.)184 532.8 R .431
+(If the pattern is follo)5.432 F .431(wed by a)-.25 F F1(/)2.931 E F0
+2.931(,o)C .431(nly directories)-2.931 F(and subdirectories match.)184
+544.8 Q F1(gnu_errfmt)144 561.6 Q F0(If set, shell error messages are w\
+ritten in the standard GNU error message format.)184 573.6 Q F1
+(histappend)144 590.4 Q F0 .676
+(If set, the history list is appended to the \214le named by the v)184
+602.4 R .676(alue of the)-.25 F F2(HISTFILE)3.177 E F0 -.25(va)2.927 G
+(ri-).25 E(able when the shell e)184 614.4 Q(xits, rather than o)-.15 E
+-.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 631.2 Q(eedit)
+-.18 E F0 .576(If set, and)184 643.2 R F1 -.18(re)3.076 G(adline).18 E
+F0 .575(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15
+G .575(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F
+(tory substitution.)184 655.2 Q F1(histv)144 672 Q(erify)-.1 E F0 .402
+(If set, and)184 684 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 .662(passed to the shell parser)184 696 R 5.662(.I)-.55 G .661
+(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161
+G(adline).18 E F0(editing)3.161 E -.2(bu)184 708 S -.25(ff).2 G(er).25 E
+2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(78)185.115 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(hostcomplete)144 84 Q F0 1.181(If set, and)184 96 R F1 -.18(re)3.681
+G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 1.182
+(will attempt to perform hostname completion)3.682 F 1.381(when a w)184
+108 R 1.381(ord containing a)-.1 F F1(@)3.881 E F0 1.381
+(is being completed \(see)3.881 F F1(Completing)3.88 E F0(under)3.88 E
+/F2 9/Times-Bold@0 SF(READLINE)3.88 E F0(abo)184 120 Q -.15(ve)-.15 G
+2.5(\). This).15 F(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144
+136.8 Q F0(If set,)184 148.8 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 165.6 Q(exit)-.18 E
+F0 .219(If set, command substitution inherits the v)184 177.6 R .219
+(alue of the)-.25 F F1(err)2.719 E(exit)-.18 E F0 .22
+(option, instead of unsetting)2.719 F(it in the subshell en)184 189.6 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 206.4 Q -.1(ve)-.1 G(_comments).1 E F0 .33(If set, allo)184 218.4 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 230.4 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 .968(option is)3.468 F
+(enabled by def)184 242.4 Q(ault.)-.1 E F1(lastpipe)144 259.2 Q F0 .066
+(If set, and job control is not acti)184 259.2 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 271.2 Q(vironment.)
+-.4 E F1(lithist)144 288 Q F0 .654(If set, and the)184 288 R F1(cmdhist)
+3.154 E F0 .654(option is enabled, multi-line commands are sa)3.154 F
+-.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history)-3.155 F
+(with embedded ne)184 300 Q
+(wlines rather than using semicolon separators where possible.)-.25 E F1
+(localv)144 316.8 Q(ar_inherit)-.1 E F0 .422(If set, local v)184 328.8 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
+340.8 S .173(ists at a pre).15 F .173(vious scope before an)-.25 F 2.673
+(yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .174
+(The nameref attrib)5.174 F .174(ute is not)-.2 F(inherited.)184 352.8 Q
+F1(localv)144 369.6 Q(ar_unset)-.1 E F0 .329(If set, calling)184 381.6 R
+F1(unset)2.829 E F0 .329(on local v)2.829 F .329(ariables in pre)-.25 F
+.328(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 393.6 R(v-)-.2 E(ior of unsetting local v)184 405.6 Q
+(ariables at the current function scope.)-.25 E F1(login_shell)144 422.4
+Q F0 .486
+(The shell sets this option if it is started as a login shell \(see)184
+434.4 R F2(INV)2.986 E(OCA)-.405 E(TION)-.855 E F0(abo)2.736 E -.15(ve)
+-.15 G 2.986(\). The).15 F -.25(va)184 446.4 S(lue may not be changed.)
+.25 E F1(mailwar)144 463.2 Q(n)-.15 E F0 .814(If set, and a \214le that)
+184 475.2 R F1(bash)3.314 E F0 .815
+(is checking for mail has been accessed since the last time it)3.314 F
+-.1(wa)184 487.2 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 504
+Q F0 .325(If set, and)184 516 R F1 -.18(re)2.825 G(adline).18 E F0 .325
+(is being used,)2.825 F F1(bash)2.824 E F0 .324
+(will not attempt to search the)2.824 F F2 -.666(PA)2.824 G(TH)-.189 E
+F0 .324(for possible)2.574 F
+(completions when completion is attempted on an empty line.)184 528 Q F1
+(nocaseglob)144 544.8 Q F0 .436(If set,)184 556.8 R F1(bash)2.936 E F0
+.436(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f)
+-.25 H .437(ashion when performing pathname).05 F -.15(ex)184 568.8 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 585.6 Q F0 1.194(If set,)184
+597.6 R F1(bash)3.694 E F0 1.194
+(matches patterns in a case\255insensiti)3.694 F 1.493 -.15(ve f)-.25 H
+1.193(ashion when performing matching).05 F .551(while e)184 609.6 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 621.6 S .623(rd e).1 F .623(xpansions, or when \214ltering\
+ possible completions as part of programmable com-)-.15 F(pletion.)184
+633.6 Q F1(noexpand_translation)144 650.4 Q F0 1.117(If set,)184 662.4 R
+F1(bash)3.617 E F0 1.117(encloses the translated results of $"..." quot\
+ing in single quotes instead of)3.617 F(double quotes.)184 674.4 Q
+(If the string is not translated, this has no ef)5 E(fect.)-.25 E F1
+(nullglob)144 691.2 Q F0 .855(If set,)184 703.2 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 715.2 S
+(pand to a null string, rather than themselv).15 E(es.)-.15 E
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(79)185.115 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/F1 10/Times-Bold@0
+SF(patsub_r)144 84 Q(eplacement)-.18 E F0 .105(If set,)184 96 R F1(bash)
+2.605 E F0 -.15(ex)2.605 G .105(pands occurrences of).15 F F1(&)2.606 E
+F0 .106(in the replacement string of pattern substitution to)2.606 F
+.528(the te)184 108 R .528
+(xt matched by the pattern, as described under)-.15 F F1 -.1(Pa)3.027 G
+.527(rameter Expansion).1 F F0(abo)3.027 E -.15(ve)-.15 G 5.527(.T).15 G
+(his)-5.527 E(option is enabled by def)184 120 Q(ault.)-.1 E F1(pr)144
+136.8 Q(ogcomp)-.18 E F0 .676(If set, the programmable completion f)184
+148.8 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 160.8 Q(This option is enabled by def)5 E(ault.)-.1 E
+F1(pr)144 177.6 Q(ogcomp_alias)-.18 E F0 2.124
+(If set, and programmable completion is enabled,)184 189.6 R F1(bash)
+4.624 E F0 2.124(treats a command name that)4.624 F(doesn')184 201.6 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 213.6 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 225.6 Q(xpanded alias.)-.15 E
+F1(pr)144 242.4 Q(omptv)-.18 E(ars)-.1 E F0 1.447
+(If set, prompt strings under)184 254.4 R 1.448(go parameter e)-.18 F
+1.448(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184
+266.4 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 278.4 Q(ault.)-.1 E F1 -.18
+(re)144 295.2 S(stricted_shell).18 E F0 1.069
+(The shell sets this option if it is started in restricted mode \(see)
+184 307.2 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 319.2 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 331.2 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 348 Q(erbose)-.1 E F0 .501(If set, the)184 360 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 372 Q F1(sour)
+144 388.8 Q(cepath)-.18 E F0 .771(If set, the)184 400.8 R F1(.)3.271 E
+F0(\()3.271 E F1(sour)A(ce)-.18 E 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 412.8 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E
+(ault.)-.1 E F1 -.1(va)144 429.6 S(rr).1 E(edir_close)-.18 E F0 .74(If \
+set, the shell automatically closes \214le descriptors assigned using t\
+he)184 441.6 R/F3 10/Times-Italic@0 SF({varname})3.24 E F0(redi-)3.24 E
+.424(rection syntax \(see)184 453.6 R F2(REDIRECTION)2.924 E F0(abo)
+2.674 E -.15(ve)-.15 G 2.924(\)i).15 G .424(nstead of lea)-2.924 F .424
+(ving them open when the com-)-.2 F(mand completes.)184 465.6 Q F1
+(xpg_echo)144 482.4 Q F0(If set, the)184 494.4 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 511.2 Q F0([)2.5 E F1<ad66>A F0(])A .909
+(Suspend the e)144 523.2 R -.15(xe)-.15 G .909
+(cution of this shell until it recei).15 F -.15(ve)-.25 G 3.41(sa).15 G
+F2(SIGCONT)A F0 3.41(signal. A)3.16 F .91(login shell, or a shell)3.41 F
+.753(without job control enabled, cannot be suspended; the)144 535.2 R
+F1<ad66>3.253 E F0 .752(option can be used to o)3.252 F -.15(ve)-.15 G
+.752(rride this and).15 F .107(force the suspension.)144 547.2 R .107(T\
+he return status is 0 unless the shell is a login shell or job control \
+is not en-)5.107 F(abled and)144 559.2 Q F1<ad66>2.5 E F0
+(is not supplied.)2.5 E F1(test)108 576 Q F3 -.2(ex)2.5 G(pr).2 E F1([)
+108 588 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .878
+(Return a status of 0 \(true\) or 1 \(f)144 588 R .877
+(alse\) depending on the e)-.1 F -.25(va)-.25 G .877
+(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)144 600 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 1.361
+(primaries described abo)144 612 R 1.661 -.15(ve u)-.15 H(nder).15 E F2
+(CONDITION)3.861 E 1.36(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A
+F1(test)5.86 E F0 1.36(does not accept an)3.86 F 3.86(yo)-.15 G(p-)-3.86
+E(tions, nor does it accept and ignore an ar)144 624 Q(gument of)-.18 E
+F1<adad>2.5 E F0(as signifying the end of options.)2.5 E .785
+(Expressions may be combined using the follo)144 642 R .786
+(wing operators, listed in decreasing order of prece-)-.25 F 3.412
+(dence. The)144 654 R -.25(eva)3.412 G .912
+(luation depends on the number of ar).25 F .911(guments; see belo)-.18 F
+4.711 -.65(w. O)-.25 H .911(perator precedence is).65 F
+(used when there are \214v)144 666 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G(ore ar)
+-2.5 E(guments.)-.18 E F1(!)144 678 Q F3 -.2(ex)2.5 G(pr).2 E F0 -.35
+(Tr)180 678 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 690 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26
+(Returns the v)180 690 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 702 Q
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(80)185.115 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/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(a)A F1 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 96 S
+(ue if both).35 E F1 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F1 -.2(ex)2.5 G
+(pr2).2 E F0(are true.)2.52 E F1 -.2(ex)144 108 S(pr1).2 E F0<ad>2.5 E
+F2(o)A F1 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 120 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 136.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 154.8 S -.18(rg)-2.5 G(uments).18 E(The e)
+180 166.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 178.8 S -.18
+(rg)-2.5 G(ument).18 E(The e)180 190.8 Q
+(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18
+E 2.5(2a)144 202.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
+180 214.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 .379(If the \214rst ar)180 226.8 R .38
+(gument is one of the unary conditional operators listed abo)-.18 F .68
+-.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 SF(CONDI-)2.88 E(TION)180
+238.8 Q .553(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 250.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 262.8 S -.18(rg)-2.5 G
+(uments).18 E .236(The follo)180 274.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 286.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.104 E .578(result of the e)180 298.8 R .578(xpression i\
+s the result of the binary test using the \214rst and third ar)-.15 F
+(guments)-.18 E 1.333(as operands.)180 310.8 R(The)6.333 E F2<ad61>3.833
+E F0(and)3.833 E F2<ad6f>3.832 E F0 1.332
+(operators are considered binary operators when there are)3.832 F .558
+(three ar)180 322.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 .521(test using the second and third ar)180
+334.8 R 3.021(guments. If)-.18 F .521(the \214rst ar)3.021 F .52
+(gument is e)-.18 F(xactly)-.15 E F2(\()3.02 E F0 .52(and the third)3.02
+F(ar)180 346.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 358.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144
+370.8 S -.18(rg)-2.5 G(uments).18 E .43(The follo)180 382.8 R .43
+(wing conditions are applied in the order listed.)-.25 F .429
+(If the \214rst ar)5.429 F .429(gument is)-.18 F F2(!)2.929 E F0 2.929
+(,t)C .429(he re-)-2.929 F 1.314(sult is the ne)180 394.8 R -.05(ga)-.15
+G 1.314(tion of the three-ar).05 F 1.314(gument e)-.18 F 1.314
+(xpression composed of the remaining ar)-.15 F(gu-)-.18 E 2.745
+(ments. the)180 406.8 R(tw)2.745 E(o-ar)-.1 E .245
+(gument test using the second and third ar)-.18 F 2.744(guments. If)-.18
+F .244(the \214rst ar)2.744 F(gument)-.18 E .309(is e)180 418.8 R
+(xactly)-.15 E F2(\()2.809 E F0 .309(and the fourth ar)2.809 F .309
+(gument is e)-.18 F(xactly)-.15 E F2(\))2.809 E F0 2.809(,t)C .31
+(he result is the tw)-2.809 F(o-ar)-.1 E .31(gument test of the)-.18 F
+.184(second and third ar)180 430.8 R 2.684(guments. Otherwise,)-.18 F
+.184(the e)2.684 F .183(xpression is parsed and e)-.15 F -.25(va)-.25 G
+.183(luated according).25 F(to precedence using the rules listed abo)180
+442.8 Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 454.8 S 2.5(rm)-2.5 G(ore ar)
+-2.5 E(guments)-.18 E 1.635(The e)180 466.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
+478.8 Q -.15(ve)-.15 G(.).15 E(When used with)144 496.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 513.6 Q F0
+1.229(Print the accumulated user and system times for the shell and for\
+ processes run from the shell.)144 513.6 R(The return status is 0.)144
+525.6 Q F2(trap)108 542.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 .682(The command)
+144 554.4 R F1(ar)3.512 E(g)-.37 E F0 .682(is to be read and e)3.402 F
+-.15(xe)-.15 G .682(cuted when the shell recei).15 F -.15(ve)-.25 G
+3.183(ss).15 G(ignal\(s\))-3.183 E F1(sigspec)3.523 E F0 5.683(.I).31 G
+(f)-5.683 E F1(ar)3.513 E(g)-.37 E F0(is)3.403 E .609
+(absent \(and there is a single)144 566.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 578.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 590.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 602.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 614.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 626.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 638.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 650.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 .666(If a)144 668.4 R F1
+(sigspec)3.506 E F0(is)3.476 E F3(EXIT)3.166 E F0 .666
+(\(0\) the command)2.916 F F1(ar)3.496 E(g)-.37 E F0 .666(is e)3.386 F
+-.15(xe)-.15 G .666(cuted on e).15 F .667(xit from the shell.)-.15 F
+.667(If a)5.667 F F1(sigspec)3.507 E F0(is)3.477 E F3(DE-)3.167 E -.09
+(BU)144 680.4 S(G).09 E F4(,)A F0 .484(the command)2.734 F F1(ar)3.314 E
+(g)-.37 E F0 .484(is e)3.204 F -.15(xe)-.15 G .484(cuted before e).15 F
+-.15(ve)-.25 G(ry).15 E F1 .483(simple command)2.984 F F0(,)A F1(for)
+2.983 E F0(command,)2.983 E F1(case)2.983 E F0(command,)2.983 E F1
+(select)144 692.4 Q F0 .562(command, e)3.062 F -.15(ve)-.25 G .563
+(ry arithmetic).15 F F1(for)3.063 E F0 .563
+(command, and before the \214rst command e)3.063 F -.15(xe)-.15 G .563
+(cutes in a shell).15 F .623(function \(see)144 704.4 R F3 .622
+(SHELL GRAMMAR)3.122 F F0(abo)2.872 E -.15(ve)-.15 G 3.122(\). Refer).15
+F .622(to the description of the)3.122 F F2(extdeb)3.122 E(ug)-.2 E F0
+.622(option to the)3.122 F F2(shopt)144 716.4 Q F0 -.2(bu)2.996 G .496
+(iltin for details of its ef).2 F .496(fect on the)-.25 F F2(DEB)2.996 E
+(UG)-.1 E F0 2.996(trap. If)2.996 F(a)2.996 E F1(sigspec)3.336 E F0(is)
+3.306 E F3(RETURN)2.996 E F4(,)A F0 .496(the command)2.746 F F1(ar)
+144.33 728.4 Q(g)-.37 E F0 .18(is e)2.9 F -.15(xe)-.15 G .18
+(cuted each time a shell function or a script e).15 F -.15(xe)-.15 G .18
+(cuted with the).15 F F2(.)2.68 E F0(or)2.68 E F2(sour)2.68 E(ce)-.18 E
+F0 -.2(bu)2.68 G .18(iltins \214nishes).2 F(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(81)185.115 E 0 Cg EP
+%%Page: 82 82
+%%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 -.15(exe)144 84 S
+(cuting.).15 E .96(If a)144 102 R/F1 10/Times-Italic@0 SF(sigspec)3.8 E
+F0(is)3.77 E/F2 9/Times-Bold@0 SF(ERR)3.46 E/F3 9/Times-Roman@0 SF(,)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 simple comma\
+nd\), a list, or a compound command returns a non\255zero e)144 114 R
+.184(xit status, subject to)-.15 F .451(the follo)144 126 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 138 R .388(wing a)-.25 F/F4 10
+/Times-Bold@0 SF(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 150 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 162 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 174 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 .132
+(Signals ignored upon entry to the shell cannot be trapped or reset.)144
+192 R -.35(Tr)5.133 G .133(apped signals that are not be-).35 F .117
+(ing ignored are reset to their original v)144 204 R .117
+(alues in a subshell or subshell en)-.25 F .117
+(vironment when one is cre-)-.4 F 2.5(ated. The)144 216 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 232.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 244.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 256.8 Q F0 .715(option is used,)3.215 F F4(type)3.215 E F0
+.715(prints a string which is one of)3.215 F F1(alias)3.545 E F0(,).27 E
+F1 -.1(ke)3.215 G(ywor)-.2 E(d)-.37 E F0(,).77 E F1(function)5.185 E F0
+(,).24 E F1 -.2(bu)3.215 G(iltin).2 E F0 3.215(,o).24 G(r)-3.215 E F1
+(\214le)5.125 E F0(if)3.395 E F1(name)144.36 268.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 280.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 292.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 .529(mand name, or nothing if)
+144 304.8 R/F5 10/Courier@0 SF .528(type -t name)3.028 F F0 -.1(wo)3.028
+G .528(uld not return).1 F F1(\214le)4.938 E F0 5.528(.T).18 G(he)-5.528
+E F4<ad50>3.028 E F0 .528(option forces a)3.028 F F2 -.666(PA)3.028 G
+(TH)-.189 E F0 .006(search for each)144 316.8 R F1(name)2.506 E F0 2.506
+(,e)C -.15(ve)-2.756 G 2.506(ni).15 G(f)-2.506 E F5 .007(type -t name)
+2.506 F F0 -.1(wo)2.507 G .007(uld not return).1 F F1(\214le)4.417 E F0
+5.007(.I).18 G 2.507(fac)-5.007 G .007(ommand is hashed,)-2.507 F F4
+<ad70>2.507 E F0(and)144 328.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
+340.8 Q F0 .823(option is used,)3.323 F F4(type)3.323 E F0 .824
+(prints all of the places that contain an e)3.323 F -.15(xe)-.15 G .824
+(cutable named).15 F F1(name)3.684 E F0 5.824(.T).18 G .824(his in-)
+-5.824 F 1.176(cludes aliases and functions, if and only if the)144
+352.8 R F4<ad70>3.676 E F0 1.176(option is not also used.)3.676 F 1.176
+(The table of hashed)6.176 F 1.223(commands is not consulted when using)
+144 364.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 376.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 388.8 Q F4(ulimit)108 405.6 Q F0([)2.5 E F4
+(\255HS)A F0(])A F4<ad61>2.5 E(ulimit)108 417.6 Q F0([)2.5 E F4(\255HS)A
+F0 2.5(][)C F4(\255bcde\214klmnpqrstuvxPR)-2.5 E(T)-.4 E F0([)2.5 E F1
+(limit)A F0(]])A(Pro)144 429.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 441.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 453.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 465.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
+477.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 489.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 .023
+(soft limit, and no limit, respecti)144 501.6 R -.15(ve)-.25 G(ly).15 E
+5.023(.I)-.65 G(f)-5.023 E F1(limit)2.613 E F0 .023
+(is omitted, the current v)3.203 F .023
+(alue of the soft limit of the re-)-.25 F .985
+(source is printed, unless the)144 513.6 R F4<ad48>3.485 E F0 .984
+(option is gi)3.485 F -.15(ve)-.25 G 3.484(n. When).15 F .984
+(more than one resource is speci\214ed, the)3.484 F .7
+(limit name and unit, if appropriate, are printed before the v)144 525.6
+R 3.2(alue. Other)-.25 F .7(options are interpreted as)3.2 F(follo)144
+537.6 Q(ws:)-.25 E F4<ad61>144 549.6 Q F0
+(All current limits are reported; no limits are set)180 549.6 Q F4<ad62>
+144 561.6 Q F0(The maximum sock)180 561.6 Q(et b)-.1 E(uf)-.2 E
+(fer size)-.25 E F4<ad63>144 573.6 Q F0
+(The maximum size of core \214les created)180 573.6 Q F4<ad64>144 585.6
+Q F0(The maximum size of a process')180 585.6 Q 2.5(sd)-.55 G(ata se)
+-2.5 E(gment)-.15 E F4<ad65>144 597.6 Q F0
+(The maximum scheduling priority \("nice"\))180 597.6 Q F4<ad66>144
+609.6 Q F0
+(The maximum size of \214les written by the shell and its children)180
+609.6 Q F4<ad69>144 621.6 Q F0(The maximum number of pending signals)180
+621.6 Q F4<ad6b>144 633.6 Q F0
+(The maximum number of kqueues that may be allocated)180 633.6 Q F4
+<ad6c>144 645.6 Q F0(The maximum size that may be lock)180 645.6 Q
+(ed into memory)-.1 E F4<ad6d>144 657.6 Q F0
+(The maximum resident set size \(man)180 657.6 Q 2.5(ys)-.15 G
+(ystems do not honor this limit\))-2.5 E F4<ad6e>144 669.6 Q F0 .791(Th\
+e maximum number of open \214le descriptors \(most systems do not allo)
+180 669.6 R 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F
+(be set\))180 681.6 Q F4<ad70>144 693.6 Q F0
+(The pipe size in 512-byte blocks \(this may not be set\))180 693.6 Q F4
+<ad71>144 705.6 Q F0
+(The maximum number of bytes in POSIX message queues)180 705.6 Q F4
+<ad72>144 717.6 Q F0(The maximum real-time scheduling priority)180 717.6
+Q(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(82)185.115 E 0 Cg EP
+%%Page: 83 83
+%%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(The maximum stack size)180 84 Q F1<ad74>144 96 Q F0
+(The maximum amount of cpu time in seconds)180 96 Q F1<ad75>144 108 Q F0
+(The maximum number of processes a)180 108 Q -.25(va)-.2 G
+(ilable to a single user).25 E F1<ad76>144 120 Q F0 .47
+(The maximum amount of virtual memory a)180 120 R -.25(va)-.2 G .47
+(ilable to the shell and, on some systems, to).25 F(its children)180 132
+Q F1<ad78>144 144 Q F0(The maximum number of \214le locks)180 144 Q F1
+<ad50>144 156 Q F0(The maximum number of pseudoterminals)180 156 Q F1
+<ad52>144 168 Q F0(The maximum time a real-time process can run before \
+blocking, in microseconds)180 168 Q F1<ad54>144 180 Q F0
+(The maximum number of threads)180 180 Q(If)144 196.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 .044
+(no option is gi)144 208.8 R -.15(ve)-.25 G .044(n, then).15 F F1<ad66>
+2.544 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 .045(xcept for)-.15 F F1
+<ad74>2.545 E F0 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144
+220.8 R F1<ad52>3.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F
+F1<ad70>3.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;)
+-3.17 F F1<ad50>3.17 E F0(,)A F1<ad54>3.17 E F0(,)A F1<ad62>3.17 E F0(,)
+A F1<ad6b>144 232.8 Q F0(,)A F1<ad6e>3.736 E F0 3.736(,a)C(nd)-3.736 E
+F1<ad75>3.736 E F0 3.736(,w)C 1.236(hich are unscaled v)-3.736 F 1.236
+(alues; and, when in posix mode,)-.25 F F1<ad63>3.736 E F0(and)3.736 E
+F1<ad66>3.736 E F0 3.736(,w)C 1.237(hich are in)-3.736 F .239
+(512-byte increments.)144 244.8 R .238
+(The return status is 0 unless an in)5.239 F -.25(va)-.4 G .238
+(lid option or ar).25 F .238(gument is supplied, or an)-.18 F
+(error occurs while setting a ne)144 256.8 Q 2.5(wl)-.25 G(imit.)-2.5 E
+F1(umask)108 273.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 .18
+(The user \214le-creation mask is set to)144 285.6 R F2(mode)3.06 E F0
+5.18(.I).18 G(f)-5.18 E F2(mode)3.06 E F0(be)2.86 E .18
+(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 297.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
+309.6 Q F2(mode)3.262 E F0 .382(is omitted, the current v)3.062 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 321.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 333.6 Q F0 .551
+(is omitted, the output is in a form that may be reused as input.)3.231
+F .552(The return status is 0 if the)5.552 F(mode w)144 345.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 362.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 374.4 Q 1.058 -.15(ve e)-.15 H(ach).15 E F2(name)
+3.258 E F0 .758(from the list of de\214ned aliases.)3.258 F(If)5.758 E
+F1<ad61>3.258 E F0 .757(is supplied, all alias de\214nitions are re-)
+3.258 F(mo)144 386.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 403.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 415.2 S 3.803(re).15 G(ach)-3.803 E F2(name)4.163 E F0
+3.803(,r).18 G(emo)-3.803 E 1.603 -.15(ve t)-.15 H 1.303
+(he corresponding v).15 F 1.303(ariable or function.)-.25 F 1.303
+(If the)6.303 F F1<ad76>3.804 E F0 1.304(option is gi)3.804 F -.15(ve)
+-.25 G 1.304(n, each).15 F F2(name)144.36 427.2 Q F0 .465
+(refers to a shell v)3.145 F .464(ariable, and that v)-.25 F .464
+(ariable is remo)-.25 F -.15(ve)-.15 G 2.964(d. Read-only).15 F -.25(va)
+2.964 G .464(riables may not be un-).25 F 2.768(set. If)144 439.2 R F1
+<ad66>2.768 E F0 .269(is speci\214ed, each)2.768 F F2(name)3.129 E F0
+.269(refers to a shell function, and the function de\214nition is remo)
+2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 451.2 R F1<ad6e>2.904 E
+F0 .404(option is supplied, and)2.904 F F2(name)2.904 E F0 .404(is a v)
+2.904 F .404(ariable with the)-.25 F F2(namer)2.904 E(ef)-.37 E F0
+(attrib)2.904 E(ute,)-.2 E F2(name)2.904 E F0 .403(will be unset)2.904 F
+.719(rather than the v)144 463.2 R .719(ariable it references.)-.25 F F1
+<ad6e>5.719 E F0 .719(has no ef)3.219 F .719(fect if the)-.25 F F1<ad66>
+3.22 E F0 .72(option is supplied.)3.22 F .72(If no options)5.72 F .737
+(are supplied, each)144 475.2 R F2(name)3.237 E F0 .737(refers to a v)
+3.237 F .737(ariable; if there is no v)-.25 F .736
+(ariable by that name, a function with)-.25 F 1.761(that name, if an)144
+487.2 R 3.061 -.65(y, i)-.15 H 4.261(su).65 G 4.261(nset. Each)-4.261 F
+1.761(unset v)4.261 F 1.761(ariable or function is remo)-.25 F -.15(ve)
+-.15 G 4.262(df).15 G 1.762(rom the en)-4.262 F(vironment)-.4 E 3.172
+(passed to subsequent commands.)144 499.2 R 3.172(If an)8.172 F 5.672
+(yo)-.15 G(f)-5.672 E/F3 9/Times-Bold@0 SF -.27(BA)5.672 G(SH_ALIASES)
+.27 E/F4 9/Times-Roman@0 SF(,)A F3 -.27(BA)5.421 G(SH_ARGV0).27 E F4(,)A
+F3 -.27(BA)5.421 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 511.2 S
+(SH_COMMAND).27 E F4(,)A F3 -.27(BA)11.481 G(SH_SUBSHELL).27 E F4(,)A F3
+-.27(BA)11.482 G(SHPID).27 E F4(,)A F3(COMP_W)11.482 E(ORDBREAKS)-.09 E
+F4(,)A F3(DIRST)11.482 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL)
+144 523.2 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN)
+2.67 E(AME)-.18 E F4(,)A F3(GR)2.67 E(OUPS)-.27 E F4(,)A F3(HISTCMD)2.67
+E F4(,)A F3(LINENO)2.67 E F4(,)A F3(RANDOM)2.67 E F4(,)A F3(SECONDS)144
+535.2 Q F4(,)A F0(or)4.029 E F3(SRANDOM)4.279 E F0 1.779(are unset, the)
+4.029 F 4.279(yl)-.15 G 1.779(ose their special properties, e)-4.279 F
+-.15(ve)-.25 G 4.279(ni).15 G 4.28(ft)-4.279 G(he)-4.28 E 4.28(ya)-.15 G
+1.78(re subse-)-4.28 F(quently reset.)144 547.2 Q(The e)5 E
+(xit status is true unless a)-.15 E F2(name)2.86 E F0
+(is readonly or may not be unset.)2.68 E F1(wait)108 564 Q F0([)2.5 E F1
+(\255fn)A F0 2.5(][)C F1<ad70>-2.5 E F2(varname)2.5 E F0 2.5(][)C F2
+(id ...)-2.5 E F0(])A -.8(Wa)144 576 S .659(it for each speci\214ed chi\
+ld process and return its termination status.).8 F(Each)5.659 E F2(id)
+3.169 E F0 .658(may be a process)3.928 F .008
+(ID or a job speci\214cation; if a job spec is gi)144 588 R -.15(ve)-.25
+G .009(n, all processes in that job').15 F 2.509(sp)-.55 G .009
+(ipeline are w)-2.509 F .009(aited for)-.1 F 5.009(.I)-.55 G(f)-5.009 E
+F2(id)144.01 600 Q F0 .442(is not gi)3.712 F -.15(ve)-.25 G(n,).15 E F1
+(wait)2.942 E F0 -.1(wa)2.942 G .441
+(its for all running background jobs and the last-e).1 F -.15(xe)-.15 G
+.441(cuted process substitu-).15 F .597
+(tion, if its process id is the same as)144 612 R F1($!)3.098 E F0 3.098
+(,a)C .598(nd the return status is zero.)-3.098 F .598(If the)5.598 F F1
+<ad6e>3.098 E F0 .598(option is supplied,)3.098 F F1(wait)144 624 Q F0
+-.1(wa)3.083 G .583(its for a single job from the list of).1 F F2(id)
+3.083 E F0 3.083(so)C 1.383 -.4(r, i)-3.083 H 3.083(fn).4 G(o)-3.083 E
+F2(id)3.083 E F0 3.083(sa)C .583(re supplied, an)-3.083 F 3.083(yj)-.15
+G .582(ob, to complete and)-3.083 F .403(returns its e)144 636 R .403
+(xit status.)-.15 F .403(If none of the supplied ar)5.403 F .403
+(guments is a child of the shell, or if no ar)-.18 F(guments)-.18 E .573
+(are supplied and the shell has no unw)144 648 R .573
+(aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .572
+(If the)5.573 F F1<ad70>3.072 E F0 .572(option is)3.072 F .39
+(supplied, the process or job identi\214er of the job for which the e)
+144 660 R .39(xit status is returned is assigned to)-.15 F .905(the v)
+144 672 R(ariable)-.25 E F2(varname)3.405 E F0 .905
+(named by the option ar)3.405 F 3.405(gument. The)-.18 F -.25(va)3.405 G
+.905(riable will be unset initially).25 F 3.405(,b)-.65 G(efore)-3.405 E
+(an)144 684 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39
+(is useful only when the)3.89 F F1<ad6e>3.89 E F0 1.39
+(option is supplied.)3.89 F 1.39(Supplying the)6.39 F F1<ad66>3.89 E F0
+(option,)3.89 E .575(when job control is enabled, forces)144 696 R F1
+(wait)3.075 E F0 .575(to w)3.075 F .575(ait for)-.1 F F2(id)3.075 E F0
+.574(to terminate before returning its status, in-)3.075 F .635
+(stead of returning when it changes status.)144 708 R(If)5.635 E F2(id)
+3.145 E F0 .635(speci\214es a non-e)3.905 F .635
+(xistent process or job, the return)-.15 F 1.694(status is 127.)144 720
+R(If)6.694 E F1(wait)4.194 E F0 1.694(is interrupted by a signal, the r\
+eturn status will be greater than 128, as)4.194 F(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(83)185.115 E 0 Cg EP
+%%Page: 84 84
+%%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 .113
+(described under)144 84 R/F1 10/Times-Bold@0 SF(SIGN)2.613 E(ALS)-.2 E
+F0(abo)2.613 E -.15(ve)-.15 G 5.113(.O).15 G .113
+(therwise, the return status is the e)-5.113 F .114
+(xit status of the last process)-.15 F(or job w)144 96 Q(aited for)-.1 E
+(.)-.55 E/F2 10.95/Times-Bold@0 SF(SHELL COMP)72 112.8 Q -1.04(AT)-.81 G
+(IBILITY MODE)1.04 E F0 1.355(Bash-4.0 introduced the concept of a)108
+124.8 R/F3 10/Times-Italic@0 SF 1.355(shell compatibility le)3.855 F
+(vel)-.15 E F0 3.855(,s)C 1.354
+(peci\214ed as a set of options to the shopt)-3.855 F -.2(bu)108 136.8 S
+.398(iltin \().2 F F1(compat31)2.898 E F0(,)A F1(compat32)2.898 E F0(,)A
+F1(compat40)2.898 E F0(,)A F1(compat41)2.898 E F0 2.898(,a)C .399
+(nd so on\).)-2.898 F .399(There is only one current compatibility)5.399
+F(le)108 148.8 Q -.15(ve)-.25 G 3.254(l-).15 G 3.254(-e)-3.254 G .754
+(ach option is mutually e)-3.254 F(xclusi)-.15 E -.15(ve)-.25 G 5.754
+(.T).15 G .754(he compatibility le)-5.754 F -.15(ve)-.25 G 3.253(li).15
+G 3.253(si)-3.253 G .753(ntended to allo)-3.253 F 3.253(wu)-.25 G .753
+(sers to select be-)-3.253 F(ha)108 160.8 Q 1.083(vior from pre)-.2 F
+1.083(vious v)-.25 F 1.083(ersions that is incompatible with ne)-.15 F
+1.083(wer v)-.25 F 1.083(ersions while the)-.15 F 3.584(ym)-.15 G 1.084
+(igrate scripts to use)-3.584 F(current features and beha)108 172.8 Q
+(vior)-.2 E 2.5(.I)-.55 G(t')-2.5 E 2.5(si)-.55 G
+(ntended to be a temporary solution.)-2.5 E 1.457
+(This section does not mention beha)108 189.6 R 1.457
+(vior that is standard for a particular v)-.2 F 1.456
+(ersion \(e.g., setting)-.15 F F1(compat32)3.956 E F0 .886
+(means that quoting the rhs of the re)108 201.6 R(ge)-.15 E .886
+(xp matching operator quotes special re)-.15 F(ge)-.15 E .887
+(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 213.6 Q
+(ault beha)-.1 E(vior in bash-3.2 and subsequent v)-.2 E(ersions\).)-.15
+E .523(If a user enables, say)108 230.4 R(,)-.65 E F1(compat32)3.023 E
+F0 3.023(,i)C 3.023(tm)-3.023 G .523(ay af)-3.023 F .523(fect the beha)
+-.25 F .523(vior of other compatibility le)-.2 F -.15(ve)-.25 G .522
+(ls up to and includ-).15 F .259(ing the current compatibility le)108
+242.4 R -.15(ve)-.25 G 2.759(l. The).15 F .259
+(idea is that each compatibility le)2.759 F -.15(ve)-.25 G 2.76(lc).15 G
+.26(ontrols beha)-2.76 F .26(vior that changed)-.2 F 1.646(in that v)108
+254.4 R 1.646(ersion of)-.15 F F1(bash)4.146 E F0 4.146(,b)C 1.646
+(ut that beha)-4.346 F 1.646(vior may ha)-.2 F 1.946 -.15(ve b)-.2 H
+1.646(een present in earlier v).15 F 4.146(ersions. F)-.15 F 1.645
+(or instance, the)-.15 F .76
+(change to use locale-based comparisons with the)108 266.4 R F1([[)3.261
+E F0 .761(command came in bash-4.1, and earlier v)3.261 F .761
+(ersions used)-.15 F 1.905(ASCII-based comparisons, so enabling)108
+278.4 R F1(compat32)4.405 E F0 1.904
+(will enable ASCII-based comparisons as well.)4.405 F(That)6.904 E .295
+(granularity may not be suf)108 290.4 R .296
+(\214cient for all uses, and as a result users should emplo)-.25 F 2.796
+(yc)-.1 G .296(ompatibility le)-2.796 F -.15(ve)-.25 G .296(ls care-).15
+F(fully)108 302.4 Q 5(.R)-.65 G(ead the documentation for a particular \
+feature to \214nd out the current beha)-5 E(vior)-.2 E(.)-.55 E .532
+(Bash-4.3 introduced a ne)108 319.2 R 3.032(ws)-.25 G .531(hell v)-3.032
+F(ariable:)-.25 E/F4 9/Times-Bold@0 SF -.27(BA)3.031 G(SH_COMP).27 E
+-.855(AT)-.666 G/F5 9/Times-Roman@0 SF(.).855 E F0 .531(The v)5.031 F
+.531(alue assigned to this v)-.25 F .531(ariable \(a decimal)-.25 F -.15
+(ve)108 331.2 S .107(rsion number lik).15 F 2.607(e4)-.1 G .107
+(.2, or an inte)-2.607 F .107(ger corresponding to the)-.15 F F1(compat)
+2.608 E F3(NN)A F0 .108(option, lik)2.608 F 2.608(e4)-.1 G .108
+(2\) determines the com-)-2.608 F(patibility le)108 343.2 Q -.15(ve)-.25
+G(l.).15 E .388(Starting with bash-4.4, Bash has be)108 360 R .388
+(gun deprecating older compatibility le)-.15 F -.15(ve)-.25 G 2.887
+(ls. Ev).15 F(entually)-.15 E 2.887(,t)-.65 G .387(he options will)
+-2.887 F(be remo)108 372 Q -.15(ve)-.15 G 2.5(di).15 G 2.5(nf)-2.5 G -.2
+(avo)-2.6 G 2.5(ro).2 G(f)-2.5 E F4 -.27(BA)2.5 G(SH_COMP).27 E -.855
+(AT)-.666 G F5(.).855 E F0 1.163(Bash-5.0 is the \214nal v)108 388.8 R
+1.163(ersion for which there will be an indi)-.15 F 1.164
+(vidual shopt option for the pre)-.25 F 1.164(vious v)-.25 F(ersion.)
+-.15 E(Users should use)108 400.8 Q F4 -.27(BA)2.5 G(SH_COMP).27 E -.855
+(AT)-.666 G F0(on bash-5.0 and later v)3.105 E(ersions.)-.15 E 1.614
+(The follo)108 417.6 R 1.613(wing table describes the beha)-.25 F 1.613
+(vior changes controlled by each compatibility le)-.2 F -.15(ve)-.25 G
+4.113(ls).15 G 4.113(etting. The)-4.113 F F1(compat)108 429.6 Q F3(NN)A
+F0 1.186(tag is used as shorthand for setting the compatibility le)3.685
+F -.15(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F3(NN)3.686 E F0 1.186
+(using one of the follo)3.686 F(wing)-.25 E 3.807(mechanisms. F)108
+441.6 R 1.307(or v)-.15 F 1.307
+(ersions prior to bash-5.0, the compatibility le)-.15 F -.15(ve)-.25 G
+3.806(lm).15 G 1.306(ay be set using the corresponding)-3.806 F F1
+(compat)108 453.6 Q F3(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502
+G 3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the)
+-.15 F F4 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va)
+3.607 G .502(riable is preferred, and it).25 F
+(is required for bash-5.1 and later v)108 465.6 Q(ersions.)-.15 E F1
+(compat31)108 482.4 Q F0<83>144 494.4 Q(quoting the rhs of the)180 494.4
+Q F1([[)2.5 E F0(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15
+G 2.5(pm).15 G(atching operator \(=~\) has no special ef)-2.5 E(fect)
+-.25 E F1(compat32)108 511.2 Q F0<83>144 523.2 Q .35
+(interrupting a command list such as "a ; b ; c" causes the e)180 523.2
+R -.15(xe)-.15 G .35(cution of the ne).15 F .35(xt command)-.15 F .017
+(in the list \(in bash-4.0 and later v)180 535.2 R .018
+(ersions, the shell acts as if it recei)-.15 F -.15(ve)-.25 G 2.518(dt)
+.15 G .018(he interrupt, so in-)-2.518 F
+(terrupting one command in a list aborts the e)180 547.2 Q -.15(xe)-.15
+G(cution of the entire list\)).15 E F1(compat40)108 564 Q F0<83>144 576
+Q(the)180 576 Q F1(<)2.674 E F0(and)2.674 E F1(>)2.673 E F0 .173
+(operators to the)2.673 F F1([[)2.673 E F0 .173
+(command do not consider the current locale when compar)2.673 F(-)-.2 E
+.067(ing strings; the)180 588 R 2.567(yu)-.15 G .067(se ASCII ordering.)
+-2.567 F .068(Bash v)5.068 F .068
+(ersions prior to bash-4.1 use ASCII collation)-.15 F(and)180 600 Q F3
+(str)4.743 E(cmp)-.37 E F0 1.903
+(\(3\); bash-4.1 and later use the current locale').19 F 4.402(sc)-.55 G
+1.902(ollation sequence and)-4.402 F F3(str)4.742 E(-)-.2 E(coll)180 612
+Q F0(\(3\).).51 E F1(compat41)108 628.8 Q F0<83>144 640.8 Q(in)180 640.8
+Q F3(posix)3.79 E F0(mode,)3.79 E F1(time)3.79 E F0 1.29(may be follo)
+3.79 F 1.29(wed by options and still be recognized as a reserv)-.25 F
+(ed)-.15 E -.1(wo)180 652.8 S(rd \(this is POSIX interpretation 267\)).1
+E<83>144 664.8 Q(in)180 664.8 Q F3(posix)2.709 E F0 .208
+(mode, the parser requires that an e)2.709 F -.15(ve)-.25 G 2.708(nn).15
+G .208(umber of single quotes occur in the)-2.708 F F3(wor)2.708 E(d)
+-.37 E F0 .281(portion of a double-quoted parameter e)180 676.8 R .282
+(xpansion and treats them specially)-.15 F 2.782(,s)-.65 G 2.782(ot)
+-2.782 G .282(hat charac-)-2.782 F(ters within the single quotes are co\
+nsidered quoted \(this is POSIX interpretation 221\))180 688.8 Q F1
+(compat42)108 705.6 Q F0<83>144 717.6 Q 1.056(the replacement string in\
+ double-quoted pattern substitution does not under)180 717.6 R 1.055
+(go quote re-)-.18 F(mo)180 729.6 Q -.25(va)-.15 G(l, as it does in v)
+.25 E(ersions after bash-4.2)-.15 E(GNU Bash 5.2)72 768 Q
+(2022 September 19)135.955 E(84)185.115 E 0 Cg EP
+%%Page: 85 85
+%%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>144 84 Q .021
+(in posix mode, single quotes are considered special when e)180 84 R
+.021(xpanding the)-.15 F/F1 10/Times-Italic@0 SF(wor)2.521 E(d)-.37 E F0
+.021(portion of a)2.521 F .018(double-quoted parameter e)180 96 R .017
+(xpansion and can be used to quote a closing brace or other spe-)-.15 F
+.998(cial character \(this is part of POSIX interpretation 221\); in la\
+ter v)180 108 R .999(ersions, single quotes)-.15 F
+(are not special within double-quoted w)180 120 Q(ord e)-.1 E(xpansions)
+-.15 E/F2 10/Times-Bold@0 SF(compat43)108 136.8 Q F0<83>144 148.8 Q
+1.071(the shell does not print a w)180 148.8 R 1.07
+(arning message if an attempt is made to use a quoted com-)-.1 F .71
+(pound assignment as an ar)180 160.8 R .711
+(gument to declare \(e.g., declare -a foo=\010\(1 2\)\010\). Later v)
+-.18 F(ersions)-.15 E -.1(wa)180 172.8 S
+(rn that this usage is deprecated).1 E<83>144 184.8 Q -.1(wo)180 184.8 S
+.501(rd e).1 F .501(xpansion errors are considered non-f)-.15 F .501
+(atal errors that cause the current command to)-.1 F -.1(fa)180 196.8 S
+.605(il, e).1 F -.15(ve)-.25 G 3.105(ni).15 G 3.105(np)-3.105 G .605
+(osix mode \(the def)-3.105 F .605(ault beha)-.1 F .605(vior is to mak)
+-.2 F 3.105(et)-.1 G .605(hem f)-3.105 F .605
+(atal errors that cause the)-.1 F(shell to e)180 208.8 Q(xit\))-.15 E
+<83>144 220.8 Q .355(when e)180 220.8 R -.15(xe)-.15 G .354
+(cuting a shell function, the loop state \(while/until/etc.\)).15 F .354
+(is not reset, so)5.354 F F2(br)2.854 E(eak)-.18 E F0(or)2.854 E F2
+(continue)180 232.8 Q F0 .052
+(in that function will break or continue loops in the calling conte)
+2.552 F .053(xt. Bash-4.4 and)-.15 F(later reset the loop state to pre)
+180 244.8 Q -.15(ve)-.25 G(nt this).15 E F2(compat44)108 261.6 Q F0<83>
+144 273.6 Q .719(the shell sets up the v)180 273.6 R .719(alues used by)
+-.25 F/F3 9/Times-Bold@0 SF -.27(BA)3.219 G(SH_ARGV).27 E F0(and)2.969 E
+F3 -.27(BA)3.219 G(SH_ARGC).27 E F0 .719(so the)2.969 F 3.218(yc)-.15 G
+.718(an e)-3.218 F(xpand)-.15 E(to the shell')180 285.6 Q 2.5(sp)-.55 G
+(ositional parameters e)-2.5 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(fe)-2.5 G
+(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>144 297.6 Q
+2.634(as)180 297.6 S .134(ubshell inherits loops from its parent conte)
+-2.634 F .135(xt, so)-.15 F F2(br)2.635 E(eak)-.18 E F0(or)2.635 E F2
+(continue)2.635 E F0 .135(will cause the sub-)2.635 F(shell to e)180
+309.6 Q 2.5(xit. Bash-5.0)-.15 F(and later reset the loop state to pre)
+2.5 E -.15(ve)-.25 G(nt the e).15 E(xit)-.15 E<83>144 321.6 Q -.25(va)
+180 321.6 S .619(riable assignments preceding b).25 F .618(uiltins lik)
+-.2 F(e)-.1 E F2(export)3.118 E F0(and)3.118 E F2 -.18(re)3.118 G
+(adonly).18 E F0 .618(that set attrib)3.118 F .618(utes con-)-.2 F .119
+(tinue to af)180 333.6 R .119(fect v)-.25 F .119
+(ariables with the same name in the calling en)-.25 F .12(vironment e)
+-.4 F -.15(ve)-.25 G 2.62(ni).15 G 2.62(ft)-2.62 G .12(he shell is)-2.62
+F(not in posix mode)180 345.6 Q F2(compat50)108 362.4 Q F0<83>144 374.4
+Q 1.209(Bash-5.1 changed the w)180 374.4 R(ay)-.1 E F3($RANDOM)3.709 E
+F0 1.209(is generated to introduce slightly more random-)3.459 F 1.018
+(ness. If the shell compatibility le)180 386.4 R -.15(ve)-.25 G 3.518
+(li).15 G 3.518(ss)-3.518 G 1.018(et to 50 or lo)-3.518 F(wer)-.25 E
+3.518(,i)-.4 G 3.518(tr)-3.518 G -2.15 -.25(ev e)-3.518 H 1.019
+(rts to the method from).25 F .733(bash-5.0 and pre)180 398.4 R .733
+(vious v)-.25 F .732
+(ersions, so seeding the random number generator by assigning a)-.15 F
+-.25(va)180 410.4 S(lue to).25 E F3(RANDOM)2.5 E F0
+(will produce the same sequence as in bash-5.0)2.25 E<83>144 422.4 Q
+.695(If the command hash table is empty)180 422.4 R 3.196(,b)-.65 G .696
+(ash v)-3.196 F .696(ersions prior to bash-5.1 printed an informa-)-.15
+F 1.321(tional message to that ef)180 434.4 R 1.321(fect, e)-.25 F -.15
+(ve)-.25 G 3.821(nw).15 G 1.321
+(hen producing output that can be reused as input.)-3.821 F
+(Bash-5.1 suppresses that message when the)180 446.4 Q F2<ad6c>2.5 E F0
+(option is supplied.)2.5 E F2(compat51)108 463.2 Q F0<83>144 475.2 Q
+(The)180 475.2 Q F2(unset)2.954 E F0 -.2(bu)2.954 G .454
+(iltin treats attempts to unset array subscripts).2 F F2(@)2.955 E F0
+(and)2.955 E F2(*)2.955 E F0(dif)2.955 E .455(ferently depending)-.25 F
+(on whether the array is inde)180 487.2 Q -.15(xe)-.15 G 2.5(do).15 G
+2.5(ra)-2.5 G(ssociati)-2.5 E -.15(ve)-.25 G 2.5(,a).15 G(nd dif)-2.5 E
+(ferently than in pre)-.25 E(vious v)-.25 E(ersions.)-.15 E/F4 10.95
+/Times-Bold@0 SF(RESTRICTED SHELL)72 504 Q F0(If)108 516 Q F2(bash)3.582
+E F0 1.081(is started with the name)3.581 F F2(rbash)3.581 E F0 3.581
+(,o)C 3.581(rt)-3.581 G(he)-3.581 E F2<ad72>3.581 E F0 1.081
+(option is supplied at in)3.581 F -.2(vo)-.4 G 1.081
+(cation, the shell becomes re-).2 F 2.976(stricted. A)108 528 R .476
+(restricted shell is used to set up an en)2.976 F .476
+(vironment more controlled than the standard shell.)-.4 F .477(It be-)
+5.477 F(ha)108 540 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 556.8 Q
+(changing directories with)144 556.8 Q F2(cd)2.5 E F0<83>108 573.6 Q
+(setting or unsetting the v)144 573.6 Q(alues of)-.25 E F3(SHELL)2.5 E
+/F5 9/Times-Roman@0 SF(,)A F3 -.666(PA)2.25 G(TH)-.189 E F5(,)A F3
+(HISTFILE)2.25 E F5(,)A F3(ENV)2.25 E F5(,)A F0(or)2.25 E F3 -.27(BA)2.5
+G(SH_ENV).27 E F0<83>108 590.4 Q(specifying command names containing)144
+590.4 Q F2(/)2.5 E F0<83>108 607.2 Q
+(specifying a \214lename containing a)144 607.2 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 624 Q
+(specifying a \214lename containing a slash as an ar)144 624 Q
+(gument to the)-.18 E F2(history)2.5 E F0 -.2(bu)2.5 G(iltin command).2
+E<83>108 640.8 Q .45
+(specifying a \214lename containing a slash as an ar)144 640.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 652.8 Q
+<83>108 669.6 Q(importing function de\214nitions from the shell en)144
+669.6 Q(vironment at startup)-.4 E<83>108 686.4 Q(parsing the v)144
+686.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 703.2 Q(redirecting output using the\
+ >, >|, <>, >&, &>, and >> redirection operators)144 703.2 Q
+(GNU Bash 5.2)72 768 Q(2022 September 19)135.955 E(85)185.115 E 0 Cg EP
+%%Page: 86 86
+%%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
+(using the)144 84 Q/F1 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
+100.8 Q(adding or deleting b)144 100.8 Q(uiltin commands with the)-.2 E
+F1<ad66>2.5 E F0(and)2.5 E F1<ad64>2.5 E F0(options to the)2.5 E F1
+(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 117.6 Q
+(using the)144 117.6 Q F1(enable)2.5 E F0 -.2(bu)2.5 G
+(iltin command to enable disabled shell b).2 E(uiltins)-.2 E<83>108
+134.4 Q(specifying the)144 134.4 Q F1<ad70>2.5 E F0(option to the)2.5 E
+F1(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E<83>108 151.2 Q
+(turning of)144 151.2 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F1
+(set +r)2.5 E F0(or)2.5 E F1(shopt -u r)2.5 E(estricted_shell)-.18 E F0
+(.)A(These restrictions are enforced after an)108 168 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 184.8 R -.15
+(xe)-.15 G 1.567(cuted \(see).15 F/F2 9/Times-Bold@0 SF 1.567
+(COMMAND EXECUTION)4.067 F F0(abo)3.817 E -.15(ve)-.15 G(\),).15 E F1
+(rbash)108 196.8 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 213.6 Q/F4
+10/Times-Italic@0 SF(Bash Refer)108 225.6 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 237.6 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 249.6 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 261.6 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 273.6 Q
+(g/onlinepubs/9699919799/)-.18 E(http://tiswww)108 285.6 Q
+(.case.edu/~chet/bash/POSIX -- a description of posix mode)-.65 E F4(sh)
+108 297.6 Q F0(\(1\),)A F4(ksh)2.5 E F0(\(1\),)A F4(csh)2.5 E F0(\(1\))A
+F4(emacs)108 309.6 Q F0(\(1\),)A F4(vi)2.5 E F0(\(1\))A F4 -.37(re)108
+321.6 S(adline).37 E F0(\(3\))A F3(FILES)72 338.4 Q F4(/bin/bash)109.666
+350.4 Q F0(The)144 362.4 Q F1(bash)2.5 E F0 -.15(exe)2.5 G(cutable).15 E
+F4(/etc/pr)109.666 374.4 Q(o\214le)-.45 E F0
+(The systemwide initialization \214le, e)144 386.4 Q -.15(xe)-.15 G
+(cuted for login shells).15 E F4(~/.bash_pr)109.666 398.4 Q(o\214le)-.45
+E F0(The personal initialization \214le, e)144 410.4 Q -.15(xe)-.15 G
+(cuted for login shells).15 E F4(~/.bashr)109.666 422.4 Q(c)-.37 E F0
+(The indi)144 434.4 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G
+(-shell startup \214le).15 E F4(~/.bash_lo)109.666 446.4 Q(gout)-.1 E F0
+(The indi)144 458.4 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
+(~/.bash_history)109.666 470.4 Q F0(The def)144 482.4 Q(ault v)-.1 E
+(alue of)-.25 E F1(HISTFILE)2.5 E F0 2.5(,t)C
+(he \214le in which bash sa)-2.5 E -.15(ve)-.2 G 2.5(st).15 G
+(he command history)-2.5 E F4(~/.inputr)109.666 494.4 Q(c)-.37 E F0
+(Indi)144 506.4 Q(vidual)-.25 E F4 -.37(re)2.5 G(adline).37 E F0
+(initialization \214le)2.5 E F3 -.548(AU)72 523.2 S(THORS).548 E F0
+(Brian F)108 535.2 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E
+(bfox@gnu.or)108 547.2 Q(g)-.18 E(Chet Rame)108 564 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 576 Q(y@case.edu)-.15 E F3 -.11(BU)72 592.8 S
+2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .568(If you \214nd a b)108
+604.8 R .568(ug in)-.2 F F1(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 616.8 R 5.625(ersion of)-.15 F F1
+(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 628.8 Q(g/pub/gnu/bash/)-.37
+E F0(and)2.5 E F4(http://git.savannah.gnu.or)2.5 E
+(g/cgit/bash.git/snapshot/bash-master)-.37 E(.tar)-1.11 E(.gz)-1.11 E F0
+(.)A .411(Once you ha)108 645.6 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 657.6 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 669.6 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 F1(gnu.bash.b)2.5 E(ug)
+-.2 E F0(.)A(ALL b)108 686.4 Q(ug reports should include:)-.2 E(The v)
+108 703.2 Q(ersion number of)-.15 E F1(bash)2.5 E F0(GNU Bash 5.2)72 768
+Q(2022 September 19)135.955 E(86)185.115 E 0 Cg EP
+%%Page: 87 87
+%%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 hardw)108 84 Q
+(are and operating system)-.1 E(The compiler used to compile)108 96 Q
+2.5(Ad)108 108 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2 E
+2.5(As)108 120 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15 G
+(rcises the b).15 E(ug)-.2 E/F1 10/Times-Italic@0 SF(bashb)108.27 136.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
+153.6 Q(ug reports concerning this manual page should be directed to)-.2
+E F1 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.)
+.25 E/F2 10.95/Times-Bold@0 SF -.11(BU)72 170.4 S(GS).11 E F0(It')108
+182.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 199.2 R 1.869(ferences between)-.25 F/F3
+10/Times-Bold@0 SF(bash)4.369 E F0 1.869(and traditional v)4.369 F 1.869
+(ersions of)-.15 F F3(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 211.2 Q F0
+(speci\214cation.)2.25 E(Aliases are confusing in some uses.)108 228 Q
+(Shell b)108 244.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 261.6 R .39
+(process suspension is attempted.)108 273.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 285.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 297.6 Q(Array v)108
+314.4 Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E
+(There may be only one acti)108 331.2 Q .3 -.15(ve c)-.25 H
+(oprocess at a time.).15 E(GNU Bash 5.2)72 768 Q(2022 September 19)
+135.955 E(87)185.115 E 0 Cg EP
+%%Trailer
+end
+%%EOF
diff --git a/doc/bashbug.0 b/doc/bashbug.0
new file mode 100644
index 0000000..58f08de
--- /dev/null
+++ b/doc/bashbug.0
@@ -0,0 +1,52 @@
+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. If bbaasshhbbuugg cannot locate any of the alternative editors,
+ it attempts to execute 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 5.2 2020 August 1 BASHBUG(1)
diff --git a/doc/bashbug.1 b/doc/bashbug.1
new file mode 100644
index 0000000..abcaf48
--- /dev/null
+++ b/doc/bashbug.1
@@ -0,0 +1,67 @@
+.\"
+.\" MAN PAGE COMMENTS to
+.\"
+.\" Chet Ramey
+.\" Case Western Reserve University
+.\" chet@po.cwru.edu
+.\"
+.\" Last Change: Sun Aug 2 15:39:07 EDT 2020
+.\"
+.TH BASHBUG 1 "2020 August 1" "GNU Bash 5.1"
+.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 .
+If
+.B bashbug
+cannot locate any of the alternative editors, it attempts to execute \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..55fe45c
--- /dev/null
+++ b/doc/bashbug.ps
@@ -0,0 +1,297 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.22.4
+%%CreationDate: Tue Jan 11 16:04:43 2022
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.22 4
+%%Pages: 1
+%%PageOrder: Ascend
+%%DocumentMedia: Default 612 792 0 () ()
+%%Orientation: Portrait
+%%EndComments
+%%BeginDefaults
+%%PageMedia: Default
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset grops 1.22 4
+%!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
+1.925 -.15(ve e)-.25 H 1.625(ditors, including).15 F F2(emacs)4.125 E F0
+6.625(.I)C(f)-6.625 E F2(bashb)4.125 E(ug)-.2 E F0 1.625
+(cannot locate an)4.125 F 4.125(yo)-.15 G 4.125(ft)-4.125 G 1.625
+(he alternati)-4.125 F 1.925 -.15(ve e)-.25 H 1.625(ditors, it at-).15 F
+(tempts to e)144 336 Q -.15(xe)-.15 G(cute).15 E F2(vi)2.5 E F0(.)A F2
+(HOME)108 352.8 Q F0(Directory in which the f)144 364.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 381.6 Q F0
+(Directory in which to create temporary \214les and directories.)144
+393.6 Q F1(SEE ALSO)72 410.4 Q F3(bash)108 422.4 Q F0(\(1\))A F1 -.548
+(AU)72 439.2 S(THORS).548 E F0(Brian F)108 451.2 Q(ox, Free Softw)-.15 E
+(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 463.2 Q(g)-.18 E
+(Chet Rame)108 480 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 492 Q(GNU Bash 5.2)72 768 Q(2020 August 1)145.395 E(1)199.555 E 0 Cg
+EP
+%%Trailer
+end
+%%EOF
diff --git a/doc/bashref.dvi b/doc/bashref.dvi
new file mode 100644
index 0000000..a7a571b
--- /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..928b3ff
--- /dev/null
+++ b/doc/bashref.html
@@ -0,0 +1,16033 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Created by GNU Texinfo 6.8, https://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<!-- This text is a brief description of the features that are present in
+the Bash shell (version 5.2, 19 September 2022).
+
+This is Edition 5.2, last updated 19 September 2022,
+of The GNU Bash Reference Manual,
+for Bash, Version 5.2.
+
+Copyright (C) 1988-2022 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". -->
+<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">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+
+<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)">
+<link href="#Introduction" rel="next" title="Introduction">
+<link href="dir.html#Top" rel="prev" title="(dir)">
+<style type="text/css">
+<!--
+a.copiable-anchor {visibility: hidden; text-decoration: none; line-height: 0em}
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {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}
+span.nolinebreak {white-space: nowrap}
+span.roman {font-family: initial; font-weight: normal}
+span.sansserif {font-family: sans-serif; font-weight: normal}
+span:hover a.copiable-anchor {visibility: visible}
+ul.no-bullet {list-style: none}
+-->
+</style>
+
+
+</head>
+
+<body lang="en">
+<h1 class="settitle" align="center">Bash Reference Manual</h1>
+
+
+
+
+
+
+
+
+
+
+
+<div class="top" id="Top">
+<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>
+<span id="Bash-Features-1"></span><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.2, 19 September 2022).
+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.2, last updated 19 September 2022,
+of <cite>The GNU Bash Reference Manual</cite>,
+for <code>Bash</code>, Version 5.2.
+</p>
+<p>Bash contains features that appear in other popular shells, and some
+features that only appear in Bash. Some of the shells that Bash has
+borrowed concepts from are the Bourne Shell (<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>
+
+<div class="Contents_element" id="SEC_Contents">
+<h2 class="contents-heading">Table of Contents</h2>
+
+<div class="contents">
+
+<ul class="no-bullet">
+ <li><a id="toc-Introduction-1" href="#Introduction">1 Introduction</a>
+ <ul class="no-bullet">
+ <li><a id="toc-What-is-Bash_003f-1" href="#What-is-Bash_003f">1.1 What is Bash?</a></li>
+ <li><a id="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 id="toc-Definitions-1" href="#Definitions">2 Definitions</a></li>
+ <li><a id="toc-Basic-Shell-Features-1" href="#Basic-Shell-Features">3 Basic Shell Features</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Shell-Syntax-1" href="#Shell-Syntax">3.1 Shell Syntax</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Shell-Operation-1" href="#Shell-Operation">3.1.1 Shell Operation</a></li>
+ <li><a id="toc-Quoting-1" href="#Quoting">3.1.2 Quoting</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Escape-Character-1" href="#Escape-Character">3.1.2.1 Escape Character</a></li>
+ <li><a id="toc-Single-Quotes-1" href="#Single-Quotes">3.1.2.2 Single Quotes</a></li>
+ <li><a id="toc-Double-Quotes-1" href="#Double-Quotes">3.1.2.3 Double Quotes</a></li>
+ <li><a id="toc-ANSI_002dC-Quoting-1" href="#ANSI_002dC-Quoting">3.1.2.4 ANSI-C Quoting</a></li>
+ <li><a id="toc-Locale_002dSpecific-Translation" href="#Locale-Translation">3.1.2.5 Locale-Specific Translation</a></li>
+ </ul></li>
+ <li><a id="toc-Comments-1" href="#Comments">3.1.3 Comments</a></li>
+ </ul></li>
+ <li><a id="toc-Shell-Commands-1" href="#Shell-Commands">3.2 Shell Commands</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Reserved-Words-1" href="#Reserved-Words">3.2.1 Reserved Words</a></li>
+ <li><a id="toc-Simple-Commands-1" href="#Simple-Commands">3.2.2 Simple Commands</a></li>
+ <li><a id="toc-Pipelines-1" href="#Pipelines">3.2.3 Pipelines</a></li>
+ <li><a id="toc-Lists-of-Commands" href="#Lists">3.2.4 Lists of Commands</a></li>
+ <li><a id="toc-Compound-Commands-1" href="#Compound-Commands">3.2.5 Compound Commands</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Looping-Constructs-1" href="#Looping-Constructs">3.2.5.1 Looping Constructs</a></li>
+ <li><a id="toc-Conditional-Constructs-1" href="#Conditional-Constructs">3.2.5.2 Conditional Constructs</a></li>
+ <li><a id="toc-Grouping-Commands" href="#Command-Grouping">3.2.5.3 Grouping Commands</a></li>
+ </ul></li>
+ <li><a id="toc-Coprocesses-1" href="#Coprocesses">3.2.6 Coprocesses</a></li>
+ <li><a id="toc-GNU-Parallel-1" href="#GNU-Parallel">3.2.7 GNU Parallel</a></li>
+ </ul></li>
+ <li><a id="toc-Shell-Functions-1" href="#Shell-Functions">3.3 Shell Functions</a></li>
+ <li><a id="toc-Shell-Parameters-1" href="#Shell-Parameters">3.4 Shell Parameters</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Positional-Parameters-1" href="#Positional-Parameters">3.4.1 Positional Parameters</a></li>
+ <li><a id="toc-Special-Parameters-1" href="#Special-Parameters">3.4.2 Special Parameters</a></li>
+ </ul></li>
+ <li><a id="toc-Shell-Expansions-1" href="#Shell-Expansions">3.5 Shell Expansions</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Brace-Expansion-1" href="#Brace-Expansion">3.5.1 Brace Expansion</a></li>
+ <li><a id="toc-Tilde-Expansion-1" href="#Tilde-Expansion">3.5.2 Tilde Expansion</a></li>
+ <li><a id="toc-Shell-Parameter-Expansion-1" href="#Shell-Parameter-Expansion">3.5.3 Shell Parameter Expansion</a></li>
+ <li><a id="toc-Command-Substitution-1" href="#Command-Substitution">3.5.4 Command Substitution</a></li>
+ <li><a id="toc-Arithmetic-Expansion-1" href="#Arithmetic-Expansion">3.5.5 Arithmetic Expansion</a></li>
+ <li><a id="toc-Process-Substitution-1" href="#Process-Substitution">3.5.6 Process Substitution</a></li>
+ <li><a id="toc-Word-Splitting-1" href="#Word-Splitting">3.5.7 Word Splitting</a></li>
+ <li><a id="toc-Filename-Expansion-1" href="#Filename-Expansion">3.5.8 Filename Expansion</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Pattern-Matching-1" href="#Pattern-Matching">3.5.8.1 Pattern Matching</a></li>
+ </ul></li>
+ <li><a id="toc-Quote-Removal-1" href="#Quote-Removal">3.5.9 Quote Removal</a></li>
+ </ul></li>
+ <li><a id="toc-Redirections-1" href="#Redirections">3.6 Redirections</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Redirecting-Input" href="#Redirecting-Input">3.6.1 Redirecting Input</a></li>
+ <li><a id="toc-Redirecting-Output" href="#Redirecting-Output">3.6.2 Redirecting Output</a></li>
+ <li><a id="toc-Appending-Redirected-Output" href="#Appending-Redirected-Output">3.6.3 Appending Redirected Output</a></li>
+ <li><a id="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 id="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 id="toc-Here-Documents" href="#Here-Documents">3.6.6 Here Documents</a></li>
+ <li><a id="toc-Here-Strings" href="#Here-Strings">3.6.7 Here Strings</a></li>
+ <li><a id="toc-Duplicating-File-Descriptors" href="#Duplicating-File-Descriptors">3.6.8 Duplicating File Descriptors</a></li>
+ <li><a id="toc-Moving-File-Descriptors" href="#Moving-File-Descriptors">3.6.9 Moving File Descriptors</a></li>
+ <li><a id="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 id="toc-Executing-Commands-1" href="#Executing-Commands">3.7 Executing Commands</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Simple-Command-Expansion-1" href="#Simple-Command-Expansion">3.7.1 Simple Command Expansion</a></li>
+ <li><a id="toc-Command-Search-and-Execution-1" href="#Command-Search-and-Execution">3.7.2 Command Search and Execution</a></li>
+ <li><a id="toc-Command-Execution-Environment-1" href="#Command-Execution-Environment">3.7.3 Command Execution Environment</a></li>
+ <li><a id="toc-Environment-1" href="#Environment">3.7.4 Environment</a></li>
+ <li><a id="toc-Exit-Status-1" href="#Exit-Status">3.7.5 Exit Status</a></li>
+ <li><a id="toc-Signals-1" href="#Signals">3.7.6 Signals</a></li>
+ </ul></li>
+ <li><a id="toc-Shell-Scripts-1" href="#Shell-Scripts">3.8 Shell Scripts</a></li>
+ </ul></li>
+ <li><a id="toc-Shell-Builtin-Commands-1" href="#Shell-Builtin-Commands">4 Shell Builtin Commands</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Bourne-Shell-Builtins-1" href="#Bourne-Shell-Builtins">4.1 Bourne Shell Builtins</a></li>
+ <li><a id="toc-Bash-Builtin-Commands" href="#Bash-Builtins">4.2 Bash Builtin Commands</a></li>
+ <li><a id="toc-Modifying-Shell-Behavior-1" href="#Modifying-Shell-Behavior">4.3 Modifying Shell Behavior</a>
+ <ul class="no-bullet">
+ <li><a id="toc-The-Set-Builtin-1" href="#The-Set-Builtin">4.3.1 The Set Builtin</a></li>
+ <li><a id="toc-The-Shopt-Builtin-1" href="#The-Shopt-Builtin">4.3.2 The Shopt Builtin</a></li>
+ </ul></li>
+ <li><a id="toc-Special-Builtins-1" href="#Special-Builtins">4.4 Special Builtins</a></li>
+ </ul></li>
+ <li><a id="toc-Shell-Variables-1" href="#Shell-Variables">5 Shell Variables</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Bourne-Shell-Variables-1" href="#Bourne-Shell-Variables">5.1 Bourne Shell Variables</a></li>
+ <li><a id="toc-Bash-Variables-1" href="#Bash-Variables">5.2 Bash Variables</a></li>
+ </ul></li>
+ <li><a id="toc-Bash-Features-2" href="#Bash-Features">6 Bash Features</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Invoking-Bash-1" href="#Invoking-Bash">6.1 Invoking Bash</a></li>
+ <li><a id="toc-Bash-Startup-Files-1" href="#Bash-Startup-Files">6.2 Bash Startup Files</a></li>
+ <li><a id="toc-Interactive-Shells-1" href="#Interactive-Shells">6.3 Interactive Shells</a>
+ <ul class="no-bullet">
+ <li><a id="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 id="toc-Is-this-Shell-Interactive_003f-1" href="#Is-this-Shell-Interactive_003f">6.3.2 Is this Shell Interactive?</a></li>
+ <li><a id="toc-Interactive-Shell-Behavior-1" href="#Interactive-Shell-Behavior">6.3.3 Interactive Shell Behavior</a></li>
+ </ul></li>
+ <li><a id="toc-Bash-Conditional-Expressions-1" href="#Bash-Conditional-Expressions">6.4 Bash Conditional Expressions</a></li>
+ <li><a id="toc-Shell-Arithmetic-1" href="#Shell-Arithmetic">6.5 Shell Arithmetic</a></li>
+ <li><a id="toc-Aliases-1" href="#Aliases">6.6 Aliases</a></li>
+ <li><a id="toc-Arrays-1" href="#Arrays">6.7 Arrays</a></li>
+ <li><a id="toc-The-Directory-Stack-1" href="#The-Directory-Stack">6.8 The Directory Stack</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Directory-Stack-Builtins-1" href="#Directory-Stack-Builtins">6.8.1 Directory Stack Builtins</a></li>
+ </ul></li>
+ <li><a id="toc-Controlling-the-Prompt-1" href="#Controlling-the-Prompt">6.9 Controlling the Prompt</a></li>
+ <li><a id="toc-The-Restricted-Shell-1" href="#The-Restricted-Shell">6.10 The Restricted Shell</a></li>
+ <li><a id="toc-Bash-POSIX-Mode-1" href="#Bash-POSIX-Mode">6.11 Bash POSIX Mode</a></li>
+ <li><a id="toc-Shell-Compatibility-Mode-1" href="#Shell-Compatibility-Mode">6.12 Shell Compatibility Mode</a></li>
+ </ul></li>
+ <li><a id="toc-Job-Control-1" href="#Job-Control">7 Job Control</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Job-Control-Basics-1" href="#Job-Control-Basics">7.1 Job Control Basics</a></li>
+ <li><a id="toc-Job-Control-Builtins-1" href="#Job-Control-Builtins">7.2 Job Control Builtins</a></li>
+ <li><a id="toc-Job-Control-Variables-1" href="#Job-Control-Variables">7.3 Job Control Variables</a></li>
+ </ul></li>
+ <li><a id="toc-Command-Line-Editing-1" href="#Command-Line-Editing">8 Command Line Editing</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Introduction-to-Line-Editing" href="#Introduction-and-Notation">8.1 Introduction to Line Editing</a></li>
+ <li><a id="toc-Readline-Interaction-1" href="#Readline-Interaction">8.2 Readline Interaction</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Readline-Bare-Essentials-1" href="#Readline-Bare-Essentials">8.2.1 Readline Bare Essentials</a></li>
+ <li><a id="toc-Readline-Movement-Commands-1" href="#Readline-Movement-Commands">8.2.2 Readline Movement Commands</a></li>
+ <li><a id="toc-Readline-Killing-Commands-1" href="#Readline-Killing-Commands">8.2.3 Readline Killing Commands</a></li>
+ <li><a id="toc-Readline-Arguments-1" href="#Readline-Arguments">8.2.4 Readline Arguments</a></li>
+ <li><a id="toc-Searching-for-Commands-in-the-History" href="#Searching">8.2.5 Searching for Commands in the History</a></li>
+ </ul></li>
+ <li><a id="toc-Readline-Init-File-1" href="#Readline-Init-File">8.3 Readline Init File</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Readline-Init-File-Syntax-1" href="#Readline-Init-File-Syntax">8.3.1 Readline Init File Syntax</a></li>
+ <li><a id="toc-Conditional-Init-Constructs-1" href="#Conditional-Init-Constructs">8.3.2 Conditional Init Constructs</a></li>
+ <li><a id="toc-Sample-Init-File-1" href="#Sample-Init-File">8.3.3 Sample Init File</a></li>
+ </ul></li>
+ <li><a id="toc-Bindable-Readline-Commands-1" href="#Bindable-Readline-Commands">8.4 Bindable Readline Commands</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Commands-For-Moving-1" href="#Commands-For-Moving">8.4.1 Commands For Moving</a></li>
+ <li><a id="toc-Commands-For-Manipulating-The-History" href="#Commands-For-History">8.4.2 Commands For Manipulating The History</a></li>
+ <li><a id="toc-Commands-For-Changing-Text" href="#Commands-For-Text">8.4.3 Commands For Changing Text</a></li>
+ <li><a id="toc-Killing-And-Yanking" href="#Commands-For-Killing">8.4.4 Killing And Yanking</a></li>
+ <li><a id="toc-Specifying-Numeric-Arguments" href="#Numeric-Arguments">8.4.5 Specifying Numeric Arguments</a></li>
+ <li><a id="toc-Letting-Readline-Type-For-You" href="#Commands-For-Completion">8.4.6 Letting Readline Type For You</a></li>
+ <li><a id="toc-Keyboard-Macros-1" href="#Keyboard-Macros">8.4.7 Keyboard Macros</a></li>
+ <li><a id="toc-Some-Miscellaneous-Commands" href="#Miscellaneous-Commands">8.4.8 Some Miscellaneous Commands</a></li>
+ </ul></li>
+ <li><a id="toc-Readline-vi-Mode-1" href="#Readline-vi-Mode">8.5 Readline vi Mode</a></li>
+ <li><a id="toc-Programmable-Completion-1" href="#Programmable-Completion">8.6 Programmable Completion</a></li>
+ <li><a id="toc-Programmable-Completion-Builtins-1" href="#Programmable-Completion-Builtins">8.7 Programmable Completion Builtins</a></li>
+ <li><a id="toc-A-Programmable-Completion-Example-1" href="#A-Programmable-Completion-Example">8.8 A Programmable Completion Example</a></li>
+ </ul></li>
+ <li><a id="toc-Using-History-Interactively-1" href="#Using-History-Interactively">9 Using History Interactively</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Bash-History-Facilities-1" href="#Bash-History-Facilities">9.1 Bash History Facilities</a></li>
+ <li><a id="toc-Bash-History-Builtins-1" href="#Bash-History-Builtins">9.2 Bash History Builtins</a></li>
+ <li><a id="toc-History-Expansion" href="#History-Interaction">9.3 History Expansion</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Event-Designators-1" href="#Event-Designators">9.3.1 Event Designators</a></li>
+ <li><a id="toc-Word-Designators-1" href="#Word-Designators">9.3.2 Word Designators</a></li>
+ <li><a id="toc-Modifiers-1" href="#Modifiers">9.3.3 Modifiers</a></li>
+ </ul></li>
+ </ul></li>
+ <li><a id="toc-Installing-Bash-1" href="#Installing-Bash">10 Installing Bash</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Basic-Installation-1" href="#Basic-Installation">10.1 Basic Installation</a></li>
+ <li><a id="toc-Compilers-and-Options-1" href="#Compilers-and-Options">10.2 Compilers and Options</a></li>
+ <li><a id="toc-Compiling-For-Multiple-Architectures-1" href="#Compiling-For-Multiple-Architectures">10.3 Compiling For Multiple Architectures</a></li>
+ <li><a id="toc-Installation-Names-1" href="#Installation-Names">10.4 Installation Names</a></li>
+ <li><a id="toc-Specifying-the-System-Type-1" href="#Specifying-the-System-Type">10.5 Specifying the System Type</a></li>
+ <li><a id="toc-Sharing-Defaults-1" href="#Sharing-Defaults">10.6 Sharing Defaults</a></li>
+ <li><a id="toc-Operation-Controls-1" href="#Operation-Controls">10.7 Operation Controls</a></li>
+ <li><a id="toc-Optional-Features-1" href="#Optional-Features">10.8 Optional Features</a></li>
+ </ul></li>
+ <li><a id="toc-Reporting-Bugs-1" href="#Reporting-Bugs">Appendix A Reporting Bugs</a></li>
+ <li><a id="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 id="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 id="toc-GNU-Free-Documentation-License-1" href="#GNU-Free-Documentation-License">Appendix C GNU Free Documentation License</a></li>
+ <li><a id="toc-Indexes-1" href="#Indexes">Appendix D Indexes</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Index-of-Shell-Builtin-Commands" href="#Builtin-Index" rel="index">D.1 Index of Shell Builtin Commands</a></li>
+ <li><a id="toc-Index-of-Shell-Reserved-Words" href="#Reserved-Word-Index" rel="index">D.2 Index of Shell Reserved Words</a></li>
+ <li><a id="toc-Parameter-and-Variable-Index" href="#Variable-Index" rel="index">D.3 Parameter and Variable Index</a></li>
+ <li><a id="toc-Function-Index-1" href="#Function-Index" rel="index">D.4 Function Index</a></li>
+ <li><a id="toc-Concept-Index-1" href="#Concept-Index" rel="index">D.5 Concept Index</a></li>
+ </ul></li>
+</ul>
+</div>
+</div>
+<hr>
+<div class="chapter" id="Introduction">
+<div class="header">
+<p>
+Next: <a href="#Definitions" accesskey="n" rel="next">Definitions</a>, Up: <a href="#Top" 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>
+<span id="Introduction-1"></span><h2 class="chapter">1 Introduction</h2>
+
+<ul class="section-toc">
+<li><a href="#What-is-Bash_003f" accesskey="1">What is Bash?</a></li>
+<li><a href="#What-is-a-shell_003f" accesskey="2">What is a shell?</a></li>
+</ul>
+<hr>
+<div class="section" id="What-is-Bash_003f">
+<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>
+<span id="What-is-Bash_003f-1"></span><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>
+</div>
+<div class="section" id="What-is-a-shell_003f">
+<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>
+<span id="What-is-a-shell_003f-1"></span><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>
+</div>
+</div>
+<div class="chapter" id="Definitions">
+<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">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>
+<span id="Definitions-1"></span><h2 class="chapter">2 Definitions</h2>
+<p>These definitions are used throughout the remainder of this manual.
+</p>
+<dl compact="compact">
+<dt id='index-POSIX'><span><code>POSIX</code><a href='#index-POSIX' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>blank</code></span></dt>
+<dd><p>A space or tab character.
+</p>
+</dd>
+<dt id='index-builtin-1'><span><code>builtin</code><a href='#index-builtin-1' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-control-operator'><span><code>control operator</code><a href='#index-control-operator' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-exit-status'><span><code>exit status</code><a href='#index-exit-status' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-field'><span><code>field</code><a href='#index-field' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-filename'><span><code>filename</code><a href='#index-filename' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A string of characters used to identify a file.
+</p>
+</dd>
+<dt id='index-job'><span><code>job</code><a href='#index-job' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-job-control'><span><code>job control</code><a href='#index-job-control' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A mechanism by which users can selectively stop (suspend) and restart
+(resume) execution of processes.
+</p>
+</dd>
+<dt id='index-metacharacter'><span><code>metacharacter</code><a href='#index-metacharacter' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-name'><span><code>name</code><a href='#index-name' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-identifier"></span>
+<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 id='index-operator_002c-shell'><span><code>operator</code><a href='#index-operator_002c-shell' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-process-group'><span><code>process group</code><a href='#index-process-group' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A collection of related processes each having the same process
+group <small>ID</small>.
+</p>
+</dd>
+<dt id='index-process-group-ID'><span><code>process group ID</code><a href='#index-process-group-ID' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A unique identifier that represents a <code>process group</code>
+during its lifetime.
+</p>
+</dd>
+<dt id='index-reserved-word'><span><code>reserved word</code><a href='#index-reserved-word' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-return-status'><span><code>return status</code><a href='#index-return-status' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A synonym for <code>exit status</code>.
+</p>
+</dd>
+<dt id='index-signal'><span><code>signal</code><a href='#index-signal' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A mechanism by which a process may be notified by the kernel
+of an event occurring in the system.
+</p>
+</dd>
+<dt id='index-special-builtin'><span><code>special builtin</code><a href='#index-special-builtin' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A shell builtin command that has been classified as special by the
+<small>POSIX</small> standard.
+</p>
+</dd>
+<dt id='index-token'><span><code>token</code><a href='#index-token' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-word'><span><code>word</code><a href='#index-word' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A sequence of characters treated as a unit by the shell.
+Words may not include unquoted <code>metacharacters</code>.
+</p></dd>
+</dl>
+
+<hr>
+</div>
+<div class="chapter" id="Basic-Shell-Features">
+<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">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>
+<span id="Basic-Shell-Features-1"></span><h2 class="chapter">3 Basic Shell Features</h2>
+<span id="index-Bourne-shell"></span>
+
+<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>
+
+<ul class="section-toc">
+<li><a href="#Shell-Syntax" accesskey="1">Shell Syntax</a></li>
+<li><a href="#Shell-Commands" accesskey="2">Shell Commands</a></li>
+<li><a href="#Shell-Functions" accesskey="3">Shell Functions</a></li>
+<li><a href="#Shell-Parameters" accesskey="4">Shell Parameters</a></li>
+<li><a href="#Shell-Expansions" accesskey="5">Shell Expansions</a></li>
+<li><a href="#Redirections" accesskey="6">Redirections</a></li>
+<li><a href="#Executing-Commands" accesskey="7">Executing Commands</a></li>
+<li><a href="#Shell-Scripts" accesskey="8">Shell Scripts</a></li>
+</ul>
+<hr>
+<div class="section" id="Shell-Syntax">
+<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>
+<span id="Shell-Syntax-1"></span><h3 class="section">3.1 Shell Syntax</h3>
+
+<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>
+<ul class="section-toc">
+<li><a href="#Shell-Operation" accesskey="1">Shell Operation</a></li>
+<li><a href="#Quoting" accesskey="2">Quoting</a></li>
+<li><a href="#Comments" accesskey="3">Comments</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Shell-Operation">
+<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>
+<span id="Shell-Operation-1"></span><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>
+</div>
+<div class="subsection" id="Quoting">
+<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>
+<span id="Quoting-1"></span><h4 class="subsection">3.1.2 Quoting</h4>
+<span id="index-quoting"></span>
+
+<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 Expansion</a>), the
+<em>history expansion</em> 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
+<em>escape character</em>, single quotes, and double quotes.
+</p>
+<ul class="section-toc">
+<li><a href="#Escape-Character" accesskey="1">Escape Character</a></li>
+<li><a href="#Single-Quotes" accesskey="2">Single Quotes</a></li>
+<li><a href="#Double-Quotes" accesskey="3">Double Quotes</a></li>
+<li><a href="#ANSI_002dC-Quoting" accesskey="4">ANSI-C Quoting</a></li>
+<li><a href="#Locale-Translation" accesskey="5">Locale-Specific Translation</a></li>
+</ul>
+<hr>
+<div class="subsubsection" id="Escape-Character">
+<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>
+<span id="Escape-Character-1"></span><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>
+</div>
+<div class="subsubsection" id="Single-Quotes">
+<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>
+<span id="Single-Quotes-1"></span><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>
+</div>
+<div class="subsubsection" id="Double-Quotes">
+<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>
+<span id="Double-Quotes-1"></span><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>
+</div>
+<div class="subsubsection" id="ANSI_002dC-Quoting">
+<div class="header">
+<p>
+Next: <a href="#Locale-Translation" accesskey="n" rel="next">Locale-Specific 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>
+<span id="ANSI_002dC-Quoting-1"></span><h4 class="subsubsection">3.1.2.4 ANSI-C Quoting</h4>
+<span id="index-quoting_002c-ANSI"></span>
+
+<p>Character sequences of the form $&rsquo;<var>string</var>&rsquo; are treated as a special
+kind of single quotes.
+The sequence expands to <var>string</var>, with backslash-escaped characters
+in <var>string</var> replaced as specified by the ANSI C standard.
+Backslash escape sequences, if present, are decoded as follows:
+</p>
+<dl compact="compact">
+<dt><span><code>\a</code></span></dt>
+<dd><p>alert (bell)
+</p></dd>
+<dt><span><code>\b</code></span></dt>
+<dd><p>backspace
+</p></dd>
+<dt><span><code>\e</code></span></dt>
+<dt><span><code>\E</code></span></dt>
+<dd><p>an escape character (not ANSI C)
+</p></dd>
+<dt><span><code>\f</code></span></dt>
+<dd><p>form feed
+</p></dd>
+<dt><span><code>\n</code></span></dt>
+<dd><p>newline
+</p></dd>
+<dt><span><code>\r</code></span></dt>
+<dd><p>carriage return
+</p></dd>
+<dt><span><code>\t</code></span></dt>
+<dd><p>horizontal tab
+</p></dd>
+<dt><span><code>\v</code></span></dt>
+<dd><p>vertical tab
+</p></dd>
+<dt><span><code>\\</code></span></dt>
+<dd><p>backslash
+</p></dd>
+<dt><span><code>\'</code></span></dt>
+<dd><p>single quote
+</p></dd>
+<dt><span><code>\&quot;</code></span></dt>
+<dd><p>double quote
+</p></dd>
+<dt><span><code>\?</code></span></dt>
+<dd><p>question mark
+</p></dd>
+<dt><span><code>\<var>nnn</var></code></span></dt>
+<dd><p>the eight-bit character whose value is the octal value <var>nnn</var>
+(one to three octal digits)
+</p></dd>
+<dt><span><code>\x<var>HH</var></code></span></dt>
+<dd><p>the eight-bit character whose value is the hexadecimal value <var>HH</var>
+(one or two hex digits)
+</p></dd>
+<dt><span><code>\u<var>HHHH</var></code></span></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><span><code>\U<var>HHHHHHHH</var></code></span></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><span><code>\c<var>x</var></code></span></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>
+</div>
+<div class="subsubsection" id="Locale-Translation">
+<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>
+<span id="Locale_002dSpecific-Translation"></span><h4 class="subsubsection">3.1.2.5 Locale-Specific Translation</h4>
+<span id="index-localization"></span>
+<span id="index-internationalization"></span>
+<span id="index-native-languages"></span>
+<span id="index-translation_002c-native-languages"></span>
+
+<p>Prefixing a double-quoted string with a dollar sign (&lsquo;<samp>$</samp>&rsquo;), such
+as <tt>$&quot;hello, world&quot;</tt>,
+will cause the string to be translated according to the current locale.
+The <code>gettext</code> infrastructure performs the lookup and
+translation, using the <code>LC_MESSAGES</code>, <code>TEXTDOMAINDIR</code>,
+and <code>TEXTDOMAIN</code> shell variables, as explained below.
+See the gettext documentation for additional details not covered here.
+If the current locale is <code>C</code> or <code>POSIX</code>,
+if there are no translations available,
+of if the string is not translated,
+the dollar sign is ignored.
+Since this is a form of double quoting, the string remains double-quoted
+by default, whether or not it is translated and replaced.
+If the <code>noexpand_translation</code> option is enabled
+using the <code>shopt</code> builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>),
+translated strings are single-quoted instead of double-quoted.
+</p>
+<p>The rest of this section is a brief overview of how you use gettext to
+create translations for strings in a shell script named <var>scriptname</var>.
+There are more details in the gettext documentation.
+</p>
+<hr>
+<span id="Creating-Internationalized-Scripts"></span><div class="header">
+<p>
+ &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+</div>
+<h4 class="node-heading">Creating Internationalized Scripts</h4>
+<span id="index-internationalized-scripts"></span>
+<span id="index-string-translations"></span>
+<p>Once you&rsquo;ve marked the strings in your script
+that you want to translate using $&quot;...&quot;,
+you create a gettext &quot;template&quot; file using the command
+</p>
+<div class="example">
+<pre class="example">bash --dump-po-strings <var>scriptname</var> &gt; <var>domain</var>.pot
+</pre></div>
+
+<p>The <var>domain</var> is your <em>message domain</em>.
+It&rsquo;s just an arbitrary string that&rsquo;s used to identify the files gettext
+needs, like a package or script name.
+It needs to be unique among all
+the message domains on systems where you install the translations, so
+gettext knows which translations correspond to your script.
+You&rsquo;ll use the template file to create translations for each target language.
+The template file conventionally has the suffix &lsquo;<samp>.pot</samp>&rsquo;.
+</p>
+<p>You copy this template file to a separate file for each target language
+you want to support (called &quot;PO&quot; files, which use the suffix &lsquo;<samp>.po</samp>&rsquo;).
+PO files use various naming conventions, but
+when you are working to translate a template file into a particular
+language, you first copy the template file to a file whose name is the
+language you want to target, with the &lsquo;<samp>.po</samp>&rsquo; suffix.
+For instance, the Spanish translations of your strings would be
+in a file named &lsquo;<samp>es.po</samp>&rsquo;, and to get started using a message
+domain named &quot;example,&quot; you would run
+</p>
+<div class="example">
+<pre class="example">cp example.pot es.po
+</pre></div>
+
+<p>Ultimately, PO files are often named <var>domain</var>.po and installed in
+directories that contain multiple translation files for a particular language.
+</p>
+<p>Whichever naming convention you choose, you will need to translate the
+strings in the PO files into the appropriate languages.
+This has to be done manually.
+</p>
+<p>When you have the translations and PO files complete, you&rsquo;ll use the
+gettext tools to produce what are called &quot;MO&quot; files, which are compiled
+versions of the PO files the gettext tools use to look up translations
+efficiently.
+MO files are also called &quot;message catalog&quot; files.
+You use the <code>msgfmt</code> program to do this.
+For instance, if you had a file with Spanish translations, you could run
+</p>
+<div class="example">
+<pre class="example">msgfmt -o es.mo es.po
+</pre></div>
+
+<p>to produce the corresponding MO file.
+</p>
+<p>Once you have the MO files, you decide where to install them and use the
+<code>TEXTDOMAINDIR</code> shell variable to tell the gettext tools where they are.
+Make sure to use the same message domain to name the MO files
+as you did for the PO files when you install them.
+</p>
+<span id="index-LANG"></span>
+<span id="index-LC_005fMESSAGES"></span>
+<span id="index-TEXTDOMAIN"></span>
+<span id="index-TEXTDOMAINDIR"></span>
+<p>Your users will use the <code>LANG</code> or <code>LC_MESSAGES</code> shell variables to
+select the desired language.
+</p>
+<p>You set the <code>TEXTDOMAIN</code> variable to the script&rsquo;s message domain.
+As above, you use the message domain to name your translation files.
+</p>
+<p>You, or possibly your users, set the <code>TEXTDOMAINDIR</code> variable to the
+name of a directory where the message catalog files are stored.
+If you install the message files into the system&rsquo;s standard message catalog
+directory, you don&rsquo;t need to worry about this variable.
+</p>
+<p>The directory where the message catalog files are stored varies between
+systems.
+Some 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 the &lsquo;<samp>.mo</samp>&rsquo; suffix.
+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,
+as above.
+It&rsquo;s common to use both variables in this fashion:
+<code>$TEXTDOMAINDIR</code>/<code>$LC_MESSAGES</code>/LC_MESSAGES/<code>$TEXTDOMAIN</code>.mo.
+</p>
+<p>If you used that last convention, and you wanted to store the message
+catalog files with Spanish (es) and Esperanto (eo) translations into a
+local directory you use for custom translation files, you could run
+</p>
+<div class="example">
+<pre class="example">TEXTDOMAIN=example
+TEXTDOMAINDIR=/usr/local/share/locale
+
+cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo
+cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo
+</pre></div>
+
+<p>When all of this is done, and the message catalog files containing the
+compiled translations are installed in the correct location,
+your users will be able to see translated strings
+in any of the supported languages by setting the <code>LANG</code> or
+<code>LC_MESSAGES</code> environment variables before running your script.
+</p>
+<hr>
+</div>
+</div>
+<div class="subsection" id="Comments">
+<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>
+<span id="Comments-1"></span><h4 class="subsection">3.1.3 Comments</h4>
+<span id="index-comments_002c-shell"></span>
+
+<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>
+</div>
+</div>
+<div class="section" id="Shell-Commands">
+<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>
+<span id="Shell-Commands-1"></span><h3 class="section">3.2 Shell Commands</h3>
+<span id="index-commands_002c-shell"></span>
+
+<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>
+
+<ul class="section-toc">
+<li><a href="#Reserved-Words" accesskey="1">Reserved Words</a></li>
+<li><a href="#Simple-Commands" accesskey="2">Simple Commands</a></li>
+<li><a href="#Pipelines" accesskey="3">Pipelines</a></li>
+<li><a href="#Lists" accesskey="4">Lists of Commands</a></li>
+<li><a href="#Compound-Commands" accesskey="5">Compound Commands</a></li>
+<li><a href="#Coprocesses" accesskey="6">Coprocesses</a></li>
+<li><a href="#GNU-Parallel" accesskey="7">GNU Parallel</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Reserved-Words">
+<div class="header">
+<p>
+Next: <a href="#Simple-Commands" accesskey="n" rel="next">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>
+<span id="Reserved-Words-1"></span><h4 class="subsection">3.2.1 Reserved Words</h4>
+<span id="index-reserved-words"></span>
+
+<p>Reserved words are words that have special meaning to the shell.
+They are used to begin and end the shell&rsquo;s compound commands.
+</p>
+<p>The following words are recognized as reserved when unquoted and
+the first word of a command (see below for exceptions):
+</p>
+<table>
+<tr><td width="10%"><code>if</code></td><td width="10%"><code>then</code></td><td width="10%"><code>elif</code></td><td width="10%"><code>else</code></td><td width="12%"><code>fi</code></td><td width="10%"><code>time</code></td></tr>
+<tr><td width="10%"><code>for</code></td><td width="10%"><code>in</code></td><td width="10%"><code>until</code></td><td width="10%"><code>while</code></td><td width="12%"><code>do</code></td><td width="10%"><code>done</code></td></tr>
+<tr><td width="10%"><code>case</code></td><td width="10%"><code>esac</code></td><td width="10%"><code>coproc</code></td><td width="10%"><code>select</code></td><td width="12%"><code>function</code></td></tr>
+<tr><td width="10%"><code>{</code></td><td width="10%"><code>}</code></td><td width="10%"><code>[[</code></td><td width="10%"><code>]]</code></td><td width="12%"><code>!</code></td></tr>
+</table>
+
+<p><code>in</code> is recognized as a reserved word if it is the third word of a
+<code>case</code> or <code>select</code> command.
+<code>in</code> and <code>do</code> are recognized as reserved
+words if they are the third word in a <code>for</code> command.
+</p>
+<hr>
+</div>
+<div class="subsection" id="Simple-Commands">
+<div class="header">
+<p>
+Next: <a href="#Pipelines" accesskey="n" rel="next">Pipelines</a>, Previous: <a href="#Reserved-Words" accesskey="p" rel="prev">Reserved Words</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>
+<span id="Simple-Commands-1"></span><h4 class="subsection">3.2.2 Simple Commands</h4>
+<span id="index-commands_002c-simple"></span>
+
+<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>
+</div>
+<div class="subsection" id="Pipelines">
+<div class="header">
+<p>
+Next: <a href="#Lists" accesskey="n" rel="next">Lists of Commands</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>
+<span id="Pipelines-1"></span><h4 class="subsection">3.2.3 Pipelines</h4>
+<span id="index-pipeline"></span>
+<span id="index-commands_002c-pipelines"></span>
+
+<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>
+<span id="index-time"></span>
+<span id="index-_0021"></span>
+<span id="index-command-timing"></span>
+<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
+<var>command1</var>.
+</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 <var>command1</var>.
+</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 of Commands</a>), the
+shell waits for all commands in the pipeline to complete.
+</p>
+<p>Each command in a multi-command pipeline,
+where pipes are created,
+is executed in its own <em>subshell</em>, 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
+when job control is not active.
+</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>
+</div>
+<div class="subsection" id="Lists">
+<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>
+<span id="Lists-of-Commands"></span><h4 class="subsection">3.2.4 Lists of Commands</h4>
+<span id="index-commands_002c-lists"></span>
+
+<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 <em>background</em>,
+and these are referred to as <em>asynchronous</em> 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>
+</div>
+<div class="subsection" id="Compound-Commands">
+<div class="header">
+<p>
+Next: <a href="#Coprocesses" accesskey="n" rel="next">Coprocesses</a>, Previous: <a href="#Lists" accesskey="p" rel="prev">Lists of 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>
+<span id="Compound-Commands-1"></span><h4 class="subsection">3.2.5 Compound Commands</h4>
+<span id="index-commands_002c-compound"></span>
+
+
+<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>
+<ul class="section-toc">
+<li><a href="#Looping-Constructs" accesskey="1">Looping Constructs</a></li>
+<li><a href="#Conditional-Constructs" accesskey="2">Conditional Constructs</a></li>
+<li><a href="#Command-Grouping" accesskey="3">Grouping Commands</a></li>
+</ul>
+<hr>
+<div class="subsubsection" id="Looping-Constructs">
+<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>
+<span id="Looping-Constructs-1"></span><h4 class="subsubsection">3.2.5.1 Looping Constructs</h4>
+<span id="index-commands_002c-looping"></span>
+
+<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 id='index-until'><span><code>until</code><a href='#index-until' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-do"></span>
+<span id="index-done"></span>
+<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 id='index-while'><span><code>while</code><a href='#index-while' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-for'><span><code>for</code><a href='#index-for' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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>
+</div>
+<div class="subsubsection" id="Conditional-Constructs">
+<div class="header">
+<p>
+Next: <a href="#Command-Grouping" accesskey="n" rel="next">Grouping Commands</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>
+<span id="Conditional-Constructs-1"></span><h4 class="subsubsection">3.2.5.2 Conditional Constructs</h4>
+<span id="index-commands_002c-conditional"></span>
+
+<dl compact="compact">
+<dt id='index-if'><span><code>if</code><a href='#index-if' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-then"></span>
+<span id="index-else"></span>
+<span id="index-elif"></span>
+<span id="index-fi"></span>
+<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 id='index-case'><span><code>case</code><a href='#index-case' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-in"></span>
+<span id="index-esac"></span>
+<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, arithmetic expansion, process substitution, and
+quote removal.
+</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,
+continuing the case statement execution as if the pattern list had not matched.
+</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 id='index-select'><span><code>select</code><a href='#index-select' class='copiable-anchor'> &para;</a></span></dt>
+<dd>
+<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, and 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.
+<code>select</code> then displays the <code>PS3</code>
+prompt and reads a line 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 and returns 1.
+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><span><code>((&hellip;))</code></span></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>).
+The <var>expression</var> undergoes the same expansions
+as if it were within double quotes,
+but double quote characters in <var>expression</var> are not treated specially
+are removed.
+If the value of the expression is non-zero, the return status is 0;
+otherwise the return status is 1.
+</p>
+
+</dd>
+<dt id='index-_005b_005b'><span><code>[[&hellip;]]</code><a href='#index-_005b_005b' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_005d_005d"></span>
+<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>.
+The words between the <code>[[</code> and <code>]]</code> do not undergo word splitting
+and filename expansion.
+The shell performs tilde expansion, parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal on those words
+(the expansions that would occur if the words were enclosed in double quotes).
+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.
+</p>
+<p>If you quote any part of the pattern,
+using any of the shell&rsquo;s quoting mechanisms,
+the quoted portion is matched literally.
+This means every character in the quoted portion matches itself,
+instead of having any special pattern matching meaning.
+</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 you use &lsquo;<samp>=~</samp>&rsquo;, the string to the right of the operator is considered
+a <small>POSIX</small> extended regular expression pattern and matched accordingly
+(using the <small>POSIX</small> <code>regcomp</code> and <code>regexec</code> interfaces
+usually described in <i>regex</i>(3)).
+The return value is 0 if the string matches the pattern, and 1 if it does not.
+If the regular expression is syntactically incorrect, the conditional
+expression returns 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.
+</p>
+<p>You can quote any part of the pattern
+to force the quoted portion to be matched literally
+instead of as a regular expression (see above).
+If the pattern is stored in a shell variable, quoting the variable
+expansion forces the entire pattern to be matched literally.
+</p>
+<p>The pattern will match if it matches any part of the string.
+If you want to force the pattern to match the entire string,
+anchor the pattern using the &lsquo;<samp>^</samp>&rsquo; and &lsquo;<samp>$</samp>&rsquo; regular expression
+operators.
+</p>
+<p>For example, the following will match a line
+(stored in the shell variable <code>line</code>)
+if there is a sequence of characters anywhere in the value consisting of
+any number, including zero, of
+characters in the <code>space</code> character class,
+immediately followed by 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 for <code>line</code> like
+&lsquo;<samp>aab</samp>&rsquo;, &lsquo;<samp> aaaaaab</samp>&rsquo;, &lsquo;<samp>xaby</samp>&rsquo;, and &lsquo;<samp> ab</samp>&rsquo;
+will all match,
+as will a line containing a &lsquo;<samp>b</samp>&rsquo; anywhere in its value.
+</p>
+<p>If you want to match a character that&rsquo;s special to the regular expression
+grammar (&lsquo;<samp>^$|[]()\.*+?</samp>&rsquo;), 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;.
+</p>
+<p>Likewise, if you want to include a character in your pattern that has a
+special meaning to the regular expression grammar, you must make sure it&rsquo;s
+not quoted.
+If you want to anchor a pattern at the beginning or end of the string,
+for instance, you cannot quote the &lsquo;<samp>^</samp>&rsquo; or &lsquo;<samp>$</samp>&rsquo;
+characters using any form of shell quoting.
+</p>
+<p>If you want to match &lsquo;<samp>initial string</samp>&rsquo; at the start of a line,
+the following will work:
+</p><div class="example">
+<pre class="example">[[ $line =~ ^&quot;initial string&quot; ]]
+</pre></div>
+<p>but this will not:
+</p><div class="example">
+<pre class="example">[[ $line =~ &quot;^initial string&quot; ]]
+</pre></div>
+<p>because in the second example the &lsquo;<samp>^</samp>&rsquo; is quoted and doesn&rsquo;t have its
+usual special meaning.
+</p>
+<p>It is sometimes difficult to specify a regular expression properly
+without using quotes, or to keep track of the quoting used by regular
+expressions while paying attention to
+shell quoting and the shell&rsquo;s quote removal.
+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.
+For example, the following is equivalent to the pattern used above:
+</p>
+<div class="example">
+<pre class="example">pattern='[[:space:]]*(a)?b'
+[[ $line =~ $pattern ]]
+</pre></div>
+
+<p>Shell programmers should take special care with backslashes, since
+backslashes are used by both the shell and regular expressions to remove
+the special meaning from the following character.
+This means that after the shell&rsquo;s word expansions complete
+(see <a href="#Shell-Expansions">Shell Expansions</a>),
+any backslashes remaining in parts of the pattern
+that were originally not quoted can remove the
+special meaning of pattern characters.
+If any part of the pattern is quoted, the shell does its best to ensure that
+the regular expression treats those remaining backslashes as literal,
+if they appeared in a quoted portion.
+</p>
+<p>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 pattern passed to the regular expression
+parser is &lsquo;<samp>\.</samp>&rsquo;. The backslash removes the special meaning from
+&lsquo;<samp>.</samp>&rsquo;, so the literal &lsquo;<samp>.</samp>&rsquo; matches.
+In the second two examples, the pattern passed to the regular expression
+parser has the backslash quoted (e.g., &lsquo;<samp>\\\.</samp>&rsquo;), which will not match
+the string, since it does not contain a backslash.
+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>Bracket expressions in regular expressions can be sources of errors as well,
+since characters that are normally special in regular expressions
+lose their special meanings between brackets.
+However, you can use bracket expressions to match special pattern characters
+without quoting them, so they are sometimes useful for this purpose.
+</p>
+<p>Though it might seem like a strange way to write it, the following pattern
+will match a &lsquo;<samp>.</samp>&rsquo; in the string:
+</p>
+<div class="example">
+<pre class="example">[[ . =~ [.] ]]
+</pre></div>
+
+<p>The shell performs any word expansions before passing the pattern
+to the regular expression functions,
+so you can assume that the shell&rsquo;s quoting takes precedence.
+As noted above, the regular expression parser will interpret any
+unquoted backslashes remaining in the pattern after shell expansion
+according to its own rules.
+The intention is to avoid making shell programmers quote things twice
+as much as possible, so shell quoting should be sufficient to quote
+special pattern characters where that&rsquo;s necessary.
+</p>
+<p>The array variable <code>BASH_REMATCH</code> records which parts of the string
+matched the pattern.
+The element of <code>BASH_REMATCH</code> with index 0 contains the portion of
+the string matching the entire regular expression.
+Substrings matched by parenthesized subexpressions within the regular
+expression are saved in the remaining <code>BASH_REMATCH</code> indices.
+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>Bash sets
+<code>BASH_REMATCH</code>
+in the global scope; declaring it as a local variable will lead to
+unexpected results.
+</p>
+<p>Expressions may be combined using the following operators, listed
+in decreasing order of precedence:
+</p>
+<dl compact="compact">
+<dt><span><code>( <var>expression</var> )</code></span></dt>
+<dd><p>Returns the value of <var>expression</var>.
+This may be used to override the normal precedence of operators.
+</p>
+</dd>
+<dt><span><code>! <var>expression</var></code></span></dt>
+<dd><p>True if <var>expression</var> is false.
+</p>
+</dd>
+<dt><span><code><var>expression1</var> &amp;&amp; <var>expression2</var></code></span></dt>
+<dd><p>True if both <var>expression1</var> and <var>expression2</var> are true.
+</p>
+</dd>
+<dt><span><code><var>expression1</var> || <var>expression2</var></code></span></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>
+</div>
+<div class="subsubsection" id="Command-Grouping">
+<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>
+<span id="Grouping-Commands"></span><h4 class="subsubsection">3.2.5.3 Grouping Commands</h4>
+<span id="index-commands_002c-grouping"></span>
+
+<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><span><code>()</code></span></dt>
+<dd><div class="example">
+<pre class="example">( <var>list</var> )
+</pre></div>
+
+<p>Placing a list of commands between parentheses forces the shell to create
+a subshell (see <a href="#Command-Execution-Environment">Command Execution Environment</a>), and each
+of the commands in <var>list</var> is executed in that subshell environment.
+Since the <var>list</var> is executed in a subshell, variable assignments do not
+remain in effect after the subshell completes.
+</p>
+</dd>
+<dt id='index-_007b'><span><code>{}</code><a href='#index-_007b' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_007d"></span>
+<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 reserved words, so they must be separated from the <var>list</var>
+by <code>blank</code>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 <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>
+</div>
+</div>
+<div class="subsection" id="Coprocesses">
+<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>
+<span id="Coprocesses-1"></span><h4 class="subsection">3.2.6 Coprocesses</h4>
+<span id="index-coprocess"></span>
+
+<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 syntax 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>.
+<var>command</var> may be either a simple command (see <a href="#Simple-Commands">Simple Commands</a>)
+or a compound command (see <a href="#Compound-Commands">Compound Commands</a>).
+<var>NAME</var> is a shell variable name.
+If <var>NAME</var> is not supplied, the default name is <code>COPROC</code>.
+</p>
+<p>The recommended form to use for a coprocess is
+</p>
+<div class="example">
+<pre class="example">coproc <var>NAME</var> { <var>command</var>; }
+</pre></div>
+
+<p>This form is recommended because simple commands result in the coprocess
+always being named <code>COPROC</code>, and it is simpler to use and more complete
+than the other compound commands.
+</p>
+<p>There are other forms of coprocesses:
+</p>
+<div class="example">
+<pre class="example">coproc <var>NAME</var> <var>compound-command</var>
+coproc <var>compound-command</var>
+coproc <var>simple-command</var>
+</pre></div>
+
+<p>If <var>command</var> is a compound command, <var>NAME</var> is optional. The
+word following <code>coproc</code> determines whether that word is interpreted
+as a variable name: it is interpreted as <var>NAME</var> if it is not a
+reserved word that introduces a compound command.
+If <var>command</var> is a simple command, <var>NAME</var> is not allowed; this
+is to avoid confusion between <var>NAME</var> and 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 <var>NAME</var> 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 <var>NAME</var>[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 <var>NAME</var>[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><var>NAME</var>_PID</code>.
+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>
+</div>
+<div class="subsection" id="GNU-Parallel">
+<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>
+<span id="GNU-Parallel-1"></span><h4 class="subsection">3.2.7 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, which
+is available at
+<a href="https://www.gnu.org/software/parallel/parallel_tutorial.html">https://www.gnu.org/software/parallel/parallel_tutorial.html</a>.
+</p>
+<hr>
+</div>
+</div>
+<div class="section" id="Shell-Functions">
+<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>
+<span id="Shell-Functions-1"></span><h3 class="section">3.3 Shell Functions</h3>
+<span id="index-shell-function"></span>
+<span id="index-functions_002c-shell"></span>
+
+<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:
+<span id="index-function"></span>
+</p><div class="example">
+<pre class="example"><var>fname</var> () <var>compound-command</var> [ <var>redirections</var> ]
+</pre></div>
+
+<p>or
+</p>
+<div class="example">
+<pre class="example">function <var>fname</var> [()] <var>compound-command</var> [ <var>redirections</var> ]
+</pre></div>
+
+<p>This defines a shell function named <var>fname</var>. The reserved
+word <code>function</code> is optional.
+If the <code>function</code> reserved
+word is supplied, the parentheses are optional.
+The <em>body</em> 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.
+If the <code>function</code> reserved word is used, but the
+parentheses are not supplied, the braces are recommended.
+<var>compound-command</var> is executed whenever <var>fname</var> is specified as the
+name of a simple command.
+When the shell is in <small>POSIX</small> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>),
+<var>fname</var> must be a valid shell name and
+may not be the same as one of the special builtins
+(see <a href="#Special-Builtins">Special Builtins</a>).
+In default mode, a function name can be any unquoted shell word that does
+not contain &lsquo;<samp>$</samp>&rsquo;.
+Any redirections (see <a href="#Redirections">Redirections</a>) associated with the shell function
+are performed when the function is executed.
+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 (<em>local variables</em>).
+Ordinarily, variables and their values
+are shared between a function and its caller.
+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>In the following description, the <em>current scope</em> is a currently-
+executing function.
+Previous scopes consist of that function&rsquo;s caller and so on,
+back to the &quot;global&quot; scope, where the shell is not executing
+any shell function.
+Consequently, a local variable at the current local scope is a variable
+declared using the <code>local</code> or <code>declare</code> builtins in the
+function that is currently executing.
+</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 <em>dynamic scoping</em> 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 <code>var</code> is declared as local in function
+<code>func1</code>, and <code>func1</code> calls another function <code>func2</code>,
+references to <code>var</code> made from within <code>func2</code> will resolve to the
+local variable <code>var</code> from <code>func1</code>, shadowing any global variable
+named <code>var</code>.
+</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
+(appearing as unset)
+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
+(see below how <code>localvar_unset</code>shell option changes this behavior).
+</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 Builtin Commands</a>).
+The <samp>-F</samp> option to <code>declare</code> or <code>typeset</code>
+will list the function names only
+(and optionally the source file and line number, if the <code>extdebug</code>
+shell option is enabled).
+Functions may be exported so that child shell processes
+(those created when executing a separate shell invocation)
+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>
+</div>
+<div class="section" id="Shell-Parameters">
+<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>
+<span id="Shell-Parameters-1"></span><h3 class="section">3.4 Shell Parameters</h3>
+<span id="index-parameters"></span>
+<span id="index-variable_002c-shell"></span>
+<span id="index-shell-variable"></span>
+
+
+<p>A <em>parameter</em> is an entity that stores values.
+It can be a <code>name</code>, a number, or one of the special characters
+listed below.
+A <em>variable</em> is a parameter denoted by a <code>name</code>.
+A variable has a <code>value</code> and zero or more <code>attributes</code>.
+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 Builtin Commands</a>).
+</p>
+<p>A parameter is set if it has been assigned a value. The null string is
+a valid value. Once a variable is set, it may be unset only by using
+the <code>unset</code> builtin command.
+</p>
+<p>A variable may be assigned to by a statement of the form
+</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 (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+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 and filename expansion are 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 (<em>declaration</em> 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 (declaration commands).
+When &lsquo;<samp>+=</samp>&rsquo; is applied to a variable for which the <code>integer</code> 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 <code>nameref</code> attribute using the
+<samp>-n</samp> option to the <code>declare</code> or <code>local</code> builtin commands
+(see <a href="#Bash-Builtins">Bash Builtin Commands</a>)
+to create a <em>nameref</em>, 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 <code>ref</code> whose value is
+the variable name passed as the first argument.
+References and assignments to <code>ref</code>, 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>
+<ul class="section-toc">
+<li><a href="#Positional-Parameters" accesskey="1">Positional Parameters</a></li>
+<li><a href="#Special-Parameters" accesskey="2">Special Parameters</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Positional-Parameters">
+<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>
+<span id="Positional-Parameters-1"></span><h4 class="subsection">3.4.1 Positional Parameters</h4>
+<span id="index-parameters_002c-positional"></span>
+
+<p>A <em>positional parameter</em> 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>
+</div>
+<div class="subsection" id="Special-Parameters">
+<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>
+<span id="Special-Parameters-1"></span><h4 class="subsection">3.4.2 Special Parameters</h4>
+<span id="index-parameters_002c-special"></span>
+
+<p>The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+</p>
+<dl compact="compact">
+<dt id='index-_002a'><span><code>*</code><a href='#index-_002a' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_0024_002a"></span>
+<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 filename 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 id='index-_0040'><span><code>@</code><a href='#index-_0040' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_0024_0040"></span>
+<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 id='index-_0023'><span><code>#</code><a href='#index-_0023' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_0024_0023"></span>
+<p>($#) Expands to the number of positional parameters in decimal.
+</p>
+</dd>
+<dt id='index-_003f'><span><code>?</code><a href='#index-_003f' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_0024_003f"></span>
+<p>($?) Expands to the exit status of the most recently executed foreground
+pipeline.
+</p>
+</dd>
+<dt id='index-_002d'><span><code>-</code><a href='#index-_002d' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_0024_002d"></span>
+<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 id='index-_0024'><span><code>$</code><a href='#index-_0024' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_0024_0024"></span>
+<p>($$) Expands to the process <small>ID</small> of the shell. In a subshell, it
+expands to the process <small>ID</small> of the invoking shell, not the subshell.
+</p>
+</dd>
+<dt id='index-_0021-1'><span><code>!</code><a href='#index-_0021-1' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_0024_0021"></span>
+<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 id='index-0'><span><code>0</code><a href='#index-0' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_00240"></span>
+<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>
+</dl>
+
+<hr>
+</div>
+</div>
+<div class="section" id="Shell-Expansions">
+<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>
+<span id="Shell-Expansions-1"></span><h3 class="section">3.5 Shell Expansions</h3>
+<span id="index-expansion"></span>
+
+<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>
+
+
+<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: <em>process substitution</em>.
+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
+(<em>quote removal</em>).
+</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>
+<ul class="section-toc">
+<li><a href="#Brace-Expansion" accesskey="1">Brace Expansion</a></li>
+<li><a href="#Tilde-Expansion" accesskey="2">Tilde Expansion</a></li>
+<li><a href="#Shell-Parameter-Expansion" accesskey="3">Shell Parameter Expansion</a></li>
+<li><a href="#Command-Substitution" accesskey="4">Command Substitution</a></li>
+<li><a href="#Arithmetic-Expansion" accesskey="5">Arithmetic Expansion</a></li>
+<li><a href="#Process-Substitution" accesskey="6">Process Substitution</a></li>
+<li><a href="#Word-Splitting" accesskey="7">Word Splitting</a></li>
+<li><a href="#Filename-Expansion" accesskey="8">Filename Expansion</a></li>
+<li><a href="#Quote-Removal" accesskey="9">Quote Removal</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Brace-Expansion">
+<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>
+<span id="Brace-Expansion-1"></span><h4 class="subsection">3.5.1 Brace Expansion</h4>
+<span id="index-brace-expansion"></span>
+<span id="index-expansion_002c-brace"></span>
+
+<p>Brace expansion is a mechanism by which arbitrary strings may be generated.
+This mechanism is similar to
+<em>filename expansion</em> (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 letters,
+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 letters 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
+(integer or letter).
+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>
+</div>
+<div class="subsection" id="Tilde-Expansion">
+<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>
+<span id="Tilde-Expansion-1"></span><h4 class="subsection">3.5.2 Tilde Expansion</h4>
+<span id="index-tilde-expansion"></span>
+<span id="index-expansion_002c-tilde"></span>
+
+<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 <em>tilde-prefix</em>.
+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 <em>login name</em>.
+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><span><code>~</code></span></dt>
+<dd><p>The value of <code>$HOME</code>
+</p></dd>
+<dt><span><code>~/foo</code></span></dt>
+<dd><p><samp>$HOME/foo</samp>
+</p>
+</dd>
+<dt><span><code>~fred/foo</code></span></dt>
+<dd><p>The subdirectory <code>foo</code> of the home directory of the user
+<code>fred</code>
+</p>
+</dd>
+<dt><span><code>~+/foo</code></span></dt>
+<dd><p><samp>$PWD/foo</samp>
+</p>
+</dd>
+<dt><span><code>~-/foo</code></span></dt>
+<dd><p><samp>${OLDPWD-'~-'}/foo</samp>
+</p>
+</dd>
+<dt><span><code>~<var>N</var></code></span></dt>
+<dd><p>The string that would be displayed by &lsquo;<samp>dirs +<var>N</var></samp>&rsquo;
+</p>
+</dd>
+<dt><span><code>~+<var>N</var></code></span></dt>
+<dd><p>The string that would be displayed by &lsquo;<samp>dirs +<var>N</var></samp>&rsquo;
+</p>
+</dd>
+<dt><span><code>~-<var>N</var></code></span></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 declaration commands listed
+above, when in <small>POSIX</small> mode.
+</p>
+<hr>
+</div>
+<div class="subsection" id="Shell-Parameter-Expansion">
+<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>
+<span id="Shell-Parameter-Expansion-1"></span><h4 class="subsection">3.5.3 Shell Parameter Expansion</h4>
+<span id="index-parameter-expansion"></span>
+<span id="index-expansion_002c-parameter"></span>
+
+<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 nameref,
+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><span><code>${<var>parameter</var>:-<var>word</var>}</code></span></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>
+<div class="example">
+<pre class="example">$ v=123
+$ echo ${v-unset}
+123
+</pre></div>
+
+</dd>
+<dt><span><code>${<var>parameter</var>:=<var>word</var>}</code></span></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>
+<div class="example">
+<pre class="example">$ var=
+$ : ${var:=DEFAULT}
+$ echo $var
+DEFAULT
+</pre></div>
+
+</dd>
+<dt><span><code>${<var>parameter</var>:?<var>word</var>}</code></span></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>
+<div class="example">
+<pre class="example">$ var=
+$ : ${var:?var is unset or null}
+bash: var: var is unset or null
+</pre></div>
+
+</dd>
+<dt><span><code>${<var>parameter</var>:+<var>word</var>}</code></span></dt>
+<dd><p>If <var>parameter</var>
+is null or unset, nothing is substituted, otherwise the expansion of
+<var>word</var> is substituted.
+</p>
+<div class="example">
+<pre class="example">$ var=123
+$ echo ${var:+var is set and not null}
+var is set and not null
+</pre></div>
+
+</dd>
+<dt><span><code>${<var>parameter</var>:<var>offset</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>:<var>offset</var>:<var>length</var>}</code></span></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; or &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; or &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>$0</code> is
+prefixed to the list.
+</p>
+</dd>
+<dt><span><code>${!<var>prefix</var>*}</code></span></dt>
+<dt><span><code>${!<var>prefix</var>@}</code></span></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><span><code>${!<var>name</var>[@]}</code></span></dt>
+<dt><span><code>${!<var>name</var>[*]}</code></span></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><span><code>${#<var>parameter</var>}</code></span></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><span><code>${<var>parameter</var>#<var>word</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>##<var>word</var>}</code></span></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><span><code>${<var>parameter</var>%<var>word</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>%%<var>word</var>}</code></span></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 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><span><code>${<var>parameter</var>/<var>pattern</var>/<var>string</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>//<var>pattern</var>/<var>string</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>/#<var>pattern</var>/<var>string</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>/%<var>pattern</var>/<var>string</var>}</code></span></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>.
+<var>string</var> undergoes tilde expansion, parameter and variable expansion,
+arithmetic expansion, command and process substitution, and quote removal.
+The match is performed according to the rules described below
+(see <a href="#Pattern-Matching">Pattern Matching</a>).
+</p>
+<p>In the first form above, only the first match is replaced.
+If there are two slashes separating <var>parameter</var> and <var>pattern</var>
+(the second form above), all matches of <var>pattern</var> are
+replaced with <var>string</var>.
+If <var>pattern</var> is preceded by &lsquo;<samp>#</samp>&rsquo; (the third form above),
+it must match at the beginning of the expanded value of <var>parameter</var>.
+If <var>pattern</var> is preceded by &lsquo;<samp>%</samp>&rsquo; (the fourth form above),
+it must match at the end of the expanded value of <var>parameter</var>.
+If the expansion of <var>string</var> is null,
+matches of <var>pattern</var> are deleted.
+If <var>string</var> is null,
+matches of <var>pattern</var> are deleted
+and the &lsquo;<samp>/</samp>&rsquo; following <var>pattern</var> may be omitted.
+</p>
+<p>If the <code>patsub_replacement</code> shell option is enabled using <code>shopt</code>,
+any unquoted instances of &lsquo;<samp>&amp;</samp>&rsquo; in <var>string</var> are replaced with the
+matching portion of <var>pattern</var>.
+This is intended to duplicate a common <code>sed</code> idiom.
+</p>
+<p>Quoting any part of <var>string</var> inhibits replacement in the
+expansion of the quoted portion, including replacement strings stored
+in shell variables.
+Backslash will escape &lsquo;<samp>&amp;</samp>&rsquo; in <var>string</var>; the backslash is removed
+in order to permit a literal &lsquo;<samp>&amp;</samp>&rsquo; in the replacement string.
+Users should take care if <var>string</var> is double-quoted to avoid
+unwanted interactions between the backslash and double-quoting, since
+backslash has special meaning within double quotes.
+Pattern substitution performs the check for unquoted &lsquo;<samp>&amp;</samp>&rsquo; after
+expanding <var>string</var>,
+so users should ensure to properly quote any occurrences of &lsquo;<samp>&amp;</samp>&rsquo;
+they want to be taken literally in the replacement
+and ensure any instances of &lsquo;<samp>&amp;</samp>&rsquo; they want to be replaced are unquoted.
+</p>
+<p>For instance,
+</p>
+<div class="example">
+<pre class="example">var=abcdef
+rep='&amp; '
+echo ${var/abc/&amp; }
+echo &quot;${var/abc/&amp; }&quot;
+echo ${var/abc/$rep}
+echo &quot;${var/abc/$rep}&quot;
+</pre></div>
+
+<p>will display four lines of &quot;abc def&quot;, while
+</p>
+<div class="example">
+<pre class="example">var=abcdef
+rep='&amp; '
+echo ${var/abc/\&amp; }
+echo &quot;${var/abc/\&amp; }&quot;
+echo ${var/abc/&quot;&amp; &quot;}
+echo ${var/abc/&quot;$rep&quot;}
+</pre></div>
+
+<p>will display four lines of &quot;&amp; def&quot;.
+Like the pattern removal operators, double quotes surrounding the
+replacement string quote the expanded characters, while double quotes
+enclosing the entire parameter substitution do not, since
+the expansion is performed in a
+context that doesn&rsquo;t take any enclosing double quotes into account.
+</p>
+<p>Since backslash can escape &lsquo;<samp>&amp;</samp>&rsquo;, it can also escape a backslash in
+the replacement string.
+This means that &lsquo;<samp>\\</samp>&rsquo; will insert a literal
+backslash into the replacement, so these two <code>echo</code> commands
+</p>
+<div class="example">
+<pre class="example">var=abcdef
+rep='\\&amp;xyz'
+echo ${var/abc/\\&amp;xyz}
+echo ${var/abc/$rep}
+</pre></div>
+
+<p>will both output &lsquo;<samp>\abcxyzdef</samp>&rsquo;.
+</p>
+<p>It should rarely be necessary to enclose only <var>string</var> in double
+quotes.
+</p>
+<p>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><span><code>${<var>parameter</var>^<var>pattern</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>^^<var>pattern</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>,<var>pattern</var>}</code></span></dt>
+<dt><span><code>${<var>parameter</var>,,<var>pattern</var>}</code></span></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.
+</p>
+<p>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.
+</p>
+<p>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><span><code>${<var>parameter</var>@<var>operator</var>}</code></span></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><span><code>U</code></span></dt>
+<dd><p>The expansion is a string that is the value of <var>parameter</var> with lowercase
+alphabetic characters converted to uppercase.
+</p></dd>
+<dt><span><code>u</code></span></dt>
+<dd><p>The expansion is a string that is the value of <var>parameter</var> with the first
+character converted to uppercase, if it is alphabetic.
+</p></dd>
+<dt><span><code>L</code></span></dt>
+<dd><p>The expansion is a string that is the value of <var>parameter</var> with uppercase
+alphabetic characters converted to lowercase.
+</p></dd>
+<dt><span><code>Q</code></span></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><span><code>E</code></span></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><span><code>P</code></span></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><span><code>A</code></span></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><span><code>K</code></span></dt>
+<dd><p>Produces a possibly-quoted version of the value of <var>parameter</var>,
+except that it prints the values of
+indexed and associative arrays as a sequence of quoted key-value pairs
+(see <a href="#Arrays">Arrays</a>).
+</p></dd>
+<dt><span><code>a</code></span></dt>
+<dd><p>The expansion is a string consisting of flag values representing
+<var>parameter</var>&rsquo;s attributes.
+</p></dd>
+<dt><span><code>k</code></span></dt>
+<dd><p>Like the &lsquo;<samp>K</samp>&rsquo; transformation, but expands the keys and values of
+indexed and associative arrays to separate words after word splitting.
+</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 filename
+expansion as described below.
+</p></dd>
+</dl>
+
+<hr>
+</div>
+<div class="subsection" id="Command-Substitution">
+<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>
+<span id="Command-Substitution-1"></span><h4 class="subsection">3.5.4 Command Substitution</h4>
+<span id="index-command-substitution"></span>
+
+<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>
+</div>
+<div class="subsection" id="Arithmetic-Expansion">
+<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>
+<span id="Arithmetic-Expansion-1"></span><h4 class="subsection">3.5.5 Arithmetic Expansion</h4>
+<span id="index-expansion_002c-arithmetic"></span>
+<span id="index-arithmetic-expansion"></span>
+
+<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 <var>expression</var> undergoes the same expansions
+as if it were within double quotes,
+but double quote characters in <var>expression</var> are not treated specially
+and are removed.
+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>
+</div>
+<div class="subsection" id="Process-Substitution">
+<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>
+<span id="Process-Substitution-1"></span><h4 class="subsection">3.5.6 Process Substitution</h4>
+<span id="index-process-substitution"></span>
+
+<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>
+</div>
+<div class="subsection" id="Word-Splitting">
+<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>
+<span id="Word-Splitting-1"></span><h4 class="subsection">3.5.7 Word Splitting</h4>
+<span id="index-word-splitting"></span>
+
+<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>
+</div>
+<div class="subsection" id="Filename-Expansion">
+<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>
+<span id="Filename-Expansion-1"></span><h4 class="subsection">3.5.8 Filename Expansion</h4>
+<span id="index-expansion_002c-filename"></span>
+<span id="index-expansion_002c-pathname"></span>
+<span id="index-filename-expansion"></span>
+<span id="index-pathname-expansion"></span>
+
+<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, and is not quoted, 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.
+In order to match the filenames &lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo;,
+the pattern must begin with &lsquo;<samp>.</samp>&rsquo; (for example, &lsquo;<samp>.?</samp>&rsquo;),
+even if <code>dotglob</code> is set.
+If the <code>globskipdots</code> shell option is enabled, the filenames
+&lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo; are never matched, even if the pattern begins
+with a &lsquo;<samp>.</samp>&rsquo;.
+When not matching filenames, 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>globskipdots</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>
+<ul class="section-toc">
+<li><a href="#Pattern-Matching" accesskey="1">Pattern Matching</a></li>
+</ul>
+<hr>
+<div class="subsubsection" id="Pattern-Matching">
+<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>
+<span id="Pattern-Matching-1"></span><h4 class="subsubsection">3.5.8.1 Pattern Matching</h4>
+<span id="index-pattern-matching"></span>
+<span id="index-matching_002c-pattern"></span>
+
+<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><span><code>*</code></span></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><span><code>?</code></span></dt>
+<dd><p>Matches any single character.
+</p></dd>
+<dt><span><code>[&hellip;]</code></span></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,
+and the characters included in the range,
+are 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>[aBbCcDdxYyZz]</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;, <em>character classes</em> 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 <em>equivalence class</em> 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, the shell recognizes several extended pattern matching operators.
+In the following description, a <var>pattern-list</var> is a list of one
+or more patterns separated by a &lsquo;<samp>|</samp>&rsquo;.
+When matching filenames, the <code>dotglob</code> shell option determines
+the set of filenames that are tested, as described above.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+</p>
+<dl compact="compact">
+<dt><span><code>?(<var>pattern-list</var>)</code></span></dt>
+<dd><p>Matches zero or one occurrence of the given patterns.
+</p>
+</dd>
+<dt><span><code>*(<var>pattern-list</var>)</code></span></dt>
+<dd><p>Matches zero or more occurrences of the given patterns.
+</p>
+</dd>
+<dt><span><code>+(<var>pattern-list</var>)</code></span></dt>
+<dd><p>Matches one or more occurrences of the given patterns.
+</p>
+</dd>
+<dt><span><code>@(<var>pattern-list</var>)</code></span></dt>
+<dd><p>Matches one of the given patterns.
+</p>
+</dd>
+<dt><span><code>!(<var>pattern-list</var>)</code></span></dt>
+<dd><p>Matches anything except one of the given patterns.
+</p></dd>
+</dl>
+
+<p>The <code>extglob</code> option changes the behavior of the parser, since the
+parentheses are normally treated as operators with syntactic meaning.
+To ensure that extended matching patterns are parsed correctly, make sure
+that <code>extglob</code> is enabled before parsing constructs containing the
+patterns, including shell functions and command substitutions.
+</p>
+<p>When matching filenames, the <code>dotglob</code> shell option determines
+the set of filenames that are tested:
+when <code>dotglob</code> is enabled, the set of filenames includes all files
+beginning with &lsquo;<samp>.</samp>&rsquo;, but the filenames
+&lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo; must be matched by a
+pattern or sub-pattern that begins with a dot;
+when it is disabled, the set does not
+include any filenames beginning with &ldquo;.&rdquo; unless the pattern
+or sub-pattern begins with a &lsquo;<samp>.</samp>&rsquo;.
+As above, &lsquo;<samp>.</samp>&rsquo; only has a special meaning when matching filenames.
+</p>
+<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>
+</div>
+</div>
+<div class="subsection" id="Quote-Removal">
+<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>
+<span id="Quote-Removal-1"></span><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>
+</div>
+</div>
+<div class="section" id="Redirections">
+<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>
+<span id="Redirections-1"></span><h3 class="section">3.6 Redirections</h3>
+<span id="index-redirection"></span>
+
+<p>Before a command is executed, its input and output
+may be <em>redirected</em>
+using a special notation interpreted by the shell.
+<em>Redirection</em> 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&rsquo;s lifetime manually.
+The <code>varredir_close</code> shell option manages this behavior
+(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>).
+</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><span><code>/dev/fd/<var>fd</var></code></span></dt>
+<dd><p>If <var>fd</var> is a valid integer, file descriptor <var>fd</var> is duplicated.
+</p>
+</dd>
+<dt><span><code>/dev/stdin</code></span></dt>
+<dd><p>File descriptor 0 is duplicated.
+</p>
+</dd>
+<dt><span><code>/dev/stdout</code></span></dt>
+<dd><p>File descriptor 1 is duplicated.
+</p>
+</dd>
+<dt><span><code>/dev/stderr</code></span></dt>
+<dd><p>File descriptor 2 is duplicated.
+</p>
+</dd>
+<dt><span><code>/dev/tcp/<var>host</var>/<var>port</var></code></span></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><span><code>/dev/udp/<var>host</var>/<var>port</var></code></span></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>
+<ul class="section-toc">
+<li><a href="#Redirecting-Input" accesskey="1">Redirecting Input</a></li>
+<li><a href="#Redirecting-Output" accesskey="2">Redirecting Output</a></li>
+<li><a href="#Appending-Redirected-Output" accesskey="3">Appending Redirected Output</a></li>
+<li><a href="#Redirecting-Standard-Output-and-Standard-Error" accesskey="4">Redirecting Standard Output and Standard Error</a></li>
+<li><a href="#Appending-Standard-Output-and-Standard-Error" accesskey="5">Appending Standard Output and Standard Error</a></li>
+<li><a href="#Here-Documents" accesskey="6">Here Documents</a></li>
+<li><a href="#Here-Strings" accesskey="7">Here Strings</a></li>
+<li><a href="#Duplicating-File-Descriptors" accesskey="8">Duplicating File Descriptors</a></li>
+<li><a href="#Moving-File-Descriptors" accesskey="9">Moving File Descriptors</a></li>
+<li><a href="#Opening-File-Descriptors-for-Reading-and-Writing">Opening File Descriptors for Reading and Writing</a></li>
+</ul>
+<div class="subsection" id="Redirecting-Input">
+<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>
+
+</div>
+<div class="subsection" id="Redirecting-Output">
+<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>
+</div>
+<div class="subsection" id="Appending-Redirected-Output">
+<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>
+
+</div>
+<div class="subsection" id="Redirecting-Standard-Output-and-Standard-Error">
+<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>
+</div>
+<div class="subsection" id="Appending-Standard-Output-and-Standard-Error">
+<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>
+</div>
+<div class="subsection" id="Here-Documents">
+<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>
+</div>
+<div class="subsection" id="Here-Strings">
+<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.
+Filename 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>
+</div>
+<div class="subsection" id="Duplicating-File-Descriptors">
+<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>
+</div>
+<div class="subsection" id="Moving-File-Descriptors">
+<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>
+</div>
+<div class="subsection" id="Opening-File-Descriptors-for-Reading-and-Writing">
+<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>
+</div>
+</div>
+<div class="section" id="Executing-Commands">
+<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>
+<span id="Executing-Commands-1"></span><h3 class="section">3.7 Executing Commands</h3>
+
+
+<ul class="section-toc">
+<li><a href="#Simple-Command-Expansion" accesskey="1">Simple Command Expansion</a></li>
+<li><a href="#Command-Search-and-Execution" accesskey="2">Command Search and Execution</a></li>
+<li><a href="#Command-Execution-Environment" accesskey="3">Command Execution Environment</a></li>
+<li><a href="#Environment" accesskey="4">Environment</a></li>
+<li><a href="#Exit-Status" accesskey="5">Exit Status</a></li>
+<li><a href="#Signals" accesskey="6">Signals</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Simple-Command-Expansion">
+<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>
+<span id="Simple-Command-Expansion-1"></span><h4 class="subsection">3.7.1 Simple Command Expansion</h4>
+<span id="index-command-expansion"></span>
+
+<p>When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right, in
+the following order.
+</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.
+In the case of such a command (one that consists only of assignment
+statements and redirections), assignment statements are performed before
+redirections.
+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>
+</div>
+<div class="subsection" id="Command-Search-and-Execution">
+<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>
+<span id="Command-Search-and-Execution-1"></span><h4 class="subsection">3.7.2 Command Search and Execution</h4>
+<span id="index-command-execution"></span>
+<span id="index-command-search"></span>
+
+<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
+<em>shell script</em> 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>
+</div>
+<div class="subsection" id="Command-Execution-Environment">
+<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>
+<span id="Command-Execution-Environment-1"></span><h4 class="subsection">3.7.3 Command Execution Environment</h4>
+<span id="index-execution-environment"></span>
+
+<p>The shell has an <em>execution environment</em>, 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 of Commands</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>A <em>subshell</em> is a copy of the shell process.
+</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>
+</div>
+<div class="subsection" id="Environment">
+<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>
+<span id="Environment-1"></span><h4 class="subsection">3.7.4 Environment</h4>
+<span id="index-environment"></span>
+
+<p>When a program is invoked it is given an array of strings
+called the <em>environment</em>.
+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 <code>export</code>
+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>
+</div>
+<div class="subsection" id="Exit-Status">
+<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>
+<span id="Exit-Status-1"></span><h4 class="subsection">3.7.5 Exit Status</h4>
+<span id="index-exit-status-1"></span>
+
+<p>The exit status of an executed command is the value returned by the
+<code>waitpid</code> 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 of Commands</a>).
+</p>
+<p>All of the Bash builtins return an exit status of zero if they succeed
+and a non-zero status on failure, so they may be used by the
+conditional and list constructs.
+All builtins return an exit status of 2 to indicate incorrect usage,
+generally invalid options or missing arguments.
+</p>
+<p>The exit status of the last command is available in the special
+parameter $? (see <a href="#Special-Parameters">Special Parameters</a>).
+</p>
+<hr>
+</div>
+<div class="subsection" id="Signals">
+<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>
+<span id="Signals-1"></span><h4 class="subsection">3.7.6 Signals</h4>
+<span id="index-signal-handling"></span>
+
+<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>
+<p>When job control is not enabled, and Bash is waiting for a foreground
+command to complete, the shell receives keyboard-generated signals
+such as <code>SIGINT</code> (usually generated by &lsquo;<samp>^C</samp>&rsquo;) that users
+commonly intend to send to that command.
+This happens because the shell and the command are in the same process
+group as the terminal, and &lsquo;<samp>^C</samp>&rsquo; sends <code>SIGINT</code> to all processes
+in that process group.
+See <a href="#Job-Control">Job Control</a>, for a more in-depth discussion of process groups.
+</p>
+<p>When Bash is running without job control enabled and receives <code>SIGINT</code>
+while waiting for a foreground command, it waits until that foreground
+command terminates and then decides what to do about the <code>SIGINT</code>:
+</p>
+<ol>
+<li> If the command terminates due to the <code>SIGINT</code>, Bash concludes
+that the user meant to end the entire script, and acts on the
+<code>SIGINT</code> (e.g., by running a <code>SIGINT</code> trap or exiting itself);
+
+</li><li> If the pipeline does not terminate due to <code>SIGINT</code>, the program
+handled the <code>SIGINT</code> itself and did not treat it as a fatal signal.
+In that case, Bash does not treat <code>SIGINT</code> as a fatal signal,
+either, instead assuming that the <code>SIGINT</code> was used as part of the
+program&rsquo;s normal operation (e.g., <code>emacs</code> uses it to abort editing
+commands) or deliberately discarded. However, Bash will run any
+trap set on <code>SIGINT</code>, as it does with any other trapped signal it
+receives while it is waiting for the foreground command to
+complete, for compatibility.
+</li></ol>
+
+<hr>
+</div>
+</div>
+<div class="section" id="Shell-Scripts">
+<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>
+<span id="Shell-Scripts-1"></span><h3 class="section">3.8 Shell Scripts</h3>
+<span id="index-shell-script"></span>
+
+<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 creates a
+new instance of itself
+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 and, depending on the operating system, one
+or more optional arguments for that interpreter.
+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 one or more optional arguments 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 supplied to the
+script.
+The details of how the interpreter line is split into an interpreter name
+and a set of arguments vary across systems.
+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 a single argument to a maximum of 32 characters, so it&rsquo;s not
+portable to assume that using more than one argument will work.
+</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. It&rsquo;s a common idiom to use <code>env</code> to find
+<code>bash</code> even if it&rsquo;s been installed in another directory:
+<code>#!/usr/bin/env bash</code> will find the first occurrence of <code>bash</code>
+in <code>$PATH</code>.
+</p>
+<hr>
+</div>
+</div>
+<div class="chapter" id="Shell-Builtin-Commands">
+<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">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>
+<span id="Shell-Builtin-Commands-1"></span><h2 class="chapter">4 Shell Builtin Commands</h2>
+
+
+<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>
+<ul class="section-toc">
+<li><a href="#Bourne-Shell-Builtins" accesskey="1">Bourne Shell Builtins</a></li>
+<li><a href="#Bash-Builtins" accesskey="2">Bash Builtin Commands</a></li>
+<li><a href="#Modifying-Shell-Behavior" accesskey="3">Modifying Shell Behavior</a></li>
+<li><a href="#Special-Builtins" accesskey="4">Special Builtins</a></li>
+</ul>
+<hr>
+<div class="section" id="Bourne-Shell-Builtins">
+<div class="header">
+<p>
+Next: <a href="#Bash-Builtins" accesskey="n" rel="next">Bash Builtin Commands</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>
+<span id="Bourne-Shell-Builtins-1"></span><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 id='index-_003a'><span><code>: <span class="roman">(a colon)</span></code><a href='#index-_003a' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-_002e'><span><code>. <span class="roman">(a period)</span></code><a href='#index-_002e' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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>,
+but <var>filename</var> does not need to be executable.
+When Bash is not in <small>POSIX</small> mode, it searches the current directory
+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>.</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>.</code>, and <code>.</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>.</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 id='index-break'><span><code>break</code><a href='#index-break' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-cd'><span><code>cd</code><a href='#index-cd' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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.
+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>If the directory change is successful, <code>cd</code> sets the value of the
+<code>PWD</code> environment variable to the new directory name, and sets the
+<code>OLDPWD</code> environment variable to the value of the current working
+directory before the change.
+</p>
+<p>The return status is zero if the directory is successfully changed,
+non-zero otherwise.
+</p>
+</dd>
+<dt id='index-continue'><span><code>continue</code><a href='#index-continue' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-eval'><span><code>eval</code><a href='#index-eval' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-exec'><span><code>exec</code><a href='#index-exec' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-exit'><span><code>exit</code><a href='#index-exit' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-export'><span><code>export</code><a href='#index-export' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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>name</var>s 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 id='index-getopts'><span><code>getopts</code><a href='#index-getopts' class='copiable-anchor'> &para;</a></span></dt>
+<dd><div class="example">
+<pre class="example">getopts <var>optstring</var> <var>name</var> [<var>arg</var> &hellip;]
+</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
+supplied as <var>arg</var> values, <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 id='index-hash'><span><code>hash</code><a href='#index-hash' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-pwd'><span><code>pwd</code><a href='#index-pwd' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-readonly'><span><code>readonly</code><a href='#index-readonly' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-return'><span><code>return</code><a href='#index-return' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-shift'><span><code>shift</code><a href='#index-shift' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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> down 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 id='index-test'><span><code>test</code><a href='#index-test' class='copiable-anchor'> &para;</a></span></dt>
+<dt><span><code>[</code></span></dt>
+<dd><span id="index-_005b"></span>
+<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><span><code>! <var>expr</var></code></span></dt>
+<dd><p>True if <var>expr</var> is false.
+</p>
+</dd>
+<dt><span><code>( <var>expr</var> )</code></span></dt>
+<dd><p>Returns the value of <var>expr</var>.
+This may be used to override the normal precedence of operators.
+</p>
+</dd>
+<dt><span><code><var>expr1</var> -a <var>expr2</var></code></span></dt>
+<dd><p>True if both <var>expr1</var> and <var>expr2</var> are true.
+</p>
+</dd>
+<dt><span><code><var>expr1</var> -o <var>expr2</var></code></span></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><span>0 arguments</span></dt>
+<dd><p>The expression is false.
+</p>
+</dd>
+<dt><span>1 argument</span></dt>
+<dd><p>The expression is true if, and only if, the argument is not null.
+</p>
+</dd>
+<dt><span>2 arguments</span></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><span>3 arguments</span></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><span>4 arguments</span></dt>
+<dd><p>The following conditions are applied in the order listed.
+</p>
+<ol>
+<li> If the first argument is &lsquo;<samp>!</samp>&rsquo;, the result is the negation of
+the three-argument expression composed of the remaining arguments.
+</li><li> If the first argument is exactly &lsquo;<samp>(</samp>&rsquo; and the fourth argument is
+exactly &lsquo;<samp>)</samp>&rsquo;, the result is the two-argument test of the second
+and third arguments.
+</li><li> Otherwise, the expression is parsed and evaluated according to
+precedence using the rules listed above.
+</li></ol>
+
+</dd>
+<dt><span>5 or more arguments</span></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 id='index-times'><span><code>times</code><a href='#index-times' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-trap'><span><code>trap</code><a href='#index-trap' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-umask'><span><code>umask</code><a href='#index-umask' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-unset'><span><code>unset</code><a href='#index-unset' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 <code>nameref</code> 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, a function with that name, if any, is
+unset.
+Readonly variables and functions may not be unset.
+Some shell variables lose their special behavior if they are unset; such
+behavior is noted in the description of the individual variables.
+The return status is zero unless a <var>name</var> is readonly or may not be unset.
+</p></dd>
+</dl>
+
+<hr>
+</div>
+<div class="section" id="Bash-Builtins">
+<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>
+<span id="Bash-Builtin-Commands"></span><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 id='index-alias'><span><code>alias</code><a href='#index-alias' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-bind'><span><code>bind</code><a href='#index-bind' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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>
+bind <var>readline-command-line</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><span><code>-m <var>keymap</var></code></span></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><span><code>-l</code></span></dt>
+<dd><p>List the names of all Readline functions.
+</p>
+</dd>
+<dt><span><code>-p</code></span></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><span><code>-P</code></span></dt>
+<dd><p>List current Readline function names and bindings.
+</p>
+</dd>
+<dt><span><code>-v</code></span></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><span><code>-V</code></span></dt>
+<dd><p>List current Readline variable names and values.
+</p>
+</dd>
+<dt><span><code>-s</code></span></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><span><code>-S</code></span></dt>
+<dd><p>Display Readline key sequences bound to macros and the strings they output.
+</p>
+</dd>
+<dt><span><code>-f <var>filename</var></code></span></dt>
+<dd><p>Read key bindings from <var>filename</var>.
+</p>
+</dd>
+<dt><span><code>-q <var>function</var></code></span></dt>
+<dd><p>Query about which keys invoke the named <var>function</var>.
+</p>
+</dd>
+<dt><span><code>-u <var>function</var></code></span></dt>
+<dd><p>Unbind all keys bound to the named <var>function</var>.
+</p>
+</dd>
+<dt><span><code>-r <var>keyseq</var></code></span></dt>
+<dd><p>Remove any current binding for <var>keyseq</var>.
+</p>
+</dd>
+<dt><span><code>-x <var>keyseq:shell-command</var></code></span></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> and <code>READLINE_MARK</code> variables
+to the current location of the insertion point and the saved insertion
+point (the <var>mark</var>), respectively.
+The shell assigns any numeric argument the user supplied to the
+<code>READLINE_ARGUMENT</code> variable.
+If there was no argument, that variable is not set.
+If the executed command changes the value of any of <code>READLINE_LINE</code>,
+<code>READLINE_POINT</code>, or <code>READLINE_MARK</code>, those new values will be
+reflected in the editing state.
+</p>
+</dd>
+<dt><span><code>-X</code></span></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 id='index-builtin'><span><code>builtin</code><a href='#index-builtin' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-caller'><span><code>caller</code><a href='#index-caller' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-command'><span><code>command</code><a href='#index-command' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-declare'><span><code>declare</code><a href='#index-declare' class='copiable-anchor'> &para;</a></span></dt>
+<dd><div class="example">
+<pre class="example">declare [-aAfFgiIlnrtux] [-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 <samp>-I</samp> option causes local variables to inherit the attributes
+(except the <code>nameref</code> attribute)
+and value of any existing variable with the same
+<var>name</var> at a surrounding scope.
+If there is no existing variable, the local variable is initially unset.
+</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><span><code>-a</code></span></dt>
+<dd><p>Each <var>name</var> is an indexed array variable (see <a href="#Arrays">Arrays</a>).
+</p>
+</dd>
+<dt><span><code>-A</code></span></dt>
+<dd><p>Each <var>name</var> is an associative array variable (see <a href="#Arrays">Arrays</a>).
+</p>
+</dd>
+<dt><span><code>-f</code></span></dt>
+<dd><p>Use function names only.
+</p>
+</dd>
+<dt><span><code>-i</code></span></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><span><code>-l</code></span></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><span><code>-n</code></span></dt>
+<dd><p>Give each <var>name</var> the <code>nameref</code> 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><span><code>-r</code></span></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><span><code>-t</code></span></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><span><code>-u</code></span></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><span><code>-x</code></span></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>name</var>s 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 id='index-echo'><span><code>echo</code><a href='#index-echo' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>\a</code></span></dt>
+<dd><p>alert (bell)
+</p></dd>
+<dt><span><code>\b</code></span></dt>
+<dd><p>backspace
+</p></dd>
+<dt><span><code>\c</code></span></dt>
+<dd><p>suppress further output
+</p></dd>
+<dt><span><code>\e</code></span></dt>
+<dt><span><code>\E</code></span></dt>
+<dd><p>escape
+</p></dd>
+<dt><span><code>\f</code></span></dt>
+<dd><p>form feed
+</p></dd>
+<dt><span><code>\n</code></span></dt>
+<dd><p>new line
+</p></dd>
+<dt><span><code>\r</code></span></dt>
+<dd><p>carriage return
+</p></dd>
+<dt><span><code>\t</code></span></dt>
+<dd><p>horizontal tab
+</p></dd>
+<dt><span><code>\v</code></span></dt>
+<dd><p>vertical tab
+</p></dd>
+<dt><span><code>\\</code></span></dt>
+<dd><p>backslash
+</p></dd>
+<dt><span><code>\0<var>nnn</var></code></span></dt>
+<dd><p>the eight-bit character whose value is the octal value <var>nnn</var>
+(zero to three octal digits)
+</p></dd>
+<dt><span><code>\x<var>HH</var></code></span></dt>
+<dd><p>the eight-bit character whose value is the hexadecimal value <var>HH</var>
+(one or two hex digits)
+</p></dd>
+<dt><span><code>\u<var>HHHH</var></code></span></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><span><code>\U<var>HHHHHHHH</var></code></span></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 id='index-enable'><span><code>enable</code><a href='#index-enable' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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.
+Bash will use the value of the <code>BASH_LOADABLES_PATH</code> variable as a
+colon-separated list of directories in which to search for <var>filename</var>.
+The default is system-dependent.
+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>If no options are supplied and a <var>name</var> is not a shell builtin,
+<code>enable</code> will attempt to load <var>name</var> from a shared object named
+<var>name</var>, as if the command were
+&lsquo;<samp>enable -f <var>name</var> <var>name</var></samp>&rsquo;.
+</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 id='index-help'><span><code>help</code><a href='#index-help' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>-d</code></span></dt>
+<dd><p>Display a short description of each <var>pattern</var>
+</p></dd>
+<dt><span><code>-m</code></span></dt>
+<dd><p>Display the description of each <var>pattern</var> in a manpage-like format
+</p></dd>
+<dt><span><code>-s</code></span></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 id='index-let'><span><code>let</code><a href='#index-let' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-local'><span><code>local</code><a href='#index-local' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 restore is effected as if a series of <code>set</code> commands were executed
+to restore the values that were in place before the function.
+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 id='index-logout'><span><code>logout</code><a href='#index-logout' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-mapfile'><span><code>mapfile</code><a href='#index-mapfile' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>-d</code></span></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><span><code>-n</code></span></dt>
+<dd><p>Copy at most <var>count</var> lines. If <var>count</var> is 0, all lines are copied.
+</p></dd>
+<dt><span><code>-O</code></span></dt>
+<dd><p>Begin assigning to <var>array</var> at index <var>origin</var>.
+The default index is 0.
+</p></dd>
+<dt><span><code>-s</code></span></dt>
+<dd><p>Discard the first <var>count</var> lines read.
+</p></dd>
+<dt><span><code>-t</code></span></dt>
+<dd><p>Remove a trailing <var>delim</var> (default newline) from each line read.
+</p></dd>
+<dt><span><code>-u</code></span></dt>
+<dd><p>Read lines from file descriptor <var>fd</var> instead of the standard input.
+</p></dd>
+<dt><span><code>-C</code></span></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><span><code>-c</code></span></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 id='index-printf'><span><code>printf</code><a href='#index-printf' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>%b</code></span></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 Builtin Commands</a>).
+</p></dd>
+<dt><span><code>%q</code></span></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><span><code>%Q</code></span></dt>
+<dd><p>like <code>%q</code>, but applies any supplied precision to the <var>argument</var>
+before quoting it.
+</p></dd>
+<dt><span><code>%(<var>datefmt</var>)T</code></span></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>The %b, %q, and %T directives all use the field width and precision
+arguments from the format specification and write that many bytes from
+(or use that wide a field for) the expanded argument, which usually
+contains more characters than the original.
+</p>
+<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 id='index-read'><span><code>read</code><a href='#index-read' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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.
+</p>
+<p>Options, if supplied, have the following meanings:
+</p>
+<dl compact="compact">
+<dt><span><code>-a <var>aname</var></code></span></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><span><code>-d <var>delim</var></code></span></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><span><code>-e</code></span></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><span><code>-i <var>text</var></code></span></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><span><code>-n <var>nchars</var></code></span></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><span><code>-N <var>nchars</var></code></span></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><span><code>-p <var>prompt</var></code></span></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><span><code>-r</code></span></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><span><code>-s</code></span></dt>
+<dd><p>Silent mode. If input is coming from a terminal, characters are
+not echoed.
+</p>
+</dd>
+<dt><span><code>-t <var>timeout</var></code></span></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 any data.
+The exit status is 0 if input is available on the specified file descriptor,
+or the read will return EOF,
+non-zero otherwise.
+The exit status is greater than 128 if the timeout is exceeded.
+</p>
+</dd>
+<dt><span><code>-u <var>fd</var></code></span></dt>
+<dd><p>Read input from file descriptor <var>fd</var>.
+</p></dd>
+</dl>
+
+<p>If no <var>name</var>s are supplied, the line read,
+without the ending delimiter but otherwise unmodified,
+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>
+</dd>
+<dt id='index-readarray'><span><code>readarray</code><a href='#index-readarray' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-source'><span><code>source</code><a href='#index-source' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-type'><span><code>type</code><a href='#index-type' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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>name</var>s are found, non-zero
+if any are not found.
+</p>
+</dd>
+<dt id='index-typeset'><span><code>typeset</code><a href='#index-typeset' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-ulimit'><span><code>ulimit</code><a href='#index-ulimit' class='copiable-anchor'> &para;</a></span></dt>
+<dd><div class="example">
+<pre class="example">ulimit [-HS] -a
+ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [<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><span><code>-S</code></span></dt>
+<dd><p>Change and report the soft limit associated with a resource.
+</p>
+</dd>
+<dt><span><code>-H</code></span></dt>
+<dd><p>Change and report the hard limit associated with a resource.
+</p>
+</dd>
+<dt><span><code>-a</code></span></dt>
+<dd><p>All current limits are reported; no limits are set.
+</p>
+</dd>
+<dt><span><code>-b</code></span></dt>
+<dd><p>The maximum socket buffer size.
+</p>
+</dd>
+<dt><span><code>-c</code></span></dt>
+<dd><p>The maximum size of core files created.
+</p>
+</dd>
+<dt><span><code>-d</code></span></dt>
+<dd><p>The maximum size of a process&rsquo;s data segment.
+</p>
+</dd>
+<dt><span><code>-e</code></span></dt>
+<dd><p>The maximum scheduling priority (&quot;nice&quot;).
+</p>
+</dd>
+<dt><span><code>-f</code></span></dt>
+<dd><p>The maximum size of files written by the shell and its children.
+</p>
+</dd>
+<dt><span><code>-i</code></span></dt>
+<dd><p>The maximum number of pending signals.
+</p>
+</dd>
+<dt><span><code>-k</code></span></dt>
+<dd><p>The maximum number of kqueues that may be allocated.
+</p>
+</dd>
+<dt><span><code>-l</code></span></dt>
+<dd><p>The maximum size that may be locked into memory.
+</p>
+</dd>
+<dt><span><code>-m</code></span></dt>
+<dd><p>The maximum resident set size (many systems do not honor this limit).
+</p>
+</dd>
+<dt><span><code>-n</code></span></dt>
+<dd><p>The maximum number of open file descriptors (most systems do not
+allow this value to be set).
+</p>
+</dd>
+<dt><span><code>-p</code></span></dt>
+<dd><p>The pipe buffer size.
+</p>
+</dd>
+<dt><span><code>-q</code></span></dt>
+<dd><p>The maximum number of bytes in <small>POSIX</small> message queues.
+</p>
+</dd>
+<dt><span><code>-r</code></span></dt>
+<dd><p>The maximum real-time scheduling priority.
+</p>
+</dd>
+<dt><span><code>-s</code></span></dt>
+<dd><p>The maximum stack size.
+</p>
+</dd>
+<dt><span><code>-t</code></span></dt>
+<dd><p>The maximum amount of cpu time in seconds.
+</p>
+</dd>
+<dt><span><code>-u</code></span></dt>
+<dd><p>The maximum number of processes available to a single user.
+</p>
+</dd>
+<dt><span><code>-v</code></span></dt>
+<dd><p>The maximum amount of virtual memory available to the shell, and, on
+some systems, to its children.
+</p>
+</dd>
+<dt><span><code>-x</code></span></dt>
+<dd><p>The maximum number of file locks.
+</p>
+</dd>
+<dt><span><code>-P</code></span></dt>
+<dd><p>The maximum number of pseudoterminals.
+</p>
+</dd>
+<dt><span><code>-R</code></span></dt>
+<dd><p>The maximum time a real-time process can run before blocking, in microseconds.
+</p>
+</dd>
+<dt><span><code>-T</code></span></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 more than one
+resource is specified, the limit name and unit, if appropriate,
+are printed before the value.
+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>-R</samp>, which is in microseconds;
+<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 id='index-unalias'><span><code>unalias</code><a href='#index-unalias' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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>
+</div>
+<div class="section" id="Modifying-Shell-Behavior">
+<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 Builtin Commands</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>
+<span id="Modifying-Shell-Behavior-1"></span><h3 class="section">4.3 Modifying Shell Behavior</h3>
+
+
+<ul class="section-toc">
+<li><a href="#The-Set-Builtin" accesskey="1">The Set Builtin</a></li>
+<li><a href="#The-Shopt-Builtin" accesskey="2">The Shopt Builtin</a></li>
+</ul>
+<hr>
+<div class="subsection" id="The-Set-Builtin">
+<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>
+<span id="The-Set-Builtin-1"></span><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 id='index-set'><span><code>set</code><a href='#index-set' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>-a</code></span></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><span><code>-b</code></span></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><span><code>-e</code></span></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 of Commands</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><span><code>-f</code></span></dt>
+<dd><p>Disable filename expansion (globbing).
+</p>
+</dd>
+<dt><span><code>-h</code></span></dt>
+<dd><p>Locate and remember (hash) commands as they are looked up for execution.
+This option is enabled by default.
+</p>
+</dd>
+<dt><span><code>-k</code></span></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><span><code>-m</code></span></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><span><code>-n</code></span></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><span><code>-o <var>option-name</var></code></span></dt>
+<dd>
+<p>Set the option corresponding to <var>option-name</var>:
+</p>
+<dl compact="compact">
+<dt><span><code>allexport</code></span></dt>
+<dd><p>Same as <code>-a</code>.
+</p>
+</dd>
+<dt><span><code>braceexpand</code></span></dt>
+<dd><p>Same as <code>-B</code>.
+</p>
+</dd>
+<dt><span><code>emacs</code></span></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><span><code>errexit</code></span></dt>
+<dd><p>Same as <code>-e</code>.
+</p>
+</dd>
+<dt><span><code>errtrace</code></span></dt>
+<dd><p>Same as <code>-E</code>.
+</p>
+</dd>
+<dt><span><code>functrace</code></span></dt>
+<dd><p>Same as <code>-T</code>.
+</p>
+</dd>
+<dt><span><code>hashall</code></span></dt>
+<dd><p>Same as <code>-h</code>.
+</p>
+</dd>
+<dt><span><code>histexpand</code></span></dt>
+<dd><p>Same as <code>-H</code>.
+</p>
+</dd>
+<dt><span><code>history</code></span></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><span><code>ignoreeof</code></span></dt>
+<dd><p>An interactive shell will not exit upon reading EOF.
+</p>
+</dd>
+<dt><span><code>keyword</code></span></dt>
+<dd><p>Same as <code>-k</code>.
+</p>
+</dd>
+<dt><span><code>monitor</code></span></dt>
+<dd><p>Same as <code>-m</code>.
+</p>
+</dd>
+<dt><span><code>noclobber</code></span></dt>
+<dd><p>Same as <code>-C</code>.
+</p>
+</dd>
+<dt><span><code>noexec</code></span></dt>
+<dd><p>Same as <code>-n</code>.
+</p>
+</dd>
+<dt><span><code>noglob</code></span></dt>
+<dd><p>Same as <code>-f</code>.
+</p>
+</dd>
+<dt><span><code>nolog</code></span></dt>
+<dd><p>Currently ignored.
+</p>
+</dd>
+<dt><span><code>notify</code></span></dt>
+<dd><p>Same as <code>-b</code>.
+</p>
+</dd>
+<dt><span><code>nounset</code></span></dt>
+<dd><p>Same as <code>-u</code>.
+</p>
+</dd>
+<dt><span><code>onecmd</code></span></dt>
+<dd><p>Same as <code>-t</code>.
+</p>
+</dd>
+<dt><span><code>physical</code></span></dt>
+<dd><p>Same as <code>-P</code>.
+</p>
+</dd>
+<dt><span><code>pipefail</code></span></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><span><code>posix</code></span></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><span><code>privileged</code></span></dt>
+<dd><p>Same as <code>-p</code>.
+</p>
+</dd>
+<dt><span><code>verbose</code></span></dt>
+<dd><p>Same as <code>-v</code>.
+</p>
+</dd>
+<dt><span><code>vi</code></span></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><span><code>xtrace</code></span></dt>
+<dd><p>Same as <code>-x</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt><span><code>-p</code></span></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><span><code>-r</code></span></dt>
+<dd><p>Enable restricted shell mode.
+This option cannot be unset once it has been set.
+</p>
+</dd>
+<dt><span><code>-t</code></span></dt>
+<dd><p>Exit after reading and executing one command.
+</p>
+</dd>
+<dt><span><code>-u</code></span></dt>
+<dd><p>Treat unset variables and parameters other than the special parameters
+&lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+or array variables subscripted with &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><span><code>-v</code></span></dt>
+<dd><p>Print shell input lines as they are read.
+</p>
+</dd>
+<dt><span><code>-x</code></span></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><span><code>-B</code></span></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><span><code>-C</code></span></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><span><code>-E</code></span></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><span><code>-H</code></span></dt>
+<dd><p>Enable &lsquo;<samp>!</samp>&rsquo; style history substitution (see <a href="#History-Interaction">History Expansion</a>).
+This option is on by default for interactive shells.
+</p>
+</dd>
+<dt><span><code>-P</code></span></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><span><code>-T</code></span></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><span><code>--</code></span></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><span><code>-</code></span></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>
+</div>
+<div class="subsection" id="The-Shopt-Builtin">
+<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>
+<span id="The-Shopt-Builtin-1"></span><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 id='index-shopt'><span><code>shopt</code><a href='#index-shopt' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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>optname</var>s 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><span><code>-s</code></span></dt>
+<dd><p>Enable (set) each <var>optname</var>.
+</p>
+</dd>
+<dt><span><code>-u</code></span></dt>
+<dd><p>Disable (unset) each <var>optname</var>.
+</p>
+</dd>
+<dt><span><code>-q</code></span></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>optname</var>s are enabled;
+non-zero otherwise.
+</p>
+</dd>
+<dt><span><code>-o</code></span></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>optname</var>s
+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><span><code>assoc_expand_once</code></span></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><span><code>autocd</code></span></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><span><code>cdable_vars</code></span></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><span><code>cdspell</code></span></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><span><code>checkhash</code></span></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><span><code>checkjobs</code></span></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><span><code>checkwinsize</code></span></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><span><code>cmdhist</code></span></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><span><code>compat31</code></span></dt>
+<dt><span><code>compat32</code></span></dt>
+<dt><span><code>compat40</code></span></dt>
+<dt><span><code>compat41</code></span></dt>
+<dt><span><code>compat42</code></span></dt>
+<dt><span><code>compat43</code></span></dt>
+<dt><span><code>compat44</code></span></dt>
+<dd><p>These control aspects of the shell&rsquo;s compatibility mode
+(see <a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>).
+</p>
+</dd>
+<dt><span><code>complete_fullquote</code></span></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><span><code>direxpand</code></span></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><span><code>dirspell</code></span></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><span><code>dotglob</code></span></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><span><code>execfail</code></span></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><span><code>expand_aliases</code></span></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><span><code>extdebug</code></span></dt>
+<dd><p>If set at shell invocation,
+or in a shell startup file,
+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 Builtin Commands</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><span><code>extglob</code></span></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><span><code>extquote</code></span></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><span><code>failglob</code></span></dt>
+<dd><p>If set, patterns which fail to match filenames during filename expansion
+result in an expansion error.
+</p>
+</dd>
+<dt><span><code>force_fignore</code></span></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><span><code>globasciiranges</code></span></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><span><code>globskipdots</code></span></dt>
+<dd><p>If set, filename expansion will never match the filenames
+&lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo;,
+even if the pattern begins with a &lsquo;<samp>.</samp>&rsquo;.
+This option is enabled by default.
+</p>
+</dd>
+<dt><span><code>globstar</code></span></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><span><code>gnu_errfmt</code></span></dt>
+<dd><p>If set, shell error messages are written in the standard <small>GNU</small> error
+message format.
+</p>
+</dd>
+<dt><span><code>histappend</code></span></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><span><code>histreedit</code></span></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><span><code>histverify</code></span></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><span><code>hostcomplete</code></span></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">Letting Readline Type For You</a>). This option is enabled
+by default.
+</p>
+</dd>
+<dt><span><code>huponexit</code></span></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><span><code>inherit_errexit</code></span></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><span><code>interactive_comments</code></span></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><span><code>lastpipe</code></span></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><span><code>lithist</code></span></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><span><code>localvar_inherit</code></span></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 <code>nameref</code> attribute is not inherited.
+</p>
+</dd>
+<dt><span><code>localvar_unset</code></span></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><span><code>login_shell</code></span></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><span><code>mailwarn</code></span></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><span><code>no_empty_cmd_completion</code></span></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><span><code>nocaseglob</code></span></dt>
+<dd><p>If set, Bash matches filenames in a case-insensitive fashion when
+performing filename expansion.
+</p>
+</dd>
+<dt><span><code>nocasematch</code></span></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 (see <a href="#Conditional-Constructs">Conditional Constructs</a>,
+when performing pattern substitution word expansions,
+or when filtering possible completions as part of programmable completion.
+</p>
+</dd>
+<dt><span><code>noexpand_translation</code></span></dt>
+<dd><p>If set, Bash
+encloses the translated results of $&quot;...&quot; quoting in single quotes
+instead of double quotes.
+If the string is not translated, this has no effect.
+</p>
+</dd>
+<dt><span><code>nullglob</code></span></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><span><code>patsub_replacement</code></span></dt>
+<dd><p>If set, Bash
+expands occurrences of &lsquo;<samp>&amp;</samp>&rsquo; in the replacement string of pattern
+substitution to the text matched by the pattern, as described
+above (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+This option is enabled by default.
+</p>
+</dd>
+<dt><span><code>progcomp</code></span></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><span><code>progcomp_alias</code></span></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><span><code>promptvars</code></span></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><span><code>restricted_shell</code></span></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><span><code>shift_verbose</code></span></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><span><code>sourcepath</code></span></dt>
+<dd><p>If set, the <code>.</code> (<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><span><code>varredir_close</code></span></dt>
+<dd><p>If set, the shell automatically closes file descriptors assigned using the
+<code>{varname}</code> redirection syntax (see <a href="#Redirections">Redirections</a>) instead of
+leaving them open when the command completes.
+</p>
+</dd>
+<dt><span><code>xpg_echo</code></span></dt>
+<dd><p>If set, the <code>echo</code> builtin expands backslash-escape sequences
+by default.
+</p>
+</dd>
+</dl>
+</dd>
+</dl>
+
+<hr>
+</div>
+</div>
+<div class="section" id="Special-Builtins">
+<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>
+<span id="Special-Builtins-1"></span><h3 class="section">4.4 Special Builtins</h3>
+<span id="index-special-builtin-1"></span>
+
+<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>
+</div>
+</div>
+<div class="chapter" id="Shell-Variables">
+<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">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>
+<span id="Shell-Variables-1"></span><h2 class="chapter">5 Shell Variables</h2>
+
+
+<p>This chapter describes the shell variables that Bash uses.
+Bash automatically assigns default values to a number of variables.
+</p>
+<ul class="section-toc">
+<li><a href="#Bourne-Shell-Variables" accesskey="1">Bourne Shell Variables</a></li>
+<li><a href="#Bash-Variables" accesskey="2">Bash Variables</a></li>
+</ul>
+<hr>
+<div class="section" id="Bourne-Shell-Variables">
+<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>
+<span id="Bourne-Shell-Variables-1"></span><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 id='index-CDPATH'><span><code>CDPATH</code><a href='#index-CDPATH' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A colon-separated list of directories used as a search path for
+the <code>cd</code> builtin command.
+</p>
+</dd>
+<dt id='index-HOME'><span><code>HOME</code><a href='#index-HOME' class='copiable-anchor'> &para;</a></span></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 id='index-IFS'><span><code>IFS</code><a href='#index-IFS' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A list of characters that separate fields; used when the shell splits
+words as part of expansion.
+</p>
+</dd>
+<dt id='index-MAIL'><span><code>MAIL</code><a href='#index-MAIL' class='copiable-anchor'> &para;</a></span></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 id='index-MAILPATH'><span><code>MAILPATH</code><a href='#index-MAILPATH' class='copiable-anchor'> &para;</a></span></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 id='index-OPTARG'><span><code>OPTARG</code><a href='#index-OPTARG' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The value of the last option argument processed by the <code>getopts</code> builtin.
+</p>
+</dd>
+<dt id='index-OPTIND'><span><code>OPTIND</code><a href='#index-OPTIND' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The index of the last option argument processed by the <code>getopts</code> builtin.
+</p>
+</dd>
+<dt id='index-PATH'><span><code>PATH</code><a href='#index-PATH' class='copiable-anchor'> &para;</a></span></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 id='index-PS1'><span><code>PS1</code><a href='#index-PS1' class='copiable-anchor'> &para;</a></span></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 id='index-PS2'><span><code>PS2</code><a href='#index-PS2' class='copiable-anchor'> &para;</a></span></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>
+</div>
+<div class="section" id="Bash-Variables">
+<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>
+<span id="Bash-Variables-1"></span><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 id='index-_005f'><span><code>_</code><a href='#index-_005f' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-_0024_005f"></span>
+<p>($_, an underscore.)
+At shell startup, set to the 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>
+<dt id='index-BASH'><span><code>BASH</code><a href='#index-BASH' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The full pathname used to execute the current instance of Bash.
+</p>
+</dd>
+<dt id='index-BASHOPTS'><span><code>BASHOPTS</code><a href='#index-BASHOPTS' class='copiable-anchor'> &para;</a></span></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 id='index-BASHPID'><span><code>BASHPID</code><a href='#index-BASHPID' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fALIASES'><span><code>BASH_ALIASES</code><a href='#index-BASH_005fALIASES' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fARGC'><span><code>BASH_ARGC</code><a href='#index-BASH_005fARGC' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fARGV'><span><code>BASH_ARGV</code><a href='#index-BASH_005fARGV' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fARGV0'><span><code>BASH_ARGV0</code><a href='#index-BASH_005fARGV0' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fCMDS'><span><code>BASH_CMDS</code><a href='#index-BASH_005fCMDS' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fCOMMAND'><span><code>BASH_COMMAND</code><a href='#index-BASH_005fCOMMAND' class='copiable-anchor'> &para;</a></span></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.
+If <code>BASH_COMMAND</code>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt id='index-BASH_005fCOMPAT'><span><code>BASH_COMPAT</code><a href='#index-BASH_005fCOMPAT' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The value is used to set the shell&rsquo;s compatibility level.
+See <a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</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 values correspond to the compatibility levels
+described below (see <a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a>).
+For example, 4.2 and 42 are valid values that correspond
+to the <code>compat42</code> <code>shopt</code> option
+and set the compatibility level to 42.
+The current version is also a valid value.
+</p>
+</dd>
+<dt id='index-BASH_005fENV'><span><code>BASH_ENV</code><a href='#index-BASH_005fENV' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fEXECUTION_005fSTRING'><span><code>BASH_EXECUTION_STRING</code><a href='#index-BASH_005fEXECUTION_005fSTRING' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The command argument to the <samp>-c</samp> invocation option.
+</p>
+</dd>
+<dt id='index-BASH_005fLINENO'><span><code>BASH_LINENO</code><a href='#index-BASH_005fLINENO' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>An array variable whose members are the line numbers in source files
+where each corresponding member of <code>FUNCNAME</code> 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 id='index-BASH_005fLOADABLES_005fPATH'><span><code>BASH_LOADABLES_PATH</code><a href='#index-BASH_005fLOADABLES_005fPATH' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fREMATCH'><span><code>BASH_REMATCH</code><a href='#index-BASH_005fREMATCH' class='copiable-anchor'> &para;</a></span></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.
+</p>
+</dd>
+<dt id='index-BASH_005fSOURCE'><span><code>BASH_SOURCE</code><a href='#index-BASH_005fSOURCE' class='copiable-anchor'> &para;</a></span></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 id='index-BASH_005fSUBSHELL'><span><code>BASH_SUBSHELL</code><a href='#index-BASH_005fSUBSHELL' class='copiable-anchor'> &para;</a></span></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.
+If <code>BASH_SUBSHELL</code>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt id='index-BASH_005fVERSINFO'><span><code>BASH_VERSINFO</code><a href='#index-BASH_005fVERSINFO' class='copiable-anchor'> &para;</a></span></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><span><code>BASH_VERSINFO[0]</code></span></dt>
+<dd><p>The major version number (the <em>release</em>).
+</p>
+</dd>
+<dt><span><code>BASH_VERSINFO[1]</code></span></dt>
+<dd><p>The minor version number (the <em>version</em>).
+</p>
+</dd>
+<dt><span><code>BASH_VERSINFO[2]</code></span></dt>
+<dd><p>The patch level.
+</p>
+</dd>
+<dt><span><code>BASH_VERSINFO[3]</code></span></dt>
+<dd><p>The build version.
+</p>
+</dd>
+<dt><span><code>BASH_VERSINFO[4]</code></span></dt>
+<dd><p>The release status (e.g., <code>beta1</code>).
+</p>
+</dd>
+<dt><span><code>BASH_VERSINFO[5]</code></span></dt>
+<dd><p>The value of <code>MACHTYPE</code>.
+</p></dd>
+</dl>
+
+</dd>
+<dt id='index-BASH_005fVERSION'><span><code>BASH_VERSION</code><a href='#index-BASH_005fVERSION' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The version number of the current instance of Bash.
+</p>
+</dd>
+<dt id='index-BASH_005fXTRACEFD'><span><code>BASH_XTRACEFD</code><a href='#index-BASH_005fXTRACEFD' class='copiable-anchor'> &para;</a></span></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 id='index-CHILD_005fMAX'><span><code>CHILD_MAX</code><a href='#index-CHILD_005fMAX' class='copiable-anchor'> &para;</a></span></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 id='index-COLUMNS'><span><code>COLUMNS</code><a href='#index-COLUMNS' class='copiable-anchor'> &para;</a></span></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 id='index-COMP_005fCWORD'><span><code>COMP_CWORD</code><a href='#index-COMP_005fCWORD' class='copiable-anchor'> &para;</a></span></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 id='index-COMP_005fLINE'><span><code>COMP_LINE</code><a href='#index-COMP_005fLINE' class='copiable-anchor'> &para;</a></span></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 id='index-COMP_005fPOINT'><span><code>COMP_POINT</code><a href='#index-COMP_005fPOINT' class='copiable-anchor'> &para;</a></span></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 id='index-COMP_005fTYPE'><span><code>COMP_TYPE</code><a href='#index-COMP_005fTYPE' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Set to an integer value corresponding to the type of completion attempted
+that caused a completion function to be called:
+<tt class="key">TAB</tt>, 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 id='index-COMP_005fKEY'><span><code>COMP_KEY</code><a href='#index-COMP_005fKEY' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The key (or final key of a key sequence) used to invoke the current
+completion function.
+</p>
+</dd>
+<dt id='index-COMP_005fWORDBREAKS'><span><code>COMP_WORDBREAKS</code><a href='#index-COMP_005fWORDBREAKS' class='copiable-anchor'> &para;</a></span></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 id='index-COMP_005fWORDS'><span><code>COMP_WORDS</code><a href='#index-COMP_005fWORDS' class='copiable-anchor'> &para;</a></span></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 id='index-COMPREPLY'><span><code>COMPREPLY</code><a href='#index-COMPREPLY' class='copiable-anchor'> &para;</a></span></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 id='index-COPROC'><span><code>COPROC</code><a href='#index-COPROC' class='copiable-anchor'> &para;</a></span></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 id='index-DIRSTACK'><span><code>DIRSTACK</code><a href='#index-DIRSTACK' class='copiable-anchor'> &para;</a></span></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 id='index-EMACS'><span><code>EMACS</code><a href='#index-EMACS' class='copiable-anchor'> &para;</a></span></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 id='index-ENV'><span><code>ENV</code><a href='#index-ENV' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Expanded and executed similarly to <code>BASH_ENV</code>
+(see <a href="#Bash-Startup-Files">Bash Startup Files</a>)
+when an interactive shell is invoked in
+<small>POSIX</small> Mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
+</p>
+</dd>
+<dt id='index-EPOCHREALTIME'><span><code>EPOCHREALTIME</code><a href='#index-EPOCHREALTIME' class='copiable-anchor'> &para;</a></span></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 <code>time</code> 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 id='index-EPOCHSECONDS'><span><code>EPOCHSECONDS</code><a href='#index-EPOCHSECONDS' class='copiable-anchor'> &para;</a></span></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
+<code>time</code> 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 id='index-EUID'><span><code>EUID</code><a href='#index-EUID' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The numeric effective user id of the current user. This variable
+is readonly.
+</p>
+</dd>
+<dt id='index-EXECIGNORE'><span><code>EXECIGNORE</code><a href='#index-EXECIGNORE' class='copiable-anchor'> &para;</a></span></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 id='index-FCEDIT'><span><code>FCEDIT</code><a href='#index-FCEDIT' class='copiable-anchor'> &para;</a></span></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 id='index-FIGNORE'><span><code>FIGNORE</code><a href='#index-FIGNORE' class='copiable-anchor'> &para;</a></span></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 id='index-FUNCNAME'><span><code>FUNCNAME</code><a href='#index-FUNCNAME' class='copiable-anchor'> &para;</a></span></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 id='index-FUNCNEST'><span><code>FUNCNEST</code><a href='#index-FUNCNEST' class='copiable-anchor'> &para;</a></span></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 id='index-GLOBIGNORE'><span><code>GLOBIGNORE</code><a href='#index-GLOBIGNORE' class='copiable-anchor'> &para;</a></span></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 id='index-GROUPS'><span><code>GROUPS</code><a href='#index-GROUPS' class='copiable-anchor'> &para;</a></span></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 id='index-histchars'><span><code>histchars</code><a href='#index-histchars' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Up to three characters which control history expansion, quick
+substitution, and tokenization (see <a href="#History-Interaction">History Expansion</a>).
+The first character is the
+<em>history expansion</em> 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 id='index-HISTCMD'><span><code>HISTCMD</code><a href='#index-HISTCMD' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The history number, or index in the history list, of the current
+command.
+Assignments to <code>HISTCMD</code> are ignored.
+If <code>HISTCMD</code>
+is unset, it loses its special properties,
+even if it is subsequently reset.
+</p>
+</dd>
+<dt id='index-HISTCONTROL'><span><code>HISTCONTROL</code><a href='#index-HISTCONTROL' class='copiable-anchor'> &para;</a></span></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 id='index-HISTFILE'><span><code>HISTFILE</code><a href='#index-HISTFILE' class='copiable-anchor'> &para;</a></span></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 id='index-HISTFILESIZE'><span><code>HISTFILESIZE</code><a href='#index-HISTFILESIZE' class='copiable-anchor'> &para;</a></span></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 id='index-HISTIGNORE'><span><code>HISTIGNORE</code><a href='#index-HISTIGNORE' class='copiable-anchor'> &para;</a></span></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 id='index-HISTSIZE'><span><code>HISTSIZE</code><a href='#index-HISTSIZE' class='copiable-anchor'> &para;</a></span></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 id='index-HISTTIMEFORMAT'><span><code>HISTTIMEFORMAT</code><a href='#index-HISTTIMEFORMAT' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>If this variable is set and not null, its value is used as a format string
+for <code>strftime</code> 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 id='index-HOSTFILE'><span><code>HOSTFILE</code><a href='#index-HOSTFILE' class='copiable-anchor'> &para;</a></span></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 id='index-HOSTNAME'><span><code>HOSTNAME</code><a href='#index-HOSTNAME' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The name of the current host.
+</p>
+</dd>
+<dt id='index-HOSTTYPE'><span><code>HOSTTYPE</code><a href='#index-HOSTTYPE' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A string describing the machine Bash is running on.
+</p>
+</dd>
+<dt id='index-IGNOREEOF'><span><code>IGNOREEOF</code><a href='#index-IGNOREEOF' class='copiable-anchor'> &para;</a></span></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 id='index-INPUTRC'><span><code>INPUTRC</code><a href='#index-INPUTRC' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The name of the Readline initialization file, overriding the default
+of <samp>~/.inputrc</samp>.
+</p>
+</dd>
+<dt id='index-INSIDE_005fEMACS'><span><code>INSIDE_EMACS</code><a href='#index-INSIDE_005fEMACS' class='copiable-anchor'> &para;</a></span></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 id='index-LANG-1'><span><code>LANG</code><a href='#index-LANG-1' class='copiable-anchor'> &para;</a></span></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 id='index-LC_005fALL'><span><code>LC_ALL</code><a href='#index-LC_005fALL' class='copiable-anchor'> &para;</a></span></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 id='index-LC_005fCOLLATE'><span><code>LC_COLLATE</code><a href='#index-LC_005fCOLLATE' class='copiable-anchor'> &para;</a></span></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 id='index-LC_005fCTYPE'><span><code>LC_CTYPE</code><a href='#index-LC_005fCTYPE' class='copiable-anchor'> &para;</a></span></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 id='index-LC_005fMESSAGES-1'><span><code>LC_MESSAGES</code><a href='#index-LC_005fMESSAGES-1' class='copiable-anchor'> &para;</a></span></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-Specific Translation</a>).
+</p>
+</dd>
+<dt id='index-LC_005fNUMERIC'><span><code>LC_NUMERIC</code><a href='#index-LC_005fNUMERIC' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>This variable determines the locale category used for number formatting.
+</p>
+</dd>
+<dt id='index-LC_005fTIME'><span><code>LC_TIME</code><a href='#index-LC_005fTIME' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>This variable determines the locale category used for data and time
+formatting.
+</p>
+</dd>
+<dt id='index-LINENO'><span><code>LINENO</code><a href='#index-LINENO' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The line number in the script or shell function currently executing.
+If <code>LINENO</code>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt id='index-LINES'><span><code>LINES</code><a href='#index-LINES' class='copiable-anchor'> &para;</a></span></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 id='index-MACHTYPE'><span><code>MACHTYPE</code><a href='#index-MACHTYPE' class='copiable-anchor'> &para;</a></span></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 id='index-MAILCHECK'><span><code>MAILCHECK</code><a href='#index-MAILCHECK' class='copiable-anchor'> &para;</a></span></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 id='index-MAPFILE'><span><code>MAPFILE</code><a href='#index-MAPFILE' class='copiable-anchor'> &para;</a></span></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 id='index-OLDPWD'><span><code>OLDPWD</code><a href='#index-OLDPWD' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The previous working directory as set by the <code>cd</code> builtin.
+</p>
+</dd>
+<dt id='index-OPTERR'><span><code>OPTERR</code><a href='#index-OPTERR' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>If set to the value 1, Bash displays error messages
+generated by the <code>getopts</code> builtin command.
+</p>
+</dd>
+<dt id='index-OSTYPE'><span><code>OSTYPE</code><a href='#index-OSTYPE' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A string describing the operating system Bash is running on.
+</p>
+</dd>
+<dt id='index-PIPESTATUS'><span><code>PIPESTATUS</code><a href='#index-PIPESTATUS' class='copiable-anchor'> &para;</a></span></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 id='index-POSIXLY_005fCORRECT'><span><code>POSIXLY_CORRECT</code><a href='#index-POSIXLY_005fCORRECT' class='copiable-anchor'> &para;</a></span></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 id='index-PPID'><span><code>PPID</code><a href='#index-PPID' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The process <small>ID</small> of the shell&rsquo;s parent process. This variable
+is readonly.
+</p>
+</dd>
+<dt id='index-PROMPT_005fCOMMAND'><span><code>PROMPT_COMMAND</code><a href='#index-PROMPT_005fCOMMAND' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>If this variable is set, and is an array,
+the value of each set element is interpreted as a command to execute
+before printing the primary prompt (<code>$PS1</code>).
+If this is set but not an array variable,
+its value is used as a command to execute instead.
+</p>
+</dd>
+<dt id='index-PROMPT_005fDIRTRIM'><span><code>PROMPT_DIRTRIM</code><a href='#index-PROMPT_005fDIRTRIM' class='copiable-anchor'> &para;</a></span></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 id='index-PS0'><span><code>PS0</code><a href='#index-PS0' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The value of this parameter is expanded like <code>PS1</code>
+and displayed by interactive shells after reading a command
+and before the command is executed.
+</p>
+</dd>
+<dt id='index-PS3'><span><code>PS3</code><a href='#index-PS3' class='copiable-anchor'> &para;</a></span></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 id='index-PS4'><span><code>PS4</code><a href='#index-PS4' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The value of this parameter is expanded like <code>PS1</code>
+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 id='index-PWD'><span><code>PWD</code><a href='#index-PWD' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The current working directory as set by the <code>cd</code> builtin.
+</p>
+</dd>
+<dt id='index-RANDOM'><span><code>RANDOM</code><a href='#index-RANDOM' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Each time this parameter is referenced, it expands to a random integer
+between 0 and 32767. Assigning a value to this
+variable seeds the random number generator.
+If <code>RANDOM</code>
+is unset, it loses its special properties, even if it is
+subsequently reset.
+</p>
+</dd>
+<dt id='index-READLINE_005fARGUMENT'><span><code>READLINE_ARGUMENT</code><a href='#index-READLINE_005fARGUMENT' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Any numeric argument given to a Readline command that was defined using
+&lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtin Commands</a>
+when it was invoked.
+</p>
+</dd>
+<dt id='index-READLINE_005fLINE'><span><code>READLINE_LINE</code><a href='#index-READLINE_005fLINE' class='copiable-anchor'> &para;</a></span></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 Builtin Commands</a>).
+</p>
+</dd>
+<dt id='index-READLINE_005fMARK'><span><code>READLINE_MARK</code><a href='#index-READLINE_005fMARK' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The position of the <em>mark</em> (saved insertion point) in the
+Readline line buffer, for use
+with &lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
+The characters between the insertion point and the mark are often
+called the <em>region</em>.
+</p>
+</dd>
+<dt id='index-READLINE_005fPOINT'><span><code>READLINE_POINT</code><a href='#index-READLINE_005fPOINT' class='copiable-anchor'> &para;</a></span></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 Builtin Commands</a>).
+</p>
+</dd>
+<dt id='index-REPLY'><span><code>REPLY</code><a href='#index-REPLY' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The default variable for the <code>read</code> builtin.
+</p>
+</dd>
+<dt id='index-SECONDS'><span><code>SECONDS</code><a href='#index-SECONDS' class='copiable-anchor'> &para;</a></span></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.
+The number of seconds at shell invocation and the current time are always
+determined by querying the system clock.
+If <code>SECONDS</code>
+is unset, it loses its special properties,
+even if it is subsequently reset.
+</p>
+</dd>
+<dt id='index-SHELL'><span><code>SHELL</code><a href='#index-SHELL' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>This environment variable expands to the full pathname to the shell.
+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 id='index-SHELLOPTS'><span><code>SHELLOPTS</code><a href='#index-SHELLOPTS' class='copiable-anchor'> &para;</a></span></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 id='index-SHLVL'><span><code>SHLVL</code><a href='#index-SHLVL' class='copiable-anchor'> &para;</a></span></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 id='index-SRANDOM'><span><code>SRANDOM</code><a href='#index-SRANDOM' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>This variable expands to a 32-bit pseudo-random number each time it is
+referenced. The random number generator is not linear on systems that
+support <samp>/dev/urandom</samp> or <code>arc4random</code>, so each returned number
+has no relationship to the numbers preceding it.
+The random number generator cannot be seeded, so assignments to this
+variable have no effect.
+If <code>SRANDOM</code>
+is unset, it loses its special properties,
+even if it is subsequently reset.
+</p>
+</dd>
+<dt id='index-TIMEFORMAT'><span><code>TIMEFORMAT</code><a href='#index-TIMEFORMAT' class='copiable-anchor'> &para;</a></span></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><span><code>%%</code></span></dt>
+<dd><p>A literal &lsquo;<samp>%</samp>&rsquo;.
+</p>
+</dd>
+<dt><span><code>%[<var>p</var>][l]R</code></span></dt>
+<dd><p>The elapsed time in seconds.
+</p>
+</dd>
+<dt><span><code>%[<var>p</var>][l]U</code></span></dt>
+<dd><p>The number of CPU seconds spent in user mode.
+</p>
+</dd>
+<dt><span><code>%[<var>p</var>][l]S</code></span></dt>
+<dd><p>The number of CPU seconds spent in system mode.
+</p>
+</dd>
+<dt><span><code>%P</code></span></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 id='index-TMOUT'><span><code>TMOUT</code><a href='#index-TMOUT' class='copiable-anchor'> &para;</a></span></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 Builtin Commands</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 id='index-TMPDIR'><span><code>TMPDIR</code><a href='#index-TMPDIR' class='copiable-anchor'> &para;</a></span></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 id='index-UID'><span><code>UID</code><a href='#index-UID' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The numeric real user id of the current user. This variable is readonly.
+</p>
+</dd>
+</dl>
+
+<hr>
+</div>
+</div>
+<div class="chapter" id="Bash-Features">
+<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">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>
+<span id="Bash-Features-2"></span><h2 class="chapter">6 Bash Features</h2>
+
+<p>This chapter describes features unique to Bash.
+</p>
+
+<ul class="section-toc">
+<li><a href="#Invoking-Bash" accesskey="1">Invoking Bash</a></li>
+<li><a href="#Bash-Startup-Files" accesskey="2">Bash Startup Files</a></li>
+<li><a href="#Interactive-Shells" accesskey="3">Interactive Shells</a></li>
+<li><a href="#Bash-Conditional-Expressions" accesskey="4">Bash Conditional Expressions</a></li>
+<li><a href="#Shell-Arithmetic" accesskey="5">Shell Arithmetic</a></li>
+<li><a href="#Aliases" accesskey="6">Aliases</a></li>
+<li><a href="#Arrays" accesskey="7">Arrays</a></li>
+<li><a href="#The-Directory-Stack" accesskey="8">The Directory Stack</a></li>
+<li><a href="#Controlling-the-Prompt" accesskey="9">Controlling the Prompt</a></li>
+<li><a href="#The-Restricted-Shell">The Restricted Shell</a></li>
+<li><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></li>
+<li><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></li>
+</ul>
+<hr>
+<div class="section" id="Invoking-Bash">
+<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>
+<span id="Invoking-Bash-1"></span><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><span><code>--debugger</code></span></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><span><code>--dump-po-strings</code></span></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><span><code>--dump-strings</code></span></dt>
+<dd><p>Equivalent to <samp>-D</samp>.
+</p>
+</dd>
+<dt><span><code>--help</code></span></dt>
+<dd><p>Display a usage message on standard output and exit successfully.
+</p>
+</dd>
+<dt><span><code>--init-file <var>filename</var></code></span></dt>
+<dt><span><code>--rcfile <var>filename</var></code></span></dt>
+<dd><p>Execute commands from <var>filename</var> (instead of <samp>~/.bashrc</samp>)
+in an interactive shell.
+</p>
+</dd>
+<dt><span><code>--login</code></span></dt>
+<dd><p>Equivalent to <samp>-l</samp>.
+</p>
+</dd>
+<dt><span><code>--noediting</code></span></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><span><code>--noprofile</code></span></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><span><code>--norc</code></span></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><span><code>--posix</code></span></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><span><code>--restricted</code></span></dt>
+<dd><p>Make the shell a restricted shell (see <a href="#The-Restricted-Shell">The Restricted Shell</a>).
+</p>
+</dd>
+<dt><span><code>--verbose</code></span></dt>
+<dd><p>Equivalent to <samp>-v</samp>. Print shell input lines as they&rsquo;re read.
+</p>
+</dd>
+<dt><span><code>--version</code></span></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><span><code>-c</code></span></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><span><code>-i</code></span></dt>
+<dd><p>Force the shell to run interactively. Interactive shells are
+described in <a href="#Interactive-Shells">Interactive Shells</a>.
+</p>
+</dd>
+<dt><span><code>-l</code></span></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><span><code>-r</code></span></dt>
+<dd><p>Make the shell a restricted shell (see <a href="#The-Restricted-Shell">The Restricted Shell</a>).
+</p>
+</dd>
+<dt><span><code>-s</code></span></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><span><code>-D</code></span></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-Specific Translation</a>).
+This implies the <samp>-n</samp> option; no commands will be executed.
+</p>
+</dd>
+<dt><span><code>[-+]O [<var>shopt_option</var>]</code></span></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><span><code>--</code></span></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>
+
+<span id="index-login-shell"></span>
+<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>
+<span id="index-interactive-shell"></span>
+<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>
+</div>
+<div class="section" id="Bash-Startup-Files">
+<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>
+<span id="Bash-Startup-Files-1"></span><h3 class="section">6.2 Bash Startup Files</h3>
+<span id="index-startup-files"></span>
+
+<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>
+<span id="Invoked-as-an-interactive-login-shell_002c-or-with-_002d_002dlogin"></span><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>
+<span id="Invoked-as-an-interactive-non_002dlogin-shell"></span><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>
+<span id="Invoked-non_002dinteractively"></span><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>
+<span id="Invoked-with-name-sh"></span><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>
+<span id="Invoked-in-POSIX-mode"></span><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>
+<span id="Invoked-by-remote-shell-daemon"></span><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 historical remote shell daemon, usually <code>rshd</code>,
+or the secure shell daemon <code>sshd</code>.
+If Bash
+determines it is being run non-interactively 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>
+<span id="Invoked-with-unequal-effective-and-real-UID_002fGIDs"></span><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>
+</div>
+<div class="section" id="Interactive-Shells">
+<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>
+<span id="Interactive-Shells-1"></span><h3 class="section">6.3 Interactive Shells</h3>
+<span id="index-interactive-shell-1"></span>
+<span id="index-shell_002c-interactive"></span>
+
+
+<ul class="section-toc">
+<li><a href="#What-is-an-Interactive-Shell_003f" accesskey="1">What is an Interactive Shell?</a></li>
+<li><a href="#Is-this-Shell-Interactive_003f" accesskey="2">Is this Shell Interactive?</a></li>
+<li><a href="#Interactive-Shell-Behavior" accesskey="3">Interactive Shell Behavior</a></li>
+</ul>
+<hr>
+<div class="subsection" id="What-is-an-Interactive-Shell_003f">
+<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>
+<span id="What-is-an-Interactive-Shell_003f-1"></span><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)
+and without specifying the <samp>-c</samp> option,
+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>
+</div>
+<div class="subsection" id="Is-this-Shell-Interactive_003f">
+<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>
+<span id="Is-this-Shell-Interactive_003f-1"></span><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>
+</div>
+<div class="subsection" id="Interactive-Shell-Behavior">
+<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>
+<span id="Interactive-Shell-Behavior-1"></span><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 values of the set elements of the <code>PROMPT_COMMAND</code>
+array variable as commands 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 Expansion</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> If the <code>cdspell</code> shell option is enabled, the shell will attempt
+simple spelling correction for directory arguments to the <code>cd</code>
+builtin (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>).
+The <code>cdspell</code> option is only effective in interactive shells.
+
+</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>
+</div>
+</div>
+<div class="section" id="Bash-Conditional-Expressions">
+<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>
+<span id="Bash-Conditional-Expressions-1"></span><h3 class="section">6.4 Bash Conditional Expressions</h3>
+<span id="index-expressions_002c-conditional"></span>
+
+<p>Conditional expressions are used by the <code>[[</code> compound command
+(see <a href="#Conditional-Constructs">Conditional Constructs</a>)
+and the <code>test</code> and <code>[</code> builtin commands
+(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
+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><span><code>-a <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists.
+</p>
+</dd>
+<dt><span><code>-b <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is a block special file.
+</p>
+</dd>
+<dt><span><code>-c <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is a character special file.
+</p>
+</dd>
+<dt><span><code>-d <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is a directory.
+</p>
+</dd>
+<dt><span><code>-e <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists.
+</p>
+</dd>
+<dt><span><code>-f <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is a regular file.
+</p>
+</dd>
+<dt><span><code>-g <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and its set-group-id bit is set.
+</p>
+</dd>
+<dt><span><code>-h <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is a symbolic link.
+</p>
+</dd>
+<dt><span><code>-k <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and its &quot;sticky&quot; bit is set.
+</p>
+</dd>
+<dt><span><code>-p <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is a named pipe (FIFO).
+</p>
+</dd>
+<dt><span><code>-r <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is readable.
+</p>
+</dd>
+<dt><span><code>-s <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and has a size greater than zero.
+</p>
+</dd>
+<dt><span><code>-t <var>fd</var></code></span></dt>
+<dd><p>True if file descriptor <var>fd</var> is open and refers to a terminal.
+</p>
+</dd>
+<dt><span><code>-u <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and its set-user-id bit is set.
+</p>
+</dd>
+<dt><span><code>-w <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is writable.
+</p>
+</dd>
+<dt><span><code>-x <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is executable.
+</p>
+</dd>
+<dt><span><code>-G <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is owned by the effective group id.
+</p>
+</dd>
+<dt><span><code>-L <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is a symbolic link.
+</p>
+</dd>
+<dt><span><code>-N <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and has been modified since it was last read.
+</p>
+</dd>
+<dt><span><code>-O <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is owned by the effective user id.
+</p>
+</dd>
+<dt><span><code>-S <var>file</var></code></span></dt>
+<dd><p>True if <var>file</var> exists and is a socket.
+</p>
+</dd>
+<dt><span><code><var>file1</var> -ef <var>file2</var></code></span></dt>
+<dd><p>True if <var>file1</var> and <var>file2</var> refer to the same device and
+inode numbers.
+</p>
+</dd>
+<dt><span><code><var>file1</var> -nt <var>file2</var></code></span></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><span><code><var>file1</var> -ot <var>file2</var></code></span></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><span><code>-o <var>optname</var></code></span></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><span><code>-v <var>varname</var></code></span></dt>
+<dd><p>True if the shell variable <var>varname</var> is set (has been assigned a value).
+</p>
+</dd>
+<dt><span><code>-R <var>varname</var></code></span></dt>
+<dd><p>True if the shell variable <var>varname</var> is set and is a name reference.
+</p>
+</dd>
+<dt><span><code>-z <var>string</var></code></span></dt>
+<dd><p>True if the length of <var>string</var> is zero.
+</p>
+</dd>
+<dt><span><code>-n <var>string</var></code></span></dt>
+<dt><span><code><var>string</var></code></span></dt>
+<dd><p>True if the length of <var>string</var> is non-zero.
+</p>
+</dd>
+<dt><span><code><var>string1</var> == <var>string2</var></code></span></dt>
+<dt><span><code><var>string1</var> = <var>string2</var></code></span></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><span><code><var>string1</var> != <var>string2</var></code></span></dt>
+<dd><p>True if the strings are not equal.
+</p>
+</dd>
+<dt><span><code><var>string1</var> &lt; <var>string2</var></code></span></dt>
+<dd><p>True if <var>string1</var> sorts before <var>string2</var> lexicographically.
+</p>
+</dd>
+<dt><span><code><var>string1</var> &gt; <var>string2</var></code></span></dt>
+<dd><p>True if <var>string1</var> sorts after <var>string2</var> lexicographically.
+</p>
+</dd>
+<dt><span><code><var>arg1</var> OP <var>arg2</var></code></span></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>
+</div>
+<div class="section" id="Shell-Arithmetic">
+<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>
+<span id="Shell-Arithmetic-1"></span><h3 class="section">6.5 Shell Arithmetic</h3>
+<span id="index-arithmetic_002c-shell"></span>
+<span id="index-shell-arithmetic"></span>
+<span id="index-expressions_002c-arithmetic"></span>
+<span id="index-evaluation_002c-arithmetic"></span>
+<span id="index-arithmetic-evaluation"></span>
+
+<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><span><code><var>id</var>++ <var>id</var>--</code></span></dt>
+<dd><p>variable post-increment and post-decrement
+</p>
+</dd>
+<dt><span><code>++<var>id</var> --<var>id</var></code></span></dt>
+<dd><p>variable pre-increment and pre-decrement
+</p>
+</dd>
+<dt><span><code>- +</code></span></dt>
+<dd><p>unary minus and plus
+</p>
+</dd>
+<dt><span><code>! ~</code></span></dt>
+<dd><p>logical and bitwise negation
+</p>
+</dd>
+<dt><span><code>**</code></span></dt>
+<dd><p>exponentiation
+</p>
+</dd>
+<dt><span><code>* / %</code></span></dt>
+<dd><p>multiplication, division, remainder
+</p>
+</dd>
+<dt><span><code>+ -</code></span></dt>
+<dd><p>addition, subtraction
+</p>
+</dd>
+<dt><span><code>&lt;&lt; &gt;&gt;</code></span></dt>
+<dd><p>left and right bitwise shifts
+</p>
+</dd>
+<dt><span><code>&lt;= &gt;= &lt; &gt;</code></span></dt>
+<dd><p>comparison
+</p>
+</dd>
+<dt><span><code>== !=</code></span></dt>
+<dd><p>equality and inequality
+</p>
+</dd>
+<dt><span><code>&amp;</code></span></dt>
+<dd><p>bitwise AND
+</p>
+</dd>
+<dt><span><code>^</code></span></dt>
+<dd><p>bitwise exclusive OR
+</p>
+</dd>
+<dt><span><code>|</code></span></dt>
+<dd><p>bitwise OR
+</p>
+</dd>
+<dt><span><code>&amp;&amp;</code></span></dt>
+<dd><p>logical AND
+</p>
+</dd>
+<dt><span><code>||</code></span></dt>
+<dd><p>logical OR
+</p>
+</dd>
+<dt><span><code>expr ? expr : expr</code></span></dt>
+<dd><p>conditional operator
+</p>
+</dd>
+<dt><span><code>= *= /= %= += -= &lt;&lt;= &gt;&gt;= &amp;= ^= |=</code></span></dt>
+<dd><p>assignment
+</p>
+</dd>
+<dt><span><code>expr1 , expr2</code></span></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
+<code>integer</code> 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 <code>integer</code> attribute turned on
+to be used in an expression.
+</p>
+<p>Integer constants follow the C language definition, without suffixes or
+character constants.
+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>,
+if a non-digit is required,
+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>
+</div>
+<div class="section" id="Aliases">
+<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>
+<span id="Aliases-1"></span><h3 class="section">6.6 Aliases</h3>
+<span id="index-alias-expansion"></span>
+
+<p><em>Aliases</em> 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
+<code>blank</code>, 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, use a shell function
+(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>
+</div>
+<div class="section" id="Arrays">
+<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>
+<span id="Arrays-1"></span><h3 class="section">6.7 Arrays</h3>
+<span id="index-arrays"></span>
+
+<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> may be 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>Each <var>value</var> in the list undergoes all the shell expansions
+described above (see <a href="#Shell-Expansions">Shell Expansions</a>).
+</p>
+<p>When assigning to an associative array, the words in a compound assignment
+may be either assignment statements, for which the subscript is required,
+or a list of words that is interpreted as a sequence of alternating keys
+and values:
+<var>name</var>=(<var>key1</var> <var>value1</var> <var>key2</var> <var>value2</var> &hellip; ).
+These are treated identically to
+<var>name</var>=( [<var>key1</var>]=<var>value1</var> [<var>key2</var>]=<var>value2</var> &hellip; ).
+The first word in the list determines how the remaining words
+are interpreted; all assignments in a list must be of the same type.
+When using key/value pairs, the keys may not be missing or empty;
+a final missing value is treated like the empty string.
+</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>The &lsquo;<samp>+=</samp>&rsquo; operator will append to an array variable when assigning
+using the compound assignment syntax; see <a href="#Shell-Parameters">Shell Parameters</a> above.
+</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.
+<code>unset <var>name</var>[<var>subscript</var>]</code> behaves differently
+depending on the array type when given a
+subscript of &lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo;.
+When <var>name</var> is an associative array, it removes the element with key
+&lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo;.
+If <var>name</var> is an indexed array, <code>unset</code> removes all of the elements,
+but does not remove the array itself.
+</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>
+</div>
+<div class="section" id="The-Directory-Stack">
+<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>
+<span id="The-Directory-Stack-1"></span><h3 class="section">6.8 The Directory Stack</h3>
+<span id="index-directory-stack"></span>
+
+
+<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>
+<ul class="section-toc">
+<li><a href="#Directory-Stack-Builtins" accesskey="1">Directory Stack Builtins</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Directory-Stack-Builtins">
+<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>
+<span id="Directory-Stack-Builtins-1"></span><h4 class="subsection">6.8.1 Directory Stack Builtins</h4>
+
+<dl compact="compact">
+<dt id='index-dirs'><span><code>dirs</code><a href='#index-dirs' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>-c</code></span></dt>
+<dd><p>Clears the directory stack by deleting all of the elements.
+</p></dd>
+<dt><span><code>-l</code></span></dt>
+<dd><p>Produces a listing using full pathnames;
+the default listing format uses a tilde to denote the home directory.
+</p></dd>
+<dt><span><code>-p</code></span></dt>
+<dd><p>Causes <code>dirs</code> to print the directory stack with one entry per
+line.
+</p></dd>
+<dt><span><code>-v</code></span></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><span><code>+<var>N</var></code></span></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><span><code>-<var>N</var></code></span></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 id='index-popd'><span><code>popd</code><a href='#index-popd' class='copiable-anchor'> &para;</a></span></dt>
+<dd><div class="example">
+<pre class="example">popd [-n] [+<var>N</var> | -<var>N</var>]
+</pre></div>
+
+<p>Removes elements from the directory stack.
+The elements are numbered from 0 starting at the first directory
+listed by <code>dirs</code>;
+that is, <code>popd</code> is equivalent to <code>popd +0</code>.
+</p>
+<p>When no arguments are given, <code>popd</code>
+removes the top directory from the stack and changes to
+the new top directory.
+</p>
+<p>Arguments, if supplied, have the following meanings:
+</p>
+<dl compact="compact">
+<dt><span><code>-n</code></span></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><span><code>+<var>N</var></code></span></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, from the stack.
+</p></dd>
+<dt><span><code>-<var>N</var></code></span></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, from the stack.
+</p></dd>
+</dl>
+
+<p>If the top element of the directory stack is modified, and
+the <samp>-n</samp> option was not supplied, <code>popd</code> uses the <code>cd</code>
+builtin to change to the directory at the top of the stack.
+If the <code>cd</code> fails, <code>popd</code> returns a non-zero value.
+</p>
+<p>Otherwise, <code>popd</code> returns an unsuccessful status if
+an invalid option is encountered, the directory stack
+is empty, or a non-existent directory stack entry is specified.
+</p>
+<p>If the <code>popd</code> command is successful,
+Bash runs <code>dirs</code> to show the final contents of the directory stack,
+and the return status is 0.
+</p>
+<span id="index-pushd"></span>
+</dd>
+<dt><span><code>pushd</code></span></dt>
+<dd><div class="example">
+<pre class="example">pushd [-n] [<var>+N</var> | <var>-N</var> | <var>dir</var>]
+</pre></div>
+
+<p>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, <code>pushd</code> exchanges the top two elements
+of the directory stack.
+</p>
+<p>Arguments, if supplied, have the following meanings:
+</p>
+<dl compact="compact">
+<dt><span><code>-n</code></span></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><span><code>+<var>N</var></code></span></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><span><code>-<var>N</var></code></span></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><span><code><var>dir</var></code></span></dt>
+<dd><p>Makes <var>dir</var> be the top of the stack.
+</p></dd>
+</dl>
+
+<p>After the stack has been modified, if the <samp>-n</samp> option was not
+supplied, <code>pushd</code> uses the <code>cd</code> builtin to change to the
+directory at the top of the stack.
+If the <code>cd</code> fails, <code>pushd</code> returns a non-zero value.
+</p>
+<p>Otherwise, if no arguments are supplied, <code>pushd</code> returns 0 unless the
+directory stack is empty.
+When rotating the directory stack, <code>pushd</code> returns 0 unless
+the directory stack is empty or a non-existent directory stack element
+is specified.
+</p>
+<p>If the <code>pushd</code> command is successful,
+Bash runs <code>dirs</code> to show the final contents of the directory stack.
+</p>
+</dd>
+</dl>
+
+<hr>
+</div>
+</div>
+<div class="section" id="Controlling-the-Prompt">
+<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>
+<span id="Controlling-the-Prompt-1"></span><h3 class="section">6.9 Controlling the Prompt</h3>
+<span id="index-prompting"></span>
+
+<p>Bash examines the value of the array variable <code>PROMPT_COMMAND</code> just before
+printing each primary prompt.
+If any elements in <code>PROMPT_COMMAND</code> are set and non-null, Bash
+executes each value, in numeric order,
+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><span><code>\a</code></span></dt>
+<dd><p>A bell character.
+</p></dd>
+<dt><span><code>\d</code></span></dt>
+<dd><p>The date, in &quot;Weekday Month Date&quot; format (e.g., &quot;Tue May 26&quot;).
+</p></dd>
+<dt><span><code>\D{<var>format</var>}</code></span></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><span><code>\e</code></span></dt>
+<dd><p>An escape character.
+</p></dd>
+<dt><span><code>\h</code></span></dt>
+<dd><p>The hostname, up to the first &lsquo;.&rsquo;.
+</p></dd>
+<dt><span><code>\H</code></span></dt>
+<dd><p>The hostname.
+</p></dd>
+<dt><span><code>\j</code></span></dt>
+<dd><p>The number of jobs currently managed by the shell.
+</p></dd>
+<dt><span><code>\l</code></span></dt>
+<dd><p>The basename of the shell&rsquo;s terminal device name.
+</p></dd>
+<dt><span><code>\n</code></span></dt>
+<dd><p>A newline.
+</p></dd>
+<dt><span><code>\r</code></span></dt>
+<dd><p>A carriage return.
+</p></dd>
+<dt><span><code>\s</code></span></dt>
+<dd><p>The name of the shell, the basename of <code>$0</code> (the portion
+following the final slash).
+</p></dd>
+<dt><span><code>\t</code></span></dt>
+<dd><p>The time, in 24-hour HH:MM:SS format.
+</p></dd>
+<dt><span><code>\T</code></span></dt>
+<dd><p>The time, in 12-hour HH:MM:SS format.
+</p></dd>
+<dt><span><code>\@</code></span></dt>
+<dd><p>The time, in 12-hour am/pm format.
+</p></dd>
+<dt><span><code>\A</code></span></dt>
+<dd><p>The time, in 24-hour HH:MM format.
+</p></dd>
+<dt><span><code>\u</code></span></dt>
+<dd><p>The username of the current user.
+</p></dd>
+<dt><span><code>\v</code></span></dt>
+<dd><p>The version of Bash (e.g., 2.00)
+</p></dd>
+<dt><span><code>\V</code></span></dt>
+<dd><p>The release of Bash, version + patchlevel (e.g., 2.00.0)
+</p></dd>
+<dt><span><code>\w</code></span></dt>
+<dd><p>The value of the <code>PWD</code> shell variable (<code>$PWD</code>),
+with <code>$HOME</code> abbreviated with a tilde
+(uses the <code>$PROMPT_DIRTRIM</code> variable).
+</p></dd>
+<dt><span><code>\W</code></span></dt>
+<dd><p>The basename of <code>$PWD</code>, with <code>$HOME</code> abbreviated with a tilde.
+</p></dd>
+<dt><span><code>\!</code></span></dt>
+<dd><p>The history number of this command.
+</p></dd>
+<dt><span><code>\#</code></span></dt>
+<dd><p>The command number of this command.
+</p></dd>
+<dt><span><code>\$</code></span></dt>
+<dd><p>If the effective uid is 0, <code>#</code>, otherwise <code>$</code>.
+</p></dd>
+<dt><span><code>\<var>nnn</var></code></span></dt>
+<dd><p>The character whose ASCII code is the octal value <var>nnn</var>.
+</p></dd>
+<dt><span><code>\\</code></span></dt>
+<dd><p>A backslash.
+</p></dd>
+<dt><span><code>\[</code></span></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><span><code>\]</code></span></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>).
+This can have unwanted side effects if escaped portions of the string
+appear within command substitution or contain characters special to
+word expansion.
+</p>
+<hr>
+</div>
+<div class="section" id="The-Restricted-Shell">
+<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>
+<span id="The-Restricted-Shell-1"></span><h3 class="section">6.10 The Restricted Shell</h3>
+<span id="index-restricted-shell"></span>
+
+<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>HISTFILE</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 <code>history</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>shopt -u restricted_shell</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>
+<p>The restricted shell mode is only one component of a useful restricted
+environment. It should be accompanied by setting <code>PATH</code> to a value
+that allows execution of only a few verified commands (commands that
+allow shell escapes are particularly vulnerable), changing the current
+directory to a non-writable directory other than <code>$HOME</code> after login,
+not allowing the restricted shell to execute shell scripts, and cleaning
+the environment of variables that cause some commands to modify their
+behavior (e.g., <code>VISUAL</code> or <code>PAGER</code>).
+</p>
+<p>Modern systems provide more secure ways to implement a restricted environment,
+such as <code>jails</code>, <code>zones</code>, or <code>containers</code>.
+</p>
+
+<hr>
+</div>
+<div class="section" id="Bash-POSIX-Mode">
+<div class="header">
+<p>
+Next: <a href="#Shell-Compatibility-Mode" accesskey="n" rel="next">Shell Compatibility Mode</a>, 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>
+<span id="Bash-POSIX-Mode-1"></span><h3 class="section">6.11 Bash POSIX Mode</h3>
+<span id="index-POSIX-Mode"></span>
+
+<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> Bash will not insert a command without the execute bit set into the
+command hash table, even if it returns it as a (last-ditch) result
+from a <code>$PATH</code> search.
+
+</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> Alias expansion is performed when initially parsing a command substitution.
+The default mode generally defers it, when enabled, until the command
+substitution is executed. This means that command substitution will not
+expand aliases that are defined after the command substitution is initially
+parsed (e.g., as part of a function definition).
+
+</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. For any other simple
+command, the shell aborts execution of that command, and execution continues
+at the top level (&quot;the shell shall not perform any further processing of the
+command in which the error occurred&quot;).
+
+</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> 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> 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> 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> <code>trap -p</code> displays signals whose dispositions are set to SIG_DFL and
+those that were ignored when the shell started.
+
+</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 logical 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 physical 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 <code>PATH_MAX</code> 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> The <code>printf</code> builtin uses <code>double</code> (via <code>strtod</code>) to convert
+arguments corresponding to floating point conversion specifiers, instead of
+<code>long double</code> if it&rsquo;s available. The &lsquo;<samp>L</samp>&rsquo; length modifier forces
+<code>printf</code> to use <code>long double</code> if it&rsquo;s available.
+
+</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>
+</div>
+<div class="section" id="Shell-Compatibility-Mode">
+<div class="header">
+<p>
+Previous: <a href="#Bash-POSIX-Mode" accesskey="p" rel="prev">Bash POSIX Mode</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>
+<span id="Shell-Compatibility-Mode-1"></span><h3 class="section">6.12 Shell Compatibility Mode</h3>
+<span id="index-Compatibility-Level"></span>
+<span id="index-Compatibility-Mode"></span>
+
+<p>Bash-4.0 introduced the concept of a <em>shell compatibility level</em>,
+specified as a set of options to the shopt builtin
+(<code>compat31</code>,
+<code>compat32</code>,
+<code>compat40</code>,
+<code>compat41</code>,
+and so on).
+There is only one current
+compatibility level &ndash; each option is mutually exclusive.
+The compatibility level is intended to allow users to select behavior
+from previous versions that is incompatible with newer versions
+while they migrate scripts to use current features and
+behavior. It&rsquo;s intended to be a temporary solution.
+</p>
+<p>This section does not mention behavior that is standard for a particular
+version (e.g., setting <code>compat32</code> means that quoting the rhs of the regexp
+matching operator quotes special regexp characters in the word, which is
+default behavior in bash-3.2 and subsequent versions).
+</p>
+<p>If a user enables, say, <code>compat32</code>, it may affect the behavior of other
+compatibility levels up to and including the current compatibility level.
+The idea is that each compatibility level controls behavior that changed
+in that version of Bash,
+but that behavior may have been present in earlier versions.
+For instance, the change to use locale-based comparisons with the <code>[[</code>
+command came in bash-4.1, and earlier versions used ASCII-based comparisons,
+so enabling <code>compat32</code> will enable ASCII-based comparisons as well.
+That granularity may not be sufficient for
+all uses, and as a result users should employ compatibility levels carefully.
+Read the documentation for a particular feature to find out the
+current behavior.
+</p>
+<p>Bash-4.3 introduced a new shell variable: <code>BASH_COMPAT</code>.
+The value assigned
+to this variable (a decimal version number like 4.2, or an integer
+corresponding to the <code>compat</code><var>NN</var> option, like 42) determines the
+compatibility level.
+</p>
+<p>Starting with bash-4.4, Bash has begun deprecating older compatibility
+levels.
+Eventually, the options will be removed in favor of <code>BASH_COMPAT</code>.
+</p>
+<p>Bash-5.0 is the final version for which there will be an individual shopt
+option for the previous version. Users should use <code>BASH_COMPAT</code>
+on bash-5.0 and later versions.
+</p>
+<p>The following table describes the behavior changes controlled by each
+compatibility level setting.
+The <code>compat</code><var>NN</var> tag is used as shorthand for setting the
+compatibility level
+to <var>NN</var> using one of the following mechanisms.
+For versions prior to bash-5.0, the compatibility level may be set using
+the corresponding <code>compat</code><var>NN</var> shopt option.
+For bash-4.3 and later versions, the <code>BASH_COMPAT</code> variable is preferred,
+and it is required for bash-5.1 and later versions.
+</p>
+<dl compact="compact">
+<dt><span><code>compat31</code></span></dt>
+<dd><ul>
+<li> quoting the rhs of the <code>[[</code> command&rsquo;s regexp matching operator (=~)
+has no special effect
+</li></ul>
+
+</dd>
+<dt><span><code>compat32</code></span></dt>
+<dd><ul>
+<li> interrupting a command list such as &quot;a ; b ; c&quot; causes the execution
+of the next command in the list (in bash-4.0 and later versions,
+the shell acts as if it received the interrupt, so
+interrupting one command in a list aborts the execution of the
+entire list)
+</li></ul>
+
+</dd>
+<dt><span><code>compat40</code></span></dt>
+<dd><ul>
+<li> the &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo; operators to the <code>[[</code> command do not
+consider the current locale when comparing strings; they use ASCII
+ordering.
+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).
+</li></ul>
+
+</dd>
+<dt><span><code>compat41</code></span></dt>
+<dd><ul>
+<li> in posix mode, <code>time</code> may be followed by options and still be
+recognized as a reserved word (this is <small>POSIX</small> interpretation 267)
+</li><li> in posix mode, the parser requires that an even number of single
+quotes occur in the <var>word</var> portion of a double-quoted ${&hellip;}
+parameter expansion and treats them specially, so that characters within
+the single quotes are considered quoted
+(this is <small>POSIX</small> interpretation 221)
+</li></ul>
+
+</dd>
+<dt><span><code>compat42</code></span></dt>
+<dd><ul>
+<li> the replacement string in double-quoted pattern substitution does not
+undergo quote removal, as it does in versions after bash-4.2
+</li><li> in posix mode, single quotes are considered special when expanding
+the <var>word</var> portion of a double-quoted ${&hellip;} parameter expansion
+and can be used to quote a closing brace or other special character
+(this is part of <small>POSIX</small> interpretation 221);
+in later versions, single quotes
+are not special within double-quoted word expansions
+</li></ul>
+
+</dd>
+<dt><span><code>compat43</code></span></dt>
+<dd><ul>
+<li> the shell does not print a warning message if an attempt is made to
+use a quoted compound assignment as an argument to declare
+(e.g., declare -a foo=&rsquo;(1 2)&rsquo;). Later versions warn that this usage is
+deprecated
+</li><li> word expansion errors are considered non-fatal errors that cause the
+current command to fail, even in posix mode
+(the default behavior is to make them fatal errors that cause the shell
+to exit)
+</li><li> when executing a shell function, the loop state (while/until/etc.)
+is not reset, so <code>break</code> or <code>continue</code> in that function will break
+or continue loops in the calling context. Bash-4.4 and later reset
+the loop state to prevent this
+</li></ul>
+
+</dd>
+<dt><span><code>compat44</code></span></dt>
+<dd><ul>
+<li> the shell sets up the values used by <code>BASH_ARGV</code> and <code>BASH_ARGC</code>
+so they can expand to the shell&rsquo;s positional parameters even if extended
+debugging mode is not enabled
+</li><li> a subshell inherits loops from its parent context, so <code>break</code>
+or <code>continue</code> will cause the subshell to exit.
+Bash-5.0 and later reset the loop state to prevent the exit
+</li><li> variable assignments preceding builtins like <code>export</code> and <code>readonly</code>
+that set attributes continue to affect variables with the same
+name in the calling environment even if the shell is not in posix
+mode
+</li></ul>
+
+</dd>
+<dt><span><code>compat50 (set using BASH_COMPAT)</code></span></dt>
+<dd><ul>
+<li> Bash-5.1 changed the way <code>$RANDOM</code> is generated to introduce slightly
+more randomness. If the shell compatibility level is set to 50 or
+lower, it reverts to the method from bash-5.0 and previous versions,
+so seeding the random number generator by assigning a value to
+<code>RANDOM</code> will produce the same sequence as in bash-5.0
+</li><li> If the command hash table is empty, Bash versions prior to bash-5.1
+printed an informational message to that effect, even when producing
+output that can be reused as input. Bash-5.1 suppresses that message
+when the <samp>-l</samp> option is supplied.
+</li></ul>
+
+</dd>
+<dt><span><code>compat51 (set using BASH_COMPAT)</code></span></dt>
+<dd><ul>
+<li> The <code>unset</code> builtin will unset the array <code>a</code> given an argument like
+&lsquo;<samp>a[@]</samp>&rsquo;.
+Bash-5.2 will unset an element with key &lsquo;<samp>@</samp>&rsquo; (associative arrays)
+or remove all the elements without unsetting the array (indexed arrays)
+</li><li> arithmetic commands ( ((...)) ) and the expressions in an arithmetic for
+statement can be expanded more than once
+</li><li> expressions used as arguments to arithmetic operators in the <code>[[</code>
+conditional command can be expanded more than once
+</li><li> the expressions in substring parameter brace expansion can be
+expanded more than once
+</li><li> the expressions in the $(( ... )) word expansion can be expanded
+more than once
+</li><li> arithmetic expressions used as indexed array subscripts can be
+expanded more than once
+</li><li> <code>test -v</code>, when given an argument of &lsquo;<samp>A[@]</samp>&rsquo;, where <var>A</var> is
+an existing associative array, will return true if the array has any set
+elements.
+Bash-5.2 will look for and report on a key named &lsquo;<samp>@</samp>&rsquo;
+</li><li> the ${<var>parameter</var>[:]=<var>value</var>} word expansion will return
+<var>value</var>, before any variable-specific transformations have been
+performed (e.g., converting to lowercase).
+Bash-5.2 will return the final value assigned to the variable.
+</li><li> Parsing command substitutions will behave as if extended glob
+(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
+is enabled, so that parsing a command substitution containing an extglob
+pattern (say, as part of a shell function) will not fail.
+This assumes the intent is to enable extglob before the command is executed
+and word expansions are performed.
+It will fail at word expansion time if extglob hasn&rsquo;t been
+enabled by the time the command is executed.
+</li></ul>
+</dd>
+</dl>
+
+<hr>
+</div>
+</div>
+<div class="chapter" id="Job-Control">
+<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">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>
+<span id="Job-Control-1"></span><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>
+
+<ul class="section-toc">
+<li><a href="#Job-Control-Basics" accesskey="1">Job Control Basics</a></li>
+<li><a href="#Job-Control-Builtins" accesskey="2">Job Control Builtins</a></li>
+<li><a href="#Job-Control-Variables" accesskey="3">Job Control Variables</a></li>
+</ul>
+<hr>
+<div class="section" id="Job-Control-Basics">
+<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>
+<span id="Job-Control-Basics-1"></span><h3 class="section">7.1 Job Control Basics</h3>
+<span id="index-job-control-1"></span>
+<span id="index-foreground"></span>
+<span id="index-background"></span>
+<span id="index-suspending-jobs"></span>
+
+<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
+<em>suspend</em> 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 <em>delayed suspend</em> 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 (<em>jobspec</em>).
+</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 job whose command name begins with &lsquo;<samp>ce</samp>&rsquo;.
+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 causes <code>wait</code> to wait
+until the job or process terminates before returning.
+</p>
+<hr>
+</div>
+<div class="section" id="Job-Control-Builtins">
+<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>
+<span id="Job-Control-Builtins-1"></span><h3 class="section">7.2 Job Control Builtins</h3>
+
+<dl compact="compact">
+<dt id='index-bg'><span><code>bg</code><a href='#index-bg' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-fg'><span><code>fg</code><a href='#index-fg' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-jobs'><span><code>jobs</code><a href='#index-jobs' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>-l</code></span></dt>
+<dd><p>List process <small>ID</small>s in addition to the normal information.
+</p>
+</dd>
+<dt><span><code>-n</code></span></dt>
+<dd><p>Display information only about jobs that have changed status since
+the user was last notified of their status.
+</p>
+</dd>
+<dt><span><code>-p</code></span></dt>
+<dd><p>List only the process <small>ID</small> of the job&rsquo;s process group leader.
+</p>
+</dd>
+<dt><span><code>-r</code></span></dt>
+<dd><p>Display only running jobs.
+</p>
+</dd>
+<dt><span><code>-s</code></span></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 id='index-kill'><span><code>kill</code><a href='#index-kill' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-wait'><span><code>wait</code><a href='#index-wait' class='copiable-anchor'> &para;</a></span></dt>
+<dd><div class="example">
+<pre class="example">wait [-fn] [-p <var>varname</var>] [<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,
+<code>wait</code> waits for all running background jobs and
+the last-executed process substitution, if its process id is the same as
+<var>$!</var>,
+and the return status is zero.
+If the <samp>-n</samp> option is supplied, <code>wait</code> waits for a single job
+from the list of <var>pid</var>s or <var>jobspec</var>s or, if no arguments are
+supplied, any job,
+to complete and returns its exit status.
+If none of the supplied arguments is a child of the shell, or if no arguments
+are supplied and the shell has no unwaited-for children, the exit status
+is 127.
+If the <samp>-p</samp> option is supplied, the process or job identifier of the job
+for which the exit status is returned is assigned to the variable
+<var>varname</var> named by the option argument.
+The variable will be unset initially, before any assignment.
+This is useful only when the <samp>-n</samp> option is supplied.
+Supplying the <samp>-f</samp> option, when job control is enabled,
+forces <code>wait</code> to wait for each <var>pid</var> or <var>jobspec</var> to
+terminate before returning its status, instead 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.
+If <code>wait</code> is interrupted by a signal, the return status will be greater
+than 128, as described above (see <a href="#Signals">Signals</a>).
+Otherwise, the return status is the exit status
+of the last process or job waited for.
+</p>
+</dd>
+<dt id='index-disown'><span><code>disown</code><a href='#index-disown' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-suspend'><span><code>suspend</code><a href='#index-suspend' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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,
+or a shell without job control enabled,
+cannot be suspended; the <samp>-f</samp>
+option can be used to override this and force the suspension.
+The return status is 0 unless the shell is a login shell
+or job control is not enabled
+and
+<samp>-f</samp>
+is not supplied.
+</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>
+</div>
+<div class="section" id="Job-Control-Variables">
+<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>
+<span id="Job-Control-Variables-1"></span><h3 class="section">7.3 Job Control Variables</h3>
+
+<dl compact="compact">
+<dt id='index-auto_005fresume'><span><code>auto_resume</code><a href='#index-auto_005fresume' class='copiable-anchor'> &para;</a></span></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>
+
+<span id="index-Readline_002c-how-to-use"></span>
+
+
+
+
+<hr>
+</div>
+</div>
+<div class="chapter" id="Command-Line-Editing">
+<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">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>
+<span id="Command-Line-Editing-1"></span><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 Builtin Commands</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>
+
+<ul class="section-toc">
+<li><a href="#Introduction-and-Notation" accesskey="1">Introduction to Line Editing</a></li>
+<li><a href="#Readline-Interaction" accesskey="2">Readline Interaction</a></li>
+<li><a href="#Readline-Init-File" accesskey="3">Readline Init File</a></li>
+<li><a href="#Bindable-Readline-Commands" accesskey="4">Bindable Readline Commands</a></li>
+<li><a href="#Readline-vi-Mode" accesskey="5">Readline vi Mode</a></li>
+<li><a href="#Programmable-Completion" accesskey="6">Programmable Completion</a></li>
+<li><a href="#Programmable-Completion-Builtins" accesskey="7">Programmable Completion Builtins</a></li>
+<li><a href="#A-Programmable-Completion-Example" accesskey="8">A Programmable Completion Example</a></li>
+</ul>
+<hr>
+<div class="section" id="Introduction-and-Notation">
+<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>
+<span id="Introduction-to-Line-Editing"></span><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>
+</div>
+<div class="section" id="Readline-Interaction">
+<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 to Line Editing</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>
+<span id="Readline-Interaction-1"></span><h3 class="section">8.2 Readline Interaction</h3>
+<span id="index-interaction_002c-readline"></span>
+
+<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>
+
+<ul class="section-toc">
+<li><a href="#Readline-Bare-Essentials" accesskey="1">Readline Bare Essentials</a></li>
+<li><a href="#Readline-Movement-Commands" accesskey="2">Readline Movement Commands</a></li>
+<li><a href="#Readline-Killing-Commands" accesskey="3">Readline Killing Commands</a></li>
+<li><a href="#Readline-Arguments" accesskey="4">Readline Arguments</a></li>
+<li><a href="#Searching" accesskey="5">Searching for Commands in the History</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Readline-Bare-Essentials">
+<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>
+<span id="Readline-Bare-Essentials-1"></span><h4 class="subsection">8.2.1 Readline Bare Essentials</h4>
+<span id="index-notation_002c-readline"></span>
+<span id="index-command-editing"></span>
+<span id="index-editing-command-lines"></span>
+
+<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><span><kbd>C-b</kbd></span></dt>
+<dd><p>Move back one character.
+</p></dd>
+<dt><span><kbd>C-f</kbd></span></dt>
+<dd><p>Move forward one character.
+</p></dd>
+<dt><span><tt class="key">DEL</tt> or <tt class="key">Backspace</tt></span></dt>
+<dd><p>Delete the character to the left of the cursor.
+</p></dd>
+<dt><span><kbd>C-d</kbd></span></dt>
+<dd><p>Delete the character underneath the cursor.
+</p></dd>
+<dt><span>Printing&nbsp;characters<!-- /@w --></span></dt>
+<dd><p>Insert the character into the line at the cursor.
+</p></dd>
+<dt><span><kbd>C-_</kbd> or <kbd>C-x C-u</kbd></span></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 might 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>
+</div>
+<div class="subsection" id="Readline-Movement-Commands">
+<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>
+<span id="Readline-Movement-Commands-1"></span><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><span><kbd>C-a</kbd></span></dt>
+<dd><p>Move to the start of the line.
+</p></dd>
+<dt><span><kbd>C-e</kbd></span></dt>
+<dd><p>Move to the end of the line.
+</p></dd>
+<dt><span><kbd>M-f</kbd></span></dt>
+<dd><p>Move forward a word, where a word is composed of letters and digits.
+</p></dd>
+<dt><span><kbd>M-b</kbd></span></dt>
+<dd><p>Move backward a word.
+</p></dd>
+<dt><span><kbd>C-l</kbd></span></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>
+</div>
+<div class="subsection" id="Readline-Killing-Commands">
+<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>
+<span id="Readline-Killing-Commands-1"></span><h4 class="subsection">8.2.3 Readline Killing Commands</h4>
+
+<span id="index-killing-text"></span>
+<span id="index-yanking-text"></span>
+
+<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.
+<span id="index-kill-ring"></span>
+</p>
+<p>Here is the list of commands for killing text.
+</p>
+<dl compact="compact">
+<dt><span><kbd>C-k</kbd></span></dt>
+<dd><p>Kill the text from the current cursor position to the end of the line.
+</p>
+</dd>
+<dt><span><kbd>M-d</kbd></span></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><span><kbd>M-<span class="key">DEL</span></kbd></span></dt>
+<dd><p>Kill from the cursor to 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><span><kbd>C-w</kbd></span></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><span><kbd>C-y</kbd></span></dt>
+<dd><p>Yank the most recently killed text back into the buffer at the cursor.
+</p>
+</dd>
+<dt><span><kbd>M-y</kbd></span></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>
+</div>
+<div class="subsection" id="Readline-Arguments">
+<div class="header">
+<p>
+Next: <a href="#Searching" accesskey="n" rel="next">Searching for Commands in the History</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>
+<span id="Readline-Arguments-1"></span><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>
+</div>
+<div class="subsection" id="Searching">
+<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>
+<span id="Searching-for-Commands-in-the-History"></span><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>
+</div>
+</div>
+<div class="section" id="Readline-Init-File">
+<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>
+<span id="Readline-Init-File-1"></span><h3 class="section">8.3 Readline Init File</h3>
+<span id="index-initialization-file_002c-readline"></span>
+
+<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 their 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>.
+The <code>bind</code><!-- /@w --> builtin command can also be used to set Readline
+keybindings and variables.
+See <a href="#Bash-Builtins">Bash Builtin Commands</a>.
+</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>
+
+<ul class="section-toc">
+<li><a href="#Readline-Init-File-Syntax" accesskey="1">Readline Init File Syntax</a></li>
+<li><a href="#Conditional-Init-Constructs" accesskey="2">Conditional Init Constructs</a></li>
+<li><a href="#Sample-Init-File" accesskey="3">Sample Init File</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Readline-Init-File-Syntax">
+<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>
+<span id="Readline-Init-File-Syntax-1"></span><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><span>Variable Settings</span></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 Builtin Commands</a>.
+</p>
+<p>A great deal of run-time behavior is changeable with the following
+variables.
+</p>
+<span id="index-variables_002c-readline"></span>
+<dl compact="compact">
+<dt id='index-active_002dregion_002dstart_002dcolor'><span><code>active-region-start-color</code><a href='#index-active_002dregion_002dstart_002dcolor' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A string variable that controls the text color and background when displaying
+the text in the active region (see the description of
+<code>enable-active-region</code> below).
+This string must not take up any physical character positions on the display,
+so it should consist only of terminal escape sequences.
+It is output to the terminal before displaying the text in the active region.
+This variable is reset to the default value whenever the terminal type changes.
+The default value is the string that puts the terminal in standout mode,
+as obtained from the terminal&rsquo;s terminfo description.
+A sample value might be &lsquo;<samp>\e[01;33m</samp>&rsquo;.
+</p>
+</dd>
+<dt id='index-active_002dregion_002dend_002dcolor'><span><code>active-region-end-color</code><a href='#index-active_002dregion_002dend_002dcolor' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A string variable that &quot;undoes&quot; the effects of <code>active-region-start-color</code>
+and restores &quot;normal&quot; terminal display appearance after displaying text
+in the active region.
+This string must not take up any physical character positions on the display,
+so it should consist only of terminal escape sequences.
+It is output to the terminal after displaying the text in the active region.
+This variable is reset to the default value whenever the terminal type changes.
+The default value is the string that restores the terminal from standout mode,
+as obtained from the terminal&rsquo;s terminfo description.
+A sample value might be &lsquo;<samp>\e[0m</samp>&rsquo;.
+</p>
+</dd>
+<dt id='index-bell_002dstyle'><span><code>bell-style</code><a href='#index-bell_002dstyle' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-bind_002dtty_002dspecial_002dchars'><span><code>bind-tty-special-chars</code><a href='#index-bind_002dtty_002dspecial_002dchars' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-blink_002dmatching_002dparen'><span><code>blink-matching-paren</code><a href='#index-blink_002dmatching_002dparen' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-colored_002dcompletion_002dprefix'><span><code>colored-completion-prefix</code><a href='#index-colored_002dcompletion_002dprefix' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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.
+If there is a color definition in <code>LS_COLORS</code> for the custom suffix
+&lsquo;<samp>readline-colored-completion-prefix</samp>&rsquo;, Readline uses this color for
+the common prefix instead of its default.
+The default is &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt id='index-colored_002dstats'><span><code>colored-stats</code><a href='#index-colored_002dstats' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-comment_002dbegin'><span><code>comment-begin</code><a href='#index-comment_002dbegin' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-completion_002ddisplay_002dwidth'><span><code>completion-display-width</code><a href='#index-completion_002ddisplay_002dwidth' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-completion_002dignore_002dcase'><span><code>completion-ignore-case</code><a href='#index-completion_002dignore_002dcase' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-completion_002dmap_002dcase'><span><code>completion-map-case</code><a href='#index-completion_002dmap_002dcase' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-completion_002dprefix_002ddisplay_002dlength'><span><code>completion-prefix-display-length</code><a href='#index-completion_002dprefix_002ddisplay_002dlength' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-completion_002dquery_002ditems'><span><code>completion-query-items</code><a href='#index-completion_002dquery_002ditems' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 or equal to this value,
+Readline will ask whether or not the user wishes to view them;
+otherwise, they are simply listed.
+This variable must be set to an integer value greater than or equal to zero.
+A zero value means Readline should never ask; negative values are
+treated as zero.
+The default limit is <code>100</code>.
+</p>
+</dd>
+<dt id='index-convert_002dmeta'><span><code>convert-meta</code><a href='#index-convert_002dmeta' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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.
+This variable is dependent on the <code>LC_CTYPE</code> locale category, and
+may change if the locale is changed.
+</p>
+</dd>
+<dt id='index-disable_002dcompletion'><span><code>disable-completion</code><a href='#index-disable_002dcompletion' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-echo_002dcontrol_002dcharacters'><span><code>echo-control-characters</code><a href='#index-echo_002dcontrol_002dcharacters' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-editing_002dmode'><span><code>editing-mode</code><a href='#index-editing_002dmode' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-emacs_002dmode_002dstring'><span><code>emacs-mode-string</code><a href='#index-emacs_002dmode_002dstring' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-enable_002dactive_002dregion'><span><code>enable-active-region</code><a href='#index-enable_002dactive_002dregion' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The <em>point</em> is the current cursor position, and <em>mark</em> refers
+to a saved cursor position (see <a href="#Commands-For-Moving">Commands For Moving</a>).
+The text between the point and mark is referred to as the <em>region</em>.
+When this variable is set to &lsquo;<samp>On</samp>&rsquo;, Readline allows certain commands
+to designate the region as <em>active</em>.
+When the region is active, Readline highlights the text in the region using
+the value of the <code>active-region-start-color</code>, which defaults to the
+string that enables
+the terminal&rsquo;s standout mode.
+The active region shows the text inserted by bracketed-paste and any
+matching text found by incremental and non-incremental history searches.
+The default is &lsquo;<samp>On</samp>&rsquo;.
+</p>
+</dd>
+<dt id='index-enable_002dbracketed_002dpaste'><span><code>enable-bracketed-paste</code><a href='#index-enable_002dbracketed_002dpaste' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>When set to &lsquo;<samp>On</samp>&rsquo;, Readline configures the terminal 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 is called putting the terminal into <em>bracketed paste mode</em>;
+it prevents Readline from executing any editing commands bound to key
+sequences appearing in the pasted text.
+The default is &lsquo;<samp>On</samp>&rsquo;.
+</p>
+</dd>
+<dt id='index-enable_002dkeypad'><span><code>enable-keypad</code><a href='#index-enable_002dkeypad' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>enable-meta-key</code></span></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 id='index-expand_002dtilde'><span><code>expand-tilde</code><a href='#index-expand_002dtilde' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-history_002dpreserve_002dpoint'><span><code>history-preserve-point</code><a href='#index-history_002dpreserve_002dpoint' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-history_002dsize'><span><code>history-size</code><a href='#index-history_002dsize' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-horizontal_002dscroll_002dmode'><span><code>horizontal-scroll-mode</code><a href='#index-horizontal_002dscroll_002dmode' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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.
+This variable is automatically set to &lsquo;<samp>on</samp>&rsquo; for terminals of height 1.
+By default, this variable is set to &lsquo;<samp>off</samp>&rsquo;.
+</p>
+</dd>
+<dt id='index-input_002dmeta'><span><code>input-meta</code><a href='#index-input_002dmeta' class='copiable-anchor'> &para;</a></span></dt>
+<dd><span id="index-meta_002dflag"></span>
+<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.
+This variable is dependent on the <code>LC_CTYPE</code> locale category, and
+may change if the locale is changed.
+</p>
+</dd>
+<dt id='index-isearch_002dterminators'><span><code>isearch-terminators</code><a href='#index-isearch_002dterminators' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>The string of characters that should terminate an incremental search without
+subsequently executing the character as a command (see <a href="#Searching">Searching for Commands in the History</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 id='index-keymap'><span><code>keymap</code><a href='#index-keymap' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>keyseq-timeout</code></span></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><span><code>mark-directories</code></span></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 id='index-mark_002dmodified_002dlines'><span><code>mark-modified-lines</code><a href='#index-mark_002dmodified_002dlines' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-mark_002dsymlinked_002ddirectories'><span><code>mark-symlinked-directories</code><a href='#index-mark_002dsymlinked_002ddirectories' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-match_002dhidden_002dfiles'><span><code>match-hidden-files</code><a href='#index-match_002dhidden_002dfiles' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-menu_002dcomplete_002ddisplay_002dprefix'><span><code>menu-complete-display-prefix</code><a href='#index-menu_002dcomplete_002ddisplay_002dprefix' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-output_002dmeta'><span><code>output-meta</code><a href='#index-output_002dmeta' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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.
+This variable is dependent on the <code>LC_CTYPE</code> locale category, and
+may change if the locale is changed.
+</p>
+</dd>
+<dt id='index-page_002dcompletions'><span><code>page-completions</code><a href='#index-page_002dcompletions' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>print-completions-horizontally</code></span></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 id='index-revert_002dall_002dat_002dnewline'><span><code>revert-all-at-newline</code><a href='#index-revert_002dall_002dat_002dnewline' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-show_002dall_002dif_002dambiguous'><span><code>show-all-if-ambiguous</code><a href='#index-show_002dall_002dif_002dambiguous' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-show_002dall_002dif_002dunmodified'><span><code>show-all-if-unmodified</code><a href='#index-show_002dall_002dif_002dunmodified' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-show_002dmode_002din_002dprompt'><span><code>show-mode-in-prompt</code><a href='#index-show_002dmode_002din_002dprompt' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-skip_002dcompleted_002dtext'><span><code>skip-completed-text</code><a href='#index-skip_002dcompleted_002dtext' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-vi_002dcmd_002dmode_002dstring'><span><code>vi-cmd-mode-string</code><a href='#index-vi_002dcmd_002dmode_002dstring' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-vi_002dins_002dmode_002dstring'><span><code>vi-ins-mode-string</code><a href='#index-vi_002dins_002dmode_002dstring' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-visible_002dstats'><span><code>visible-stats</code><a href='#index-visible_002dstats' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span>Key Bindings</span></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 be put directly into an initialization file.
+See <a href="#Bash-Builtins">Bash Builtin Commands</a>.
+</p>
+<dl compact="compact">
+<dt><span><var>keyname</var>:&nbsp;<var><span class="nolinebreak">function-name</span></var>&nbsp;or&nbsp;<var>macro</var><!-- /@w --></span></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><span>&quot;<var>keyseq</var>&quot;:&nbsp;<var><span class="nolinebreak">function-name</span></var>&nbsp;or&nbsp;<var>macro</var><!-- /@w --></span></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><span><code><kbd>\C-</kbd></code></span></dt>
+<dd><p>control prefix
+</p></dd>
+<dt><span><code><kbd>\M-</kbd></code></span></dt>
+<dd><p>meta prefix
+</p></dd>
+<dt><span><code><kbd>\e</kbd></code></span></dt>
+<dd><p>an escape character
+</p></dd>
+<dt><span><code><kbd>\\</kbd></code></span></dt>
+<dd><p>backslash
+</p></dd>
+<dt><span><code><kbd>\&quot;</kbd></code></span></dt>
+<dd><p><tt class="key">&quot;</tt>, a double quotation mark
+</p></dd>
+<dt><span><code><kbd>\'</kbd></code></span></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><span><code>\a</code></span></dt>
+<dd><p>alert (bell)
+</p></dd>
+<dt><span><code>\b</code></span></dt>
+<dd><p>backspace
+</p></dd>
+<dt><span><code>\d</code></span></dt>
+<dd><p>delete
+</p></dd>
+<dt><span><code>\f</code></span></dt>
+<dd><p>form feed
+</p></dd>
+<dt><span><code>\n</code></span></dt>
+<dd><p>newline
+</p></dd>
+<dt><span><code>\r</code></span></dt>
+<dd><p>carriage return
+</p></dd>
+<dt><span><code>\t</code></span></dt>
+<dd><p>horizontal tab
+</p></dd>
+<dt><span><code>\v</code></span></dt>
+<dd><p>vertical tab
+</p></dd>
+<dt><span><code>\<var>nnn</var></code></span></dt>
+<dd><p>the eight-bit character whose value is the octal value <var>nnn</var>
+(one to three digits)
+</p></dd>
+<dt><span><code>\x<var>HH</var></code></span></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>
+</div>
+<div class="subsection" id="Conditional-Init-Constructs">
+<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>
+<span id="Conditional-Init-Constructs-1"></span><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><span><code>$if</code></span></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><span><code>mode</code></span></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><span><code>term</code></span></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><span><code>version</code></span></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><span><code>application</code></span></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><span><code>variable</code></span></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><span><code>$endif</code></span></dt>
+<dd><p>This command, as seen in the previous example, terminates an
+<code>$if</code> command.
+</p>
+</dd>
+<dt><span><code>$else</code></span></dt>
+<dd><p>Commands in this branch of the <code>$if</code> directive are executed if
+the test fails.
+</p>
+</dd>
+<dt><span><code>$include</code></span></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>
+</div>
+<div class="subsection" id="Sample-Init-File">
+<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>
+<span id="Sample-Init-File-1"></span><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 150 or more possible completions for a word,
+# ask whether or not the user 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>
+</div>
+</div>
+<div class="section" id="Bindable-Readline-Commands">
+<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>
+<span id="Bindable-Readline-Commands-1"></span><h3 class="section">8.4 Bindable Readline Commands</h3>
+
+
+<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 Builtin Commands</a>.)
+Command names without an accompanying key sequence are unbound by default.
+</p>
+<p>In the following descriptions, <em>point</em> refers to the current cursor
+position, and <em>mark</em> refers to a cursor position saved by the
+<code>set-mark</code> command.
+The text between the point and mark is referred to as the <em>region</em>.
+</p>
+<ul class="section-toc">
+<li><a href="#Commands-For-Moving" accesskey="1">Commands For Moving</a></li>
+<li><a href="#Commands-For-History" accesskey="2">Commands For Manipulating The History</a></li>
+<li><a href="#Commands-For-Text" accesskey="3">Commands For Changing Text</a></li>
+<li><a href="#Commands-For-Killing" accesskey="4">Killing And Yanking</a></li>
+<li><a href="#Numeric-Arguments" accesskey="5">Specifying Numeric Arguments</a></li>
+<li><a href="#Commands-For-Completion" accesskey="6">Letting Readline Type For You</a></li>
+<li><a href="#Keyboard-Macros" accesskey="7">Keyboard Macros</a></li>
+<li><a href="#Miscellaneous-Commands" accesskey="8">Some Miscellaneous Commands</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Commands-For-Moving">
+<div class="header">
+<p>
+Next: <a href="#Commands-For-History" accesskey="n" rel="next">Commands For Manipulating The 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>
+<span id="Commands-For-Moving-1"></span><h4 class="subsection">8.4.1 Commands For Moving</h4>
+<dl compact="compact">
+<dt id='index-beginning_002dof_002dline-_0028C_002da_0029'><span><code>beginning-of-line (C-a)</code><a href='#index-beginning_002dof_002dline-_0028C_002da_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move to the start of the current line.
+</p>
+</dd>
+<dt id='index-end_002dof_002dline-_0028C_002de_0029'><span><code>end-of-line (C-e)</code><a href='#index-end_002dof_002dline-_0028C_002de_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move to the end of the line.
+</p>
+</dd>
+<dt id='index-forward_002dchar-_0028C_002df_0029'><span><code>forward-char (C-f)</code><a href='#index-forward_002dchar-_0028C_002df_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move forward a character.
+</p>
+</dd>
+<dt id='index-backward_002dchar-_0028C_002db_0029'><span><code>backward-char (C-b)</code><a href='#index-backward_002dchar-_0028C_002db_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move back a character.
+</p>
+</dd>
+<dt id='index-forward_002dword-_0028M_002df_0029'><span><code>forward-word (M-f)</code><a href='#index-forward_002dword-_0028M_002df_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move forward to the end of the next word.
+Words are composed of letters and digits.
+</p>
+</dd>
+<dt id='index-backward_002dword-_0028M_002db_0029'><span><code>backward-word (M-b)</code><a href='#index-backward_002dword-_0028M_002db_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move back to the start of the current or previous word.
+Words are composed of letters and digits.
+</p>
+</dd>
+<dt id='index-shell_002dforward_002dword-_0028M_002dC_002df_0029'><span><code>shell-forward-word (M-C-f)</code><a href='#index-shell_002dforward_002dword-_0028M_002dC_002df_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move forward to the end of the next word.
+Words are delimited by non-quoted shell metacharacters.
+</p>
+</dd>
+<dt id='index-shell_002dbackward_002dword-_0028M_002dC_002db_0029'><span><code>shell-backward-word (M-C-b)</code><a href='#index-shell_002dbackward_002dword-_0028M_002dC_002db_0029' class='copiable-anchor'> &para;</a></span></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 id='index-previous_002dscreen_002dline-_0028_0029'><span><code>previous-screen-line ()</code><a href='#index-previous_002dscreen_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-next_002dscreen_002dline-_0028_0029'><span><code>next-screen-line ()</code><a href='#index-next_002dscreen_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-clear_002ddisplay-_0028M_002dC_002dl_0029'><span><code>clear-display (M-C-l)</code><a href='#index-clear_002ddisplay-_0028M_002dC_002dl_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Clear the screen and, if possible, the terminal&rsquo;s scrollback buffer,
+then redraw the current line,
+leaving the current line at the top of the screen.
+</p>
+</dd>
+<dt id='index-clear_002dscreen-_0028C_002dl_0029'><span><code>clear-screen (C-l)</code><a href='#index-clear_002dscreen-_0028C_002dl_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Clear the screen,
+then redraw the current line,
+leaving the current line at the top of the screen.
+</p>
+</dd>
+<dt id='index-redraw_002dcurrent_002dline-_0028_0029'><span><code>redraw-current-line ()</code><a href='#index-redraw_002dcurrent_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Refresh the current line. By default, this is unbound.
+</p>
+</dd>
+</dl>
+
+<hr>
+</div>
+<div class="subsection" id="Commands-For-History">
+<div class="header">
+<p>
+Next: <a href="#Commands-For-Text" accesskey="n" rel="next">Commands For Changing 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>
+<span id="Commands-For-Manipulating-The-History"></span><h4 class="subsection">8.4.2 Commands For Manipulating The History</h4>
+
+<dl compact="compact">
+<dt id='index-accept_002dline-_0028Newline-or-Return_0029'><span><code>accept-line (Newline or Return)</code><a href='#index-accept_002dline-_0028Newline-or-Return_0029' class='copiable-anchor'> &para;</a></span></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 id='index-previous_002dhistory-_0028C_002dp_0029'><span><code>previous-history (C-p)</code><a href='#index-previous_002dhistory-_0028C_002dp_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move &lsquo;back&rsquo; through the history list, fetching the previous command.
+</p>
+</dd>
+<dt id='index-next_002dhistory-_0028C_002dn_0029'><span><code>next-history (C-n)</code><a href='#index-next_002dhistory-_0028C_002dn_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move &lsquo;forward&rsquo; through the history list, fetching the next command.
+</p>
+</dd>
+<dt id='index-beginning_002dof_002dhistory-_0028M_002d_003c_0029'><span><code>beginning-of-history (M-&lt;)</code><a href='#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move to the first line in the history.
+</p>
+</dd>
+<dt id='index-end_002dof_002dhistory-_0028M_002d_003e_0029'><span><code>end-of-history (M-&gt;)</code><a href='#index-end_002dof_002dhistory-_0028M_002d_003e_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Move to the end of the input history, i.e., the line currently
+being entered.
+</p>
+</dd>
+<dt id='index-reverse_002dsearch_002dhistory-_0028C_002dr_0029'><span><code>reverse-search-history (C-r)</code><a href='#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029' class='copiable-anchor'> &para;</a></span></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.
+This command sets the region to the matched text and activates the mark.
+</p>
+</dd>
+<dt id='index-forward_002dsearch_002dhistory-_0028C_002ds_0029'><span><code>forward-search-history (C-s)</code><a href='#index-forward_002dsearch_002dhistory-_0028C_002ds_0029' class='copiable-anchor'> &para;</a></span></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.
+This command sets the region to the matched text and activates the mark.
+</p>
+</dd>
+<dt id='index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029'><span><code>non-incremental-reverse-search-history (M-p)</code><a href='#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029' class='copiable-anchor'> &para;</a></span></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 id='index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029'><span><code>non-incremental-forward-search-history (M-n)</code><a href='#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029' class='copiable-anchor'> &para;</a></span></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 id='index-history_002dsearch_002dforward-_0028_0029'><span><code>history-search-forward ()</code><a href='#index-history_002dsearch_002dforward-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-history_002dsearch_002dbackward-_0028_0029'><span><code>history-search-backward ()</code><a href='#index-history_002dsearch_002dbackward-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-history_002dsubstring_002dsearch_002dforward-_0028_0029'><span><code>history-substring-search-forward ()</code><a href='#index-history_002dsubstring_002dsearch_002dforward-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-history_002dsubstring_002dsearch_002dbackward-_0028_0029'><span><code>history-substring-search-backward ()</code><a href='#index-history_002dsubstring_002dsearch_002dbackward-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-yank_002dnth_002darg-_0028M_002dC_002dy_0029'><span><code>yank-nth-arg (M-C-y)</code><a href='#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029' class='copiable-anchor'> &para;</a></span></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 id='index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029'><span><code>yank-last-arg (M-. or M-_)</code><a href='#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029' class='copiable-anchor'> &para;</a></span></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>
+<dt id='index-operate_002dand_002dget_002dnext-_0028C_002do_0029'><span><code>operate-and-get-next (C-o)</code><a href='#index-operate_002dand_002dget_002dnext-_0028C_002do_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Accept the current line for return to the calling application as if a
+newline had been entered,
+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 id='index-fetch_002dhistory-_0028_0029'><span><code>fetch-history ()</code><a href='#index-fetch_002dhistory-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>With a numeric argument, fetch that entry from the history list
+and make it the current line.
+Without an argument, move back to the first entry in the history list.
+</p>
+</dd>
+</dl>
+
+<hr>
+</div>
+<div class="subsection" id="Commands-For-Text">
+<div class="header">
+<p>
+Next: <a href="#Commands-For-Killing" accesskey="n" rel="next">Killing And Yanking</a>, Previous: <a href="#Commands-For-History" accesskey="p" rel="prev">Commands For Manipulating The 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>
+<span id="Commands-For-Changing-Text"></span><h4 class="subsection">8.4.3 Commands For Changing Text</h4>
+
+<dl compact="compact">
+<dt id='index-end_002dof_002dfile-_0028usually-C_002dd_0029'><span><code><i>end-of-file</i> (usually C-d)</code><a href='#index-end_002dof_002dfile-_0028usually-C_002dd_0029' class='copiable-anchor'> &para;</a></span></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 id='index-delete_002dchar-_0028C_002dd_0029'><span><code>delete-char (C-d)</code><a href='#index-delete_002dchar-_0028C_002dd_0029' class='copiable-anchor'> &para;</a></span></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 id='index-backward_002ddelete_002dchar-_0028Rubout_0029'><span><code>backward-delete-char (Rubout)</code><a href='#index-backward_002ddelete_002dchar-_0028Rubout_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Delete the character behind the cursor. A numeric argument means
+to kill the characters instead of deleting them.
+</p>
+</dd>
+<dt id='index-forward_002dbackward_002ddelete_002dchar-_0028_0029'><span><code>forward-backward-delete-char ()</code><a href='#index-forward_002dbackward_002ddelete_002dchar-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029'><span><code>quoted-insert (C-q or C-v)</code><a href='#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029' class='copiable-anchor'> &para;</a></span></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 id='index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029'><span><code>self-insert (a, b, A, 1, !, &hellip;)</code><a href='#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Insert yourself.
+</p>
+</dd>
+<dt id='index-bracketed_002dpaste_002dbegin-_0028_0029'><span><code>bracketed-paste-begin ()</code><a href='#index-bracketed_002dpaste_002dbegin-_0028_0029' class='copiable-anchor'> &para;</a></span></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>
+<p>Bracketed paste sets the region (the characters between point and the mark)
+to the inserted text. It uses the concept of an <em>active mark</em>: when the
+mark is active, Readline redisplay uses the terminal&rsquo;s standout mode to
+denote the region.
+</p>
+</dd>
+<dt id='index-transpose_002dchars-_0028C_002dt_0029'><span><code>transpose-chars (C-t)</code><a href='#index-transpose_002dchars-_0028C_002dt_0029' class='copiable-anchor'> &para;</a></span></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 id='index-transpose_002dwords-_0028M_002dt_0029'><span><code>transpose-words (M-t)</code><a href='#index-transpose_002dwords-_0028M_002dt_0029' class='copiable-anchor'> &para;</a></span></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 id='index-upcase_002dword-_0028M_002du_0029'><span><code>upcase-word (M-u)</code><a href='#index-upcase_002dword-_0028M_002du_0029' class='copiable-anchor'> &para;</a></span></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 id='index-downcase_002dword-_0028M_002dl_0029'><span><code>downcase-word (M-l)</code><a href='#index-downcase_002dword-_0028M_002dl_0029' class='copiable-anchor'> &para;</a></span></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 id='index-capitalize_002dword-_0028M_002dc_0029'><span><code>capitalize-word (M-c)</code><a href='#index-capitalize_002dword-_0028M_002dc_0029' class='copiable-anchor'> &para;</a></span></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 id='index-overwrite_002dmode-_0028_0029'><span><code>overwrite-mode ()</code><a href='#index-overwrite_002dmode-_0028_0029' class='copiable-anchor'> &para;</a></span></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>
+</div>
+<div class="subsection" id="Commands-For-Killing">
+<div class="header">
+<p>
+Next: <a href="#Numeric-Arguments" accesskey="n" rel="next">Specifying Numeric Arguments</a>, Previous: <a href="#Commands-For-Text" accesskey="p" rel="prev">Commands For Changing 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>
+<span id="Killing-And-Yanking"></span><h4 class="subsection">8.4.4 Killing And Yanking</h4>
+
+<dl compact="compact">
+<dt id='index-kill_002dline-_0028C_002dk_0029'><span><code>kill-line (C-k)</code><a href='#index-kill_002dline-_0028C_002dk_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Kill the text from point to the end of the line.
+With a negative numeric argument, kill backward from the cursor to the
+beginning of the current line.
+</p>
+</dd>
+<dt id='index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029'><span><code>backward-kill-line (C-x Rubout)</code><a href='#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Kill backward from the cursor to the beginning of the current line.
+With a negative numeric argument, kill forward from the cursor to the
+end of the current line.
+</p>
+</dd>
+<dt id='index-unix_002dline_002ddiscard-_0028C_002du_0029'><span><code>unix-line-discard (C-u)</code><a href='#index-unix_002dline_002ddiscard-_0028C_002du_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Kill backward from the cursor to the beginning of the current line.
+</p>
+</dd>
+<dt id='index-kill_002dwhole_002dline-_0028_0029'><span><code>kill-whole-line ()</code><a href='#index-kill_002dwhole_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Kill all characters on the current line, no matter where point is.
+By default, this is unbound.
+</p>
+</dd>
+<dt id='index-kill_002dword-_0028M_002dd_0029'><span><code>kill-word (M-d)</code><a href='#index-kill_002dword-_0028M_002dd_0029' class='copiable-anchor'> &para;</a></span></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 id='index-backward_002dkill_002dword-_0028M_002dDEL_0029'><span><code>backward-kill-word (M-<span class="key">DEL</span>)</code><a href='#index-backward_002dkill_002dword-_0028M_002dDEL_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Kill the word behind point.
+Word boundaries are the same as <code>backward-word</code>.
+</p>
+</dd>
+<dt id='index-shell_002dkill_002dword-_0028M_002dC_002dd_0029'><span><code>shell-kill-word (M-C-d)</code><a href='#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029' class='copiable-anchor'> &para;</a></span></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 id='index-shell_002dbackward_002dkill_002dword-_0028_0029'><span><code>shell-backward-kill-word ()</code><a href='#index-shell_002dbackward_002dkill_002dword-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Kill the word behind point.
+Word boundaries are the same as <code>shell-backward-word</code>.
+</p>
+</dd>
+<dt id='index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029'><span><code>shell-transpose-words (M-C-t)</code><a href='#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029' class='copiable-anchor'> &para;</a></span></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.
+Word boundaries are the same as <code>shell-forward-word</code> and
+<code>shell-backward-word</code>.
+</p>
+</dd>
+<dt id='index-unix_002dword_002drubout-_0028C_002dw_0029'><span><code>unix-word-rubout (C-w)</code><a href='#index-unix_002dword_002drubout-_0028C_002dw_0029' class='copiable-anchor'> &para;</a></span></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 id='index-unix_002dfilename_002drubout-_0028_0029'><span><code>unix-filename-rubout ()</code><a href='#index-unix_002dfilename_002drubout-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-delete_002dhorizontal_002dspace-_0028_0029'><span><code>delete-horizontal-space ()</code><a href='#index-delete_002dhorizontal_002dspace-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Delete all spaces and tabs around point. By default, this is unbound.
+</p>
+</dd>
+<dt id='index-kill_002dregion-_0028_0029'><span><code>kill-region ()</code><a href='#index-kill_002dregion-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Kill the text in the current region.
+By default, this command is unbound.
+</p>
+</dd>
+<dt id='index-copy_002dregion_002das_002dkill-_0028_0029'><span><code>copy-region-as-kill ()</code><a href='#index-copy_002dregion_002das_002dkill-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-copy_002dbackward_002dword-_0028_0029'><span><code>copy-backward-word ()</code><a href='#index-copy_002dbackward_002dword-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-copy_002dforward_002dword-_0028_0029'><span><code>copy-forward-word ()</code><a href='#index-copy_002dforward_002dword-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-yank-_0028C_002dy_0029'><span><code>yank (C-y)</code><a href='#index-yank-_0028C_002dy_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Yank the top of the kill ring into the buffer at point.
+</p>
+</dd>
+<dt id='index-yank_002dpop-_0028M_002dy_0029'><span><code>yank-pop (M-y)</code><a href='#index-yank_002dpop-_0028M_002dy_0029' class='copiable-anchor'> &para;</a></span></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>
+</div>
+<div class="subsection" id="Numeric-Arguments">
+<div class="header">
+<p>
+Next: <a href="#Commands-For-Completion" accesskey="n" rel="next">Letting Readline Type For You</a>, Previous: <a href="#Commands-For-Killing" accesskey="p" rel="prev">Killing And Yanking</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>
+<span id="Specifying-Numeric-Arguments"></span><h4 class="subsection">8.4.5 Specifying Numeric Arguments</h4>
+<dl compact="compact">
+<dt id='index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029'><span><code>digit-argument (<kbd>M-0</kbd>, <kbd>M-1</kbd>, &hellip; <kbd>M--</kbd>)</code><a href='#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029' class='copiable-anchor'> &para;</a></span></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 id='index-universal_002dargument-_0028_0029'><span><code>universal-argument ()</code><a href='#index-universal_002dargument-_0028_0029' class='copiable-anchor'> &para;</a></span></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>
+</div>
+<div class="subsection" id="Commands-For-Completion">
+<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">Specifying 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>
+<span id="Letting-Readline-Type-For-You"></span><h4 class="subsection">8.4.6 Letting Readline Type For You</h4>
+
+<dl compact="compact">
+<dt id='index-complete-_0028TAB_0029'><span><code>complete (<span class="key">TAB</span>)</code><a href='#index-complete-_0028TAB_0029' class='copiable-anchor'> &para;</a></span></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 id='index-possible_002dcompletions-_0028M_002d_003f_0029'><span><code>possible-completions (M-?)</code><a href='#index-possible_002dcompletions-_0028M_002d_003f_0029' class='copiable-anchor'> &para;</a></span></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 id='index-insert_002dcompletions-_0028M_002d_002a_0029'><span><code>insert-completions (M-*)</code><a href='#index-insert_002dcompletions-_0028M_002d_002a_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Insert all completions of the text before point that would have
+been generated by <code>possible-completions</code>.
+</p>
+</dd>
+<dt id='index-menu_002dcomplete-_0028_0029'><span><code>menu-complete ()</code><a href='#index-menu_002dcomplete-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-menu_002dcomplete_002dbackward-_0028_0029'><span><code>menu-complete-backward ()</code><a href='#index-menu_002dcomplete_002dbackward-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-delete_002dchar_002dor_002dlist-_0028_0029'><span><code>delete-char-or-list ()</code><a href='#index-delete_002dchar_002dor_002dlist-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-complete_002dfilename-_0028M_002d_002f_0029'><span><code>complete-filename (M-/)</code><a href='#index-complete_002dfilename-_0028M_002d_002f_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Attempt filename completion on the text before point.
+</p>
+</dd>
+<dt id='index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029'><span><code>possible-filename-completions (C-x /)</code><a href='#index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a filename.
+</p>
+</dd>
+<dt id='index-complete_002dusername-_0028M_002d_007e_0029'><span><code>complete-username (M-~)</code><a href='#index-complete_002dusername-_0028M_002d_007e_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Attempt completion on the text before point, treating
+it as a username.
+</p>
+</dd>
+<dt id='index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029'><span><code>possible-username-completions (C-x ~)</code><a href='#index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a username.
+</p>
+</dd>
+<dt id='index-complete_002dvariable-_0028M_002d_0024_0029'><span><code>complete-variable (M-$)</code><a href='#index-complete_002dvariable-_0028M_002d_0024_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Attempt completion on the text before point, treating
+it as a shell variable.
+</p>
+</dd>
+<dt id='index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029'><span><code>possible-variable-completions (C-x $)</code><a href='#index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a shell variable.
+</p>
+</dd>
+<dt id='index-complete_002dhostname-_0028M_002d_0040_0029'><span><code>complete-hostname (M-@)</code><a href='#index-complete_002dhostname-_0028M_002d_0040_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Attempt completion on the text before point, treating
+it as a hostname.
+</p>
+</dd>
+<dt id='index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029'><span><code>possible-hostname-completions (C-x @)</code><a href='#index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a hostname.
+</p>
+</dd>
+<dt id='index-complete_002dcommand-_0028M_002d_0021_0029'><span><code>complete-command (M-!)</code><a href='#index-complete_002dcommand-_0028M_002d_0021_0029' class='copiable-anchor'> &para;</a></span></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 id='index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029'><span><code>possible-command-completions (C-x !)</code><a href='#index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>List the possible completions of the text before point,
+treating it as a command name.
+</p>
+</dd>
+<dt id='index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029'><span><code>dynamic-complete-history (M-<span class="key">TAB</span>)</code><a href='#index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029' class='copiable-anchor'> &para;</a></span></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 id='index-dabbrev_002dexpand-_0028_0029'><span><code>dabbrev-expand ()</code><a href='#index-dabbrev_002dexpand-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-complete_002dinto_002dbraces-_0028M_002d_007b_0029'><span><code>complete-into-braces (M-{)</code><a href='#index-complete_002dinto_002dbraces-_0028M_002d_007b_0029' class='copiable-anchor'> &para;</a></span></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>
+</div>
+<div class="subsection" id="Keyboard-Macros">
+<div class="header">
+<p>
+Next: <a href="#Miscellaneous-Commands" accesskey="n" rel="next">Some Miscellaneous Commands</a>, Previous: <a href="#Commands-For-Completion" accesskey="p" rel="prev">Letting Readline Type For You</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>
+<span id="Keyboard-Macros-1"></span><h4 class="subsection">8.4.7 Keyboard Macros</h4>
+<dl compact="compact">
+<dt id='index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029'><span><code>start-kbd-macro (C-x ()</code><a href='#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Begin saving the characters typed into the current keyboard macro.
+</p>
+</dd>
+<dt id='index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029'><span><code>end-kbd-macro (C-x ))</code><a href='#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Stop saving the characters typed into the current keyboard macro
+and save the definition.
+</p>
+</dd>
+<dt id='index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029'><span><code>call-last-kbd-macro (C-x e)</code><a href='#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029' class='copiable-anchor'> &para;</a></span></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 id='index-print_002dlast_002dkbd_002dmacro-_0028_0029'><span><code>print-last-kbd-macro ()</code><a href='#index-print_002dlast_002dkbd_002dmacro-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Print the last keyboard macro defined in a format suitable for the
+<var>inputrc</var> file.
+</p>
+</dd>
+</dl>
+
+<hr>
+</div>
+<div class="subsection" id="Miscellaneous-Commands">
+<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>
+<span id="Some-Miscellaneous-Commands"></span><h4 class="subsection">8.4.8 Some Miscellaneous Commands</h4>
+<dl compact="compact">
+<dt id='index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029'><span><code>re-read-init-file (C-x C-r)</code><a href='#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029' class='copiable-anchor'> &para;</a></span></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 id='index-abort-_0028C_002dg_0029'><span><code>abort (C-g)</code><a href='#index-abort-_0028C_002dg_0029' class='copiable-anchor'> &para;</a></span></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 id='index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029'><span><code>do-lowercase-version (M-A, M-B, M-<var>x</var>, &hellip;)</code><a href='#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029' class='copiable-anchor'> &para;</a></span></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 id='index-prefix_002dmeta-_0028ESC_0029'><span><code>prefix-meta (<span class="key">ESC</span>)</code><a href='#index-prefix_002dmeta-_0028ESC_0029' class='copiable-anchor'> &para;</a></span></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 id='index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029'><span><code>undo (C-_ or C-x C-u)</code><a href='#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Incremental undo, separately remembered for each line.
+</p>
+</dd>
+<dt id='index-revert_002dline-_0028M_002dr_0029'><span><code>revert-line (M-r)</code><a href='#index-revert_002dline-_0028M_002dr_0029' class='copiable-anchor'> &para;</a></span></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 id='index-tilde_002dexpand-_0028M_002d_0026_0029'><span><code>tilde-expand (M-&amp;)</code><a href='#index-tilde_002dexpand-_0028M_002d_0026_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Perform tilde expansion on the current word.
+</p>
+</dd>
+<dt id='index-set_002dmark-_0028C_002d_0040_0029'><span><code>set-mark (C-@)</code><a href='#index-set_002dmark-_0028C_002d_0040_0029' class='copiable-anchor'> &para;</a></span></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 id='index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029'><span><code>exchange-point-and-mark (C-x C-x)</code><a href='#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029' class='copiable-anchor'> &para;</a></span></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 id='index-character_002dsearch-_0028C_002d_005d_0029'><span><code>character-search (C-])</code><a href='#index-character_002dsearch-_0028C_002d_005d_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A character is read and point is moved to the next occurrence of that
+character. A negative argument searches for previous occurrences.
+</p>
+</dd>
+<dt id='index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029'><span><code>character-search-backward (M-C-])</code><a href='#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A character is read and point is moved to the previous occurrence
+of that character. A negative argument searches for subsequent
+occurrences.
+</p>
+</dd>
+<dt id='index-skip_002dcsi_002dsequence-_0028_0029'><span><code>skip-csi-sequence ()</code><a href='#index-skip_002dcsi_002dsequence-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-insert_002dcomment-_0028M_002d_0023_0029'><span><code>insert-comment (M-#)</code><a href='#index-insert_002dcomment-_0028M_002d_0023_0029' class='copiable-anchor'> &para;</a></span></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 id='index-dump_002dfunctions-_0028_0029'><span><code>dump-functions ()</code><a href='#index-dump_002dfunctions-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-dump_002dvariables-_0028_0029'><span><code>dump-variables ()</code><a href='#index-dump_002dvariables-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-dump_002dmacros-_0028_0029'><span><code>dump-macros ()</code><a href='#index-dump_002dmacros-_0028_0029' class='copiable-anchor'> &para;</a></span></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 id='index-spell_002dcorrect_002dword-_0028C_002dx-s_0029'><span><code>spell-correct-word (C-x s)</code><a href='#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Perform spelling correction on the current word, treating it as a directory
+or filename, in the same way as the <code>cdspell</code> shell option.
+Word boundaries are the same as those used by <code>shell-forward-word</code>.
+</p>
+</dd>
+<dt id='index-glob_002dcomplete_002dword-_0028M_002dg_0029'><span><code>glob-complete-word (M-g)</code><a href='#index-glob_002dcomplete_002dword-_0028M_002dg_0029' class='copiable-anchor'> &para;</a></span></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 id='index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029'><span><code>glob-expand-word (C-x *)</code><a href='#index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029' class='copiable-anchor'> &para;</a></span></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 id='index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029'><span><code>glob-list-expansions (C-x g)</code><a href='#index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029' class='copiable-anchor'> &para;</a></span></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 id='index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029'><span><code>display-shell-version (C-x C-v)</code><a href='#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Display version information about the current instance of Bash.
+</p>
+</dd>
+<dt id='index-shell_002dexpand_002dline-_0028M_002dC_002de_0029'><span><code>shell-expand-line (M-C-e)</code><a href='#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029' class='copiable-anchor'> &para;</a></span></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 id='index-history_002dexpand_002dline-_0028M_002d_005e_0029'><span><code>history-expand-line (M-^)</code><a href='#index-history_002dexpand_002dline-_0028M_002d_005e_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Perform history expansion on the current line.
+</p>
+</dd>
+<dt id='index-magic_002dspace-_0028_0029'><span><code>magic-space ()</code><a href='#index-magic_002dspace-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Perform history expansion on the current line and insert a space
+(see <a href="#History-Interaction">History Expansion</a>).
+</p>
+</dd>
+<dt id='index-alias_002dexpand_002dline-_0028_0029'><span><code>alias-expand-line ()</code><a href='#index-alias_002dexpand_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Perform alias expansion on the current line (see <a href="#Aliases">Aliases</a>).
+</p>
+</dd>
+<dt id='index-history_002dand_002dalias_002dexpand_002dline-_0028_0029'><span><code>history-and-alias-expand-line ()</code><a href='#index-history_002dand_002dalias_002dexpand_002dline-_0028_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>Perform history and alias expansion on the current line.
+</p>
+</dd>
+<dt id='index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029'><span><code>insert-last-argument (M-. or M-_)</code><a href='#index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029' class='copiable-anchor'> &para;</a></span></dt>
+<dd><p>A synonym for <code>yank-last-arg</code>.
+</p>
+</dd>
+<dt id='index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029'><span><code>edit-and-execute-command (C-x C-e)</code><a href='#index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029' class='copiable-anchor'> &para;</a></span></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>
+</div>
+</div>
+<div class="section" id="Readline-vi-Mode">
+<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>
+<span id="Readline-vi-Mode-1"></span><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>
+</div>
+<div class="section" id="Programmable-Completion">
+<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>
+<span id="Programmable-Completion-1"></span><h3 class="section">8.6 Programmable Completion</h3>
+<span id="index-programmable-completion"></span>
+
+<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">Letting Readline Type For You</a>) is performed.
+</p>
+<p>First, the actions specified by the compspec are used.
+Only matches which are prefixed by the word being completed are
+returned.
+When the <samp>-f</samp> or <samp>-d</samp> option is used for filename or
+directory name completion, the shell variable <code>FIGNORE</code> is
+used to filter the matches.
+See <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>
+</div>
+<div class="section" id="Programmable-Completion-Builtins">
+<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>
+<span id="Programmable-Completion-Builtins-1"></span><h3 class="section">8.7 Programmable Completion Builtins</h3>
+<span id="index-completion-builtins"></span>
+
+<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 id='index-compgen'><span><code>compgen</code><a href='#index-compgen' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 id='index-complete'><span><code>complete</code><a href='#index-complete' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 initial 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><span><code>-o <var>comp-option</var></code></span></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><span><code>bashdefault</code></span></dt>
+<dd><p>Perform the rest of the default Bash completions if the compspec
+generates no matches.
+</p>
+</dd>
+<dt><span><code>default</code></span></dt>
+<dd><p>Use Readline&rsquo;s default filename completion if the compspec generates
+no matches.
+</p>
+</dd>
+<dt><span><code>dirnames</code></span></dt>
+<dd><p>Perform directory name completion if the compspec generates no matches.
+</p>
+</dd>
+<dt><span><code>filenames</code></span></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><span><code>noquote</code></span></dt>
+<dd><p>Tell Readline not to quote the completed words if they are filenames
+(quoting filenames is the default).
+</p>
+</dd>
+<dt><span><code>nosort</code></span></dt>
+<dd><p>Tell Readline not to sort the list of possible completions alphabetically.
+</p>
+</dd>
+<dt><span><code>nospace</code></span></dt>
+<dd><p>Tell Readline not to append a space (the default) to words completed at
+the end of the line.
+</p>
+</dd>
+<dt><span><code>plusdirs</code></span></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><span><code>-A <var>action</var></code></span></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><span><code>alias</code></span></dt>
+<dd><p>Alias names. May also be specified as <samp>-a</samp>.
+</p>
+</dd>
+<dt><span><code>arrayvar</code></span></dt>
+<dd><p>Array variable names.
+</p>
+</dd>
+<dt><span><code>binding</code></span></dt>
+<dd><p>Readline key binding names (see <a href="#Bindable-Readline-Commands">Bindable Readline Commands</a>).
+</p>
+</dd>
+<dt><span><code>builtin</code></span></dt>
+<dd><p>Names of shell builtin commands. May also be specified as <samp>-b</samp>.
+</p>
+</dd>
+<dt><span><code>command</code></span></dt>
+<dd><p>Command names. May also be specified as <samp>-c</samp>.
+</p>
+</dd>
+<dt><span><code>directory</code></span></dt>
+<dd><p>Directory names. May also be specified as <samp>-d</samp>.
+</p>
+</dd>
+<dt><span><code>disabled</code></span></dt>
+<dd><p>Names of disabled shell builtins.
+</p>
+</dd>
+<dt><span><code>enabled</code></span></dt>
+<dd><p>Names of enabled shell builtins.
+</p>
+</dd>
+<dt><span><code>export</code></span></dt>
+<dd><p>Names of exported shell variables. May also be specified as <samp>-e</samp>.
+</p>
+</dd>
+<dt><span><code>file</code></span></dt>
+<dd><p>File names. May also be specified as <samp>-f</samp>.
+</p>
+</dd>
+<dt><span><code>function</code></span></dt>
+<dd><p>Names of shell functions.
+</p>
+</dd>
+<dt><span><code>group</code></span></dt>
+<dd><p>Group names. May also be specified as <samp>-g</samp>.
+</p>
+</dd>
+<dt><span><code>helptopic</code></span></dt>
+<dd><p>Help topics as accepted by the <code>help</code> builtin (see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
+</p>
+</dd>
+<dt><span><code>hostname</code></span></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><span><code>job</code></span></dt>
+<dd><p>Job names, if job control is active. May also be specified as <samp>-j</samp>.
+</p>
+</dd>
+<dt><span><code>keyword</code></span></dt>
+<dd><p>Shell reserved words. May also be specified as <samp>-k</samp>.
+</p>
+</dd>
+<dt><span><code>running</code></span></dt>
+<dd><p>Names of running jobs, if job control is active.
+</p>
+</dd>
+<dt><span><code>service</code></span></dt>
+<dd><p>Service names. May also be specified as <samp>-s</samp>.
+</p>
+</dd>
+<dt><span><code>setopt</code></span></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><span><code>shopt</code></span></dt>
+<dd><p>Shell option names as accepted by the <code>shopt</code> builtin
+(see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
+</p>
+</dd>
+<dt><span><code>signal</code></span></dt>
+<dd><p>Signal names.
+</p>
+</dd>
+<dt><span><code>stopped</code></span></dt>
+<dd><p>Names of stopped jobs, if job control is active.
+</p>
+</dd>
+<dt><span><code>user</code></span></dt>
+<dd><p>User names. May also be specified as <samp>-u</samp>.
+</p>
+</dd>
+<dt><span><code>variable</code></span></dt>
+<dd><p>Names of all shell variables. May also be specified as <samp>-v</samp>.
+</p></dd>
+</dl>
+
+</dd>
+<dt><span><code>-C <var>command</var></code></span></dt>
+<dd><p><var>command</var> is executed in a subshell environment, and its output is
+used as the possible completions.
+Arguments are passed as with the <samp>-F</samp> option.
+</p>
+</dd>
+<dt><span><code>-F <var>function</var></code></span></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><span><code>-G <var>globpat</var></code></span></dt>
+<dd><p>The filename expansion pattern <var>globpat</var> is expanded to generate
+the possible completions.
+</p>
+</dd>
+<dt><span><code>-P <var>prefix</var></code></span></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><span><code>-S <var>suffix</var></code></span></dt>
+<dd><p><var>suffix</var> is appended to each possible completion
+after all other options have been applied.
+</p>
+</dd>
+<dt><span><code>-W <var>wordlist</var></code></span></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><span><code>-X <var>filterpat</var></code></span></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 id='index-compopt'><span><code>compopt</code><a href='#index-compopt' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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 initial 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>
+</div>
+<div class="section" id="A-Programmable-Completion-Example">
+<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>
+<span id="A-Programmable-Completion-Example-1"></span><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 completions 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; or &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="https://github.com/scop/bash-completion/">https://github.com/scop/bash-completion/</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>
+<span id="index-History_002c-how-to-use"></span>
+
+<hr>
+</div>
+</div>
+<div class="chapter" id="Using-History-Interactively">
+<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">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>
+<span id="Using-History-Interactively-1"></span><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>
+
+<ul class="section-toc">
+<li><a href="#Bash-History-Facilities" accesskey="1">Bash History Facilities</a></li>
+<li><a href="#Bash-History-Builtins" accesskey="2">Bash History Builtins</a></li>
+<li><a href="#History-Interaction" accesskey="3">History Expansion</a></li>
+</ul>
+<hr>
+<div class="section" id="Bash-History-Facilities">
+<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>
+<span id="Bash-History-Facilities-1"></span><h3 class="section">9.1 Bash History Facilities</h3>
+<span id="index-command-history"></span>
+<span id="index-history-list"></span>
+
+<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 Builtin Commands</a>),
+the lines are appended to the history file,
+otherwise the history file is overwritten.
+If <code>HISTFILE</code>
+is unset, or if the history file is unwritable, the history is not saved.
+After saving the history, the history file is truncated
+to contain no more than <code>$HISTFILESIZE</code> lines.
+If <code>HISTFILESIZE</code> is 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 Manipulating The History</a>).
+</p>
+<p>The shell allows control over which commands are saved on the history
+list. The <code>HISTCONTROL</code> and <code>HISTIGNORE</code>
+variables may be set to cause the shell to save only a subset of the
+commands entered.
+The <code>cmdhist</code>
+shell option, if enabled, causes the shell to attempt to save each
+line of a multi-line command in the same history entry, adding
+semicolons where necessary to preserve syntactic correctness.
+The <code>lithist</code>
+shell option causes the shell to save the command with embedded newlines
+instead of semicolons.
+The <code>shopt</code> builtin is used to set these options.
+See <a href="#The-Shopt-Builtin">The Shopt Builtin</a>, for a description of <code>shopt</code>.
+</p>
+<hr>
+</div>
+<div class="section" id="Bash-History-Builtins">
+<div class="header">
+<p>
+Next: <a href="#History-Interaction" accesskey="n" rel="next">History Expansion</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>
+<span id="Bash-History-Builtins-1"></span><h3 class="section">9.2 Bash History Builtins</h3>
+<span id="index-history-builtins"></span>
+
+<p>Bash provides two builtin commands which manipulate the
+history list and history file.
+</p>
+<dl compact="compact">
+<dt id='index-fc'><span><code>fc</code><a href='#index-fc' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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).
+</p>
+<p>When listing, a <var>first</var> or <var>last</var> of 0 is equivalent to -1
+and -0 is equivalent to the current command (usually the <code>fc</code>
+command);
+otherwise 0 is equivalent to -1 and -0 is invalid.
+</p>
+<p>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 interpreted 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 id='index-history'><span><code>history</code><a href='#index-history' class='copiable-anchor'> &para;</a></span></dt>
+<dd><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><span><code>-c</code></span></dt>
+<dd><p>Clear the history list. This may be combined
+with the other options to replace the history list completely.
+</p>
+</dd>
+<dt><span><code>-d <var>offset</var></code></span></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><span><code>-d <var>start</var>-<var>end</var></code></span></dt>
+<dd><p>Delete the range of 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><span><code>-a</code></span></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><span><code>-n</code></span></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><span><code>-r</code></span></dt>
+<dd><p>Read the history file and append its contents to
+the history list.
+</p>
+</dd>
+<dt><span><code>-w</code></span></dt>
+<dd><p>Write out the current history list to the history file.
+</p>
+</dd>
+<dt><span><code>-p</code></span></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><span><code>-s</code></span></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>If a <var>filename</var> argument is supplied
+when any of the <samp>-w</samp>, <samp>-r</samp>, <samp>-a</samp>, or <samp>-n</samp> options
+is used, Bash uses <var>filename</var> as the history file.
+If not, then the value of the <code>HISTFILE</code> variable is used.
+</p>
+<p>The return value is 0 unless an invalid option is encountered, an
+error occurs while reading or writing the history file, an invalid
+<var>offset</var> or range is supplied as an argument to <samp>-d</samp>, or the
+history expansion supplied as an argument to <samp>-p</samp> fails.
+</p>
+</dd>
+</dl>
+
+<hr>
+</div>
+<div class="section" id="History-Interaction">
+<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>
+<span id="History-Expansion"></span><h3 class="section">9.3 History Expansion</h3>
+<span id="index-history-expansion"></span>
+
+<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>
+
+<ul class="section-toc">
+<li><a href="#Event-Designators" accesskey="1">Event Designators</a></li>
+<li><a href="#Word-Designators" accesskey="2">Word Designators</a></li>
+<li><a href="#Modifiers" accesskey="3">Modifiers</a></li>
+</ul>
+<hr>
+<div class="subsection" id="Event-Designators">
+<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 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>
+<span id="Event-Designators-1"></span><h4 class="subsection">9.3.1 Event Designators</h4>
+<span id="index-event-designators"></span>
+
+<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.
+<span id="index-history-events"></span>
+</p>
+<dl compact="compact">
+<dt><span><code>!</code></span></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><span><code>!<var>n</var></code></span></dt>
+<dd><p>Refer to command line <var>n</var>.
+</p>
+</dd>
+<dt><span><code>!-<var>n</var></code></span></dt>
+<dd><p>Refer to the command <var>n</var> lines back.
+</p>
+</dd>
+<dt><span><code>!!</code></span></dt>
+<dd><p>Refer to the previous command. This is a synonym for &lsquo;<samp>!-1</samp>&rsquo;.
+</p>
+</dd>
+<dt><span><code>!<var>string</var></code></span></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><span><code>!?<var>string</var>[?]</code></span></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.
+If <var>string</var> is missing, the string from the most recent search is used;
+it is an error if there is no previous search string.
+</p>
+</dd>
+<dt><span><code>^<var>string1</var>^<var>string2</var>^</code></span></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><span><code>!#</code></span></dt>
+<dd><p>The entire command line typed so far.
+</p>
+</dd>
+</dl>
+
+<hr>
+</div>
+<div class="subsection" id="Word-Designators">
+<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 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>
+<span id="Word-Designators-1"></span><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><span><code>!!</code></span></dt>
+<dd><p>designates the preceding command. When you type this, the preceding
+command is repeated in toto.
+</p>
+</dd>
+<dt><span><code>!!:$</code></span></dt>
+<dd><p>designates the last argument of the preceding command. This may be
+shortened to <code>!$</code>.
+</p>
+</dd>
+<dt><span><code>!fi:2</code></span></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><span><code>0 (zero)</code></span></dt>
+<dd><p>The <code>0</code>th word. For many applications, this is the command word.
+</p>
+</dd>
+<dt><span><code><var>n</var></code></span></dt>
+<dd><p>The <var>n</var>th word.
+</p>
+</dd>
+<dt><span><code>^</code></span></dt>
+<dd><p>The first argument; that is, word 1.
+</p>
+</dd>
+<dt><span><code>$</code></span></dt>
+<dd><p>The last argument.
+</p>
+</dd>
+<dt><span><code>%</code></span></dt>
+<dd><p>The first word matched by the most recent &lsquo;<samp>?<var>string</var>?</samp>&rsquo; search,
+if the search string begins with a character that is part of a word.
+</p>
+</dd>
+<dt><span><code><var>x</var>-<var>y</var></code></span></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><span><code>*</code></span></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><span><code><var>x</var>*</code></span></dt>
+<dd><p>Abbreviates &lsquo;<samp><var>x</var>-$</samp>&rsquo;
+</p>
+</dd>
+<dt><span><code><var>x</var>-</code></span></dt>
+<dd><p>Abbreviates &lsquo;<samp><var>x</var>-$</samp>&rsquo; like &lsquo;<samp><var>x</var>*</samp>&rsquo;, but omits the last word.
+If &lsquo;<samp>x</samp>&rsquo; is missing, it defaults to 0.
+</p>
+</dd>
+</dl>
+
+<p>If a word designator is supplied without an event specification, the
+previous command is used as the event.
+</p>
+<hr>
+</div>
+<div class="subsection" id="Modifiers">
+<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 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>
+<span id="Modifiers-1"></span><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;.
+These modify, or edit, the word or words selected from the history event.
+</p>
+<dl compact="compact">
+<dt><span><code>h</code></span></dt>
+<dd><p>Remove a trailing pathname component, leaving only the head.
+</p>
+</dd>
+<dt><span><code>t</code></span></dt>
+<dd><p>Remove all leading pathname components, leaving the tail.
+</p>
+</dd>
+<dt><span><code>r</code></span></dt>
+<dd><p>Remove a trailing suffix of the form &lsquo;<samp>.<var>suffix</var></samp>&rsquo;, leaving
+the basename.
+</p>
+</dd>
+<dt><span><code>e</code></span></dt>
+<dd><p>Remove all but the trailing suffix.
+</p>
+</dd>
+<dt><span><code>p</code></span></dt>
+<dd><p>Print the new command but do not execute it.
+</p>
+</dd>
+<dt><span><code>q</code></span></dt>
+<dd><p>Quote the substituted words, escaping further substitutions.
+</p>
+</dd>
+<dt><span><code>x</code></span></dt>
+<dd><p>Quote the substituted words as with &lsquo;<samp>q</samp>&rsquo;,
+but break into words at spaces, tabs, and newlines.
+The &lsquo;<samp>q</samp>&rsquo; and &lsquo;<samp>x</samp>&rsquo; modifiers are mutually exclusive; the last one
+supplied is used.
+</p>
+</dd>
+<dt><span><code>s/<var>old</var>/<var>new</var>/</code></span></dt>
+<dd><p>Substitute <var>new</var> for the first occurrence of <var>old</var> in the
+event line.
+Any character may be used as the delimiter 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;.
+If <var>old</var> is null, it is set to the last <var>old</var>
+substituted, or, if no previous history substitutions took place,
+the last <var>string</var>
+in a !?<var>string</var><code>[?]</code>
+search.
+If <var>new</var> is null, each matching <var>old</var> is deleted.
+The final delimiter is optional if it is the last
+character on the input line.
+</p>
+</dd>
+<dt><span><code>&amp;</code></span></dt>
+<dd><p>Repeat the previous substitution.
+</p>
+</dd>
+<dt><span><code>g</code></span></dt>
+<dt><span><code>a</code></span></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><span><code>G</code></span></dt>
+<dd><p>Apply the following &lsquo;<samp>s</samp>&rsquo; or &lsquo;<samp>&amp;</samp>&rsquo; modifier once to each word
+in the event.
+</p>
+</dd>
+</dl>
+
+<hr>
+</div>
+</div>
+</div>
+<div class="chapter" id="Installing-Bash">
+<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">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>
+<span id="Installing-Bash-1"></span><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>
+
+<ul class="section-toc">
+<li><a href="#Basic-Installation" accesskey="1">Basic Installation</a></li>
+<li><a href="#Compilers-and-Options" accesskey="2">Compilers and Options</a></li>
+<li><a href="#Compiling-For-Multiple-Architectures" accesskey="3">Compiling For Multiple Architectures</a></li>
+<li><a href="#Installation-Names" accesskey="4">Installation Names</a></li>
+<li><a href="#Specifying-the-System-Type" accesskey="5">Specifying the System Type</a></li>
+<li><a href="#Sharing-Defaults" accesskey="6">Sharing Defaults</a></li>
+<li><a href="#Operation-Controls" accesskey="7">Operation Controls</a></li>
+<li><a href="#Optional-Features" accesskey="8">Optional Features</a></li>
+</ul>
+<hr>
+<div class="section" id="Basic-Installation">
+<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>
+<span id="Basic-Installation-1"></span><h3 class="section">10.1 Basic Installation</h3>
+<span id="index-installation"></span>
+<span id="index-configuration"></span>
+<span id="index-Bash-installation"></span>
+<span id="index-Bash-configuration"></span>
+
+<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, message translation
+files, some supplemental documentation, a number of example loadable
+builtin commands, and a set of header files for developing loadable
+builtins.
+You may need additional privileges to install <code>bash</code> to your
+desired destination, so &lsquo;<samp>sudo make install</samp>&rsquo; might be required.
+More information about controlling the locations where <code>bash</code> and
+other files are installed is below (see <a href="#Installation-Names">Installation Names</a>).
+
+</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>, <samp>po</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.69 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>
+</div>
+<div class="section" id="Compilers-and-Options">
+<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>
+<span id="Compilers-and-Options-1"></span><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>
+</div>
+<div class="section" id="Compiling-For-Multiple-Architectures">
+<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>
+<span id="Compiling-For-Multiple-Architectures-1"></span><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 support 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>
+</div>
+<div class="section" id="Installation-Names">
+<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>
+<span id="Installation-Names-1"></span><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.;
+that is, the <em>installation prefix</em> defaults to <samp>/usr/local</samp>.
+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>prefix</code> &lsquo;<samp>make</samp>&rsquo;
+variable when running &lsquo;<samp>make install</samp>&rsquo;
+(e.g., &lsquo;<samp>make install prefix=<var>PATH</var></samp>&rsquo;).
+The <code>prefix</code> variable provides a default for <code>exec_prefix</code> and
+other variables used when installing bash.
+</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>
+<p>If you would like to change the installation locations for a single run,
+you can specify these variables as arguments to <code>make</code>:
+&lsquo;<samp>make install exec_prefix=/</samp>&rsquo; will install <code>bash</code> and
+<code>bashbug</code> into <samp>/bin</samp> instead of the default <samp>/usr/local/bin</samp>.
+</p>
+<p>If you want to see the files bash will install and where it will install
+them without changing anything on your system, specify the variable
+<code>DESTDIR</code> as an argument to <code>make</code>. Its value should be the
+absolute directory path you&rsquo;d like to use as the root of your sample
+installation tree. For example,
+</p>
+<div class="example">
+<pre class="example">mkdir /fs1/bash-install
+make install DESTDIR=/fs1/bash-install
+</pre></div>
+
+<p>will install <code>bash</code> into <samp>/fs1/bash-install/usr/local/bin/bash</samp>,
+the documentation into directories within
+<samp>/fs1/bash-install/usr/local/share</samp>, the example loadable builtins into
+<samp>/fs1/bash-install/usr/local/lib/bash</samp>, and so on.
+You can use the usual <code>exec_prefix</code> and <code>prefix</code> variables to alter
+the directory paths beneath the value of <code>DESTDIR</code>.
+</p>
+<p>The GNU Makefile standards provide a more complete description of these
+variables and their effects.
+</p>
+<hr>
+</div>
+<div class="section" id="Specifying-the-System-Type">
+<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>
+<span id="Specifying-the-System-Type-1"></span><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 needs 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>
+</div>
+<div class="section" id="Sharing-Defaults">
+<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>
+<span id="Sharing-Defaults-1"></span><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>
+</div>
+<div class="section" id="Operation-Controls">
+<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>
+<span id="Operation-Controls-1"></span><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><span><code>--cache-file=<var>file</var></code></span></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><span><code>--help</code></span></dt>
+<dd><p>Print a summary of the options to <code>configure</code>, and exit.
+</p>
+</dd>
+<dt><span><code>--quiet</code></span></dt>
+<dt><span><code>--silent</code></span></dt>
+<dt><span><code>-q</code></span></dt>
+<dd><p>Do not print messages saying which checks are being made.
+</p>
+</dd>
+<dt><span><code>--srcdir=<var>dir</var></code></span></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><span><code>--version</code></span></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>
+</div>
+<div class="section" id="Optional-Features">
+<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>
+<span id="Optional-Features-1"></span><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><span><code>--with-afs</code></span></dt>
+<dd><p>Define if you are using the Andrew File System from Transarc.
+</p>
+</dd>
+<dt><span><code>--with-bash-malloc</code></span></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><span><code>--with-curses</code></span></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><span><code>--with-gnu-malloc</code></span></dt>
+<dd><p>A synonym for <code>--with-bash-malloc</code>.
+</p>
+</dd>
+<dt><span><code>--with-installed-readline[=<var>PREFIX</var>]</code></span></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><span><code>--with-libintl-prefix[=<var>PREFIX</var>]</code></span></dt>
+<dd><p>Define this to make Bash link with a locally-installed version of the
+libintl library instead of the version in <samp>lib/intl</samp>.
+</p>
+</dd>
+<dt><span><code>--with-libiconv-prefix[=<var>PREFIX</var>]</code></span></dt>
+<dd><p>Define this to make Bash look for libiconv in <var>PREFIX</var> instead of the
+standard system locations. There is no version included with Bash.
+</p>
+</dd>
+<dt><span><code>--enable-minimal-config</code></span></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, linked, and installed, rather than changing run-time features.
+</p>
+<dl compact="compact">
+<dt><span><code>--enable-largefile</code></span></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><span><code>--enable-profiling</code></span></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><span><code>--enable-separate-helpfiles</code></span></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><span><code>--enable-static-link</code></span></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>alt-array-implementation</samp>&rsquo;,
+&lsquo;<samp>disabled-builtins</samp>&rsquo;,
+&lsquo;<samp>direxpand-default</samp>&rsquo;,
+&lsquo;<samp>strict-posix-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><span><code>--enable-alias</code></span></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><span><code>--enable-alt-array-implementation</code></span></dt>
+<dd><p>This builds bash using an alternate implementation of arrays
+(see <a href="#Arrays">Arrays</a>) that provides faster access at the expense of using
+more memory (sometimes many times more, depending on how sparse an array is).
+</p>
+</dd>
+<dt><span><code>--enable-arith-for-command</code></span></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><span><code>--enable-array-variables</code></span></dt>
+<dd><p>Include support for one-dimensional array shell variables
+(see <a href="#Arrays">Arrays</a>).
+</p>
+</dd>
+<dt><span><code>--enable-bang-history</code></span></dt>
+<dd><p>Include support for <code>csh</code>-like history substitution
+(see <a href="#History-Interaction">History Expansion</a>).
+</p>
+</dd>
+<dt><span><code>--enable-brace-expansion</code></span></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><span><code>--enable-casemod-attributes</code></span></dt>
+<dd><p>Include support for case-modifying attributes in the <code>declare</code> builtin
+and assignment statements. Variables with the <code>uppercase</code> attribute,
+for example, will have their values converted to uppercase upon assignment.
+</p>
+</dd>
+<dt><span><code>--enable-casemod-expansion</code></span></dt>
+<dd><p>Include support for case-modifying word expansions.
+</p>
+</dd>
+<dt><span><code>--enable-command-timing</code></span></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><span><code>--enable-cond-command</code></span></dt>
+<dd><p>Include support for the <code>[[</code> conditional command.
+(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
+</p>
+</dd>
+<dt><span><code>--enable-cond-regexp</code></span></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><span><code>--enable-coprocesses</code></span></dt>
+<dd><p>Include support for coprocesses and the <code>coproc</code> reserved word
+(see <a href="#Pipelines">Pipelines</a>).
+</p>
+</dd>
+<dt><span><code>--enable-debugger</code></span></dt>
+<dd><p>Include support for the bash debugger (distributed separately).
+</p>
+</dd>
+<dt><span><code>--enable-dev-fd-stat-broken</code></span></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><span><code>--enable-direxpand-default</code></span></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><span><code>--enable-directory-stack</code></span></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><span><code>--enable-disabled-builtins</code></span></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 Builtin Commands</a>, for details of the <code>builtin</code> and
+<code>enable</code> builtin commands.
+</p>
+</dd>
+<dt><span><code>--enable-dparen-arithmetic</code></span></dt>
+<dd><p>Include support for the <code>((&hellip;))</code> command
+(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
+</p>
+</dd>
+<dt><span><code>--enable-extended-glob</code></span></dt>
+<dd><p>Include support for the extended pattern matching features described
+above under <a href="#Pattern-Matching">Pattern Matching</a>.
+</p>
+</dd>
+<dt><span><code>--enable-extended-glob-default</code></span></dt>
+<dd><p>Set the default value of the <code>extglob</code> shell option described
+above under <a href="#The-Shopt-Builtin">The Shopt Builtin</a> to be enabled.
+</p>
+</dd>
+<dt><span><code>--enable-function-import</code></span></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><span><code>--enable-glob-asciirange-default</code></span></dt>
+<dd><p>Set the default value of the <code>globasciiranges</code> 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><span><code>--enable-help-builtin</code></span></dt>
+<dd><p>Include the <code>help</code> builtin, which displays help on shell builtins and
+variables (see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
+</p>
+</dd>
+<dt><span><code>--enable-history</code></span></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><span><code>--enable-job-control</code></span></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><span><code>--enable-multibyte</code></span></dt>
+<dd><p>This enables support for multibyte characters if the operating
+system provides the necessary support.
+</p>
+</dd>
+<dt><span><code>--enable-net-redirections</code></span></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><span><code>--enable-process-substitution</code></span></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><span><code>--enable-progcomp</code></span></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><span><code>--enable-prompt-string-decoding</code></span></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><span><code>--enable-readline</code></span></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><span><code>--enable-restricted</code></span></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><span><code>--enable-select</code></span></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><span><code>--enable-single-help-strings</code></span></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><span><code>--enable-strict-posix-default</code></span></dt>
+<dd><p>Make Bash <small>POSIX</small>-conformant by default (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
+</p>
+</dd>
+<dt><span><code>--enable-translatable-strings</code></span></dt>
+<dd><p>Enable support for <code>$&quot;<var>string</var>&quot;</code> translatable strings
+(see <a href="#Locale-Translation">Locale-Specific Translation</a>).
+</p>
+</dd>
+<dt><span><code>--enable-usg-echo-default</code></span></dt>
+<dd><p>A synonym for <code>--enable-xpg-echo-default</code>.
+</p>
+</dd>
+<dt><span><code>--enable-xpg-echo-default</code></span></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 Builtin Commands</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>
+</div>
+</div>
+<div class="appendix" id="Reporting-Bugs">
+<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">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>
+<span id="Reporting-Bugs-1"></span><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> and from
+<a href="http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz">http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz</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>
+</div>
+<div class="appendix" id="Major-Differences-From-The-Bourne-Shell">
+<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">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>
+<span id="Major-Differences-From-The-Bourne-Shell-1"></span><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 Expansion</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-Specific 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>var</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 <var>var</var>, 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 indirect 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 character classes, equivalence classes, and
+collating symbols (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 Builtin Commands</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 Builtin Commands</a>).
+
+</li><li> The <code>command</code> builtin allows selective disabling of functions
+when command lookup is performed (see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
+
+</li><li> Individual builtins may be enabled or disabled using the <code>enable</code>
+builtin (see <a href="#Bash-Builtins">Bash Builtin Commands</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 Builtin Commands</a>).
+
+</li><li> The <code>printf</code> builtin is available to display formatted output
+(see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
+
+</li><li> The Bash <code>read</code> builtin (see <a href="#Bash-Builtins">Bash Builtin Commands</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 a <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 Builtin Commands</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>
+
+<ul class="section-toc">
+<li><a href="#Implementation-Differences-From-The-SVR4_002e2-Shell" accesskey="1">Implementation Differences From The SVR4.2 Shell</a></li>
+</ul>
+<div class="appendixsec" id="Implementation-Differences-From-The-SVR4_002e2-Shell">
+<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>
+</div>
+</div>
+<div class="appendix" id="GNU-Free-Documentation-License">
+<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">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>
+<span id="GNU-Free-Documentation-License-1"></span><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>
+
+<span id="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></span><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="example">
+<pre class="example"> 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="example">
+<pre class="example"> 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>
+</div>
+<div class="appendix" id="Indexes">
+<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">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>
+<span id="Indexes-1"></span><h2 class="appendix">Appendix D Indexes</h2>
+
+
+<ul class="section-toc">
+<li><a href="#Builtin-Index" accesskey="1">Index of Shell Builtin Commands</a></li>
+<li><a href="#Reserved-Word-Index" accesskey="2">Index of Shell Reserved Words</a></li>
+<li><a href="#Variable-Index" accesskey="3">Parameter and Variable Index</a></li>
+<li><a href="#Function-Index" accesskey="4">Function Index</a></li>
+<li><a href="#Concept-Index" accesskey="5">Concept Index</a></li>
+</ul>
+<hr>
+<div class="appendixsec" id="Builtin-Index">
+<div class="header">
+<p>
+Next: <a href="#Reserved-Word-Index" accesskey="n" rel="next">Index of Shell Reserved Words</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>
+<span id="Index-of-Shell-Builtin-Commands"></span><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 id="Builtin-Index_bt_symbol-1">.</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 id="Builtin-Index_bt_symbol-2">:</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 id="Builtin-Index_bt_symbol-3">[</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 id="Builtin-Index_bt_letter-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 id="Builtin-Index_bt_letter-B">B</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 id="Builtin-Index_bt_letter-C">C</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 id="Builtin-Index_bt_letter-D">D</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 id="Builtin-Index_bt_letter-E">E</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 id="Builtin-Index_bt_letter-F">F</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 id="Builtin-Index_bt_letter-G">G</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 id="Builtin-Index_bt_letter-H">H</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 id="Builtin-Index_bt_letter-J">J</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 id="Builtin-Index_bt_letter-K">K</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 id="Builtin-Index_bt_letter-L">L</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 id="Builtin-Index_bt_letter-M">M</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 id="Builtin-Index_bt_letter-P">P</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 id="Builtin-Index_bt_letter-R">R</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 id="Builtin-Index_bt_letter-S">S</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 id="Builtin-Index_bt_letter-T">T</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 id="Builtin-Index_bt_letter-U">U</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 id="Builtin-Index_bt_letter-W">W</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>
+</div>
+<div class="appendixsec" id="Reserved-Word-Index">
+<div class="header">
+<p>
+Next: <a href="#Variable-Index" accesskey="n" rel="next">Parameter and Variable Index</a>, Previous: <a href="#Builtin-Index" accesskey="p" rel="prev">Index of Shell Builtin Commands</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>
+<span id="Index-of-Shell-Reserved-Words"></span><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 id="Reserved-Word-Index_rw_symbol-1">!</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 id="Reserved-Word-Index_rw_symbol-2">[</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 id="Reserved-Word-Index_rw_symbol-3">]</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 id="Reserved-Word-Index_rw_symbol-4">{</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 id="Reserved-Word-Index_rw_symbol-5">}</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 id="Reserved-Word-Index_rw_letter-C">C</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 id="Reserved-Word-Index_rw_letter-D">D</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 id="Reserved-Word-Index_rw_letter-E">E</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 id="Reserved-Word-Index_rw_letter-F">F</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 id="Reserved-Word-Index_rw_letter-I">I</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 id="Reserved-Word-Index_rw_letter-S">S</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 id="Reserved-Word-Index_rw_letter-T">T</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 id="Reserved-Word-Index_rw_letter-U">U</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 id="Reserved-Word-Index_rw_letter-W">W</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>
+</div>
+<div class="appendixsec" id="Variable-Index">
+<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">Index of Shell Reserved Words</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>
+<span id="Parameter-and-Variable-Index"></span><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 id="Variable-Index_vr_symbol-1">!</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 id="Variable-Index_vr_symbol-2">#</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 id="Variable-Index_vr_symbol-3">$</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="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th id="Variable-Index_vr_symbol-4">*</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 id="Variable-Index_vr_symbol-5">-</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 id="Variable-Index_vr_symbol-6">0</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 id="Variable-Index_vr_symbol-7">?</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 id="Variable-Index_vr_symbol-8">@</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 id="Variable-Index_vr_symbol-9">_</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="#Bash-Variables">Bash Variables</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th id="Variable-Index_vr_letter-A">A</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-active_002dregion_002dend_002dcolor"><code>active-region-end-color</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-active_002dregion_002dstart_002dcolor"><code>active-region-start-color</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-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 id="Variable-Index_vr_letter-B">B</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 id="Variable-Index_vr_letter-C">C</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 id="Variable-Index_vr_letter-D">D</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 id="Variable-Index_vr_letter-E">E</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_002dactive_002dregion"><code>enable-active-region</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 id="Variable-Index_vr_letter-F">F</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 id="Variable-Index_vr_letter-G">G</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 id="Variable-Index_vr_letter-H">H</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 id="Variable-Index_vr_letter-I">I</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 id="Variable-Index_vr_letter-K">K</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 id="Variable-Index_vr_letter-L">L</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="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-LANG-1"><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="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</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 id="Variable-Index_vr_letter-M">M</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 id="Variable-Index_vr_letter-O">O</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 id="Variable-Index_vr_letter-P">P</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 id="Variable-Index_vr_letter-R">R</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_005fARGUMENT"><code>READLINE_ARGUMENT</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_005fMARK"><code>READLINE_MARK</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 id="Variable-Index_vr_letter-S">S</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></td><td valign="top"><a href="#index-SRANDOM"><code>SRANDOM</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 id="Variable-Index_vr_letter-T">T</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="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</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="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</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 id="Variable-Index_vr_letter-U">U</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 id="Variable-Index_vr_letter-V">V</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>
+</div>
+<div class="appendixsec" id="Function-Index">
+<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">Parameter and 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>
+<span id="Function-Index-1"></span><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 id="Function-Index_fn_letter-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 id="Function-Index_fn_letter-B">B</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 id="Function-Index_fn_letter-C">C</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_002ddisplay-_0028M_002dC_002dl_0029"><code>clear-display (M-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-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 id="Function-Index_fn_letter-D">D</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 id="Function-Index_fn_letter-E">E</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 id="Function-Index_fn_letter-F">F</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-fetch_002dhistory-_0028_0029"><code>fetch-history ()</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_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 id="Function-Index_fn_letter-G">G</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 id="Function-Index_fn_letter-H">H</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 id="Function-Index_fn_letter-I">I</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 id="Function-Index_fn_letter-K">K</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 id="Function-Index_fn_letter-M">M</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 id="Function-Index_fn_letter-N">N</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 id="Function-Index_fn_letter-O">O</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="#Commands-For-History">Commands For History</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 id="Function-Index_fn_letter-P">P</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 id="Function-Index_fn_letter-Q">Q</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 id="Function-Index_fn_letter-R">R</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 id="Function-Index_fn_letter-S">S</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-_0028M_002dC_002db_0029"><code>shell-backward-word (M-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-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-_0028M_002dC_002df_0029"><code>shell-forward-word (M-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-shell_002dkill_002dword-_0028M_002dC_002dd_0029"><code>shell-kill-word (M-C-d)</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_002dtranspose_002dwords-_0028M_002dC_002dt_0029"><code>shell-transpose-words (M-C-t)</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-spell_002dcorrect_002dword-_0028C_002dx-s_0029"><code>spell-correct-word (C-x s)</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 id="Function-Index_fn_letter-T">T</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 id="Function-Index_fn_letter-U">U</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 id="Function-Index_fn_letter-Y">Y</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>
+</div>
+<div class="appendixsec" id="Concept-Index">
+<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>
+<span id="Concept-Index-1"></span><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 id="Concept-Index_cp_letter-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 id="Concept-Index_cp_letter-B">B</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 id="Concept-Index_cp_letter-C">C</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-Compatibility-Level">Compatibility Level</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Compatibility-Mode">Compatibility Mode</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</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 id="Concept-Index_cp_letter-D">D</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 id="Concept-Index_cp_letter-E">E</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 id="Concept-Index_cp_letter-F">F</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 id="Concept-Index_cp_letter-H">H</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 id="Concept-Index_cp_letter-I">I</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></td><td valign="top"><a href="#index-internationalized-scripts">internationalized scripts</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th id="Concept-Index_cp_letter-J">J</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 id="Concept-Index_cp_letter-K">K</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 id="Concept-Index_cp_letter-L">L</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 id="Concept-Index_cp_letter-M">M</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 id="Concept-Index_cp_letter-N">N</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 id="Concept-Index_cp_letter-O">O</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 id="Concept-Index_cp_letter-P">P</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 id="Concept-Index_cp_letter-Q">Q</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 id="Concept-Index_cp_letter-R">R</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-reserved-words">reserved words</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Reserved-Words">Reserved Words</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 id="Concept-Index_cp_letter-S">S</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-string-translations">string translations</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Creating-Internationalized-Scripts">Creating Internationalized Scripts</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 id="Concept-Index_cp_letter-T">T</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 id="Concept-Index_cp_letter-V">V</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 id="Concept-Index_cp_letter-W">W</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 id="Concept-Index_cp_letter-Y">Y</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>
+
+</div>
+</div>
+</div>
+
+
+
+</body>
+</html>
diff --git a/doc/bashref.info b/doc/bashref.info
new file mode 100644
index 0000000..25372f9
--- /dev/null
+++ b/doc/bashref.info
@@ -0,0 +1,12676 @@
+This is bashref.info, produced by makeinfo version 6.8 from
+bashref.texi.
+
+This text is a brief description of the features that are present in the
+Bash shell (version 5.2, 19 September 2022).
+
+ This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.2.
+
+ Copyright (C) 1988-2022 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.2, 19 September 2022). The Bash home page is
+<http://www.gnu.org/software/bash/>.
+
+ This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.2.
+
+ 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
+......................
+
+Character sequences of the form $'STRING' are treated as a special kind
+of single quotes. The sequence expands to STRING, with
+backslash-escaped characters in STRING 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
+...................................
+
+* Menu:
+
+* Creating Internationalized Scripts:: How to use translations and different
+ languages in your scripts.
+
+Prefixing a double-quoted string with a dollar sign ('$'), such as
+$"hello, world", will cause the string to be translated according to the
+current locale. The 'gettext' infrastructure performs the lookup and
+translation, using the 'LC_MESSAGES', 'TEXTDOMAINDIR', and 'TEXTDOMAIN'
+shell variables, as explained below. See the gettext documentation for
+additional details not covered here. If the current locale is 'C' or
+'POSIX', if there are no translations available, of if the string is not
+translated, the dollar sign is ignored. Since this is a form of double
+quoting, the string remains double-quoted by default, whether or not it
+is translated and replaced. If the 'noexpand_translation' option is
+enabled using the 'shopt' builtin (*note The Shopt Builtin::),
+translated strings are single-quoted instead of double-quoted.
+
+ The rest of this section is a brief overview of how you use gettext
+to create translations for strings in a shell script named SCRIPTNAME.
+There are more details in the gettext documentation.
+
+
+File: bashref.info, Node: Creating Internationalized Scripts, Up: Locale Translation
+
+Once you've marked the strings in your script that you want to translate
+using $"...", you create a gettext "template" file using the command
+
+ bash --dump-po-strings SCRIPTNAME > DOMAIN.pot
+
+The DOMAIN is your "message domain". It's just an arbitrary string
+that's used to identify the files gettext needs, like a package or
+script name. It needs to be unique among all the message domains on
+systems where you install the translations, so gettext knows which
+translations correspond to your script. You'll use the template file to
+create translations for each target language. The template file
+conventionally has the suffix '.pot'.
+
+ You copy this template file to a separate file for each target
+language you want to support (called "PO" files, which use the suffix
+'.po'). PO files use various naming conventions, but when you are
+working to translate a template file into a particular language, you
+first copy the template file to a file whose name is the language you
+want to target, with the '.po' suffix. For instance, the Spanish
+translations of your strings would be in a file named 'es.po', and to
+get started using a message domain named "example," you would run
+
+ cp example.pot es.po
+
+Ultimately, PO files are often named DOMAIN.po and installed in
+directories that contain multiple translation files for a particular
+language.
+
+ Whichever naming convention you choose, you will need to translate
+the strings in the PO files into the appropriate languages. This has to
+be done manually.
+
+ When you have the translations and PO files complete, you'll use the
+gettext tools to produce what are called "MO" files, which are compiled
+versions of the PO files the gettext tools use to look up translations
+efficiently. MO files are also called "message catalog" files. You use
+the 'msgfmt' program to do this. For instance, if you had a file with
+Spanish translations, you could run
+
+ msgfmt -o es.mo es.po
+
+to produce the corresponding MO file.
+
+ Once you have the MO files, you decide where to install them and use
+the 'TEXTDOMAINDIR' shell variable to tell the gettext tools where they
+are. Make sure to use the same message domain to name the MO files as
+you did for the PO files when you install them.
+
+ Your users will use the 'LANG' or 'LC_MESSAGES' shell variables to
+select the desired language.
+
+ You set the 'TEXTDOMAIN' variable to the script's message domain. As
+above, you use the message domain to name your translation files.
+
+ You, or possibly your users, set the 'TEXTDOMAINDIR' variable to the
+name of a directory where the message catalog files are stored. If you
+install the message files into the system's standard message catalog
+directory, you don't need to worry about this variable.
+
+ The directory where the message catalog files are stored varies
+between systems. Some 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 the '.mo' suffix. If you use the 'TEXTDOMAIN' variable, you may
+need to set the 'TEXTDOMAINDIR' variable to the location of the message
+catalog files, as above. It's common to use both variables in this
+fashion: '$TEXTDOMAINDIR'/'$LC_MESSAGES'/LC_MESSAGES/'$TEXTDOMAIN'.mo.
+
+ If you used that last convention, and you wanted to store the message
+catalog files with Spanish (es) and Esperanto (eo) translations into a
+local directory you use for custom translation files, you could run
+
+ TEXTDOMAIN=example
+ TEXTDOMAINDIR=/usr/local/share/locale
+
+ cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo
+ cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo
+
+ When all of this is done, and the message catalog files containing
+the compiled translations are installed in the correct location, your
+users will be able to see translated strings in any of the supported
+languages by setting the 'LANG' or 'LC_MESSAGES' environment variables
+before running your script.
+
+
+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:
+
+* Reserved Words:: Words that have special meaning to the shell.
+* 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: Reserved Words, Next: Simple Commands, Up: Shell Commands
+
+3.2.1 Reserved Words
+--------------------
+
+Reserved words are words that have special meaning to the shell. They
+are used to begin and end the shell's compound commands.
+
+ The following words are recognized as reserved when unquoted and the
+first word of a command (see below for exceptions):
+
+'if' 'then' 'elif' 'else' 'fi' 'time'
+'for' 'in' 'until' 'while' 'do' 'done'
+'case' 'esac' 'coproc''select''function'
+'{' '}' '[[' ']]' '!'
+
+'in' is recognized as a reserved word if it is the third word of a
+'case' or 'select' command. 'in' and 'do' are recognized as reserved
+words if they are the third word in a 'for' command.
+
+
+File: bashref.info, Node: Simple Commands, Next: Pipelines, Prev: Reserved Words, Up: Shell Commands
+
+3.2.2 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.3 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 COMMAND1.
+
+ 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 COMMAND1.
+
+ 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 multi-command pipeline, where pipes are created, 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 when job control is not
+active.
+
+ 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.4 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.5 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.5.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.5.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, arithmetic expansion, process substitution, and quote
+ removal.
+
+ 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, continuing the case
+ statement execution as if the pattern list had not matched.
+
+ 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, and 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. 'select' then displays the 'PS3' prompt and
+ reads a line 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 and returns 1. 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::). The EXPRESSION
+ undergoes the same expansions as if it were within double quotes,
+ but double quote characters in EXPRESSION are not treated specially
+ are removed. If the value of the expression is non-zero, the
+ return status is 0; otherwise the return status is 1.
+
+'[[...]]'
+ [[ 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::.
+ The words between the '[[' and ']]' do not undergo word splitting
+ and filename expansion. The shell performs tilde expansion,
+ parameter and variable expansion, arithmetic expansion, command
+ substitution, process substitution, and quote removal on those
+ words (the expansions that would occur if the words were enclosed
+ in double quotes). 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.
+
+ If you quote any part of the pattern, using any of the shell's
+ quoting mechanisms, the quoted portion is matched literally. This
+ means every character in the quoted portion matches itself, instead
+ of having any special pattern matching meaning.
+
+ An additional binary operator, '=~', is available, with the same
+ precedence as '==' and '!='. When you use '=~', the string to the
+ right of the operator is considered a POSIX extended regular
+ expression pattern and matched accordingly (using the POSIX
+ 'regcomp' and 'regexec' interfaces usually described in regex(3)).
+ The return value is 0 if the string matches the pattern, and 1 if
+ it does not. If the regular expression is syntactically incorrect,
+ the conditional expression returns 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.
+
+ You can quote any part of the pattern to force the quoted portion
+ to be matched literally instead of as a regular expression (see
+ above). If the pattern is stored in a shell variable, quoting the
+ variable expansion forces the entire pattern to be matched
+ literally.
+
+ The pattern will match if it matches any part of the string. If
+ you want to force the pattern to match the entire string, anchor
+ the pattern using the '^' and '$' regular expression operators.
+
+ For example, the following will match a line (stored in the shell
+ variable 'line') if there is a sequence of characters anywhere in
+ the value consisting of any number, including zero, of characters
+ in the 'space' character class, immediately followed by zero or one
+ instances of 'a', then a 'b':
+
+ [[ $line =~ [[:space:]]*(a)?b ]]
+
+ That means values for 'line' like 'aab', ' aaaaaab', 'xaby', and '
+ ab' will all match, as will a line containing a 'b' anywhere in its
+ value.
+
+ 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 '.'.
+
+ Likewise, if you want to include a character in your pattern that
+ has a special meaning to the regular expression grammar, you must
+ make sure it's not quoted. If you want to anchor a pattern at the
+ beginning or end of the string, for instance, you cannot quote the
+ '^' or '$' characters using any form of shell quoting.
+
+ If you want to match 'initial string' at the start of a line, the
+ following will work:
+ [[ $line =~ ^"initial string" ]]
+ but this will not:
+ [[ $line =~ "^initial string" ]]
+ because in the second example the '^' is quoted and doesn't have
+ its usual special meaning.
+
+ It is sometimes difficult to specify a regular expression properly
+ without using quotes, or to keep track of the quoting used by
+ regular expressions while paying attention to shell quoting and the
+ shell's quote removal. 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. For example, the
+ following is equivalent to the pattern used above:
+
+ pattern='[[:space:]]*(a)?b'
+ [[ $line =~ $pattern ]]
+
+ Shell programmers should take special care with backslashes, since
+ backslashes are used by both the shell and regular expressions to
+ remove the special meaning from the following character. This
+ means that after the shell's word expansions complete (*note Shell
+ Expansions::), any backslashes remaining in parts of the pattern
+ that were originally not quoted can remove the special meaning of
+ pattern characters. If any part of the pattern is quoted, the
+ shell does its best to ensure that the regular expression treats
+ those remaining backslashes as literal, if they appeared in a
+ quoted portion.
+
+ 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 pattern passed to
+ the regular expression parser is '\.'. The backslash removes the
+ special meaning from '.', so the literal '.' matches. In the
+ second two examples, the pattern passed to the regular expression
+ parser has the backslash quoted (e.g., '\\\.'), which will not
+ match the string, since it does not contain a backslash. 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.
+
+ Bracket expressions in regular expressions can be sources of errors
+ as well, since characters that are normally special in regular
+ expressions lose their special meanings between brackets. However,
+ you can use bracket expressions to match special pattern characters
+ without quoting them, so they are sometimes useful for this
+ purpose.
+
+ Though it might seem like a strange way to write it, the following
+ pattern will match a '.' in the string:
+
+ [[ . =~ [.] ]]
+
+ The shell performs any word expansions before passing the pattern
+ to the regular expression functions, so you can assume that the
+ shell's quoting takes precedence. As noted above, the regular
+ expression parser will interpret any unquoted backslashes remaining
+ in the pattern after shell expansion according to its own rules.
+ The intention is to avoid making shell programmers quote things
+ twice as much as possible, so shell quoting should be sufficient to
+ quote special pattern characters where that's necessary.
+
+ The array variable 'BASH_REMATCH' records which parts of the string
+ matched the pattern. The element of 'BASH_REMATCH' with index 0
+ contains the portion of the string matching the entire regular
+ expression. Substrings matched by parenthesized subexpressions
+ within the regular expression are saved in the remaining
+ 'BASH_REMATCH' indices. The element of 'BASH_REMATCH' with index N
+ is the portion of the string matching the Nth parenthesized
+ subexpression.
+
+ Bash sets 'BASH_REMATCH' in the global scope; declaring it as a
+ local variable will lead to unexpected results.
+
+ 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.5.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 forces the shell to
+ create a subshell (*note Command Execution Environment::), and each
+ of the commands in LIST is executed in that subshell environment.
+ 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.6 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 syntax for a coprocess is:
+
+ coproc [NAME] COMMAND [REDIRECTIONS]
+
+This creates a coprocess named NAME. COMMAND may be either a simple
+command (*note Simple Commands::) or a compound command (*note Compound
+Commands::). NAME is a shell variable name. If NAME is not supplied,
+the default name is 'COPROC'.
+
+ The recommended form to use for a coprocess is
+
+ coproc NAME { COMMAND; }
+
+This form is recommended because simple commands result in the coprocess
+always being named 'COPROC', and it is simpler to use and more complete
+than the other compound commands.
+
+ There are other forms of coprocesses:
+
+ coproc NAME COMPOUND-COMMAND
+ coproc COMPOUND-COMMAND
+ coproc SIMPLE-COMMAND
+
+If COMMAND is a compound command, NAME is optional. The word following
+'coproc' determines whether that word is interpreted as a variable name:
+it is interpreted as NAME if it is not a reserved word that introduces a
+compound command. If COMMAND is a simple command, NAME is not allowed;
+this is to avoid confusion between NAME and 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.7 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,
+which is available at
+<https://www.gnu.org/software/parallel/parallel_tutorial.html>.
+
+
+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:
+ FNAME () COMPOUND-COMMAND [ REDIRECTIONS ]
+
+ or
+
+ function FNAME [()] COMPOUND-COMMAND [ REDIRECTIONS ]
+
+ This defines a shell function named FNAME. 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. If the 'function' reserved word is used,
+but the parentheses are not supplied, the braces are recommended.
+COMPOUND-COMMAND is executed whenever FNAME is specified as the name of
+a simple command. When the shell is in POSIX mode (*note Bash POSIX
+Mode::), FNAME must be a valid shell name and may not be the same as one
+of the special builtins (*note Special Builtins::). In default mode, a
+function name can be any unquoted shell word that does not contain '$'.
+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 ("local variables"). Ordinarily, variables and their values are
+shared between a function and its caller. These variables are visible
+only to the function and the commands it invokes. This is particularly
+important when a shell function calls other functions.
+
+ In the following description, the "current scope" is a currently-
+executing function. Previous scopes consist of that function's caller
+and so on, back to the "global" scope, where the shell is not executing
+any shell function. Consequently, a local variable at the current local
+scope is a variable declared using the 'local' or 'declare' builtins in
+the function that is currently executing.
+
+ 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 (appearing as unset) 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 (see below how
+'localvar_unset'shell option changes this behavior).
+
+ 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 child shell
+processes (those created when executing a separate shell invocation)
+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 (*note
+Shell Parameter Expansion::). 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 and filename expansion are 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
+ filename 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.
+
+
+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 letters, 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
+letters 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 (integer or
+letter). 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.
+
+ $ v=123
+ $ echo ${v-unset}
+ 123
+
+'${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.
+
+ $ var=
+ $ : ${var:=DEFAULT}
+ $ echo $var
+ DEFAULT
+
+'${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.
+
+ $ var=
+ $ : ${var:?var is unset or null}
+ bash: var: var is unset or null
+
+'${PARAMETER:+WORD}'
+ If PARAMETER is null or unset, nothing is substituted, otherwise
+ the expansion of WORD is substituted.
+
+ $ var=123
+ $ echo ${var:+var is set and not null}
+ var is set and not null
+
+'${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 '@' or '*', 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 '@' or '*', 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, '$0' 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 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}'
+'${PARAMETER//PATTERN/STRING}'
+'${PARAMETER/#PATTERN/STRING}'
+'${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. STRING undergoes tilde
+ expansion, parameter and variable expansion, arithmetic expansion,
+ command and process substitution, and quote removal. The match is
+ performed according to the rules described below (*note Pattern
+ Matching::).
+
+ In the first form above, only the first match is replaced. If
+ there are two slashes separating PARAMETER and PATTERN (the second
+ form above), all matches of PATTERN are replaced with STRING. If
+ PATTERN is preceded by '#' (the third form above), it must match at
+ the beginning of the expanded value of PARAMETER. If PATTERN is
+ preceded by '%' (the fourth form above), it must match at the end
+ of the expanded value of PARAMETER. If the expansion of STRING is
+ null, matches of PATTERN are deleted. If STRING is null, matches
+ of PATTERN are deleted and the '/' following PATTERN may be
+ omitted.
+
+ If the 'patsub_replacement' shell option is enabled using 'shopt',
+ any unquoted instances of '&' in STRING are replaced with the
+ matching portion of PATTERN. This is intended to duplicate a
+ common 'sed' idiom.
+
+ Quoting any part of STRING inhibits replacement in the expansion of
+ the quoted portion, including replacement strings stored in shell
+ variables. Backslash will escape '&' in STRING; the backslash is
+ removed in order to permit a literal '&' in the replacement string.
+ Users should take care if STRING is double-quoted to avoid unwanted
+ interactions between the backslash and double-quoting, since
+ backslash has special meaning within double quotes. Pattern
+ substitution performs the check for unquoted '&' after expanding
+ STRING, so users should ensure to properly quote any occurrences of
+ '&' they want to be taken literally in the replacement and ensure
+ any instances of '&' they want to be replaced are unquoted.
+
+ For instance,
+
+ var=abcdef
+ rep='& '
+ echo ${var/abc/& }
+ echo "${var/abc/& }"
+ echo ${var/abc/$rep}
+ echo "${var/abc/$rep}"
+
+ will display four lines of "abc def", while
+
+ var=abcdef
+ rep='& '
+ echo ${var/abc/\& }
+ echo "${var/abc/\& }"
+ echo ${var/abc/"& "}
+ echo ${var/abc/"$rep"}
+
+ will display four lines of "& def". Like the pattern removal
+ operators, double quotes surrounding the replacement string quote
+ the expanded characters, while double quotes enclosing the entire
+ parameter substitution do not, since the expansion is performed in
+ a context that doesn't take any enclosing double quotes into
+ account.
+
+ Since backslash can escape '&', it can also escape a backslash in
+ the replacement string. This means that '\\' will insert a literal
+ backslash into the replacement, so these two 'echo' commands
+
+ var=abcdef
+ rep='\\&xyz'
+ echo ${var/abc/\\&xyz}
+ echo ${var/abc/$rep}
+
+ will both output '\abcxyzdef'.
+
+ It should rarely be necessary to enclose only STRING in double
+ quotes.
+
+ 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:
+
+ 'U'
+ The expansion is a string that is the value of PARAMETER with
+ lowercase alphabetic characters converted to uppercase.
+ 'u'
+ The expansion is a string that is the value of PARAMETER with
+ the first character converted to uppercase, if it is
+ alphabetic.
+ 'L'
+ The expansion is a string that is the value of PARAMETER with
+ uppercase alphabetic characters converted to lowercase.
+ '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.
+ 'K'
+ Produces a possibly-quoted version of the value of PARAMETER,
+ except that it prints the values of indexed and associative
+ arrays as a sequence of quoted key-value pairs (*note
+ Arrays::).
+ 'a'
+ The expansion is a string consisting of flag values
+ representing PARAMETER's attributes.
+ 'k'
+ Like the 'K' transformation, but expands the keys and values
+ of indexed and associative arrays to separate words after word
+ splitting.
+
+ 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
+ filename 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 undergoes the same expansions as if it were within
+double quotes, but double quote characters in EXPRESSION are not treated
+specially and are removed. 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, and is not quoted, 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. In order to match
+the filenames '.' and '..', the pattern must begin with '.' (for
+example, '.?'), even if 'dotglob' is set. If the 'globskipdots' shell
+option is enabled, the filenames '.' and '..' are never matched, even if
+the pattern begins with a '.'. When not matching filenames, 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', 'globskipdots', '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, and the
+ characters included in the range, are 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 '[aBbCcDdxYyZz]', 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,
+the shell recognizes several extended pattern matching operators. In
+the following description, a PATTERN-LIST is a list of one or more
+patterns separated by a '|'. When matching filenames, the 'dotglob'
+shell option determines the set of filenames that are tested, as
+described above. 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.
+
+ The 'extglob' option changes the behavior of the parser, since the
+parentheses are normally treated as operators with syntactic meaning.
+To ensure that extended matching patterns are parsed correctly, make
+sure that 'extglob' is enabled before parsing constructs containing the
+patterns, including shell functions and command substitutions.
+
+ When matching filenames, the 'dotglob' shell option determines the
+set of filenames that are tested: when 'dotglob' is enabled, the set of
+filenames includes all files beginning with '.', but the filenames '.'
+and '..' must be matched by a pattern or sub-pattern that begins with a
+dot; when it is disabled, the set does not include any filenames
+beginning with "." unless the pattern or sub-pattern begins with a '.'.
+As above, '.' only has a special meaning when matching filenames.
+
+ 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's lifetime manually. The 'varredir_close' shell
+option manages this behavior (*note The Shopt Builtin::).
+
+ 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. Filename
+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, in the
+following order.
+
+ 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. In the case of such a command (one that
+consists only of assignment statements and redirections), assignment
+statements are performed before redirections. 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.
+
+ A "subshell" is a copy of the shell process.
+
+ 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.
+
+ The exit status of the last command is available in the special
+parameter $? (*note Special Parameters::).
+
+
+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.
+
+ When job control is not enabled, and Bash is waiting for a foreground
+command to complete, the shell receives keyboard-generated signals such
+as 'SIGINT' (usually generated by '^C') that users commonly intend to
+send to that command. This happens because the shell and the command
+are in the same process group as the terminal, and '^C' sends 'SIGINT'
+to all processes in that process group. See *note Job Control::, for a
+more in-depth discussion of process groups.
+
+ When Bash is running without job control enabled and receives
+'SIGINT' while waiting for a foreground command, it waits until that
+foreground command terminates and then decides what to do about the
+'SIGINT':
+
+ 1. If the command terminates due to the 'SIGINT', Bash concludes that
+ the user meant to end the entire script, and acts on the 'SIGINT'
+ (e.g., by running a 'SIGINT' trap or exiting itself);
+
+ 2. If the pipeline does not terminate due to 'SIGINT', the program
+ handled the 'SIGINT' itself and did not treat it as a fatal signal.
+ In that case, Bash does not treat 'SIGINT' as a fatal signal,
+ either, instead assuming that the 'SIGINT' was used as part of the
+ program's normal operation (e.g., 'emacs' uses it to abort editing
+ commands) or deliberately discarded. However, Bash will run any
+ trap set on 'SIGINT', as it does with any other trapped signal it
+ receives while it is waiting for the foreground command to
+ complete, for compatibility.
+
+
+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 creates a new instance of itself 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 and, depending on the operating system, one
+or more optional arguments for that interpreter. 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 one or more optional
+arguments 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 supplied to the script. The details of how the
+interpreter line is split into an interpreter name and a set of
+arguments vary across systems. 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 a single argument
+to a maximum of 32 characters, so it's not portable to assume that using
+more than one argument will work.
+
+ 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. It's
+a common idiom to use 'env' to find 'bash' even if it's been installed
+in another directory: '#!/usr/bin/env bash' will find the first
+occurrence of 'bash' in '$PATH'.
+
+
+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, but FILENAME does not need to be
+ executable. When Bash is not in POSIX mode, it searches the
+ current directory 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, '.' inherits any trap on
+ 'DEBUG'; if it is not, any 'DEBUG' trap string is saved and
+ restored around the call to '.', and '.' 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 '.'
+ 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. 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.
+
+ If the directory change is successful, 'cd' sets the value of the
+ 'PWD' environment variable to the new directory name, and sets the
+ 'OLDPWD' environment variable to the value of the current working
+ directory before the change.
+
+ 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 [ARG ...]
+
+ '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 supplied as ARG values, '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 '$#' down 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
+ The following conditions are applied in the order listed.
+
+ 1. If the first argument is '!', the result is the negation
+ of the three-argument expression composed of the
+ remaining arguments.
+ 2. If the first argument is exactly '(' and the fourth
+ argument is exactly ')', the result is the two-argument
+ test of the second and third arguments.
+ 3. 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, a function with that name, if any, is
+ unset. Readonly variables and functions may not be unset. Some
+ shell variables lose their special behavior if they are unset; such
+ behavior is noted in the description of the individual variables.
+ The return status is zero unless a NAME is readonly or may not be
+ unset.
+
+
+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
+ bind READLINE-COMMAND-LINE
+
+ 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' and 'READLINE_MARK' variables
+ to the current location of the insertion point and the saved
+ insertion point (the MARK), respectively. The shell assigns
+ any numeric argument the user supplied to the
+ 'READLINE_ARGUMENT' variable. If there was no argument, that
+ variable is not set. If the executed command changes the
+ value of any of 'READLINE_LINE', 'READLINE_POINT', or
+ 'READLINE_MARK', 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 [-aAfFgiIlnrtux] [-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 '-I' option causes local variables to inherit the attributes
+ (except the 'nameref' attribute) and value of any existing variable
+ with the same NAME at a surrounding scope. If there is no existing
+ variable, the local variable is initially unset.
+
+ 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.
+ Bash will use the value of the 'BASH_LOADABLES_PATH' variable as a
+ colon-separated list of directories in which to search for
+ FILENAME. The default is system-dependent. 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::).
+
+ If no options are supplied and a NAME is not a shell builtin,
+ 'enable' will attempt to load NAME from a shared object named NAME,
+ as if the command were 'enable -f NAME NAME'.
+
+ 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 restore is
+ effected as if a series of 'set' commands were executed to restore
+ the values that were in place before the function. 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.
+ '%Q'
+ like '%q', but applies any supplied precision to the ARGUMENT
+ before quoting it.
+ '%(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.
+
+ The %b, %q, and %T directives all use the field width and precision
+ arguments from the format specification and write that many bytes
+ from (or use that wide a field for) the expanded argument, which
+ usually contains more characters than the original.
+
+ 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.
+
+ 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 any data. The exit status is 0 if input is available on
+ the specified file descriptor, or the read will return EOF,
+ non-zero otherwise. The exit status is greater than 128 if
+ the timeout is exceeded.
+
+ '-u FD'
+ Read input from file descriptor FD.
+
+ If no NAMEs are supplied, the line read, without the ending
+ delimiter but otherwise unmodified, 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'.
+
+'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 [-HS] -a
+ ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [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; no limits are set.
+
+ '-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.
+
+ '-R'
+ The maximum time a real-time process can run before blocking,
+ in microseconds.
+
+ '-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 more than one
+ resource is specified, the limit name and unit, if appropriate, are
+ printed before the value. 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; '-R', which is in
+ microseconds; '-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.
+
+ '-r'
+ Enable restricted shell mode. This option cannot be unset
+ once it has been set.
+
+ '-t'
+ Exit after reading and executing one command.
+
+ '-u'
+ Treat unset variables and parameters other than the special
+ parameters '@' or '*', or array variables subscripted with '@'
+ 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'
+ 'compat32'
+ 'compat40'
+ 'compat41'
+ 'compat42'
+ 'compat43'
+ 'compat44'
+ These control aspects of the shell's compatibility mode (*note
+ Shell Compatibility Mode::).
+
+ '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, or in a shell startup file,
+ 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.
+
+ 'globskipdots'
+ If set, filename expansion will never match the filenames '.'
+ and '..', even if the pattern begins with a '.'. This option
+ is enabled by default.
+
+ '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 (*note Conditional Constructs::, when
+ performing pattern substitution word expansions, or when
+ filtering possible completions as part of programmable
+ completion.
+
+ 'noexpand_translation'
+ If set, Bash encloses the translated results of $"..."
+ quoting in single quotes instead of double quotes. If the
+ string is not translated, this has no effect.
+
+ 'nullglob'
+ If set, Bash allows filename patterns which match no files to
+ expand to a null string, rather than themselves.
+
+ 'patsub_replacement'
+ If set, Bash expands occurrences of '&' in the replacement
+ string of pattern substitution to the text matched by the
+ pattern, as described above (*note Shell Parameter
+ Expansion::). This option is enabled by default.
+
+ '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.
+
+ 'varredir_close'
+ If set, the shell automatically closes file descriptors
+ assigned using the '{varname}' redirection syntax (*note
+ Redirections::) instead of leaving them open when the command
+ completes.
+
+ 'xpg_echo'
+ If set, the 'echo' builtin expands backslash-escape sequences
+ by default.
+
+
+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::).
+
+'_'
+ ($_, an underscore.) At shell startup, set to the 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.
+
+'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. If
+ 'BASH_COMMAND' is unset, it loses its special properties, even if
+ it is subsequently reset.
+
+'BASH_COMPAT'
+ The value is used to set the shell's compatibility level. *Note
+ Shell Compatibility Mode::, 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 values correspond to the
+ compatibility levels described below (*note Shell Compatibility
+ Mode::). For example, 4.2 and 42 are valid values that correspond
+ to the 'compat42' 'shopt' option and set the compatibility level to
+ 42. 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.
+
+'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. If 'BASH_SUBSHELL' is unset, it loses its special
+ properties, even if it is subsequently reset.
+
+'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'
+ Expanded and executed similarly to 'BASH_ENV' (*note Bash Startup
+ Files::) when an interactive 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. Assignments to 'HISTCMD' are ignored. 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. If 'LINENO' is unset, it loses its special properties,
+ even if it is subsequently reset.
+
+'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 this variable is set, and is an array, the value of each set
+ element is interpreted as a command to execute before printing the
+ primary prompt ('$PS1'). If this is set but not an array variable,
+ its value is used as a command to execute instead.
+
+'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, it expands to a random
+ integer between 0 and 32767. Assigning a value to this variable
+ seeds the random number generator. If 'RANDOM' is unset, it loses
+ its special properties, even if it is subsequently reset.
+
+'READLINE_ARGUMENT'
+ Any numeric argument given to a Readline command that was defined
+ using 'bind -x' (*note Bash Builtins:: when it was invoked.
+
+'READLINE_LINE'
+ The contents of the Readline line buffer, for use with 'bind -x'
+ (*note Bash Builtins::).
+
+'READLINE_MARK'
+ The position of the "mark" (saved insertion point) in the Readline
+ line buffer, for use with 'bind -x' (*note Bash Builtins::). The
+ characters between the insertion point and the mark are often
+ called the "region".
+
+'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. The number of seconds
+ at shell invocation and the current time are always determined by
+ querying the system clock. If 'SECONDS' is unset, it loses its
+ special properties, even if it is subsequently reset.
+
+'SHELL'
+ This environment variable expands to the full pathname to the
+ shell. 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.
+
+'SRANDOM'
+ This variable expands to a 32-bit pseudo-random number each time it
+ is referenced. The random number generator is not linear on
+ systems that support '/dev/urandom' or 'arc4random', so each
+ returned number has no relationship to the numbers preceding it.
+ The random number generator cannot be seeded, so assignments to
+ this variable have no effect. If 'SRANDOM' is unset, it loses its
+ special properties, even if it is subsequently reset.
+
+'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.
+* Shell Compatibility Mode:: How Bash supports behavior that was present
+ in earlier versions and has changed.
+
+
+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 historical
+remote shell daemon, usually 'rshd', or the secure shell daemon 'sshd'.
+If Bash determines it is being run non-interactively 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 an 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) and without specifying the '-c' option, 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 values of the set elements of the
+ 'PROMPT_COMMAND' array variable as commands 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. If the 'cdspell' shell option is enabled, the shell will attempt
+ simple spelling correction for directory arguments to the 'cd'
+ builtin (see the description of the 'cdspell' option to the 'shopt'
+ builtin in *note The Shopt Builtin::). The 'cdspell' option is
+ only effective in interactive shells.
+
+ 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 (*note
+Conditional Constructs::) and the 'test' and '[' builtin commands (*note
+Bourne Shell Builtins::). 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.
+
+ Integer constants follow the C language definition, without suffixes
+or character constants. 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, if a non-digit is required, 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, use a shell function (*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 may be 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.
+
+ Each VALUE in the list undergoes all the shell expansions described
+above (*note Shell Expansions::).
+
+ When assigning to an associative array, the words in a compound
+assignment may be either assignment statements, for which the subscript
+is required, or a list of words that is interpreted as a sequence of
+alternating keys and values: NAME=(KEY1 VALUE1 KEY2 VALUE2 ... ). These
+are treated identically to NAME=( [KEY1]=VALUE1 [KEY2]=VALUE2 ... ).
+The first word in the list determines how the remaining words are
+interpreted; all assignments in a list must be of the same type. When
+using key/value pairs, the keys may not be missing or empty; a final
+missing value is treated like the empty string.
+
+ 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.
+
+ The '+=' operator will append to an array variable when assigning
+using the compound assignment syntax; see *note Shell Parameters::
+above.
+
+ 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. 'unset NAME[SUBSCRIPT]' behaves differently depending on the
+array type when given a subscript of '*' or '@'. When NAME is an
+associative array, it removes the element with key '*' or '@'. If NAME
+is an indexed array, 'unset' removes all of the elements, but does not
+remove the array itself.
+
+ 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]
+
+ Removes elements from the directory stack. The elements are
+ numbered from 0 starting at the first directory listed by 'dirs';
+ that is, 'popd' is equivalent to 'popd +0'.
+
+ When no arguments are given, 'popd' removes the top directory from
+ the stack and changes to the new top directory.
+
+ Arguments, if supplied, have the following meanings:
+
+ '-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, from the stack.
+ '-N'
+ Removes the Nth directory (counting from the right of the list
+ printed by 'dirs'), starting with zero, from the stack.
+
+ If the top element of the directory stack is modified, and the '-n'
+ option was not supplied, 'popd' uses the 'cd' builtin to change to
+ the directory at the top of the stack. If the 'cd' fails, 'popd'
+ returns a non-zero value.
+
+ Otherwise, 'popd' returns an unsuccessful status if an invalid
+ option is encountered, the directory stack is empty, or a
+ non-existent directory stack entry is specified.
+
+ If the 'popd' command is successful, Bash runs 'dirs' to show the
+ final contents of the directory stack, and the return status is 0.
+
+'pushd'
+ pushd [-n] [+N | -N | DIR]
+
+ 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, 'pushd' exchanges the top two
+ elements of the directory stack.
+
+ Arguments, if supplied, have the following meanings:
+
+ '-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.
+
+ After the stack has been modified, if the '-n' option was not
+ supplied, 'pushd' uses the 'cd' builtin to change to the directory
+ at the top of the stack. If the 'cd' fails, 'pushd' returns a
+ non-zero value.
+
+ Otherwise, if no arguments are supplied, 'pushd' returns 0 unless
+ the directory stack is empty. When rotating the directory stack,
+ 'pushd' returns 0 unless the directory stack is empty or a
+ non-existent directory stack element is specified.
+
+ If the 'pushd' command is successful, Bash runs 'dirs' to show the
+ final contents of the directory stack.
+
+
+File: bashref.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features
+
+6.9 Controlling the Prompt
+==========================
+
+Bash examines the value of the array variable 'PROMPT_COMMAND' just
+before printing each primary prompt. If any elements in
+'PROMPT_COMMAND' are set and non-null, Bash executes each value, in
+numeric order, 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 value of the 'PWD' shell variable ('$PWD'), 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::). This can have unwanted side effects if escaped portions of
+the string appear within command substitution or contain characters
+special to word expansion.
+
+
+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', 'HISTFILE',
+ '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
+ 'history' 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 'shopt -u
+ restricted_shell'.
+
+ 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.
+
+ The restricted shell mode is only one component of a useful
+restricted environment. It should be accompanied by setting 'PATH' to a
+value that allows execution of only a few verified commands (commands
+that allow shell escapes are particularly vulnerable), changing the
+current directory to a non-writable directory other than '$HOME' after
+login, not allowing the restricted shell to execute shell scripts, and
+cleaning the environment of variables that cause some commands to modify
+their behavior (e.g., 'VISUAL' or 'PAGER').
+
+ Modern systems provide more secure ways to implement a restricted
+environment, such as 'jails', 'zones', or 'containers'.
+
+
+File: bashref.info, Node: Bash POSIX Mode, Next: Shell Compatibility 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. Bash will not insert a command without the execute bit set into the
+ command hash table, even if it returns it as a (last-ditch) result
+ from a '$PATH' search.
+
+ 4. The message printed by the job control code and builtins when a job
+ exits with a non-zero status is 'Done(status)'.
+
+ 5. The message printed by the job control code and builtins when a job
+ is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example,
+ 'SIGTSTP'.
+
+ 6. Alias expansion is always enabled, even in non-interactive shells.
+
+ 7. Reserved words appearing in a context where reserved words are
+ recognized do not undergo alias expansion.
+
+ 8. Alias expansion is performed when initially parsing a command
+ substitution. The default mode generally defers it, when enabled,
+ until the command substitution is executed. This means that
+ command substitution will not expand aliases that are defined after
+ the command substitution is initially parsed (e.g., as part of a
+ function definition).
+
+ 9. 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.
+
+ 10. The POSIX startup files are executed ('$ENV') rather than the
+ normal Bash files.
+
+ 11. Tilde expansion is only performed on assignments preceding a
+ command name, rather than on all assignment statements on the line.
+
+ 12. The default history file is '~/.sh_history' (this is the default
+ value of '$HISTFILE').
+
+ 13. Redirection operators do not perform filename expansion on the
+ word in the redirection unless the shell is interactive.
+
+ 14. Redirection operators do not perform word splitting on the word in
+ the redirection.
+
+ 15. 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.
+
+ 16. Function names may not be the same as one of the POSIX special
+ builtins.
+
+ 17. POSIX special builtins are found before shell functions during
+ command lookup.
+
+ 18. When printing shell function definitions (e.g., by 'type'), Bash
+ does not print the 'function' keyword.
+
+ 19. Literal tildes that appear as the first character in elements of
+ the 'PATH' variable are not expanded as described above under *note
+ Tilde Expansion::.
+
+ 20. 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.
+
+ 21. 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.
+
+ 22. The parser does not recognize 'time' as a reserved word if the
+ next token begins with a '-'.
+
+ 23. The '!' character does not introduce history expansion within a
+ double-quoted string, even if the 'histexpand' option is enabled.
+
+ 24. 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.
+
+ 25. 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.
+
+ 26. 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. For any
+ other simple command, the shell aborts execution of that command,
+ and execution continues at the top level ("the shell shall not
+ perform any further processing of the command in which the error
+ occurred").
+
+ 27. 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.
+
+ 28. Non-interactive shells exit if FILENAME in '.' FILENAME is not
+ found.
+
+ 29. Non-interactive shells exit if a syntax error in an arithmetic
+ expansion results in an invalid expression.
+
+ 30. Non-interactive shells exit if a parameter expansion error occurs.
+
+ 31. 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.
+
+ 32. While variable indirection is available, it may not be applied to
+ the '#' and '?' special parameters.
+
+ 33. Expanding the '*' special parameter in a pattern context where the
+ expansion is double-quoted does not treat the '$*' as if it were
+ double-quoted.
+
+ 34. Assignment statements preceding POSIX special builtins persist in
+ the shell environment after the builtin completes.
+
+ 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. 'trap -p' displays signals whose dispositions are set to SIG_DFL
+ and those that were ignored when the shell started.
+
+ 43. The '.' and 'source' builtins do not search the current directory
+ for the filename argument if it is not found by searching 'PATH'.
+
+ 44. 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.
+
+ 45. 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.
+
+ 46. When the 'alias' builtin displays alias definitions, it does not
+ display them with a leading 'alias ' unless the '-p' option is
+ supplied.
+
+ 47. When the 'set' builtin is invoked without options, it does not
+ display shell function names and definitions.
+
+ 48. 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.
+
+ 49. 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.
+
+ 50. 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.
+
+ 51. 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.
+
+ 52. When listing the history, the 'fc' builtin does not include an
+ indication of whether or not a history entry has been modified.
+
+ 53. The default editor used by 'fc' is 'ed'.
+
+ 54. 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'.
+
+ 55. The 'vi' editing mode will invoke the 'vi' editor directly when
+ the 'v' command is run, instead of checking '$VISUAL' and
+ '$EDITOR'.
+
+ 56. 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.
+
+ 57. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
+ and '-f' options.
+
+ 58. 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.
+
+ 59. 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.
+
+ 60. The 'printf' builtin uses 'double' (via 'strtod') to convert
+ arguments corresponding to floating point conversion specifiers,
+ instead of 'long double' if it's available. The 'L' length
+ modifier forces 'printf' to use 'long double' if it's available.
+
+ 61. 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: Shell Compatibility Mode, Prev: Bash POSIX Mode, Up: Bash Features
+
+6.12 Shell Compatibility Mode
+=============================
+
+Bash-4.0 introduced the concept of a "shell compatibility level",
+specified as a set of options to the shopt builtin ('compat31',
+'compat32', 'compat40', 'compat41', and so on). There is only one
+current compatibility level - each option is mutually exclusive. The
+compatibility level is intended to allow users to select behavior from
+previous versions that is incompatible with newer versions while they
+migrate scripts to use current features and behavior. It's intended to
+be a temporary solution.
+
+ This section does not mention behavior that is standard for a
+particular version (e.g., setting 'compat32' means that quoting the rhs
+of the regexp matching operator quotes special regexp characters in the
+word, which is default behavior in bash-3.2 and subsequent versions).
+
+ If a user enables, say, 'compat32', it may affect the behavior of
+other compatibility levels up to and including the current compatibility
+level. The idea is that each compatibility level controls behavior that
+changed in that version of Bash, but that behavior may have been present
+in earlier versions. For instance, the change to use locale-based
+comparisons with the '[[' command came in bash-4.1, and earlier versions
+used ASCII-based comparisons, so enabling 'compat32' will enable
+ASCII-based comparisons as well. That granularity may not be sufficient
+for all uses, and as a result users should employ compatibility levels
+carefully. Read the documentation for a particular feature to find out
+the current behavior.
+
+ Bash-4.3 introduced a new shell variable: 'BASH_COMPAT'. The value
+assigned to this variable (a decimal version number like 4.2, or an
+integer corresponding to the 'compat'NN option, like 42) determines the
+compatibility level.
+
+ Starting with bash-4.4, Bash has begun deprecating older
+compatibility levels. Eventually, the options will be removed in favor
+of 'BASH_COMPAT'.
+
+ Bash-5.0 is the final version for which there will be an individual
+shopt option for the previous version. Users should use 'BASH_COMPAT'
+on bash-5.0 and later versions.
+
+ The following table describes the behavior changes controlled by each
+compatibility level setting. The 'compat'NN tag is used as shorthand
+for setting the compatibility level to NN using one of the following
+mechanisms. For versions prior to bash-5.0, the compatibility level may
+be set using the corresponding 'compat'NN shopt option. For bash-4.3
+and later versions, the 'BASH_COMPAT' variable is preferred, and it is
+required for bash-5.1 and later versions.
+
+'compat31'
+ * quoting the rhs of the '[[' command's regexp matching operator
+ (=~) has no special effect
+
+'compat32'
+ * interrupting a command list such as "a ; b ; c" causes the
+ execution of the next command in the list (in bash-4.0 and
+ later versions, the shell acts as if it received the
+ interrupt, so interrupting one command in a list aborts the
+ execution of the entire list)
+
+'compat40'
+ * the '<' and '>' operators to the '[[' command do not consider
+ the current locale when comparing strings; they use ASCII
+ ordering. 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).
+
+'compat41'
+ * in posix mode, 'time' may be followed by options and still be
+ recognized as a reserved word (this is POSIX interpretation
+ 267)
+ * in posix mode, the parser requires that an even number of
+ single quotes occur in the WORD portion of a double-quoted
+ ${...} parameter expansion and treats them specially, so that
+ characters within the single quotes are considered quoted
+ (this is POSIX interpretation 221)
+
+'compat42'
+ * the replacement string in double-quoted pattern substitution
+ does not undergo quote removal, as it does in versions after
+ bash-4.2
+ * in posix mode, single quotes are considered special when
+ expanding the WORD portion of a double-quoted ${...} parameter
+ expansion and can be used to quote a closing brace or other
+ special character (this is part of POSIX interpretation 221);
+ in later versions, single quotes are not special within
+ double-quoted word expansions
+
+'compat43'
+ * the shell does not print a warning message if an attempt is
+ made to use a quoted compound assignment as an argument to
+ declare (e.g., declare -a foo='(1 2)'). Later versions warn
+ that this usage is deprecated
+ * word expansion errors are considered non-fatal errors that
+ cause the current command to fail, even in posix mode (the
+ default behavior is to make them fatal errors that cause the
+ shell to exit)
+ * when executing a shell function, the loop state
+ (while/until/etc.) is not reset, so 'break' or 'continue' in
+ that function will break or continue loops in the calling
+ context. Bash-4.4 and later reset the loop state to prevent
+ this
+
+'compat44'
+ * the shell sets up the values used by 'BASH_ARGV' and
+ 'BASH_ARGC' so they can expand to the shell's positional
+ parameters even if extended debugging mode is not enabled
+ * a subshell inherits loops from its parent context, so 'break'
+ or 'continue' will cause the subshell to exit. Bash-5.0 and
+ later reset the loop state to prevent the exit
+ * variable assignments preceding builtins like 'export' and
+ 'readonly' that set attributes continue to affect variables
+ with the same name in the calling environment even if the
+ shell is not in posix mode
+
+'compat50 (set using BASH_COMPAT)'
+ * Bash-5.1 changed the way '$RANDOM' is generated to introduce
+ slightly more randomness. If the shell compatibility level is
+ set to 50 or lower, it reverts to the method from bash-5.0 and
+ previous versions, so seeding the random number generator by
+ assigning a value to 'RANDOM' will produce the same sequence
+ as in bash-5.0
+ * If the command hash table is empty, Bash versions prior to
+ bash-5.1 printed an informational message to that effect, even
+ when producing output that can be reused as input. Bash-5.1
+ suppresses that message when the '-l' option is supplied.
+
+'compat51 (set using BASH_COMPAT)'
+ * The 'unset' builtin will unset the array 'a' given an argument
+ like 'a[@]'. Bash-5.2 will unset an element with key '@'
+ (associative arrays) or remove all the elements without
+ unsetting the array (indexed arrays)
+ * arithmetic commands ( ((...)) ) and the expressions in an
+ arithmetic for statement can be expanded more than once
+ * expressions used as arguments to arithmetic operators in the
+ '[[' conditional command can be expanded more than once
+ * the expressions in substring parameter brace expansion can be
+ expanded more than once
+ * the expressions in the $(( ... )) word expansion can be
+ expanded more than once
+ * arithmetic expressions used as indexed array subscripts can be
+ expanded more than once
+ * 'test -v', when given an argument of 'A[@]', where A is an
+ existing associative array, will return true if the array has
+ any set elements. Bash-5.2 will look for and report on a key
+ named '@'
+ * the ${PARAMETER[:]=VALUE} word expansion will return VALUE,
+ before any variable-specific transformations have been
+ performed (e.g., converting to lowercase). Bash-5.2 will
+ return the final value assigned to the variable.
+ * Parsing command substitutions will behave as if extended glob
+ (*note The Shopt Builtin::) is enabled, so that parsing a
+ command substitution containing an extglob pattern (say, as
+ part of a shell function) will not fail. This assumes the
+ intent is to enable extglob before the command is executed and
+ word expansions are performed. It will fail at word expansion
+ time if extglob hasn't been enabled by the time the command is
+ executed.
+
+
+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 job whose command name begins with
+'ce'. 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 causes '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] [-p VARNAME] [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, 'wait' waits
+ for all running background jobs and the last-executed process
+ substitution, if its process id is the same as $!, and the return
+ status is zero. If the '-n' option is supplied, 'wait' waits for a
+ single job from the list of PIDs or JOBSPECs or, if no arguments
+ are supplied, any job, to complete and returns its exit status. If
+ none of the supplied arguments is a child of the shell, or if no
+ arguments are supplied and the shell has no unwaited-for children,
+ the exit status is 127. If the '-p' option is supplied, the
+ process or job identifier of the job for which the exit status is
+ returned is assigned to the variable VARNAME named by the option
+ argument. The variable will be unset initially, before any
+ assignment. This is useful only when the '-n' option is supplied.
+ Supplying the '-f' option, when job control is enabled, forces
+ 'wait' to wait for each PID or JOBSPEC to terminate before
+ returning its status, instead of returning when it changes status.
+ If neither JOBSPEC nor PID specifies an active child process of the
+ shell, the return status is 127. If 'wait' is interrupted by a
+ signal, the return status will be greater than 128, as described
+ above (*note Signals::). Otherwise, the return status is the exit
+ status of the last process or job waited for.
+
+'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, or a shell without job control enabled,
+ cannot be suspended; the '-f' option can be used to override this
+ and force the suspension. The return status is 0 unless the shell
+ is a login shell or job control is not enabled and '-f' is not
+ supplied.
+
+ 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 might 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 to 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 their 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'. The 'bind' builtin command can also
+be used to set Readline keybindings and variables. *Note Bash
+Builtins::.
+
+ 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.
+
+ 'active-region-start-color'
+ A string variable that controls the text color and background
+ when displaying the text in the active region (see the
+ description of 'enable-active-region' below). This string
+ must not take up any physical character positions on the
+ display, so it should consist only of terminal escape
+ sequences. It is output to the terminal before displaying the
+ text in the active region. This variable is reset to the
+ default value whenever the terminal type changes. The default
+ value is the string that puts the terminal in standout mode,
+ as obtained from the terminal's terminfo description. A
+ sample value might be '\e[01;33m'.
+
+ 'active-region-end-color'
+ A string variable that "undoes" the effects of
+ 'active-region-start-color' and restores "normal" terminal
+ display appearance after displaying text in the active region.
+ This string must not take up any physical character positions
+ on the display, so it should consist only of terminal escape
+ sequences. It is output to the terminal after displaying the
+ text in the active region. This variable is reset to the
+ default value whenever the terminal type changes. The default
+ value is the string that restores the terminal from standout
+ mode, as obtained from the terminal's terminfo description. A
+ sample value might be '\e[0m'.
+
+ '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. If there is a
+ color definition in 'LS_COLORS' for the custom suffix
+ 'readline-colored-completion-prefix', Readline uses this color
+ for the common prefix instead of its default. 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 or equal to this value, Readline will ask whether or not
+ the user wishes to view them; otherwise, they are simply
+ listed. This variable must be set to an integer value greater
+ than or equal to zero. A zero value means Readline should
+ never ask; negative values are treated as zero. 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. This variable is dependent on the
+ 'LC_CTYPE' locale category, and may change if the locale is
+ changed.
+
+ '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-active-region'
+ The "point" is the current cursor position, and "mark" refers
+ to a saved cursor position (*note Commands For Moving::). The
+ text between the point and mark is referred to as the
+ "region". When this variable is set to 'On', Readline allows
+ certain commands to designate the region as "active". When
+ the region is active, Readline highlights the text in the
+ region using the value of the 'active-region-start-color',
+ which defaults to the string that enables the terminal's
+ standout mode. The active region shows the text inserted by
+ bracketed-paste and any matching text found by incremental and
+ non-incremental history searches. The default is 'On'.
+
+ 'enable-bracketed-paste'
+ When set to 'On', Readline configures the terminal 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 is called putting the
+ terminal into "bracketed paste mode"; it prevents Readline
+ from executing any editing commands bound to key sequences
+ appearing in the pasted text. The default is 'On'.
+
+ '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. This variable is automatically set to 'on'
+ for terminals of height 1. 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. This variable is
+ dependent on the 'LC_CTYPE' locale category, and may change if
+ the locale is changed.
+
+ '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. This
+ variable is dependent on the 'LC_CTYPE' locale category, and
+ may change if the locale is changed.
+
+ '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 be 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 150 or more possible completions for a word,
+ # ask whether or not the user 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 (M-C-f)'
+ Move forward to the end of the next word. Words are delimited by
+ non-quoted shell metacharacters.
+
+'shell-backward-word (M-C-b)'
+ 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-display (M-C-l)'
+ Clear the screen and, if possible, the terminal's scrollback
+ buffer, then redraw the current line, leaving the current line at
+ the top of the screen.
+
+'clear-screen (C-l)'
+ Clear the screen, then 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.
+ This command sets the region to the matched text and activates the
+ mark.
+
+'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.
+ This command sets the region to the matched text and activates the
+ mark.
+
+'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.
+
+'operate-and-get-next (C-o)'
+ Accept the current line for return to the calling application as if
+ a newline had been entered, 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.
+
+'fetch-history ()'
+ With a numeric argument, fetch that entry from the history list and
+ make it the current line. Without an argument, move back to the
+ first entry in the history list.
+
+
+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.
+
+ Bracketed paste sets the region (the characters between point and
+ the mark) to the inserted text. It uses the concept of an _active
+ mark_: when the mark is active, Readline redisplay uses the
+ terminal's standout mode to denote the region.
+
+'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. With a negative
+ numeric argument, kill backward from the cursor to the beginning of
+ the current line.
+
+'backward-kill-line (C-x Rubout)'
+ Kill backward from the cursor to the beginning of the current line.
+ With a negative numeric argument, kill forward from the cursor to
+ the end 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 (M-C-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 'shell-forward-word'.
+
+'shell-backward-kill-word ()'
+ Kill the word behind point. Word boundaries are the same as
+ 'shell-backward-word'.
+
+'shell-transpose-words (M-C-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. Word
+ boundaries are the same as 'shell-forward-word' and
+ '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 keyboard 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 argument 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 argument 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.
+
+'spell-correct-word (C-x s)'
+ Perform spelling correction on the current word, treating it as a
+ directory or filename, in the same way as the 'cdspell' shell
+ option. Word boundaries are the same as those used by
+ 'shell-forward-word'.
+
+'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'.
+
+'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 initial 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. Arguments are passed as
+ with the '-F' option.
+
+ '-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 initial 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
+completions that Bash adds to the default Readline set. These include
+things like command name completion, variable completion for words
+beginning with '$' or '${', 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 <https://github.com/scop/bash-completion/>. 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).
+
+ When listing, a FIRST or LAST of 0 is equivalent to -1 and -0 is
+ equivalent to the current command (usually the 'fc' command);
+ otherwise 0 is equivalent to -1 and -0 is invalid.
+
+ 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
+ interpreted 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 range of 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.
+
+ If a FILENAME argument is supplied when any of the '-w', '-r',
+ '-a', or '-n' options is used, Bash uses FILENAME as the history
+ file. If not, then the value of the 'HISTFILE' variable is used.
+
+ The return value is 0 unless an invalid option is encountered, an
+ error occurs while reading or writing the history file, an invalid
+ OFFSET or range is supplied as an argument to '-d', or the history
+ expansion supplied as an argument to '-p' fails.
+
+
+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. If
+ STRING is missing, the string from the most recent search is used;
+ it is an error if there is no previous search string.
+
+'^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 first word matched by the most recent '?STRING?' search, if the
+ search string begins with a character that is part of a word.
+
+'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 'x' is
+ missing, it defaults to 0.
+
+ 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 ':'. These modify,
+or edit, the word or words selected from the history event.
+
+'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. The 'q' and 'x' modifiers are mutually
+ exclusive; the last one supplied is used.
+
+'s/OLD/NEW/'
+ Substitute NEW for the first occurrence of OLD in the event line.
+ Any character may be used as the delimiter 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 '&'. If OLD is null, it is set to the last OLD
+ substituted, or, if no previous history substitutions took place,
+ the last STRING in a !?STRING'[?]' search. If NEW is null, each
+ matching OLD is deleted. 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' or '&' 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, message translation
+ files, some supplemental documentation, a number of example
+ loadable builtin commands, and a set of header files for developing
+ loadable builtins. You may need additional privileges to install
+ 'bash' to your desired destination, so 'sudo make install' might be
+ required. More information about controlling the locations where
+ 'bash' and other files are installed is below (*note Installation
+ Names::).
+
+ 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', 'po', 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.69 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 support 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.; that is, the "installation prefix" defaults to
+'/usr/local'. You can specify an installation prefix other than
+'/usr/local' by giving 'configure' the option '--prefix=PATH', or by
+specifying a value for the 'prefix' 'make' variable when running 'make
+install' (e.g., 'make install prefix=PATH'). The 'prefix' variable
+provides a default for 'exec_prefix' and other variables used when
+installing bash.
+
+ 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.
+
+ If you would like to change the installation locations for a single
+run, you can specify these variables as arguments to 'make': 'make
+install exec_prefix=/' will install 'bash' and 'bashbug' into '/bin'
+instead of the default '/usr/local/bin'.
+
+ If you want to see the files bash will install and where it will
+install them without changing anything on your system, specify the
+variable 'DESTDIR' as an argument to 'make'. Its value should be the
+absolute directory path you'd like to use as the root of your sample
+installation tree. For example,
+
+ mkdir /fs1/bash-install
+ make install DESTDIR=/fs1/bash-install
+
+will install 'bash' into '/fs1/bash-install/usr/local/bin/bash', the
+documentation into directories within
+'/fs1/bash-install/usr/local/share', the example loadable builtins into
+'/fs1/bash-install/usr/local/lib/bash', and so on. You can use the
+usual 'exec_prefix' and 'prefix' variables to alter the directory paths
+beneath the value of 'DESTDIR'.
+
+ The GNU Makefile standards provide a more complete description of
+these variables and their effects.
+
+
+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 needs 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-libintl-prefix[=PREFIX]'
+ Define this to make Bash link with a locally-installed version of
+ the libintl library instead of the version in 'lib/intl'.
+
+'--with-libiconv-prefix[=PREFIX]'
+ Define this to make Bash look for libiconv in PREFIX instead of the
+ standard system locations. There is no version included with Bash.
+
+'--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, linked, and installed, 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-separate-helpfiles'
+ Use external files for the documentation displayed by the 'help'
+ builtin instead of storing the text internally.
+
+'--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 'alt-array-implementation',
+'disabled-builtins', 'direxpand-default', 'strict-posix-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-alt-array-implementation'
+ This builds bash using an alternate implementation of arrays (*note
+ Arrays::) that provides faster access at the expense of using more
+ memory (sometimes many times more, depending on how sparse an array
+ is).
+
+'--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-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-translatable-strings'
+ Enable support for '$"STRING"' translatable strings (*note Locale
+ Translation::).
+
+'--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/> and from
+<http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz>.
+
+ 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 a '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 275)
+* alias: Bash Builtins. (line 11)
+* bg: Job Control Builtins.
+ (line 7)
+* bind: Bash Builtins. (line 21)
+* break: Bourne Shell Builtins.
+ (line 37)
+* builtin: Bash Builtins. (line 108)
+* caller: Bash Builtins. (line 117)
+* cd: Bourne Shell Builtins.
+ (line 45)
+* command: Bash Builtins. (line 134)
+* compgen: Programmable Completion Builtins.
+ (line 12)
+* complete: Programmable Completion Builtins.
+ (line 30)
+* compopt: Programmable Completion Builtins.
+ (line 238)
+* continue: Bourne Shell Builtins.
+ (line 90)
+* declare: Bash Builtins. (line 154)
+* dirs: Directory Stack Builtins.
+ (line 7)
+* disown: Job Control Builtins.
+ (line 104)
+* echo: Bash Builtins. (line 257)
+* enable: Bash Builtins. (line 306)
+* eval: Bourne Shell Builtins.
+ (line 99)
+* exec: Bourne Shell Builtins.
+ (line 107)
+* exit: Bourne Shell Builtins.
+ (line 125)
+* export: Bourne Shell Builtins.
+ (line 132)
+* fc: Bash History Builtins.
+ (line 10)
+* fg: Job Control Builtins.
+ (line 17)
+* getopts: Bourne Shell Builtins.
+ (line 148)
+* hash: Bourne Shell Builtins.
+ (line 192)
+* help: Bash Builtins. (line 342)
+* history: Bash History Builtins.
+ (line 46)
+* jobs: Job Control Builtins.
+ (line 27)
+* kill: Job Control Builtins.
+ (line 58)
+* let: Bash Builtins. (line 361)
+* local: Bash Builtins. (line 369)
+* logout: Bash Builtins. (line 385)
+* mapfile: Bash Builtins. (line 390)
+* popd: Directory Stack Builtins.
+ (line 35)
+* printf: Bash Builtins. (line 436)
+* pushd: Directory Stack Builtins.
+ (line 69)
+* pwd: Bourne Shell Builtins.
+ (line 212)
+* read: Bash Builtins. (line 488)
+* readarray: Bash Builtins. (line 585)
+* readonly: Bourne Shell Builtins.
+ (line 222)
+* return: Bourne Shell Builtins.
+ (line 241)
+* set: The Set Builtin. (line 11)
+* shift: Bourne Shell Builtins.
+ (line 262)
+* shopt: The Shopt Builtin. (line 9)
+* source: Bash Builtins. (line 594)
+* suspend: Job Control Builtins.
+ (line 116)
+* test: Bourne Shell Builtins.
+ (line 275)
+* times: Bourne Shell Builtins.
+ (line 360)
+* trap: Bourne Shell Builtins.
+ (line 366)
+* type: Bash Builtins. (line 599)
+* typeset: Bash Builtins. (line 631)
+* ulimit: Bash Builtins. (line 637)
+* umask: Bourne Shell Builtins.
+ (line 415)
+* unalias: Bash Builtins. (line 743)
+* unset: Bourne Shell Builtins.
+ (line 433)
+* 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 126)
+* ]]: Conditional Constructs.
+ (line 126)
+* {: 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 84)
+* 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 55)
+* #: Special Parameters. (line 39)
+* $: Special Parameters. (line 51)
+* $!: Special Parameters. (line 56)
+* $#: Special Parameters. (line 40)
+* $$: Special Parameters. (line 52)
+* $*: Special Parameters. (line 10)
+* $-: Special Parameters. (line 47)
+* $0: Special Parameters. (line 61)
+* $?: Special Parameters. (line 43)
+* $@: Special Parameters. (line 23)
+* $_: Bash Variables. (line 14)
+* *: Special Parameters. (line 9)
+* -: Special Parameters. (line 46)
+* 0: Special Parameters. (line 60)
+* ?: Special Parameters. (line 42)
+* @: Special Parameters. (line 22)
+* _: Bash Variables. (line 13)
+* active-region-end-color: Readline Init File Syntax.
+ (line 51)
+* active-region-start-color: Readline Init File Syntax.
+ (line 38)
+* auto_resume: Job Control Variables.
+ (line 6)
+* BASH: Bash Variables. (line 23)
+* BASHOPTS: Bash Variables. (line 26)
+* BASHPID: Bash Variables. (line 35)
+* BASH_ALIASES: Bash Variables. (line 42)
+* BASH_ARGC: Bash Variables. (line 51)
+* BASH_ARGV: Bash Variables. (line 64)
+* BASH_ARGV0: Bash Variables. (line 76)
+* BASH_CMDS: Bash Variables. (line 84)
+* BASH_COMMAND: Bash Variables. (line 93)
+* BASH_COMPAT: Bash Variables. (line 100)
+* BASH_ENV: Bash Variables. (line 116)
+* BASH_EXECUTION_STRING: Bash Variables. (line 122)
+* BASH_LINENO: Bash Variables. (line 125)
+* BASH_LOADABLES_PATH: Bash Variables. (line 133)
+* BASH_REMATCH: Bash Variables. (line 137)
+* BASH_SOURCE: Bash Variables. (line 145)
+* BASH_SUBSHELL: Bash Variables. (line 152)
+* BASH_VERSINFO: Bash Variables. (line 158)
+* BASH_VERSION: Bash Variables. (line 181)
+* BASH_XTRACEFD: Bash Variables. (line 184)
+* bell-style: Readline Init File Syntax.
+ (line 64)
+* bind-tty-special-chars: Readline Init File Syntax.
+ (line 71)
+* blink-matching-paren: Readline Init File Syntax.
+ (line 76)
+* CDPATH: Bourne Shell Variables.
+ (line 9)
+* CHILD_MAX: Bash Variables. (line 195)
+* colored-completion-prefix: Readline Init File Syntax.
+ (line 81)
+* colored-stats: Readline Init File Syntax.
+ (line 91)
+* COLUMNS: Bash Variables. (line 202)
+* comment-begin: Readline Init File Syntax.
+ (line 97)
+* completion-display-width: Readline Init File Syntax.
+ (line 102)
+* completion-ignore-case: Readline Init File Syntax.
+ (line 109)
+* completion-map-case: Readline Init File Syntax.
+ (line 114)
+* completion-prefix-display-length: Readline Init File Syntax.
+ (line 120)
+* completion-query-items: Readline Init File Syntax.
+ (line 127)
+* COMPREPLY: Bash Variables. (line 254)
+* COMP_CWORD: Bash Variables. (line 208)
+* COMP_KEY: Bash Variables. (line 237)
+* COMP_LINE: Bash Variables. (line 214)
+* COMP_POINT: Bash Variables. (line 219)
+* COMP_TYPE: Bash Variables. (line 227)
+* COMP_WORDBREAKS: Bash Variables. (line 241)
+* COMP_WORDS: Bash Variables. (line 247)
+* convert-meta: Readline Init File Syntax.
+ (line 138)
+* COPROC: Bash Variables. (line 260)
+* DIRSTACK: Bash Variables. (line 264)
+* disable-completion: Readline Init File Syntax.
+ (line 148)
+* echo-control-characters: Readline Init File Syntax.
+ (line 153)
+* editing-mode: Readline Init File Syntax.
+ (line 158)
+* EMACS: Bash Variables. (line 274)
+* emacs-mode-string: Readline Init File Syntax.
+ (line 164)
+* enable-active-region: Readline Init File Syntax.
+ (line 174)
+* enable-bracketed-paste: Readline Init File Syntax.
+ (line 187)
+* enable-keypad: Readline Init File Syntax.
+ (line 196)
+* ENV: Bash Variables. (line 279)
+* EPOCHREALTIME: Bash Variables. (line 284)
+* EPOCHSECONDS: Bash Variables. (line 292)
+* EUID: Bash Variables. (line 299)
+* EXECIGNORE: Bash Variables. (line 303)
+* expand-tilde: Readline Init File Syntax.
+ (line 207)
+* FCEDIT: Bash Variables. (line 316)
+* FIGNORE: Bash Variables. (line 320)
+* FUNCNAME: Bash Variables. (line 326)
+* FUNCNEST: Bash Variables. (line 343)
+* GLOBIGNORE: Bash Variables. (line 348)
+* GROUPS: Bash Variables. (line 355)
+* histchars: Bash Variables. (line 361)
+* HISTCMD: Bash Variables. (line 376)
+* HISTCONTROL: Bash Variables. (line 382)
+* HISTFILE: Bash Variables. (line 398)
+* HISTFILESIZE: Bash Variables. (line 402)
+* HISTIGNORE: Bash Variables. (line 413)
+* history-preserve-point: Readline Init File Syntax.
+ (line 211)
+* history-size: Readline Init File Syntax.
+ (line 217)
+* HISTSIZE: Bash Variables. (line 433)
+* HISTTIMEFORMAT: Bash Variables. (line 440)
+* HOME: Bourne Shell Variables.
+ (line 13)
+* horizontal-scroll-mode: Readline Init File Syntax.
+ (line 226)
+* HOSTFILE: Bash Variables. (line 448)
+* HOSTNAME: Bash Variables. (line 459)
+* HOSTTYPE: Bash Variables. (line 462)
+* IFS: Bourne Shell Variables.
+ (line 18)
+* IGNOREEOF: Bash Variables. (line 465)
+* input-meta: Readline Init File Syntax.
+ (line 235)
+* INPUTRC: Bash Variables. (line 475)
+* INSIDE_EMACS: Bash Variables. (line 479)
+* isearch-terminators: Readline Init File Syntax.
+ (line 245)
+* keymap: Readline Init File Syntax.
+ (line 252)
+* LANG: Creating Internationalized Scripts.
+ (line 51)
+* LANG <1>: Bash Variables. (line 485)
+* LC_ALL: Bash Variables. (line 489)
+* LC_COLLATE: Bash Variables. (line 493)
+* LC_CTYPE: Bash Variables. (line 500)
+* LC_MESSAGES: Creating Internationalized Scripts.
+ (line 51)
+* LC_MESSAGES <1>: Bash Variables. (line 505)
+* LC_NUMERIC: Bash Variables. (line 509)
+* LC_TIME: Bash Variables. (line 513)
+* LINENO: Bash Variables. (line 517)
+* LINES: Bash Variables. (line 522)
+* MACHTYPE: Bash Variables. (line 528)
+* MAIL: Bourne Shell Variables.
+ (line 22)
+* MAILCHECK: Bash Variables. (line 532)
+* MAILPATH: Bourne Shell Variables.
+ (line 27)
+* MAPFILE: Bash Variables. (line 540)
+* mark-modified-lines: Readline Init File Syntax.
+ (line 282)
+* mark-symlinked-directories: Readline Init File Syntax.
+ (line 287)
+* match-hidden-files: Readline Init File Syntax.
+ (line 292)
+* menu-complete-display-prefix: Readline Init File Syntax.
+ (line 299)
+* meta-flag: Readline Init File Syntax.
+ (line 235)
+* OLDPWD: Bash Variables. (line 544)
+* OPTARG: Bourne Shell Variables.
+ (line 34)
+* OPTERR: Bash Variables. (line 547)
+* OPTIND: Bourne Shell Variables.
+ (line 38)
+* OSTYPE: Bash Variables. (line 551)
+* output-meta: Readline Init File Syntax.
+ (line 304)
+* page-completions: Readline Init File Syntax.
+ (line 312)
+* PATH: Bourne Shell Variables.
+ (line 42)
+* PIPESTATUS: Bash Variables. (line 554)
+* POSIXLY_CORRECT: Bash Variables. (line 559)
+* PPID: Bash Variables. (line 569)
+* PROMPT_COMMAND: Bash Variables. (line 573)
+* PROMPT_DIRTRIM: Bash Variables. (line 579)
+* PS0: Bash Variables. (line 585)
+* PS1: Bourne Shell Variables.
+ (line 48)
+* PS2: Bourne Shell Variables.
+ (line 53)
+* PS3: Bash Variables. (line 590)
+* PS4: Bash Variables. (line 595)
+* PWD: Bash Variables. (line 603)
+* RANDOM: Bash Variables. (line 606)
+* READLINE_ARGUMENT: Bash Variables. (line 612)
+* READLINE_LINE: Bash Variables. (line 616)
+* READLINE_MARK: Bash Variables. (line 620)
+* READLINE_POINT: Bash Variables. (line 626)
+* REPLY: Bash Variables. (line 630)
+* revert-all-at-newline: Readline Init File Syntax.
+ (line 322)
+* SECONDS: Bash Variables. (line 633)
+* SHELL: Bash Variables. (line 642)
+* SHELLOPTS: Bash Variables. (line 647)
+* SHLVL: Bash Variables. (line 656)
+* show-all-if-ambiguous: Readline Init File Syntax.
+ (line 329)
+* show-all-if-unmodified: Readline Init File Syntax.
+ (line 335)
+* show-mode-in-prompt: Readline Init File Syntax.
+ (line 344)
+* skip-completed-text: Readline Init File Syntax.
+ (line 350)
+* SRANDOM: Bash Variables. (line 661)
+* TEXTDOMAIN: Creating Internationalized Scripts.
+ (line 51)
+* TEXTDOMAINDIR: Creating Internationalized Scripts.
+ (line 51)
+* TIMEFORMAT: Bash Variables. (line 670)
+* TMOUT: Bash Variables. (line 708)
+* TMPDIR: Bash Variables. (line 720)
+* UID: Bash Variables. (line 724)
+* vi-cmd-mode-string: Readline Init File Syntax.
+ (line 363)
+* vi-ins-mode-string: Readline Init File Syntax.
+ (line 374)
+* visible-stats: Readline Init File Syntax.
+ (line 385)
+
+
+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 131)
+* 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 11)
+* backward-kill-word (M-<DEL>): Commands For Killing.
+ (line 28)
+* 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 66)
+* character-search (C-]): Miscellaneous Commands.
+ (line 42)
+* character-search-backward (M-C-]): Miscellaneous Commands.
+ (line 47)
+* clear-display (M-C-l): Commands For Moving. (line 48)
+* clear-screen (C-l): Commands For Moving. (line 53)
+* 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 69)
+* copy-forward-word (): Commands For Killing.
+ (line 74)
+* copy-region-as-kill (): Commands For Killing.
+ (line 65)
+* 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 57)
+* digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6)
+* display-shell-version (C-x C-v): Miscellaneous Commands.
+ (line 116)
+* do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands.
+ (line 14)
+* downcase-word (M-l): Commands For Text. (line 62)
+* 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)
+* fetch-history (): Commands For History.
+ (line 103)
+* 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 33)
+* forward-word (M-f): Commands For Moving. (line 18)
+* glob-complete-word (M-g): Miscellaneous Commands.
+ (line 98)
+* glob-expand-word (C-x *): Miscellaneous Commands.
+ (line 104)
+* glob-list-expansions (C-x g): Miscellaneous Commands.
+ (line 110)
+* history-and-alias-expand-line (): Miscellaneous Commands.
+ (line 134)
+* history-expand-line (M-^): Miscellaneous Commands.
+ (line 124)
+* history-search-backward (): Commands For History.
+ (line 57)
+* history-search-forward (): Commands For History.
+ (line 51)
+* history-substring-search-backward (): Commands For History.
+ (line 69)
+* history-substring-search-forward (): Commands For History.
+ (line 63)
+* insert-comment (M-#): Miscellaneous Commands.
+ (line 61)
+* insert-completions (M-*): Commands For Completion.
+ (line 22)
+* insert-last-argument (M-. or M-_): Miscellaneous Commands.
+ (line 137)
+* kill-line (C-k): Commands For Killing.
+ (line 6)
+* kill-region (): Commands For Killing.
+ (line 61)
+* kill-whole-line (): Commands For Killing.
+ (line 19)
+* kill-word (M-d): Commands For Killing.
+ (line 23)
+* magic-space (): Miscellaneous Commands.
+ (line 127)
+* 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 45)
+* non-incremental-reverse-search-history (M-p): Commands For History.
+ (line 39)
+* operate-and-get-next (C-o): Commands For History.
+ (line 96)
+* overwrite-mode (): Commands For Text. (line 70)
+* 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 57)
+* 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 37)
+* shell-backward-word (M-C-b): Commands For Moving. (line 30)
+* shell-expand-line (M-C-e): Miscellaneous Commands.
+ (line 119)
+* shell-forward-word (M-C-f): Commands For Moving. (line 26)
+* shell-kill-word (M-C-d): Commands For Killing.
+ (line 32)
+* shell-transpose-words (M-C-t): Commands For Killing.
+ (line 41)
+* skip-csi-sequence (): Miscellaneous Commands.
+ (line 52)
+* spell-correct-word (C-x s): Miscellaneous Commands.
+ (line 92)
+* start-kbd-macro (C-x (): Keyboard Macros. (line 6)
+* tilde-expand (M-&): Miscellaneous Commands.
+ (line 30)
+* transpose-chars (C-t): Commands For Text. (line 47)
+* transpose-words (M-t): Commands For Text. (line 53)
+* undo (C-_ or C-x C-u): Miscellaneous Commands.
+ (line 23)
+* universal-argument (): Numeric Arguments. (line 10)
+* unix-filename-rubout (): Commands For Killing.
+ (line 52)
+* unix-line-discard (C-u): Commands For Killing.
+ (line 16)
+* unix-word-rubout (C-w): Commands For Killing.
+ (line 48)
+* upcase-word (M-u): Commands For Text. (line 58)
+* yank (C-y): Commands For Killing.
+ (line 79)
+* yank-last-arg (M-. or M-_): Commands For History.
+ (line 84)
+* yank-nth-arg (M-C-y): Commands For History.
+ (line 75)
+* yank-pop (M-y): Commands For Killing.
+ (line 82)
+
+
+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)
+* Compatibility Level: Shell Compatibility Mode.
+ (line 6)
+* Compatibility Mode: Shell Compatibility Mode.
+ (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)
+* internationalized scripts: Creating Internationalized Scripts.
+ (line 3)
+* 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)
+* reserved words: Reserved Words. (line 6)
+* 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)
+* string translations: Creating Internationalized Scripts.
+ (line 3)
+* 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: Top899
+Node: Introduction2821
+Node: What is Bash?3037
+Node: What is a shell?4151
+Node: Definitions6689
+Node: Basic Shell Features9640
+Node: Shell Syntax10859
+Node: Shell Operation11885
+Node: Quoting13178
+Node: Escape Character14482
+Node: Single Quotes14967
+Node: Double Quotes15315
+Node: ANSI-C Quoting16593
+Node: Locale Translation17903
+Node: Creating Internationalized Scripts19214
+Node: Comments23331
+Node: Shell Commands23949
+Node: Reserved Words24887
+Node: Simple Commands25643
+Node: Pipelines26297
+Node: Lists29296
+Node: Compound Commands31091
+Node: Looping Constructs32103
+Node: Conditional Constructs34598
+Node: Command Grouping49086
+Node: Coprocesses50564
+Node: GNU Parallel53227
+Node: Shell Functions54144
+Node: Shell Parameters62029
+Node: Positional Parameters66417
+Node: Special Parameters67319
+Node: Shell Expansions70533
+Node: Brace Expansion72660
+Node: Tilde Expansion75394
+Node: Shell Parameter Expansion78015
+Node: Command Substitution96366
+Node: Arithmetic Expansion97721
+Node: Process Substitution98689
+Node: Word Splitting99809
+Node: Filename Expansion101753
+Node: Pattern Matching104502
+Node: Quote Removal109504
+Node: Redirections109799
+Node: Executing Commands119459
+Node: Simple Command Expansion120129
+Node: Command Search and Execution122239
+Node: Command Execution Environment124617
+Node: Environment127652
+Node: Exit Status129315
+Node: Signals131099
+Node: Shell Scripts134548
+Node: Shell Builtin Commands137575
+Node: Bourne Shell Builtins139613
+Node: Bash Builtins161079
+Node: Modifying Shell Behavior191935
+Node: The Set Builtin192280
+Node: The Shopt Builtin202881
+Node: Special Builtins218793
+Node: Shell Variables219772
+Node: Bourne Shell Variables220209
+Node: Bash Variables222313
+Node: Bash Features255128
+Node: Invoking Bash256141
+Node: Bash Startup Files262154
+Node: Interactive Shells267285
+Node: What is an Interactive Shell?267696
+Node: Is this Shell Interactive?268345
+Node: Interactive Shell Behavior269160
+Node: Bash Conditional Expressions272789
+Node: Shell Arithmetic277431
+Node: Aliases280375
+Node: Arrays282988
+Node: The Directory Stack289379
+Node: Directory Stack Builtins290163
+Node: Controlling the Prompt294423
+Node: The Restricted Shell297388
+Node: Bash POSIX Mode299998
+Node: Shell Compatibility Mode311916
+Node: Job Control320483
+Node: Job Control Basics320943
+Node: Job Control Builtins325945
+Node: Job Control Variables331740
+Node: Command Line Editing332896
+Node: Introduction and Notation334567
+Node: Readline Interaction336190
+Node: Readline Bare Essentials337381
+Node: Readline Movement Commands339170
+Node: Readline Killing Commands340130
+Node: Readline Arguments342051
+Node: Searching343095
+Node: Readline Init File345281
+Node: Readline Init File Syntax346542
+Node: Conditional Init Constructs370128
+Node: Sample Init File374324
+Node: Bindable Readline Commands377448
+Node: Commands For Moving378652
+Node: Commands For History380703
+Node: Commands For Text385697
+Node: Commands For Killing389346
+Node: Numeric Arguments392379
+Node: Commands For Completion393518
+Node: Keyboard Macros397709
+Node: Miscellaneous Commands398397
+Node: Readline vi Mode404342
+Node: Programmable Completion405249
+Node: Programmable Completion Builtins413029
+Node: A Programmable Completion Example423781
+Node: Using History Interactively429029
+Node: Bash History Facilities429713
+Node: Bash History Builtins432718
+Node: History Interaction437742
+Node: Event Designators441362
+Node: Word Designators442716
+Node: Modifiers444476
+Node: Installing Bash446284
+Node: Basic Installation447421
+Node: Compilers and Options451143
+Node: Compiling For Multiple Architectures451884
+Node: Installation Names453576
+Node: Specifying the System Type455685
+Node: Sharing Defaults456402
+Node: Operation Controls457075
+Node: Optional Features458033
+Node: Reporting Bugs469252
+Node: Major Differences From The Bourne Shell470527
+Node: GNU Free Documentation License487376
+Node: Indexes512553
+Node: Builtin Index513007
+Node: Reserved Word Index519834
+Node: Variable Index522282
+Node: Function Index539056
+Node: Concept Index552840
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/doc/bashref.pdf b/doc/bashref.pdf
new file mode 100644
index 0000000..eb8b766
--- /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..02ab1d3
--- /dev/null
+++ b/doc/bashref.ps
@@ -0,0 +1,22641 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 2021.1 Copyright 2021 Radical Eye Software
+%%Title: bashref.dvi
+%%CreationDate: Mon Sep 19 16:02:49 2022
+%%Pages: 196
+%%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 2022.09.19:1202
+%%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 67 /C put
+dup 68 /D put
+dup 72 /H put
+dup 73 /I 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 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
+C7F53E585E03B2FF056EECFB7ABAC474A981D757AB3B6F2815E7AA8AF8BBA42D
+4D83EF8A0FE21CA5EBC295042AE5D74E6D05BECCEFDC74ACDD0A59AFDAD3E94F
+141E4BFA04ABEF7E6C43418A5EC54C6E8CCEA1C34DDFAC9CC87DD5E9D4BEE705
+F11B003956DB37B145DDEF022C645C19329E6C04E1EDCDB5F6A33AF1EDB9A17F
+79066B1C3579E70B2D43DD89D1F5FD2B2015FA5009D612781CF4916DD8C7B1B5
+21FF0CFAFCE882A106D356D8851F73635A4E7C81FE0BF6378DC2219BC883E3A8
+23290969A2ACC06A77866A8AB83B39289EB14B4F67511FC97F3BE410B4DE91C3
+54876DEB96AB3C60D1FB17D29172F96E98D3FA77B772C69D17A757B6CE32D2C1
+67182DC41B5E19F31F669A886DD4D08092AFAE132C0E0FF810FCBF937EB3AF0F
+5AF1416C11508EBDE0C0EC1C618CB6F66658D9CA3793D523D224F8C9A8ADF6B8
+16CE7D210FD4771ADCFEF08809C0E9A37170F0C02A9C9907FE38DF8795C6093E
+0DD464FC59313CA7EEF4658A498CFDA9458AA1A86B2A0933182954BFEC58E9AB
+3BF65DEF9BE5289826A7AE0AB0E93D83178049CCF8BADDAA7BCBCCA47F983E22
+3CCBB9D2D522DA2A5EDF409A862A52297FAC35CE11176A8B89671BE758CEA324
+5BD245937C46D52F15241E22F803F77E7B5ED83B6395F5387EA7CA46E1DB1F8D
+239374BE3F4640A6FE06CE65A07123B722523AB913DA6EA385F524940432DC0D
+CE2A2A50539C42DC0942ACC30D372BACF8192645F9943391A602A019EDD69241
+BB0EF67C1C367344D82F5669A75D5234A3FE9312EB4C6BE310722AF8065835F7
+E55443034F04E4B41F321B7CF95EF163231979A8D7D2E7B982D6DE774E8F4CCD
+D846A38D9029028C50A99ECE834C67F7CA30F39F4D1803B3CDF4D19FBC3D1FED
+EA3F72427D13D6C51FB97E417D38E4AD86E93498AC245EA17317EEE503D11C60
+E6981F07798D11364ACCAA0F06E6D748584EEC92720F50B71157AB2887406B13
+491C79A0054F145417D7E4902CBB38AF4DFAB4F84E25985A6FBF308D974457D0
+8FACC57B056749382FD35F7D9CFC58B2616D205CA0328294C7F47AB9EB50E1D3
+56B4AA213B1605985939AA68DEBCA1F50407136AE16196EA910089D913A4DDA8
+079F046AAD1DFBBD36DF39C43CF356E40972D8AE3F044F31320A3567520331CD
+67227812DF611C31DF6C7B420A170B43A478D0678F615AE88B94646F0F1A400D
+3E6FE22E584B1197B373FF2A0CA5C90CCF064A5C8A08170269E967DA2833840B
+BE87A26B8A5C80F8460100D97C17B62BB62F5F4DDF270DCE6C4F08A733EE750F
+6FA75D57A96F5EA3D089D5634FE7C29D6A3DD8206FFAC31EFD273484042313DC
+406A646C898E7FCAB097C6E362CE13741CC04549691C6BC246D9FA598AD671DE
+81A05E8D011A838E3B9F984676E03BB77EAA1B1256C04028801748155A2B5082
+57E9BFA74C3C18BBBDB7458B5AA3D484CA516A265A9132CA6A16A1C6A1E8F600
+9F9368F4E22AC348EBB52736035A4A4524BCD4B2EF54314007FC9AF134754FD2
+C20294DA556EF82639E26A3014F597955B8766C1E317D21E978A2ACEBAAFD25B
+6D27E861E254230360B34431BB58A0037C3372CFDF13DD806DC6ED6B0CA4C96F
+B7018FE26AA64C1D23879F117F9969FCBD649805FE66D5B439F6531E5D841B0F
+43D110BFE886A11CE54869E036D6480F6C6E0DDE33B40D605671D99A6D297C82
+65B1F442602A026AB0B73BCBCE1B098C423CC623D40D679E45052492E5129675
+F1CA105AE94D7BBF162E8B3CFECC63429E866ED4CBB69F25687DB74A330C7F5F
+9727BD3DCF5890FA9BEE5A7BD997433CDD1315850B490DD4EF503BC1A4F30F93
+F032E761C9B4A099ECB96F1DDCE4262FBD75620EDD89659CBC70EE3FEF7C50AE
+CB47D9BD8BDDFB7D5ADFCE11EF6871AB41369A582211BB5680DEE2BC141259C3
+08B73E26815015B99AC3683EDD9EBC880A5A64EA728DE0AD8B038D666955E6C4
+0CB961183309835A70BE28AC86A0C90EBCDE36B2C2F9DCF6E61B27845C048932
+1D9CD3F5E7EE7157A478A9B624C46E044AA050942FF1E15C8553321D36EA7586
+3D4A7CB9D971063AF089F6B2A288A83513B4EE3A0F3CF537633604E31FD22B04
+A7A63C54535D31129C4713E5561100F41F596A2771E3399A84C7798C187AC61D
+359E2181B61DEC7EBB1E38A5B188A85B9E0A4CC22E0AE4FDFCFE8DD776C703DF
+D581E9F3F68DC63B91B7CC430EAE05D7451345EE9928B18947D1EF0907138FE8
+EC9F98CEECEABDB91CE0DC993391632A2993E0F23EDB138C388ED74AA061F4AB
+A9879A48EF233D72C2CC6A976212801677FF31818CAA227205687600362634E6
+380A6FE49F7A3E111B50DC40B97D58A7138BEF9BF2D58633643715D96F09568F
+D192E619E4DF5BAD6E934C3AA1E29579E85127024193F3866F235C58A9A097F1
+56158AEDDC8A1B66777C28E798DFFD2404507A1E793E990ABEA01D772343B3C8
+0258461306AB5112B36455E39B024D544BC723C61AE4756B78B97566546201F4
+77EF79F142297609B74AAF54FBB44473197E0B5A706FF921C1D7B80CBFF03524
+C6C9B37BF5FF366B0D60026FBE01D9A213905B384449F62FFC7F872114C64F01
+1BD76FF84899641A793D10A504F0B56A7500354C748A68EA4396296F0EE9448C
+1997C351D262E9055D2265E4C467FBA11F97E80B6A862D398D341E46212B0389
+08BFCB93BB7ED61C0E4D3BAB05C9A620E78E19342F02A9433B97CF7ACB027528
+E70EA97389D55DDA0FE4BAF2BA8205D3ECD294BC8EC81293C9A11F79C87EEFC6
+C18A8AEEA8F0987BC183C9EED25A91F77408952DDBA65BA715018CDF4145B64A
+393ABA54A176F8DCF83A5238D538B3E7B569229F5C4CFAC3CC9827661AF20F1B
+44A7930D1DA6688FC1B11BAF855E3E994751E9FE7BF4D588816618A022E25673
+F9C2D9D9AD9C6A16CCC923BD9E94E9A916C6561E692724C499F0A49E13762197
+DE52122CCBF93E3505209FF7F66A36780C7492650F4534E5984642BC7844C69C
+0DC60DD6145A5B1662884BB82E4A97EFF6541D10D8799707CA86591BD8CD4CB8
+59BFD8D36AF4D1DCCA1433F20CDD724F3550D88875CDF3FFD49C6F1EA956576B
+A1C64746D10C0EE07644371CD7FA3388C308B0E20918061607730E92A11057C2
+27303C387E163212DA3C5EE8952BD9F7F328E35D7AD3CC0FB84943ADB0BAD7E9
+6B4426FA53EEA4F2155359CD3F8E8DD5F0A1FB0B6C8F6A83F5B8BB179FB57256
+57A3DB758AE0F7B0D3A636F09AD0A86BE31303A6F48F2B925B6EF764DE59C3E7
+C995C5422BB61BDD691A5980CCC3639234A7A48A351E67E7ED9F0314B2074210
+36725D5306BBA32DB24BCDBE3F989EC1BB9CFFFDC156280BE9A7F7253F7F4516
+0F368A18CA6B1DCAA5C99693B6B0F593400D09AB18EC8F741091A32E5B5F9BE6
+B628F840E28643A9BF7E24D37E9C39A05BB70479AE6C9905E9B763F23E546A54
+8231D1A6009C658AEA37CA6FD5D2A36604370262583DE5CE3568999E594E5A3F
+4D665BBE80C7109A6FF96A856B511F4251555B7FCFA55FB1F739922F7E62F396
+482ED48EFC10B10E6D68148DE88308307BB7643999890BBBAAF2D11484425A43
+B41A4F2F076CA8D187074F3621C0E4326F7B48D5F582A91763A02CAA769947C6
+A424FA57F87E92EB9B199A540A05D4C65D121321BDD09F99EFFD4D43536EC180
+2A2DA1672CA05956D8737D514B088DCAB5D09C633A75BFD6CD35105A9DE88968
+F46E049EB38822AABEFC6EFC14A693555A7D35BD96764D7B915E6A1153A9F5B3
+84A79D547CA8DFFCC4D1F1C168EB6EF6450DC470DBE0A72D1264EDD2375C69AE
+554AB2DCC7F966F013F0A76F0FBEA1CAACBCE1B372F098EB069DC35688E6A4AD
+6F29454E371DA51CEA13A8E8ACFE916389DBCB162CC81964B4ABE791BB71A27C
+51E24E7571CD8FD16BB862199B562E1B9965AD602A77A644E687129A6980F2F0
+F6C1CB584BB8FD1D1A1F8BAA3812CE8D051D23014622A8A508E4296541EE9846
+4A2551A843B6977091E90E9006ED40E62D487ABF2B48633F09080C6C06B390BA
+CEF77C69E858E23547FBF6F22BC51C1C5ECF5430588F006EF7B3DC6DC0B0356E
+CC8F8099721A5E3475857C1F906A11BDADD1FB27B3A8683FBE50BAF54CD4F4F9
+9EB56147DDDE5B5D861CC8B89DFF9502E088AF20947AE7F72BD6F427F617A7C4
+6A3062AF9029071BE53A25E8C329CD0EE5FD191FA2CC3DFD4D623217C5F6C82D
+5FC9661900C111EAD81C6A88FDD47AF5D4B72B0FF9C658139FA478A05EE75DEB
+83AD2C79BF78D9CA975BE573AFAAB5E5F0F01E0DD9ED868BEFFACB15DEF79237
+6E685CEEC76F5884B37F94D8FF36D3FE25A771CE4523D4F4D7D53904683BBF91
+18996F3FA2090CDDAFF660AD63D9B5CABFEBD576C0F8ADA93B13EEB8147C1976
+C0172D637ED71C995EDA78AB85C3654D1441DCB41083C4EF1A123980F96FDD80
+6D4190183B4153BC8BE62232A0D6493D7A17C1644057A21E1AFE7322406F27C3
+94E714925202996554228981A8C39EF9AFB30F5EBCEDDF39DEEE3824D78C6437
+FA7FEE75F3B2280DAC4D76339F99F5848B0BB425B127DCC6EB20C1CA50A5233C
+793276BFA23F8B2CC4E061BD5797563ABCD7DDF79BF0957436A26D32723EE772
+AA63FC5F282FB238676439B1868946D59ABA007C5C5A2100A0878AE07DEA3CBB
+B14FF6E4F69F2A443D7551A6BEBA2C1654E3A8F3058DA2DC0A26CA05C8724013
+39D3B730E70893F0AB453F43DD2E802A46CF66A3E67CAAAB0C4357F167FFC174
+A9BF4E1BEBCF56DFAE9C5A76577FE0AEB09A738E6BED9E62BDF7BCF5B624312F
+E48B9DE428BAF38EF9AF8F450CF90E8BCF452D1888C42CEF8BBF2A75953E1F64
+AE35EE604F03199852323AFCCC72CCB2C20C489F2514BF347BBB5930BD425888
+6FF69321A007E21D77F57367F9D41E5D0E01171E96EECA01175F3F85A946C621
+9531EE5570189773AEC2E9D9F2AE5E4CEF742E80FBF22B0A3D4C56D825689D81
+6F6186E00B39E9054559F4C05D35EEA024C8B2AD71F0573BCD1B781F31BB44E6
+FDCE0787C66554093121FB5DCFBF83F06092DFF4E1FD10E6195ED375F9B4AF57
+0186238CFBC277EADC64675C7A9F2F2E17BB2652024C2E9AFBB0D9852D6D4B15
+2ED2EE3374436C58A78EAA552617F8694F123FDA2ED16E7E2D4C45593E0EB4B6
+3257A22F303D0D0AFF77A320967E5FBCCE40BA0FEBB14DCD0649B63A68C6F78E
+53DB018C87D8FF4FD1DD789159E76F50CAE880AAB7850FFD309B0B929A641DE0
+FBA51339C4ED5D050398A37EEAAF4D84EB7223D3557E846123462EB60CB8C35F
+8B5A628A16692B1EDDEF9ADA7C53FC1BFC1159A2290682ABA5888506482FC7C5
+26A27CDAE23C5D7079FCFE42CB1BCAF8358886B08585872528C6699442358D53
+FDA54CBF9A6D5AFA19450A5D394D209570C970679BB11806423E7A451D7811AD
+6284843A4CBB0B7591646B650BDB39E17C6344F846A2F3318CABA7BE6BEE67D4
+712AABD80A4623DB2D797B9D109B7403C46659EA299C8274CB49E9D31A0A9889
+5747621182A9986751141890719C900A785C4DD03C8476C2A3DDF1FC85441D6D
+089C7C126A72D8950A453C8C40CF92FBF4107DCC4653E836264BD29F584E1B73
+47B9234FDAEBF0768968BB1F75871DBC0C39CED01611F823B6A17742FF4C407F
+6E514DA20DAB72B53D3752B3F2CB8AA720A3F1A4E71938DEE47821E16E97E0F5
+32C9F57335B12B0CEF6B20917C1CC06F035E23F93B6376BE83467C23F0B3A687
+57D9616B932D6BBBF181B6DF116B3D88E5B6B4327F84A16DBABC9ECF4562A96E
+D89A445409AB5599175743E559E9C642361DA758611C0D56ADBEE0B686AF487A
+EF7EC4FA9CD87239886968B7FC3144313F5F9B90D1A76E45718DB65D2F44D123
+81189F26088D950335E085EB3BB1BDAC3AEE5F5A1AD7C44BD119D04693454422
+CFC2855C6667E64CD8FCC76088F3DB888DA386CB77A060B52930576B80E6CCE1
+D393E689AD64D9A3A3BB37C0EC3CF9286488CFAB18D656E1A0F1B078BC8F5D63
+4B56A82578844BE89201880C0863BBF7F35F1983FBC70C5D6372E298B877E6D9
+89B3A60FFCD876C5372605CF2B5C6E3EB4642D14C75DE75DB264111AD783D49E
+F63C3CA3B6D27A2BDA9C9593E6AA5C0A851CA1B8420249B8A3294664BB8025E1
+EF9246BA8D12186C6EBFF3EAE52B4169832CD1E95EFC52F70F0AC1C4AD47E661
+80997CAE243FD5F4B924C597F32E0FE4E32BE29C6063F4813DDCBB96F25955AE
+2E691AE1A7268B0592C934FF2AC5B6F7F54C8858406D1204EF17B09C3CFA171C
+5FD08034D00EF30FE2276F9E1C0788FF3CFA161EA1B9F233991B949E21942DA0
+B1026B5EF71B85BF1393E114FEDFD47189BA3DD480D3633A8A208DCA897150A3
+C47EAA87B8789E7D57543973497D119AD04F4E3FBFC5DC7741FD7645CEA76742
+8F2F551AD179A45C361D5B314692CE4C4E5A571583804F35D3A45A941C46E168
+68844DD4CD99284F2580E45DA23300B47C10B666E1F7B5C25B8BC054ACD1DC44
+12668056ED2E045E777D11836A5BFBF6B1C79AF48659C57910472C8232C37447
+328185C6FFF6CE1E24EB9D29D0B21E6F40BFA843E2FC6DB59A3A576EA7C26F0D
+9275663D03ED3AF206727909CF6E82B1916FED911C5390D4089E33E01D3A3580
+EE8A6D35421297812C7250FAFA6B333655B2A249BA8489146EF66CD31BB734F8
+EC289D5B6541A15D423BA486E7D173676282FA6A12DFAB03FB706DBF0A2C0332
+DAE3E859146D2ADCC1EEDF29AB5E98A4B4085F8F312CE94E5448F93653A44AEB
+1DB10210A1EA1597064BF3BDC2BF8BE227B8E0321884DC1B2C1F426370929D30
+22D72F8329C8DEF5D80E6DECD597158968F60F4B5F910537749E1963C161DBD8
+83D94CC3C7A334722545D617B9A8586489D5B866429D9130E785AFF3DB7F5AA6
+571A01DEF40E75570CC9F48C4BDD044C5D9412683C282406BF2C5DA0B0661528
+7834CECCAF019ACA31D27C4865A11BB664EA1BE6377A972E76A05F12E697569E
+2C400B018F1EB7BB747BD91DE1557E8B85F890A983D5459EEC773DC0CE99B403
+B15CBA9EED2EA4887C7961E8B62C566CAEE124F329F21BAD56E8CA6ECE16A249
+6256504DDF5C84F5D1222076B4DFA6FB430D2142ECD3765B65DF8A6C87278435
+45E4C826C1922E357DF688EB6F4A6AFB6438D94F7E3C444C0372B7C7CD26AAF5
+6C7B8A44EBE6DD58CE6F878747F7E59FFE8F680661EFDD36DFC4771EECE0403C
+F83B20412E006F32870ECF167167974906F99BA655BB23E5E26288535A4AE670
+D3D087F96E076E060AE6A3544570264FC780DA250805993A69D237712BFFE3AD
+E587B70D2970692918D3F80E38A769697E98EF5D034C9CFF6D8387D95E16AF89
+4B558561839DD96439349C745BA98D28DE129BA9334EF36994171DB9F358A41E
+C1E7CEE3DB6B8CA16E93ED1DABD8C89AB3BA454C20F201D24895D2F2186B9079
+B15430E6742BCD6DBF54A4915CA100B043B341B489F9AB72F5AAB8546E1B2704
+E4E8D752DC3E90B1B153A78CD30E00B87B9E812693BB5F8A72BE121FE861DEC2
+EFBC76D20201C0357C93662F6243AB7C003D51B1B3E4C94830361C81B606C747
+6FE16472E5FF087A25540E66BDB10A7B23641E893396A1BE38C102EB4C391648
+DD50D074BC2B3A10AE6E3A2732C5A94DE40547D21B7F9DC11635B8D6D6AC72AB
+4048758EA9F043295973B44B0917B14A8FDDB152D47E92731762B5FBE7E2D424
+A9BCEF2D296B3D8F41E724B6FA037540C465A087037AC77F1AA11A8AFA6B6E1C
+8960CDB46F764CED85F36A34D12AAB1B6722910A9233134C1544DFFB42B98D2F
+83A97B3898EC57DC07EC4BD53D01E467AAFE50DCFF7135DE13ABF0B826558D66
+5B4FC5862C48A5ED474B3F7BE7EFAB84D141BC92EA5AC299AAA26A6AB4C1DE9A
+AF8EF838CBB14C4959BEE5928DC77A84786A0DE55B91B86290651481CB528085
+AECE1722541CC470971F6A2DE7F4B116667189630CA8CBB78541807DBECDE55A
+D5CACBC8BF7AE4100130E499ADA3521C7D59FFF2ADC8826FB85A4B8A7F6A7B5B
+ED19E9C421D8873270FF623B39A4DB33ED21A32A6A282597595C1FF9E849CC85
+F7AEE01F8CBB21F75660B5520501226CD6B872E116BBB746FB9DDD3B3C545175
+0F4661041FA2A8F5EC7601C145AFE3DF783F676291A3BFE672C743CE2254677A
+646CCF082F592F8A2B074ED57BDD4AF9A5DD8D11C86694CFF16A0C67D1FA1C92
+6653A957054357BB9EAEA4C8988599D7B0EB635C03ACD63463EB8F449FDDEC80
+EA43FDD1B6CAB14E3D9B0C2AD3E118E0A0BEBACE1F893939E2DFABE6BD99BAC7
+96083DFF40B552F469AF20D34A434E48EA180BFC8E900F20992601761DA723C6
+1C37176DE8455D0D9D563CD165FF48348F3B5401A5F192F9FED4321E5E765DDD
+824ED3671F21A449D9A623264174B5D64904CC1B10C10AA482E25100F764D76E
+E73A630AC8A559DE6C260965DC16BA31B46517ABC20C5C3D89FC6FC187D0303A
+516C7A2C1C5462E313DAC0C11EAD5D7E771B42B468AB101F284BB94A82432278
+D77E799D2E8F968EA055EB2512EBB67607569173BD75F5154BD3E8BC74B1991E
+5224C3930CBE1E222A4568A043C508FDA7B3A9FC07C994D90DA667C78D28EDF5
+2CD2CE44DDBD236316CB70DFD53D179A78A01F3A0243A88B94B69CE85588A85C
+FFD9A23A0156293DF9A3F5FD01DB8E1674D691E7ECE78E5767271185C231EBC4
+5D91DE1ADFA89EC1A8FE743062D934120AEDB02006FE70DE82F5EE24B36E829B
+0BF2BB312BE578CC81F4F4DA811E6F25DA2D82173620AC20966C9AAEA2819AF9
+0EDE7FD2EA43F7C02A52DBC4E3E91F287D115B835646E53627A041F700D5B631
+1C9236501F2717B2BADA21C20CD9BA48F7BAC488913DF34E5B8679CC4BA71F87
+0FA9968E9D00C5D0CF8AA0FEE7DFF80131C8F5736361C016BDFCD85E28DF8239
+8DE792BC87B0886EFF1D313EFA13D6486478E6A52F5B6383CE563FF948DF4B8C
+33F95133650F966B3D38E9AC0C61C47527193CCFA54EC6368542691480DEF9EF
+0B74E4382CD2D7EAC72D0DDCF86F9FADED7F2E11C10F992BFD6C74A1AA8A1013
+D317438AFC7F22DD3C7EB64AEB8C8F267FA73F398BAA4434254B993FB12E1922
+EEF8515BE3CDF0BD57C1F0433F9ED466963E0136644C0A4280902C1BE9A86656
+729343D578E0E335407B7D73B9E6657E28675941D76836073E1BDF1768E657E8
+9A06266FED44EB127C0A20650528E3FB33D5771EE49F579C7A70E8231E093A59
+4B8390600524F0198C313F2E6AD936B382098C1BC7FB228F5A647E7EFC382F93
+AF398A0640C5999880057A5619AEAD4CD6BC34F70E7F8B9D5EA6BFCF432C6BBA
+8A23510A0C306C5EA0BB33407C56ADC76892EB7407110CD7D2B2B063F870AFE8
+B1ED86BF1593426FF9CFAB3082CB3ECE1BC3F103E0006B2BA846DEB0A0ADC549
+1AA0D92AA01094F8F5CEFA6C86FD432B40D010C148EFADCB035BEC296A4D6F38
+12406270DE9046C76E80FF56FEE665465BE12AC6FA74C2F4C648D29164248CE5
+8831C4BE49DABD324754CF75DCD125F59948B2B1D1F0E116DF84BD02A99E5803
+1D3309C72875BEF544DC1BD37F4AF566745A2BE93CAD7E55EEF5DB17BA290B5E
+DA86BFE145591C2034BF045006BB8D59AC0B1C585959AAD12B0B50C2A6175093
+3CB5F54B957712912FC0B2BEB6033012D928859F510312EEB5374ED10CFD5C19
+8749731A97AB9DA6A2A63C44A399A1FD09FF17AF1DFE301232A8383A6AC2F797
+40A188F69CD72FFC973B0BA64F7BA901DAFD00F28F986582D9AFE5DA387714E3
+41B60BF69D803539F0A1B0D3D42896D449DF4411348A00C05C38ED31265DD53B
+967427E22F0089F357B5A39B81C1281248214FDD1148F92E75761D4D7D5E8982
+95CDBFE275FE44399FF05DC34245C4BDC38C4F7D265A4F3C1E11717A6F3FCE2E
+720FC5142AF5CEAA75CC1868D172425A72253EE3EF7CB99A09D1E46609E3A935
+0F39505442E1A756FB0AAE7D30BA8D3DDD938D0AB9D746E65349D5705B36F60B
+335DBD91662CD5A12983EE0161F8C4338336575EF6C9C6842E0611331EBB34B4
+DC778CA9FE0CAB8839FD80D19AB95CF070A73CFB99467256F91D37BB669A470F
+C5E25FE5342423A2969CEAB12CCBA86DB276A8ABF9BCDBF377C187CA63BA2087
+FF862833B9F03FFF0132E790064B08913C625E7CEE675C1D4226AD06B75C49CD
+DB8CB63A2D32C57031959F177AC8720313569A540BFD5B31E92EB12A923B7329
+A128E58C06A6A0A056FF16F02B37270C9BC345B8459A7A66E1BBDBAAE72547A1
+D4D7571BD1D23FBA973C096C0ECB08E93EF56EAB20D009C7A1A9F396151964FA
+57DD810E1784731BDCFAC8868F84C666009FEBE9452934099E7DC25EBEDCA33E
+A81D7D49A1FFC7839AEC3A6F621C7170C6BB0F13A2FECBE5A1590A6EA8934E1F
+7396AB950A313852EE08A87B98F103C9E67AB7FBD9641DC4D63B0708B2401D9A
+D2A864D1DB420628B35A9908E9AD019245C30312E8E64819C1D221B964CEA54B
+A195B12E517CF48AE685D2B50D34CB38B685370E762E95455ED521B4D2D9D441
+AD04B19E87CEE1E101E0F6258B66E470A0068EA4ED6AC706D7BB0A4B7A9F56D7
+E166CEB698465FFA3FDD7F63CB9C2F07AA7221BAF32E8066E1608D5CBBC0F1AC
+D7A8460668E59A7C8DF2AD01851199D997CD10496D687413D05E934BBD028721
+EDB1CBB81993265D6547FA78E7BD9D01FF60FA333F90AEAC3B6944D629F5E9FB
+5F8FD93E49E4DE564F9441B83BD8D93D6121C76F8AB0DFE84E62F21C34585514
+CE0C80F8BBCA8E5472404DE3D990015828187F7BDA1D66C324F9217A3AE1C9D8
+6F5AAAA20A7F6AB652BA36971B40C4F0A90D762864F8E2AB4F5327CAB2CD70C6
+F5020B01155F908799EE5B906487A3BAF15579C814D94BA8A38EC38515582A40
+439F347A516379BB54F9770E1449D08F89717E1EC32C305C2D6CDDC35D0D5F8A
+8189D3378D09D6B333C6D5B83CA36C7029FA7795C9DF09EA6DE61362AF79A5FD
+38EA53024DD44FB8E53BDB29EB2BB60A7A284EA01B429DFC9BBD5421C8DF7EA1
+93665459A202289AB7217576CB845E2A1D83EC6693FD3CDE809A0AAB042E3778
+F9506DBA544E1032F690F0C783CD4E7CAA58228247DB04F1FD4B90F3305B0B21
+002737BF3F1DC28217AB98D7632B6F966D9CFDAEF72C2973FF3EFF17E02AD8B2
+1084C5E4DFBCC76B3E1EB7762B965D2D8844A771F08434253A0364120634AE38
+54CE24483F46388CD94601F361FF3FE78A304C549B82F178D204C5E4BE9B2485
+8A39D1D0CE1AF954AEC6B2982EEBDF8A0FADECC33733CBC144576FCA8F58D0EC
+77431B64BE9C9D3744E26BE5FEBF912DA0B16AF22EFDFD92526E9A65431D70DB
+547D241269D266DE9EAF67A24B1EC9E329310DFC31E23EBCBE7FE8DBC78AB553
+6A257514969808E1E79E5AE3C6C24FA363E4F616F52B4724291996DEB52D8E74
+391357477DFD2A594A0B1F10B2831579F4C526B234BEB990A4223F0E5AE15A59
+ADD7112BDE6E257EA454C9E0D439D24E6412520CA5CDD3D5B85EB35934EE5E92
+404C808346B7C97C61CB21908AC35347545F7F426B363175D50AEC231460BD2C
+035BD4A94C40B213D13654E2C778277EE429444F098B2C81D37DF81EF898C799
+E645375E86DE4F00D18B26F303C3102B4E8EFBA1DD6B64E49EA81FB5FF52E94A
+281C8AD2733339FD58E207D80F6E225D53ED62F1BB2FFFE2764F35B80CDFF711
+A3B84DBF388EADE65A4F7E38D6AFAE2DD00E3A161F85F68B79DE87CE4CD5D77A
+73641E1B8E6B355A84740D5CA4E74EB3B245C261F6F769E789C855BC6985090F
+564FAECE25C11FC509D63C661A8E6A8FF1FBE8AAEEB3759CD25FAC35BBEF23BA
+745FE0A1ABA7A477C8FB63968B8AD3F7DA8E248CDA0AD67445B9D6F6FC034B99
+792BE166BBB0781BB3B5BE5B9EF6B3EBD02C01A4BB1AB7FC048A71F0C429B78A
+182BF84D462645F2A11A2A41CB1C94CFEBF17ADBBB9063B4F5D0FA9CDEAEFD14
+FB9E03BD6D5A7737FA1CBF6A7387F84178453B2419CCE7018184E0EAD5F40981
+55A1D215AEB571A861A1F12DFF84A17B142925582709DC5BFB6237C7D37D5ADB
+706179768BB1EAA959137401AB9DF46CD54314F93E31A4CBEC0E1C589134F6D1
+C3D3B273E947D09DEB0704A928571D1468C3CB347EB545040E07D3A670816D72
+764998EC7988C5A25E6D2403382866FE5408037BEAEE7EA98BD8EE300B957965
+5B79E8F4BC6F84E4CB037270D4D9FCBC0008408485D855E67D3CB8ADCF7380A9
+09350593ED80A9BE9CF77DE6D1D4A170DAFE7583CF6851970B14219A3A2B4684
+A8010B4F7B422DD699C167BEE110E3890699D710148550482CBF2BD5CEFBA8A5
+C1B45320C9D0C8838546474830316E1E238CE2704C12D43211639333E9AEB018
+68C7068212A440912FB4E58124325DCC233A8BAE6D634C9E47DBDF449974F42D
+1D346C206E452F1C1AAF76852A3FD5F156AE0FE1DC777E460DFF136FB94A6879
+54F0E6D4825AC0C6F72A71DBCEBBE355BCF1D0A336043325BE80D780DD21992B
+5240312D13CD85C2C2C9F236CCED4F364ACEB22B8712BC0598B75E565BD05A9E
+B579CD12D262FF8114D93BFE09D1EBE2B38C6856938C0224D6D900EA9E3C033E
+18F7C4E9D4954BBF699B4F7BF5424EFBC36C9DAD6A54C1304A425DA7BF3CC236
+CC82139A00874BA953C4581ABC1B6B06567CDCDF78247C090644C8101E0454F7
+37B42EEAA2743D855C90D03A0DCE75EC28AE7765A5AC7888B477AEE2922C1121
+FBAD4188E125B110C216A7AAF048F41AA81E7F32ABBF1A3F597069561BB6470C
+1FA96B179FED4D6781C6F70A343A9CA3D757AD37E73D062970AFC4DD6B54304E
+A9D7F87154801D7DFD1C45E0717387EA331B8A5DB13DA5AFE56B341FE296A775
+EACD862B7D6987BAF4B73B04455341B07BB91830868639DA3FD78C0E570E8CF0
+4E85BA82CADB689E7E5DE5777D0200DBF1691AF7A44D0E3ACB9700B1829AE038
+50566EDDE5A9FDA33AAABD737E5F73FD76FB021805406F8E525EEF4FE985B6ED
+178570FA9B4453535E38C6D3472BD475A07DB82B0EAE3950D569F7D0C16C17B8
+3737B780DA66F50B7F678B8020527277E243001434176C6E8B9B9DAC87139FBC
+30F676E3621F59D2F8F0476FF8C528302C7748CBAEB2997645DC7724FA8588FF
+C2969DD8921AFE6E1773AD1135775DEFA1EFD197C113AD53A656D4B7BC1613F3
+8C56B27578F856FDDA30652F7D6DB38B819D1E536B2745421DAB8F5E21932B7E
+20412937F8668163EA41BF6D7855B884943179FFE4F2C0C3340C86ECFF4B6DBB
+F41CBF9DED39E7BFDABE6AD603FD6202A47536E5102E7181FD60166EB10D51EA
+5729F7FBDBCA979A65A8FE0A387F78A99CC7E41D87E0D791EEC0136BE1A077C0
+19FC4B16C601DED739DF6FE9CEFA9E48997624B7C768FD5259D0766A9C94B0BA
+9FC8336C05005DFEC39BF559A36962F16F21F208F2691705BB19FE25AA2FB0D1
+DB727839FA045A900A0BCC2717A35A2FF401D10B7E504FCE43C58769563D8289
+03EB34FF2A2C34107C0D2F8984ED
+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 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
+53FC00ED82D0BDA8EB008F2380FDBA06D2F8C0210A261508BA95DD600436E0BF
+5E8A00CE3C92859961557763D413E79CDD37FDB07131FDC420EF525CC0B5377F
+9772D3876DBFDB57FE6275D187832F2B7A635967B201E70B532E85838ED3874B
+82B36AB9EAB7DD4D2B5C4140419CA04E87316E802CC93DE6336C22FEBE80C3A5
+D43A0F808E5E6A17F7BCF812FF5EE5AC1959E07F36B24C9192E375FCA3C0A84C
+1D1DD2093D4F151B9FEFBA90DB4E94A1D68E49DF5A715A5BE04E7B7D8C384D61
+5DDD71F057FEF51DE7D002AB3BFE0096C47EB3AAC7B89EEEB9E2F9CFC6BCDFD9
+A438C1097D5253E49DC0DE5B6E8F976AE8894914BF8CAB5236C8A3BB2A437CE6
+374D96AFC592F1238357817E1F2836EA763A3C0DEA2DD3F7D758BA61307C21F4
+796A18638504797DD9A5131EC48DB0D23FC9A3E069B2FECA5B36A2260C6FED2E
+6EBDE3AED119EDFA96B837C56202ADF7F7747291A43CDDED6EB7DB5B9373CB78
+F6FA0B92BB2C17AD8DA549E878D8DEA681028539E5E2A223E2F9BA4CA09A6FF4
+EA195F1EAE62CC33F2282888962B9032D1C83EC4EDD832866A472426EBA6080A
+75E02F39CE0421C5C06B9D593022C23D675D7BE879FCE0B20A9CBB394F9D3815
+9C847518BB8DDBF3A89D699C1FA84E704B02BC85D61ADA5E548CD8DBE269A3E7
+03626A0FEE75E116F95B5D31C73BC852C5FDCF524542BFD9D05D8EB4B2A114E0
+C2FFCE282CBD87D82C1D4E64772B0492068B139B1795E287899CED7791EF5C8F
+E77391C51552FF08DAA85BC8B9896CB5C792C3E1C4D44E3CAC1EAEC02E4B986F
+E5059463613DD3643F8DCE2264FA66D712A0DACCF86DDAB315393219F5EBD18E
+E220AD61CE3C67664615A5F9734421152382E8EA9CBED8269ACFFC37873BA329
+20649A6F684D31BF37194952496E8B962B75B83CEDE72F0DAAB761120B710677
+F3AECF2A67F512F7C423B1DA012D0D0D44F009346C4953447950F514731830D1
+59D01BFF4511CD0257D5ECC2CC4A859E0ED92627F659547C8F137DC0F49F06D6
+02F624EEBDBC779FBECB1816A88F02B3565A9C3D42E919F755F3D80F6FAB681B
+585B5A49F62581EDE1D1DF1906007A8926932FE74FA2A94B92026DE9D678EA3B
+ABC3C2EE5A3757317AD5F5CD361A511F4019CAF77C46C8FFE4615CD6CFDF7F8C
+8CD06F1A2DDBD3BBA03FBBF8DCC898EE71E7D19CDE66971150359310D0BB68B8
+65F3E41D34C8D063A71C27B6C0F27753A9E35D291477858E5B734D72C40C4573
+203C5529340CB56BC00EA0E02B3DB54173E6480D29D957E6735146163980F0A8
+CA4086192E6095F411939DD3FF19854F8F58B39A23D3ABA22BEAE05C4B6B6845
+98968C08559A037DE955F77359FC39249C1149BC4634D10DAABB086A23D9A37A
+73A61EAB63BE3B1A8D8E76ED94E731169E892B469056757EC885D8AC4FF50E5C
+1D80EFE20E40E26006953C53D765B3BCB4C5396646DB3AEF01F939BD163ADD87
+FEB1E55A73722A0866DEC922EFF8B06AFDF2FC742EB1CA422822BB378310A994
+794062BE62D5BC4D44C25655C902F4FB4FA63CE21E095E4DF3723CFE7D2D961F
+10A715B194ED855942588BDA460A28F1B5D849A34D85756CC8CE874E2384AD9F
+3A1C348996EA94927BCE9715A8B229C0D7FCC2C07592052796D7BAE23DF895DA
+1CF991E912EAC97601FD79F35616A1F23D82647BCB49C360740CF010CA4E8ADF
+97A9CAC032D12919CC167CA4C2E6C60EBB4AB87C8F2BDF71E28E91A9BC96056F
+5D905902AE964E5336CFDACC8C5CFC5607D75CA5F364AB8E9A65FD372BF15FA9
+0CE1519CD7DBF31F92D2A078754E4BF90F3121F6F698DEC238404EDDD4EEA153
+0335941E4EB8F08DE0104FD8633BE277E9ED26FC65D28FC1D604D8504B2F788A
+11E2206ACE8AB33D14CE9D4CFC917008D44AFA2B1877C3D42455593889867784
+7CE696EABDEF95872F065DAFEFAC253F367D47127CE76FCB85BBF0684DD1663C
+876E68EC35B21593A10EA5553311880B8EF744014CD1ACFC067FDFD46978BA23
+C86FBA05CEB66E67621680BEE0ABF82364D4E3235A20033437C6B84A71FB34E6
+F8A160AC477A1302B4F98D00FDDB2A35ED9B315700669D9D8A3D254F786316AF
+882CAC6555A766281A0836CD45D8CD8245CA69729260D54C11DB43032A0FAC0B
+05869ED0A432CEF854FE665BACB0F780C9123B4DA1E1895F8717DDE4A58BD3FD
+D214195066D4587463E839EDF667E475BC04EEDAEC41422AC9BC27C238E88318
+7DFFED5D04AAFB1F63AC651B1A4113B7CE9838ABAF75632EDA8B5EE0C8474678
+58898AD595ACD99029DC34EB4BADE834C04444941C3D8280B93951A9E8554EF9
+5F0FAA218DD8224B94807CE2D8DF7E4A5E2B28C44A551DB0708B5D6D5F000B96
+0422A8E953233296B6E5EA698921F1EEEBDF0C5CC72263663895940B4C1EA28E
+E0E3AF21698D5430D6495E32E0D5F5E538EF835FBCF4A96DAD8F011B145584EF
+1C33809372DF602D1FB3D80A4EAB65897F672642E4317926DF178BAB6F9851C7
+63613B3DB11FF07F9C7582592B620C7767D005D7B0C28AF2D309E6CAC222055F
+2C20A58AC1B407641B483D571B9E959A3AE0DEF316EFF7A4514D5313C47AAFBE
+82CC583BEB32F20E4C3A5650B58812EF357B68F26882D30A6BBEBDE64E2FD910
+AB8D974CE5C968C7D34390529F4714A9F1D2373DB1D912D418225932541FB250
+9C74346749DE9C5662B1C40437E783A78A283AD6EF43B2C111DEFBEECEB17ED7
+3630AE404B310F1148C82F4969A794D945CA5E1C18F39BB6F9C46EDC8BC3C88B
+FAC2116B2338E1AF9C975ECC8474BCA351E3FDF89ED4352FF6A3D6C7EF7A7BDC
+DD4B2DA9E7C77F8A6623B670963D2B9B9A80F8445E17B85194AD45E02FF10484
+85E0A700BDE9F574487F9494B424646D48999EA67D469A22B9CB72123F31EA5E
+51C07370BFB1C5EDB4ADE75E7111A0116C212920F1362353BF58F33D7E8EE680
+DBF8085B46AFC40ED9FFD7AE756CB267D0F321FDB71F2DD35FBD3003E91E2758
+3DED65748BE5CD0D2D244E8FA187749FED44ED0C71056AD954FCF656DE28E70B
+93A79EB4D7BD59E92911EC64EA794732A79B9908B7C6DD42C99BDF07AAA06E07
+5CD6497C489BC56B09E44D22D0FE69521A9BA20ACBFDAB8EE718625711BF479E
+512FEC4A8F9EC7CF66D4CC44E2D0EA1235BF17C3D0AD6859385CECA3D4A640B0
+762D325D3A449BF7115CE8469A493C494721D6636BCB9C55ACF1D0F3489E5534
+4A76A8F3E3AD6252D8CBD3EDFDAC890A7B497286241AFE35B2261B66018A1523
+4B9FD31AE07A6CCA6B91A176BC38BC03F97D71F80270E14B83B012FA5270B7B4
+73F889DED2D4BFB24536E495F96BDF408E3840AF1567E9960A4F22F0B749749B
+C156336BD7F349F2F82CE54B459462CB7C9846CC090E752DCDC871FF0873076E
+8885B0AEF490DB0C9FA98A8FDF84EDFD52AB0F992EEB236A79FB8FB52718EBA6
+E0D586512F81079D468A75336540163B966670B437304F3272CF6E49252662C6
+419E8B2B14D240A1DB0CF6EF14E024F9D8C6882F865D7E007B46DB65E2E6AB1A
+22C5F096B255E91CABA7C441A3149FFB4E19BA97E5D43779C2A80208E279A91E
+8B8A281C079B819BBB6A5B1A62F34D59B7223D9FBB5F5E96F0D9AFEBD3CE3D57
+A4C4D2345776FCA140EA95242C8AF1EE7B93D2676209B750ABFCFC8CAF50F578
+4C364CF8BC46839A4379624D56B7B917743E9D6A284E7B315D461ED66B262413
+A9AE1741C633A92061DF92AAF78A18586CDCA41248C586F7D272378F9CA76980
+202A391CC9FD46794140F06CC75AF2F4986D690939E083CDF9B96D066B1EC8F3
+DE3B68AC8FAB84970B1A199B3F3AA5BE27ED8119F306CC5F26230C16E9D9FB31
+1EE9D3F5175E4D4D7A8A2945000C37BC73816AEDE6F2AC0F09B788C9988BA69B
+82CF336482F490F05725696EB080E460FC03B3E28C1B3613C8E5FE3DEA048D97
+4AC72C9955FDE282FA8C8385B30E3A7EFE247B48B370DCB439FA721BED19AF4C
+FDC3D3543A25A4E0273419B6CDD7209FB336C1542BA56257E5D31B70529C12D7
+524617868F4F3B49799322EDF504750D1BAAE307ABC4843704B64ED8AD4996B7
+5193CEA660390527734BF1448AC09998E70FF15BD70F8B6388B0A987CBC783FC
+990F7A5EA016EBC024F12BC9812C7C4DD6E991DB89415A49D0B265E453732F4D
+2B6BB50E995E719B00DEBE74E7D1E291A739C4EAB39B5A61763DDB65BDA6E1C9
+17C49BF1A76546BE0EDAAA17310AB2D01BDF059B066263C8FFBDA53281C882DA
+E2DA35ECE5B4454C8031DBECD8675B60E54261A7D1F70560C6D8CBAB436EF058
+5A0189426AF00AD7EB43FBD13976D8D769ED2639ACBF613A308C941CDB5A632F
+F76E14224909A8E7E45B9B5A47BDC9B7B3E3616AEC4DEEAF2899A59B6E144802
+534109EB0E3ECD270E417B2E9CD8D27DE637AC798ED5CCF791061297A0B218A6
+1188C03BAC8DD8DD783BBBF8C4C9AE98E8F1EFC4684CA4BEE6D533458BB229ED
+4E31392DC4591DF2D2D07632EBEC0A5FA2C4508C1FD48D56EE871EAF4A84AC07
+A1E34CA2CD81ED369043998A23DD01301D41C582963F07EC3417F09ABF45844E
+A74F386BA813F0AC462FE268407B9D2A8813FFCA604C342CE82493DAF631B2B3
+B6D3E9F3398761C4B958569F0D833D27973B07F9DA9D84AC512C284844C04866
+74A325E4ED894F640B8F802097B7C6C4F04BBBC8A7BC6EAECC60EBBF4E676A30
+4A5D0DE4AB45D0C913CCEEB8032D1946A35928BFB0FD76AE324E7E3CEB5B99C9
+0A0A6EBAA6F6D8E4292F9C5408D3859CFDEBFC9413032FA1A6E194C5F616A3D6
+FB0FEB8966534CCC9E6D67DFCA105E8994810D8EE414DAFC80B8A95CAFA254CA
+CCAA72B84130B5E485529013A35040074072A8A63B2F4384D976BBFA0A743C5A
+0A079A2CD15E598801AD121303CC37A2FD3942776FD1AA0805BED2B646D4D1CD
+9DE65CB859735EDC177C5A4D1A54C3E8BE7A91BCA91AB93A9DACAC90204CC207
+8432E95B2C47654DA02EC1664566E2137860F16F798E0A1EFFC819F4304B0FE2
+AA54AFE0AF6CC26D417B0CC9E3F5F6B9BD6DDDE6A2D7FC4C840E4AEF73452D16
+241FF01413DF2125BA3563B3A49EECC8EC4D0BF06283B3C8242F362A546E71B6
+21F3C6DA63882992A14E295926387D66EA6D9F296455276D4FEF0CDC706FBC25
+57169AAF546A1BC72114A3A6DC3A1A76CE001962D771C267864A987188BF6087
+183573E3E9DED10D7023965D29F19C8950B6B9B83E680010995360E54911AAAB
+44D07524518EE59F58E49485E885F56FF2CF8D30FC5779770685C305AEC4262C
+B8C0C194C26F5E122DF5E4153316C971460C3B3B336C1B72
+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 107 /k 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
+165427976FE6FD699442196B0C247C960C9086AB2E440885D11BDD314A3FFD40
+9C5FFF29B40110381ED22F58CA53CB2407E5B993930DE5E32CBC4CDB2FC46604
+AE51C1375F9A41D7B5CB2B2FA52F65CB925BDA5CE18BDCFC46933071789E3F20
+C08FC64F367F409C38279E5F88EDFBEE38105A2469CF009344F9E846419519E5
+8A5EC45DE2F6837C65A883C524305D18769A563691F5887D920CAA8EF0D9D56F
+F208395E7390570C6DBBE5AF515BF64478059F922068F0E473C020E54CEBF22D
+495D5E843839912C58FDE0A61D4E390E4502E9973562BCA49B3A17BCAC0352AE
+5C27DA44578C4FA5821B9A3B03FFAA97E15E83CE09AE155BE919EA42301E6195
+F59C0A9131C4089E97223BF614A37B5C7603190DD465105AD86DFEB74E65479B
+BBCEC9EF93508604339454483E244A348A78F29EC4A60554E77136749A4A74BE
+F4DE4955FFDB6AEEBE19705EA184605994D2A5284C05A479A33D56FF398DDF3C
+5B474F53743255BD5F42DADADD7F71BAC446A10084DE15876FF74765654405C3
+470144E2902EF213A594FB721D0B0FD823DAC347777B7AA58688EA834514299F
+75A3C80BCF2FD24D19650B7D2C21ED664D290EFB9122C125F5DE1B2C4A817905
+06C27E7188C9BF3965A6A25A5A9C0353A53D05BF64FD4C226837AF6D9599BE70
+04142CC78E03626BF10D68CE17C2D081B3A4248FF392E985A6946D89BE97AF1B
+C6BE7E9820405D06F5FFC06D6304028E5697E8AE15225A8FE19CDF3DFA2079A8
+BA537833DDBEB6106BAADD45E9ABD1C7B5157C5CB26F971B0E7EE8069E3C8FD4
+A7A1833B19CB43DE4E7497D505AE0B7BFEBB3E489315842DCB3D6CB7E6E43AEE
+E215D011B2854A3CEE5AADB34A9CB5AE595F2F02CC5CAEA9AB28161FD93F3FD5
+87D17D564939ED05A5055029D1AAAD21726C1AEFA777EFEDF8D687D9F2FCA607
+CE3B585E044A8CFFBD6E93849467378BAE5AB8C02615AA974546C3D7AD70AF26
+55C62A9C4EFE256B5303BBD0B9E13544F408F8AFD7265425BE1421FE6B1E41E3
+B6D9C509B4EB820507F2B41A92F93A584AF62987450095DCE78F9862284F0C53
+F46B02549CA9EA57C9C4CA8A0BC1EBE947AFE73B8F7958853BEAF81D78E23C25
+3BEB6EC3823E1DC7524E38CD63577795EC3DDE03027369957906C85A22F9D805
+2EBD287C2CAEE0D3985264AE614380E421EF23453A68F6E616B3191B506113AD
+F6D569E4A20D3B23961DFB3ECE07B382AFD2CCB1F2BC4F3C1974C06C8652682B
+EE7ED59D4B2F9EB8492FF978747AB12E123932B34C0F9F3335587C7B8B8E13A4
+0E1EE5212AB1671DD7A2AB5AF2373B60B3353C22FF8128198A5245F9C701B6E9
+80E92AB14A77AE7BA217D33ABDED222EEE9B5888AC6653459EA8738703FF7423
+8391380AF83E56A3BDFD3AD43F2F00E87DB9153D99A3B358A38313A7E6D6B43B
+07804A9929FE01EE112C0B1960B286C97E7F563D552250DEB189F3467ADE8491
+9C25A473EC8D590BC6EE6E7F340991D4317F1F0E29737ED93D18BA4DEF6A6C0C
+F9A71EFDDBE489F1A5E27699F8C120DDBC96C4F3F3F2F90AC5014F78AF6517F3
+3C8E2B548C7BD7CA91ABC4E71930761D5C609CCB41B7CE490389C7CA6B1A7B34
+7130074DADA12806475998153EC604A5FD7A04AF35D00DA9564123A384E39126
+B228353532842504229FD646A0FA1C24AC462A75A119743C17071D0F3C370D04
+2FBBB8155EC868014066C6EFEA257752846195C4158AF9DF215C8B20AE276F50
+67AB636CF7A49D34B26435233460DFF6F728E91F1FC4224A7AB1C991C94D3224
+E75B5764642BF2972C9F72A347861CA23B78BD37E0902CE7E3776E347AB20388
+2F97386F31D1D41B43B5A1F52C11C908155E7C3AD9C818BD5F8AB022FE979EFC
+695DB2B79BE6264EF7DEBC936048FF17E81408CC701C0B1C742B11F6D9442E4D
+2BE899B3D354D07CDD71FB19ED3972363ACB918BF229ECDF8C5D6F9ABD5263A1
+81A0BB786D0A859C53BBEEF61872E24BB550FDEF14A66FB0C09836F4677DD4FF
+26FB82FFD120F2F8947B51B0A38F47E65A8019C88A1C343E144F7CCDD1E9C541
+640452BFC800ACD27D181077E8F59E12CFFD7C67DF26CD9DE94B87A16BCA14D5
+9EC57D1963A82E2E1667BA64E7C10015A22C4C6FA06B9D76A9CF591FBD2003C9
+116043C62347D68F99214E90E01E80D140B1D3E8AF7526C17AC8A2056B63E192
+031101D44760E5679C4FFA2FF739CBA5A80AE9F95DDD80973F32D0411F9A43A3
+887CB08E116C823DF5921C157390E1568C76B82DD9A7C69FC76501712D2F24DE
+7478B1FF5F7C648754860E394340F17D90865DF0D75A1A7770C177ED1052E10A
+2A60B370A9DE3A6876B9E102A6706E464A91DFF642F498162C9BDB4F0827AA54
+0D1F36557B76DC6FAB62E52078C40F608CBE6C447CCD32A29C9751C53ED48951
+3E2466B2BC8C28CF21A439CF54B50E6DEA50761A23333E8E96233215BE86B870
+461D46D227790B1E65198B0C32C44F9861B94EDC731836D157B0B3419AB6AA9F
+41BEF201D3637F1F6C3F7DCB71BD670EC111B24C411D0AE3310DFC4C9279BCB8
+F5D936F0211B5FC10B7957259D2C3874724EDF11A646D951E79CD958B60EB6E8
+071CD06657B15B5D0BF492312911076FA5E74F7DD94729A1A17393FE5891280B
+D0BA2F31DFA6B3E01C0C0F662D02EF94590EDA84EDEFE9F28F5E7DE75B79D8F9
+4178ACBA78D1F147820EF76DB4850910C3249DCE6EA13C1161DA6EC36BC129FF
+E9C97EFAF481A1605F788CDD66DAC83A95BF09FA47850FA0D7A844AB7014D9C4
+95A1C6AF0D3AA8A0DBE08FAF4E4FF7D6039F6115845EF41EEBC31D1D6B2CA95C
+FB29A10E77935F79EC66A5D14FA898CF1347CA2502496BFC44DC1057AD6B00D9
+E22C8A982C04B48494C7B1C630FFB2FD1701F65B0558C5A2BE9C5A017B3788A4
+B9A22CA8E87600A54D570A6391D814FB95FCCA3631B123AD03A9EE0ECF9A8B6B
+A5C050A34767371D99220A3395B8EEE63067AD64C93F4323A1C33BAAB8ED8B85
+FB1F71CCB36B381463157A5F19F0CD76CA14C77839BE94271264F5B454044D8F
+4458AF7DC8A85ACD3EC014E424D102D2FED460A7AC342E23B960846056031213
+25CAE1315149CC2069E8963AB540265026F4B11BABD9C4711875217188D5B5DB
+6E9CC8E436A56D53B37809295276DC0A21F0CF2D50CD5FEA1AD417F1098A8999
+F4163AEA50ACBF468E0863C901DC518029692C076C5BBD7954DEE6504EBB39CE
+8F680420CEE573D8338DB67A5BB2B5361734D36D029812BF3AF22AE71CC4BE7C
+8C0E047CA409DA46AA3EF4E6B345A3E1A53A9892A1943BB32ECFD340439C1D52
+14BC35A77EE696CF792BC25DE49B75F3B04F09704B64C8B1EA9FF39E6E8D9B4C
+A39ADDE4B5B49E3FBE3A7F0AC51988057E46379173D5D3AB9E786EDF308B5F0A
+5B2DA6D030F881DFA0D479D8D6D97D66F3D25ED946128B38DECFD701E607221D
+EE1069CADB078D3434253AA89970029EADFE217FF24C825718F68575379A653A
+0024F720B6355DB4C7EA81077DC68DD6DC61F85C2AE59E28FE04234E7887A9DA
+E4E9E36FB0012C49B48F057C1E98380639744B5EF0B135596964BB2F020ADF92
+812966653E399B2EF9D5044A6F8E2C788EAEF6108AEB70166157E322EB549002
+12A5FC7F4DB295C0DC64BE331D154D07E49DB9090DA8194B941117326D763EA0
+4CCC8B7F97881190EA60F9D0B33BD2DFF04BA5AC81143068D66DBA61A08D3930
+439A0A87540C2CD06F56A3D732CA041DCA2F74DFB4CD05FBD76455E389095AEB
+4CE5ED7BE40BFE6003C9D6534F19D150FF8AF8DA936D0739EBE9128BCAD016BE
+70EAC25338227E83963F81AD1466C3618B8044AFA276879B9E621F00B96B0B67
+2E8C2D95E222EA6F4586EC05BE9768957AC121965B9BBF9481EA4C513BC092F9
+A4D44F4F949E5537C1F59F74B48AFAFA371F62823286B5E005EADCC936729DAC
+4817750D66C15D3508DAEF758FDFB5C84245DF6C040EC0A91B207A1377DEEC10
+5387A82D27199E8826C00B44A5C2A4DC784B1A8288769428FD632D7AF1C3508C
+C42FC3ECAE21E060637D961D448568FBF539B8E85B7AD60F1A573995C7857AD9
+9755535F9D04B4ADD5DF7EAAAA0819A5F21F111D9D9821089D071907307025F9
+B6E4C4DCB3E7F6F06492BA6EEF4F32B38393CB787BA9E00D8F60A8B4CC91B228
+0FADC305AC966F9C2547DAE80B4F60959658AEFBFF9F63B95F106EA226978D84
+C7863BEA1C71B13A5FDAC35FE9D7037758574081CB58AF6DDE2C80E90ABC48E6
+DC0716B13DD52ECE01079EE01A114E444C1F09AA1788356432E51806D996A99A
+BF169DFBE02DF5728D88FEC214B3B272CB1A7C9B9168F302B505C54584A0B428
+17CBA6046E0319FB5041FB9319E75E7F805232DBE8312E63C639F35CD679638A
+60E1B0BAE1F1F9D359A2786AB8838694270C368D7BC92E9D65D119BF317B8909
+7BFD7AF55533BCA289460558977CFC99E3E89D0C4A3B50C17DE43E2A7D7210E0
+96F0B6BA7A4C654A8C59DF2DD5881BE5AFACB64489FEC5B129ABFB10FA17B3A7
+426E2445778B53336CE63969C5F3567DC66DEF49A7D1A6C19C84EDE1C2FDDA4D
+4FA5854F4F15C7FC1AC8175587087D068E2150D05141970845D173E5312CAC9F
+8B9CAA28EC46FBDDF610B9371BAC2F577ACFF2F7CE3634CB13941BD437390F84
+ED894384E3130E663F5C0EE25C2C8096B7BF90F7783FE1B00F6EB78D92DC41D6
+BADF384149742D6B9CCF1BA890446599FD957258E9E3041201B958C2E5BA6842
+32176AB1367690BF1AE79B6075315D538C7D6634117A20DD82FD8067F5237B5C
+C93F4989D054A45FEA482AA961738EF0B9CA8D6711DA94A512BA132038866CF6
+E59012950C870598644FC143CB205494BB65EB649FDD6157FACC5814014C5B46
+1153221D8F2D3B3FAFEB01DFF0BEAA0C00353668793379A88FD7C9827277860C
+516724161906BE5B164E
+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 33 /exclam put
+dup 36 /dollar put
+dup 45 /hyphen put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three 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
+0167B4015A270B9983B89EFFA023A3DFFDE181B90C51D70557B08444263B84F8
+A2A807C55D74265931B553F6D7F132B110DDDD3361BC9563803C888B89881DD5
+09E1A623957F074F5B3644BB3F93D7F96770C73499AC0AFC3D7157EA08BF9D15
+DA7739FAB528A8BC30C0EA7899A3193CB9E8EB51EF67DF4F97D36005EC228B30
+E54D14471A6ADD6DFC0A9E18243743457F55C92DC10202632F8ED3DA25B4EC18
+A8602DA1E1AB8DEA6778893BA825CD9DE6E52089AACB336885882690FFE504C6
+7C0098265EDD8DCF06F07452CC311A8B516C61EBE50214B11B72132EE0033528
+13181B4280F37E2CDE07919B43D2120C22971BAE4821E799143EE8E2726D21A5
+E8728B8F0768597285E8420B583BF7E84B02BAC1991ABC1A5917039DF9EF3B8C
+86C9A3CB4F1666755BBFC2E5623339D0ADDF433A6845728195D58C7AE4C04487
+F42B90E877B053AE9A6DD19B8910851CDBBB0702EAA0294506CBBC0A9A1049AE
+CB08948CBFA5E8F07D51336C68A034893B6D146B0897024D482176B14FC63C97
+1F08988DDA2846BAA3E4EA0084642063BD71B165479641E15AB05BE6D9598891
+B18215FFF0BF4BF195D34703919C1DFB595F52568E46ECCC2855F69A375C25D5
+10718CE804ABB8C07763C09D9FF6A363C6210E108AC351864AFB17CB5A4AE336
+B582016781DE6A38EF6BEBA595FF4AE88B8C995D96417152176B66F9180FB6FB
+5F6D7C6CFF01901E954BBA64CDDD83A0ADA2FF7CD6DD1EC365080E5159E51E66
+E2B32369F28D845BE68AAE8C67C30D2CD4E6ACB627A8DC9568CCCD414D85A2FD
+CAFE36BD8991420E3672E2812D9ADFB4B7FA0C0E027503B6FDFC245B725D7EC6
+8AE43F6C8B168111F7E25DEDFD64AAC0BC8776F2D257A3AA8A74FA883092E4A2
+A887EFBD80EE15DF491C5D43D0CFABA834C11583ABC8D549E1DDEDD1A1A3CD5D
+5659FC5808D20FF87DC95BEC80CD71B9E5BE3F304A1A03C2F666597072DE657F
+75A1AB1193B5EADB81D92C4E4E41648666F0AC8AEBCD484D30FBDEBDD87E6BB5
+06265B9C04BA54625207A13FE4B6F292D27C3014F20FA77588CEC44C3F67DC59
+7F9A77E3CB226C5CC7167A33C006AF85B806097DA22428AF5F2AC68413EF5F44
+A29A02773A2E0C3116B0A016E5D1F5B212896772ECDA058AAB5FE55C60C89AF1
+0ADFAC6A1EEBB828671CC95C7604D4CCB1CCD89FC758131645522626D280A8D3
+B40E343B18EB52ABCF3511C9DE75D9D10E91FD5D780D5D36E484206EE99BBBD7
+FA03A5526800EAECA69F8B9B62E25017576CFB81783F420DCAED6C94CE71E8E7
+CD158B8F7DCA917ACDC5CBAECC9E0DDBF21BFB63DE462B810031D61B385EDBA3
+5FAC4BE68B0442575E0FB9FAB7113797A7EDE04BB699EAE0A23A47009ED0EE95
+58637EF6A5C077B9A0ABDDC9267290F878E80CF79DC2E65842879F2A7AB9D6E3
+0E296776CBDE5DEB9EDEF38BD020DFBD31379A6FED182FB3A0DCCB340A70DB0D
+81280D3A0D373A2E672C68D2B2F08AF6061917779FE33419F77A5CA2ECF6E46F
+E11D9803E4BAF5A7D0971F6708931CE92B5F83C998FA4716B73AE9A29E6F732D
+A89F2A3E686DF93E5DBB6BC6C45C30736081395456D16E25AF42B0F8064DEB21
+2A9E1E4BC599A18E08955209F5195DAE5217F8189CEC5550C1491EE792B7F6B9
+BA2EF22477B92F0F9F6FE8AB9EAD6D6206377D202660FD7FB4BBB21C9F9E289D
+D8F6AABC3862D7CAFE7AE4AA3E02B154749C029337C30E0E6452A8FCCB32B0D3
+E8FB74DC71D0874777F5E78D71E8C3D9FE33939CB3A910651438ABC55BDA1906
+4432BA1EA0366DB8B07247E4D1E5EEAF6AA804350D319AF66CCCDEB1104541BE
+4C621C23CF07173F423D277173989655AE4EC72786203E00B223F19A4A1FEBBF
+7C48EDEF9252AE6330304B5A92DFD8B3BEEEAC5CA058A9F8562E1D016CFFBC02
+539B46123685E87FDCEFFEC42D0106DAFFA86835667DAF47212A9B715DA7A446
+FDE048EC64661262495A7A9D01EF11109EDDB180C43EB9DB662963265EBCFAF9
+5470DD411214CCAEC8AC7F182DF8BD93FE984E1BFA8A1171F4619D213EA9810C
+44C65998F3639A7278966684A56FD3A83060A36416430CB1CAADD42112E4302B
+E3331562F5CCF6B5B68B60851AF7EC86B534CE1963A2149D9582820E4360870F
+8FB29E163121459FACE85EB665765E6455A2D719C9619D55D60DCA65D46F1EB7
+3A5FCDE0284F82FAA0A49ED106D226D7C0052F647F0904556C4729D50455DBFE
+7CFD9F8503FF76A117DFDD2B28BD444DD1B0EFDA48D1F6C2B26D805BF4506D7F
+167850D37D16FD07CB5AFCA2C78769292AE449D53AFABBDAB026162AA850F133
+96D2213EEB37C3CBD535554FA70AA75964F357A5E847E63936740D9AB95B13D2
+90F334D8FEDA273BA84C7B370FB27D4701598BD6FD563DBD3A5F7B98FA97A9B3
+3E1F87D9664D7AF53A3B7CBFECE3A57856D03C766F8E1552EB33E441AC3AA6DF
+1DCA2B9B577B646BEF8F0B25C3AA843939CD0AD20E0659885C7F8E488D2E8E4C
+437ED072CCF065697FAEAF59D6D9E83592121D9B40A202003126983D7E169094
+F7FFF67C8F1F0B9F5F48C616BDA5C100804F8B9E6B4824949DC26B4634AA6C21
+E2B1B891A55E5B954D7987B7E6E3CB5E0FC645D7D0B8F7C627F5C642F4DC0453
+5A8E6494B9F4005D2E5F3432D7418111F730707FA9A0623AE971BAD1AB5FB931
+5EDDAC1DB70CDC151BF085D241202D7F1692A45BFA18EAEE8E8F79D5828C9592
+8D945F5177DDF3AF5062AE044BB523CA31378DAC15E19675497988764781797E
+2EF746525D1857B45A0FDA679076ADBB5C4C2644A29225CD1E15744B1635B21A
+D64C21EAB13BB8EE8B2759504217D8A06DCB690080DA7CDB2D9BC5BCA23017DF
+3C73811C1840B092E3AFF36E3F322E3FD4B6E8A6CFF25BFC2EFA25940FDD4985
+F3D447E20960EA675B7CDC617974772691DEB833CED5F18D98FAC99B1F00CDB6
+EBD9E77A98413284C98E4CFB3726987F80B8A82DEC86085943750ABAF974BFF4
+5348BFF04DA5B9DE8238C13D8937427F03C1CDEE994B0C6ECA9D6ABF474DA97D
+F34ABCC065173765858424E545421E38E79CE216F4FD5791FB51DB485D1467DB
+0EF3A6DB914F763E3B0FC6BF0AF856A0C2BEC44E875C6D6D5A6AD777DA3B17A9
+91A9825B4C3C0AF1ED5D5F43036FE58CF48106D42825AF00D193BBF3B8465BED
+00A2267AED6A07EAD4F5747E1EC018D2645FC78EBFE8D5C49FE792F33DFD8CB8
+CEDE83AE62B5A3112C6F5693A6CA7850D01F2F6582B00E7F9F20672C460A3B80
+09F6C9BBA22780BBA997534DAB7B0FD5DBE4003E3FFE8539900458CB905FB0D1
+8E76029048C7E070D2C24E8840A3269EB340B2394D37B3628EC608366FB2A695
+7FDBE02249D82AB905AD105804B6D8E912F2BB7C9625F4B09A7F99325CD7EBA9
+E7083842781FD5746AAF7AEBD6AB5ECCA4D5928B9913D360AEA835FF9379A782
+7B47DC824CB51E77317540378971D2AACDBBE242BAF561128AF71E639F67ACD0
+B04251C644C9C9B26C6D1AF06AC685B5A0D008EC6FD0105F64976613BFAAD28D
+83AB4F5D1CB5C570AD134575EBB95781C701BF4C9FF8C344251773C12E1C0859
+119108448094F41E3EA84BA93A582FFBF33CD086F1FB78AC26E44858863AE3F2
+15DDBE2B9C27D8484C480EC74C1847E4DAF520E507A6B5BDC786145EAD85FACB
+66900381C821444834B653F6D511AF6553FB221112A438BCC8193B330881027A
+908CFAA18E86A2D326326FFC25457C9041BB23701584BAE3FC9185B4B5AB6956
+D8F2BA841F98B0B93F8144B35234067B12FFFDD274DE40183837AAFFEE380CD7
+28DC181C76DA7A4AF637197F53A931D2666E751A2B899F20FFF9FA312A1A79DF
+E04432E4D4591C525B67D008DB6FB611CE089A96D25457291663FA9F264576B0
+74A5AF80BDEA1D411DC027775EB5F1A1B135B5E5ACFACE7EF66A2EDBE90771D7
+5D52FD964D4DDE1C419EF7812B15EFBF7481F90F44C276CB3AB69FD5C16EDD5D
+41A3F665C6B86CAA2F7C832AEDE7CE813DE65EB0424D45A721CF7CC7E2E2ACA2
+2F0FB88F1D61B60F5B7557BB94A88B94CC15BB89B9E67B1C93156586703EA237
+398EF6F454C70B7F93AD86E1CA3A722BAE4EB6912D19B56DA223484ABFB4C863
+AE40A43BCA384B6FA642B5FDC1877D993BEB7DC9C572B096F15F33A5C95F66EE
+8DD97A03EAA53F319C3BC9D2F12F0AEF079256604C6DF649E264EDE6E30E7828
+7B74BB86578FB903BA583C955B1A4CAD417073145D7B2405F03AA98F989D1C90
+8C3F625B28B2B5A8BB5C3E97DF05017B0DF1C7E32F8203556EC952BB2FA045FD
+76A9903FEA605A8F03BC4025B4737BBF8C35DA55D0DC2E2DCFD8B9D6C1310AFD
+481FCB0AE96095FF7E54BE72F713E00C5553B95EB23247C8F17CBCF9D76CD146
+86543993C53CD843B2284EDF996A0014140A2BC3D6B7CF1883541F932CF17A68
+09030CB936AE925C6CEDE67B053BDA271A427CAC85EADBEEB559E50FE1983DA5
+69476CEAE07BEF681CF40593806F3766189536EBDF92AC72270EBAA9DEC38C82
+8E27F56DC72BB45C38BDEF1E809B69E8C9A787FA37E636C678B7684A74B718B3
+CEF980C3214631C7E89947CC1577259B3E7ED37BCEC9622538B3E21677C48974
+A1F687EB3BB9662F88E6A3D387C9A30C30EB4E206F586B4A90B61729A84A612B
+395975B134FEAE92AA05AF675A9D995F60BFA37FCA4D098F91B9D0854B0D1992
+8A3DBA87301552C291F404FA4F590243B24E3D4C6F23CD9874D4EBEDCD51C1E2
+BAF3EB9B690ADE288031FD6481D5C40044F71CEC3AE50F6704D9236839EF9B1C
+7FDA3F6E4039FBD2E5B99BB31573BDDA7236FED53D49CF51E3D4B1EECC9F530E
+41E5FD3099C5BBDE367D1ABA42A476DC8C7015E1E028595994748D526E2E1D78
+D8DEE2625BD9EBA9A23BD4FAC1BD00DC3C08B078F96F4252843A566B22718B8D
+0D4A3B7FFF310A76ED12B345A3AEE2F6C8A1AD394665A6F8C9EBD044A4AB0706
+958E404F955C4E46DF196E1C9BD16E47D60D4EC935864D1A922A5F08DDFCFD34
+21285BADA201BE83254B4A817F7372B64481B3929F1292E12BC91667763E382D
+66720076AC19BF952A5B6A7A36D50338F256119F85E44093EE26D7EEA0DB0A6A
+2D11DEDFC942EA5E22F4202359C91C65F4B7623EBC539EBA75815866CC964AFA
+6369952AB12AF0F7D0F3BADACE96BCC865B4C246D392F6D118CAD444A97E6F89
+3100F3D786EE03431E1B3F1F45E2BC45AD0EF659667E757BAB0E7182DE558C8F
+4CF615B2B286B2EDAA9B8A28312DDC1E586CC1225FF6435465A4AF56CCB2694E
+B131A72BA2650689E03239761A264AA922FB6544395D991C3DB620F50006C140
+4258D85225E8013155B4531A6FA2017EA450F77F91AC191C50C1A2FAE77B1B05
+F40339270FF24D91BD842CCADBF9DFEA5AA13CA2C8EA069A242C93A73B9BF6CB
+5C01247F02AE06329464E02C5A3F6835C3B2A1F110E0E72D907C8629DC0219E0
+4BD43EAD38454B8100021E55FA294C53188B6323F64C0042CC2F9728F776C99F
+66B34990B279FD59B4AE356D1DB317F18DA66AF2E12EB5C9553D58BD075424A3
+00BFA49F981FBC0733F388710A62EE9216A96A959B700B02FD79E2174093D6EE
+30E5CA22AD61E0563AA18865E47A4DF8FFD40FCAAF36FA72136533B3184BA684
+87E2C88C4A8F119F1DCC5B7CC8BCA31CD23806E08CB77530038FB09CABC6A035
+E21971E5088665D46747FC3D66B0626295252642C833862FCEF1C749CA6B6199
+738198327FBCD7DA364D6F0AE000DC56AA44D8A7D3E74BB7A7C91B117203257C
+1ED384C741B14E526571B06E3665865D89A494F32D78674BB62063DF2A48989E
+12293072B16049DBC1AAD7EDEBE0DF69F69FAC857D950BD962E17C8BF097DD63
+DA98E41A07C1C299FF834D41D6B075C8802E1081764B017809361A4C1043D141
+C340AA469642D10EAD0ED5F01314CDC9024EBE21924D5488B9FF775934B1B563
+591AF1D8973CF814A987637E8C8231653036AC5714B74680F23D2A41770C1E02
+22659A92D305AFCE2AFC973776939095B142E60375D5CC0AA54CE490BDE293A9
+F19DBD653D7BA4D9C968FDDEBB95A0B6035016FE534D438DD0BF26336F83C555
+1BF5AD6CA8F02CD063CC67D2929D2B6ABB42DFE5FCEE51D583155BD8FE72AB28
+BD423808157195E0293F75818ED5ECD68294C8B6866948084078D83246E9ED70
+38667D6B3398710C5ABC172F446AA0C5AF3F4023F08CC22D02E51D804299A12B
+9503C2AA055914AA5DD5481A1B92CF8F70BFED758B447EEB256272CE393FAB8C
+08F090E434EA61838AAA3CF02356D5EA8A8323881E413579C55123F64E817D51
+7504A8A473E7D6C39662B665556F9C5CF0F3DF9D42C0C03AA3FBD95DEAF4DA64
+B41FF342092A5445E96FCC6CC910DD9EDF8DAABDF255814A0D0D874B03D3687B
+1441639C03FE3176093361CFF731478E609E4A86AF8810832EF983C5EACE4CF1
+AB8419AE0655F8DD18DE8E68F320BC1C1FA89DF622A03866E8AC8EBCBC336E76
+8AF4E24D9D53E0003E4FEE40D4386BC59E6FE3FB13AB6FB94D28FBBD95576A20
+8F8ECFC0952959796BE533D4867224DFC44D079FB8166AEF46F118CFC1B114DD
+C87AA0156DFA28A10D8599B40588E1F84907CE0300C7A8CF3C6DB63505A79D04
+1AE29BB896A6B2266FEFB1CA6799CF384B1113F54ECE96FB5C8C90E0B36367AF
+5E580A75E1EA2278CFBD60956D333FA75BCAFBEB7FA767EB960097BD38D4F4F3
+E16F00AB29674C802F1EBE7291B4452664260992AF6F834C1D02273BF1B3EA24
+5D6CB3D611F1A99F27300035ED706E6C3D18F56C7CFC472134A96690FCF476D0
+6843014794534851A4CAAA547D5DC4AADC3D94A03BE478FCDCE19CB05BC7CF54
+8B88D9698141D2309327680139F05275D56D025ECA13A25B3211A0F07AFEFFAF
+2FB4A48CD4CC4915F988A619C6410A2E16B031EC19B7FDB904D149467F1D295D
+6777FDC0712AA90E529D4768339EF966B5907B41CB1258BE514B39C8F853D28A
+8951224C1FD0EA80D19D0BEF548A23E70E9D172A2FC6E6BAE3900D81D4E6C530
+1317BBAC68FFE952F47EDFDE434966B89B9E6DB348C6D3D8D10EF6254AAD9B9E
+427FCA129A3867C5A0CA1723D4828F8DB1D99774606CC00BEBDB15E02A88F7AA
+2B3F47F420E12A5104A09D6AC903E0C9C715BB99A87DBC453829F2ED8CC6A934
+FE875D5947EB0B7C5FBF193769C209CFB55AB5E331DA007C22517035295F7833
+C5F54040629BFE9CF0FD9FA9FF10A7DA143138CE41689004557E0DA6A51349BB
+9530B852DBB52EC7FAFA39FCF8381CE3419AF0E9E6D69B14E5020C8DECFB66CA
+7071451B87A1FDD2789736E5A3DAB0644CC9727B58529B5A807388CF904C1BEB
+8CD7B322676FF8B7CC6A25F887CBCA97DE6A7CC53DD7142BBBD1FB447634E2A5
+E52158C7CA2951E87722298B50ACCD1A381F3FCEA2B8669026C751898DFBE999
+49B86879D78B50F5CBB3FFF59FB9CC55D6C0AFD190C521C9D087B8F0C34B11BE
+7F5C705FCED255F6376E3A86A49B49E8059406A6A387FA711478EAC4007E5D80
+C907C72BCB7DF583F76B6685ED9B4262F607D69B23554D1D275A03692D5DFE85
+5002120CD7786263ACDE7CA7158644D8D8D78A757182C03620DC5112538E66F1
+61B30CC11B60AAA0B1873A846DB6281D7AE2420A76E6F66FA5D5B288B8888666
+F707AA8F77363AE3C2B0BBF0577D0131F0F7FAB358AB10A0511605B28C5402B5
+C5EA4466ABBAC85601CF8E61101D80F84D7FD7629620B931302E14E7A89B8955
+41D7A89413A906399D5E375665A4C24DEBA6DFFBC751E23F4D17642D391A4626
+F8397EC5553572023B0F57D5430E35163156F76CFE24442D041B6FA0B44AF48C
+15FE0C8C9CBC300AF3A8BBB79B5BA6D2D1F45A294E201DC327BCFFBB5CBCF384
+CF4FDE8C9B07874E8C954603C4A4F0EE585610B19976F6682B41FE2EB56299BA
+25EFC2604FBD73F7DE1AF858F325DB0D1FD2A3F8965A1DB71CB68C23ECFFE678
+E08C34E52C0E0B4F61B2CBAF3E765ABABDBE364B31C5C7AD94BB7CD5C92AB012
+43DDCD9A83C43F021176F69945AE6A702FCCACEBF5DBCBA63A92D82453DE824B
+B240CFF9B29DF6677D635BCDB3A22DE9F1C0172F32136BC107A1CF2C614897F5
+D6D1C35B2ECDE7E0C8D8BDBF30944D46DEDBCF50E9C45D49A4AECDD5E079BA5E
+4866856A603494B605E4E5BE811E626B6A5F54938324785CF96240C12CF83F2A
+5302D5588F54E27486A9BB00BAA9262145DA0B7A1DA5E514DD6789692290109C
+3F6C8C1C63E49C74BBCDF5FD1D7CC7CBBDEE68BDEED59DAA8BF185044C159365
+0CE5077F69F99A1368365057527484D54BE5461BE90AD66334149EDB5EE3317A
+E9070F453CC27111F223C18081AE540DEB5F17E1978E28FB47C5033AA48E55E1
+AD0574F400E446499C63C0937ECBC03CD00E75355E2C41BCC160FB1D793D0407
+355BE741FF520F35C41C0EE6F7FE36065F33B4E30C6DCE227B4B514A575D09A0
+47A0BB2C03240393E73A976A06C6FAF22B9EB30619149F05E9B65F651F8E6199
+634F9485E2AAB2BDED709E56126111165A08D0171538BA37E325A173E4982BE2
+55023BBA920F46060883183231565C764196AFB26DEA93056F0FB140630E9725
+1EE72FB4374FF43A2A8E0807B8F77EB429B7B9D5ABBDC04072836F7EFB4DEE53
+26C1CEC5F6CF13334B84F47EBD1975A83FAE789C309A9243919104C844B6220C
+F0FF4E9C6E693A6E4EB2D260D7DA96FDB956216E30C5EAC29AA568894361FAB2
+F9EEEDBFD197B278BAB7F2AD3DEBF46B0B1EE58F005132844C96171806BCD864
+2FD40897CC3E719856A9D137B772AFEEDDAB2D2B353C0705EFEDDC42D169818F
+A2D0404F7C84DC9F9CB7527A36F7D8555FAC44AF8A91E872985FA0D758D1C898
+35BE8560D6B584ED66CF9D834C9EA63434575FBB33E54554D9E4B127EC94F55E
+7B761616E717A84216C8BC656F79B0E567553932D9F30D3355A30BCB9DC8BC80
+1779D6995E35B3D97D019601BFB970E3CBE8483FF168860909534621D8873D37
+0073F48FEE38F40A8468FC016F7F76E6E1F09D33DD992FEDCFB2ED3860472E84
+6204643E41699ADF19440FDD4F0DCEEEEF52351B782DD90583361B7B8B5541BB
+61D25A5AF18FA9F70C599F424C8F9DCFB47420CF4104120FC6F9EF03DF7133FB
+27ECF4D848F5E067A27377985CCD10DF85D1E517B813DAD36E8A40664B352FAA
+184A8DA90C0DE095DBEF531A2481BB31996107FC057A9D6263514089FA589C0E
+AFD82DD4EFEF08B80F0F5D91B22E47A0474E27A0EE54755D6280AF36D52E0938
+C57614778147BEB2E89B4236B540457C7FF03BDB6C6978BB69584FCB58AE4625
+CE733497EC0DF25BEDB7E116C6C5D3FEEEB88D771D616AF3D050B3FA5568F6BB
+0752DD30E42B427CB6E6065CD968C6257F2B325F94CC09F5729FD6FD3797E1B6
+C403A0F1B8F3784A856226E64EC3FDE9F4837B512BA76F78F781E44888186DC9
+C2CABDCD59EC4145F6A70B539A55941E830E6237C72AA0B9BF6EFBA37C0DA4B1
+CB4A72627A658600CEA384EC9C5B0CCD3C1ED49530A29C6A6091529CD8D6B2B7
+027E5759C87D353F4090802F13CCB8BBADF1AB157AA24310AA275F0A4FFDA93E
+00E05E4E534735CF2E575DD02FCA3CFA96A9896451E9C0365CFB4952667E2CFD
+D46D3ABC40FA8F73EC68072FB5AE920E14B37C19FF936649DF5E8A978E9DC653
+FC7DADD3C2DCB18A1839CDA3653470E56E62230A148304BFD323CB1D39F6B50E
+D5444C8608AB03D73183210E6F4AAA2EB97005E0824AA42A2ACA2732A58B1D36
+B1EC88C9C5E2848AADED90D2F1BDA936C84263BE055793C553B986B73FE8A22C
+1AD099E1D845D5AA1106670C003D889E169ED1877DC454B7601112DC539F56A4
+E936C65227E657BE26FEB41C8E950BCF54224805D9FD6D2516C4DEC09FAA3753
+262B0A82357EBA2978E80C291B267EE5FC19FB8B6BD509DEE723E032FBCAD28A
+658F6516D60AE9498A14E1B0AD1FDDC65025EE114FD73EB506992C1FCA660041
+98B6C72AB28D643BFFE1160F600543585524AD00C04BA1C54335536D65B7C471
+FC823F7AEF385E4A013C4924750DC2DC8F12388029D0D958368C15B9C19D718A
+AC77E9831E75A330583871159AB63A0332984FDF9D0498AFFD678ABA43FB885D
+EB0662034DCEB9576F66174254B26CC515DDAF9EDFFADA446BB02E356E2B6499
+C6B7F4BADF5F949F6E50CD85E869646102F2E5222E62405A4798955E7F4D8018
+050125F9F5F1D8B2AD8F4A6472C2661DF0BBC6B669868C6CB8B52D528F389911
+CD58F5AA9592027BE25DB1946ED1216F2E915B4333AF69C8C0CCAEA467A46376
+D0AC46F291251D3B09883EFCF8EDA7386BBE03A5DA3B5F2FEDE4EC516FDCD92F
+12D72BF6C7E690AE3FFCD13C587D2A48574653F562526B0ADCA0B701BE848951
+3A281BE4957189FC236B8CD68FD182FDE918E5C7FE2EFE91C4E6573BD9D0F0C6
+2DDA5F477152DBF21676DEAB763F441C7984F7650920CE6EF3DC77D707F8E03F
+622F8E97AA3E7749D080FF7CC0FD1CC561B84714BB4BEFF4628DDC90711AA7DD
+6EDA62DF8F73B9829904E802D8E0D60AF8F06A0DAB973B4C6A89020D3030B61A
+D8C92ED9D14E29AA92C5305FC4687061998CF71056FE50AEA39BB265E6DF72F5
+F6EF4287D4DB779617F1CFFB3AB1E9D9DF73512C86CF2A82354749586EC9F273
+8CD928A02590A5C51CFB2FBD5F5CF25488800090376519E4A5CF5F0D1FC98BDB
+101ED47F36A3678FBE57A31C09FBDBE605F0E9CBCD3254D415061AB3B9E668C2
+4CF41E833517AC0A07C3A0AD412E608CB5F0996D27E7341A2C637931B1BFD660
+1C330898C707F7323B1A47A6E6794AA94EF07C99D9BCD106108EEB903549140F
+31D5E0DE52FA3FCDE78C9DB6F202940E69F86DA4AFFC8974D669A8802E6D5C49
+D60E640E5433F7474BD623580D24432927E6919E575FEC9FD044398D6174DA64
+7E6B7B042777003E55C4DF4981DC0A45B3AC04B1512380CE39B97544D3420C4C
+B926016CDC82F5CD160FE7106DB362DDACEDAECEBD20464513AFA156038414C7
+DAECA2AE5D517DC2BE95B0E4707E0B191B3730EFB539CC0D3B80E1CC7B6ADCC9
+1F142222BE572124CFAA7246975BD131748A110B0362874FB61D91EA94A4E330
+B88C30A9CC1F7EA5AEAA12018A02EC5681D000A889B19641609A6E712116B7D2
+C7A04AA207CFE9A619290044CC4BDB7979502B5E7182D742DB646A923973EC3D
+04382E589C9FDB590D5B25A1D414060802E1251E1F0DBED3B2674DE3FEB7ED96
+50AC23B0E3D9E44F2904B064D06A002AB11A44813BBE243F907681F6A5B7E4B4
+2BBB1D15AA391977FC0D644B9E4EDDEA1F6593F9D6D64F30F1F8DD238E762E53
+CC5B588DA5014CFDF4E281A34CC875656BF31B1ABE80617C269D3C32EDC40CA8
+E354DD255A369C4DF775C35EC9FFA8941D71FA984261AC1BE8C09C5B656658CC
+CC2AD41D7CCE283A5530AE8DD2B8D03BCBB3B6B3696FD601C563289526310DBA
+FFA90463815A687ECF1D69F69F7B449AEDA02A15E1A9227B0FEBC29F6E16866E
+9E0FF502CB87D973ACC8D1BD08B5B76798CAB1A5D8A17DA7CC244EF085F080AC
+96CB5CF0F0B2DCE2A1DB769A8777C971A7A4550C759071440654E195A7DC4044
+F60BD207C81295CA20A54903E0E2EBA0726C82DE70F2880A52198CFF2AECC6FF
+0DC562A031D56847F6B8E3FEDBEC86862162F3E982169743CBA32DCEF2DFEA24
+D548A862DACE88B14677B0657420CF60E9E186B35AF3863BE4A9E5455BDAE62D
+D39E6C7DE4B3E079BEB082842A1486DB5F8E759204926F146037DA7A77CE50B6
+8C29BC9B5299739FE52778D232B44833033A7DFB300429DD002E14F37EF31D08
+069B7D94E70BD31F90495D237B4F175540B12675874396FC75F9D005497F0424
+F68BED0F8CE28AFCCCDE87BF0D0F5301DADCF69980812F989CA9A7642FC5D50E
+0632D79277781F3CD9E014E9DA160B2A56CA7EB621EE3D89018774B34E943F8E
+EAC217CB05EB834B562B03CCEE6E457C681692C54339506BC7447B943D151012
+93F026765C80712D5398D3EC320BD4864BBA9C4F7242FD066CEBA54390D119BA
+C3A15E45CF70E4999BCD0BA14FBA7C6480DA52D9900CC36DDE18693DD1FDDCC7
+FB5BCB5328E5304C0B3189166A2D7F3F3EFA16A4D8C8EAA30CDA83EC1BA519CD
+C6CDF954A680DC9487D5397201A20B1530AC427F0DD32A17B8823428E4D1AD8C
+8C512FF0F9576EBB8639852BF36E043E302D19A3B559F5F43D4077AC0F9CCDC4
+1A0B6BF5A5F657CB0378772D7476027E060D592492534DA6CFDC84639FDCF136
+036EAB94BBF6AE2A3302A6640EB48A537B579532A557C69240B5BE6DCB609E65
+B248336A2F7A326E85B9651659AD493245223EA204DC2ABBF33007DFA9307E34
+90F924B657395F3622C5449CB9965988E90A9B840FBC2F8B74BB2151B50467FB
+0478F1423A776F79DF8AC78E999B1D6081A9B83F714ADABB5C548CD2AF4E9EF5
+A631BD50FC51817AED8EBC6BF7A46767E562BA211561347D89308D28FBC7C04C
+61A1324C22E2352DF95EAABCE7EC3ADF40B863589557962D4330F443D0A14F5C
+F3DE678CC2C45E6582F47F4EB36EBB12A73B395149CCDBD9A92E3E7A9EFAC658
+13AF608A3BF637A36A7318A342FCC9804352E361AF67436E7B4E6361FEB8656E
+6FC5328E38D8C855BB6994E602481654E5372BEBBCBF48C63F6CFACC9F3D4FD3
+95B963ABCCD595D90C427ABE71671BC690DB170494938B4A9B8C0B329C4B0F65
+28B3BBB68584C7CEC9975566FFBF29EA166441185340639DD0FB38BA355A969B
+1460753D46ADC2B94315E08A56E5023BA5473DA1933EAF6CF46C1C6413966EB6
+246A6F259FB72738C4DF24F91061764EDCCB4B1834F6EEB9BD80AB12CCBB6BAE
+3E9715FC068386456612014DC8457AC3EA92D3140C7E9901856FBF9406F5FEEC
+C4814CB0CEB13A44908644A5B6D69DDCACE742080D4A41A70D93705433D8B1D7
+51C782D483FE38BD619D1E0E863BD24AF8D1ED22CCFD1DDC63E481DD1D525BD3
+A69323974D440E4C676A8480ADA8BEDB2F8D7B82DF7E8CF71E9BFB6594A59055
+A50BF0B479C6D1E62E1C25E9BF89C898F815558AA20DB908210E6156A3C0C98C
+DB0215DC67BEE211C018E82F504DA56DC959DE82E9467C9889CFC353D379E8D3
+08B40C015840E9EA9F9B11AEB3B1690F7B51E00181EAFC769C32A0EB57EDB2CB
+B8304C16B1E391D9C83496A99F765A2F593AE9E60170F93E68D99414A71B2298
+F869CC5617669A5842F10170D8C73BE732CFCE2A2803B1ED4CC582817356A304
+2E80D38F53DB04091D403F76E9648FE51BD4CD3728FE0E27C563DDBA778D2B57
+8B9082ED2A2EA10C0A9EC44DC8695E1B930F408604FC497BB411F34718535925
+A8C763ABD12D21129E018416D6A7F3B85010642706F63E9109CA68AC84FF543F
+5CE4ACEA6680A279A54A7E0A83F28B661684AB955DDFBCF3483D2255986F8CC5
+2141404DA424CE7C0F45AC2938AD5A9908B18259FD2C7865B242C3A6427DFC53
+B2AB4291DDA1CD7484AADAEEBEAEE1F6D9AFD997644C576E703F9588338E7DC3
+3E8BF6265048FD288DABEB790875CB83D7102EE1EF1ADEBD252146F5F1C34CA9
+270577C4D71EE41705F6A2F76A17463C8E553BF1E09C06CE00A600B907F36611
+464B9D2974D1C9C8BCB589AC5BB056FA8502E4CDB65B7FD34F5FDC2108915465
+E92B246505C67119DFB1E0A251ED432409F6674195B591E704B029E40E2AA827
+8D8C6A1E2E6E8A0FFEBEFB75896E0943E394F90F03A0DF61ED23E57A24E0C2D2
+79F9977AAA33E6AA211B48720A1D0AD4789608A29ED895DAA0D4A2428654EFFD
+F5EA4087E6F727DE7C5EA25C15FA2A6A967FD0A240E890997D78AF8466EEB7DF
+8D8BE4552E1996C4684BCE3E853E1C541C7D9C2333ED357D179E4E92A44518B1
+06D92F646AE65F7A27F746EC366EF4921D088CC6CDFD723838AE89648D6B6EAF
+824C08B6AFC9D8439DAA5CCC862FFA61AC4B0EEFB2453C972B1A64FE31C071FA
+A2DCF66B9CEED757FE42B9DCAE3302F807F7CB2C779F7441EC5F11C776036719
+427F1799BEF7CDFAB114B7C30F27C43CE3D71A71C7BA87C4FC34B711FFCCF892
+23450E5CB964642AE0E4638FF80A913FB7BEDF489DA43E315E8CB8506A4AE884
+BC0832A6B83CB4B390519DA862769AEEF454D3C4CAC6CD3899238A044718FEBB
+59F5D7C79EE547269AAEF1ADB1DB7A97E5A01435D957413FF0FB229527025DFB
+E1BC87C4198E5EFCFEFA3ACB877B1370D222C1CC30D0AA411440B6A59D545D53
+7D72D4D98337E08107FE636E3F25932D57108A8E3BA3F72006744D1B2E33EE8B
+CABD44AEEA44A3307ABF8AC6B68F8D83CD6EDA68951673D6984DC6E2FE260C16
+A8673467A85E727DF7D5F2E5909BD2D22D272F87C945B0E93B4EC1A759393A9B
+75F7C462B34542FA02DF5548CAB66E75B88A834354AB7439DDE480C6068A214F
+D3748CE5C2B2F1693DE0EA5162771F7FBD17F5A1A7467667CAAAD0610F38CADD
+89102E1351F7B5DB870DD9A3CEA56863C249263A102E649FD16FD827BD60BD19
+E680DAB90D235E5BF75D5315B2BE376EA7C1FC97D709FA12CCD937CDAC17845D
+C373FDDBB0533C37169A34CF072F187E5661FE60DB1285920E3AD01EE806C874
+48BF676D73DCE4A919E3BD19B6A6DF8C4A23BA65A599774CF0E45F2F20410EAD
+5A9E43CE85B335F953A0879CC8327B903C0F24CBDF65AE01836745EC4946749C
+DC9810CEC0A4868C3356DE8D6447547785EEBD102E069C2DB83EB107696C8EAA
+EB71EDB076E924F27351293F26EEE77DE1ED19EEF02EFF9DC8AD8827BFD0E10F
+E3301ED3500E006F4898D0FA373F902A40DEAFD33850059A0EDBCC4FB23B7BFA
+5087714FF84D9D987933D86D6533C0784BC72A32DE5E26A4CAEAC39715A19360
+79DAAFB08C7097553749CC993001EF6C17100AEDAF505DB97CE45372632F5CEC
+A48C77B21F9E50E81EDE28E19D604ED0D7398D9621B7428F729FFA20F9DA8847
+F83FE50721CCF7260F38E1DF313C9D545D237A28C15934B1018C513F0AE93D72
+F0F22E8F2385686BCE5435122C3EB067F4AA14FDCFB812E7DEB5BA9ADECFBC44
+BA562AAF8AAAC463FC0B2E04A4BA98460A16C49B8AF7B9D624012D432E29FE9C
+44836E970CCD5900BA3C2E7A9F4FA98E4AC8DCDD503162CEF4C0CF1598EF607B
+E11D60FA839D420207FF3B46E1F432A69C99722BD77535A5A1827C0370BFDB83
+5EA905F8EBD42B427A38FAA2CF4E819C9FD74BF27F548875248AB6D00D2E29FC
+6060F2F151C48B758F2C85C1EBF5868A18A1B747D324F7DB49855024F213092E
+FF0BA46976813383A25196A4BF30EB1D2214362C75603407488823D2869ED813
+2D84E759F25F9BAB59629C2AB691076AA9BE254A27B49652B05E9AF71865E5E7
+BC324DDD2A1400F4B2888620E60EB08A9EFABB287CA0E52575A364CB0F22380F
+E27FC8A0DD537BC0959413A2657AE6FE12936A61EA31ACA64F08523AD9B21514
+0F352F2EF3DDC159795F83E9E12870C13D1D9B98D3E152CED06D3BBEF27B9531
+000CE08D0B280C2C37C8D295557F1BA92C8233259A007E1F0FA0D54762E7A6C4
+28AA751CB4E4D6AB5466D8A04E4AE9F64A3781B730A0BCC6108C9D5198810D35
+CC353F1E76DD3C78D33772F3B3245716DC623F4177418224AC4A5F3E2CA59D03
+95BD0C240231093AB97FD553194ED4B63856045E23D72F67BB6D6A4D6CBC0FA6
+B62BBDF0AABB66C36DACD73A99801E813C6F3BBEE1AFA053BFC3530F2699D2CD
+31F66636514A088710DD1DB370BEAFC47470A122381AB4F374BBFBD2AB39A953
+DD0FC82DEDEA60A99C9EB07EC0F702547C9ADF01164D5B22D6A41059984F347F
+CAFE7146B3626AC97EC8AFB2614D085CD5FEDDA92EC73D7EC86FC0DD5BC9E912
+D68AFBC4DD321E00B6954F14D5CD9D6580C8DDDDB34ECC92B16BE8953B035AEF
+0523D929EF5A086E7064E1117DD2AE2CFC346889116731CF431A2E22C6FE34B7
+6B7535EBAD4AE760956837944EAAF4F001120CB784D249E6CACCE4E0E0FFD8F0
+330C57C7A6E27545825F36189476B887BD56A72802D8947A42323C36114FBD24
+B47F11B3B0F7C5498463F54EA557574F1A8EAAD4D47964B9B244D75FEF37327E
+6096D66FCA9E617E441978D58AD792A93E3C37FDB5FDE506AFE0BC0588FDDEA1
+2E64D54283E22364267A5B499EB52F623FFA9CB11DE74FC33715AF2ACFE57C25
+A621B07E7D39E56F4ED2AC442C1B85B412DFA95C574BBDE5111A09F2F70F46CD
+FF84965EE534CC63034A2E579FA7928906DD2E64560CA3405B7B5247ACE33391
+F24669DB56F6BD022BBFA47934547003902ED8344277AE5761DBF7604D69C02A
+33A7F20EE06494669AAE3403BDAB6E4C4373DD56DF66F9700A06FA86B030F3F1
+3B8210C9948A6EEF8400C952C4A81159316390109680E5C9C22595D8E6FA6717
+B0D6803E850AA03F2E854F0A39F819B64357D53B3FA73AE0981ABFEE4352353B
+E5A31D3C3672F07FC2AB8FCA25E5B047F2AEABA8A658ECE9E35579E4214A9834
+C6EEA901E3A72FB1521D22FF6F117C6E80396CF1FAB02A8597F2407BF6CAE3BA
+976537E118C6E84C69C76889DEEAFAD6D658CD83381C8CAF989C52BFC59334DC
+7ED97D2741940291B677BB4AB0F02D45CD63379DA8F02F35658F13AF64F9D6AA
+A42A77A6D2A1653BB1A0FBB7A52249D8133440827678AC81A66FC3DAB5A55F25
+B821E7B5153C6FACED54C203E5FA9F6DFDDFAF54C9C870B719EB0EA4C1131C98
+5DE4047C1862E71FCAD3E4FD982FAC9CC900FC22F6770712FF82BD27683CC442
+9B684AAB15FB663A04001D434E26690056EC7EE8EF3D3E4AF36DFDACEBF21B2D
+681A134805B6D34D639782170DAFEBF22C888757E4BBAED1F72F2AEA9ED6CFF2
+C477430514D06ACD1E2AB0BF1EB27EA4DEE773DD77D140F02D2F4D5DB55B07D8
+23AEDB701A2885BD8AC950E8DD285172BBC6CC90A000EE8D5FB6C4D2693C70C3
+B90F94B7F806D4584935D69257CA0CB3F72BCFF88087865C9326F94BD3FAB401
+6C89D92242195DBE02F2437F6A96170F1D0C28623D6921EC424B6222838D18FA
+E07B02189A3A79B317770FF5ABAA3D8EC721A5AF14B5276651930AED5B20CACC
+34128430F8D6AE1BB7A52DCC22A9796792C926528C0DAC4FD652906A43D695B8
+267B1E89FC1B96628CD003FC2A3E8890E68655532146DC927D36C60E98E956C7
+F86DC4B803247084EF8014C3711867EB692B06F90E1B099501F4CD9AE0EEE694
+5A2B34E927E5239DEA54A8E9BD542DA437CD7928C67AFB661A72B9A2914416FB
+6441889C6316F0D4045E09419F5D507152644126C4B614013B868D9F7631EB98
+46A5979176C2E3F9F6463BE83908141553E90F523420FDA7ED53F711C27A4517
+1052685F33B23C9A3D34288073B7FE4AC7796A0C3D7669531B4A4CD47C8BA1BC
+9179E425B3C5C004A93ADE699B521F798B9AAE48753028A9F95F68ABB41792E8
+D067F9819247E7D81AFA10D72D0A7B3EFB3C202DE67ADEF30EFF42B4FA14DFE8
+573AFA45CF40E34AEE040ED718C7A37604E898F79184D346AFA0299ACE9BE973
+90B606F0B88DB4336292577439829D202B8BC881559868C2D32DACB708DC7EEC
+59632D3E618D37B284780AF2666CC81BADB341C10C9745A1437015AA91AF676E
+36741DEA9046B9EE93C70CDE6E5BE30C1574E295A592B03B951137A5443F980D
+C36ED9B52125EB8A71078F51FC10BB49CFB048A54824A6911D945641933857D0
+A9DC80654384B562FA3F5AB575ACFFBC53B493A0FB579DC9DE1231A49FDF4375
+865FAB1BA20E74E4B314211692DD359441E47068397D57E608871CA05FB89BCF
+E0D46BB5F84BF354BE90BDDE0ED7C565B84C32CF953F2BE1136D9C651891A894
+FC786EC9FACBB8E3F0ABFFE37463BEB48D313D59BAB7210BA2B6CFAE1B2A8BE1
+ED6B45CC9E251C4E8003E5F562EC048B69CF13A634680A2C67550CC94CEF59A1
+F217EE7665184E18D63DC0C91F5C606AD52F2987D379088B39E217C33CA14538
+DF3FF835551D339BF2B836957217D3ABB4DC57BDCEBBCCE14B70DAB6821FAF0E
+FE68781DAB924B6966569A4FE5134ED14A74F72FCCEC988EEC4868DCD443A503
+0974EAE6F07E8311C1979A3B2B586188EB5BBABE38017D31FE9685EA852AD59D
+8CD75108CDD566599D06B611AEDE7C492B3E82186980527C9281DE79D7449BB9
+660A8353E924B4DB1B9F6166553F436409A93BD5C603021AC613D5C470EFB743
+A6ABA267B872D32B531399BF9ECB63364379CFC3D1804CA7BFDDC19D8AB9560C
+66B7D20F94E6AB76722D02E681D3E4561DEE24E21977A4C76967FD8D6499B435
+18BC23E58ABAEB635A8683C4D13551CCFE2B2179661992E3AE95EED9F0470693
+D09152B40DFBBB0298A9429F8B2300676D0353522265ECF91369F3A9888A26
+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 48 2[28 58 3[59 55 54 58 7[38
+38 38 38 38 38 38 38 38 38 3[21 31[43 12[{}52 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
+42 1[28 1[42 1[42 46 42 1[46 51[33 32[51 12[{}19 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 46[50 2[50 1[34 45[{}20 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 13[45 45 45 3[30
+8[45 2[25 18[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.2,)g(for)f
+Ft(Bash)g Fu(V)-8 b(ersion)31 b(5.2.)3118 1697 y(Septem)m(b)s(er)f
+(2022)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.2,)c(19)f(Septem)m(b)s
+(er)f(2022\).)150 4523 y(This)e(is)h(Edition)f(5.2,)j(last)e(up)s
+(dated)f(19)h(Septem)m(b)s(er)f(2022,)j(of)e Fr(The)f(GNU)i(Bash)e
+(Reference)i(Man)m(ual)p Fu(,)150 4633 y(for)g Ft(Bash)p
+Fu(,)g(V)-8 b(ersion)31 b(5.2.)150 4767 y(Cop)m(yrigh)m(t)602
+4764 y(c)577 4767 y Fq(\015)f Fu(1988{2022)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(9)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(9)399 2658 y(3.2.1)93 b(Reserv)m(ed)31
+b(W)-8 b(ords)27 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(:)h(:)f(:)g(:)h(:)40
+b Fu(9)399 2767 y(3.2.2)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(9)399 2877 y(3.2.3)93
+b(Pip)s(elines)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(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)h(:)36 b Fu(10)399 2986 y(3.2.4)93 b(Lists)30
+b(of)h(Commands)20 b Fn(:)15 b(:)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(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)33 b Fu(10)399
+3096 y(3.2.5)93 b(Comp)s(ound)28 b(Commands)9 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(:)f(:)h(:)f(:)
+22 b Fu(11)524 3205 y(3.2.5.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(11)524 3315 y(3.2.5.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(12)524 3425 y(3.2.5.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(17)399 3534 y(3.2.6)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(18)399
+3644 y(3.2.7)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(19)275 3753 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(19)275 3863 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(21)399 3973 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(23)399 4082 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(23)275 4192
+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(24)399 4301 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(24)399 4411 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(25)399 4521 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(26)399 4630 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(34)399 4740
+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(34)399 4849 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(34)399 4959 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(35)399 5068 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(35)524 5178 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(36)399 5288 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(38)p eop end
+%%Page: -2 4
+TeXDict begin -2 3 bop 3699 -116 a Fu(ii)275 83 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(38)399 193 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(39)399 302
+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(39)399 412 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(39)399
+521 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(40)399 631 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(40)399 741 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(40)399 850 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(41)399 960 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(41)399 1069 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(41)399 1179 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(41)275 1289 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(42)399 1398 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(42)399 1508 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(42)399 1617 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(43)399
+1727 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(44)399 1836 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(44)399 1946 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(45)275
+2056 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(46)150 2306
+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(48)275 2443 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(48)275 2553 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(55)275 2663 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(67)399
+2772 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(67)399 2882 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(71)275 2991 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(77)150 3242 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(78)275 3379 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(78)275 3489 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(78)150 3739 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(91)275 3876 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(91)275 3986 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(93)275
+4095 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(94)399 4205 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(95)399 4315 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(95)399 4424 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(95)275 4534 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(96)275 4643 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(98)275 4753 y(6.6)92 b(Aliases)18 b Fn(:)e(:)g(:)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(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)31
+b Fu(100)275 4863 y(6.7)92 b(Arra)m(ys)23 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(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)36
+b Fu(100)275 4972 y(6.8)92 b(The)29 b(Directory)j(Stac)m(k)14
+b Fn(:)j(:)e(:)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(:)27 b Fu(102)399 5082 y(6.8.1)93
+b(Directory)32 b(Stac)m(k)f(Builtins)20 b Fn(:)c(:)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(:)h(:)33 b Fu(102)275 5191
+y(6.9)92 b(Con)m(trolling)31 b(the)g(Prompt)10 b Fn(:)15
+b(:)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(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)h(:)23 b Fu(104)275 5301 y(6.10)92 b(The)30 b(Restricted)h
+(Shell)9 b Fn(:)15 b(:)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(:)22 b Fu(105)p
+eop end
+%%Page: -3 5
+TeXDict begin -3 4 bop 3674 -116 a Fu(iii)275 83 y(6.11)92
+b(Bash)31 b(POSIX)e(Mo)s(de)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(:)
+h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)28
+b Fu(106)275 193 y(6.12)92 b(Shell)30 b(Compatibilit)m(y)i(Mo)s(de)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(:)f(:)h(:)f(:)g(:)
+h(:)38 b Fu(110)150 443 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(113)275 580 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(113)275 690
+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(114)275 800 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(116)150
+1050 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(117)275 1187 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(117)275 1297 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(117)399 1406 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(118)399 1516 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(118)399 1626 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(119)399 1735 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(119)399 1845 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(119)275
+1954 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(120)399 2064
+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(120)399 2174 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(129)399 2283 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(130)275 2393 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(133)399 2502 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(133)399
+2612 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(134)399 2721 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(136)399 2831 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(137)399
+2941 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(138)399
+3050 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(139)399 3160 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(140)399 3269 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(141)275 3379 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(143)275
+3489 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(143)275 3598 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(146)275
+3708 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(150)150 3958 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(152)275 4095 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(152)275
+4205 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(152)275 4315 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(154)399 4424 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(155)399 4534 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(156)399
+4643 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(156)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(158)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(158)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(159)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(159)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(160)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(160)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(160)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(161)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(161)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(167)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(168)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(172)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(174)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(182)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(182)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(183)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(184)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(186)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(188)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(38,)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(46\),)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(91\),)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(100\).)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(9\).)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(24\),)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(35\))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(38\))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(42\).)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(44\).)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
+799 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 908 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 1018 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(154\),)47 b(the)150 1127 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 1237 y(Section)22 b(9.1)g([Bash)f(History)h(F)
+-8 b(acilities],)26 b(page)c(152,)j(for)20 b(more)h(details)h
+(concerning)g(history)f(expansion.)275 1370 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 1480 y(quotes.)150 1677 y Fk(3.1.2.1)63 b(Escap)s(e)41
+b(Character)150 1824 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 1934 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 2043 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
+2153 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 2350 y Fk(3.1.2.2)63
+b(Single)42 b(Quotes)150 2497 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
+2607 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 2717 y(bac)m(kslash.)150 2914
+y Fk(3.1.2.3)63 b(Double)42 b(Quotes)150 3061 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 3170 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 3280
+y(When)c(the)g(shell)g(is)g(in)f Fm(posix)h Fu(mo)s(de)f(\(see)i
+(Section)g(6.11)g([Bash)f(POSIX)f(Mo)s(de],)i(page)g(106\),)h(the)e(`)p
+Ft(!)p Fu(')150 3390 y(has)d(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 3499 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
+3609 y([Shell)29 b(Expansions],)g(page)h(24\).)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 3718 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 3828 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 3938 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 4047 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 4157 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 4266 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 4400 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 4509 y(Section)31 b(3.5.3)h([Shell)f(P)m(arameter)h
+(Expansion],)e(page)h(26\).)150 4707 y Fk(3.1.2.4)63
+b(ANSI-C)40 b(Quoting)150 4854 y Fu(Character)g(sequences)h(of)f(the)g
+(form)g($')p Fr(string)8 b Fu(')40 b(are)h(treated)g(as)f(a)h(sp)s
+(ecial)f(kind)f(of)i(single)f(quotes.)150 4963 y(The)e(sequence)i
+(expands)e(to)i Fr(string)p Fu(,)h(with)e(bac)m(kslash-escap)s(ed)h(c)m
+(haracters)g(in)f Fr(string)46 b Fu(replaced)40 b(as)150
+5073 y(sp)s(eci\014ed)32 b(b)m(y)h(the)g(ANSI)f(C)h(standard.)47
+b(Bac)m(kslash)34 b(escap)s(e)g(sequences,)g(if)e(presen)m(t,)i(are)f
+(deco)s(ded)g(as)150 5182 y(follo)m(ws:)150 5340 y Ft(\\a)384
+b Fu(alert)31 b(\(b)s(ell\))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(\\b)384 b Fu(bac)m(kspace)150 466 y Ft(\\e)150 576
+y(\\E)g Fu(an)30 b(escap)s(e)h(c)m(haracter)h(\(not)f(ANSI)f(C\))150
+743 y Ft(\\f)384 b Fu(form)30 b(feed)150 911 y Ft(\\n)384
+b Fu(newline)150 1078 y Ft(\\r)g Fu(carriage)32 b(return)150
+1245 y Ft(\\t)384 b Fu(horizon)m(tal)32 b(tab)150 1413
+y Ft(\\v)384 b Fu(v)m(ertical)32 b(tab)150 1580 y Ft(\\\\)384
+b Fu(bac)m(kslash)150 1747 y Ft(\\')g Fu(single)31 b(quote)150
+1915 y Ft(\\")384 b Fu(double)30 b(quote)150 2082 y Ft(\\?)384
+b Fu(question)31 b(mark)150 2249 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 2359 y(digits\))150
+2526 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
+2636 y(hex)30 b(digits\))150 2803 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
+2913 y Fr(HHHH)41 b Fu(\(one)31 b(to)g(four)f(hex)g(digits\))150
+3080 y Ft(\\U)p Fj(HHHHHHHH)630 3190 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 3299 y Fr(HHHHHHHH)42
+b Fu(\(one)31 b(to)g(eigh)m(t)g(hex)g(digits\))150 3467
+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 3638 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 3845 y Fk(3.1.2.5)63 b(Lo)s(cale-Sp)s(eci\014c)41
+b(T)-10 b(ranslation)150 3992 y Fu(Pre\014xing)38 b(a)h(double-quoted)g
+(string)f(with)g(a)h(dollar)g(sign)g(\(`)p Ft($)p Fu('\),)j(suc)m(h)c
+(as)h Ft($"hello,)45 b(world")p Fu(,)40 b(will)150 4102
+y(cause)33 b(the)f(string)h(to)g(b)s(e)f(translated)h(according)g(to)g
+(the)g(curren)m(t)f(lo)s(cale.)48 b(The)32 b Ft(gettext)e
+Fu(infrastruc-)150 4211 y(ture)41 b(p)s(erforms)e(the)i(lo)s(okup)g
+(and)f(translation,)45 b(using)40 b(the)i Ft(LC_MESSAGES)p
+Fu(,)e Ft(TEXTDOMAINDIR)p Fu(,)h(and)150 4321 y Ft(TEXTDOMAIN)34
+b Fu(shell)i(v)-5 b(ariables,)39 b(as)e(explained)f(b)s(elo)m(w.)60
+b(See)36 b(the)h(gettext)i(do)s(cumen)m(tation)e(for)f(addi-)150
+4430 y(tional)24 b(details)g(not)f(co)m(v)m(ered)i(here.)38
+b(If)23 b(the)g(curren)m(t)f(lo)s(cale)j(is)e Ft(C)g
+Fu(or)g Ft(POSIX)p Fu(,)g(if)g(there)g(are)g(no)g(translations)150
+4540 y(a)m(v)-5 b(ailable,)32 b(of)c(if)h(the)f(string)h(is)g(not)f
+(translated,)i(the)f(dollar)g(sign)f(is)h(ignored.)40
+b(Since)29 b(this)f(is)h(a)g(form)f(of)150 4650 y(double)d(quoting,)j
+(the)e(string)g(remains)f(double-quoted)h(b)m(y)g(default,)h(whether)e
+(or)h(not)g(it)g(is)g(translated)150 4759 y(and)i(replaced.)41
+b(If)28 b(the)h Ft(noexpand_translation)23 b Fu(option)29
+b(is)g(enabled)f(using)h(the)f Ft(shopt)g Fu(builtin)g(\(see)150
+4869 y(Section)33 b(4.3.2)h([The)e(Shopt)f(Builtin],)j(page)f(71\),)h
+(translated)f(strings)e(are)i(single-quoted)g(instead)g(of)150
+4978 y(double-quoted.)275 5121 y(The)39 b(rest)i(of)g(this)f(section)h
+(is)g(a)g(brief)f(o)m(v)m(erview)i(of)e(ho)m(w)h(y)m(ou)f(use)g
+(gettext)j(to)e(create)h(transla-)150 5230 y(tions)33
+b(for)f(strings)g(in)g(a)h(shell)f(script)h(named)f Fr(scriptname)p
+Fu(.)46 b(There)32 b(are)h(more)g(details)g(in)f(the)h(gettext)150
+5340 y(do)s(cumen)m(tation.)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)275 299
+y(Once)34 b(y)m(ou'v)m(e)i(mark)m(ed)f(the)f(strings)h(in)f(y)m(our)g
+(script)h(that)g(y)m(ou)g(w)m(an)m(t)g(to)g(translate)h(using)e($)p
+Ft(")p Fu(...)p Ft(")p Fu(,)150 408 y(y)m(ou)d(create)h(a)e(gettext)j
+Ft(")p Fu(template)p Ft(")e Fu(\014le)g(using)f(the)g(command)390
+540 y Ft(bash)47 b(--dump-po-strings)c Fj(scriptname)i
+Ft(>)i Fj(domain)p Ft(.pot)150 671 y Fu(The)36 b Fr(domain)g
+Fu(is)g(y)m(our)h Fr(message)g(domain)p Fu(.)58 b(It's)37
+b(just)e(an)i(arbitrary)f(string)g(that's)h(used)e(to)i(iden)m(tify)150
+781 y(the)32 b(\014les)g(gettext)i(needs,)f(lik)m(e)g(a)f(pac)m(k)-5
+b(age)35 b(or)d(script)f(name.)46 b(It)32 b(needs)g(to)h(b)s(e)e
+(unique)g(among)i(all)g(the)150 891 y(message)41 b(domains)f(on)f
+(systems)h(where)g(y)m(ou)g(install)h(the)f(translations,)j(so)d
+(gettext)i(kno)m(ws)e(whic)m(h)150 1000 y(translations)27
+b(corresp)s(ond)e(to)i(y)m(our)f(script.)39 b(Y)-8 b(ou'll)28
+b(use)d(the)i(template)g(\014le)g(to)f(create)i(translations)f(for)150
+1110 y(eac)m(h)32 b(target)f(language.)43 b(The)29 b(template)j(\014le)
+f(con)m(v)m(en)m(tionally)i(has)d(the)h(su\016x)e(`)p
+Ft(.pot)p Fu('.)275 1241 y(Y)-8 b(ou)23 b(cop)m(y)g(this)g(template)h
+(\014le)f(to)h(a)f(separate)h(\014le)f(for)g(eac)m(h)h(target)g
+(language)g(y)m(ou)f(w)m(an)m(t)h(to)g(supp)s(ort)150
+1351 y(\(called)39 b Ft(")p Fu(PO)p Ft(")e Fu(\014les,)i(whic)m(h)f
+(use)f(the)h(su\016x)e(`)p Ft(.po)p Fu('\).)63 b(PO)37
+b(\014les)g(use)h(v)-5 b(arious)37 b(naming)h(con)m(v)m(en)m(tions,)150
+1461 y(but)31 b(when)g(y)m(ou)i(are)f(w)m(orking)g(to)h(translate)g(a)f
+(template)i(\014le)e(in)m(to)h(a)f(particular)g(language,)i(y)m(ou)f
+(\014rst)150 1570 y(cop)m(y)k(the)g(template)h(\014le)e(to)h(a)g
+(\014le)f(whose)h(name)f(is)g(the)h(language)h(y)m(ou)f(w)m(an)m(t)g
+(to)g(target,)j(with)c(the)150 1680 y(`)p Ft(.po)p Fu(')29
+b(su\016x.)39 b(F)-8 b(or)30 b(instance,)g(the)f(Spanish)f
+(translations)i(of)f(y)m(our)g(strings)g(w)m(ould)g(b)s(e)f(in)h(a)g
+(\014le)g(named)150 1789 y(`)p Ft(es.po)p Fu(',)h(and)f(to)j(get)f
+(started)g(using)f(a)h(message)g(domain)f(named)g Ft(")p
+Fu(example,)p Ft(")h Fu(y)m(ou)g(w)m(ould)f(run)390 1921
+y Ft(cp)47 b(example.pot)e(es.po)150 2052 y Fu(Ultimately)-8
+b(,)42 b(PO)37 b(\014les)g(are)h(often)g(named)f Fr(domain)p
+Fu(.p)s(o)g(and)g(installed)h(in)f(directories)i(that)f(con)m(tain)150
+2162 y(m)m(ultiple)31 b(translation)g(\014les)g(for)f(a)h(particular)f
+(language.)275 2293 y(Whic)m(hev)m(er)k(naming)f(con)m(v)m(en)m(tion)i
+(y)m(ou)e(c)m(ho)s(ose,)i(y)m(ou)e(will)g(need)g(to)g(translate)h(the)f
+(strings)g(in)g(the)150 2403 y(PO)d(\014les)g(in)m(to)i(the)e
+(appropriate)h(languages.)42 b(This)29 b(has)h(to)h(b)s(e)f(done)g(man)
+m(ually)-8 b(.)275 2534 y(When)35 b(y)m(ou)h(ha)m(v)m(e)g(the)g
+(translations)g(and)f(PO)g(\014les)g(complete,)k(y)m(ou'll)d(use)g(the)
+f(gettext)j(to)s(ols)e(to)150 2644 y(pro)s(duce)26 b(what)g(are)i
+(called)g Ft(")p Fu(MO)p Ft(")e Fu(\014les,)i(whic)m(h)e(are)h
+(compiled)h(v)m(ersions)f(of)g(the)g(PO)f(\014les)h(the)g(gettext)150
+2754 y(to)s(ols)42 b(use)f(to)h(lo)s(ok)g(up)e(translations)j
+(e\016cien)m(tly)-8 b(.)75 b(MO)42 b(\014les)f(are)g(also)i(called)f
+Ft(")p Fu(message)g(catalog)p Ft(")150 2863 y Fu(\014les.)k(Y)-8
+b(ou)33 b(use)f(the)g Ft(msgfmt)f Fu(program)h(to)h(do)f(this.)46
+b(F)-8 b(or)33 b(instance,)g(if)f(y)m(ou)h(had)f(a)g(\014le)h(with)e
+(Spanish)150 2973 y(translations,)g(y)m(ou)g(could)g(run)390
+3104 y Ft(msgfmt)46 b(-o)h(es.mo)g(es.po)150 3236 y Fu(to)31
+b(pro)s(duce)e(the)i(corresp)s(onding)e(MO)i(\014le.)275
+3367 y(Once)21 b(y)m(ou)h(ha)m(v)m(e)i(the)e(MO)f(\014les,)j(y)m(ou)e
+(decide)g(where)g(to)g(install)h(them)f(and)f(use)h(the)g
+Ft(TEXTDOMAINDIR)150 3477 y Fu(shell)32 b(v)-5 b(ariable)33
+b(to)g(tell)h(the)e(gettext)i(to)s(ols)f(where)f(they)g(are.)47
+b(Mak)m(e)34 b(sure)d(to)i(use)f(the)g(same)h(message)150
+3587 y(domain)d(to)h(name)g(the)f(MO)h(\014les)f(as)h(y)m(ou)f(did)g
+(for)g(the)h(PO)e(\014les)i(when)e(y)m(ou)i(install)g(them.)275
+3718 y(Y)-8 b(our)21 b(users)f(will)h(use)g(the)g Ft(LANG)f
+Fu(or)h Ft(LC_MESSAGES)d Fu(shell)j(v)-5 b(ariables)21
+b(to)h(select)h(the)e(desired)f(language.)275 3850 y(Y)-8
+b(ou)29 b(set)g(the)g Ft(TEXTDOMAIN)d Fu(v)-5 b(ariable)30
+b(to)f(the)g(script's)g(message)h(domain.)40 b(As)29
+b(ab)s(o)m(v)m(e,)h(y)m(ou)f(use)g(the)150 3959 y(message)i(domain)g
+(to)g(name)f(y)m(our)h(translation)g(\014les.)275 4091
+y(Y)-8 b(ou,)31 b(or)g(p)s(ossibly)f(y)m(our)g(users,)h(set)g(the)g
+Ft(TEXTDOMAINDIR)c Fu(v)-5 b(ariable)31 b(to)h(the)f(name)f(of)h(a)g
+(directory)150 4200 y(where)d(the)h(message)h(catalog)i(\014les)d(are)g
+(stored.)40 b(If)28 b(y)m(ou)i(install)f(the)g(message)h(\014les)f(in)m
+(to)h(the)f(system's)150 4310 y(standard)h(message)h(catalog)i
+(directory)-8 b(,)32 b(y)m(ou)e(don't)h(need)f(to)h(w)m(orry)f(ab)s
+(out)g(this)g(v)-5 b(ariable.)275 4441 y(The)31 b(directory)h(where)g
+(the)g(message)h(catalog)h(\014les)e(are)g(stored)g(v)-5
+b(aries)32 b(b)s(et)m(w)m(een)h(systems.)45 b(Some)150
+4551 y(use)24 b(the)h(message)g(catalog)j(selected)e(b)m(y)e(the)h
+Ft(LC_MESSAGES)c Fu(shell)k(v)-5 b(ariable.)39 b(Others)24
+b(create)i(the)f(name)150 4661 y(of)i(the)h(message)g(catalog)i(from)d
+(the)g(v)-5 b(alue)27 b(of)h(the)f Ft(TEXTDOMAIN)e Fu(shell)i(v)-5
+b(ariable,)29 b(p)s(ossibly)d(adding)h(the)150 4770 y(`)p
+Ft(.mo)p Fu(')32 b(su\016x.)47 b(If)33 b(y)m(ou)g(use)f(the)h
+Ft(TEXTDOMAIN)d Fu(v)-5 b(ariable,)35 b(y)m(ou)e(ma)m(y)g(need)g(to)g
+(set)h(the)f Ft(TEXTDOMAINDIR)150 4880 y Fu(v)-5 b(ariable)26
+b(to)g(the)g(lo)s(cation)h(of)e(the)h(message)h(catalog)h(\014les,)e
+(as)g(ab)s(o)m(v)m(e.)40 b(It's)26 b(common)g(to)g(use)f(b)s(oth)f(v)-5
+b(ari-)150 4989 y(ables)31 b(in)f(this)g(fashion:)41
+b Ft($TEXTDOMAINDIR)p Fu(/)p Ft($LC_MESSAG)o(ES)p Fu(/LC)p
+2474 4989 28 4 v 34 w(MESSA)m(GES/)p Ft($TEXTDOMAIN)p
+Fu(.mo.)275 5121 y(If)i(y)m(ou)h(used)f(that)h(last)g(con)m(v)m(en)m
+(tion,)50 b(and)43 b(y)m(ou)h(w)m(an)m(ted)g(to)h(store)f(the)g
+(message)h(catalog)h(\014les)150 5230 y(with)28 b(Spanish)f(\(es\))i
+(and)f(Esp)s(eran)m(to)h(\(eo\))g(translations)h(in)m(to)f(a)g(lo)s
+(cal)h(directory)f(y)m(ou)f(use)g(for)h(custom)150 5340
+y(translation)i(\014les,)g(y)m(ou)g(could)f(run)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)390 299
+y Ft(TEXTDOMAIN=example)390 408 y(TEXTDOMAINDIR=/usr/local)o(/sha)o
+(re/l)o(oca)o(le)390 628 y(cp)47 b(es.mo)g(${TEXTDOMAINDIR}/es/LC_)o
+(MES)o(SAGE)o(S/${)o(TEX)o(TDOM)o(AIN})o(.mo)390 737
+y(cp)g(eo.mo)g(${TEXTDOMAINDIR}/eo/LC_)o(MES)o(SAGE)o(S/${)o(TEX)o
+(TDOM)o(AIN})o(.mo)275 868 y Fu(When)30 b(all)i(of)f(this)f(is)h(done,)
+g(and)f(the)h(message)h(catalog)h(\014les)e(con)m(taining)h(the)f
+(compiled)g(transla-)150 977 y(tions)c(are)g(installed)h(in)e(the)h
+(correct)h(lo)s(cation,)h(y)m(our)e(users)f(will)h(b)s(e)f(able)h(to)h
+(see)f(translated)h(strings)e(in)150 1087 y(an)m(y)k(of)f(the)h(supp)s
+(orted)d(languages)k(b)m(y)e(setting)h(the)g Ft(LANG)e
+Fu(or)h Ft(LC_MESSAGES)d Fu(en)m(vironmen)m(t)k(v)-5
+b(ariables)150 1197 y(b)s(efore)30 b(running)f(y)m(our)h(script.)150
+1388 y Fk(3.1.3)63 b(Commen)m(ts)150 1535 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 1645 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
+(71\),)i(a)d(w)m(ord)150 1754 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
+1864 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 1973 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 2083 y(Section)30
+b(6.3)f([In)m(teractiv)m(e)j(Shells],)d(page)h(94,)g(for)e(a)i
+(description)e(of)h(what)g(mak)m(es)h(a)f(shell)g(in)m(teractiv)m(e.)
+150 2316 y Fs(3.2)68 b(Shell)45 b(Commands)150 2476 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 2585 y(argumen)m(ts,)31 b(separated)g(b)m(y)f(spaces.)
+275 2716 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 2825
+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 2935 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 3126 y Fk(3.2.1)63 b(Reserv)m(ed)40 b(W)-10
+b(ords)150 3273 y Fu(Reserv)m(ed)33 b(w)m(ords)g(are)g(w)m(ords)g(that)
+g(ha)m(v)m(e)h(sp)s(ecial)g(meaning)f(to)h(the)f(shell.)49
+b(They)32 b(are)h(used)g(to)g(b)s(egin)150 3383 y(and)d(end)f(the)i
+(shell's)g(comp)s(ound)e(commands.)275 3514 y(The)k(follo)m(wing)i(w)m
+(ords)e(are)h(recognized)i(as)e(reserv)m(ed)f(when)g(unquoted)g(and)g
+(the)h(\014rst)f(w)m(ord)h(of)g(a)150 3623 y(command)c(\(see)h(b)s(elo)
+m(w)g(for)f(exceptions\):)150 3754 y Ft(if)364 b(then)168
+b(elif)g(else)g(fi)336 b(time)150 3863 y(for)316 b(in)264
+b(until)120 b(while)g(do)336 b(done)150 3973 y(case)268
+b(esac)168 b(coproc)72 b(select)g(function)150 4083 y({)412
+b(})312 b([[)264 b(]])g(!)150 4213 y(in)33 b Fu(is)h(recognized)h(as)f
+(a)g(reserv)m(ed)f(w)m(ord)h(if)f(it)h(is)g(the)g(third)f(w)m(ord)g(of)
+h(a)g Ft(case)e Fu(or)i Ft(select)e Fu(command.)150 4323
+y Ft(in)e Fu(and)g Ft(do)f Fu(are)i(recognized)h(as)e(reserv)m(ed)h(w)m
+(ords)f(if)g(they)h(are)f(the)h(third)f(w)m(ord)g(in)g(a)g
+Ft(for)g Fu(command.)150 4514 y Fk(3.2.2)63 b(Simple)41
+b(Commands)150 4661 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 4771 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 4881
+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 4990 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 5121 y(The)h(return)h(status)g(\(see)i
+(Section)f(3.7.5)h([Exit)f(Status],)h(page)f(44\))g(of)g(a)g(simple)f
+(command)g(is)h(its)150 5230 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 5340 y(w)m(as)31
+b(terminated)g(b)m(y)f(signal)h Fr(n)p Fu(.)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)150 299
+y Fk(3.2.3)63 b(Pip)s(elines)150 446 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
+555 y(`)p Ft(|)p Fu(')31 b(or)f(`)p Ft(|&)p Fu('.)275
+695 y(The)f(format)i(for)f(a)h(pip)s(eline)f(is)390 834
+y Ft([time)46 b([-p]])h([!])g Fj(command1)e Ft([)j(|)f(or)g(|&)g
+Fj(command2)f Ft(])h(...)150 974 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 1083 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 1193
+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 Fr(command1)p Fu(.)275 1333 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 1442 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 1552 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 1661
+y(redirections)31 b(sp)s(eci\014ed)f(b)m(y)g Fr(command1)p
+Fu(.)275 1801 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 1910 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 2020
+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 2130 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
+2239 y(Mo)s(de],)j(page)e(106\),)j(it)e(do)s(es)e(not)i(recognize)g
+Ft(time)e Fu(as)h(a)h(reserv)m(ed)f(w)m(ord)f(if)h(the)g(next)g(tok)m
+(en)h(b)s(egins)150 2349 y(with)d(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
+2458 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(78,)i(for)e(a)150 2568 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
+2677 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 2787 y(these)31 b(easily)-8 b(.)275 2927 y(When)26
+b(the)h(shell)g(is)g(in)g Fm(posix)f Fu(mo)s(de)g(\(see)i(Section)f
+(6.11)i([Bash)e(POSIX)f(Mo)s(de],)i(page)g(106\),)h Ft(time)150
+3036 y Fu(ma)m(y)d(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 3146 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
+3255 y(the)c(format)f(of)h(the)f(time)h(information.)275
+3395 y(If)36 b(the)h(pip)s(eline)g(is)g(not)g(executed)h(async)m
+(hronously)f(\(see)h(Section)g(3.2.4)g([Lists],)i(page)e(10\),)i(the)
+150 3504 y(shell)31 b(w)m(aits)g(for)f(all)h(commands)f(in)g(the)h(pip)
+s(eline)f(to)h(complete.)275 3644 y(Eac)m(h)d(command)g(in)f(a)i(m)m
+(ulti-command)f(pip)s(eline,)h(where)e(pip)s(es)g(are)h(created,)i(is)e
+(executed)h(in)f(its)150 3753 y(o)m(wn)h Fr(subshell)p
+Fu(,)f(whic)m(h)h(is)g(a)g(separate)h(pro)s(cess)e(\(see)i(Section)g
+(3.7.3)g([Command)f(Execution)g(En)m(viron-)150 3863
+y(men)m(t],)d(page)e(43\).)40 b(If)23 b(the)h Ft(lastpipe)d
+Fu(option)j(is)g(enabled)g(using)f(the)h Ft(shopt)e Fu(builtin)h(\(see)
+i(Section)f(4.3.2)150 3973 y([The)i(Shopt)f(Builtin],)i(page)g(71\),)h
+(the)e(last)h(elemen)m(t)g(of)f(a)g(pip)s(eline)g(ma)m(y)g(b)s(e)f(run)
+g(b)m(y)g(the)h(shell)g(pro)s(cess)150 4082 y(when)j(job)h(con)m(trol)i
+(is)f(not)f(activ)m(e.)275 4222 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 4331 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(67\).)42 b(If)30 b Ft(pipefail)150
+4441 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 4550 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
+4660 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
+4770 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 4879 y(v)-5 b(alue.)150 5083 y Fk(3.2.4)63
+b(Lists)41 b(of)h(Commands)150 5230 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 5340 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(.)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)275 299
+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 408 y(ha)m(v)m(e)32 b(equal)e(precedence.)
+275 536 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 646 y(alen)m(t)i(to)f(a)g(semicolon.)275 773 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
+883 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 992 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 1102
+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 1211 y(Chapter)27 b(7)h([Job)f(Con)m(trol],)i(page)g(113\),)
+h(the)d(standard)g(input)f(for)i(async)m(hronous)f(commands,)h(in)f
+(the)150 1321 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 1448 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
+1558 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
+1685 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 1795 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 1923 y(An)30 b Fm(and)f Fu(list)i(has)f(the)h
+(form)390 2050 y Fj(command1)46 b Ft(&&)h Fj(command2)150
+2178 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 2305 y(An)f Fm(or)f Fu(list)i(has)f(the)h(form)390
+2432 y Fj(command1)46 b Ft(||)h Fj(command2)150 2560
+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
+2687 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 2797 y(in)d(the)h(list.)150 2982
+y Fk(3.2.5)63 b(Comp)s(ound)42 b(Commands)150 3129 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
+3239 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 3348 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(38\))h(asso)s(ciated)f(with)150 3458 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 3568 y(plicitly)i(o)m(v)m(erridden.)275
+3695 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
+3805 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 3914 y(in)f(place)h(of)g(a)g(semicolon.)275
+4042 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
+4151 y(commands)30 b(and)g(execute)i(them)e(as)g(a)h(unit.)150
+4336 y Fk(3.2.5.1)63 b(Lo)s(oping)43 b(Constructs)150
+4483 y Fu(Bash)31 b(supp)s(orts)d(the)j(follo)m(wing)g(lo)s(oping)g
+(constructs.)275 4611 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 4720 y(replaced)c(with)f(one)h
+(or)f(more)g(newlines.)150 4866 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
+4993 y Ft(until)46 b Fj(test-commands)p Ft(;)e(do)j Fj
+(consequent-commands)p Ft(;)c(done)630 5121 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 5230 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 5340 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.)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)150 299
+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 436 y Ft(while)46 b Fj(test-commands)p
+Ft(;)e(do)j Fj(consequent-commands)p Ft(;)c(done)630
+573 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
+683 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
+792 y Fr(consequen)m(t-commands)p Fu(,)c(or)g(zero)g(if)f(none)g(w)m
+(as)h(executed.)150 957 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 1094 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 1231 y Fu(Expand)30 b Fr(w)m(ords)k
+Fu(\(see)d(Section)h(3.5)g([Shell)f(Expansions],)g(page)g(24\),)i(and)d
+(execute)i Fr(com-)630 1341 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 1450 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 1560 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 1670 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(23\).)630
+1807 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
+1916 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
+2026 y(return)29 b(status)i(is)f(zero.)630 2163 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
+2300 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
+2437 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 2547 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(98\).)77 b(The)42
+b(arithmetic)630 2656 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 2766
+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 2876 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 2985 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
+3095 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
+3262 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(48\))g(ma)m(y)
+150 3372 y(b)s(e)i(used)f(to)i(con)m(trol)h(lo)s(op)f(execution.)150
+3576 y Fk(3.2.5.2)63 b(Conditional)42 b(Constructs)150
+3751 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 3888 y Ft(if)47 b Fj(test-commands)p
+Ft(;)d(then)965 3997 y Fj(consequent-commands)p Ft(;)870
+4107 y([elif)i Fj(more-test-commands)p Ft(;)d(then)965
+4217 y Fj(more-consequents)p Ft(;])870 4326 y([else)j
+Fj(alternate-consequents)p Ft(;])870 4436 y(fi)630 4573
+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 4682 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 4792 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 4902 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 5011 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 5121 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 5230
+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 5340 y(or)30 b(zero)i(if)e(no)g
+(condition)h(tested)g(true.)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)150 299
+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 425 y Ft(case)47 b Fj(word)f Ft(in)1061
+535 y([)h([\(])g Fj(pattern)f Ft([|)h Fj(pattern)p Ft(]...)m(\))h
+Fj(command-list)c Ft(;;]...)870 645 y(esac)630 771 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
+881 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 990 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(36.)39 b(If)23
+b(the)h Ft(nocasematch)d Fu(shell)j(op-)630 1100 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(71\))630 1209 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 1319 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 1428 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 1538 y(kno)m(wn)e(as)g(a)h Fr(clause)p
+Fu(.)630 1665 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
+1774 y(go)s(es)35 b(tilde)f(expansion,)h(parameter)g(expansion,)g
+(command)f(substitution,)h(arithmetic)630 1884 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 1993 y(page)i(26\))g(b)s(efore)e(matc)m
+(hing)i(is)f(attempted.)59 b(Eac)m(h)36 b Fr(pattern)g
+Fu(undergo)s(es)f(tilde)i(expan-)630 2103 y(sion,)e(parameter)g
+(expansion,)g(command)f(substitution,)h(arithmetic)h(expansion,)f(pro-)
+630 2212 y(cess)c(substitution,)f(and)g(quote)h(remo)m(v)-5
+b(al.)630 2339 y(There)30 b(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 2449 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 2558 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
+2668 y(default)d(case,)g(since)g(that)g(pattern)f(will)h(alw)m(a)m(ys)h
+(matc)m(h.)630 2794 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 2904 y(in)m(teresting)d(feature)f(of)f(an)g
+(animal:)870 3030 y Ft(echo)47 b(-n)g("Enter)f(the)h(name)f(of)i(an)f
+(animal:)f(")870 3140 y(read)h(ANIMAL)870 3249 y(echo)g(-n)g("The)f
+($ANIMAL)g(has)h(")870 3359 y(case)g($ANIMAL)e(in)965
+3469 y(horse)i(|)g(dog)g(|)h(cat\))e(echo)h(-n)g("four";;)965
+3578 y(man)g(|)h(kangaroo)d(\))j(echo)e(-n)i("two";;)965
+3688 y(*\))g(echo)e(-n)h("an)g(unknown)f(number)g(of";;)870
+3797 y(esac)870 3907 y(echo)h(")g(legs.")630 4050 y Fu(If)40
+b(the)i(`)p Ft(;;)p Fu(')e(op)s(erator)i(is)f(used,)i(no)e(subsequen)m
+(t)f(matc)m(hes)i(are)f(attempted)h(after)g(the)630 4160
+y(\014rst)c(pattern)h(matc)m(h.)67 b(Using)39 b(`)p Ft(;&)p
+Fu(')g(in)f(place)i(of)f(`)p Ft(;;)p Fu(')g(causes)g(execution)h(to)g
+(con)m(tin)m(ue)630 4269 y(with)34 b(the)g Fr(command-list)j
+Fu(asso)s(ciated)f(with)e(the)h(next)f(clause,)i(if)f(an)m(y)-8
+b(.)53 b(Using)34 b(`)p Ft(;;&)p Fu(')g(in)630 4379 y(place)c(of)f(`)p
+Ft(;;)p Fu(')g(causes)h(the)f(shell)h(to)g(test)g(the)f(patterns)g(in)g
+(the)g(next)h(clause,)g(if)f(an)m(y)-8 b(,)31 b(and)630
+4489 y(execute)26 b(an)m(y)f(asso)s(ciated)h Fr(command-list)h
+Fu(on)e(a)f(successful)h(matc)m(h,)i(con)m(tin)m(uing)e(the)g(case)630
+4598 y(statemen)m(t)32 b(execution)g(as)e(if)h(the)f(pattern)h(list)g
+(had)f(not)g(matc)m(hed.)630 4725 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 4834 y(is)30 b(the)h(exit)g(status)g(of)f
+(the)h Fr(command-list)i Fu(executed.)150 4977 y Ft(select)630
+5104 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
+5214 y(same)c(syn)m(tax)g(as)f(the)h Ft(for)e Fu(command:)870
+5340 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)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(The)32 b(list)i(of)f(w)m(ords)f(follo)m(wing)j Ft(in)d
+Fu(is)h(expanded,)g(generating)h(a)f(list)h(of)f(items,)h(and)f(the)630
+408 y(set)41 b(of)f(expanded)f(w)m(ords)g(is)i(prin)m(ted)e(on)h(the)g
+(standard)f(error)h(output)g(stream,)j(eac)m(h)630 518
+y(preceded)31 b(b)m(y)g(a)g(n)m(um)m(b)s(er.)42 b(If)31
+b(the)g(`)p Ft(in)f Fj(words)p Fu(')g(is)i(omitted,)g(the)g(p)s
+(ositional)g(parameters)630 628 y(are)k(prin)m(ted,)h(as)e(if)h(`)p
+Ft(in)30 b("$@")p Fu(')k(had)h(b)s(een)g(sp)s(eci\014ed.)56
+b Ft(select)33 b Fu(then)j(displa)m(ys)f(the)h Ft(PS3)630
+737 y Fu(prompt)42 b(and)h(reads)f(a)i(line)f(from)g(the)g(standard)f
+(input.)78 b(If)42 b(the)i(line)f(consists)g(of)h(a)630
+847 y(n)m(um)m(b)s(er)34 b(corresp)s(onding)h(to)h(one)g(of)g(the)g
+(displa)m(y)m(ed)g(w)m(ords,)h(then)e(the)h(v)-5 b(alue)36
+b(of)g Fr(name)630 956 y Fu(is)f(set)g(to)h(that)f(w)m(ord.)54
+b(If)34 b(the)h(line)g(is)g(empt)m(y)-8 b(,)37 b(the)e(w)m(ords)f(and)g
+(prompt)g(are)h(displa)m(y)m(ed)630 1066 y(again.)40
+b(If)26 b Ft(EOF)f Fu(is)g(read,)i(the)f Ft(select)f
+Fu(command)g(completes)i(and)f(returns)e(1.)40 b(An)m(y)26
+b(other)630 1176 y(v)-5 b(alue)30 b(read)f(causes)h Fr(name)k
+Fu(to)c(b)s(e)f(set)g(to)h(n)m(ull.)41 b(The)28 b(line)i(read)f(is)g
+(sa)m(v)m(ed)i(in)e(the)g(v)-5 b(ariable)630 1285 y Ft(REPLY)p
+Fu(.)630 1420 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
+1530 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 1665 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 1774 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 1909 y Ft(select)46 b(fname)g(in)i(*;)870
+2019 y(do)870 2128 y(echo)f(you)g(picked)f($fname)g(\\\($REPLY\\\))870
+2238 y(break;)870 2347 y(done)150 2508 y(\(\(...)o(\)\))870
+2642 y(\(\()h Fj(expression)e Ft(\)\))630 2777 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
+2887 y(\(see)22 b(Section)f(6.5)h([Shell)f(Arithmetic],)j(page)d(98\).)
+39 b(The)20 b Fr(expression)h Fu(undergo)s(es)f(the)h(same)630
+2996 y(expansions)35 b(as)h(if)f(it)h(w)m(ere)g(within)f(double)f
+(quotes,)k(but)d(double)f(quote)i(c)m(haracters)h(in)630
+3106 y Fr(expression)29 b Fu(are)h(not)f(treated)h(sp)s(ecially)g(are)g
+(remo)m(v)m(ed.)41 b(If)29 b(the)h(v)-5 b(alue)29 b(of)h(the)f
+(expression)630 3216 y(is)h(non-zero,)i(the)e(return)f(status)i(is)g
+(0;)g(otherwise)f(the)h(return)e(status)i(is)f(1.)150
+3376 y Ft([[...)o(]])870 3511 y([[)47 b Fj(expression)e
+Ft(]])630 3646 y Fu(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 3755 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 3865 y(Section)37 b(6.4)g([Bash)f(Conditional)h
+(Expressions],)g(page)g(96.)58 b(The)36 b(w)m(ords)f(b)s(et)m(w)m(een)i
+(the)630 3974 y Ft([[)h Fu(and)g Ft(]])g Fu(do)g(not)h(undergo)f(w)m
+(ord)g(splitting)h(and)f(\014lename)h(expansion.)65 b(The)38
+b(shell)630 4084 y(p)s(erforms)26 b(tilde)j(expansion,)f(parameter)g
+(and)g(v)-5 b(ariable)28 b(expansion,)h(arithmetic)g(expan-)630
+4194 y(sion,)j(command)g(substitution,)g(pro)s(cess)g(substitution,)g
+(and)f(quote)i(remo)m(v)-5 b(al)33 b(on)e(those)630 4303
+y(w)m(ords)k(\(the)h(expansions)g(that)g(w)m(ould)f(o)s(ccur)h(if)g
+(the)f(w)m(ords)h(w)m(ere)g(enclosed)g(in)f(double)630
+4413 y(quotes\).)41 b(Conditional)28 b(op)s(erators)g(suc)m(h)f(as)i(`)
+p Ft(-f)p Fu(')e(m)m(ust)h(b)s(e)f(unquoted)g(to)h(b)s(e)g(recognized)
+630 4522 y(as)j(primaries.)630 4657 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
+4767 y(curren)m(t)30 b(lo)s(cale.)630 4902 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 5011 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
+5121 y(Section)d(3.5.8.1)h([P)m(attern)f(Matc)m(hing],)h(page)f(36,)g
+(as)f(if)g(the)g Ft(extglob)d Fu(shell)j(option)g(w)m(ere)630
+5230 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 5340 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(71\))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)630 299
+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 408
+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 518 y(\(`)p Ft(!=)p Fu('\))j(the)g(pattern,)f(and)g(1)h
+(otherwise.)630 645 y(If)20 b(y)m(ou)h(quote)g(an)m(y)f(part)h(of)f
+(the)h(pattern,)h(using)e(an)m(y)h(of)f(the)h(shell's)g(quoting)g(mec)m
+(hanisms,)630 754 y(the)43 b(quoted)g(p)s(ortion)g(is)g(matc)m(hed)h
+(literally)-8 b(.)81 b(This)42 b(means)h(ev)m(ery)h(c)m(haracter)h(in)e
+(the)630 864 y(quoted)34 b(p)s(ortion)f(matc)m(hes)i(itself,)h(instead)
+e(of)f(ha)m(ving)i(an)m(y)f(sp)s(ecial)g(pattern)g(matc)m(hing)630
+973 y(meaning.)630 1100 y(An)f(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 1209 y(`)p Ft(==)p Fu(')40 b(and)g(`)p
+Ft(!=)p Fu('.)70 b(When)40 b(y)m(ou)g(use)g(`)p Ft(=~)p
+Fu(',)j(the)d(string)h(to)f(the)h(righ)m(t)g(of)f(the)g(op)s(erator)h
+(is)630 1319 y(considered)36 b(a)g Fm(posix)f Fu(extended)g(regular)h
+(expression)g(pattern)f(and)g(matc)m(hed)i(accord-)630
+1428 y(ingly)k(\(using)f(the)h Fm(posix)f Ft(regcomp)f
+Fu(and)h Ft(regexec)e Fu(in)m(terfaces)k(usually)f(describ)s(ed)e(in)
+630 1538 y Fl(r)-5 b(e)g(gex)11 b Fu(\(3\)\).)56 b(The)34
+b(return)g(v)-5 b(alue)35 b(is)g(0)g(if)g(the)g(string)g(matc)m(hes)h
+(the)f(pattern,)h(and)e(1)i(if)e(it)630 1648 y(do)s(es)39
+b(not.)66 b(If)38 b(the)h(regular)g(expression)g(is)g(syn)m(tactically)
+i(incorrect,)i(the)c(conditional)630 1757 y(expression)e(returns)e(2.)
+61 b(If)37 b(the)g Ft(nocasematch)d Fu(shell)j(option)h(\(see)g(the)f
+(description)g(of)630 1867 y Ft(shopt)d Fu(in)h(Section)h(4.3.2)h([The)
+e(Shopt)f(Builtin],)k(page)e(71\))g(is)g(enabled,)g(the)g(matc)m(h)g
+(is)630 1976 y(p)s(erformed)29 b(without)h(regard)h(to)g(the)f(case)i
+(of)e(alphab)s(etic)h(c)m(haracters.)630 2103 y(Y)-8
+b(ou)23 b(can)g(quote)g(an)m(y)g(part)g(of)g(the)g(pattern)f(to)i
+(force)f(the)g(quoted)g(p)s(ortion)f(to)h(b)s(e)f(matc)m(hed)630
+2212 y(literally)33 b(instead)f(of)g(as)f(a)h(regular)g(expression)f
+(\(see)h(ab)s(o)m(v)m(e\).)46 b(If)31 b(the)h(pattern)f(is)h(stored)630
+2322 y(in)h(a)i(shell)f(v)-5 b(ariable,)35 b(quoting)f(the)g(v)-5
+b(ariable)35 b(expansion)e(forces)i(the)f(en)m(tire)g(pattern)g(to)630
+2432 y(b)s(e)c(matc)m(hed)h(literally)-8 b(.)630 2558
+y(The)25 b(pattern)h(will)g(matc)m(h)h(if)e(it)i(matc)m(hes)f(an)m(y)h
+(part)e(of)h(the)g(string.)39 b(If)25 b(y)m(ou)h(w)m(an)m(t)h(to)f
+(force)630 2668 y(the)j(pattern)h(to)g(matc)m(h)g(the)f(en)m(tire)h
+(string,)g(anc)m(hor)g(the)f(pattern)h(using)e(the)i(`)p
+Ft(^)p Fu(')f(and)g(`)p Ft($)p Fu(')630 2777 y(regular)i(expression)f
+(op)s(erators.)630 2904 y(F)-8 b(or)31 b(example,)g(the)f(follo)m(wing)
+h(will)f(matc)m(h)h(a)g(line)f(\(stored)g(in)g(the)g(shell)g(v)-5
+b(ariable)31 b Ft(line)p Fu(\))630 3013 y(if)42 b(there)h(is)g(a)f
+(sequence)h(of)g(c)m(haracters)h(an)m(ywhere)e(in)g(the)h(v)-5
+b(alue)43 b(consisting)g(of)g(an)m(y)630 3123 y(n)m(um)m(b)s(er,)26
+b(including)g(zero,)i(of)f(c)m(haracters)g(in)f(the)h
+Ft(space)e Fu(c)m(haracter)j(class,)g(immediately)630
+3232 y(follo)m(w)m(ed)k(b)m(y)e(zero)h(or)g(one)f(instances)h(of)g(`)p
+Ft(a)p Fu(',)g(then)f(a)h(`)p Ft(b)p Fu(':)870 3359 y
+Ft([[)47 b($line)g(=~)g([[:space:]]*\(a\)?b)c(]])630
+3485 y Fu(That)f(means)g(v)-5 b(alues)42 b(for)g Ft(line)f
+Fu(lik)m(e)i(`)p Ft(aab)p Fu(',)i(`)31 b Ft(aaaaaab)p
+Fu(',)43 b(`)p Ft(xaby)p Fu(',)i(and)c(`)31 b Ft(ab)p
+Fu(')42 b(will)g(all)630 3595 y(matc)m(h,)32 b(as)e(will)h(a)g(line)f
+(con)m(taining)i(a)f(`)p Ft(b)p Fu(')g(an)m(ywhere)f(in)g(its)h(v)-5
+b(alue.)630 3721 y(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 3831 y(mar)g(\(`)p Ft(^$|[]\(\)\\.*+?)p Fu('\),)e(it)j(has)f
+(to)h(b)s(e)e(quoted)h(to)h(remo)m(v)m(e)g(its)g(sp)s(ecial)g(meaning.)
+40 b(This)630 3941 y(means)24 b(that)h(in)f(the)h(pattern)f(`)p
+Ft(xxx.txt)p Fu(',)g(the)h(`)p Ft(.)p Fu(')f(matc)m(hes)i(an)m(y)f(c)m
+(haracter)g(in)f(the)h(string)630 4050 y(\(its)34 b(usual)f(regular)g
+(expression)g(meaning\),)i(but)e(in)g(the)g(pattern)h(`)p
+Ft("xxx.txt")p Fu(',)e(it)i(can)630 4160 y(only)c(matc)m(h)i(a)f
+(literal)g(`)p Ft(.)p Fu('.)630 4286 y(Lik)m(ewise,)i(if)f(y)m(ou)g(w)m
+(an)m(t)g(to)h(include)e(a)h(c)m(haracter)h(in)e(y)m(our)h(pattern)g
+(that)g(has)f(a)h(sp)s(ecial)630 4396 y(meaning)21 b(to)h(the)g
+(regular)f(expression)g(grammar,)i(y)m(ou)f(m)m(ust)f(mak)m(e)h(sure)e
+(it's)i(not)g(quoted.)630 4505 y(If)44 b(y)m(ou)g(w)m(an)m(t)h(to)g
+(anc)m(hor)f(a)h(pattern)f(at)h(the)f(b)s(eginning)f(or)h(end)g(of)g
+(the)g(string,)k(for)630 4615 y(instance,)e(y)m(ou)d(cannot)g(quote)g
+(the)f(`)p Ft(^)p Fu(')h(or)f(`)p Ft($)p Fu(')g(c)m(haracters)i(using)e
+(an)m(y)g(form)g(of)h(shell)630 4725 y(quoting.)630 4851
+y(If)28 b(y)m(ou)h(w)m(an)m(t)g(to)g(matc)m(h)h(`)p Ft(initial)e
+(string)p Fu(')f(at)i(the)g(start)g(of)g(a)g(line,)g(the)g(follo)m
+(wing)h(will)630 4961 y(w)m(ork:)870 5087 y Ft([[)47
+b($line)g(=~)g(^"initial)e(string")h(]])630 5214 y Fu(but)30
+b(this)g(will)h(not:)870 5340 y Ft([[)47 b($line)g(=~)g("^initial)e
+(string")h(]])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)630 299
+y(b)s(ecause)42 b(in)h(the)f(second)h(example)g(the)g(`)p
+Ft(^)p Fu(')f(is)h(quoted)g(and)f(do)s(esn't)g(ha)m(v)m(e)i(its)e
+(usual)630 408 y(sp)s(ecial)31 b(meaning.)630 540 y(It)h(is)f
+(sometimes)h(di\016cult)g(to)g(sp)s(ecify)f(a)h(regular)g(expression)f
+(prop)s(erly)f(without)h(using)630 650 y(quotes,)c(or)f(to)g(k)m(eep)h
+(trac)m(k)g(of)e(the)h(quoting)g(used)f(b)m(y)h(regular)f(expressions)h
+(while)f(pa)m(ying)630 759 y(atten)m(tion)40 b(to)f(shell)f(quoting)h
+(and)e(the)h(shell's)h(quote)f(remo)m(v)-5 b(al.)65 b(Storing)38
+b(the)h(regular)630 869 y(expression)45 b(in)g(a)g(shell)h(v)-5
+b(ariable)46 b(is)f(often)g(a)h(useful)e(w)m(a)m(y)i(to)g(a)m(v)m(oid)h
+(problems)d(with)630 978 y(quoting)35 b(c)m(haracters)g(that)g(are)g
+(sp)s(ecial)g(to)g(the)f(shell.)53 b(F)-8 b(or)35 b(example,)h(the)e
+(follo)m(wing)i(is)630 1088 y(equiv)-5 b(alen)m(t)32
+b(to)f(the)f(pattern)h(used)f(ab)s(o)m(v)m(e:)870 1219
+y Ft(pattern='[[:space:]]*\(a\))o(?b')870 1329 y([[)47
+b($line)g(=~)g($pattern)e(]])630 1461 y Fu(Shell)29 b(programmers)f
+(should)f(tak)m(e)k(sp)s(ecial)e(care)g(with)g(bac)m(kslashes,)h(since)
+f(bac)m(kslashes)630 1570 y(are)22 b(used)f(b)m(y)h(b)s(oth)f(the)h
+(shell)g(and)f(regular)h(expressions)f(to)i(remo)m(v)m(e)g(the)f(sp)s
+(ecial)h(meaning)630 1680 y(from)j(the)g(follo)m(wing)i(c)m(haracter.)
+41 b(This)25 b(means)h(that)h(after)g(the)f(shell's)g(w)m(ord)g
+(expansions)630 1789 y(complete)i(\(see)f(Section)g(3.5)h([Shell)e
+(Expansions],)h(page)g(24\),)i(an)m(y)d(bac)m(kslashes)i(remain-)630
+1899 y(ing)44 b(in)f(parts)g(of)h(the)g(pattern)f(that)h(w)m(ere)g
+(originally)h(not)f(quoted)g(can)g(remo)m(v)m(e)h(the)630
+2008 y(sp)s(ecial)29 b(meaning)g(of)g(pattern)f(c)m(haracters.)42
+b(If)28 b(an)m(y)h(part)g(of)f(the)h(pattern)g(is)f(quoted,)i(the)630
+2118 y(shell)h(do)s(es)f(its)g(b)s(est)g(to)i(ensure)d(that)i(the)g
+(regular)f(expression)h(treats)g(those)g(remaining)630
+2228 y(bac)m(kslashes)g(as)g(literal,)h(if)e(they)h(app)s(eared)f(in)g
+(a)g(quoted)h(p)s(ortion.)630 2359 y(The)f(follo)m(wing)i(t)m(w)m(o)f
+(sets)g(of)g(commands)f(are)h Fl(not)39 b Fu(equiv)-5
+b(alen)m(t:)870 2491 y Ft(pattern='\\.')870 2710 y([[)47
+b(.)h(=~)f($pattern)e(]])870 2819 y([[)i(.)h(=~)f(\\.)g(]])870
+3039 y([[)g(.)h(=~)f("$pattern")e(]])870 3148 y([[)i(.)h(=~)f('\\.')f
+(]])630 3280 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 3389 y(second)e(t)m(w)m(o)i(the)e(bac)m(kslash)h(will)f
+(b)s(e)g(part)g(of)g(the)g(pattern)g(to)h(b)s(e)f(matc)m(hed.)40
+b(In)26 b(the)i(\014rst)630 3499 y(t)m(w)m(o)33 b(examples,)f(the)g
+(pattern)f(passed)g(to)h(the)g(regular)f(expression)h(parser)e(is)i(`)p
+Ft(\\.)p Fu('.)43 b(The)630 3608 y(bac)m(kslash)35 b(remo)m(v)m(es)g
+(the)g(sp)s(ecial)f(meaning)h(from)e(`)p Ft(.)p Fu(',)j(so)e(the)h
+(literal)g(`)p Ft(.)p Fu(')g(matc)m(hes.)53 b(In)630
+3718 y(the)35 b(second)h(t)m(w)m(o)g(examples,)h(the)f(pattern)f
+(passed)g(to)h(the)f(regular)h(expression)f(parser)630
+3828 y(has)26 b(the)g(bac)m(kslash)g(quoted)g(\(e.g.,)j(`)p
+Ft(\\\\\\.)p Fu('\),)e(whic)m(h)e(will)h(not)g(matc)m(h)h(the)f
+(string,)h(since)f(it)630 3937 y(do)s(es)31 b(not)g(con)m(tain)h(a)g
+(bac)m(kslash.)43 b(If)31 b(the)g(string)g(in)g(the)g(\014rst)f
+(examples)i(w)m(ere)g(an)m(ything)630 4047 y(other)f(than)f(`)p
+Ft(.)p Fu(',)h(sa)m(y)g(`)p Ft(a)p Fu(',)g(the)f(pattern)h(w)m(ould)f
+(not)h(matc)m(h,)g(b)s(ecause)g(the)f(quoted)h(`)p Ft(.)p
+Fu(')f(in)630 4156 y(the)h(pattern)f(loses)h(its)g(sp)s(ecial)g
+(meaning)g(of)f(matc)m(hing)i(an)m(y)e(single)h(c)m(haracter.)630
+4288 y(Brac)m(k)m(et)d(expressions)d(in)g(regular)h(expressions)f(can)h
+(b)s(e)e(sources)i(of)f(errors)g(as)h(w)m(ell,)i(since)630
+4398 y(c)m(haracters)43 b(that)f(are)g(normally)g(sp)s(ecial)g(in)f
+(regular)h(expressions)f(lose)i(their)e(sp)s(ecial)630
+4507 y(meanings)24 b(b)s(et)m(w)m(een)g(brac)m(k)m(ets.)40
+b(Ho)m(w)m(ev)m(er,)27 b(y)m(ou)e(can)f(use)f(brac)m(k)m(et)i
+(expressions)f(to)g(matc)m(h)630 4617 y(sp)s(ecial)31
+b(pattern)g(c)m(haracters)h(without)f(quoting)g(them,)f(so)h(they)g
+(are)g(sometimes)h(useful)630 4726 y(for)e(this)g(purp)s(ose.)630
+4858 y(Though)f(it)i(migh)m(t)g(seem)f(lik)m(e)i(a)e(strange)h(w)m(a)m
+(y)g(to)g(write)f(it,)h(the)g(follo)m(wing)g(pattern)g(will)630
+4967 y(matc)m(h)g(a)g(`)p Ft(.)p Fu(')g(in)f(the)g(string:)870
+5099 y Ft([[)47 b(.)h(=~)f([.])g(]])630 5230 y Fu(The)30
+b(shell)g(p)s(erforms)f(an)m(y)i(w)m(ord)f(expansions)g(b)s(efore)g
+(passing)g(the)g(pattern)h(to)g(the)f(reg-)630 5340 y(ular)44
+b(expression)g(functions,)k(so)d(y)m(ou)f(can)h(assume)f(that)h(the)g
+(shell's)g(quoting)f(tak)m(es)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)630 299
+y(precedence.)63 b(As)37 b(noted)h(ab)s(o)m(v)m(e,)j(the)d(regular)f
+(expression)h(parser)f(will)h(in)m(terpret)g(an)m(y)630
+408 y(unquoted)30 b(bac)m(kslashes)h(remaining)g(in)g(the)g(pattern)f
+(after)i(shell)e(expansion)h(according)630 518 y(to)40
+b(its)g(o)m(wn)f(rules.)68 b(The)39 b(in)m(ten)m(tion)i(is)e(to)h(a)m
+(v)m(oid)h(making)f(shell)f(programmers)g(quote)630 628
+y(things)31 b(t)m(wice)h(as)f(m)m(uc)m(h)f(as)h(p)s(ossible,)g(so)g
+(shell)g(quoting)g(should)f(b)s(e)g(su\016cien)m(t)h(to)g(quote)630
+737 y(sp)s(ecial)g(pattern)f(c)m(haracters)i(where)e(that's)h
+(necessary)-8 b(.)630 867 y(The)39 b(arra)m(y)h(v)-5
+b(ariable)40 b Ft(BASH_REMATCH)c Fu(records)j(whic)m(h)g(parts)g(of)g
+(the)h(string)f(matc)m(hed)630 977 y(the)34 b(pattern.)51
+b(The)33 b(elemen)m(t)i(of)f Ft(BASH_REMATCH)d Fu(with)i(index)g(0)h
+(con)m(tains)h(the)f(p)s(ortion)630 1086 y(of)39 b(the)g(string)g(matc)
+m(hing)h(the)g(en)m(tire)f(regular)h(expression.)66 b(Substrings)37
+b(matc)m(hed)j(b)m(y)630 1196 y(paren)m(thesized)k(sub)s(expressions)e
+(within)i(the)g(regular)g(expression)g(are)g(sa)m(v)m(ed)h(in)f(the)630
+1306 y(remaining)33 b Ft(BASH_REMATCH)c Fu(indices.)49
+b(The)32 b(elemen)m(t)i(of)f Ft(BASH_REMATCH)d Fu(with)i(index)g
+Fr(n)630 1415 y Fu(is)e(the)h(p)s(ortion)f(of)g(the)h(string)f(matc)m
+(hing)i(the)e Fr(n)p Fu(th)g(paren)m(thesized)h(sub)s(expression.)630
+1545 y(Bash)26 b(sets)h Ft(BASH_REMATCH)c Fu(in)j(the)g(global)i(scop)s
+(e;)f(declaring)g(it)g(as)g(a)f(lo)s(cal)i(v)-5 b(ariable)27
+b(will)630 1655 y(lead)k(to)g(unexp)s(ected)f(results.)630
+1785 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
+1895 y(order)30 b(of)g(precedence:)630 2045 y Ft(\()g
+Fj(expression)e Ft(\))1110 2155 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 2264 y(normal)e(precedence)h(of)
+g(op)s(erators.)630 2415 y Ft(!)f Fj(expression)1110
+2524 y Fu(T)-8 b(rue)30 b(if)g Fr(expression)g Fu(is)h(false.)630
+2675 y Fj(expression1)c Ft(&&)j Fj(expression2)1110 2784
+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
+2935 y Fj(expression1)c Ft(||)j Fj(expression2)1110 3045
+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
+3195 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 3305 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 3495 y Fk(3.2.5.3)63
+b(Grouping)43 b(Commands)150 3642 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 3752
+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 3861 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.)
+150 4012 y Ft(\(\))870 4142 y(\()47 b Fj(list)g Ft(\))630
+4272 y Fu(Placing)42 b(a)g(list)g(of)f(commands)g(b)s(et)m(w)m(een)h
+(paren)m(theses)f(forces)h(the)f(shell)h(to)g(create)h(a)630
+4381 y(subshell)33 b(\(see)h(Section)g(3.7.3)i([Command)c(Execution)j
+(En)m(vironmen)m(t],)g(page)f(43\),)i(and)630 4491 y(eac)m(h)g(of)f
+(the)h(commands)e(in)h Fr(list)i Fu(is)e(executed)h(in)f(that)h
+(subshell)e(en)m(vironmen)m(t.)55 b(Since)630 4601 y(the)33
+b Fr(list)j Fu(is)e(executed)g(in)f(a)g(subshell,)h(v)-5
+b(ariable)34 b(assignmen)m(ts)g(do)f(not)g(remain)g(in)g(e\013ect)630
+4710 y(after)e(the)f(subshell)g(completes.)150 4861 y
+Ft({})870 4991 y({)47 b Fj(list)p Ft(;)g(})630 5121 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
+5230 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 5340 y(follo)m(wing)32 b Fr(list)h Fu(is)d(required.)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)275 299
+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
+408 y(t)m(w)m(o)f(constructs)f(due)g(to)g(historical)i(reasons.)78
+b(The)42 b(braces)i(are)f(reserv)m(ed)g(w)m(ords,)j(so)d(they)g(m)m
+(ust)150 518 y(b)s(e)36 b(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 628 y(op)s(erators,)29
+b(and)e(are)i(recognized)g(as)g(separate)g(tok)m(ens)g(b)m(y)f(the)g
+(shell)g(ev)m(en)h(if)f(they)h(are)f(not)g(separated)150
+737 y(from)i(the)g Fr(list)j Fu(b)m(y)e(whitespace.)275
+865 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 1050
+y Fk(3.2.6)63 b(Copro)s(cesses)150 1197 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
+1307 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
+1416 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 1526 y(copro)s(cess.)275
+1653 y(The)c(syn)m(tax)i(for)f(a)h(copro)s(cess)g(is:)390
+1781 y Ft(coproc)46 b([)p Fj(NAME)p Ft(])g Fj(command)g
+Ft([)p Fj(redirections)p Ft(])150 1909 y Fu(This)33 b(creates)i(a)f
+(copro)s(cess)g(named)f Fr(NAME)p Fu(.)51 b Fr(command)37
+b Fu(ma)m(y)d(b)s(e)f(either)h(a)g(simple)g(command)f(\(see)150
+2018 y(Section)44 b(3.2.2)i([Simple)d(Commands],)k(page)d(9\))g(or)g(a)
+g(comp)s(ound)e(command)h(\(see)i(Section)f(3.2.5)150
+2128 y([Comp)s(ound)e(Commands],)47 b(page)e(11\).)83
+b Fr(NAME)50 b Fu(is)44 b(a)g(shell)g(v)-5 b(ariable)45
+b(name.)82 b(If)44 b Fr(NAME)50 b Fu(is)44 b(not)150
+2237 y(supplied,)29 b(the)i(default)f(name)h(is)f Ft(COPROC)p
+Fu(.)275 2365 y(The)f(recommended)h(form)g(to)h(use)f(for)h(a)f(copro)s
+(cess)h(is)390 2492 y Ft(coproc)46 b Fj(NAME)h Ft({)g
+Fj(command)p Ft(;)f(})150 2620 y Fu(This)31 b(form)g(is)h(recommended)f
+(b)s(ecause)h(simple)g(commands)f(result)h(in)f(the)h(copro)s(cess)g
+(alw)m(a)m(ys)h(b)s(eing)150 2730 y(named)45 b Ft(COPROC)p
+Fu(,)i(and)e(it)h(is)f(simpler)g(to)h(use)f(and)g(more)g(complete)i
+(than)e(the)h(other)f(comp)s(ound)150 2839 y(commands.)275
+2967 y(There)29 b(are)i(other)g(forms)f(of)g(copro)s(cesses:)390
+3094 y Ft(coproc)46 b Fj(NAME)h(compound-command)390
+3204 y Ft(coproc)f Fj(compound-command)390 3313 y Ft(coproc)g
+Fj(simple-command)150 3441 y Fu(If)41 b Fr(command)46
+b Fu(is)41 b(a)i(comp)s(ound)d(command,)45 b Fr(NAME)i
+Fu(is)42 b(optional.)77 b(The)41 b(w)m(ord)g(follo)m(wing)j
+Ft(coproc)150 3551 y Fu(determines)27 b(whether)f(that)i(w)m(ord)f(is)g
+(in)m(terpreted)g(as)g(a)h(v)-5 b(ariable)28 b(name:)39
+b(it)27 b(is)g(in)m(terpreted)h(as)f Fr(NAME)150 3660
+y Fu(if)i(it)h(is)g(not)f(a)h(reserv)m(ed)f(w)m(ord)g(that)h(in)m(tro)s
+(duces)f(a)h(comp)s(ound)e(command.)40 b(If)29 b Fr(command)k
+Fu(is)c(a)h(simple)150 3770 y(command,)36 b Fr(NAME)k
+Fu(is)35 b(not)f(allo)m(w)m(ed;)39 b(this)34 b(is)h(to)g(a)m(v)m(oid)h
+(confusion)f(b)s(et)m(w)m(een)g Fr(NAME)40 b Fu(and)34
+b(the)h(\014rst)150 3879 y(w)m(ord)30 b(of)h(the)f(simple)g(command.)
+275 4007 y(When)42 b(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 4117 y([Arra)m(ys],)h(page)e(100\))g(named)
+e Fr(NAME)48 b Fu(in)41 b(the)h(con)m(text)h(of)f(the)g(executing)h
+(shell.)75 b(The)41 b(standard)150 4226 y(output)32 b(of)h
+Fr(command)i Fu(is)e(connected)g(via)g(a)g(pip)s(e)f(to)h(a)g(\014le)f
+(descriptor)h(in)f(the)g(executing)i(shell,)g(and)150
+4336 y(that)d(\014le)g(descriptor)g(is)g(assigned)f(to)i
+Fr(NAME)5 b Fu([0].)43 b(The)31 b(standard)f(input)f(of)i
+Fr(command)j Fu(is)d(connected)150 4445 y(via)40 b(a)g(pip)s(e)f(to)h
+(a)g(\014le)g(descriptor)f(in)g(the)h(executing)h(shell,)h(and)d(that)h
+(\014le)g(descriptor)f(is)h(assigned)150 4555 y(to)f
+Fr(NAME)5 b Fu([1].)65 b(This)38 b(pip)s(e)f(is)h(established)g(b)s
+(efore)g(an)m(y)g(redirections)h(sp)s(eci\014ed)e(b)m(y)h(the)g
+(command)150 4664 y(\(see)33 b(Section)f(3.6)h([Redirections],)g(page)g
+(38\).)45 b(The)31 b(\014le)h(descriptors)f(can)h(b)s(e)f(utilized)i
+(as)f(argumen)m(ts)150 4774 y(to)42 b(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 4884 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 4993
+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 Fj(NAME)p Ft(_PID)p Fu(.)44
+b(The)32 b Ft(wait)g Fu(builtin)f(command)i(ma)m(y)g(b)s(e)e(used)h(to)
+h(w)m(ait)h(for)e(the)h(copro)s(cess)150 5340 y(to)e(terminate.)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(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 609 y Fk(3.2.7)63 b(GNU)41 b(P)m(arallel)150
+756 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 866 y(a)e(to)s(ol)g(to)g(do)f(just)g
+(that.)275 1001 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 1111 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 1221 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
+1330 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 1440 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 1549 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 1685 y(F)-8 b(or)28 b(a)h(complete)g
+(description,)g(refer)f(to)g(the)h(GNU)f(P)m(arallel)i(do)s(cumen)m
+(tation,)g(whic)m(h)e(is)g(a)m(v)-5 b(ailable)150 1795
+y(at)31 b Ft(https://www.gnu.org/softw)o(are)o(/par)o(alle)o(l/p)o
+(aral)o(lel_)o(tut)o(oria)o(l.ht)o(ml)p Fu(.)150 2038
+y Fs(3.3)68 b(Shell)45 b(F)-11 b(unctions)150 2197 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
+2307 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 2416 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 2526 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 2635 y(pro)s(cess)30
+b(is)g(created)i(to)f(in)m(terpret)g(them.)275 2771 y(F)-8
+b(unctions)30 b(are)h(declared)g(using)f(this)g(syn)m(tax:)390
+2907 y Fj(fname)46 b Ft(\(\))i Fj(compound-command)43
+b Ft([)k Fj(redirections)e Ft(])275 3043 y Fu(or)390
+3179 y Ft(function)h Fj(fname)g Ft([\(\)])h Fj(compound-command)c
+Ft([)k Fj(redirections)e Ft(])275 3315 y Fu(This)37 b(de\014nes)h(a)h
+(shell)f(function)g(named)g Fr(fname)p Fu(.)65 b(The)38
+b(reserv)m(ed)h(w)m(ord)f Ft(function)e Fu(is)j(optional.)150
+3424 y(If)33 b(the)g Ft(function)e Fu(reserv)m(ed)i(w)m(ord)g(is)g
+(supplied,)g(the)g(paren)m(theses)h(are)f(optional.)50
+b(The)33 b Fr(b)s(o)s(dy)39 b Fu(of)34 b(the)150 3534
+y(function)41 b(is)h(the)g(comp)s(ound)e(command)h Fr(comp)s
+(ound-command)j Fu(\(see)e(Section)h(3.2.5)g([Comp)s(ound)150
+3644 y(Commands],)30 b(page)h(11\).)42 b(That)30 b(command)g(is)g
+(usually)h(a)f Fr(list)j Fu(enclosed)e(b)s(et)m(w)m(een)g
+Fi({)g Fu(and)f Fi(})p Fu(,)h(but)e(ma)m(y)150 3753 y(b)s(e)k(an)m(y)h
+(comp)s(ound)f(command)g(listed)i(ab)s(o)m(v)m(e.)52
+b(If)33 b(the)i Ft(function)c Fu(reserv)m(ed)j(w)m(ord)g(is)f(used,)i
+(but)e(the)150 3863 y(paren)m(theses)22 b(are)g(not)f(supplied,)h(the)g
+(braces)g(are)f(recommended.)38 b Fr(comp)s(ound-command)24
+b Fu(is)d(executed)150 3972 y(whenev)m(er)29 b Fr(fname)35
+b Fu(is)29 b(sp)s(eci\014ed)g(as)g(the)h(name)f(of)h(a)f(simple)h
+(command.)40 b(When)29 b(the)h(shell)f(is)h(in)f Fm(posix)150
+4082 y Fu(mo)s(de)i(\(see)h(Section)g(6.11)h([Bash)f(POSIX)e(Mo)s(de],)
+i(page)g(106\),)i Fr(fname)i Fu(m)m(ust)31 b(b)s(e)g(a)h(v)-5
+b(alid)31 b(shell)h(name)150 4192 y(and)h(ma)m(y)h(not)f(b)s(e)g(the)h
+(same)f(as)h(one)g(of)f(the)h(sp)s(ecial)g(builtins)e(\(see)j(Section)f
+(4.4)g([Sp)s(ecial)g(Builtins],)150 4301 y(page)d(77\).)43
+b(In)29 b(default)i(mo)s(de,)g(a)f(function)h(name)f(can)h(b)s(e)f(an)m
+(y)h(unquoted)e(shell)i(w)m(ord)f(that)h(do)s(es)g(not)150
+4411 y(con)m(tain)k(`)p Ft($)p Fu('.)52 b(An)m(y)34 b(redirections)g
+(\(see)h(Section)g(3.6)g([Redirections],)h(page)f(38\))g(asso)s(ciated)
+g(with)f(the)150 4520 y(shell)g(function)f(are)h(p)s(erformed)e(when)h
+(the)g(function)h(is)f(executed.)51 b(A)34 b(function)f(de\014nition)g
+(ma)m(y)i(b)s(e)150 4630 y(deleted)i(using)e(the)i Ft(-f)e
+Fu(option)i(to)f(the)h Ft(unset)d Fu(builtin)i(\(see)h(Section)g(4.1)g
+([Bourne)f(Shell)g(Builtins],)150 4739 y(page)31 b(48\).)275
+4875 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 4985 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
+5095 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 5230 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 5340 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)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(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
+408 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 518 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 669 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 778 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(23\).)75 b(The)150 888 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
+998 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 1107
+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
+1258 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 1367 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 1477 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
+1587 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 1696 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
+1806 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(48,)i(for)c(the)i(description)f(of)150
+1915 y(the)c Ft(trap)e Fu(builtin.)275 2066 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
+2176 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 2285 y(to)31 b(ab)s(ort.)275
+2436 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 2545 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 2655 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 2765 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 2874 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 2984 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 3093 y(of)h(the)f(last)h(command)f(executed)i(b)s
+(efore)e(the)g Ft(return)p Fu(.)275 3244 y(V)-8 b(ariables)29
+b(lo)s(cal)h(to)g(the)e(function)g(ma)m(y)i(b)s(e)e(declared)h(with)f
+(the)h Ft(local)e Fu(builtin)h(\()p Fr(lo)s(cal)i(v)-5
+b(ariables)t Fu(\).)150 3354 y(Ordinarily)d(,)35 b(v)-5
+b(ariables)35 b(and)f(their)g(v)-5 b(alues)35 b(are)g(shared)e(b)s(et)m
+(w)m(een)i(a)g(function)f(and)g(its)g(caller.)54 b(These)150
+3463 y(v)-5 b(ariables)30 b(are)f(visible)g(only)g(to)h(the)f(function)
+f(and)g(the)i(commands)e(it)h(in)m(v)m(ok)m(es.)42 b(This)28
+b(is)h(particularly)150 3573 y(imp)s(ortan)m(t)i(when)e(a)i(shell)f
+(function)g(calls)i(other)e(functions.)275 3724 y(In)j(the)h(follo)m
+(wing)i(description,)f(the)g Fr(curren)m(t)f(scop)s(e)39
+b Fu(is)34 b(a)h(curren)m(tly-)g(executing)g(function.)52
+b(Pre-)150 3833 y(vious)33 b(scop)s(es)g(consist)g(of)g(that)g
+(function's)g(caller)h(and)e(so)h(on,)h(bac)m(k)g(to)f(the)g
+Ft(")p Fu(global)p Ft(")h Fu(scop)s(e,)f(where)150 3943
+y(the)g(shell)g(is)g(not)g(executing)h(an)m(y)f(shell)g(function.)48
+b(Consequen)m(tly)-8 b(,)34 b(a)f(lo)s(cal)h(v)-5 b(ariable)34
+b(at)f(the)g(curren)m(t)150 4052 y(lo)s(cal)g(scop)s(e)f(is)f(a)h(v)-5
+b(ariable)33 b(declared)f(using)f(the)h Ft(local)e Fu(or)i
+Ft(declare)e Fu(builtins)h(in)g(the)h(function)f(that)150
+4162 y(is)f(curren)m(tly)h(executing.)275 4313 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 4422 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 4532 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
+4641 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.)275
+4792 y(The)f(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 4902 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
+5011 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 5121 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 5230 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
+5340 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.)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)275 299
+y(F)-8 b(or)38 b(example,)h(if)f(a)f(v)-5 b(ariable)38
+b Ft(var)f Fu(is)g(declared)h(as)f(lo)s(cal)i(in)e(function)g
+Ft(func1)p Fu(,)g(and)g Ft(func1)f Fu(calls)150 408 y(another)29
+b(function)g Ft(func2)p Fu(,)f(references)i(to)f Ft(var)g
+Fu(made)g(from)f(within)h Ft(func2)f Fu(will)h(resolv)m(e)i(to)e(the)h
+(lo)s(cal)150 518 y(v)-5 b(ariable)31 b Ft(var)f Fu(from)g
+Ft(func1)p Fu(,)f(shado)m(wing)h(an)m(y)h(global)h(v)-5
+b(ariable)31 b(named)f Ft(var)p Fu(.)275 650 y(The)f(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 781 y Ft(In)47
+b(func2,)f(var)h(=)h(func1)e(local)390 913 y(func1\(\))390
+1022 y({)581 1132 y(local)g(var='func1)f(local')581 1241
+y(func2)390 1351 y(})390 1570 y(func2\(\))390 1680 y({)581
+1789 y(echo)i("In)f(func2,)h(var)f(=)i($var")390 1899
+y(})390 2118 y(var=global)390 2228 y(func1)275 2359 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 2469 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
+2578 y(an)m(y)27 b(calling)i(scop)s(e)e(as)g(describ)s(ed)f(ab)s(o)m(v)
+m(e.)41 b(If)26 b(a)h(v)-5 b(ariable)28 b(at)g(the)f(curren)m(t)g(lo)s
+(cal)h(scop)s(e)f(is)g(unset,)g(it)h(will)150 2688 y(remain)k(so)g
+(\(app)s(earing)g(as)h(unset\))e(un)m(til)i(it)f(is)g(reset)h(in)f
+(that)g(scop)s(e)h(or)f(un)m(til)g(the)g(function)g(returns.)150
+2798 y(Once)39 b(the)h(function)f(returns,)h(an)m(y)g(instance)g(of)f
+(the)h(v)-5 b(ariable)40 b(at)g(a)g(previous)f(scop)s(e)g(will)h(b)s
+(ecome)150 2907 y(visible.)k(If)31 b(the)h(unset)f(acts)h(on)g(a)g(v)-5
+b(ariable)32 b(at)g(a)g(previous)f(scop)s(e,)h(an)m(y)f(instance)i(of)e
+(a)h(v)-5 b(ariable)32 b(with)150 3017 y(that)23 b(name)g(that)h(had)e
+(b)s(een)g(shado)m(w)m(ed)h(will)g(b)s(ecome)h(visible)f(\(see)h(b)s
+(elo)m(w)f(ho)m(w)g Ft(localvar_unset)p Fu(shell)150
+3126 y(option)31 b(c)m(hanges)g(this)f(b)s(eha)m(vior\).)275
+3258 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 3368 y Fu(\()p Ft(typeset)p Fu(\))43 b(builtin)h
+(command)g(\(see)h(Section)g(4.2)g([Bash)g(Builtins],)j(page)d(55\).)83
+b(The)44 b Ft(-F)f Fu(option)150 3477 y(to)e Ft(declare)e
+Fu(or)i Ft(typeset)e Fu(will)i(list)g(the)g(function)f(names)h(only)g
+(\(and)f(optionally)i(the)f(source)g(\014le)150 3587
+y(and)g(line)h(n)m(um)m(b)s(er,)h(if)f(the)g Ft(extdebug)d
+Fu(shell)j(option)g(is)g(enabled\).)75 b(F)-8 b(unctions)42
+b(ma)m(y)g(b)s(e)f(exp)s(orted)150 3696 y(so)i(that)g(c)m(hild)g(shell)
+g(pro)s(cesses)g(\(those)g(created)h(when)e(executing)i(a)f(separate)h
+(shell)f(in)m(v)m(o)s(cation\))150 3806 y(automatically)34
+b(ha)m(v)m(e)e(them)e(de\014ned)g(with)g(the)h Ft(-f)f
+Fu(option)i(to)f(the)g Ft(export)e Fu(builtin)i(\(see)g(Section)h(4.1)
+150 3916 y([Bourne)e(Shell)h(Builtins],)g(page)g(48\).)275
+4047 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 4157 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
+4266 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 4501 y Fs(3.4)68 b(Shell)45 b(P)l(arameters)150
+4660 y Fu(A)39 b Fr(parameter)45 b Fu(is)39 b(an)g(en)m(tit)m(y)h(that)
+f(stores)g(v)-5 b(alues.)66 b(It)39 b(can)g(b)s(e)f(a)h
+Ft(name)p Fu(,)h(a)f(n)m(um)m(b)s(er,)g(or)g(one)g(of)g(the)150
+4770 y(sp)s(ecial)c(c)m(haracters)h(listed)g(b)s(elo)m(w.)53
+b(A)35 b Fr(v)-5 b(ariable)41 b Fu(is)34 b(a)h(parameter)h(denoted)e(b)
+m(y)h(a)g Ft(name)p Fu(.)52 b(A)35 b(v)-5 b(ariable)150
+4880 y(has)41 b(a)h Ft(value)d Fu(and)i(zero)h(or)f(more)g
+Ft(attributes)p Fu(.)71 b(A)m(ttributes)42 b(are)f(assigned)h(using)f
+(the)g Ft(declare)150 4989 y Fu(builtin)29 b(command)g(\(see)h(the)g
+(description)f(of)g(the)h Ft(declare)d Fu(builtin)i(in)g(Section)h(4.2)
+g([Bash)g(Builtins],)150 5099 y(page)h(55\).)275 5230
+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 5340 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.)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)275 299
+y(A)30 b(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 471 y Fj(name)p
+Ft(=[)p Fj(value)p Ft(])150 643 y Fu(If)43 b Fr(v)-5
+b(alue)49 b Fu(is)43 b(not)h(giv)m(en,)k(the)c(v)-5 b(ariable)44
+b(is)f(assigned)h(the)f(n)m(ull)h(string.)80 b(All)44
+b Fr(v)-5 b(alue)5 b Fu(s)43 b(undergo)g(tilde)150 753
+y(expansion,)25 b(parameter)f(and)f(v)-5 b(ariable)25
+b(expansion,)g(command)e(substitution,)i(arithmetic)g(expansion,)150
+862 y(and)i(quote)i(remo)m(v)-5 b(al)29 b(\(see)g(Section)f(3.5.3)i
+([Shell)e(P)m(arameter)h(Expansion],)f(page)h(26\).)41
+b(If)27 b(the)h(v)-5 b(ariable)150 972 y(has)35 b(its)h
+Ft(integer)e Fu(attribute)i(set,)i(then)d Fr(v)-5 b(alue)42
+b Fu(is)35 b(ev)-5 b(aluated)37 b(as)f(an)f(arithmetic)i(expression)f
+(ev)m(en)g(if)150 1082 y(the)i Ft($\(\(...)n(\)\))f Fu(expansion)g(is)g
+(not)h(used)e(\(see)j(Section)f(3.5.5)h([Arithmetic)f(Expansion],)h
+(page)f(34\).)150 1191 y(W)-8 b(ord)26 b(splitting)h(and)e(\014lename)h
+(expansion)g(are)g(not)h(p)s(erformed.)37 b(Assignmen)m(t)27
+b(statemen)m(ts)g(ma)m(y)g(also)150 1301 y(app)s(ear)22
+b(as)h(argumen)m(ts)g(to)h(the)f Ft(alias)p Fu(,)g Ft(declare)p
+Fu(,)f Ft(typeset)p Fu(,)h Ft(export)p Fu(,)g Ft(readonly)p
+Fu(,)f(and)g Ft(local)f Fu(builtin)150 1410 y(commands)31
+b(\()p Fr(declaration)j Fu(commands\).)44 b(When)32 b(in)f
+Fm(posix)g Fu(mo)s(de)g(\(see)h(Section)h(6.11)g([Bash)f(POSIX)150
+1520 y(Mo)s(de],)h(page)f(106\),)i(these)e(builtins)f(ma)m(y)h(app)s
+(ear)f(in)g(a)h(command)f(after)h(one)g(or)g(more)g(instances)g(of)150
+1630 y(the)f Ft(command)d Fu(builtin)i(and)g(retain)h(these)f
+(assignmen)m(t)i(statemen)m(t)g(prop)s(erties.)275 1802
+y(In)d(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 1911 y(arra)m(y)k(index)f(\(see)h(Section)g(6.7)g
+([Arra)m(ys],)h(page)f(100\),)i(the)e(`)p Ft(+=)p Fu(')f(op)s(erator)g
+(can)h(b)s(e)e(used)h(to)h(app)s(end)150 2021 y(to)h(or)g(add)e(to)j
+(the)e(v)-5 b(ariable's)36 b(previous)f(v)-5 b(alue.)57
+b(This)34 b(includes)h(argumen)m(ts)h(to)g(builtin)f(commands)150
+2131 y(suc)m(h)29 b(as)g Ft(declare)e Fu(that)i(accept)h(assignmen)m(t)
+g(statemen)m(ts)h(\(declaration)f(commands\).)41 b(When)28
+b(`)p Ft(+=)p Fu(')h(is)150 2240 y(applied)36 b(to)h(a)f(v)-5
+b(ariable)37 b(for)f(whic)m(h)f(the)i Ft(integer)d Fu(attribute)i(has)g
+(b)s(een)g(set,)i Fr(v)-5 b(alue)41 b Fu(is)36 b(ev)-5
+b(aluated)38 b(as)150 2350 y(an)28 b(arithmetic)h(expression)f(and)f
+(added)h(to)h(the)f(v)-5 b(ariable's)29 b(curren)m(t)e(v)-5
+b(alue,)30 b(whic)m(h)d(is)i(also)f(ev)-5 b(aluated.)150
+2459 y(When)43 b(`)p Ft(+=)p Fu(')g(is)h(applied)f(to)h(an)f(arra)m(y)h
+(v)-5 b(ariable)44 b(using)f(comp)s(ound)e(assignmen)m(t)j(\(see)h
+(Section)f(6.7)150 2569 y([Arra)m(ys],)g(page)d(100\),)k(the)c(v)-5
+b(ariable's)42 b(v)-5 b(alue)41 b(is)g(not)f(unset)h(\(as)g(it)g(is)g
+(when)e(using)h(`)p Ft(=)p Fu('\),)k(and)c(new)150 2679
+y(v)-5 b(alues)27 b(are)g(app)s(ended)f(to)h(the)g(arra)m(y)h(b)s
+(eginning)e(at)h(one)g(greater)i(than)d(the)h(arra)m(y's)h(maxim)m(um)e
+(index)150 2788 y(\(for)32 b(indexed)g(arra)m(ys\),)i(or)e(added)f(as)i
+(additional)g(k)m(ey-v)-5 b(alue)34 b(pairs)d(in)h(an)g(asso)s(ciativ)m
+(e)j(arra)m(y)-8 b(.)47 b(When)150 2898 y(applied)27
+b(to)h(a)f(string-v)-5 b(alued)28 b(v)-5 b(ariable,)29
+b Fr(v)-5 b(alue)32 b Fu(is)c(expanded)e(and)h(app)s(ended)e(to)j(the)f
+(v)-5 b(ariable's)28 b(v)-5 b(alue.)275 3070 y(A)28 b(v)-5
+b(ariable)28 b(can)h(b)s(e)e(assigned)h(the)h Ft(nameref)d
+Fu(attribute)i(using)g(the)g Ft(-n)f Fu(option)i(to)g(the)f
+Ft(declare)e Fu(or)150 3180 y Ft(local)f Fu(builtin)h(commands)g(\(see)
+i(Section)f(4.2)h([Bash)f(Builtins],)h(page)f(55\))h(to)f(create)i(a)e
+Fr(nameref)p Fu(,)g(or)g(a)150 3289 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
+3399 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 3508 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 3618 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
+3727 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 3837 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 4009 y Ft(declare)46
+b(-n)h(ref=$1)150 4181 y Fu(inside)30 b(the)g(function)g(creates)h(a)g
+(nameref)f(v)-5 b(ariable)30 b Ft(ref)g Fu(whose)g(v)-5
+b(alue)30 b(is)g(the)g(v)-5 b(ariable)31 b(name)f(passed)150
+4291 y(as)c(the)h(\014rst)e(argumen)m(t.)40 b(References)26
+b(and)g(assignmen)m(ts)h(to)g Ft(ref)p Fu(,)f(and)f(c)m(hanges)i(to)g
+(its)g(attributes,)h(are)150 4401 y(treated)j(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 4510 y(w)m(as)h(passed)f(as)g
+Ft($1)p Fu(.)275 4682 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
+4792 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 4902 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 5011 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.)150
+5121 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 5230 y(Shell)43 b(Builtins],)j(page)e(48\).)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 5340 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.)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 Fk(3.4.1)63 b(P)m(ositional)41 b(P)m(arameters)150
+446 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 555 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
+665 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 775 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 884 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
+994 y(set)k(and)f(unset)f(them)i(\(see)g(Chapter)f(4)g([Shell)h
+(Builtin)g(Commands],)h(page)f(48\).)68 b(The)39 b(p)s(ositional)150
+1103 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
+1213 y([Shell)30 b(F)-8 b(unctions],)32 b(page)f(19\).)275
+1344 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
+1454 y(b)s(e)h(enclosed)h(in)f(braces.)150 1646 y Fk(3.4.2)63
+b(Sp)s(ecial)41 b(P)m(arameters)150 1793 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
+1903 y(assignmen)m(t)31 b(to)g(them)g(is)f(not)h(allo)m(w)m(ed.)150
+2056 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
+2165 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 2275 y(separate)23
+b(w)m(ord.)38 b(In)21 b(con)m(texts)j(where)e(it)g(is)h(p)s(erformed,)f
+(those)h(w)m(ords)e(are)i(sub)5 b(ject)22 b(to)h(fur-)630
+2384 y(ther)k(w)m(ord)g(splitting)i(and)e(\014lename)g(expansion.)40
+b(When)27 b(the)h(expansion)f(o)s(ccurs)g(within)630
+2494 y(double)37 b(quotes,)k(it)d(expands)f(to)h(a)g(single)h(w)m(ord)e
+(with)h(the)f(v)-5 b(alue)39 b(of)f(eac)m(h)g(parameter)630
+2604 y(separated)g(b)m(y)g(the)f(\014rst)g(c)m(haracter)i(of)f(the)g
+Ft(IFS)f Fu(sp)s(ecial)h(v)-5 b(ariable.)63 b(That)38
+b(is,)h Ft("$*")e Fu(is)630 2713 y(equiv)-5 b(alen)m(t)39
+b(to)g Ft("$1)p Fj(c)p Ft($2)p Fj(c)p Ft(...)m(")p Fu(,)h(where)d
+Fr(c)44 b Fu(is)38 b(the)g(\014rst)g(c)m(haracter)h(of)f(the)g(v)-5
+b(alue)39 b(of)f(the)630 2823 y Ft(IFS)29 b 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 2932
+y(n)m(ull,)i(the)f(parameters)h(are)g(joined)f(without)g(in)m(terv)m
+(ening)i(separators.)150 3085 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 3195 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 3304 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 3414 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 3523 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 3633 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
+3743 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 3852 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 3962 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 4071 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 4181 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 4291 y(they)j(are)f(remo)m(v)m
+(ed\).)150 4443 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
+4596 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
+4706 y(pip)s(eline.)150 4858 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
+4968 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 5078 y Fu(option\).)150 5230 y Ft($)432 b Fu(\($$\))39
+b(Expands)c(to)j(the)f(pro)s(cess)g Fm(id)g Fu(of)g(the)g(shell.)61
+b(In)36 b(a)h(subshell,)h(it)g(expands)e(to)i(the)630
+5340 y(pro)s(cess)30 b Fm(id)g Fu(of)h(the)g(in)m(v)m(oking)g(shell,)g
+(not)g(the)f(subshell.)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 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 408 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 518 y(\(see)31 b(Section)h(7.2)f([Job)f(Con)m(trol)h
+(Builtins],)g(page)h(114\).)150 675 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 785 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 894 y(Scripts],)g(page)g(46\),)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 1004 y
+Ft(-c)i Fu(option)h(\(see)h(Section)g(6.1)f([In)m(v)m(oking)h(Bash],)g
+(page)f(91\),)i(then)d Ft($0)g Fu(is)h(set)g(to)h(the)f(\014rst)630
+1113 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
+1223 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 1461
+y Fs(3.5)68 b(Shell)45 b(Expansions)150 1621 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 1730 y(sev)m(en)j(kinds)e(of)i(expansion)f(p)s(erformed:)225
+1863 y Fq(\017)60 b Fu(brace)31 b(expansion)225 1997
+y Fq(\017)60 b Fu(tilde)31 b(expansion)225 2130 y Fq(\017)60
+b Fu(parameter)31 b(and)f(v)-5 b(ariable)31 b(expansion)225
+2263 y Fq(\017)60 b Fu(command)30 b(substitution)225
+2396 y Fq(\017)60 b Fu(arithmetic)32 b(expansion)225
+2529 y Fq(\017)60 b Fu(w)m(ord)30 b(splitting)225 2663
+y Fq(\017)60 b Fu(\014lename)31 b(expansion)275 2820
+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 2929 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 3039 y(w)m(ord)d(splitting;)h(and)f(\014lename)h
+(expansion.)275 3172 y(On)c(systems)h(that)h(can)g(supp)s(ort)e(it,)i
+(there)g(is)f(an)g(additional)i(expansion)e(a)m(v)-5
+b(ailable:)42 b Fr(pro)s(cess)28 b(sub-)150 3282 y(stitution)p
+Fu(.)42 b(This)30 b(is)g(p)s(erformed)f(at)j(the)e(same)h(time)h(as)e
+(tilde,)i(parameter,)f(v)-5 b(ariable,)32 b(and)e(arithmetic)150
+3391 y(expansion)g(and)g(command)g(substitution.)275
+3524 y(After)g(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
+3634 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
+3767 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
+3877 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)150 3986 y(exceptions)i(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 4096 y(page)31
+b(23\),)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(100\).)275 4229 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(38\))h(is)150 4339 y(p)s(erformed.)150
+4535 y Fk(3.5.1)63 b(Brace)40 b(Expansion)150 4682 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 4792 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(35\),)150 4902 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
+5011 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 5121 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 5230 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
+5340 y(eac)m(h)32 b(resulting)e(string,)h(expanding)e(left)j(to)f(righ)
+m(t.)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(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 408 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 537 y Ft(bash$)46
+b(echo)h(a{d,c,b}e)390 647 y(ade)g(ace)g(abe)275 776
+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 886 y(or)34 b(letters,)i(and)d
+Fr(incr)p Fu(,)h(an)g(optional)g(incremen)m(t,)i(is)d(an)h(in)m(teger.)
+52 b(When)33 b(in)m(tegers)i(are)f(supplied,)g(the)150
+995 y(expression)f(expands)f(to)i(eac)m(h)g(n)m(um)m(b)s(er)e(b)s(et)m
+(w)m(een)i Fr(x)39 b Fu(and)33 b Fr(y)p Fu(,)h(inclusiv)m(e.)50
+b(Supplied)31 b(in)m(tegers)k(ma)m(y)f(b)s(e)150 1105
+y(pre\014xed)h(with)h(`)p Ft(0)p Fu(')g(to)h(force)g(eac)m(h)h(term)e
+(to)h(ha)m(v)m(e)g(the)g(same)g(width.)57 b(When)36 b(either)h
+Fr(x)42 b Fu(or)37 b Fr(y)43 b Fu(b)s(egins)150 1214
+y(with)37 b(a)h(zero,)j(the)c(shell)h(attempts)h(to)f(force)g(all)g
+(generated)h(terms)e(to)i(con)m(tain)g(the)e(same)h(n)m(um)m(b)s(er)150
+1324 y(of)30 b(digits,)h(zero-padding)f(where)f(necessary)-8
+b(.)41 b(When)30 b(letters)g(are)h(supplied,)d(the)i(expression)g
+(expands)150 1433 y(to)k(eac)m(h)g(c)m(haracter)h(lexicographically)h
+(b)s(et)m(w)m(een)e Fr(x)40 b Fu(and)32 b Fr(y)p Fu(,)i(inclusiv)m(e,)i
+(using)c(the)i(default)f(C)g(lo)s(cale.)150 1543 y(Note)f(that)f(b)s
+(oth)f Fr(x)37 b Fu(and)30 b Fr(y)38 b Fu(m)m(ust)31
+b(b)s(e)f(of)h(the)g(same)g(t)m(yp)s(e)g(\(in)m(teger)h(or)f(letter\).)
+43 b(When)30 b(the)h(incremen)m(t)150 1653 y(is)e(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
+1762 y(as)i(appropriate.)275 1891 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 2001 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 2110
+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 2239 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
+2349 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 2458 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275
+2587 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 2697 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 2807 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 2936 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 3045 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 3174 y Ft(mkdir)46 b(/usr/local/src/bash/{old,n)o
+(ew,)o(dist)o(,bug)o(s})275 3303 y Fu(or)390 3432 y Ft(chown)g(root)h
+(/usr/{ucb/{ex,edit},lib/)o({ex?)o(.?*,)o(how)o(_ex})o(})150
+3620 y Fk(3.5.2)63 b(Tilde)41 b(Expansion)150 3767 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 3877 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(.)150 3986 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
+4096 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 4205 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 4315 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 4425 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 4554 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 4663 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 4792 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 4902 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 5011 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 5121 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 5230 y(page)34 b(102\).)50 b(If)32 b(the)h(tilde-pre\014x,)h
+(sans)e(the)h(tilde,)i(consists)e(of)g(a)h(n)m(um)m(b)s(er)d(without)i
+(a)g(leading)h(`)p Ft(+)p Fu(')f(or)150 5340 y(`)p Ft(-)p
+Fu(',)e(`)p Ft(+)p Fu(')f(is)h(assumed.)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)275 299
+y(If)29 b(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 438 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 547
+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 657
+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 766 y(assigns)j(the)f(expanded)g(v)-5
+b(alue.)275 905 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 1071
+y Ft(~)432 b Fu(The)30 b(v)-5 b(alue)31 b(of)f Ft($HOME)150
+1234 y(~/foo)240 b($HOME/foo)150 1398 y(~fred/foo)630
+1508 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 1671 y(~+/foo)192
+b($PWD/foo)150 1835 y(~-/foo)g(${OLDPWD-'~-'}/foo)150
+1998 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
+2162 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 2326 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 2491 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 2601 y(signmen)m(ts)f(\(see)h(Section)g(3.4)g
+([Shell)f(P)m(arameters],)k(page)d(21\))g(when)e(they)h(app)s(ear)f(as)
+i(argumen)m(ts)150 2710 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
+(declaration)i(commands)d(listed)150 2820 y(ab)s(o)m(v)m(e,)d(when)d
+(in)h Fm(posix)g Fu(mo)s(de.)150 3024 y Fk(3.5.3)63 b(Shell)41
+b(P)m(arameter)f(Expansion)150 3170 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 3280 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
+3390 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 3499 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 3638
+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 3748 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
+3857 y(command)30 b(substitution,)g(or)h(parameter)g(expansion.)275
+3996 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 4105 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
+4215 y(P)m(arameters],)28 b(page)f(21\))g(or)f(an)f(arra)m(y)h
+(reference)h(\(see)f(Section)h(6.7)g([Arra)m(ys],)g(page)g(100\).)41
+b(The)25 b(braces)150 4325 y(are)32 b(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 4434 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
+4573 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 4682 y(nameref,)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
+4792 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 4902 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
+5011 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 5121 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 5230 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 5340 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(})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)150 299
+y(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 408 y(in)m(tro)s(duce)i(indirection.)275
+547 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 657 y(command)30 b(substitution,)g(and)g
+(arithmetic)i(expansion.)275 795 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 905 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 1015
+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 1124 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 1234 y(op)s(erator)31 b(tests)g(only)f(for)g(existence.)150
+1399 y Ft(${)p Fj(parameter)p Ft(:)p Fq(\000)p Fj(word)p
+Ft(})630 1509 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 1619 y(the)31 b(v)-5 b(alue)30 b(of)h
+Fr(parameter)37 b Fu(is)31 b(substituted.)870 1755 y
+Ft($)47 b(v=123)870 1865 y($)g(echo)g(${v-unset})870
+1974 y(123)150 2138 y(${)p Fj(parameter)p Ft(:=)p Fj(word)p
+Ft(})630 2248 y Fu(If)33 b 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 2357
+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 2467 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(.)870 2603 y Ft($)47 b(var=)870
+2713 y($)g(:)h(${var:=DEFAULT})870 2823 y($)f(echo)g($var)870
+2932 y(DEFAULT)150 3096 y(${)p Fj(parameter)p Ft(:?)p
+Fj(word)p Ft(})630 3205 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
+3315 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 3425 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.)870 3561 y Ft($)47 b(var=)870 3671 y($)g(:)h(${var:?var)
+d(is)i(unset)f(or)i(null})870 3780 y(bash:)e(var:)h(var)g(is)g(unset)f
+(or)i(null)150 3944 y(${)p Fj(parameter)p Ft(:+)p Fj(word)p
+Ft(})630 4053 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 4163 y(of)31 b Fr(w)m(ord)i Fu(is)e(substituted.)
+870 4300 y Ft($)47 b(var=123)870 4409 y($)g(echo)g(${var:+var)e(is)i
+(set)g(and)g(not)g(null})870 4519 y(var)g(is)g(set)g(and)g(not)g(null)
+150 4682 y(${)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)30 b(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)41 b Fu(is)35 b(`)p Ft(@)p
+Fu(')f(or)h(`)p Ft(*)p Fu(',)g(an)g(indexed)f(arra)m(y)g(subscripted)g
+(b)m(y)g(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p Fu(',)g(or)g(an)f(asso-)630
+5230 y(ciativ)m(e)i(arra)m(y)e(name,)h(the)f(results)f(di\013er)g(as)h
+(describ)s(ed)e(b)s(elo)m(w.)51 b(If)33 b Fr(length)h
+Fu(is)g(omitted,)630 5340 y(it)d(expands)f(to)h(the)g(substring)e(of)h
+(the)h(v)-5 b(alue)31 b(of)g Fr(parameter)37 b Fu(starting)31
+b(at)h(the)e(c)m(haracter)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(sp)s(eci\014ed)30 b(b)m(y)g Fr(o\013set)k Fu(and)c(extending)h(to)g
+(the)g(end)f(of)g(the)h(v)-5 b(alue.)42 b Fr(length)31
+b Fu(and)f Fr(o\013set)k Fu(are)630 408 y(arithmetic)e(expressions)e
+(\(see)h(Section)g(6.5)h([Shell)e(Arithmetic],)i(page)f(98\).)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: 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 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)34 b Fr(parameter)41 b Fu(is)35 b(`)p Ft(@)p
+Fu(')f(or)h(`)p Ft(*)p Fu(',)h(the)e(result)g(is)h Fr(length)g
+Fu(p)s(ositional)g(parameters)g(b)s(eginning)630 2180
+y(at)27 b Fr(o\013set)p Fu(.)40 b(A)26 b(negativ)m(e)j
+Fr(o\013set)g Fu(is)d(tak)m(en)h(relativ)m(e)h(to)f(one)g(greater)g
+(than)f(the)g(greatest)i(p)s(o-)630 2290 y(sitional)i(parameter,)f(so)f
+(an)g(o\013set)i(of)e(-1)h(ev)-5 b(aluates)30 b(to)f(the)f(last)h(p)s
+(ositional)g(parameter.)630 2399 y(It)h(is)h(an)f(expansion)g(error)g
+(if)h Fr(length)f Fu(ev)-5 b(aluates)32 b(to)g(a)e(n)m(um)m(b)s(er)f
+(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: 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 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($0)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
+(36\).)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: 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)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 1019 y Ft(${)p Fj(parameter)p
+Ft(\045)p Fj(word)p Ft(})150 1129 y(${)p Fj(parameter)p
+Ft(\045\045)p Fj(word)p Ft(})630 1238 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 1348 y(rules)f(describ)s(ed)g(b)s(elo)m(w)h
+(\(see)h(Section)g(3.5.8.1)h([P)m(attern)f(Matc)m(hing],)51
+b(page)45 b(36\).)85 b(If)630 1457 y(the)43 b(pattern)g(matc)m(hes)h(a)
+g(trailing)g(p)s(ortion)e(of)h(the)g(expanded)g(v)-5
+b(alue)43 b(of)g Fr(parameter)p Fu(,)630 1567 y(then)c(the)g(result)g
+(of)h(the)f(expansion)g(is)h(the)f(v)-5 b(alue)40 b(of)f
+Fr(parameter)46 b Fu(with)39 b(the)h(shortest)630 1677
+y(matc)m(hing)31 b(pattern)e(\(the)h(`)p Ft(\045)p Fu(')g(case\))h(or)e
+(the)h(longest)h(matc)m(hing)f(pattern)g(\(the)g(`)p
+Ft(\045\045)p Fu(')g(case\))630 1786 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 1896 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 2005 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 2115
+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
+2225 y(the)h(resultan)m(t)g(list.)150 2397 y Ft(${)p
+Fj(parameter)p Ft(/)p Fj(pattern)p Ft(/)p Fj(stri)o(ng)p
+Ft(})150 2506 y(${)p Fj(parameter)p Ft(//)p Fj(pattern)p
+Ft(/)p Fj(str)o(ing)p Ft(})150 2616 y(${)p Fj(parameter)p
+Ft(/#)p Fj(pattern)p Ft(/)p Fj(str)o(ing)p Ft(})150 2725
+y(${)p Fj(parameter)p Ft(/\045)p Fj(pattern)p Ft(/)p
+Fj(str)o(ing)p Ft(})630 2835 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 2945 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
+3054 y(replaced)30 b(with)e Fr(string)p Fu(.)41 b Fr(string)c
+Fu(undergo)s(es)28 b(tilde)i(expansion,)f(parameter)h(and)e(v)-5
+b(ariable)630 3164 y(expansion,)25 b(arithmetic)g(expansion,)g(command)
+e(and)g(pro)s(cess)g(substitution,)i(and)e(quote)630
+3273 y(remo)m(v)-5 b(al.)54 b(The)33 b(matc)m(h)j(is)e(p)s(erformed)f
+(according)i(to)g(the)f(rules)g(describ)s(ed)f(b)s(elo)m(w)i(\(see)630
+3383 y(Section)c(3.5.8.1)i([P)m(attern)f(Matc)m(hing],)g(page)f(36\).)
+630 3524 y(In)45 b(the)g(\014rst)g(form)g(ab)s(o)m(v)m(e,)50
+b(only)c(the)f(\014rst)g(matc)m(h)h(is)f(replaced.)86
+b(If)45 b(there)h(are)g(t)m(w)m(o)630 3634 y(slashes)28
+b(separating)g Fr(parameter)35 b Fu(and)27 b Fr(pattern)g
+Fu(\(the)i(second)e(form)g(ab)s(o)m(v)m(e\),)j(all)f(matc)m(hes)630
+3743 y(of)d Fr(pattern)g Fu(are)g(replaced)g(with)f Fr(string)p
+Fu(.)40 b(If)25 b Fr(pattern)h Fu(is)f(preceded)h(b)m(y)f(`)p
+Ft(#)p Fu(')h(\(the)h(third)d(form)630 3853 y(ab)s(o)m(v)m(e\),)32
+b(it)e(m)m(ust)f(matc)m(h)i(at)f(the)g(b)s(eginning)e(of)i(the)g
+(expanded)f(v)-5 b(alue)30 b(of)f Fr(parameter)p Fu(.)41
+b(If)630 3962 y Fr(pattern)28 b Fu(is)g(preceded)g(b)m(y)g(`)p
+Ft(\045)p Fu(')g(\(the)h(fourth)e(form)h(ab)s(o)m(v)m(e\),)i(it)f(m)m
+(ust)f(matc)m(h)h(at)g(the)f(end)g(of)630 4072 y(the)i(expanded)e(v)-5
+b(alue)30 b(of)g Fr(parameter)p Fu(.)41 b(If)28 b(the)i(expansion)f(of)
+h Fr(string)37 b Fu(is)29 b(n)m(ull,)h(matc)m(hes)h(of)630
+4181 y Fr(pattern)d Fu(are)g(deleted.)41 b(If)28 b Fr(string)35
+b Fu(is)28 b(n)m(ull,)h(matc)m(hes)g(of)f Fr(pattern)g
+Fu(are)h(deleted)f(and)g(the)g(`)p Ft(/)p Fu(')630 4291
+y(follo)m(wing)k Fr(pattern)e Fu(ma)m(y)h(b)s(e)f(omitted.)630
+4432 y(If)f(the)h Ft(patsub_replacement)25 b Fu(shell)30
+b(option)g(is)f(enabled)h(using)f Ft(shopt)p Fu(,)g(an)m(y)h(unquoted)
+630 4542 y(instances)40 b(of)g(`)p Ft(&)p Fu(')g(in)f
+Fr(string)48 b Fu(are)40 b(replaced)g(with)g(the)g(matc)m(hing)g(p)s
+(ortion)g(of)g Fr(pattern)p Fu(.)630 4651 y(This)30 b(is)g(in)m(tended)
+g(to)h(duplicate)g(a)g(common)g Ft(sed)e Fu(idiom.)630
+4792 y(Quoting)g(an)m(y)f(part)h(of)f Fr(string)36 b
+Fu(inhibits)28 b(replacemen)m(t)i(in)e(the)g(expansion)h(of)f(the)h
+(quoted)630 4902 y(p)s(ortion,)j(including)g(replacemen)m(t)h(strings)f
+(stored)g(in)g(shell)g(v)-5 b(ariables.)46 b(Bac)m(kslash)34
+b(will)630 5011 y(escap)s(e)k(`)p Ft(&)p Fu(')g(in)f
+Fr(string)8 b Fu(;)42 b(the)c(bac)m(kslash)g(is)g(remo)m(v)m(ed)g(in)g
+(order)f(to)h(p)s(ermit)f(a)i(literal)g(`)p Ft(&)p Fu(')630
+5121 y(in)31 b(the)h(replacemen)m(t)h(string.)44 b(Users)32
+b(should)e(tak)m(e)k(care)e(if)g Fr(string)39 b Fu(is)32
+b(double-quoted)f(to)630 5230 y(a)m(v)m(oid)37 b(un)m(w)m(an)m(ted)f
+(in)m(teractions)i(b)s(et)m(w)m(een)e(the)g(bac)m(kslash)h(and)e
+(double-quoting,)j(since)630 5340 y(bac)m(kslash)31 b(has)f(sp)s(ecial)
+h(meaning)f(within)g(double)f(quotes.)42 b(P)m(attern)31
+b(substitution)f(p)s(er-)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)630 299
+y(forms)28 b(the)h(c)m(hec)m(k)i(for)d(unquoted)g(`)p
+Ft(&)p Fu(')h(after)g(expanding)g Fr(string)p Fu(,)g(so)g(users)f
+(should)g(ensure)630 408 y(to)33 b(prop)s(erly)e(quote)i(an)m(y)f(o)s
+(ccurrences)g(of)h(`)p Ft(&)p Fu(')f(they)g(w)m(an)m(t)h(to)g(b)s(e)f
+(tak)m(en)h(literally)h(in)e(the)630 518 y(replacemen)m(t)k(and)e
+(ensure)g(an)m(y)h(instances)g(of)g(`)p Ft(&)p Fu(')f(they)h(w)m(an)m
+(t)g(to)h(b)s(e)e(replaced)h(are)g(un-)630 628 y(quoted.)630
+756 y(F)-8 b(or)31 b(instance,)870 883 y Ft(var=abcdef)870
+993 y(rep='&)46 b(')870 1103 y(echo)h(${var/abc/&)d(})870
+1212 y(echo)j("${var/abc/&)d(}")870 1322 y(echo)j(${var/abc/$rep})870
+1431 y(echo)g("${var/abc/$rep}")630 1559 y Fu(will)31
+b(displa)m(y)f(four)g(lines)h(of)f Ft(")p Fu(ab)s(c)g(def)p
+Ft(")p Fu(,)g(while)870 1687 y Ft(var=abcdef)870 1797
+y(rep='&)46 b(')870 1906 y(echo)h(${var/abc/\\&)d(})870
+2016 y(echo)j("${var/abc/\\&)d(}")870 2125 y(echo)j(${var/abc/"&)d("})
+870 2235 y(echo)j(${var/abc/"$rep"})630 2363 y Fu(will)34
+b(displa)m(y)g(four)g(lines)g(of)g Ft(")p Fu(&)f(def)p
+Ft(")p Fu(.)51 b(Lik)m(e)35 b(the)f(pattern)g(remo)m(v)-5
+b(al)35 b(op)s(erators,)g(double)630 2472 y(quotes)23
+b(surrounding)c(the)k(replacemen)m(t)g(string)f(quote)h(the)f(expanded)
+f(c)m(haracters,)26 b(while)630 2582 y(double)43 b(quotes)i(enclosing)f
+(the)g(en)m(tire)h(parameter)f(substitution)f(do)h(not,)k(since)c(the)
+630 2692 y(expansion)e(is)h(p)s(erformed)e(in)h(a)h(con)m(text)h(that)f
+(do)s(esn't)f(tak)m(e)i(an)m(y)f(enclosing)g(double)630
+2801 y(quotes)31 b(in)m(to)g(accoun)m(t.)630 2929 y(Since)24
+b(bac)m(kslash)i(can)e(escap)s(e)h(`)p Ft(&)p Fu(',)h(it)f(can)g(also)h
+(escap)s(e)f(a)f(bac)m(kslash)i(in)e(the)g(replacemen)m(t)630
+3039 y(string.)39 b(This)26 b(means)g(that)h(`)p Ft(\\\\)p
+Fu(')g(will)f(insert)h(a)f(literal)i(bac)m(kslash)f(in)m(to)h(the)e
+(replacemen)m(t,)630 3148 y(so)31 b(these)f(t)m(w)m(o)i
+Ft(echo)d Fu(commands)870 3276 y Ft(var=abcdef)870 3386
+y(rep='\\\\&xyz')870 3495 y(echo)47 b(${var/abc/\\\\&xyz})870
+3605 y(echo)g(${var/abc/$rep})630 3733 y Fu(will)31 b(b)s(oth)e(output)
+h(`)p Ft(\\abcxyzdef)p Fu('.)630 3861 y(It)g(should)g(rarely)g(b)s(e)g
+(necessary)h(to)g(enclose)h(only)e Fr(string)38 b Fu(in)30
+b(double)g(quotes.)630 3988 y(If)j(the)h Ft(nocasematch)d
+Fu(shell)i(option)h(\(see)h(the)f(description)f(of)h
+Ft(shopt)e Fu(in)i(Section)g(4.3.2)630 4098 y([The)23
+b(Shopt)g(Builtin],)j(page)e(71\))h(is)e(enabled,)i(the)f(matc)m(h)g
+(is)g(p)s(erformed)e(without)h(regard)630 4208 y(to)31
+b(the)f(case)h(of)g(alphab)s(etic)f(c)m(haracters.)42
+b(If)30 b Fr(parameter)37 b Fu(is)30 b(`)p Ft(@)p Fu(')g(or)g(`)p
+Ft(*)p Fu(',)h(the)f(substitution)630 4317 y(op)s(eration)g(is)f
+(applied)g(to)h(eac)m(h)g(p)s(ositional)g(parameter)g(in)e(turn,)h(and)
+g(the)g(expansion)g(is)630 4427 y(the)i(resultan)m(t)h(list.)45
+b(If)30 b Fr(parameter)39 b Fu(is)31 b(an)g(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(',)630 4536 y(the)e(substitution)g(op)s(eration)h(is)f
+(applied)g(to)h(eac)m(h)h(mem)m(b)s(er)e(of)g(the)g(arra)m(y)h(in)f
+(turn,)g(and)630 4646 y(the)h(expansion)f(is)g(the)h(resultan)m(t)g
+(list.)150 4792 y Ft(${)p Fj(parameter)p Ft(^)p Fj(pattern)p
+Ft(})150 4902 y(${)p Fj(parameter)p Ft(^^)p Fj(pattern)p
+Ft(})150 5011 y(${)p Fj(parameter)p Ft(,)p Fj(pattern)p
+Ft(})150 5121 y(${)p Fj(parameter)p Ft(,,)p Fj(pattern)p
+Ft(})630 5230 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 5340 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)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)630 299
+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 408 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 518 y(to)e(matc)m(h)g(more)g
+(than)f(one)h(c)m(haracter.)630 650 y(The)f(`)p Ft(^)p
+Fu(')g(op)s(erator)g(con)m(v)m(erts)i(lo)m(w)m(ercase)g(letters)g(matc)
+m(hing)f Fr(pattern)f Fu(to)h(upp)s(ercase;)f(the)630
+760 y(`)p Ft(,)p Fu(')25 b(op)s(erator)f(con)m(v)m(erts)i(matc)m(hing)g
+(upp)s(ercase)d(letters)j(to)f(lo)m(w)m(ercase.)41 b(The)24
+b(`)p Ft(^^)p Fu(')g(and)g(`)p Ft(,,)p Fu(')630 870 y(expansions)31
+b(con)m(v)m(ert)i(eac)m(h)g(matc)m(hed)f(c)m(haracter)h(in)e(the)h
+(expanded)f(v)-5 b(alue;)32 b(the)g(`)p Ft(^)p Fu(')g(and)630
+979 y(`)p Ft(,)p Fu(')24 b(expansions)f(matc)m(h)i(and)e(con)m(v)m(ert)
+j(only)d(the)h(\014rst)f(c)m(haracter)j(in)d(the)h(expanded)f(v)-5
+b(alue.)630 1089 y(If)30 b Fr(pattern)g Fu(is)h(omitted,)g(it)g(is)g
+(treated)g(lik)m(e)h(a)f(`)p Ft(?)p Fu(',)f(whic)m(h)g(matc)m(hes)i(ev)
+m(ery)f(c)m(haracter.)630 1221 y(If)23 b Fr(parameter)31
+b Fu(is)24 b(`)p Ft(@)p Fu(')g(or)g(`)p Ft(*)p Fu(',)h(the)f(case)h(mo)
+s(di\014cation)f(op)s(eration)g(is)g(applied)g(to)g(eac)m(h)h(p)s(osi-)
+630 1331 y(tional)h(parameter)e(in)h(turn,)f(and)g(the)h(expansion)f
+(is)g(the)h(resultan)m(t)g(list.)40 b(If)23 b Fr(parameter)32
+b Fu(is)630 1440 y(an)e(arra)m(y)g(v)-5 b(ariable)31
+b(subscripted)d(with)i(`)p Ft(@)p Fu(')g(or)f(`)p Ft(*)p
+Fu(',)i(the)f(case)g(mo)s(di\014cation)h(op)s(eration)f(is)630
+1550 y(applied)d(to)g(eac)m(h)h(mem)m(b)s(er)e(of)h(the)g(arra)m(y)g
+(in)g(turn,)g(and)f(the)h(expansion)f(is)h(the)g(resultan)m(t)630
+1660 y(list.)150 1815 y Ft(${)p Fj(parameter)p Ft(@)p
+Fj(operator)p Ft(})630 1924 y Fu(The)h(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 2034 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
+2144 y Fu(is)j(a)h(single)g(letter:)630 2299 y Ft(U)432
+b Fu(The)31 b(expansion)g(is)g(a)g(string)h(that)f(is)h(the)f(v)-5
+b(alue)32 b(of)f Fr(parameter)38 b Fu(with)31 b(lo)m(w-)1110
+2408 y(ercase)g(alphab)s(etic)g(c)m(haracters)h(con)m(v)m(erted)g(to)f
+(upp)s(ercase.)630 2564 y Ft(u)432 b Fu(The)34 b(expansion)g(is)g(a)h
+(string)f(that)h(is)g(the)f(v)-5 b(alue)35 b(of)f Fr(parameter)42
+b Fu(with)34 b(the)1110 2673 y(\014rst)c(c)m(haracter)i(con)m(v)m
+(erted)f(to)h(upp)s(ercase,)d(if)i(it)g(is)f(alphab)s(etic.)630
+2829 y Ft(L)432 b Fu(The)33 b(expansion)h(is)g(a)g(string)g(that)h(is)f
+(the)g(v)-5 b(alue)34 b(of)g Fr(parameter)41 b Fu(with)34
+b(up-)1110 2938 y(p)s(ercase)c(alphab)s(etic)h(c)m(haracters)h(con)m(v)
+m(erted)g(to)f(lo)m(w)m(ercase.)630 3093 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
+3203 y(a)g(format)f(that)h(can)g(b)s(e)f(reused)f(as)i(input.)630
+3358 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 3468 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
+3577 y(anism.)630 3733 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 3842 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 3952 y(the)31 b(Prompt],)f(page)h(104\).)630
+4107 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
+4217 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 4326
+y(its)31 b(attributes)g(and)e(v)-5 b(alue.)630 4482 y
+Ft(K)432 b Fu(Pro)s(duces)33 b(a)i(p)s(ossibly-quoted)e(v)m(ersion)i
+(of)f(the)h(v)-5 b(alue)34 b(of)h Fr(parameter)p Fu(,)g(ex-)1110
+4591 y(cept)46 b(that)h(it)f(prin)m(ts)f(the)h(v)-5 b(alues)47
+b(of)f(indexed)f(and)g(asso)s(ciativ)m(e)k(arra)m(ys)1110
+4701 y(as)37 b(a)g(sequence)f(of)h(quoted)g(k)m(ey-v)-5
+b(alue)38 b(pairs)e(\(see)h(Section)h(6.7)f([Arra)m(ys],)1110
+4810 y(page)31 b(100\).)630 4966 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 5075 y(rameter)7
+b Fu('s)31 b(attributes.)630 5230 y Ft(k)432 b Fu(Lik)m(e)29
+b(the)g(`)p Ft(K)p Fu(')g(transformation,)g(but)f(expands)g(the)g(k)m
+(eys)i(and)d(v)-5 b(alues)29 b(of)g(in-)1110 5340 y(dexed)c(and)f(asso)
+s(ciativ)m(e)k(arra)m(ys)d(to)h(separate)f(w)m(ords)g(after)g(w)m(ord)g
+(splitting.)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)630 299
+y(If)29 b 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 408 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 518 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
+628 y(in)30 b(turn,)g(and)f(the)i(expansion)f(is)h(the)f(resultan)m(t)h
+(list.)630 761 y(The)c(result)h(of)g(the)f(expansion)h(is)g(sub)5
+b(ject)27 b(to)h(w)m(ord)g(splitting)g(and)f(\014lename)h(expansion)630
+870 y(as)j(describ)s(ed)e(b)s(elo)m(w.)150 1067 y Fk(3.5.4)63
+b(Command)41 b(Substitution)150 1214 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 1324 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
+1457 y Ft($\()p Fj(command)p Ft(\))150 1590 y Fu(or)390
+1724 y Ft(`)p Fj(command)p Ft(`)150 1857 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 1966 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
+2076 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 2186 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 2295
+y(but)30 b(faster)g Ft($\(<)g Fj(file)p Ft(\))p Fu(.)275
+2428 y(When)j(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
+2538 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
+2648 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 2757 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 2890 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 3000 y(the)31 b(inner)e(bac)m(kquotes)j(with)e(bac)m(kslashes.)275
+3133 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
+3243 y(are)i(not)f(p)s(erformed)f(on)h(the)h(results.)150
+3440 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)150 3587
+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 3696 y(of)31 b(the)f(result.)41 b(The)30
+b(format)g(for)g(arithmetic)i(expansion)e(is:)390 3829
+y Ft($\(\()47 b Fj(expression)e Ft(\)\))275 3963 y Fu(The)34
+b Fr(expression)h Fu(undergo)s(es)f(the)h(same)h(expansions)e(as)i(if)f
+(it)g(w)m(ere)h(within)e(double)h(quotes,)i(but)150 4072
+y(double)g(quote)g(c)m(haracters)i(in)d Fr(expression)h
+Fu(are)g(not)g(treated)h(sp)s(ecially)g(and)f(are)g(remo)m(v)m(ed.)61
+b(All)38 b(to-)150 4182 y(k)m(ens)c(in)f(the)h(expression)f(undergo)g
+(parameter)h(and)f(v)-5 b(ariable)34 b(expansion,)h(command)e
+(substitution,)150 4291 y(and)41 b(quote)i(remo)m(v)-5
+b(al.)76 b(The)41 b(result)h(is)g(treated)h(as)f(the)g(arithmetic)h
+(expression)f(to)g(b)s(e)f(ev)-5 b(aluated.)150 4401
+y(Arithmetic)31 b(expansions)f(ma)m(y)h(b)s(e)f(nested.)275
+4534 y(The)k(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 4644 y(Arithmetic],)32 b(page)f(98\).)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 4753 y(to)f(the)g(standard)e(error)
+h(and)g(no)g(substitution)g(o)s(ccurs.)150 4950 y Fk(3.5.6)63
+b(Pro)s(cess)42 b(Substitution)150 5097 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
+5207 y(It)d(tak)m(es)i(the)f(form)f(of)390 5340 y Ft(<\()p
+Fj(list)p Ft(\))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(or)390 426 y Ft(>\()p Fj(list)p Ft(\))150 553 y Fu(The)28
+b(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 663 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 772 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
+882 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 991 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 1101 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 1210 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 1337 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 1447 y(v)-5
+b(ariable)31 b(expansion,)g(command)f(substitution,)g(and)g(arithmetic)
+i(expansion.)150 1631 y Fk(3.5.7)63 b(W)-10 b(ord)41
+b(Splitting)150 1778 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 1888 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 2015 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 2125 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 2234 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 2344
+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,)150
+2453 y(and)k(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 2563 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 2672 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 2782 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 2892
+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 3001 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 3111 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
+3238 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 3347 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 3457 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
+3567 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 3676 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 3786 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
+3895 y(argumen)m(t)31 b(remo)m(v)-5 b(al.)275 4022 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 4207 y Fk(3.5.8)63 b(Filename)41 b(Expansion)150
+4354 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 4463 y(page)d(67\),)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 4573 y(app)s(ears,)34
+b(and)f(is)g(not)h(quoted,)h(then)e(the)h(w)m(ord)f(is)h(regarded)f(as)
+h(a)g Fr(pattern)p Fu(,)h(and)e(replaced)h(with)f(an)150
+4682 y(alphab)s(etically)41 b(sorted)e(list)h(of)g(\014lenames)f(matc)m
+(hing)i(the)e(pattern)g(\(see)i(Section)f(3.5.8.1)i([P)m(attern)150
+4792 y(Matc)m(hing],)e(page)e(36\).)60 b(If)36 b(no)h(matc)m(hing)g
+(\014lenames)g(are)g(found,)g(and)f(the)g(shell)h(option)g
+Ft(nullglob)150 4902 y Fu(is)k(disabled,)i(the)f(w)m(ord)e(is)h(left)h
+(unc)m(hanged.)72 b(If)40 b(the)h Ft(nullglob)e Fu(option)i(is)g(set,)k
+(and)40 b(no)h(matc)m(hes)150 5011 y(are)c(found,)g(the)g(w)m(ord)f(is)
+g(remo)m(v)m(ed.)60 b(If)36 b(the)h Ft(failglob)d Fu(shell)j(option)g
+(is)g(set,)i(and)c(no)i(matc)m(hes)h(are)150 5121 y(found,)e(an)g
+(error)f(message)i(is)f(prin)m(ted)f(and)h(the)g(command)f(is)h(not)g
+(executed.)58 b(If)35 b(the)h(shell)g(option)150 5230
+y Ft(nocaseglob)e Fu(is)j(enabled,)i(the)e(matc)m(h)h(is)f(p)s
+(erformed)e(without)i(regard)g(to)h(the)f(case)h(of)f(alphab)s(etic)150
+5340 y(c)m(haracters.)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)275 299
+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 408 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 518 y Fu(is)36 b(set.)58
+b(In)35 b(order)g(to)i(matc)m(h)f(the)g(\014lenames)g(`)p
+Ft(.)p Fu(')g(and)g(`)p Ft(..)p Fu(',)h(the)f(pattern)g(m)m(ust)g(b)s
+(egin)f(with)h(`)p Ft(.)p Fu(')g(\(for)150 628 y(example,)42
+b(`)p Ft(.?)p Fu('\),)f(ev)m(en)f(if)f Ft(dotglob)d Fu(is)j(set.)67
+b(If)38 b(the)h Ft(globskipdots)d Fu(shell)j(option)g(is)g(enabled,)i
+(the)150 737 y(\014lenames)33 b(`)p Ft(.)p Fu(')g(and)f(`)p
+Ft(..)p Fu(')h(are)g(nev)m(er)g(matc)m(hed,)h(ev)m(en)g(if)e(the)h
+(pattern)g(b)s(egins)f(with)h(a)g(`)p Ft(.)p Fu('.)48
+b(When)33 b(not)150 847 y(matc)m(hing)e(\014lenames,)g(the)g(`)p
+Ft(.)p Fu(')f(c)m(haracter)i(is)f(not)f(treated)i(sp)s(ecially)-8
+b(.)275 985 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 1095 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 1205 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(36\).)275 1343 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
+(71,)g(for)f(a)g(descrip-)150 1453 y(tion)j(of)f(the)h
+Ft(nocaseglob)p Fu(,)d Ft(nullglob)p Fu(,)g Ft(globskipdots)p
+Fu(,)f Ft(failglob)p Fu(,)i(and)h Ft(dotglob)e Fu(options.)275
+1592 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 1701 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 1811
+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 1920 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 2030 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 2139 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
+2249 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 2359 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 2468 y Fu(option)i(is)f(disabled)g
+(when)g Ft(GLOBIGNORE)d Fu(is)k(unset.)150 2672 y Fk(3.5.8.1)63
+b(P)m(attern)40 b(Matc)m(hing)150 2819 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
+2928 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 3038
+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 3147 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 3286 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 3452 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
+3561 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 3671 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
+3780 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 3890 y(and)k(sub)s(directories.)150
+4054 y Ft(?)432 b Fu(Matc)m(hes)32 b(an)m(y)f(single)g(c)m(haracter.)
+150 4217 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 4327 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 4436 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 4546 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 4655 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 4765
+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 4875 y(\014rst)c(c)m(haracter)j(in)d
+(the)h(set.)43 b(The)31 b(sorting)g(order)g(of)g(c)m(haracters)h(in)f
+(range)g(expressions,)630 4984 y(and)f(the)h(c)m(haracters)h(included)e
+(in)h(the)f(range,)i(are)f(determined)f(b)m(y)h(the)g(curren)m(t)f(lo)s
+(cale)630 5094 y(and)g(the)g(v)-5 b(alues)31 b(of)g(the)f
+Ft(LC_COLLATE)e Fu(and)h Ft(LC_ALL)g Fu(shell)i(v)-5
+b(ariables,)31 b(if)f(set.)630 5230 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 5340 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)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)630 299
+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 408 y(to)34 b(`)p Ft([aBbCcDdxYyZz])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 518 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 628 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
+737 y Ft(globasciiranges)c Fu(shell)31 b(option.)630
+873 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 982 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 1118 y Ft(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g
+(digit)g(graph)g(lower)870 1227 y(print)g(punct)g(space)f(upper)h(word)
+190 b(xdigit)630 1363 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 1472 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 1608 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 1717 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 1827
+y(curren)m(t)g(lo)s(cale\))j(as)d(the)h(c)m(haracter)h
+Fr(c)p Fu(.)630 1962 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 2125 y(If)i(the)g Ft(extglob)f
+Fu(shell)h(option)h(is)g(enabled)f(using)g(the)h Ft(shopt)e
+Fu(builtin,)i(the)g(shell)f(recognizes)j(sev)m(eral)150
+2234 y(extended)i(pattern)f(matc)m(hing)i(op)s(erators.)40
+b(In)26 b(the)i(follo)m(wing)h(description,)g(a)e Fr(pattern-list)k
+Fu(is)d(a)g(list)g(of)150 2344 y(one)23 b(or)f(more)h(patterns)g
+(separated)g(b)m(y)f(a)h(`)p Ft(|)p Fu('.)38 b(When)22
+b(matc)m(hing)i(\014lenames,)g(the)f Ft(dotglob)e Fu(shell)h(option)150
+2453 y(determines)h(the)h(set)g(of)g(\014lenames)f(that)h(are)g
+(tested,)i(as)d(describ)s(ed)g(ab)s(o)m(v)m(e.)39 b(Comp)s(osite)24
+b(patterns)f(ma)m(y)150 2563 y(b)s(e)30 b(formed)g(using)f(one)i(or)f
+(more)h(of)g(the)f(follo)m(wing)i(sub-patterns:)150 2725
+y Ft(?\()p Fj(pattern-list)p Ft(\))630 2835 y Fu(Matc)m(hes)g(zero)f
+(or)g(one)f(o)s(ccurrence)h(of)f(the)h(giv)m(en)g(patterns.)150
+2996 y Ft(*\()p Fj(pattern-list)p Ft(\))630 3106 y Fu(Matc)m(hes)h
+(zero)f(or)g(more)f(o)s(ccurrences)h(of)f(the)h(giv)m(en)g(patterns.)
+150 3267 y Ft(+\()p Fj(pattern-list)p Ft(\))630 3377
+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 3538 y Ft(@\()p Fj(pattern-list)p
+Ft(\))630 3648 y Fu(Matc)m(hes)g(one)f(of)f(the)h(giv)m(en)g(patterns.)
+150 3809 y Ft(!\()p Fj(pattern-list)p Ft(\))630 3919
+y Fu(Matc)m(hes)h(an)m(ything)f(except)g(one)g(of)f(the)h(giv)m(en)g
+(patterns.)275 4081 y(The)h Ft(extglob)f Fu(option)j(c)m(hanges)g(the)f
+(b)s(eha)m(vior)g(of)h(the)f(parser,)g(since)h(the)f(paren)m(theses)h
+(are)f(nor-)150 4190 y(mally)44 b(treated)g(as)f(op)s(erators)g(with)g
+(syn)m(tactic)i(meaning.)79 b(T)-8 b(o)44 b(ensure)e(that)i(extended)f
+(matc)m(hing)150 4300 y(patterns)30 b(are)g(parsed)f(correctly)-8
+b(,)32 b(mak)m(e)e(sure)g(that)g Ft(extglob)e Fu(is)h(enabled)h(b)s
+(efore)f(parsing)h(constructs)150 4410 y(con)m(taining)i(the)e
+(patterns,)h(including)f(shell)h(functions)f(and)f(command)h
+(substitutions.)275 4546 y(When)c(matc)m(hing)i(\014lenames,)g(the)f
+Ft(dotglob)e Fu(shell)i(option)h(determines)f(the)g(set)g(of)g
+(\014lenames)g(that)150 4656 y(are)34 b(tested:)47 b(when)33
+b Ft(dotglob)e Fu(is)i(enabled,)i(the)e(set)h(of)g(\014lenames)f
+(includes)g(all)h(\014les)g(b)s(eginning)e(with)150 4765
+y(`)p Ft(.)p Fu(',)d(but)e(the)g(\014lenames)h(`)p Ft(.)p
+Fu(')g(and)f(`)p Ft(..)p Fu(')g(m)m(ust)h(b)s(e)f(matc)m(hed)h(b)m(y)g
+(a)g(pattern)g(or)f(sub-pattern)g(that)h(b)s(egins)150
+4875 y(with)33 b(a)g(dot;)j(when)c(it)h(is)h(disabled,)f(the)h(set)g
+(do)s(es)e(not)i(include)f(an)m(y)g(\014lenames)g(b)s(eginning)g(with)g
+(\\.")150 4984 y(unless)24 b(the)g(pattern)h(or)f(sub-pattern)g(b)s
+(egins)g(with)g(a)g(`)p Ft(.)p Fu('.)39 b(As)25 b(ab)s(o)m(v)m(e,)i(`)p
+Ft(.)p Fu(')d(only)h(has)f(a)h(sp)s(ecial)g(meaning)150
+5094 y(when)k(matc)m(hing)j(\014lenames.)275 5230 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 5340 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)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(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
+408 y(ma)m(y)31 b(b)s(e)f(faster.)150 603 y Fk(3.5.9)63
+b(Quote)41 b(Remo)m(v)-7 b(al)150 750 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 860 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
+1096 y Fs(3.6)68 b(Redirections)150 1255 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
+1365 y(tation)d(in)m(terpreted)f(b)m(y)f(the)h(shell.)40
+b Fr(Redirection)27 b Fu(allo)m(ws)h(commands')f(\014le)f(handles)g(to)
+i(b)s(e)e(duplicated,)150 1475 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 1584 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
+1694 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 1803 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 1913 y(in)g(the)h(order)f(they)g(app)s(ear,)g
+(from)g(left)h(to)g(righ)m(t.)275 2045 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 2155
+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 2264 y(except)37
+b Ft(>)p Fu(&-)e(and)g Ft(<)p Fu(&-,)i(the)f(shell)g(will)g(allo)s
+(cate)j(a)d(\014le)g(descriptor)f(greater)i(than)f(10)g(and)f(assign)h
+(it)150 2374 y(to)e Fi({)p Fr(v)-5 b(arname)5 b Fi(})p
+Fu(.)52 b(If)33 b Ft(>)p Fu(&-)g(or)h Ft(<)p Fu(&-)f(is)g(preceded)h(b)
+m(y)f Fi({)p Fr(v)-5 b(arname)5 b Fi(})p Fu(,)36 b(the)e(v)-5
+b(alue)34 b(of)f Fr(v)-5 b(arname)39 b Fu(de\014nes)33
+b(the)150 2483 y(\014le)e(descriptor)g(to)h(close.)43
+b(If)31 b Fi({)p Fr(v)-5 b(arname)5 b Fi(})32 b Fu(is)f(supplied,)f
+(the)h(redirection)g(p)s(ersists)f(b)s(ey)m(ond)h(the)g(scop)s(e)150
+2593 y(of)42 b(the)f(command,)j(allo)m(wing)f(the)f(shell)g(programmer)
+f(to)h(manage)g(the)g(\014le)f(descriptor's)h(lifetime)150
+2703 y(man)m(ually)-8 b(.)41 b(The)29 b Ft(varredir_close)c
+Fu(shell)k(option)g(manages)h(this)f(b)s(eha)m(vior)g(\(see)h(Section)f
+(4.3.2)i([The)150 2812 y(Shopt)f(Builtin],)h(page)g(71\).)275
+2944 y(In)c(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 3054 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 3164 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 3273 y(to)e(the)g(standard)e(output)h(\(\014le)h
+(descriptor)f(1\).)275 3405 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 3515 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 3625 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 3734 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
+3866 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
+3999 y Ft(ls)47 b(>)h Fj(dirlist)d Ft(2>&1)150 4131 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 4240 y(\014le)h Fr(dirlist)p Fu(,)h(while)f(the)h(command)390
+4373 y Ft(ls)47 b(2>&1)g(>)g Fj(dirlist)150 4505 y Fu(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 4615 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 4747 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 4856 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 4966 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
+5076 y(describ)s(ed)j(b)s(elo)m(w.)150 5230 y Ft(/dev/fd/)p
+Fj(fd)630 5340 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.)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)150 299
+y Ft(/dev/stdin)630 408 y Fu(File)32 b(descriptor)e(0)h(is)f
+(duplicated.)150 577 y Ft(/dev/stdout)630 687 y Fu(File)i(descriptor)e
+(1)h(is)f(duplicated.)150 856 y Ft(/dev/stderr)630 965
+y Fu(File)i(descriptor)e(2)h(is)f(duplicated.)150 1134
+y Ft(/dev/tcp/)p Fj(host)p Ft(/)p Fj(port)630 1244 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 1354 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 1522 y Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)630
+1632 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 1742 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 1915 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 2059 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 2169 y(con\015ict)i(with)f(\014le)h
+(descriptors)f(the)g(shell)h(uses)f(in)m(ternally)-8
+b(.)150 2378 y Fk(3.6.1)63 b(Redirecting)40 b(Input)150
+2525 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 2634 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 2744
+y(sp)s(eci\014ed.)275 2888 y(The)c(general)j(format)e(for)h
+(redirecting)g(input)e(is:)390 3032 y Ft([)p Fj(n)p Ft(]<)p
+Fj(word)150 3241 y Fk(3.6.2)63 b(Redirecting)40 b(Output)150
+3388 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 3497 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 3607
+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 3751 y(The)e(general)j(format)e(for)h
+(redirecting)g(output)f(is:)390 3895 y Ft([)p Fj(n)p
+Ft(]>[|])p Fj(word)275 4039 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 4148 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
+4258 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
+4367 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 4477 y(named)30 b(b)m(y)g
+Fr(w)m(ord)k Fu(exists.)150 4686 y Fk(3.6.3)63 b(App)s(ending)42
+b(Redirected)e(Output)150 4833 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 4942 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 5052 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 5196 y(The)f(general)j(format)e(for)h(app)s(ending)e
+(output)h(is:)390 5340 y Ft([)p Fj(n)p Ft(]>>)p Fj(word)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)150 299
+y Fk(3.6.4)63 b(Redirecting)40 b(Standard)h(Output)g(and)g(Standard)g
+(Error)150 446 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 555 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 712 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 870 y Ft(&>)p Fj(word)150 1027 y Fu(and)390
+1184 y Ft(>&)p Fj(word)150 1341 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 1498 y Ft(>)p Fj(word)46
+b Ft(2>&1)275 1655 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 1764
+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
+1874 y(reasons.)150 2096 y Fk(3.6.5)63 b(App)s(ending)42
+b(Standard)f(Output)g(and)g(Standard)g(Error)150 2243
+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 2352 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 2509 y(The)f(format)i(for)f(app)s(ending)f
+(standard)h(output)g(and)f(standard)h(error)g(is:)390
+2666 y Ft(&>>)p Fj(word)150 2823 y Fu(This)g(is)g(seman)m(tically)j
+(equiv)-5 b(alen)m(t)32 b(to)390 2980 y Ft(>>)p Fj(word)46
+b Ft(2>&1)275 3138 y Fu(\(see)31 b(Duplicating)h(File)f(Descriptors)g
+(b)s(elo)m(w\).)150 3359 y Fk(3.6.6)63 b(Here)41 b(Do)s(cumen)m(ts)150
+3506 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 3616 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
+3725 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 3883 y(The)f(format)i(of)g(here-do)s(cumen)m(ts)f
+(is:)390 4040 y Ft([)p Fj(n)p Ft(]<<[)p Fq(\000)p Ft(])p
+Fj(word)772 4149 y(here-document)390 4259 y(delimiter)275
+4416 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
+4525 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
+4635 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 4745 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
+4854 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
+4964 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('.)275 5121 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
+5230 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 5340 y(b)s(e)e(inden)m(ted)g(in)g(a)
+h(natural)f(fashion.)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 Fk(3.6.7)63 b(Here)41 b(Strings)150 446 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
+600 y Ft([)p Fj(n)p Ft(]<<<)46 b Fj(word)275 753 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
+863 y(stitution,)f(arithmetic)f(expansion,)g(and)f(quote)h(remo)m(v)-5
+b(al.)41 b(Filename)29 b(expansion)e(and)f(w)m(ord)h(splitting)150
+973 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 1082 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 1301 y Fk(3.6.8)63 b(Duplicating)41
+b(File)g(Descriptors)150 1448 y Fu(The)30 b(redirection)h(op)s(erator)
+390 1602 y Ft([)p Fj(n)p Ft(]<&)p Fj(word)150 1755 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 1865 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
+1975 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 2084 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 2194 y(is)g(used.)275
+2348 y(The)f(op)s(erator)390 2502 y Ft([)p Fj(n)p Ft(]>&)p
+Fj(word)150 2655 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 2765 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 2875 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 2984 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
+3094 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
+3312 y Fk(3.6.9)63 b(Mo)m(ving)41 b(File)h(Descriptors)150
+3459 y Fu(The)30 b(redirection)h(op)s(erator)390 3613
+y Ft([)p Fj(n)p Ft(]<&)p Fj(digit)p Ft(-)150 3767 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 3876 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 4030 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s
+(erator)390 4184 y Ft([)p Fj(n)p Ft(]>&)p Fj(digit)p
+Ft(-)150 4338 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
+4448 y(if)i Fr(n)g Fu(is)h(not)f(sp)s(eci\014ed.)150
+4666 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 4813 y Fu(The)30
+b(redirection)h(op)s(erator)390 4967 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: 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)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,)g(in)f(the)h(follo)m
+(wing)h(order.)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
+(24\).)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(38\).)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.)68 b(In)38 b(the)h(case)i(of)e(suc)m(h)g(a)g
+(command)g(\(one)h(that)g(consists)g(only)f(of)g(assignmen)m(t)h
+(statemen)m(ts)150 2351 y(and)27 b(redirections\),)i(assignmen)m(t)g
+(statemen)m(ts)g(are)f(p)s(erformed)e(b)s(efore)h(redirections.)41
+b(Otherwise,)28 b(the)150 2461 y(v)-5 b(ariables)27 b(are)g(added)e(to)
+i(the)g(en)m(vironmen)m(t)g(of)f(the)h(executed)g(command)f(and)g(do)g
+(not)h(a\013ect)h(the)e(cur-)150 2570 y(ren)m(t)32 b(shell)f(en)m
+(vironmen)m(t.)44 b(If)31 b(an)m(y)g(of)h(the)f(assignmen)m(ts)h
+(attempts)g(to)g(assign)g(a)f(v)-5 b(alue)32 b(to)g(a)g(readonly)150
+2680 y(v)-5 b(ariable,)31 b(an)g(error)f(o)s(ccurs,)g(and)g(the)g
+(command)g(exits)i(with)e(a)g(non-zero)h(status.)275
+2814 y(If)i(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
+2924 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
+3058 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 3167 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 3277 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 3387 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
+3496 y(zero.)150 3695 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h
+(Execution)150 3842 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 3951 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 4085 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 4195 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 4305 y(F)-8 b(unctions],)31 b(page)h(19.)199
+4439 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 4548 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 4682 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
+4792 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 4902 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 5011 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 5121 y(Builtins],)37
+b(page)f(48\).)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
+5230 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 5340 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,)p eop end
+%%Page: 43 49
+TeXDict begin 43 48 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(43)330 299
+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)330
+408 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
+518 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 628 y(message)k(and)f(returns)f(an)i(exit)g
+(status)g(of)f(127.)199 759 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 868 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 978 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 1087 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8
+b(.)199 1218 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 1328 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
+1438 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(46.)199
+1569 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 1678 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150
+1870 y Fk(3.7.3)63 b(Command)41 b(Execution)f(En)m(vironmen)m(t)150
+2017 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
+2148 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 2258 y(the)g Ft(exec)e
+Fu(builtin)225 2389 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 2498 y(in)m(v)m(o)s(cation)225 2629 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
+2760 y Fq(\017)60 b Fu(curren)m(t)30 b(traps)g(set)h(b)m(y)f
+Ft(trap)225 2891 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 3001 y(shell's)i(paren)m(t)
+f(in)g(the)h(en)m(vironmen)m(t)225 3132 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
+3242 y(en)m(vironmen)m(t)225 3373 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 3482
+y(b)m(y)c Ft(set)225 3613 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(71\))225 3744 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(100\))225
+3875 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.4)g([Lists],)330 3985 y(page)31
+b(10\),)h(the)f(v)-5 b(alue)30 b(of)h Ft($$)p Fu(,)f(and)g(the)g(v)-5
+b(alue)31 b(of)g Ft($PPID)275 4137 y Fu(When)j(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 4247 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 4356 y(noted,)31
+b(the)f(v)-5 b(alues)31 b(are)g(inherited)f(from)g(the)g(shell.)225
+4487 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 4597 y(the)g(command)225 4728
+y Fq(\017)60 b Fu(the)31 b(curren)m(t)f(w)m(orking)g(directory)225
+4859 y Fq(\017)60 b Fu(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225
+4990 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 5099 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(44\))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: 44 50
+TeXDict begin 44 49 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(44)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 540 y(A)30 b Fr(subshell)j
+Fu(is)d(a)h(cop)m(y)g(of)g(the)f(shell)h(pro)s(cess.)275
+671 y(Command)k(substitution,)j(commands)e(group)s(ed)f(with)i(paren)m
+(theses,)h(and)e(async)m(hronous)g(com-)150 781 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
+891 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 1000 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 1110 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
+1219 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275
+1351 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 1460 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 1592
+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 1701 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 1811
+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 2004 y Fk(3.7.4)63
+b(En)m(vironmen)m(t)150 2151 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
+2261 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 2392 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 2502
+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
+2611 y(marking)23 b(it)h(for)f Ft(export)f Fu(to)i(c)m(hild)g(pro)s
+(cesses.)38 b(Executed)24 b(commands)f(inherit)g(the)g(en)m(vironmen)m
+(t.)39 b(The)150 2721 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 2830 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 2940 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
+3050 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 3159 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 3269 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 3400
+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
+3510 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
+3619 y(page)g(21.)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 3751 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(67\),)h(then)e(all)g
+(parameter)150 3860 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 3970 y(command)g(name.)275 4101 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 4211 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 4404 y Fk(3.7.5)63
+b(Exit)40 b(Status)150 4551 y Fu(The)23 b(exit)i(status)f(of)h(an)e
+(executed)i(command)f(is)g(the)g(v)-5 b(alue)24 b(returned)f(b)m(y)h
+(the)g Ft(waitpid)e Fu(system)i(call)h(or)150 4661 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 4770 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 4880 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 4989 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: 45 51
+TeXDict begin 45 50 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(45)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
+549 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
+658 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
+798 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
+908 y(is)c(greater)i(than)e(zero.)275 1048 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.5.2)h([Con-)150 1158 y(ditional)i(Constructs],)h(page)f
+(12\))g(and)e(some)i(of)f(the)g(list)g(constructs)g(\(see)h(Section)f
+(3.2.4)i([Lists],)150 1267 y(page)31 b(10\).)275 1407
+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
+1517 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 1627 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 1736 y(argumen)m(ts.)275
+1876 y(The)f(exit)i(status)f(of)h(the)f(last)h(command)f(is)g(a)m(v)-5
+b(ailable)36 b(in)e(the)g(sp)s(ecial)h(parameter)f($?)52
+b(\(see)35 b(Sec-)150 1986 y(tion)c(3.4.2)h([Sp)s(ecial)f(P)m
+(arameters],)h(page)f(23\).)150 2191 y Fk(3.7.6)63 b(Signals)150
+2338 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 2447 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 2557 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 2667 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 2776 y(page)f(113\),)h(Bash)f(ignores)g
+Ft(SIGTTIN)p Fu(,)d Ft(SIGTTOU)p Fu(,)h(and)h Ft(SIGTSTP)p
+Fu(.)275 2916 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 3026 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 3136 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 3245 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 3355 y Ft(SIGTTOU)p Fu(,)h(and)g Ft(SIGTSTP)p
+Fu(.)275 3495 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 3604 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 3714 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 3824 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
+3933 y(Section)c(7.2)g([Job)e(Con)m(trol)i(Builtins],)g(page)g(114\))h
+(or)e(mark)m(ed)g(to)g(not)g(receiv)m(e)i Ft(SIGHUP)c
+Fu(using)i Ft(disown)150 4043 y(-h)p Fu(.)275 4183 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
+4293 y(Builtin],)31 b(page)g(71\),)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 4433 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 4542 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 4652 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 4761 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
+4871 y(status)c(greater)g(than)f(128,)i(immediately)g(after)f(whic)m(h)
+f(the)h(trap)f(is)g(executed.)275 5011 y(When)41 b(job)g(con)m(trol)h
+(is)g(not)f(enabled,)k(and)40 b(Bash)i(is)f(w)m(aiting)i(for)e(a)h
+(foreground)e(command)h(to)150 5121 y(complete,)35 b(the)e(shell)h
+(receiv)m(es)g(k)m(eyb)s(oard-generated)g(signals)g(suc)m(h)e(as)i
+Ft(SIGINT)d Fu(\(usually)i(generated)150 5230 y(b)m(y)e(`)p
+Ft(^C)p Fu('\))h(that)g(users)e(commonly)i(in)m(tend)g(to)g(send)e(to)j
+(that)f(command.)43 b(This)31 b(happ)s(ens)e(b)s(ecause)j(the)150
+5340 y(shell)23 b(and)g(the)h(command)f(are)g(in)g(the)h(same)f(pro)s
+(cess)g(group)g(as)h(the)f(terminal,)i(and)e(`)p Ft(^C)p
+Fu(')g(sends)g Ft(SIGINT)p eop end
+%%Page: 46 52
+TeXDict begin 46 51 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(46)150 299
+y(to)35 b(all)g(pro)s(cesses)f(in)g(that)g(pro)s(cess)g(group.)51
+b(See)35 b(Chapter)e(7)i([Job)f(Con)m(trol],)i(page)f(113,)h(for)e(a)h
+(more)150 408 y(in-depth)30 b(discussion)f(of)i(pro)s(cess)f(groups.)
+275 542 y(When)35 b(Bash)h(is)g(running)f(without)h(job)f(con)m(trol)i
+(enabled)f(and)g(receiv)m(es)h Ft(SIGINT)e Fu(while)h(w)m(aiting)150
+651 y(for)g(a)h(foreground)f(command,)i(it)f(w)m(aits)g(un)m(til)g
+(that)g(foreground)f(command)g(terminates)h(and)f(then)150
+761 y(decides)31 b(what)f(to)h(do)f(ab)s(out)g(the)h
+Ft(SIGINT)p Fu(:)199 894 y(1.)61 b(If)29 b(the)h(command)f(terminates)i
+(due)d(to)j(the)e Ft(SIGINT)p Fu(,)g(Bash)g(concludes)h(that)g(the)g
+(user)f(mean)m(t)h(to)330 1004 y(end)25 b(the)h(en)m(tire)h(script,)g
+(and)f(acts)h(on)e(the)i Ft(SIGINT)d Fu(\(e.g.,)k(b)m(y)e(running)f(a)h
+Ft(SIGINT)e Fu(trap)i(or)g(exiting)330 1113 y(itself)7
+b(\);)199 1246 y(2.)61 b(If)39 b(the)g(pip)s(eline)g(do)s(es)g(not)h
+(terminate)g(due)f(to)h Ft(SIGINT)p Fu(,)g(the)g(program)f(handled)f
+(the)i Ft(SIGINT)330 1356 y Fu(itself)35 b(and)e(did)h(not)g(treat)h
+(it)g(as)f(a)g(fatal)i(signal.)52 b(In)33 b(that)i(case,)h(Bash)e(do)s
+(es)g(not)g(treat)i Ft(SIGINT)330 1466 y Fu(as)41 b(a)g(fatal)g
+(signal,)j(either,)g(instead)d(assuming)f(that)h(the)g
+Ft(SIGINT)d Fu(w)m(as)j(used)f(as)h(part)f(of)h(the)330
+1575 y(program's)32 b(normal)g(op)s(eration)h(\(e.g.,)h
+Ft(emacs)d Fu(uses)g(it)i(to)g(ab)s(ort)f(editing)h(commands\))f(or)g
+(delib-)330 1685 y(erately)41 b(discarded.)69 b(Ho)m(w)m(ev)m(er,)45
+b(Bash)40 b(will)h(run)d(an)m(y)j(trap)e(set)i(on)f Ft(SIGINT)p
+Fu(,)h(as)f(it)h(do)s(es)e(with)330 1794 y(an)m(y)31
+b(other)f(trapp)s(ed)f(signal)i(it)g(receiv)m(es)h(while)e(it)h(is)f(w)
+m(aiting)h(for)f(the)h(foreground)e(command)h(to)330
+1904 y(complete,)i(for)e(compatibilit)m(y)-8 b(.)150
+2142 y Fs(3.8)68 b(Shell)45 b(Scripts)150 2302 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 2411 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 2521 y(Section)39
+b(6.1)g([In)m(v)m(oking)g(Bash],)h(page)f(91\),)i(Bash)d(reads)g(and)f
+(executes)i(commands)f(from)f(the)i(\014le,)150 2630
+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 2740 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.)275
+2873 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 2983 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 3092 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 3202 y(parameters)31 b(are)f(unset.)275
+3335 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
+3445 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 3554 y(creates)32 b(a)f(new)e(instance)i(of)g
+(itself)g(to)g(execute)h(it.)41 b(In)30 b(other)h(w)m(ords,)f
+(executing)390 3688 y Ft(filename)46 b Fj(arguments)150
+3821 y Fu(is)30 b(equiv)-5 b(alen)m(t)32 b(to)f(executing)390
+3954 y Ft(bash)47 b(filename)e Fj(arguments)150 4087
+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 4197 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 4306 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
+4416 y([Bourne)30 b(Shell)h(Builtins],)g(page)g(48\))h(are)e(retained)h
+(b)m(y)f(the)h(c)m(hild.)275 4549 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 4659 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
+4768 y(of)27 b(the)g(line)g(sp)s(eci\014es)g(an)g(in)m(terpreter)g(for)
+g(the)g(program)g(and,)g(dep)s(ending)e(on)i(the)g(op)s(erating)h
+(system,)150 4878 y(one)e(or)g(more)g(optional)h(argumen)m(ts)f(for)g
+(that)g(in)m(terpreter.)40 b(Th)m(us,)26 b(y)m(ou)g(can)g(sp)s(ecify)g
+(Bash,)h Ft(awk)p Fu(,)f(P)m(erl,)150 4988 y(or)k(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 5121 y(The)k(argumen)m(ts)h(to)h(the)f(in)m
+(terpreter)h(consist)f(of)h(one)f(or)g(more)g(optional)h(argumen)m(ts)f
+(follo)m(wing)150 5230 y(the)e(in)m(terpreter)g(name)g(on)g(the)g
+(\014rst)g(line)g(of)g(the)g(script)g(\014le,)h(follo)m(w)m(ed)h(b)m(y)
+e(the)g(name)g(of)g(the)g(script)150 5340 y(\014le,)k(follo)m(w)m(ed)g
+(b)m(y)e(the)g(rest)g(of)g(the)h(argumen)m(ts)f(supplied)f(to)i(the)f
+(script.)58 b(The)35 b(details)i(of)g(ho)m(w)f(the)p
+eop end
+%%Page: 47 53
+TeXDict begin 47 52 bop 150 -116 a Fu(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(47)150 299
+y(in)m(terpreter)26 b(line)g(is)g(split)g(in)m(to)h(an)f(in)m
+(terpreter)g(name)g(and)f(a)h(set)h(of)e(argumen)m(ts)i(v)-5
+b(ary)25 b(across)i(systems.)150 408 y(Bash)j(will)f(p)s(erform)g(this)
+g(action)i(on)e(op)s(erating)h(systems)g(that)g(do)f(not)h(handle)f(it)
+h(themselv)m(es.)42 b(Note)150 518 y(that)e(some)g(older)g(v)m(ersions)
+g(of)g(Unix)f(limit)i(the)f(in)m(terpreter)g(name)g(and)f(a)h(single)g
+(argumen)m(t)g(to)h(a)150 628 y(maxim)m(um)21 b(of)g(32)h(c)m
+(haracters,)j(so)c(it's)h(not)g(p)s(ortable)f(to)h(assume)e(that)i
+(using)f(more)g(than)g(one)g(argumen)m(t)150 737 y(will)31
+b(w)m(ork.)275 872 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 981 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 1091
+y(under)h(another)h(shell.)41 b(It's)28 b(a)h(common)g(idiom)f(to)h
+(use)f Ft(env)g Fu(to)h(\014nd)e Ft(bash)g Fu(ev)m(en)i(if)f(it's)i(b)s
+(een)d(installed)150 1200 y(in)h(another)g(directory:)40
+b Ft(#!/usr/bin/env)27 b(bash)f Fu(will)j(\014nd)d(the)j(\014rst)e(o)s
+(ccurrence)h(of)g Ft(bash)f Fu(in)h Ft($PATH)p Fu(.)p
+eop end
+%%Page: 48 54
+TeXDict begin 48 53 bop 3659 -116 a Fu(48)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.2)h([Simple)f(Commands],)150
+718 y(page)21 b(9\),)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)33 b(114\),)i(the)e(directory)g(stac)m(k)h
+(\(see)f(Section)h(6.8.1)g([Directory)g(Stac)m(k)g(Builtins],)g(page)f
+(102\),)i(the)150 1631 y(command)23 b(history)h(\(see)g(Section)g(9.2)h
+([Bash)f(History)g(Builtins],)h(page)g(152\),)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(146\).)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(,)38 b(but)e Fr(\014lename)41
+b Fu(do)s(es)36 b(not)h(need)f(to)h(b)s(e)e(executable.)60
+b(When)36 b(Bash)g(is)h(not)f(in)630 4354 y Fm(posix)26
+b Fu(mo)s(de,)i(it)g(searc)m(hes)g(the)f(curren)m(t)g(directory)g(if)h
+Fr(\014lename)k Fu(is)27 b(not)h(found)d(in)i Ft($PATH)p
+Fu(.)630 4463 y(If)39 b(an)m(y)h Fr(argumen)m(ts)j Fu(are)d(supplied,)h
+(they)e(b)s(ecome)h(the)g(p)s(ositional)g(parameters)g(when)630
+4573 y Fr(\014lename)i Fu(is)36 b(executed.)60 b(Otherwise)36
+b(the)h(p)s(ositional)g(parameters)g(are)g(unc)m(hanged.)58
+b(If)630 4682 y(the)33 b Ft(-T)g Fu(option)g(is)g(enabled,)h
+Ft(.)f Fu(inherits)g(an)m(y)g(trap)g(on)g Ft(DEBUG)p
+Fu(;)g(if)g(it)h(is)f(not,)h(an)m(y)f Ft(DEBUG)630 4792
+y Fu(trap)f(string)g(is)g(sa)m(v)m(ed)h(and)f(restored)g(around)f(the)i
+(call)g(to)g Ft(.)p Fu(,)f(and)g Ft(.)g Fu(unsets)f(the)h
+Ft(DEBUG)630 4902 y Fu(trap)f(while)h(it)g(executes.)46
+b(If)31 b Ft(-T)g Fu(is)g(not)h(set,)h(and)d(the)i(sourced)f(\014le)h
+(c)m(hanges)h(the)e Ft(DEBUG)630 5011 y Fu(trap,)e(the)f(new)g(v)-5
+b(alue)29 b(is)f(retained)h(when)e Ft(.)h Fu(completes.)42
+b(The)27 b(return)h(status)g(is)h(the)f(exit)630 5121
+y(status)k(of)f(the)h(last)g(command)f(executed,)i(or)f(zero)g(if)f(no)
+h(commands)f(are)h(executed.)44 b(If)630 5230 y Fr(\014lename)d
+Fu(is)36 b(not)g(found,)h(or)e(cannot)i(b)s(e)e(read,)j(the)e(return)f
+(status)h(is)g(non-zero.)58 b(This)630 5340 y(builtin)30
+b(is)g(equiv)-5 b(alen)m(t)32 b(to)f Ft(source)p Fu(.)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)150 299 y Ft(break)870
+433 y(break)46 b([)p Fj(n)p Ft(])630 568 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 677 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 787 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
+946 y Ft(cd)870 1081 y(cd)47 b([-L|[-P)f([-e]])g([-@])h([)p
+Fj(directory)p Ft(])630 1215 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 1325
+y(the)k(v)-5 b(alue)31 b(of)g(the)g Ft(HOME)e Fu(shell)i(v)-5
+b(ariable)32 b(is)f(used.)40 b(If)31 b(the)g(shell)g(v)-5
+b(ariable)31 b Ft(CDPATH)e Fu(exists,)630 1435 y(it)44
+b(is)f(used)g(as)h(a)f(searc)m(h)h(path:)67 b(eac)m(h)45
+b(directory)f(name)f(in)g Ft(CDPATH)f Fu(is)h(searc)m(hed)h(for)630
+1544 y Fr(directory)p Fu(,)k(with)c(alternativ)m(e)i(directory)f(names)
+e(in)h Ft(CDPATH)e Fu(separated)j(b)m(y)f(a)g(colon)630
+1654 y(\(`)p Ft(:)p Fu('\).)e(If)30 b Fr(directory)38
+b Fu(b)s(egins)30 b(with)g(a)h(slash,)f Ft(CDPATH)f Fu(is)h(not)h
+(used.)630 1788 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 1898 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 2007 y Fr(directory)p
+Fu(.)630 2142 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 2252 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 2386 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
+2496 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 2630 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
+2740 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
+2849 y(an)30 b(unsuccessful)f(status.)630 2984 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
+3093 y(asso)s(ciated)32 b(with)e(a)h(\014le)f(as)h(a)f(directory)-8
+b(.)630 3228 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 3337
+y(attempted.)630 3472 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 3582 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 3691 y(w)m(orking)k
+(directory)g(is)f(written)g(to)i(the)e(standard)g(output.)630
+3826 y(If)i(the)i(directory)f(c)m(hange)h(is)f(successful,)h
+Ft(cd)e Fu(sets)h(the)h(v)-5 b(alue)33 b(of)g(the)g Ft(PWD)f
+Fu(en)m(vironmen)m(t)630 3935 y(v)-5 b(ariable)32 b(to)g(the)f(new)g
+(directory)g(name,)h(and)e(sets)i(the)f Ft(OLDPWD)e Fu(en)m(vironmen)m
+(t)j(v)-5 b(ariable)630 4045 y(to)31 b(the)g(v)-5 b(alue)31
+b(of)f(the)h(curren)m(t)f(w)m(orking)g(directory)h(b)s(efore)f(the)h(c)
+m(hange.)630 4179 y(The)e(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
+4289 y(erwise.)150 4448 y Ft(continue)870 4583 y(continue)46
+b([)p Fj(n)p Ft(])630 4717 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 4827
+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 4936 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 5046
+y(than)30 b(or)g(equal)h(to)g(1.)150 5205 y Ft(eval)870
+5340 y(eval)47 b([)p Fj(arguments)p Ft(])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)630 299 y(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 408 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 518 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.)150 679 y Ft(exec)870 815 y(exec)47 b([-cl])f([-a)h
+Fj(name)p Ft(])f([)p Fj(command)g Ft([)p Fj(arguments)p
+Ft(]])630 950 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 1060 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
+1169 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 1279 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 1388 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 1498 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 1608 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 1717 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 1827 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 1936
+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
+2046 y(the)g(return)e(status)i(is)f(zero;)h(otherwise)g(the)g(return)e
+(status)i(is)f(non-zero.)150 2207 y Ft(exit)870 2342
+y(exit)47 b([)p Fj(n)p Ft(])630 2478 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 2587
+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
+2697 y(b)s(efore)j(the)h(shell)f(terminates.)150 2858
+y Ft(export)870 2993 y(export)46 b([-fn])g([-p])h([)p
+Fj(name)p Ft([=)p Fj(value)p Ft(]])630 3129 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
+3238 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 3348 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 3458 y(exp)s(ort.)51 b(If)34
+b(no)g Fr(name)5 b Fu(s)34 b(are)g(supplied,)g(or)g(if)g(the)g
+Ft(-p)f Fu(option)i(is)f(giv)m(en,)i(a)e(list)h(of)f(names)630
+3567 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 3677 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
+3786 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 3922 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 4031 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 4141 y(shell)d(function.)150
+4302 y Ft(getopts)870 4437 y(getopts)46 b Fj(optstring)f(name)i
+Ft([)p Fj(arg)f Ft(...])630 4573 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 4682 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 4792 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 4902
+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 5011 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 5121 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
+5230 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 5340 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)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(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 408
+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 518 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 628 y(new)30 b(set)h(of)f(parameters)h(is)f(to)i(b)s(e)d(used.)
+630 771 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
+881 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
+990 y(and)g Fr(name)35 b Fu(is)c(set)g(to)g(`)p Ft(?)p
+Fu('.)630 1133 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
+1243 y(supplied)f(as)i Fr(arg)38 b Fu(v)-5 b(alues,)31
+b Ft(getopts)e Fu(parses)h(those)h(instead.)630 1386
+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 1496 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 1606 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 1715 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
+1825 y(the)c(\014rst)e(c)m(haracter)j(of)f Ft(optstring)d
+Fu(is)i(not)h(a)f(colon.)630 1968 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
+2078 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 2187 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
+2330 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
+2440 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 2550 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 2659 y(option)g(c)m(haracter)h
+(found.)150 2836 y Ft(hash)870 2980 y(hash)47 b([-r])f([-p)h
+Fj(filename)p Ft(])e([-dt])i([)p Fj(name)p Ft(])630 3123
+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
+3232 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
+3342 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 3452
+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 3561 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 3671 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 3780 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 3890 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 4000
+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 4109 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 4219 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 4328 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 4438 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 4615 y Ft(pwd)870 4758
+y(pwd)47 b([-LP])630 4902 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 5011 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 5121 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 5230 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 5340 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.)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(readonly)870
+432 y(readonly)46 b([-aAf])g([-p])g([)p Fj(name)p Ft([=)p
+Fj(value)p Ft(]])e(...)630 565 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
+675 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)630 784 y(a)f(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 894 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 1003 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 1113 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 1223 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 1332 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 1442 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 1551 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 1661
+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 1771 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 1927 y Ft(return)870 2060 y(return)46
+b([)p Fj(n)p Ft(])630 2193 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 2303 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
+2412 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
+2522 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 2632 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 2741
+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 2851 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
+2960 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 3070 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 3180 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 3289 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
+3399 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 3508 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
+3618 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 3774 y Ft(shift)870 3907
+y(shift)46 b([)p Fj(n)p Ft(])630 4041 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 4150
+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 4260 y(n)m(um)m(b)s(ers)d Ft($#)i Fu(do)m(wn)f(to)i
+Ft($#)p Fu(-)p Fr(n)p Ft(+)p Fu(1)e(are)h(unset.)48 b
+Fr(n)32 b Fu(m)m(ust)h(b)s(e)f(a)h(non-negativ)m(e)i(n)m(um)m(b)s(er)d
+(less)630 4369 y(than)g(or)g(equal)h(to)g Ft($#)p Fu(.)46
+b(If)31 b Fr(n)h Fu(is)g(zero)h(or)f(greater)i(than)e
+Ft($#)p Fu(,)g(the)h(p)s(ositional)g(parameters)630 4479
+y(are)e(not)h(c)m(hanged.)43 b(If)31 b Fr(n)g Fu(is)g(not)g(supplied,)f
+(it)i(is)f(assumed)f(to)i(b)s(e)f(1.)43 b(The)31 b(return)f(status)630
+4589 y(is)g(zero)i(unless)d Fr(n)h Fu(is)g(greater)i(than)e
+Ft($#)g Fu(or)g(less)h(than)f(zero,)i(non-zero)e(otherwise.)150
+4745 y Ft(test)150 4855 y([)870 4988 y(test)47 b Fj(expr)630
+5121 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 5230 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
+5340 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)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(Expressions],)39
+b(page)g(96.)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 408 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 550 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(.)630 692 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 801 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 911 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 1084 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
+1258 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 1367 y(precedence)31
+b(of)f(op)s(erators.)630 1541 y Fj(expr1)f Ft(-a)h Fj(expr2)1110
+1650 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 1824
+y Fj(expr1)f Ft(-o)h Fj(expr2)1110 1934 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 2107 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 2217 y(based)30 b(on)g(the)h(n)m(um)m
+(b)s(er)e(of)h(argumen)m(ts.)630 2390 y(0)h(argumen)m(ts)1110
+2500 y(The)f(expression)g(is)g(false.)630 2673 y(1)h(argumen)m(t)1110
+2783 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 2956 y(2)h(argumen)m(ts)1110
+3066 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
+3176 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
+3285 y(conditional)42 b(op)s(erators)f(\(see)g(Section)h(6.4)f([Bash)g
+(Conditional)g(Expres-)1110 3395 y(sions],)34 b(page)f(96\),)i(the)e
+(expression)f(is)h(true)g(if)g(the)g(unary)e(test)j(is)f(true.)47
+b(If)1110 3504 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
+3614 y(false.)630 3787 y(3)e(argumen)m(ts)1110 3897 y(The)f(follo)m
+(wing)i(conditions)f(are)f(applied)h(in)f(the)g(order)g(listed.)1159
+4039 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 4148 y(tors)c(\(see)h
+(Section)g(6.4)g([Bash)g(Conditional)f(Expressions],)h(page)f(96\),)
+1290 4258 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 4367 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
+4477 y(op)s(erators)24 b(are)g(considered)g(binary)f(op)s(erators)h
+(when)f(there)h(are)h(three)1290 4587 y(argumen)m(ts.)1159
+4728 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 4838 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 4979 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 5089
+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 5198 y(argumen)m(t.)1159
+5340 y(4.)61 b(Otherwise,)30 b(the)h(expression)f(is)g(false.)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(4)31
+b(argumen)m(ts)1110 408 y(The)f(follo)m(wing)i(conditions)f(are)f
+(applied)h(in)f(the)g(order)g(listed.)1159 544 y(1.)61
+b(If)39 b(the)i(\014rst)e(argumen)m(t)h(is)g(`)p Ft(!)p
+Fu(',)j(the)d(result)f(is)h(the)g(negation)i(of)e(the)1290
+653 y(three-argumen)m(t)k(expression)e(comp)s(osed)g(of)h(the)g
+(remaining)g(argu-)1290 763 y(men)m(ts.)1159 898 y(2.)61
+b(If)31 b(the)g(\014rst)f(argumen)m(t)i(is)f(exactly)i(`)p
+Ft(\()p Fu(')e(and)g(the)g(fourth)f(argumen)m(t)i(is)1290
+1008 y(exactly)38 b(`)p Ft(\))p Fu(',)f(the)f(result)g(is)g(the)g(t)m
+(w)m(o-argumen)m(t)i(test)f(of)f(the)g(second)1290 1118
+y(and)30 b(third)f(argumen)m(ts.)1159 1253 y(3.)61 b(Otherwise,)26
+b(the)f(expression)f(is)h(parsed)f(and)g(ev)-5 b(aluated)26
+b(according)g(to)1290 1363 y(precedence)31 b(using)f(the)g(rules)g
+(listed)h(ab)s(o)m(v)m(e.)630 1524 y(5)g(or)f(more)h(argumen)m(ts)1110
+1633 y(The)43 b(expression)f(is)i(parsed)e(and)g(ev)-5
+b(aluated)45 b(according)f(to)f(precedence)1110 1743
+y(using)30 b(the)g(rules)g(listed)h(ab)s(o)m(v)m(e.)630
+1904 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 2014
+y(using)30 b(ASCI)s(I)f(ordering.)150 2175 y Ft(times)870
+2310 y(times)630 2446 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 2555 y(return)29 b(status)i(is)f(zero.)150
+2716 y Ft(trap)870 2852 y(trap)47 b([-lp])f([)p Fj(arg)p
+Ft(])g([)p Fj(sigspec)g Ft(...)o(])630 2987 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 3097 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 3206 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 3316 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
+3425 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 3535 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 3645 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
+3754 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
+3864 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
+3973 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 4083 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 4218 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 4328 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
+4437 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 4547
+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
+4657 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
+4766 y(page)33 b(71\))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 4876 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 4985
+y(the)e Ft(.)f Fu(or)g Ft(source)f Fu(builtins)g(\014nishes)h
+(executing.)630 5121 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 5230 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
+5340 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)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)630 299 y(not)37
+b(executed)h(if)f(the)h(failed)f(command)g(is)g(part)g(of)h(the)f
+(command)g(list)h(immediately)630 408 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
+518 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
+628 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 737 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 847 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 974 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 1084 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 1194 y(or)i(subshell)g(en)m
+(vironmen)m(t)h(when)e(one)i(is)f(created.)630 1321 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.)150 1467 y Ft(umask)870 1595 y(umask)46 b([-p])h([-S])g([)p
+Fj(mode)p Ft(])630 1722 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
+1832 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 1942 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 2051 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
+2161 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 2270 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 2380 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 2489 y Fr(mo)s(de)d Fu(argumen)m(t)c
+(is)f(supplied,)g(and)f(non-zero)i(otherwise.)630 2617
+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
+2727 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 2836 y(of)d Ft(755)p Fu(.)150 2982 y
+Ft(unset)870 3110 y(unset)46 b([-fnv])g([)p Fj(name)p
+Ft(])630 3237 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 3347
+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 3457 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
+3566 y(the)34 b Ft(-n)e Fu(option)i(is)f(supplied,)h(and)e
+Fr(name)39 b Fu(is)33 b(a)h(v)-5 b(ariable)34 b(with)f(the)h
+Ft(nameref)d Fu(attribute,)630 3676 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
+3785 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 3895 y(v)-5 b(ariable;)45 b(if)39
+b(there)g(is)g(no)g(v)-5 b(ariable)40 b(b)m(y)f(that)h(name,)h(a)f
+(function)f(with)g(that)g(name,)j(if)630 4004 y(an)m(y)-8
+b(,)34 b(is)e(unset.)46 b(Readonly)33 b(v)-5 b(ariables)33
+b(and)f(functions)g(ma)m(y)h(not)f(b)s(e)g(unset.)46
+b(Some)33 b(shell)630 4114 y(v)-5 b(ariables)29 b(lose)h(their)e(sp)s
+(ecial)h(b)s(eha)m(vior)g(if)f(they)h(are)g(unset;)g(suc)m(h)f(b)s(eha)
+m(vior)h(is)g(noted)f(in)630 4224 y(the)35 b(description)h(of)f(the)g
+(individual)g(v)-5 b(ariables.)56 b(The)34 b(return)g(status)i(is)f
+(zero)h(unless)f(a)630 4333 y Fr(name)h Fu(is)30 b(readonly)g(or)h(ma)m
+(y)g(not)f(b)s(e)g(unset.)150 4560 y Fs(4.2)68 b(Bash)45
+b(Builtin)g(Commands)150 4720 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 4829 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 4975 y Ft(alias)870 5103 y(alias)46
+b([-p])h([)p Fj(name)p Ft([=)p Fj(value)p Ft(])d(...)o(])630
+5230 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 5340 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)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(are)28
+b(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 408
+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 518 y(Section)31 b(6.6)h([Aliases],)g
+(page)f(100.)150 676 y Ft(bind)870 810 y(bind)47 b([-m)g
+Fj(keymap)p Ft(])e([-lpsvPSVX])870 920 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 1029 y(bind)g([-m)g
+Fj(keymap)p Ft(])e(-f)j Fj(filename)870 1139 y Ft(bind)f([-m)g
+Fj(keymap)p Ft(])e(-x)j Fj(keyseq:shell-command)870 1249
+y Ft(bind)f([-m)g Fj(keymap)p Ft(])e Fj(keyseq:function-name)870
+1358 y Ft(bind)i([-m)g Fj(keymap)p Ft(])e Fj(keyseq:readline-command)
+870 1468 y Ft(bind)i Fj(readline-command-line)630 1602
+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(117\))g(k)m(ey)630
+1711 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,)630 1821
+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
+1931 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
+2040 y(File],)c(page)d(120\),)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 2150
+y(argumen)m(t;)31 b(e.g.,)h(`)p Ft("\\C-x\\C-r":re-read-init-f)o(ile)p
+Fu('.)630 2284 y(Options,)e(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m
+(wing)h(meanings:)630 2442 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 2552 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 2661 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 2771 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 2880 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 3039 y Ft(-l)384 b Fu(List)31 b(the)f(names)g(of)h(all)g
+(Readline)g(functions.)630 3197 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 3306 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 3465
+y Ft(-P)384 b Fu(List)31 b(curren)m(t)f(Readline)h(function)f(names)g
+(and)g(bindings.)630 3623 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 3733
+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 3891 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 4049 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
+4159 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 4268
+y(Readline)d(initialization)i(\014le.)630 4427 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 4536 y(they)31 b(output.)630
+4695 y Ft(-f)f Fj(filename)1110 4804 y Fu(Read)h(k)m(ey)g(bindings)e
+(from)h Fr(\014lename)p Fu(.)630 4963 y Ft(-q)g Fj(function)1110
+5072 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 5230 y Ft(-u)g
+Fj(function)1110 5340 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(.)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 Ft(-r)30
+b 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 452 y Ft(-x)g Fj(keyseq:shell-command)
+1110 562 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
+671 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 781
+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 891
+y Ft(READLINE_POINT)d Fu(and)j Ft(READLINE_MARK)d Fu(v)-5
+b(ariables)39 b(to)f(the)g(curren)m(t)g(lo-)1110 1000
+y(cation)46 b(of)f(the)g(insertion)g(p)s(oin)m(t)f(and)g(the)h(sa)m(v)m
+(ed)h(insertion)f(p)s(oin)m(t)f(\(the)1110 1110 y Fr(mark)6
+b Fu(\),)38 b(resp)s(ectiv)m(ely)-8 b(.)62 b(The)36 b(shell)h(assigns)g
+(an)m(y)g(n)m(umeric)g(argumen)m(t)g(the)1110 1219 y(user)43
+b(supplied)g(to)h(the)g Ft(READLINE_ARGUMENT)39 b Fu(v)-5
+b(ariable.)82 b(If)44 b(there)g(w)m(as)1110 1329 y(no)39
+b(argumen)m(t,)j(that)d(v)-5 b(ariable)40 b(is)f(not)g(set.)68
+b(If)38 b(the)h(executed)h(command)1110 1439 y(c)m(hanges)e(the)e(v)-5
+b(alue)37 b(of)g(an)m(y)g(of)g Ft(READLINE_LINE)p Fu(,)d
+Ft(READLINE_POINT)p Fu(,)h(or)1110 1548 y Ft(READLINE_MARK)p
+Fu(,)i(those)i(new)f(v)-5 b(alues)38 b(will)h(b)s(e)f(re\015ected)h(in)
+f(the)g(editing)1110 1658 y(state.)630 1811 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 1921 y(commands)j(in)g(a)h
+(format)g(that)f(can)h(b)s(e)f(reused)f(as)i(input.)630
+2074 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.)150
+2228 y Ft(builtin)870 2359 y(builtin)46 b([)p Fj(shell-builtin)e
+Ft([)p Fj(args)p Ft(]])630 2491 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 2600 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 2710 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
+2819 y(zero)e(if)g Fr(shell-builtin)f Fu(is)g(not)h(a)g(shell)f
+(builtin)g(command.)150 2973 y Ft(caller)870 3104 y(caller)46
+b([)p Fj(expr)p Ft(])630 3236 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 3345 y(executed)c(with)f(the)h Ft(.)f
+Fu(or)g Ft(source)f Fu(builtins\).)630 3477 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 3587
+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
+3696 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
+3806 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
+3915 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
+4047 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 4156 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
+4310 y Ft(command)870 4441 y(command)46 b([-pVv])g Fj(command)g
+Ft([)p Fj(arguments)f Ft(...)o(])630 4573 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 4682
+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 4792 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 4902 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
+5011 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 5121 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 5230
+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
+5340 y Fr(command)34 b Fu(otherwise.)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(If)32
+b(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
+408 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
+518 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 628 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 737 y(non-zero)31 b(if)f(not.)150 897 y Ft(declare)870
+1031 y(declare)46 b([-aAfFgiIlnrtux])d([-p])k([)p Fj(name)p
+Ft([=)p Fj(value)p Ft(])d(...)o(])630 1166 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 1275 y(the)k(v)-5 b(alues)30 b(of)h(v)-5 b(ariables)31
+b(instead.)630 1410 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 1519 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 1629 y(ignored.)630
+1763 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
+1873 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 1983 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)630 2092 y(the)e(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
+2202 y(displa)m(y)d(to)g(shell)f(functions.)630 2336
+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
+2446 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 2555 y Ft(shopt)24 b Fu(\(see)i(Section)g(4.3.2)i([The)d(Shopt)f
+(Builtin],)k(page)e(71\),)i(the)d(source)h(\014le)f(name)h(and)630
+2665 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 2800
+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 2909 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
+3019 y(cases.)630 3153 y(The)50 b Ft(-I)h Fu(option)g(causes)h(lo)s
+(cal)g(v)-5 b(ariables)51 b(to)h(inherit)f(the)g(attributes)g(\(except)
+i(the)630 3263 y Ft(nameref)43 b Fu(attribute\))j(and)f(v)-5
+b(alue)46 b(of)f(an)m(y)h(existing)g(v)-5 b(ariable)46
+b(with)f(the)g(same)h Fr(name)630 3372 y Fu(at)40 b(a)f(surrounding)d
+(scop)s(e.)66 b(If)39 b(there)g(is)g(no)f(existing)i(v)-5
+b(ariable,)42 b(the)d(lo)s(cal)h(v)-5 b(ariable)40 b(is)630
+3482 y(initially)32 b(unset.)630 3616 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 3726 y(i\014ed)j(attributes)h
+(or)f(to)h(giv)m(e)h(v)-5 b(ariables)31 b(attributes:)630
+3885 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 3995 y(page)31 b(100\).)630 4154 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 4264 y(page)31 b(100\).)630 4423 y Ft(-f)384
+b Fu(Use)31 b(function)f(names)g(only)-8 b(.)630 4583
+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 4692 y(\(see)29 b(Section)f(6.5)h([Shell)f
+(Arithmetic],)i(page)e(98\))h(is)f(p)s(erformed)e(when)h(the)1110
+4802 y(v)-5 b(ariable)31 b(is)g(assigned)f(a)h(v)-5 b(alue.)630
+4961 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 5071 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
+5230 y Ft(-n)384 b Fu(Giv)m(e)28 b(eac)m(h)g Fr(name)k
+Fu(the)27 b Ft(nameref)d Fu(attribute,)29 b(making)e(it)g(a)g(name)f
+(reference)1110 5340 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)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)1110 299 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 408 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 518 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
+628 y(attribute)31 b(cannot)g(b)s(e)f(applied)g(to)h(arra)m(y)g(v)-5
+b(ariables.)630 785 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 894 y(b)m(y)30 b(subsequen)m(t)g
+(assignmen)m(t)h(statemen)m(ts)h(or)f(unset.)630 1052
+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 1161 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
+1271 y(has)h(no)g(sp)s(ecial)h(meaning)g(for)f(v)-5 b(ariables.)630
+1428 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 1538 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
+1695 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
+1805 y(ronmen)m(t.)630 1962 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 2071 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 2181 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 2291
+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 2400 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(.)630
+2534 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
+2643 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
+2777 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
+2886 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
+2996 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 3105 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 3215 y([Arra)m(ys],)43 b(page)d(100\),)k
+(one)c(of)g(the)g Fr(name)5 b Fu(s)40 b(is)f(not)h(a)g(v)-5
+b(alid)40 b(shell)g(v)-5 b(ariable)41 b(name,)h(an)630
+3324 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
+3434 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
+3544 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g
+Ft(-f)p Fu(.)150 3701 y Ft(echo)870 3834 y(echo)47 b([-neE])f([)p
+Fj(arg)g Ft(...])630 3968 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 4077 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 4187
+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
+4296 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 4406 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
+4516 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
+4625 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
+4735 y Ft(--)c Fu(to)h(mean)f(the)h(end)f(of)g(options.)630
+4868 y Ft(echo)f Fu(in)m(terprets)i(the)f(follo)m(wing)i(escap)s(e)f
+(sequences:)630 5026 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630
+5183 y Ft(\\b)384 b Fu(bac)m(kspace)630 5340 y Ft(\\c)g
+Fu(suppress)28 b(further)h(output)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(\\e)630
+408 y(\\E)384 b Fu(escap)s(e)630 556 y Ft(\\f)g Fu(form)30
+b(feed)630 703 y Ft(\\n)384 b Fu(new)30 b(line)630 851
+y Ft(\\r)384 b Fu(carriage)32 b(return)630 998 y Ft(\\t)384
+b Fu(horizon)m(tal)32 b(tab)630 1145 y Ft(\\v)384 b Fu(v)m(ertical)32
+b(tab)630 1293 y Ft(\\\\)384 b Fu(bac)m(kslash)630 1440
+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 1550 y(three)e(o)s(ctal)g
+(digits\))630 1697 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 1807 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e
+(digits\))630 1954 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 2064 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
+2211 y Ft(\\U)p Fj(HHHHHHHH)1110 2321 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 2430 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\))150
+2578 y Ft(enable)870 2706 y(enable)46 b([-a])h([-dnps])f([-f)g
+Fj(filename)p Ft(])g([)p Fj(name)g Ft(...)o(])630 2835
+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
+2944 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 3054 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 3163 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
+3273 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 3382 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 3511 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 3621 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 3730 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 3840 y(whether)30 b(or)g(not)h(it)g(is)f(enabled.)
+630 3968 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 4078 y Fr(\014lename)p Fu(,)31 b(on)f(systems)g(that)h(supp)
+s(ort)e(dynamic)h(loading.)41 b(Bash)31 b(will)f(use)g(the)h(v)-5
+b(alue)31 b(of)630 4187 y(the)39 b Ft(BASH_LOADABLES_PATH)34
+b Fu(v)-5 b(ariable)40 b(as)f(a)h(colon-separated)h(list)f(of)f
+(directories)h(in)630 4297 y(whic)m(h)31 b(to)h(searc)m(h)g(for)f
+Fr(\014lename)p Fu(.)44 b(The)31 b(default)g(is)h(system-dep)s(enden)m
+(t.)43 b(The)31 b Ft(-d)f Fu(option)630 4407 y(will)h(delete)g(a)g
+(builtin)f(loaded)h(with)f Ft(-f)p Fu(.)630 4535 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 4645 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
+4754 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(77\).)630
+4883 y(If)24 b(no)g(options)h(are)g(supplied)e(and)h(a)h
+Fr(name)k Fu(is)c(not)f(a)h(shell)g(builtin,)g Ft(enable)e
+Fu(will)i(attempt)630 4992 y(to)c(load)g Fr(name)26 b
+Fu(from)20 b(a)g(shared)g(ob)5 b(ject)21 b(named)f Fr(name)p
+Fu(,)j(as)d(if)h(the)f(command)h(w)m(ere)f(`)p Ft(enable)630
+5102 y(-f)30 b Fj(name)f(name)p Fu('.)630 5230 y(The)d(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 5340 y(loading)31
+b(a)g(new)f(builtin)g(from)g(a)g(shared)g(ob)5 b(ject.)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(help)870
+435 y(help)47 b([-dms])f([)p Fj(pattern)p Ft(])630 571
+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
+681 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
+790 y(the)h(builtins)e(is)i(prin)m(ted.)630 926 y(Options,)f(if)h
+(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)630
+1089 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 1251 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 1414 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 1576 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 1739
+y Ft(let)870 1875 y(let)47 b Fj(expression)e Ft([)p Fj(expression)g
+Ft(...)o(])630 2011 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 2120 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 2230
+y(Arithmetic],)51 b(page)46 b(98.)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 2340 y(otherwise)31 b(0)g(is)f(returned.)150
+2502 y Ft(local)870 2638 y(local)46 b([)p Fj(option)p
+Ft(])g Fj(name)p Ft([=)p Fj(value)p Ft(])e(...)630 2774
+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 2884 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
+2993 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)630 3103 y(restricted)h(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 3212
+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 3322 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 3432 y(v)-5 b(alues)36 b(when)e(the)i(function)f
+(returns.)54 b(The)35 b(restore)h(is)g(e\013ected)h(as)e(if)h(a)g
+(series)f(of)h Ft(set)630 3541 y Fu(commands)j(w)m(ere)g(executed)h(to)
+f(restore)h(the)f(v)-5 b(alues)39 b(that)h(w)m(ere)f(in)f(place)i(b)s
+(efore)f(the)630 3651 y(function.)j(The)30 b(return)g(status)h(is)g
+(zero)h(unless)e Ft(local)g Fu(is)h(used)f(outside)h(a)g(function,)g
+(an)630 3760 y(in)m(v)-5 b(alid)31 b Fr(name)k Fu(is)c(supplied,)e(or)i
+Fr(name)k Fu(is)c(a)f(readonly)h(v)-5 b(ariable.)150
+3923 y Ft(logout)870 4059 y(logout)46 b([)p Fj(n)p Ft(])630
+4195 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 4357 y
+Ft(mapfile)870 4493 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 4603 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
+4739 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 4849 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
+4958 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
+5121 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
+5230 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
+5340 y(terminate)31 b(a)g(line)g(when)e(it)i(reads)f(a)h(NUL)g(c)m
+(haracter.)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)630 299 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
+446 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 594 y Ft(-s)384 b Fu(Discard)31 b(the)f(\014rst)g
+Fr(coun)m(t)j Fu(lines)e(read.)630 741 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 888 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
+1036 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 1145 y(sp)s(eci\014es)30
+b Fr(quan)m(tum)p Fu(.)630 1293 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 1440 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 1550 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 1659 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 1769 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
+1897 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 2007 y(to)31 b(it.)630 2135 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
+2245 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
+2392 y Ft(printf)870 2521 y(printf)46 b([-v)h Fj(var)p
+Ft(])g Fj(format)f Ft([)p Fj(arguments)p Ft(])630 2649
+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 2759 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 2869 y Fu(rather)30 b(than)g(b)s(eing)g
+(prin)m(ted)g(to)h(the)g(standard)e(output.)630 2997
+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 3107 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
+3216 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)630 3326 y(sp)s
+(eci\014cations,)j(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
+3435 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
+3545 y(extensions:)630 3692 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 3802 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 3912 y([Bash)e(Builtins],)g(page)g(55\).)
+630 4059 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 4169 y(that)e(can)g(b)s(e)e(reused)h(as)h
+(shell)f(input.)630 4316 y Ft(\045Q)384 b Fu(lik)m(e)34
+b Ft(\045q)p Fu(,)f(but)f(applies)g(an)m(y)h(supplied)e(precision)i(to)
+h(the)e Fr(argumen)m(t)j Fu(b)s(efore)1110 4425 y(quoting)c(it.)630
+4573 y Ft(\045\()p Fj(datefmt)p Ft(\)T)1110 4682 y Fu(Causes)e
+Ft(printf)e Fu(to)j(output)f(the)g(date-time)i(string)e(resulting)h
+(from)e(using)1110 4792 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 4902 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 5011
+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 5121 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 5230 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
+5340 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.)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)630 299 y(The)26
+b(\045b,)h(\045q,)h(and)e(\045T)g(directiv)m(es)j(all)e(use)g(the)g
+(\014eld)f(width)g(and)h(precision)g(argumen)m(ts)630
+408 y(from)f(the)g(format)h(sp)s(eci\014cation)g(and)e(write)i(that)f
+(man)m(y)h(b)m(ytes)f(from)g(\(or)h(use)e(that)i(wide)630
+518 y(a)42 b(\014eld)g(for\))g(the)h(expanded)e(argumen)m(t,)k(whic)m
+(h)d(usually)g(con)m(tains)h(more)f(c)m(haracters)630
+628 y(than)30 b(the)h(original.)630 760 y(Argumen)m(ts)d(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 870 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 979 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
+1112 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 1222 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 1331 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 1441 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
+1597 y Ft(read)870 1729 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 1839 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 1972 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 2081 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
+2191 y(Section)j(3.5.7)h([W)-8 b(ord)38 b(Splitting],)i(page)e(35,)j
+(and)36 b(the)i(\014rst)f(w)m(ord)g(is)g(assigned)h(to)g(the)630
+2300 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 2410 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 2519 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 2629 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 2739 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 2848
+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
+2958 y(Splitting],)38 b(page)f(35\).)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 3067 y(sp)s(ecial)31 b(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.)630
+3200 y(Options,)f(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h
+(meanings:)630 3356 y Ft(-a)e 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 3465 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 3575 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
+3731 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
+3840 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
+3950 y(nate)g(a)g(line)f(when)g(it)h(reads)f(a)h(NUL)f(c)m(haracter.)
+630 4106 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(117\))i(is)1110 4215
+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
+4325 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 4434 y(Readline's)31
+b(default)g(\014lename)f(completion.)630 4590 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
+4700 y(editing)31 b(bu\013er)e(b)s(efore)h(editing)h(b)s(egins.)630
+4855 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 4965 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 5075
+y Fr(nc)m(hars)d Fu(c)m(haracters)e(are)e(read)h(b)s(efore)f(the)g
+(delimiter.)630 5230 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 5340 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)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
+Ft(read)30 b 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 408 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 518 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 628 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 737 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 894 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
+1004 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 1114 y(from)30
+b(a)h(terminal.)630 1271 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 1380 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
+1490 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 1647
+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
+1757 y(ec)m(ho)s(ed.)630 1914 y Ft(-t)i Fj(timeout)1110
+2024 y Fu(Cause)23 b Ft(read)f Fu(to)i(time)f(out)h(and)e(return)g
+(failure)h(if)g(a)h(complete)g(line)g(of)f(input)1110
+2133 y(\(or)h(a)f(sp)s(eci\014ed)g(n)m(um)m(b)s(er)f(of)i(c)m
+(haracters\))h(is)e(not)h(read)f(within)g Fr(timeout)j
+Fu(sec-)1110 2243 y(onds.)43 b Fr(timeout)34 b Fu(ma)m(y)e(b)s(e)e(a)i
+(decimal)g(n)m(um)m(b)s(er)e(with)h(a)h(fractional)g(p)s(ortion)1110
+2352 y(follo)m(wing)39 b(the)f(decimal)g(p)s(oin)m(t.)63
+b(This)37 b(option)h(is)g(only)f(e\013ectiv)m(e)k(if)c
+Ft(read)1110 2462 y Fu(is)c(reading)h(input)e(from)h(a)h(terminal,)h
+(pip)s(e,)e(or)h(other)f(sp)s(ecial)h(\014le;)h(it)f(has)1110
+2572 y(no)f(e\013ect)i(when)d(reading)i(from)f(regular)g(\014les.)50
+b(If)33 b Ft(read)f Fu(times)i(out,)g Ft(read)1110 2681
+y Fu(sa)m(v)m(es)41 b(an)m(y)f(partial)h(input)e(read)g(in)m(to)i(the)f
+(sp)s(eci\014ed)f(v)-5 b(ariable)40 b Fr(name)p Fu(.)69
+b(If)1110 2791 y Fr(timeout)31 b Fu(is)c(0,)i Ft(read)d
+Fu(returns)h(immediately)-8 b(,)30 b(without)d(trying)h(to)g(read)g(an)
+m(y)1110 2900 y(data.)49 b(The)33 b(exit)h(status)f(is)g(0)g(if)g
+(input)f(is)h(a)m(v)-5 b(ailable)36 b(on)c(the)i(sp)s(eci\014ed)e
+(\014le)1110 3010 y(descriptor,)37 b(or)e(the)h(read)f(will)h(return)e
+(EOF,)h(non-zero)h(otherwise.)56 b(The)1110 3120 y(exit)31
+b(status)g(is)f(greater)i(than)e(128)i(if)e(the)h(timeout)g(is)f
+(exceeded.)630 3277 y Ft(-u)g Fj(fd)258 b Fu(Read)31
+b(input)e(from)h(\014le)g(descriptor)h Fr(fd)p Fu(.)630
+3434 y(If)h(no)g Fr(name)5 b Fu(s)33 b(are)f(supplied,)g(the)h(line)g
+(read,)g(without)f(the)h(ending)f(delimiter)h(but)e(oth-)630
+3544 y(erwise)36 b(unmo)s(di\014ed,)e(is)i(assigned)f(to)h(the)g(v)-5
+b(ariable)36 b Ft(REPLY)p Fu(.)55 b(The)34 b(exit)j(status)e(is)h
+(zero,)630 3653 y(unless)i(end-of-\014le)h(is)f(encoun)m(tered,)j
+Ft(read)d Fu(times)h(out)f(\(in)h(whic)m(h)f(case)h(the)g(status)g(is)
+630 3763 y(greater)31 b(than)f(128\),)i(a)e(v)-5 b(ariable)30
+b(assignmen)m(t)h(error)f(\(suc)m(h)f(as)i(assigning)f(to)h(a)f
+(readonly)630 3872 y(v)-5 b(ariable\))30 b(o)s(ccurs,)f(or)f(an)h(in)m
+(v)-5 b(alid)29 b(\014le)g(descriptor)f(is)h(supplied)e(as)i(the)g
+(argumen)m(t)g(to)g Ft(-u)p Fu(.)150 4030 y Ft(readarray)870
+4139 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
+4249 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
+4382 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 4492 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
+4625 y(A)f(synon)m(ym)g(for)g Ft(mapfile)p Fu(.)150 4783
+y Ft(source)870 4916 y(source)46 b Fj(filename)630 5049
+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(48\).)150 5207
+y Ft(type)870 5340 y(type)47 b([-afptP])e([)p Fj(name)i
+Ft(...)o(])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(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
+408 y(name.)630 543 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 653 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 762 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 872 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 1007 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
+1116 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
+1251 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 1360 y(`)p Ft(file)p Fu('.)630 1495 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 1605
+y(sarily)h(the)f(\014le)h(that)g(app)s(ears)e(\014rst)h(in)g
+Ft($PATH)p Fu(.)630 1739 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 1849 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 1958 y(not)d(also)g
+(used.)630 2093 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 2203 y(the)h Ft(command)d
+Fu(builtin.)630 2337 y(The)j(return)e(status)j(is)f(zero)h(if)f(all)g
+(of)h(the)f Fr(name)5 b Fu(s)31 b(are)g(found,)f(non-zero)i(if)f(an)m
+(y)g(are)h(not)630 2447 y(found.)150 2607 y Ft(typeset)870
+2741 y(typeset)46 b([-afFgrxilnrtux])d([-p])k([)p Fj(name)p
+Ft([=)p Fj(value)p Ft(])d(...)o(])630 2876 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 2985
+y(a)g(synon)m(ym)f(for)g(the)g Ft(declare)f Fu(builtin)h(command.)150
+3145 y Ft(ulimit)870 3280 y(ulimit)46 b([-HS])g(-a)870
+3389 y(ulimit)g([-HS])g([-bcdefiklmnpqrstuvxPRT])c([)p
+Fj(limit)p Ft(])630 3524 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 3634 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 3743 y(as)i(follo)m(ws:)630
+3903 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 4062 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.)630 4222 y Ft(-a)384 b Fu(All)31
+b(curren)m(t)f(limits)h(are)g(rep)s(orted;)f(no)g(limits)h(are)g(set.)
+630 4382 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 4542 y Ft(-c)384 b Fu(The)30 b(maxim)m(um)g(size)
+h(of)g(core)g(\014les)f(created.)630 4701 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 4861 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 5021 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
+5180 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 5340 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.)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(-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 467 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 576 y(limit\).)630 744 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 854 y(not)31
+b(allo)m(w)g(this)g(v)-5 b(alue)31 b(to)g(b)s(e)e(set\).)630
+1022 y Ft(-p)384 b Fu(The)30 b(pip)s(e)f(bu\013er)h(size.)630
+1190 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 Fm(posix)f Fu(message)j(queues.)630 1358
+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 1526 y Ft(-s)384 b Fu(The)30
+b(maxim)m(um)g(stac)m(k)i(size.)630 1694 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 1862 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
+2030 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
+2140 y(and,)30 b(on)g(some)h(systems,)g(to)g(its)g(c)m(hildren.)630
+2308 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 2476 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
+2643 y Ft(-R)384 b Fu(The)27 b(maxim)m(um)h(time)h(a)f(real-time)i(pro)
+s(cess)d(can)i(run)d(b)s(efore)i(blo)s(c)m(king,)h(in)1110
+2753 y(microseconds.)630 2921 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 3089
+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 3199 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 3308 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 3418 y(hard)24 b(limit)i(cannot)g(b)s(e)e(increased)h(b)
+m(y)g(a)h(non-ro)s(ot)f(user)f(once)i(it)g(is)f(set;)j(a)d(soft)g
+(limit)h(ma)m(y)630 3527 y(b)s(e)37 b(increased)h(up)e(to)j(the)f(v)-5
+b(alue)38 b(of)f(the)h(hard)f(limit.)63 b(Otherwise,)39
+b(the)f(curren)m(t)f(v)-5 b(alue)630 3637 y(of)39 b(the)g(soft)h(limit)
+g(for)f(the)g(sp)s(eci\014ed)f(resource)h(is)g(prin)m(ted,)i(unless)e
+(the)g Ft(-H)f Fu(option)i(is)630 3747 y(supplied.)47
+b(When)33 b(more)g(than)g(one)g(resource)g(is)g(sp)s(eci\014ed,)g(the)g
+(limit)h(name)f(and)f(unit,)630 3856 y(if)27 b(appropriate,)h(are)f
+(prin)m(ted)g(b)s(efore)g(the)g(v)-5 b(alue.)40 b(When)27
+b(setting)h(new)e(limits,)j(if)e(neither)630 3966 y Ft(-H)38
+b Fu(nor)g Ft(-S)g Fu(is)h(supplied,)h(b)s(oth)e(the)h(hard)f(and)g
+(soft)h(limits)g(are)g(set.)67 b(If)38 b(no)h(option)g(is)630
+4075 y(giv)m(en,)c(then)f Ft(-f)e Fu(is)i(assumed.)49
+b(V)-8 b(alues)35 b(are)e(in)h(1024-b)m(yte)i(incremen)m(ts,)f(except)f
+(for)f Ft(-t)p Fu(,)630 4185 y(whic)m(h)e(is)g(in)g(seconds;)h
+Ft(-R)p Fu(,)g(whic)m(h)f(is)g(in)g(microseconds;)h Ft(-p)p
+Fu(,)g(whic)m(h)f(is)g(in)g(units)g(of)g(512-)630 4295
+y(b)m(yte)k(blo)s(c)m(ks;)j Ft(-P)p Fu(,)e Ft(-T)p Fu(,)f
+Ft(-b)p Fu(,)h Ft(-k)p Fu(,)f Ft(-n)g Fu(and)f Ft(-u)p
+Fu(,)h(whic)m(h)g(are)g(unscaled)g(v)-5 b(alues;)37 b(and,)f(when)630
+4404 y(in)g Fm(posix)f Fu(Mo)s(de)h(\(see)g(Section)h(6.11)g([Bash)g
+(POSIX)d(Mo)s(de],)k(page)f(106\),)i Ft(-c)c Fu(and)g
+Ft(-f)p Fu(,)630 4514 y(whic)m(h)30 b(are)h(in)f(512-b)m(yte)j
+(incremen)m(ts.)630 4653 y(The)h(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 4762 y(an)30 b(error)g(o)s(ccurs)g(while)h(setting)g(a)g(new)f
+(limit.)150 4930 y Ft(unalias)870 5069 y(unalias)46 b([-a])g([)p
+Fj(name)h Ft(...)g(])630 5208 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
+5317 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(100.)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)150 299 y Fs(4.3)68
+b(Mo)t(difying)45 b(Shell)g(Beha)l(vior)150 520 y Fk(4.3.1)63
+b(The)41 b(Set)g(Builtin)150 667 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
+777 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 886 y(v)-5 b(alues)31 b(of)f(shell)h(v)-5 b(ariables.)150
+1041 y Ft(set)870 1172 y(set)47 b([-abefhkmnptuvxBCEHPT])42
+b([-o)47 b Fj(option-name)p Ft(])d([--])j([-])g([)p Fj(argument)e
+Ft(...)o(])870 1282 y(set)i([+abefhkmnptuvxBCEHPT])42
+b([+o)47 b Fj(option-name)p Ft(])d([--])j([-])g([)p Fj(argument)e
+Ft(...)o(])630 1414 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 1523 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 1633 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 1743 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 1852 y(listed.)630
+1984 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
+2094 y(i\014ed,)h(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630
+2248 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 2357 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
+2467 y(sequen)m(t)i(commands.)630 2621 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 2730 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 2885 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.3)h([Pip)s
+(elines],)1110 2994 y(page)51 b(10\),)58 b(whic)m(h)50
+b(ma)m(y)h(consist)h(of)e(a)i(single)f(simple)g(command)f(\(see)1110
+3104 y(Section)30 b(3.2.2)i([Simple)d(Commands],)g(page)h(9\),)h(a)f
+(list)g(\(see)h(Section)f(3.2.4)1110 3213 y([Lists],)60
+b(page)55 b(10\),)60 b(or)54 b(a)g(comp)s(ound)e(command)h(\(see)i
+(Section)f(3.2.5)1110 3323 y([Comp)s(ound)60 b(Commands],)70
+b(page)63 b(11\))g(returns)e(a)i(non-zero)f(status.)1110
+3432 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 3542 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 3652 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 3761 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
+3871 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
+3980 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
+4090 y(command)g(other)g(than)f(a)i(subshell)d(returns)h(a)h(non-zero)h
+(status)f(b)s(ecause)1110 4200 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 4309 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
+4441 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 4551 y(vironmen)m(t)j(separately)i
+(\(see)f(Section)g(3.7.3)h([Command)d(Execution)i(En-)1110
+4660 y(vironmen)m(t],)i(page)f(43\),)i(and)d(ma)m(y)h(cause)f
+(subshells)g(to)h(exit)g(b)s(efore)f(exe-)1110 4770 y(cuting)d(all)g
+(the)g(commands)f(in)g(the)g(subshell.)1110 4902 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 5011 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
+5121 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 5230 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 5340 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)
+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)1110 299 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 408 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
+518 y(the)31 b(function)f(call)h(completes.)630 682 y
+Ft(-f)384 b Fu(Disable)31 b(\014lename)g(expansion)f(\(globbing\).)630
+847 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
+956 y(execution.)42 b(This)29 b(option)i(is)g(enabled)f(b)m(y)g
+(default.)630 1121 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
+1230 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 1340 y(command)30
+b(name.)630 1504 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(113\).)41
+b(All)1110 1614 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
+1724 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 1888 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 1998 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 2107 y(tiv)m(e)h(shells.)630
+2271 y Ft(-o)e Fj(option-name)1110 2381 y Fu(Set)h(the)f(option)h
+(corresp)s(onding)e(to)i Fr(option-name)5 b Fu(:)1110
+2545 y Ft(allexport)1590 2655 y Fu(Same)30 b(as)h Ft(-a)p
+Fu(.)1110 2819 y Ft(braceexpand)1590 2929 y Fu(Same)f(as)h
+Ft(-B)p Fu(.)1110 3093 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 3203 y([Command)33 b(Line)g(Editing],)h(page)h
+(117\).)51 b(This)32 b(also)i(a\013ects)1590 3313 y(the)d(editing)g(in)
+m(terface)h(used)d(for)h Ft(read)f(-e)p Fu(.)1110 3477
+y Ft(errexit)144 b Fu(Same)30 b(as)h Ft(-e)p Fu(.)1110
+3641 y Ft(errtrace)96 b Fu(Same)30 b(as)h Ft(-E)p Fu(.)1110
+3806 y Ft(functrace)1590 3915 y Fu(Same)f(as)h Ft(-T)p
+Fu(.)1110 4080 y Ft(hashall)144 b Fu(Same)30 b(as)h Ft(-h)p
+Fu(.)1110 4244 y Ft(histexpand)1590 4354 y Fu(Same)f(as)h
+Ft(-H)p Fu(.)1110 4518 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 4628 y([Bash)d(History)g(F)-8 b(acilities],)41 b(page)c(152.)60
+b(This)36 b(option)h(is)f(on)1590 4737 y(b)m(y)30 b(default)h(in)f(in)m
+(teractiv)m(e)j(shells.)1110 4902 y Ft(ignoreeof)1590
+5011 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.)1110 5176 y Ft(keyword)144 b Fu(Same)30
+b(as)h Ft(-k)p Fu(.)1110 5340 y Ft(monitor)144 b Fu(Same)30
+b(as)h Ft(-m)p Fu(.)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
+Ft(noclobber)1590 408 y Fu(Same)30 b(as)h Ft(-C)p Fu(.)1110
+570 y Ft(noexec)192 b Fu(Same)30 b(as)h Ft(-n)p Fu(.)1110
+731 y Ft(noglob)192 b Fu(Same)30 b(as)h Ft(-f)p Fu(.)1110
+892 y Ft(nolog)240 b Fu(Curren)m(tly)30 b(ignored.)1110
+1053 y Ft(notify)192 b Fu(Same)30 b(as)h Ft(-b)p Fu(.)1110
+1214 y Ft(nounset)144 b Fu(Same)30 b(as)h Ft(-u)p Fu(.)1110
+1375 y Ft(onecmd)192 b Fu(Same)30 b(as)h Ft(-t)p Fu(.)1110
+1537 y Ft(physical)96 b Fu(Same)30 b(as)h Ft(-P)p Fu(.)1110
+1698 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 1807 y(the)33 b(last)h(\(righ)m(tmost\))h(command)e(to)h
+(exit)g(with)f(a)g(non-zero)1590 1917 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
+2027 y(cessfully)-8 b(.)41 b(This)30 b(option)h(is)f(disabled)g(b)m(y)h
+(default.)1110 2188 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
+2297 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 2407 y(dard)h(\(see)j
+(Section)f(6.11)h([Bash)f(POSIX)e(Mo)s(de],)j(page)f(106\).)1590
+2516 y(This)37 b(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 2626 y(p)s(erset)30 b(of)h(that)f
+(standard.)1110 2787 y Ft(privileged)1590 2897 y Fu(Same)g(as)h
+Ft(-p)p Fu(.)1110 3058 y Ft(verbose)144 b Fu(Same)30
+b(as)h Ft(-v)p Fu(.)1110 3219 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 3329 y(the)31 b(editing)g(in)m
+(terface)h(used)d(for)h Ft(read)f(-e)p Fu(.)1110 3490
+y Ft(xtrace)192 b Fu(Same)30 b(as)h Ft(-x)p Fu(.)630
+3651 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 3761 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
+3870 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
+3980 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
+4089 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
+4199 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 4309 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 4418 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 4528 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 4637 y(b)s(e)30 b(set)h(to)g(the)f(real)h(user)f
+(and)g(group)g(ids.)630 4798 y Ft(-r)384 b Fu(Enable)32
+b(restricted)h(shell)f(mo)s(de.)45 b(This)31 b(option)i(cannot)g(b)s(e)
+e(unset)h(once)g(it)1110 4908 y(has)e(b)s(een)g(set.)630
+5069 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)32 b(`)p Ft(@)p
+Fu(')f(or)h(`)p Ft(*)p Fu(',)g(or)f(arra)m(y)h(v)-5 b(ariables)32
+b(subscripted)e(with)h(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p
+Fu(',)f(as)h(an)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)1110 299 y(error)24
+b(when)g(p)s(erforming)g(parameter)h(expansion.)39 b(An)24
+b(error)h(message)h(will)1110 408 y(b)s(e)37 b(written)h(to)h(the)f
+(standard)f(error,)i(and)f(a)g(non-in)m(teractiv)m(e)j(shell)d(will)
+1110 518 y(exit.)630 667 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
+817 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
+927 y Ft(select)29 b Fu(commands,)j(and)e(arithmetic)j
+Ft(for)d Fu(commands)h(and)f(their)i(argu-)1110 1036
+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 1146 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 1255 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 1365 y(argumen)m(ts.)630
+1514 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 1624
+y(Expansion],)30 b(page)h(24\).)42 b(This)30 b(option)h(is)f(on)g(b)m
+(y)h(default.)630 1773 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
+1883 y(existing)31 b(\014les.)630 2032 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 2142 y(substitutions,)35
+b(and)e(commands)g(executed)i(in)f(a)g(subshell)f(en)m(vironmen)m(t.)
+1110 2252 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 2401 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 2511 y(teraction],)g(page)d
+(154\).)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 2620 y(shells.)630 2770 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 2879 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 2989 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 3098 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
+3208 y(directory)-8 b(.)1110 3337 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 3447 y Fu(then:)1350 3577 y Ft($)47
+b(cd)h(/usr/sys;)d(echo)i($PWD)1350 3686 y(/usr/sys)1350
+3796 y($)g(cd)h(..;)f(pwd)1350 3905 y(/usr)1110 4035
+y Fu(If)30 b Ft(set)f(-P)h Fu(is)h(on,)f(then:)1350 4164
+y Ft($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 4274 y(/usr/local/sys)
+1350 4384 y($)g(cd)h(..;)f(pwd)1350 4493 y(/usr/local)630
+4643 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 4752 y(tions,)k(command)d(substitutions,)h(and)f(commands)g
+(executed)h(in)f(a)h(sub-)1110 4862 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 4971 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: 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(-)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(67\).)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)f(whether)g(or)g(not)g(eac)m(h)h(is)g(set;)h(if)e
+Fr(optname)5 b Fu(s)34 b(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(,)f(the)i(return)d
+(status)j(is)f(zero)g(if)g(all)h Fr(optname)5 b Fu(s)29
+b(are)h(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
+(67\).)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)e(listing)j(options)e(is)h(zero)g
+(if)f(all)i Fr(optname)5 b Fu(s)27 b(are)h(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: 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)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(113\).)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(152\).)630 4080
+y Ft(compat31)630 4189 y(compat32)630 4299 y(compat40)630
+4408 y(compat41)630 4518 y(compat42)630 4628 y(compat43)630
+4737 y(compat44)96 b Fu(These)39 b(con)m(trol)i(asp)s(ects)f(of)f(the)h
+(shell's)g(compatibilit)m(y)h(mo)s(de)e(\(see)h(Sec-)1110
+4847 y(tion)31 b(6.12)h([Shell)e(Compatibilit)m(y)i(Mo)s(de],)f(page)g
+(110\).)630 5011 y Ft(complete_fullquote)1110 5121 y
+Fu(If)g(set,)g(Bash)h(quotes)f(all)h(shell)f(metac)m(haracters)i(in)e
+(\014lenames)g(and)g(direc-)1110 5230 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 5340 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)p eop end
+%%Page: 73 79
+TeXDict begin 73 78 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(73)1110 299 y(that)36
+b(will)g(b)s(e)f(quoted)g(in)g(completed)i(\014lenames)e(when)f(these)i
+(metac)m(har-)1110 408 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 518 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
+628 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 737
+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
+847 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 956
+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 1066 y(through)30
+b(4.2.)630 1244 y Ft(direxpand)1110 1354 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 1463 y(pansion)k(when)g(p)s(erforming)f(\014lename)i
+(completion.)67 b(This)38 b(c)m(hanges)i(the)1110 1573
+y(con)m(ten)m(ts)c(of)e(the)h(Readline)f(editing)h(bu\013er.)52
+b(If)33 b(not)i(set,)h(Bash)e(attempts)1110 1682 y(to)d(preserv)m(e)g
+(what)f(the)g(user)g(t)m(yp)s(ed.)630 1861 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 1970 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
+2080 y(exist.)630 2258 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 2367 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 2477
+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 2655 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 2765 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 2874 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
+3052 y Ft(expand_aliases)1110 3162 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 3271 y(tion)i(6.6)h([Aliases],)h(page)e(100.)55
+b(This)33 b(option)i(is)g(enabled)f(b)m(y)h(default)f(for)1110
+3381 y(in)m(teractiv)m(e)f(shells.)630 3559 y Ft(extdebug)96
+b Fu(If)35 b(set)i(at)f(shell)g(in)m(v)m(o)s(cation,)k(or)c(in)f(a)h
+(shell)h(startup)e(\014le,)i(arrange)g(to)f(ex-)1110
+3669 y(ecute)h(the)f(debugger)g(pro\014le)g(b)s(efore)g(the)g(shell)h
+(starts,)h(iden)m(tical)g(to)f(the)1110 3778 y Ft(--debugger)32
+b Fu(option.)56 b(If)35 b(set)h(after)g(in)m(v)m(o)s(cation,)j(b)s(eha)
+m(vior)c(in)m(tended)g(for)1110 3888 y(use)30 b(b)m(y)g(debuggers)g(is)
+h(enabled:)1159 4032 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
+4141 y(Builtins],)29 b(page)g(55\))g(displa)m(ys)f(the)g(source)h
+(\014le)f(name)g(and)f(line)h(n)m(um-)1290 4251 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 4361 y(men)m(t.)1159 4504 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 4614 y(the)31 b(next)f(command)g(is)h(skipp)s(ed)e(and)g
+(not)i(executed.)1159 4758 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 4867 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 4977 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 5087 y(sim)m(ulates)d(a)g(call)h(to)f
+Ft(return)p Fu(.)1159 5230 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 5340 y(descriptions)30 b(\(see)i(Section)f(5.2)g([Bash)g
+(V)-8 b(ariables],)32 b(page)f(78\).)p eop end
+%%Page: 74 80
+TeXDict begin 74 79 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(74)1159 299 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 408 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 518 y Ft(DEBUG)d Fu(and)h Ft(RETURN)e
+Fu(traps.)1159 662 y(6.)61 b(Error)41 b(tracing)i(is)f(enabled:)63
+b(command)42 b(substitution,)i(shell)f(func-)1290 772
+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
+881 y Fu(trap.)630 1060 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 1170 y(Section)j(3.5.8.1)i([P)m(attern)f(Matc)m
+(hing],)g(page)f(36\))h(are)f(enabled.)630 1349 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 1458 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 1568 y(is)d(enabled)h(b)m(y)f(default.)630
+1747 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
+1856 y(pansion)30 b(result)g(in)g(an)g(expansion)h(error.)630
+2035 y Ft(force_fignore)1110 2145 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 2254 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
+2364 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)1110 2473 y([Bash)24
+b(V)-8 b(ariables],)27 b(page)e(78,)h(for)d(a)h(description)g(of)g
+Ft(FIGNORE)p Fu(.)37 b(This)22 b(option)1110 2583 y(is)30
+b(enabled)h(b)m(y)f(default.)630 2762 y Ft(globasciiranges)1110
+2871 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 2981 y(sions)28
+b(\(see)h(Section)h(3.5.8.1)g([P)m(attern)g(Matc)m(hing],)h(page)e
+(36\))g(b)s(eha)m(v)m(e)g(as)g(if)1110 3091 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 3200 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
+3310 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 3419 y(case)e(ASCI)s(I)e(c)m(haracters)j(will)f(collate)i
+(together.)630 3598 y Ft(globskipdots)1110 3708 y Fu(If)38
+b(set,)k(\014lename)d(expansion)f(will)h(nev)m(er)g(matc)m(h)h(the)f
+(\014lenames)g(`)p Ft(.)p Fu(')g(and)1110 3817 y(`)p
+Ft(..)p Fu(',)c(ev)m(en)g(if)g(the)f(pattern)g(b)s(egins)g(with)g(a)h
+(`)p Ft(.)p Fu('.)52 b(This)34 b(option)h(is)f(enabled)1110
+3927 y(b)m(y)c(default.)630 4106 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 4215 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 4325 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 4434 y(matc)m(h.)630 4613 y Ft(gnu_errfmt)1110
+4723 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 4832 y(message)c(format.)630
+5011 y Ft(histappend)1110 5121 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 5230 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 5340 y(the)31 b(\014le.)p eop end
+%%Page: 75 81
+TeXDict begin 75 80 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(75)630 299 y Ft(histreedit)1110
+408 y Fu(If)33 b(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
+518 y(to)d(re-edit)g(a)g(failed)g(history)f(substitution.)630
+682 y Ft(histverify)1110 792 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
+902 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 1011 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 1121 y(further)29 b(mo)s(di\014cation.)630 1285
+y Ft(hostcomplete)1110 1395 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
+1504 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 1614 y(pleted)g(\(see)h
+(Section)f(8.4.6)i([Commands)d(F)-8 b(or)36 b(Completion],)g(page)g
+(139\).)1110 1724 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)
+630 1888 y Ft(huponexit)1110 1998 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 2107 y(shell)31 b(exits)g(\(see)g(Section)g(3.7.6)h([Signals],)g
+(page)f(45\).)630 2271 y Ft(inherit_errexit)1110 2381
+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 2491
+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 2600 y(tion)f(is)f(enabled)h
+(when)e Fm(posix)h Fu(mo)s(de)g(is)g(enabled.)630 2765
+y Ft(interactive_comments)1110 2874 y Fu(Allo)m(w)d(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 2984 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
+3093 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)630
+3258 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
+3367 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 3477 y(en)m(vironmen)m
+(t.)630 3641 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
+3751 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 3861 y(semicolon)32
+b(separators)f(where)e(p)s(ossible.)630 4025 y Ft(localvar_inherit)1110
+4134 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
+4244 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 4354 y(v)-5
+b(alue)31 b(is)f(assigned.)41 b(The)30 b Ft(nameref)e
+Fu(attribute)k(is)e(not)h(inherited.)630 4518 y Ft(localvar_unset)1110
+4628 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
+4737 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 4847 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 4956 y(v)-5 b(ariables)31
+b(at)g(the)g(curren)m(t)f(function)g(scop)s(e.)630 5121
+y Ft(login_shell)1110 5230 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
+5340 y(tion)29 b(6.1)g([In)m(v)m(oking)h(Bash],)f(page)g(91\).)41
+b(The)28 b(v)-5 b(alue)29 b(ma)m(y)g(not)f(b)s(e)g(c)m(hanged.)p
+eop end
+%%Page: 76 82
+TeXDict begin 76 81 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(76)630 299 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 408
+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 518 y(file)g
+Ft(has)h(been)f(read")g Fu(is)h(displa)m(y)m(ed.)630
+701 y Ft(no_empty_cmd_completion)1110 810 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 920 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
+1029 y(an)k(empt)m(y)h(line.)630 1212 y Ft(nocaseglob)1110
+1322 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 1431 y(p)s(erforming)29
+b(\014lename)i(expansion.)630 1614 y Ft(nocasematch)1110
+1724 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 1833 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 1943 y(mands)25 b(\(see)i(Section)f
+(3.2.5.2)j([Conditional)e(Constructs],)f(page)h(12,)h(when)1110
+2052 y(p)s(erforming)e(pattern)i(substitution)f(w)m(ord)g(expansions,)h
+(or)f(when)g(\014ltering)1110 2162 y(p)s(ossible)j(completions)h(as)g
+(part)f(of)h(programmable)f(completion.)630 2345 y Ft
+(noexpand_translation)1110 2454 y Fu(If)23 b(set,)j(Bash)d(encloses)i
+(the)e(translated)h(results)g(of)f($)p Ft(")p Fu(...)p
+Ft(")h Fu(quoting)g(in)f(single)1110 2564 y(quotes)k(instead)g(of)g
+(double)f(quotes.)40 b(If)26 b(the)h(string)f(is)h(not)g(translated,)h
+(this)1110 2673 y(has)i(no)g(e\013ect.)630 2856 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 2966
+y(to)31 b(a)g(n)m(ull)f(string,)h(rather)f(than)g(themselv)m(es.)630
+3148 y Ft(patsub_replacement)1110 3258 y Fu(If)38 b(set,)k(Bash)d
+(expands)e(o)s(ccurrences)i(of)g(`)p Ft(&)p Fu(')g(in)f(the)h
+(replacemen)m(t)h(string)1110 3367 y(of)47 b(pattern)g(substitution)g
+(to)h(the)f(text)h(matc)m(hed)g(b)m(y)f(the)g(pattern,)52
+b(as)1110 3477 y(describ)s(ed)45 b(ab)s(o)m(v)m(e)i(\(see)f(Section)h
+(3.5.3)g([Shell)f(P)m(arameter)h(Expansion],)1110 3587
+y(page)31 b(26\).)42 b(This)30 b(option)g(is)h(enabled)f(b)m(y)g
+(default.)630 3769 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 3879 y(grammable)45 b(Completion],)k(page)c(143\))h(are)f
+(enabled.)82 b(This)44 b(option)h(is)1110 3988 y(enabled)30
+b(b)m(y)h(default.)630 4171 y Ft(progcomp_alias)1110
+4281 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 4390 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 4500 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
+4609 y(programmable)28 b(completion)h(using)e(the)h(command)f(w)m(ord)h
+(resulting)f(from)1110 4719 y(the)k(expanded)e(alias.)630
+4902 y Ft(promptvars)1110 5011 y Fu(If)50 b(set,)56 b(prompt)49
+b(strings)h(undergo)g(parameter)h(expansion,)k(command)1110
+5121 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 5230 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 5340 y(Prompt],)30 b(page)h(104\).)43
+b(This)29 b(option)i(is)g(enabled)f(b)m(y)g(default.)p
+eop end
+%%Page: 77 83
+TeXDict begin 77 82 bop 150 -116 a Fu(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(77)630 299 y Ft
+(restricted_shell)1110 408 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
+518 y(Section)32 b(6.10)h([The)d(Restricted)j(Shell],)e(page)h(105\).)
+45 b(The)30 b(v)-5 b(alue)32 b(ma)m(y)g(not)1110 628
+y(b)s(e)g(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 737 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 847 y(stricted.)630 1006 y Ft(shift_verbose)1110
+1116 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 1225 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 1385 y Ft(sourcepath)1110 1494 y Fu(If)40
+b(set,)45 b(the)c Ft(.)f Fu(\()p Ft(source)p Fu(\))g(builtin)g(uses)h
+(the)g(v)-5 b(alue)41 b(of)g Ft(PATH)f Fu(to)h(\014nd)f(the)1110
+1604 y(directory)32 b(con)m(taining)g(the)g(\014le)f(supplied)f(as)h
+(an)g(argumen)m(t.)44 b(This)30 b(option)1110 1714 y(is)g(enabled)h(b)m
+(y)f(default.)630 1873 y Ft(varredir_close)1110 1983
+y Fu(If)i(set,)h(the)f(shell)h(automatically)i(closes)e(\014le)f
+(descriptors)g(assigned)g(using)1110 2092 y(the)40 b
+Ft({varname})c Fu(redirection)k(syn)m(tax)g(\(see)h(Section)f(3.6)g
+([Redirections],)1110 2202 y(page)h(38\))f(instead)h(of)e(lea)m(ving)j
+(them)e(op)s(en)f(when)g(the)h(command)f(com-)1110 2311
+y(pletes.)630 2471 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 2580 y(fault.)150 2821 y Fs(4.4)68
+b(Sp)t(ecial)45 b(Builtins)150 2980 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 3090 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 3200 y(commands)e(in)g(three)h
+(resp)s(ects:)199 3334 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 3469 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
+3603 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 3713 y(after)i(the)f(command)h(completes.)275
+3872 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 3982 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 4091 y([Bash)g(POSIX)e(Mo)s(de],)i(page)g
+(106.)275 4226 y(These)f(are)g(the)h Fm(posix)f Fu(sp)s(ecial)h
+(builtins:)390 4360 y Ft(break)46 b(:)i(.)f(continue)f(eval)g(exec)h
+(exit)g(export)f(readonly)f(return)h(set)390 4470 y(shift)g(trap)h
+(unset)p eop end
+%%Page: 78 84
+TeXDict begin 78 83 bop 3659 -116 a Fu(78)150 299 y Fp(5)80
+b(Shell)53 b(V)-13 b(ariables)150 504 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
+614 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 843 y Fs(5.1)68 b(Bourne)45 b(Shell)g(V)-11
+b(ariables)150 1003 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 1112 y(assigns)f(a)f
+(default)h(v)-5 b(alue)31 b(to)g(the)f(v)-5 b(ariable.)150
+1260 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 1370 y(command.)150 1518 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
+1628 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 1737 y(Expansion],)30 b(page)h(25\).)150
+1885 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 1995 y(of)31 b(expansion.)150 2143 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 2252
+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 2362 y(\014le)f(or)h(Maildir-format)g(directory)-8
+b(.)150 2510 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 2619 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 2729 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 2839 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 2948 y(mail)f(\014le.)150 3096 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
+3244 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 3392 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 3502 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 3611 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 3721 y(initial)f(or)e(trailing)h(colon.)150
+3869 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 3979 y([Con)m(trolling)i(the)e
+(Prompt],)i(page)f(104,)i(for)d(the)h(complete)h(list)e(of)h(escap)s(e)
+g(sequences)630 4088 y(that)31 b(are)g(expanded)e(b)s(efore)h
+Ft(PS1)g Fu(is)g(displa)m(y)m(ed.)150 4236 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 4346 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
+4575 y Fs(5.2)68 b(Bash)45 b(V)-11 b(ariables)150 4734
+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 4844 y(sp)s(ecially)-8 b(.)275 4973 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 5082 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(116\).)150 5230 y Ft(_)432 b
+Fu(\($)p 716 5230 28 4 v 41 w(,)34 b(an)g(underscore.\))49
+b(A)m(t)35 b(shell)f(startup,)g(set)g(to)g(the)g(pathname)f(used)g(to)h
+(in)m(v)m(ok)m(e)i(the)630 5340 y(shell)e(or)g(shell)h(script)f(b)s
+(eing)f(executed)j(as)e(passed)g(in)f(the)i(en)m(vironmen)m(t)f(or)g
+(argumen)m(t)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(list.)55
+b(Subsequen)m(tly)-8 b(,)35 b(expands)f(to)i(the)f(last)g(argumen)m(t)h
+(to)f(the)g(previous)f(simple)h(com-)630 408 y(mand)21
+b(executed)i(in)e(the)i(foreground,)g(after)f(expansion.)38
+b(Also)22 b(set)h(to)f(the)g(full)g(pathname)630 518
+y(used)h(to)i(in)m(v)m(ok)m(e)h(eac)m(h)g(command)e(executed)h(and)f
+(placed)g(in)g(the)g(en)m(vironmen)m(t)h(exp)s(orted)630
+628 y(to)33 b(that)g(command.)45 b(When)32 b(c)m(hec)m(king)i(mail,)g
+(this)e(parameter)g(holds)g(the)g(name)g(of)h(the)630
+737 y(mail)e(\014le.)150 920 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.)150 1103 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
+1212 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
+1322 y([The)e(Shopt)g(Builtin],)i(page)f(71\).)60 b(The)36
+b(options)h(app)s(earing)f(in)g Ft(BASHOPTS)e Fu(are)i(those)630
+1431 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
+1541 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
+1650 y(\014les.)41 b(This)29 b(v)-5 b(ariable)31 b(is)g(readonly)-8
+b(.)150 1833 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 1943 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 2052 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 2162 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 2345 y Ft(BASH_ALIASES)630
+2454 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 2564 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 2673 y(Builtins],)31 b(page)g(48\).)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 2783 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 2892 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 3002 y(if)k(it)h(is)g(subsequen)m(tly)f
+(reset.)150 3185 y Ft(BASH_ARGC)630 3294 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 3404 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 3513
+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
+3623 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 3733 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 3842 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(71,)g(for)
+630 3952 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 4061 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 4171 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
+4354 y Ft(BASH_ARGV)630 4463 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 4573 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 4682 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 4792
+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 4902
+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 5011 y(Shopt)g(Builtin],)
+h(page)g(71,)g(for)g(a)f(description)h(of)f(the)h Ft(extdebug)d
+Fu(option)j(to)g(the)f Ft(shopt)630 5121 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 5230 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 5340 y(v)-5
+b(alues.)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(BASH_ARGV0)630
+408 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 518 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(23,)j(for)c(the)h(de-)
+630 628 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 737 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 847 y(prop)s(erties,)c(ev)m(en)h(if)f(it)h(is)g
+(subsequen)m(tly)f(reset.)150 1048 y Ft(BASH_CMDS)630
+1157 y Fu(An)k(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 1267 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
+1377 y(Shell)42 b(Builtins],)k(page)d(48\).)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
+1486 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
+1596 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 1705 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 1906 y Ft(BASH_COMMAND)630
+2016 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
+2125 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
+2235 y(command)30 b(executing)i(at)g(the)f(time)g(of)g(the)g(trap.)41
+b(If)30 b Ft(BASH_COMMAND)e Fu(is)i(unset,)h(it)g(loses)630
+2345 y(its)g(sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)f
+(subsequen)m(tly)g(reset.)150 2545 y Ft(BASH_COMPAT)630
+2655 y Fu(The)i(v)-5 b(alue)33 b(is)g(used)f(to)h(set)g(the)g(shell's)g
+(compatibilit)m(y)i(lev)m(el.)49 b(See)33 b(Section)h(6.12)g([Shell)630
+2765 y(Compatibilit)m(y)j(Mo)s(de],)h(page)e(110,)i(for)e(a)g
+(description)g(of)f(the)h(v)-5 b(arious)36 b(compatibilit)m(y)630
+2874 y(lev)m(els)g(and)f(their)g(e\013ects.)55 b(The)34
+b(v)-5 b(alue)36 b(ma)m(y)f(b)s(e)f(a)i(decimal)f(n)m(um)m(b)s(er)f
+(\(e.g.,)k(4.2\))e(or)f(an)630 2984 y(in)m(teger)44 b(\(e.g.,)j(42\))d
+(corresp)s(onding)d(to)i(the)g(desired)e(compatibilit)m(y)k(lev)m(el.)
+78 b(If)42 b Ft(BASH_)630 3093 y(COMPAT)28 b Fu(is)j(unset)e(or)h(set)h
+(to)g(the)f(empt)m(y)h(string,)f(the)h(compatibilit)m(y)h(lev)m(el)g
+(is)e(set)h(to)g(the)630 3203 y(default)39 b(for)g(the)g(curren)m(t)g
+(v)m(ersion.)67 b(If)38 b Ft(BASH_COMPAT)e Fu(is)j(set)h(to)f(a)h(v)-5
+b(alue)39 b(that)h(is)f(not)630 3313 y(one)31 b(of)f(the)h(v)-5
+b(alid)31 b(compatibilit)m(y)i(lev)m(els,)f(the)f(shell)f(prin)m(ts)g
+(an)h(error)f(message)i(and)e(sets)630 3422 y(the)i(compatibilit)m(y)j
+(lev)m(el)e(to)g(the)g(default)f(for)g(the)g(curren)m(t)g(v)m(ersion.)
+47 b(The)31 b(v)-5 b(alid)33 b(v)-5 b(alues)630 3532
+y(corresp)s(ond)31 b(to)i(the)g(compatibilit)m(y)i(lev)m(els)f(describ)
+s(ed)d(b)s(elo)m(w)i(\(see)g(Section)h(6.12)g([Shell)630
+3641 y(Compatibilit)m(y)d(Mo)s(de],)f(page)g(110\).)42
+b(F)-8 b(or)30 b(example,)h(4.2)f(and)f(42)h(are)g(v)-5
+b(alid)30 b(v)-5 b(alues)29 b(that)630 3751 y(corresp)s(ond)d(to)i(the)
+f Ft(compat42)e(shopt)g Fu(option)j(and)e(set)i(the)f(compatibilit)m(y)
+i(lev)m(el)g(to)f(42.)630 3861 y(The)i(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 4061 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 4171
+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 4281 y(script.)41
+b(See)30 b(Section)h(6.2)h([Bash)f(Startup)e(Files],)j(page)f(93.)150
+4482 y Ft(BASH_EXECUTION_STRING)630 4591 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
+4792 y Ft(BASH_LINENO)630 4902 y Fu(An)38 b(arra)m(y)g(v)-5
+b(ariable)39 b(whose)f(mem)m(b)s(ers)f(are)i(the)f(line)h(n)m(um)m(b)s
+(ers)d(in)i(source)g(\014les)g(where)630 5011 y(eac)m(h)h(corresp)s
+(onding)e(mem)m(b)s(er)g(of)h Ft(FUNCNAME)d Fu(w)m(as)k(in)m(v)m(ok)m
+(ed.)64 b Ft(${BASH_LINENO[$i]})630 5121 y Fu(is)74 b(the)g(line)h(n)m
+(um)m(b)s(er)e(in)g(the)i(source)f(\014le)g(\()p Ft
+(${BASH_SOURCE[$i+1]})p Fu(\))69 b(where)630 5230 y Ft(${FUNCNAME[$i]})
+32 b Fu(w)m(as)37 b(called)g(\(or)g Ft(${BASH_LINENO[$i-1]})31
+b Fu(if)36 b(referenced)g(within)630 5340 y(another)31
+b(shell)f(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.)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
+(BASH_LOADABLES_PATH)630 408 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 518 y(loadable)32 b(builtins)d(sp)s(eci\014ed)h(b)m(y)
+g(the)h Ft(enable)e Fu(command.)150 673 y Ft(BASH_REMATCH)630
+783 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 892 y(to)37 b(the)f Ft([[)g Fu(conditional)i(command)e
+(\(see)h(Section)g(3.2.5.2)i([Conditional)e(Constructs],)630
+1002 y(page)e(12\).)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
+1112 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 1221 y(matc)m(hing)j(the)g Fr(n)p Fu(th)f(paren)m
+(thesized)h(sub)s(expression.)150 1377 y Ft(BASH_SOURCE)630
+1486 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
+1596 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 1705 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 1815 y(called)32 b(from)d Ft(${BASH_SOURCE[$i+1]})150
+1970 y(BASH_SUBSHELL)630 2080 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 2189 y(b)s(egins)j(executing)i
+(in)e(that)h(en)m(vironmen)m(t.)41 b(The)27 b(initial)i(v)-5
+b(alue)28 b(is)f(0.)40 b(If)28 b Ft(BASH_SUBSHELL)630
+2299 y Fu(is)i(unset,)h(it)g(loses)g(its)f(sp)s(ecial)h(prop)s(erties,)
+f(ev)m(en)h(if)g(it)g(is)f(subsequen)m(tly)g(reset.)150
+2454 y Ft(BASH_VERSINFO)630 2564 y Fu(A)i(readonly)g(arra)m(y)g(v)-5
+b(ariable)32 b(\(see)h(Section)g(6.7)f([Arra)m(ys],)h(page)g(100\))g
+(whose)f(mem)m(b)s(ers)630 2673 y(hold)g(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 2783 y(arra)m(y)e(mem)m(b)s(ers)e
+(are)i(as)g(follo)m(ws:)630 2938 y Ft(BASH_VERSINFO[0])1110
+3048 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 3203 y Ft(BASH_VERSINFO[1])1110
+3313 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 3468 y Ft(BASH_VERSINFO[2])1110
+3577 y Fu(The)f(patc)m(h)h(lev)m(el.)630 3733 y Ft(BASH_VERSINFO[3])
+1110 3842 y Fu(The)f(build)f(v)m(ersion.)630 3998 y Ft
+(BASH_VERSINFO[4])1110 4107 y Fu(The)h(release)i(status)e(\(e.g.,)j
+Ft(beta1)p Fu(\).)630 4262 y Ft(BASH_VERSINFO[5])1110
+4372 y Fu(The)d(v)-5 b(alue)31 b(of)f Ft(MACHTYPE)p Fu(.)150
+4527 y Ft(BASH_VERSION)630 4637 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
+4792 y Ft(BASH_XTRACEFD)630 4902 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 5011 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 5121 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 5230 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 5340 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)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(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
+408 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
+518 y(standard)30 b(error)g(b)s(eing)f(closed.)150 664
+y Ft(CHILD_MAX)630 774 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 883 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 993 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
+1103 y(minim)m(um)30 b(v)-5 b(alue)30 b(is)h(system-dep)s(enden)m(t.)
+150 1249 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 1358 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)630 1468 y(Section)44
+b(4.3.2)h([The)e(Shopt)g(Builtin],)k(page)d(71\),)k(or)43
+b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630 1577
+y(receipt)31 b(of)g(a)g Ft(SIGWINCH)p Fu(.)150 1724 y
+Ft(COMP_CWORD)630 1833 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 1943 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
+2052 y(grammable)36 b(completion)g(facilities)i(\(see)e(Section)g(8.6)g
+([Programmable)g(Completion],)630 2162 y(page)31 b(143\).)150
+2308 y Ft(COMP_LINE)630 2418 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 2527
+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 2637
+y(Section)k(8.6)h([Programmable)f(Completion],)g(page)g(143\).)150
+2783 y Ft(COMP_POINT)630 2892 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 3002 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 3112 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
+3221 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 3331
+y(completion)c(facilities)g(\(see)g(Section)f(8.6)g([Programmable)g
+(Completion],)h(page)f(143\).)150 3477 y Ft(COMP_TYPE)630
+3587 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 3696 y(caused)j(a)g(completion)h(function)e(to)h
+(b)s(e)f(called:)43 b Ft(TAB)p Fu(,)30 b(for)g(normal)h(completion,)h
+(`)p Ft(?)p Fu(',)f(for)630 3806 y(listing)k(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 3915 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
+4025 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 4134 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
+4244 y([Programmable)e(Completion],)h(page)f(143\).)150
+4390 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 4500 y(function.)150 4646
+y Ft(COMP_WORDBREAKS)630 4756 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 4865 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 4975 y(prop)s(erties,)d(ev)m(en)h(if)f(it)h(is)g
+(subsequen)m(tly)f(reset.)150 5121 y Ft(COMP_WORDS)630
+5230 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
+5340 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_)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)630 299 y Ft(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 408 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 518 y(grammable)e(Completion],)g(page)g(143\).)150
+676 y Ft(COMPREPLY)630 786 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 896 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 1005 y(tion)g(8.6)g([Programmable)g(Completion],)
+h(page)f(143\).)51 b(Eac)m(h)34 b(arra)m(y)g(elemen)m(t)h(con)m(tains)
+630 1115 y(one)c(p)s(ossible)f(completion.)150 1273 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 1383 y(to)31 b(an)f(unnamed)f(copro)s(cess)i
+(\(see)g(Section)h(3.2.6)g([Copro)s(cesses],)f(page)g(18\).)150
+1541 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 1650 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
+1760 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
+1870 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 1979 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 2089 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
+2198 y(subsequen)m(tly)d(reset.)150 2357 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 2466 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 2576 y(line)d(editing.)150 2734 y Ft(ENV)336
+b Fu(Expanded)33 b(and)h(executed)i(similarly)f(to)g
+Ft(BASH_ENV)d Fu(\(see)k(Section)f(6.2)h([Bash)f(Startup)630
+2844 y(Files],)k(page)e(93\))h(when)d(an)h(in)m(teractiv)m(e)j(shell)d
+(is)h(in)m(v)m(ok)m(ed)g(in)f Fm(posix)g Fu(Mo)s(de)g(\(see)h(Sec-)630
+2953 y(tion)31 b(6.11)h([Bash)f(POSIX)e(Mo)s(de],)i(page)g(106\).)150
+3112 y Ft(EPOCHREALTIME)630 3221 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 3331 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 3440 y(\(see)k(the)g(do)s(cumen)m(tation)h(for)e
+(the)h(C)f(library)g(function)g Ft(time)g Fu(for)g(the)h(de\014nition)f
+(of)630 3550 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 3660 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 3818 y Ft(EPOCHSECONDS)630 3927 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 4037 y(since)d(the)g(Unix)g(Ep)s
+(o)s(c)m(h)f(\(see)i(the)f(do)s(cumen)m(tation)h(for)e(the)i(C)e
+(library)h(function)f Ft(time)630 4147 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
+4256 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
+4366 y(reset.)150 4524 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
+4682 y Ft(EXECIGNORE)630 4792 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 4902 y(page)j(36\))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 5011 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
+5121 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
+5230 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 5340 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(.)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(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
+408 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
+518 y Ft(extglob)28 b Fu(shell)j(option.)150 679 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
+840 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 950 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
+1060 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 1221 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 1330 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 1440 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 1549 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.)630 1659 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 1769 y(prop)s(erties,)30 b(ev)m(en)h(if)f(it)h(is)g(subsequen)m
+(tly)f(reset.)630 1904 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 2014 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 2123 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
+2233 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 2342 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
+2504 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 2613 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 2723 y(command)i(to)h(ab)s(ort.)
+150 2884 y Ft(GLOBIGNORE)630 2993 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 3103 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 3213 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 3322 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 3483 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
+3593 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 3703 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
+3864 y Ft(histchars)630 3973 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 4083 y(tok)m(enization)k(\(see)f(Section)f
+(9.3)h([History)f(In)m(teraction],)i(page)f(154\).)41
+b(The)29 b(\014rst)e(c)m(harac-)630 4193 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 4302 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
+4412 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
+4521 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 4631 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
+4740 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 4850 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 4960 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
+5121 y Ft(HISTCMD)144 b Fu(The)44 b(history)h(n)m(um)m(b)s(er,)j(or)d
+(index)g(in)f(the)h(history)g(list,)50 b(of)45 b(the)g(curren)m(t)g
+(command.)630 5230 y(Assignmen)m(ts)37 b(to)h Ft(HISTCMD)d
+Fu(are)j(ignored.)61 b(If)37 b Ft(HISTCMD)e Fu(is)i(unset,)h(it)g
+(loses)g(its)f(sp)s(ecial)630 5340 y(prop)s(erties,)30
+b(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f(reset.)p
+eop end
+%%Page: 85 91
+TeXDict begin 85 90 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(85)150 299 y Ft(HISTCONTROL)630
+408 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
+518 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 628 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 737 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
+847 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 956 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 1066 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
+1176 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 1285 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 1395 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 1504 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
+1614 y(of)31 b Ft(HISTCONTROL)p Fu(.)150 1763 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 1873 y(is)30 b Ft(~/.bash_history)p Fu(.)150
+2022 y Ft(HISTFILESIZE)630 2132 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 2242 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
+2351 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 2461 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 2570 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 2680 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 2790 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
+2939 y Ft(HISTIGNORE)630 3049 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 3158 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 3268 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 3377 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 3487 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 3597 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 3706 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 3816 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 3925 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 4035 y(the)31 b(setting)g(of)g(the)f
+Ft(extglob)f Fu(shell)h(option.)630 4164 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
+4274 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 4384 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 4493 y Ft(ignoreboth)p Fu(.)150
+4643 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 4752 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 4862 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 4971 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 5121 y Ft(HISTTIMEFORMAT)630
+5230 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 5340 y Ft(strftime)26 b Fu(to)k(prin)m(t)e(the)g(time)i(stamp)
+e(asso)s(ciated)i(with)e(eac)m(h)i(history)f(en)m(try)f(displa)m(y)m
+(ed)p eop end
+%%Page: 86 92
+TeXDict begin 86 91 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(86)630 299 y(b)m(y)34
+b(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
+408 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
+518 y(commen)m(t)31 b(c)m(haracter)h(to)f(distinguish)f(timestamps)h
+(from)f(other)g(history)h(lines.)150 687 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
+797 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
+907 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
+1016 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 1126 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 1235 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 1345 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 1455 y(is)f(cleared.)150 1624 y
+Ft(HOSTNAME)96 b Fu(The)30 b(name)g(of)h(the)f(curren)m(t)h(host.)150
+1793 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 1963 y Ft(IGNOREEOF)630
+2072 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
+2182 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 2291 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 2401 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 2511
+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 2620 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
+2790 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 2899 y Ft(~/.inputrc)p Fu(.)150 3068 y Ft(INSIDE_EMACS)630
+3178 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 3288 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
+3397 y(dep)s(ending)d(on)h(the)h(v)-5 b(alue)31 b(of)f
+Ft(TERM)p Fu(.)150 3567 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 3676 y(with)i(a)h(v)-5 b(ariable)31
+b(starting)g(with)f Ft(LC_)p Fu(.)150 3846 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 3955
+y(a)i(lo)s(cale)h(category)-8 b(.)150 4125 y Ft(LC_COLLATE)630
+4234 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
+4344 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 4453 y(alence)e
+(classes,)h(and)e(collating)i(sequences)e(within)f(\014lename)h
+(expansion)g(and)f(pattern)630 4563 y(matc)m(hing)d(\(see)h(Section)f
+(3.5.8)h([Filename)g(Expansion],)e(page)h(35\).)150 4732
+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 4842 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
+4951 y(tion)31 b(3.5.8)h([Filename)g(Expansion],)e(page)h(35\).)150
+5121 y Ft(LC_MESSAGES)630 5230 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 5340 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\).)p eop end
+%%Page: 87 93
+TeXDict begin 87 92 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(87)150 299 y Ft(LC_NUMERIC)630
+408 y Fu(This)30 b(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
+573 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 737 y Ft(LINENO)192 b Fu(The)32
+b(line)h(n)m(um)m(b)s(er)e(in)i(the)f(script)h(or)f(shell)h(function)f
+(curren)m(tly)h(executing.)49 b(If)32 b Ft(LINENO)630
+847 y Fu(is)e(unset,)h(it)g(loses)g(its)f(sp)s(ecial)h(prop)s(erties,)f
+(ev)m(en)h(if)g(it)g(is)f(subsequen)m(tly)g(reset.)150
+1011 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 1121 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 1230 y(Section)44 b(4.3.2)h([The)e(Shopt)g(Builtin],)k(page)d
+(71\),)k(or)43 b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630
+1340 y(receipt)31 b(of)g(a)g Ft(SIGWINCH)p Fu(.)150 1504
+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 1614 y(standard)k Fm(gnu)g Fr(cpu-compan)m(y-system)h
+Fu(format.)150 1778 y Ft(MAILCHECK)630 1888 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 1998 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)630 2107 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 2217 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 2326 y(equal)31
+b(to)g(zero,)g(the)g(shell)g(disables)f(mail)h(c)m(hec)m(king.)150
+2491 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 2600 y(no)30 b(v)-5
+b(ariable)31 b(name)g(is)f(supplied.)150 2765 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 2929 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
+3039 y Fu(builtin)30 b(command.)150 3203 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 3367 y Ft(PIPESTATUS)630 3477
+y Fu(An)48 b(arra)m(y)g(v)-5 b(ariable)49 b(\(see)g(Section)g(6.7)g
+([Arra)m(ys],)k(page)c(100\))g(con)m(taining)h(a)e(list)h(of)630
+3587 y(exit)32 b(status)f(v)-5 b(alues)31 b(from)f(the)h(pro)s(cesses)g
+(in)g(the)g(most-recen)m(tly-executed)j(foreground)630
+3696 y(pip)s(eline)c(\(whic)m(h)g(ma)m(y)h(con)m(tain)h(only)f(a)f
+(single)h(command\).)150 3861 y Ft(POSIXLY_CORRECT)630
+3970 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 4080 y Fu(mo)s(de)46 b(\(see)h(Section)g(6.11)g([Bash)g
+(POSIX)e(Mo)s(de],)50 b(page)d(106\))h(b)s(efore)e(reading)g(the)630
+4189 y(startup)38 b(\014les,)j(as)e(if)g(the)g Ft(--posix)d
+Fu(in)m(v)m(o)s(cation)41 b(option)e(had)f(b)s(een)g(supplied.)64
+b(If)39 b(it)g(is)630 4299 y(set)31 b(while)f(the)h(shell)f(is)h
+(running,)e(Bash)h(enables)h Fm(posix)f Fu(mo)s(de,)g(as)g(if)h(the)f
+(command)870 4436 y Ft(set)47 b(-o)g(posix)630 4573 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 4682 y(it)d(w)m(as)g(not)f(already)h(set.)150
+4847 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 5011 y
+Ft(PROMPT_COMMAND)630 5121 y Fu(If)23 b(this)h(v)-5 b(ariable)24
+b(is)g(set,)i(and)d(is)h(an)f(arra)m(y)-8 b(,)27 b(the)d(v)-5
+b(alue)24 b(of)g(eac)m(h)g(set)h(elemen)m(t)g(is)f(in)m(terpreted)630
+5230 y(as)29 b(a)g(command)f(to)i(execute)g(b)s(efore)e(prin)m(ting)h
+(the)g(primary)f(prompt)f(\()p Ft($PS1)p Fu(\).)40 b(If)28
+b(this)h(is)630 5340 y(set)c(but)f(not)g(an)h(arra)m(y)g(v)-5
+b(ariable,)26 b(its)f(v)-5 b(alue)25 b(is)f(used)g(as)h(a)f(command)g
+(to)i(execute)f(instead.)p eop end
+%%Page: 88 94
+TeXDict begin 88 93 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(88)150 299 y Ft(PROMPT_DIRTRIM)630
+408 y Fu(If)27 b(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 518 y(directory)c(comp)s(onen)m(ts)h(to)f(retain)h
+(when)e(expanding)g(the)h Ft(\\w)g Fu(and)f Ft(\\W)g
+Fu(prompt)h(string)f(es-)630 628 y(cap)s(es)i(\(see)h(Section)g(6.9)g
+([Con)m(trolling)g(the)f(Prompt],)i(page)e(104\).)41
+b(Characters)24 b(remo)m(v)m(ed)630 737 y(are)31 b(replaced)g(with)f
+(an)g(ellipsis.)150 892 y Ft(PS0)336 b Fu(The)32 b(v)-5
+b(alue)33 b(of)g(this)g(parameter)g(is)g(expanded)e(lik)m(e)j
+Ft(PS1)e Fu(and)g(displa)m(y)m(ed)i(b)m(y)e(in)m(teractiv)m(e)630
+1002 y(shells)e(after)h(reading)g(a)g(command)f(and)f(b)s(efore)h(the)h
+(command)f(is)h(executed.)150 1157 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 1267 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 1422 y Ft(PS4)336 b Fu(The)38 b(v)-5 b(alue)39
+b(of)g(this)g(parameter)g(is)g(expanded)f(lik)m(e)i Ft(PS1)e
+Fu(and)g(the)h(expanded)f(v)-5 b(alue)39 b(is)630 1532
+y(the)c(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
+1641 y(set)k(\(see)h(Section)g(4.3.1)g([The)f(Set)g(Builtin],)j(page)e
+(67\).)67 b(The)38 b(\014rst)g(c)m(haracter)j(of)e(the)630
+1751 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
+1861 y(lev)m(els)e(of)e(indirection.)42 b(The)29 b(default)i(is)f(`)p
+Ft(+)h Fu('.)150 2016 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.)150 2171 y Ft(RANDOM)192 b Fu(Eac)m(h)26
+b(time)g(this)f(parameter)h(is)g(referenced,)g(it)g(expands)f(to)h(a)g
+(random)e(in)m(teger)j(b)s(et)m(w)m(een)630 2281 y(0)e(and)e(32767.)41
+b(Assigning)25 b(a)f(v)-5 b(alue)25 b(to)g(this)f(v)-5
+b(ariable)25 b(seeds)f(the)h(random)e(n)m(um)m(b)s(er)g(gener-)630
+2390 y(ator.)41 b(If)27 b Ft(RANDOM)f 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)f
+(subsequen)m(tly)630 2500 y(reset.)150 2655 y Ft(READLINE_ARGUMENT)630
+2765 y Fu(An)m(y)37 b(n)m(umeric)f(argumen)m(t)h(giv)m(en)g(to)g(a)g
+(Readline)g(command)f(that)h(w)m(as)g(de\014ned)e(using)630
+2874 y(`)p Ft(bind)29 b(-x)p Fu(')h(\(see)i(Section)f(4.2)g([Bash)g
+(Builtins],)g(page)h(55,)f(when)e(it)i(w)m(as)g(in)m(v)m(ok)m(ed.)150
+3029 y Ft(READLINE_LINE)630 3139 y Fu(The)c(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 3249
+y([Bash)i(Builtins],)g(page)g(55\).)150 3404 y Ft(READLINE_MARK)630
+3513 y Fu(The)26 b(p)s(osition)h(of)g(the)g Fr(mark)32
+b Fu(\(sa)m(v)m(ed)c(insertion)f(p)s(oin)m(t\))g(in)g(the)g(Readline)g
+(line)g(bu\013er,)g(for)630 3623 y(use)36 b(with)f(`)p
+Ft(bind)30 b(-x)p Fu(')35 b(\(see)i(Section)g(4.2)g([Bash)f(Builtins],)
+i(page)f(55\).)58 b(The)35 b(c)m(haracters)630 3733 y(b)s(et)m(w)m(een)
+c(the)g(insertion)f(p)s(oin)m(t)g(and)g(the)h(mark)f(are)h(often)f
+(called)i(the)f Fr(region)p Fu(.)150 3888 y Ft(READLINE_POINT)630
+3998 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 4107 y(-x)p Fu(')30 b(\(see)h(Section)h(4.2)f([Bash)g
+(Builtins],)g(page)g(55\).)150 4262 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 4418 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
+4527 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 4637 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 4746 y(the)41
+b(assignmen)m(t.)72 b(The)40 b(n)m(um)m(b)s(er)f(of)i(seconds)f(at)h
+(shell)g(in)m(v)m(o)s(cation)i(and)c(the)i(curren)m(t)630
+4856 y(time)30 b(are)g(alw)m(a)m(ys)g(determined)f(b)m(y)g(querying)g
+(the)h(system)f(clo)s(c)m(k.)42 b(If)29 b Ft(SECONDS)e
+Fu(is)i(unset,)630 4966 y(it)i(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)e(reset.)150
+5121 y Ft(SHELL)240 b Fu(This)24 b(en)m(vironmen)m(t)i(v)-5
+b(ariable)26 b(expands)e(to)i(the)g(full)f(pathname)g(to)h(the)f
+(shell.)39 b(If)25 b(it)g(is)h(not)630 5230 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 5340 y(user's)30
+b(login)h(shell.)p eop end
+%%Page: 89 95
+TeXDict begin 89 94 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(89)150 299 y Ft(SHELLOPTS)630
+408 y 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 518 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 628 y(Set)g(Builtin],)h(page)f(67\).)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 737 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 847 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 956 y(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8
+b(.)150 1121 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 1230 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
+1395 y Ft(SRANDOM)144 b Fu(This)36 b(v)-5 b(ariable)37
+b(expands)f(to)h(a)g(32-bit)h(pseudo-random)d(n)m(um)m(b)s(er)g(eac)m
+(h)j(time)f(it)g(is)g(ref-)630 1504 y(erenced.)47 b(The)32
+b(random)g(n)m(um)m(b)s(er)f(generator)j(is)e(not)h(linear)g(on)f
+(systems)h(that)g(supp)s(ort)630 1614 y Ft(/dev/urandom)26
+b Fu(or)k Ft(arc4random)p Fu(,)d(so)j(eac)m(h)g(returned)f(n)m(um)m(b)s
+(er)f(has)h(no)g(relationship)h(to)630 1724 y(the)39
+b(n)m(um)m(b)s(ers)e(preceding)i(it.)66 b(The)38 b(random)g(n)m(um)m(b)
+s(er)f(generator)j(cannot)g(b)s(e)e(seeded,)630 1833
+y(so)c(assignmen)m(ts)g(to)g(this)f(v)-5 b(ariable)34
+b(ha)m(v)m(e)h(no)e(e\013ect.)51 b(If)33 b Ft(SRANDOM)e
+Fu(is)j(unset,)g(it)f(loses)i(its)630 1943 y(sp)s(ecial)c(prop)s
+(erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f(reset.)150
+2107 y Ft(TIMEFORMAT)630 2217 y Fu(The)g(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 2326 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 2436 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 2545 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
+2655 y(are)31 b(as)f(follo)m(ws;)i(the)f(braces)f(denote)h(optional)h
+(p)s(ortions.)630 2819 y Ft(\045\045)384 b Fu(A)30 b(literal)i(`)p
+Ft(\045)p Fu('.)630 2984 y Ft(\045[)p Fj(p)p Ft(][l]R)96
+b Fu(The)30 b(elapsed)h(time)g(in)f(seconds.)630 3148
+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
+3313 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
+3477 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 3641
+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
+3751 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 3861 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 3970 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.)630 4107 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 4217 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 4326 y(included.)630 4463 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 4600 y Ft
+($'\\nreal\\t\0453lR\\nuser\\t\0453)o(lU\\n)o(sys\\)o(t\0453)o(lS')630
+4737 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 4847 y(added)30 b(when)f(the)i(format)f(string)h(is)f(displa)m
+(y)m(ed.)150 5011 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 5121 y Ft(read)31
+b Fu(builtin)h(\(see)h(Section)f(4.2)i([Bash)e(Builtins],)h(page)g
+(55\).)47 b(The)32 b Ft(select)e Fu(command)630 5230
+y(\(see)f(Section)h(3.2.5.2)g([Conditional)g(Constructs],)e(page)i
+(12\))f(terminates)g(if)g(input)e(do)s(es)630 5340 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.)p eop end
+%%Page: 90 96
+TeXDict begin 90 95 bop 150 -116 a Fu(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(90)630 299 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 408 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
+518 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
+677 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 787 y(temp)s(orary)30 b(\014les)g(for)g(the)h
+(shell's)g(use.)150 946 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: 91 97
+TeXDict begin 91 96 bop 3659 -116 a Fu(91)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(67\))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(71,)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(117\))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)22 b(sup)s(erset)e(of)h(that)g(standard.)37
+b(See)21 b(Section)h(6.11)g([Bash)f(POSIX)f(Mo)s(de],)k(page)d(106,)630
+5340 y(for)30 b(a)h(description)f(of)h(the)f(Bash)h Fm(posix)f
+Fu(mo)s(de.)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(--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(105\).)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(94.)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(93,)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(105\).)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(71\).)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: 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)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(94,)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(46\).)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(25\).)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(94.)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: 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(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)29 b(connection,)g(as)f(when)f(executed)i
+(b)m(y)e(the)h(historical)h(remote)g(shell)f(daemon,)g(usually)g
+Ft(rshd)p Fu(,)150 3728 y(or)e(the)g(secure)g(shell)g(daemon)f
+Ft(sshd)p Fu(.)38 b(If)26 b(Bash)g(determines)f(it)i(is)e(b)s(eing)h
+(run)e(non-in)m(teractiv)m(ely)29 b(in)c(this)150 3837
+y(fashion,)i(it)g(reads)e(and)h(executes)h(commands)f(from)f
+Ft(~/.bashrc)p Fu(,)g(if)h(that)h(\014le)f(exists)h(and)e(is)h
+(readable.)150 3947 y(It)g(will)f(not)h(do)g(this)f(if)g(in)m(v)m(ok)m
+(ed)i(as)f Ft(sh)p Fu(.)39 b(The)25 b Ft(--norc)e Fu(option)j(ma)m(y)g
+(b)s(e)f(used)g(to)h(inhibit)f(this)h(b)s(eha)m(vior,)150
+4057 y(and)g(the)h Ft(--rcfile)e Fu(option)j(ma)m(y)f(b)s(e)f(used)g
+(to)i(force)g(another)f(\014le)g(to)g(b)s(e)g(read,)h(but)e(neither)h
+Ft(rshd)e Fu(nor)150 4166 y Ft(sshd)k Fu(generally)j(in)m(v)m(ok)m(e)g
+(the)f(shell)f(with)g(those)h(options)g(or)f(allo)m(w)i(them)e(to)i(b)s
+(e)d(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: 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)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)f(in)m(teractiv)m(e)j(shell)e(is)f(one)h(started)g(without)
+f(non-option)g(argumen)m(ts)h(\(unless)f Ft(-s)g Fu(is)g(sp)s
+(eci\014ed\))150 555 y(and)29 b(without)h(sp)s(ecifying)g(the)g
+Ft(-c)f Fu(option,)i(whose)e(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 808 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 952 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 1061 y(activ)m(e)g(shell)d(is)h(started.)150
+1269 y Fk(6.3.2)63 b(Is)41 b(this)g(Shell)g(In)m(teractiv)m(e?)150
+1416 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 1526 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 1669 y Ft(case)47 b("$-")f(in)390
+1779 y(*i*\))h(echo)f(This)h(shell)f(is)h(interactive)e(;;)390
+1888 y(*\))i(echo)g(This)f(shell)h(is)g(not)g(interactive)e(;;)390
+1998 y(esac)275 2141 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 2251 y(shells,)31 b(and)e(set)i(in)f(in)m(teractiv)m
+(e)k(shells.)40 b(Th)m(us:)390 2394 y Ft(if)47 b([)h(-z)f("$PS1")f(];)h
+(then)772 2503 y(echo)f(This)h(shell)f(is)i(not)f(interactive)390
+2613 y(else)772 2723 y(echo)f(This)h(shell)f(is)i(interactive)390
+2832 y(fi)150 3040 y Fk(6.3.3)63 b(In)m(teractiv)m(e)38
+b(Shell)k(Beha)m(vior)150 3187 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 3330
+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
+3440 y(page)31 b(93.)199 3579 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(113\))h(is)e(enabled)g(b)m
+(y)g(default.)46 b(When)32 b(job)330 3689 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 3798 y
+Ft(SIGTTOU)p Fu(,)29 b(and)g Ft(SIGTSTP)p Fu(.)199 3937
+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 4047 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 4156 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 4266 y(it.)54
+b(See)35 b(Section)h(6.9)f([Con)m(trolling)i(the)d(Prompt],)i(page)g
+(104,)h(for)d(a)h(complete)i(list)e(of)g(prompt)330 4375
+y(string)30 b(escap)s(e)h(sequences.)199 4514 y(4.)61
+b(Bash)31 b(executes)i(the)e(v)-5 b(alues)32 b(of)g(the)f(set)h(elemen)
+m(ts)g(of)g(the)f Ft(PROMPT_COMMAND)d Fu(arra)m(y)k(v)-5
+b(ariable)32 b(as)330 4624 y(commands)27 b(b)s(efore)f(prin)m(ting)h
+(the)g(primary)g(prompt,)g Ft($PS1)f Fu(\(see)i(Section)f(5.2)i([Bash)e
+(V)-8 b(ariables],)330 4733 y(page)31 b(78\).)199 4872
+y(5.)61 b(Readline)27 b(\(see)g(Chapter)e(8)h([Command)g(Line)g
+(Editing],)h(page)g(117\))g(is)f(used)g(to)g(read)g(commands)330
+4982 y(from)k(the)g(user's)g(terminal.)199 5121 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 5230 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 5340 y(Section)31 b(4.3.1)h([The)e(Set)h(Builtin],)g(page)g
+(67\).)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)199 299 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(152\))h(and)d(history)330
+408 y(expansion)h(\(see)i(Section)f(9.3)h([History)g(In)m(teraction],)k
+(page)45 b(154\))h(are)f(enabled)g(b)m(y)f(default.)330
+518 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 628 y(history)i(enabled)h(exits.)199 762 y(8.)61
+b(Alias)31 b(expansion)g(\(see)g(Section)g(6.6)g([Aliases],)i(page)e
+(100\))h(is)e(p)s(erformed)f(b)m(y)h(default.)199 896
+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(45\).)154 1030 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 1140 y(page)g(45\).)42
+b Ft(SIGINT)29 b Fu(will)h(in)m(terrupt)g(some)h(shell)g(builtins.)154
+1274 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 1383 y(option)31 b(has)f(b)s(een)g(enabled)
+g(\(see)h(Section)g(3.7.6)i([Signals],)e(page)g(45\).)154
+1517 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 1627 y(Set)g(Builtin],)g(page)g(67\).)154
+1761 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
+1871 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(78\).)154 2005 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
+2114 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(67\).)154
+2248 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 2358 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(26\).)154
+2492 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
+2626 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 2736 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(106\).)154 2870 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
+2980 y(page)e(48\).)154 3114 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 3248 y(20.)61 b(If)28 b(the)g Ft(cdspell)f Fu(shell)h(option)h(is)g
+(enabled,)g(the)f(shell)h(will)f(attempt)i(simple)e(sp)s(elling)h
+(correction)330 3357 y(for)f(directory)h(argumen)m(ts)g(to)g(the)g
+Ft(cd)e Fu(builtin)h(\(see)i(the)e(description)h(of)f(the)h
+Ft(cdspell)d Fu(option)j(to)330 3467 y(the)j Ft(shopt)e
+Fu(builtin)h(in)h(Section)g(4.3.2)i([The)d(Shopt)g(Builtin],)i(page)g
+(71\).)46 b(The)31 b Ft(cdspell)e Fu(option)330 3576
+y(is)h(only)h(e\013ectiv)m(e)i(in)d(in)m(teractiv)m(e)j(shells.)154
+3711 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 3820 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
+3930 y(V)-8 b(ariables],)32 b(page)f(78\).)150 4170 y
+Fs(6.4)68 b(Bash)45 b(Conditional)h(Expressions)150 4329
+y Fu(Conditional)25 b(expressions)f(are)g(used)g(b)m(y)g(the)g
+Ft([[)g Fu(comp)s(ound)e(command)i(\(see)h(Section)g(3.2.5.2)i([Condi-)
+150 4439 y(tional)h(Constructs],)g(page)f(12\))h(and)e(the)h
+Ft(test)f Fu(and)g Ft([)h Fu(builtin)f(commands)h(\(see)g(Section)h
+(4.1)g([Bourne)150 4548 y(Shell)37 b(Builtins],)j(page)e(48\).)63
+b(The)36 b Ft(test)g Fu(and)h Ft([)g Fu(commands)g(determine)g(their)h
+(b)s(eha)m(vior)f(based)g(on)150 4658 y(the)29 b(n)m(um)m(b)s(er)f(of)h
+(argumen)m(ts;)h(see)f(the)h(descriptions)e(of)i(those)f(commands)g
+(for)f(an)m(y)i(other)f(command-)150 4768 y(sp)s(eci\014c)h(actions.)
+275 4902 y(Expressions)22 b(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 5011 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 5121 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 5230 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 5340 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:)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)150 299 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 408 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 518 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 655 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 765 y(lo)s(cale.)k(The)30 b Ft(test)f Fu(command)i(uses)f(ASCI)s
+(I)e(ordering.)275 902 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 1011 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
+1175 y Ft(-a)f Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+Fr(\014le)36 b Fu(exists.)150 1337 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
+1499 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 1661 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 1823 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 1985 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
+2147 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 2309 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 2471 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 2633 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
+2795 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
+2957 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 3119 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 3281 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 3443 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 3605 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 3767 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
+3929 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
+4091 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 4253 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 4416 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 4578 y Fj(file1)e Ft(-ef)g Fj(file2)630
+4687 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 4849 y Fj(file1)f Ft(-nt)g
+Fj(file2)630 4959 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 5068 y(and)f Fr(\014le2)38 b Fu(do)s(es)30
+b(not.)150 5230 y Fj(file1)f Ft(-ot)g Fj(file2)630 5340
+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.)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(-o)30
+b Fj(optname)630 408 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 518 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 628 y(Builtin],)e(page)g(67\).)150
+783 y Ft(-v)f Fj(varname)630 892 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\).)150
+1047 y Ft(-R)30 b Fj(varname)630 1157 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
+1312 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 1467 y Ft(-n)f
+Fj(string)150 1576 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 1731 y
+Fj(string1)d Ft(==)i Fj(string2)150 1841 y(string1)e
+Ft(=)i Fj(string2)630 1951 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 2060 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.5.2)i
+([Conditional)630 2170 y(Constructs],)30 b(page)h(12\).)630
+2302 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
+2457 y Fj(string1)e Ft(!=)i Fj(string2)630 2567 y Fu(T)-8
+b(rue)30 b(if)g(the)h(strings)f(are)h(not)f(equal.)150
+2722 y Fj(string1)e Ft(<)i Fj(string2)630 2831 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 2986
+y Fj(string1)28 b Ft(>)i Fj(string2)630 3096 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 3251
+y Fj(arg1)29 b Ft(OP)h Fj(arg2)630 3361 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
+3470 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 3580 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 3689 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
+3799 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 3908 y(Arithmetic],)e(page)f(98\).)150
+4145 y Fs(6.5)68 b(Shell)45 b(Arithmetic)150 4304 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 4414 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 4546 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
+4656 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 4765 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 4875 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
+5030 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
+5185 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 5340
+y Ft(-)g(+)354 b Fu(unary)29 b(min)m(us)h(and)g(plus)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 Ft(!)30
+b(~)354 b Fu(logical)33 b(and)d(bit)m(wise)h(negation)150
+482 y Ft(**)384 b Fu(exp)s(onen)m(tiation)150 664 y Ft(*)30
+b(/)g(\045)276 b Fu(m)m(ultiplication,)33 b(division,)d(remainder)150
+847 y Ft(+)g(-)354 b Fu(addition,)31 b(subtraction)150
+1030 y Ft(<<)f(>>)258 b Fu(left)31 b(and)f(righ)m(t)h(bit)m(wise)g
+(shifts)150 1213 y Ft(<=)f(>=)g(<)g(>)102 b Fu(comparison)150
+1395 y Ft(==)30 b(!=)258 b Fu(equalit)m(y)32 b(and)e(inequalit)m(y)150
+1578 y Ft(&)432 b Fu(bit)m(wise)31 b(AND)150 1761 y Ft(^)432
+b Fu(bit)m(wise)31 b(exclusiv)m(e)h(OR)150 1944 y Ft(|)432
+b Fu(bit)m(wise)31 b(OR)150 2126 y Ft(&&)384 b Fu(logical)33
+b(AND)150 2309 y Ft(||)384 b Fu(logical)33 b(OR)150 2492
+y Ft(expr)c(?)h(expr)f(:)h(expr)630 2601 y Fu(conditional)i(op)s
+(erator)150 2784 y Ft(=)e(*=)g(/=)g(\045=)f(+=)h(-=)g(<<=)f(>>=)h(&=)g
+(^=)f(|=)630 2894 y Fu(assignmen)m(t)150 3076 y Ft(expr1)g(,)h(expr2)
+630 3186 y Fu(comma)275 3380 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 3490 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
+3600 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 3709 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 3819 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 3928
+y(when)27 b(a)h(v)-5 b(ariable)29 b(whic)m(h)e(has)h(b)s(een)f(giv)m
+(en)i(the)f Ft(integer)e Fu(attribute)i(using)g(`)p Ft(declare)g(-i)p
+Fu(')g(is)g(assigned)150 4038 y(a)33 b(v)-5 b(alue.)49
+b(A)33 b(n)m(ull)g(v)-5 b(alue)34 b(ev)-5 b(aluates)34
+b(to)g(0.)49 b(A)33 b(shell)g(v)-5 b(ariable)34 b(need)e(not)i(ha)m(v)m
+(e)g(its)f Ft(integer)e Fu(attribute)150 4148 y(turned)e(on)h(to)i(b)s
+(e)d(used)h(in)g(an)g(expression.)275 4305 y(In)m(teger)41
+b(constan)m(ts)g(follo)m(w)h(the)e(C)g(language)i(de\014nition,)g
+(without)f(su\016xes)e(or)h(c)m(haracter)i(con-)150 4415
+y(stan)m(ts.)f(Constan)m(ts)31 b(with)f(a)g(leading)h(0)f(are)h(in)m
+(terpreted)f(as)g(o)s(ctal)i(n)m(um)m(b)s(ers.)39 b(A)30
+b(leading)h(`)p Ft(0x)p Fu(')f(or)g(`)p Ft(0X)p Fu(')150
+4525 y(denotes)g(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
+4634 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 4744 y(in)g(that)i(base.)40
+b(If)30 b Fr(base)5 b Ft(#)30 b Fu(is)f(omitted,)i(then)f(base)g(10)g
+(is)g(used.)40 b(When)30 b(sp)s(ecifying)f Fr(n)p Fu(,)h(if)f(a)i
+(non-digit)f(is)150 4853 y(required,)k(the)g(digits)h(greater)g(than)e
+(9)i(are)f(represen)m(ted)g(b)m(y)f(the)h(lo)m(w)m(ercase)j(letters,)f
+(the)e(upp)s(ercase)150 4963 y(letters,)26 b(`)p Ft(@)p
+Fu(',)g(and)d(`)p Ft(_)p Fu(',)i(in)e(that)i(order.)38
+b(If)23 b Fr(base)29 b Fu(is)23 b(less)h(than)g(or)f(equal)h(to)h(36,)h
+(lo)m(w)m(ercase)g(and)d(upp)s(ercase)150 5073 y(letters)32
+b(ma)m(y)f(b)s(e)e(used)h(in)m(terc)m(hangeably)i(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
+5230 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
+5340 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.)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)150 299 y Fs(6.6)68
+b(Aliases)150 458 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 568 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
+677 y Ft(alias)d Fu(and)h Ft(unalias)e Fu(builtin)i(commands.)275
+810 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 920 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 1030 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
+1139 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 1249 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)150 1358 y(alias)c(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 1468 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 1578 y(the)30 b(last)h(c)m(haracter)g(of)g(the)f(alias)h(v)-5
+b(alue)30 b(is)g(a)g Ft(blank)p Fu(,)f(then)h(the)g(next)g(command)g(w)
+m(ord)f(follo)m(wing)j(the)150 1687 y(alias)g(is)e(also)h(c)m(hec)m(k)m
+(ed)i(for)d(alias)h(expansion.)275 1820 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 1930 y Fu(command.)275
+2063 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 2172 y(argumen)m(ts)31 b(are)f(needed,)h(use)f(a)h
+(shell)f(function)g(\(see)i(Section)f(3.3)g([Shell)g(F)-8
+b(unctions],)31 b(page)g(19\).)275 2305 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 2415 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(71\).)275 2548 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 2657 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 2767 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 2877 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 2986 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 3096
+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
+3205 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 3315 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 3425 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 3534 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
+3644 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
+3777 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
+4014 y Fs(6.7)68 b(Arra)l(ys)150 4174 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
+4283 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 4393 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 4503
+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 4612 y(expressions)38 b(\(see)h(Section)g(6.5)h([Shell)
+e(Arithmetic],)k(page)d(98\)\))h(and)d(are)i(zero-based;)k(asso)s
+(ciativ)m(e)150 4722 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 4831 y(negativ)m(e)d(in)m(tegers.)275
+4964 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 5097 y Fj(name)p Ft([)p Fj(subscript)p Ft(]=)p
+Fj(value)150 5230 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
+5340 y(explicitly)32 b(declare)f(an)g(arra)m(y)-8 b(,)31
+b(use)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)390 299 y Ft(declare)46
+b(-a)h Fj(name)150 438 y Fu(The)30 b(syn)m(tax)390 577
+y Ft(declare)46 b(-a)h Fj(name)p Ft([)p Fj(subscript)p
+Ft(])150 715 y Fu(is)30 b(also)i(accepted;)g(the)e Fr(subscript)h
+Fu(is)g(ignored.)150 854 y(Asso)s(ciativ)m(e)i(arra)m(ys)d(are)h
+(created)h(using)390 993 y Ft(declare)46 b(-A)h Fj(name)275
+1132 y Fu(A)m(ttributes)f(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 1241 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 1380 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 1519 y Fj(name)p
+Ft(=\()p Fj(value1)44 b(value2)j Ft(...)f(\))150 1658
+y Fu(where)33 b(eac)m(h)i Fr(v)-5 b(alue)40 b Fu(ma)m(y)34
+b(b)s(e)g(of)g(the)g(form)f Ft([)p Fj(subscript)p Ft(]=)p
+Fr(string)p Fu(.)48 b(Indexed)33 b(arra)m(y)h(assignmen)m(ts)h(do)150
+1767 y(not)26 b(require)f(an)m(ything)g(but)g Fr(string)p
+Fu(.)39 b(When)25 b(assigning)h(to)g(indexed)f(arra)m(ys,)i(if)e(the)h
+(optional)g(subscript)150 1877 y(is)h(supplied,)f(that)h(index)g(is)f
+(assigned)h(to;)i(otherwise)e(the)g(index)g(of)f(the)h(elemen)m(t)i
+(assigned)d(is)h(the)g(last)150 1987 y(index)j(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 2125 y(Eac)m(h)26 b Fr(v)-5 b(alue)32 b Fu(in)26
+b(the)h(list)g(undergo)s(es)e(all)i(the)g(shell)f(expansions)g(describ)
+s(ed)f(ab)s(o)m(v)m(e)j(\(see)f(Section)g(3.5)150 2235
+y([Shell)j(Expansions],)h(page)g(24\).)275 2374 y(When)k(assigning)i
+(to)g(an)f(asso)s(ciativ)m(e)i(arra)m(y)-8 b(,)39 b(the)d(w)m(ords)f
+(in)h(a)h(comp)s(ound)d(assignmen)m(t)j(ma)m(y)g(b)s(e)150
+2483 y(either)31 b(assignmen)m(t)h(statemen)m(ts,)h(for)e(whic)m(h)g
+(the)g(subscript)f(is)h(required,)g(or)g(a)g(list)h(of)f(w)m(ords)f
+(that)i(is)150 2593 y(in)m(terpreted)g(as)g(a)g(sequence)f(of)h
+(alternating)h(k)m(eys)f(and)f(v)-5 b(alues:)44 b Fr(name)5
+b Fu(=\()p Fr(k)m(ey1)40 b(v)-5 b(alue1)40 b(k)m(ey2)g(v)-5
+b(alue2)156 2703 y Fu(.)22 b(.)g(.)47 b(\).)57 b(These)35
+b(are)i(treated)f(iden)m(tically)i(to)e Fr(name)5 b Fu(=\()36
+b([)p Fr(k)m(ey1)7 b Fu(]=)p Fr(v)-5 b(alue1)46 b Fu([)p
+Fr(k)m(ey2)7 b Fu(]=)p Fr(v)-5 b(alue2)51 b Fu(.)22 b(.)h(.)46
+b(\).)57 b(The)150 2812 y(\014rst)25 b(w)m(ord)f(in)h(the)h(list)g
+(determines)f(ho)m(w)g(the)h(remaining)f(w)m(ords)g(are)h(in)m
+(terpreted;)h(all)f(assignmen)m(ts)g(in)150 2922 y(a)31
+b(list)f(m)m(ust)h(b)s(e)e(of)h(the)h(same)f(t)m(yp)s(e.)41
+b(When)30 b(using)g(k)m(ey/v)-5 b(alue)32 b(pairs,)e(the)g(k)m(eys)h
+(ma)m(y)g(not)f(b)s(e)g(missing)150 3031 y(or)g(empt)m(y;)h(a)g
+(\014nal)f(missing)g(v)-5 b(alue)31 b(is)g(treated)g(lik)m(e)h(the)e
+(empt)m(y)h(string.)275 3170 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 3280 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
+3419 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 3528 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
+3638 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 3747 y(elemen)m(t.)275 3886
+y(The)j(`)p Ft(+=)p Fu(')g(op)s(erator)h(will)g(app)s(end)e(to)i(an)g
+(arra)m(y)g(v)-5 b(ariable)32 b(when)d(assigning)i(using)g(the)f(comp)s
+(ound)150 3996 y(assignmen)m(t)h(syn)m(tax;)g(see)g(Section)g(3.4)h
+([Shell)e(P)m(arameters],)i(page)g(21,)f(ab)s(o)m(v)m(e.)275
+4134 y(An)m(y)d(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 4244 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
+4354 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
+4463 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 4573 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
+4682 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
+4792 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 4902 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 5011
+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
+5121 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 5230 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
+5340 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)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)150 299 y(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 408 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 518 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
+675 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 785 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 894 y(create)d(an)e(arra)m(y)h(if)f
+(necessary)-8 b(.)275 1051 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
+1161 y(string)30 b(is)h(a)g(v)-5 b(alid)30 b(v)-5 b(alue.)275
+1317 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 1427 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 1537 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 1646 y(within)30
+b(double)g(quotes.)275 1803 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 1913 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 2022 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 2132 y Ft(unset)29 b Fj(name)p Fu(,)39
+b(where)e Fr(name)43 b Fu(is)37 b(an)h(arra)m(y)-8 b(,)41
+b(remo)m(v)m(es)e(the)f(en)m(tire)g(arra)m(y)-8 b(.)64
+b Ft(unset)29 b Fj(name)p Ft([)p Fj(subscript)p Ft(])150
+2241 y Fu(b)s(eha)m(v)m(es)h(di\013eren)m(tly)g(dep)s(ending)d(on)j
+(the)f(arra)m(y)h(t)m(yp)s(e)f(when)g(giv)m(en)h(a)f(subscript)g(of)g
+(`)p Ft(*)p Fu(')g(or)h(`)p Ft(@)p Fu('.)40 b(When)150
+2351 y Fr(name)46 b Fu(is)40 b(an)h(asso)s(ciativ)m(e)i(arra)m(y)-8
+b(,)44 b(it)d(remo)m(v)m(es)h(the)f(elemen)m(t)h(with)e(k)m(ey)h(`)p
+Ft(*)p Fu(')g(or)f(`)p Ft(@)p Fu('.)72 b(If)40 b Fr(name)45
+b Fu(is)c(an)150 2461 y(indexed)30 b(arra)m(y)-8 b(,)31
+b Ft(unset)e Fu(remo)m(v)m(es)j(all)f(of)g(the)f(elemen)m(ts,)i(but)e
+(do)s(es)g(not)h(remo)m(v)m(e)h(the)e(arra)m(y)h(itself.)275
+2617 y(When)k(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 2727 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 2837 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 2946 y(should)k(b)s(e)h
+(quoted.)275 3103 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
+3213 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
+3322 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 3432 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 3541 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
+3651 y(them)30 b(to)h(b)s(e)f(reused)g(as)g(input.)150
+3925 y Fs(6.8)68 b(The)45 b(Directory)g(Stac)l(k)150
+4085 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 4194 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 4304 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 4414 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 4523
+y(the)c Ft(")p Fu(top)p Ft(")f Fu(of)g(the)h(directory)g(stac)m(k.)275
+4680 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 4790 y(v)-5 b(ariable.)150
+5011 y Fk(6.8.1)63 b(Directory)40 b(Stac)m(k)g(Builtins)150
+5194 y Ft(dirs)870 5340 y(dirs)47 b([-clpv])e([+)p Fj(N)i
+Ft(|)h(-)p Fj(N)p Ft(])p eop end
+%%Page: 103 109
+TeXDict begin 103 108 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(103)630 299 y(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 408 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
+518 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
+676 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 833 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 943 y(uses)d(a)h(tilde)g(to)g(denote)g
+(the)f(home)h(directory)-8 b(.)630 1100 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 1258 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 1367
+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 1525 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 1634 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 1792 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
+1902 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 2059
+y Ft(popd)870 2193 y(popd)47 b([-n])f([+)p Fj(N)h Ft(|)h(-)p
+Fj(N)p Ft(])630 2326 y Fu(Remo)m(v)m(es)34 b(elemen)m(ts)g(from)e(the)h
+(directory)g(stac)m(k.)49 b(The)32 b(elemen)m(ts)i(are)f(n)m(um)m(b)s
+(ered)e(from)630 2436 y(0)38 b(starting)h(at)f(the)g(\014rst)f
+(directory)h(listed)g(b)m(y)g Ft(dirs)p Fu(;)j(that)d(is,)i
+Ft(popd)c Fu(is)i(equiv)-5 b(alen)m(t)39 b(to)630 2545
+y Ft(popd)29 b(+0)p Fu(.)630 2679 y(When)j(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 2789 y(and)e(c)m(hanges)h(to)g(the)g(new)f(top)g
+(directory)-8 b(.)630 2922 y(Argumen)m(ts,)31 b(if)f(supplied,)f(ha)m
+(v)m(e)j(the)e(follo)m(wing)i(meanings:)630 3080 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 3189 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
+3347 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 3456 y(b)m(y)30 b
+Ft(dirs)p Fu(\),)g(starting)h(with)f(zero,)i(from)e(the)g(stac)m(k.)630
+3614 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 3724 y(prin)m(ted)30 b(b)m(y)g
+Ft(dirs)p Fu(\),)g(starting)h(with)f(zero,)i(from)e(the)g(stac)m(k.)630
+3881 y(If)d(the)h(top)g(elemen)m(t)h(of)f(the)g(directory)g(stac)m(k)h
+(is)e(mo)s(di\014ed,)h(and)f(the)h Ft(-n)f Fu(option)h(w)m(as)g(not)630
+3991 y(supplied,)j Ft(popd)g Fu(uses)g(the)h Ft(cd)f
+Fu(builtin)g(to)i(c)m(hange)g(to)f(the)g(directory)g(at)h(the)f(top)g
+(of)g(the)630 4100 y(stac)m(k.)42 b(If)30 b(the)h Ft(cd)e
+Fu(fails,)j Ft(popd)d Fu(returns)g(a)i(non-zero)g(v)-5
+b(alue.)630 4234 y(Otherwise,)34 b Ft(popd)f Fu(returns)f(an)h
+(unsuccessful)g(status)g(if)h(an)f(in)m(v)-5 b(alid)34
+b(option)g(is)g(encoun-)630 4343 y(tered,)39 b(the)d(directory)h(stac)m
+(k)i(is)d(empt)m(y)-8 b(,)39 b(or)e(a)g(non-existen)m(t)h(directory)f
+(stac)m(k)h(en)m(try)f(is)630 4453 y(sp)s(eci\014ed.)630
+4587 y(If)32 b(the)h Ft(popd)f Fu(command)h(is)g(successful,)g(Bash)g
+(runs)f Ft(dirs)f Fu(to)j(sho)m(w)f(the)g(\014nal)f(con)m(ten)m(ts)630
+4696 y(of)f(the)f(directory)h(stac)m(k,)h(and)e(the)g(return)g(status)g
+(is)h(0.)150 4854 y Ft(pushd)870 4987 y(pushd)46 b([-n])h([+)p
+Fj(N)g Ft(|)g Fj(-N)h Ft(|)f Fj(dir)p Ft(])630 5121 y
+Fu(Adds)27 b(a)h(directory)h(to)g(the)f(top)g(of)g(the)g(directory)h
+(stac)m(k,)h(or)e(rotates)h(the)f(stac)m(k,)j(making)630
+5230 y(the)37 b(new)g(top)g(of)g(the)g(stac)m(k)i(the)e(curren)m(t)f(w)
+m(orking)i(directory)-8 b(.)61 b(With)38 b(no)e(argumen)m(ts,)630
+5340 y Ft(pushd)29 b Fu(exc)m(hanges)j(the)e(top)h(t)m(w)m(o)h(elemen)m
+(ts)f(of)g(the)f(directory)h(stac)m(k.)p eop end
+%%Page: 104 110
+TeXDict begin 104 109 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(104)630 299 y(Argumen)m(ts,)31
+b(if)f(supplied,)f(ha)m(v)m(e)j(the)e(follo)m(wing)i(meanings:)630
+455 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 564 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 720 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 830 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 939 y(stac)m(k.)630
+1095 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 1205 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 1314 y(stac)m(k.)630 1470 y
+Fj(dir)336 b Fu(Mak)m(es)32 b Fr(dir)k Fu(b)s(e)30 b(the)g(top)h(of)f
+(the)h(stac)m(k.)630 1626 y(After)39 b(the)g(stac)m(k)h(has)e(b)s(een)g
+(mo)s(di\014ed,)i(if)f(the)g Ft(-n)f Fu(option)h(w)m(as)g(not)g
+(supplied,)g Ft(pushd)630 1735 y Fu(uses)29 b(the)h Ft(cd)f
+Fu(builtin)g(to)h(c)m(hange)g(to)h(the)e(directory)h(at)g(the)g(top)g
+(of)f(the)h(stac)m(k.)42 b(If)29 b(the)h Ft(cd)630 1845
+y Fu(fails,)h Ft(pushd)e Fu(returns)g(a)i(non-zero)g(v)-5
+b(alue.)630 1978 y(Otherwise,)34 b(if)g(no)f(argumen)m(ts)h(are)g
+(supplied,)f Ft(pushd)f Fu(returns)g(0)i(unless)f(the)g(directory)630
+2087 y(stac)m(k)g(is)f(empt)m(y)-8 b(.)46 b(When)32 b(rotating)h(the)f
+(directory)g(stac)m(k,)i Ft(pushd)d Fu(returns)f(0)j(unless)e(the)630
+2197 y(directory)g(stac)m(k)h(is)e(empt)m(y)h(or)f(a)h(non-existen)m(t)
+h(directory)f(stac)m(k)g(elemen)m(t)h(is)f(sp)s(eci\014ed.)630
+2330 y(If)e(the)g Ft(pushd)f Fu(command)h(is)g(successful,)h(Bash)f
+(runs)f Ft(dirs)g Fu(to)i(sho)m(w)f(the)g(\014nal)g(con)m(ten)m(ts)630
+2439 y(of)i(the)f(directory)h(stac)m(k.)150 2676 y Fs(6.9)68
+b(Con)l(trolling)47 b(the)e(Prompt)150 2836 y Fu(Bash)37
+b(examines)h(the)f(v)-5 b(alue)37 b(of)g(the)h(arra)m(y)f(v)-5
+b(ariable)38 b Ft(PROMPT_COMMAND)33 b Fu(just)j(b)s(efore)h(prin)m
+(ting)g(eac)m(h)150 2945 y(primary)c(prompt.)49 b(If)33
+b(an)m(y)h(elemen)m(ts)h(in)f Ft(PROMPT_COMMAND)29 b
+Fu(are)34 b(set)h(and)e(non-n)m(ull,)h(Bash)g(executes)150
+3055 y(eac)m(h)e(v)-5 b(alue,)31 b(in)f(n)m(umeric)g(order,)g(just)g
+(as)g(if)h(it)g(had)e(b)s(een)h(t)m(yp)s(ed)g(on)g(the)h(command)f
+(line.)275 3188 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 3297 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 3453 y Ft(\\a)384 b Fu(A)30 b(b)s(ell)h(c)m
+(haracter.)150 3609 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 3765 y Ft(\\D{)p Fj(format)p Ft(})630
+3874 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 3984 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 4093 y(braces)31 b(are)f(required.)150 4249
+y Ft(\\e)384 b Fu(An)30 b(escap)s(e)h(c)m(haracter.)150
+4405 y Ft(\\h)384 b Fu(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e
+(`.'.)150 4561 y Ft(\\H)384 b Fu(The)30 b(hostname.)150
+4717 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 4873 y Ft(\\l)384
+b Fu(The)30 b(basename)h(of)f(the)h(shell's)f(terminal)h(device)g
+(name.)150 5028 y Ft(\\n)384 b Fu(A)30 b(newline.)150
+5184 y Ft(\\r)384 b Fu(A)30 b(carriage)i(return.)150
+5340 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\).)p eop end
+%%Page: 105 111
+TeXDict begin 105 110 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(105)150 299 y Ft(\\t)384
+b Fu(The)30 b(time,)h(in)f(24-hour)h(HH:MM:SS)g(format.)150
+459 y Ft(\\T)384 b Fu(The)30 b(time,)h(in)f(12-hour)h(HH:MM:SS)g
+(format.)150 619 y Ft(\\@)384 b Fu(The)30 b(time,)h(in)f(12-hour)h
+(am/pm)f(format.)150 780 y Ft(\\A)384 b Fu(The)30 b(time,)h(in)f
+(24-hour)h(HH:MM)g(format.)150 940 y Ft(\\u)384 b Fu(The)30
+b(username)g(of)g(the)h(curren)m(t)f(user.)150 1100 y
+Ft(\\v)384 b Fu(The)30 b(v)m(ersion)h(of)f(Bash)h(\(e.g.,)h(2.00\))150
+1261 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 1421
+y Ft(\\w)384 b Fu(The)27 b(v)-5 b(alue)28 b(of)g(the)g
+Ft(PWD)f Fu(shell)h(v)-5 b(ariable)28 b(\()p Ft($PWD)p
+Fu(\),)g(with)g Ft($HOME)e Fu(abbreviated)i(with)f(a)h(tilde)630
+1530 y(\(uses)i(the)h Ft($PROMPT_DIRTRIM)26 b Fu(v)-5
+b(ariable\).)150 1691 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 1851 y Ft(\\!)384 b Fu(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i
+(this)f(command.)150 2011 y Ft(\\#)384 b Fu(The)30 b(command)g(n)m(um)m
+(b)s(er)f(of)i(this)f(command.)150 2171 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 2332 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 2492 y Ft(\\\\)384
+b Fu(A)30 b(bac)m(kslash.)150 2652 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
+2762 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e(prompt.)
+150 2922 y Ft(\\])384 b Fu(End)29 b(a)i(sequence)g(of)f(non-prin)m
+(ting)g(c)m(haracters.)275 3083 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 3192
+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
+3302 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(152\),)j(while)d(the)f
+(command)150 3412 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 3521 y(session.)275 3657 y(After)28 b(the)g(string)g(is)g
+(deco)s(ded,)g(it)g(is)g(expanded)f(via)i(parameter)f(expansion,)h
+(command)f(substitu-)150 3766 y(tion,)g(arithmetic)f(expansion,)g(and)e
+(quote)i(remo)m(v)-5 b(al,)29 b(sub)5 b(ject)25 b(to)i(the)f(v)-5
+b(alue)27 b(of)f(the)g Ft(promptvars)e Fu(shell)150 3876
+y(option)i(\(see)h(Section)g(4.3.2)g([The)f(Shopt)f(Builtin],)j(page)e
+(71\).)41 b(This)25 b(can)h(ha)m(v)m(e)h(un)m(w)m(an)m(ted)f(side)g
+(e\013ects)150 3985 y(if)i(escap)s(ed)f(p)s(ortions)g(of)h(the)g
+(string)f(app)s(ear)g(within)g(command)h(substitution)f(or)h(con)m
+(tain)g(c)m(haracters)150 4095 y(sp)s(ecial)j(to)g(w)m(ord)f
+(expansion.)150 4337 y Fs(6.10)68 b(The)45 b(Restricted)h(Shell)150
+4496 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 4606 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
+4716 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 4825 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
+4961 y Fq(\017)60 b Fu(Changing)30 b(directories)h(with)g(the)f
+Ft(cd)g Fu(builtin.)225 5095 y Fq(\017)60 b Fu(Setting)33
+b(or)g(unsetting)f(the)h(v)-5 b(alues)33 b(of)f(the)h
+Ft(SHELL)p Fu(,)f Ft(PATH)p Fu(,)g Ft(HISTFILE)p Fu(,)f
+Ft(ENV)p Fu(,)h(or)g Ft(BASH_ENV)e Fu(v)-5 b(ari-)330
+5205 y(ables.)225 5340 y Fq(\017)60 b Fu(Sp)s(ecifying)30
+b(command)g(names)g(con)m(taining)i(slashes.)p eop end
+%%Page: 106 112
+TeXDict begin 106 111 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(106)225 299 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
+434 y Fq(\017)60 b Fu(Sp)s(ecifying)33 b(a)i(\014lename)f(con)m
+(taining)h(a)g(slash)e(as)i(an)e(argumen)m(t)i(to)g(the)f
+Ft(history)e Fu(builtin)h(com-)330 543 y(mand.)225 678
+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 788 y Fu(builtin)e(command.)225
+923 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
+1058 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 1193 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 1327 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 1462 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 1597 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 1732 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
+1867 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(shopt)f(-u)h
+(restricted_shell)p Fu('.)275 2028 y(These)g(restrictions)h(are)g
+(enforced)f(after)h(an)m(y)g(startup)f(\014les)g(are)h(read.)275
+2163 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
+2273 y(Scripts],)25 b(page)e(46\),)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.)275 2408 y(The)32 b(restricted)h(shell)g(mo)s(de)g(is)g(only)
+g(one)g(comp)s(onen)m(t)g(of)g(a)g(useful)f(restricted)i(en)m(vironmen)
+m(t.)49 b(It)150 2517 y(should)22 b(b)s(e)f(accompanied)j(b)m(y)e
+(setting)i Ft(PATH)d Fu(to)j(a)f(v)-5 b(alue)23 b(that)g(allo)m(ws)h
+(execution)f(of)g(only)g(a)g(few)f(v)m(eri\014ed)150
+2627 y(commands)35 b(\(commands)g(that)h(allo)m(w)g(shell)f(escap)s(es)
+h(are)f(particularly)h(vulnerable\),)h(c)m(hanging)f(the)150
+2737 y(curren)m(t)28 b(directory)g(to)h(a)f(non-writable)g(directory)g
+(other)g(than)g Ft($HOME)e Fu(after)j(login,)g(not)f(allo)m(wing)i(the)
+150 2846 y(restricted)25 b(shell)g(to)h(execute)g(shell)f(scripts,)h
+(and)e(cleaning)i(the)f(en)m(vironmen)m(t)h(of)f(v)-5
+b(ariables)25 b(that)g(cause)150 2956 y(some)31 b(commands)f(to)h(mo)s
+(dify)e(their)i(b)s(eha)m(vior)f(\(e.g.,)j Ft(VISUAL)28
+b Fu(or)j Ft(PAGER)p Fu(\).)275 3091 y(Mo)s(dern)e(systems)g(pro)m
+(vide)h(more)g(secure)g(w)m(a)m(ys)g(to)h(implemen)m(t)f(a)g
+(restricted)h(en)m(vironmen)m(t,)f(suc)m(h)150 3201 y(as)h
+Ft(jails)p Fu(,)e Ft(zones)p Fu(,)g(or)h Ft(containers)p
+Fu(.)150 3443 y Fs(6.11)68 b(Bash)45 b(POSIX)f(Mo)t(de)150
+3602 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 3712 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 3821
+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 3957 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 4092 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 4227 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 4362 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 4472 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 4607 y(3.)61 b(Bash)36
+b(will)g(not)g(insert)g(a)g(command)f(without)h(the)g(execute)h(bit)f
+(set)g(in)m(to)h(the)f(command)g(hash)330 4716 y(table,)c(ev)m(en)f(if)
+f(it)h(returns)e(it)i(as)g(a)f(\(last-ditc)m(h\))j(result)d(from)g(a)h
+Ft($PATH)e Fu(searc)m(h.)199 4851 y(4.)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 4961 y(non-zero)31
+b(status)g(is)f(`Done\(status\)'.)199 5095 y(5.)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
+5205 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 5340 y(6.)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.)p
+eop end
+%%Page: 107 113
+TeXDict begin 107 112 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(107)199 299 y(7.)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
+408 y(undergo)30 b(alias)h(expansion.)199 536 y(8.)61
+b(Alias)45 b(expansion)e(is)h(p)s(erformed)f(when)f(initially)k
+(parsing)d(a)h(command)g(substitution.)80 b(The)330 646
+y(default)44 b(mo)s(de)g(generally)h(defers)f(it,)k(when)43
+b(enabled,)48 b(un)m(til)c(the)g(command)g(substitution)g(is)330
+756 y(executed.)77 b(This)42 b(means)g(that)h(command)f(substitution)f
+(will)i(not)g(expand)e(aliases)j(that)f(are)330 865 y(de\014ned)34
+b(after)h(the)g(command)f(substitution)h(is)g(initially)h(parsed)e
+(\(e.g.,)k(as)d(part)f(of)h(a)g(function)330 975 y(de\014nition\).)199
+1103 y(9.)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 1212 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 1322 y(of)31 b(the)f(setting)i(of)e
+(the)h Ft(promptvars)c Fu(option.)154 1450 y(10.)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.)154
+1577 y(11.)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
+1687 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h(on)e(the)h
+(line.)154 1815 y(12.)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 1943 y(13.)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
+2052 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154
+2180 y(14.)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
+2308 y(15.)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 2418 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 2527 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 2655 y(16.)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
+2783 y(17.)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
+2911 y(18.)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 3020 y Ft(function)28
+b Fu(k)m(eyw)m(ord.)154 3148 y(19.)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
+3258 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(25.)154 3386
+y(20.)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 3495 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
+3605 y Fu(v)-5 b(ariable)31 b(con)m(trols)h(the)e(format)h(of)g(the)f
+(timing)h(information.)154 3733 y(21.)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
+3842 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
+3952 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 4061 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
+4189 y(22.)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 4299 y(`)p Ft(-)p Fu('.)154
+4427 y(23.)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 4536 y(ev)m(en)g(if)f(the)h
+Ft(histexpand)d Fu(option)i(is)h(enabled.)154 4664 y(24.)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 4774 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 4883 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 4993 y(command)30 b(name,)h(and)f(so)g(on.)154
+5121 y(25.)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 5230 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 5340 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.)p eop
+end
+%%Page: 108 114
+TeXDict begin 108 113 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(108)154 299 y(26.)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 408 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 518 y(command.)38 b(F)-8 b(or)23 b(an)m(y)g(other)g(simple)
+g(command,)h(the)f(shell)g(ab)s(orts)f(execution)i(of)f(that)g
+(command,)330 628 y(and)44 b(execution)i(con)m(tin)m(ues)g(at)g(the)f
+(top)g(lev)m(el)h(\()p Ft(")p Fu(the)f(shell)h(shall)f(not)g(p)s
+(erform)e(an)m(y)i(further)330 737 y(pro)s(cessing)30
+b(of)h(the)f(command)g(in)g(whic)m(h)h(the)f(error)g(o)s(ccurred)p
+Ft(")p Fu(\).)154 871 y(27.)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 981 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 1115 y(28.)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.)154 1249 y(29.)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
+1358 y(in)m(v)-5 b(alid)31 b(expression.)154 1492 y(30.)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 1626 y(31.)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
+1736 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 1870 y(32.)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
+1979 y(parameters.)154 2113 y(33.)61 b(Expanding)21 b(the)h(`)p
+Ft(*)p Fu(')g(sp)s(ecial)h(parameter)f(in)g(a)g(pattern)h(con)m(text)g
+(where)f(the)g(expansion)g(is)g(double-)330 2223 y(quoted)31
+b(do)s(es)f(not)g(treat)i(the)e Ft($*)g Fu(as)h(if)f(it)h(w)m(ere)g
+(double-quoted.)154 2357 y(34.)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 2466
+y(after)31 b(the)f(builtin)g(completes.)154 2600 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 2710 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 2819 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 2929 y(ceded)31 b(b)m(y)f Ft(command)p Fu(.)154
+3063 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 3173 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 3306 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
+3416 y(without)30 b(the)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154
+3550 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
+3684 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 3794 y(quired)30 b(b)m(y)g Fm(posix)p
+Fu(.)154 3927 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 4061 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 4171 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 4281 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
+4390 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 4524 y(42.)61 b Ft(trap)29 b(-p)35
+b Fu(displa)m(ys)h(signals)h(whose)f(disp)s(ositions)f(are)h(set)h(to)f
+(SIG)p 2687 4524 28 4 v 40 w(DFL)g(and)g(those)g(that)g(w)m(ere)330
+4634 y(ignored)30 b(when)g(the)g(shell)h(started.)154
+4768 y(43.)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 4877 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 5011 y(44.)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 5121 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
+5230 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 5340 y Fu(option)31 b(in)f(suc)m(h)g(subshells.)p
+eop end
+%%Page: 109 115
+TeXDict begin 109 114 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(109)154 299 y(45.)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 408 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 518 y(error)g(message.)154
+662 y(46.)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 771 y(leading)31 b(`)p Ft(alias)e Fu(')i(unless)f(the)g
+Ft(-p)g Fu(option)h(is)f(supplied.)154 915 y(47.)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
+1025 y(names)30 b(and)g(de\014nitions.)154 1169 y(48.)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 1278 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 1388 y(c)m(haracters.)154
+1532 y(49.)61 b(When)35 b(the)h Ft(cd)e Fu(builtin)h(is)h(in)m(v)m(ok)m
+(ed)g(in)f(logical)j(mo)s(de,)e(and)f(the)h(pathname)f(constructed)g
+(from)330 1641 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
+1751 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(ph)m(ysical)g(mo)s(de.)154
+1895 y(50.)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 2004 y(constructed)27 b(from)g Ft($PWD)f
+Fu(and)h(the)g(directory)h(name)f(supplied)f(as)i(an)f(argumen)m(t)g
+(exceeds)h Ft(PATH_)330 2114 y(MAX)d Fu(when)g(all)h(sym)m(b)s(olic)g
+(links)g(are)g(expanded,)g Ft(cd)f Fu(will)h(fail)h(instead)f(of)g
+(attempting)h(to)f(use)g(only)330 2224 y(the)31 b(supplied)e(directory)
+i(name.)154 2367 y(51.)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
+2477 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
+2621 y(52.)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 2730 y(not)d(a)f(history)h(en)m
+(try)f(has)g(b)s(een)g(mo)s(di\014ed.)154 2874 y(53.)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 3018 y(54.)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
+3128 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 3237 y(found)i(in)h Ft($PATH)p Fu(.)154
+3381 y(55.)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 3491 y(instead)e(of)f(c)m(hec)m
+(king)i Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 3634
+y(56.)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
+3744 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 3854 y(con)m(v)m(erted.)154
+3998 y(57.)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 4141 y(58.)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 4251 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 4361 y(c)m(hild)31 b(that)g(exits.)154
+4504 y(59.)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 4614 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
+4724 y Fu(returns)29 b(an)h(exit)i(status)e(greater)i(than)e(128.)154
+4867 y(60.)61 b(The)33 b Ft(printf)f Fu(builtin)i(uses)f
+Ft(double)f Fu(\(via)j Ft(strtod)p Fu(\))d(to)j(con)m(v)m(ert)g
+(argumen)m(ts)f(corresp)s(onding)f(to)330 4977 y(\015oating)40
+b(p)s(oin)m(t)f(con)m(v)m(ersion)h(sp)s(eci\014ers,)h(instead)e(of)g
+Ft(long)29 b(double)38 b Fu(if)h(it's)g(a)m(v)-5 b(ailable.)69
+b(The)39 b(`)p Ft(L)p Fu(')330 5087 y(length)31 b(mo)s(di\014er)e
+(forces)i Ft(printf)e Fu(to)i(use)f Ft(long)f(double)g
+Fu(if)h(it's)h(a)m(v)-5 b(ailable.)154 5230 y(61.)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
+5340 y(the)k Ft(wait)e Fu(builtin)h(is)g(used)g(to)h(obtain)g(it.)p
+eop end
+%%Page: 110 116
+TeXDict begin 110 115 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(110)275 299 y(There)34
+b(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
+408 y Fm(posix)d Fu(mo)s(de.)40 b(Sp)s(eci\014cally:)199
+549 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 658 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 796 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 905 y(to)j(b)s(e)f(fully)g(conforman)m(t.)275
+1073 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 1183 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 1292 y(page)31 b(161\).)150
+1542 y Fs(6.12)68 b(Shell)46 b(Compatibilit)l(y)h(Mo)t(de)150
+1701 y Fu(Bash-4.0)33 b(in)m(tro)s(duced)f(the)f(concept)i(of)f(a)g
+Fr(shell)g(compatibilit)m(y)i(lev)m(el)p Fu(,)g(sp)s(eci\014ed)d(as)h
+(a)g(set)h(of)f(options)150 1811 y(to)f(the)f(shopt)g(builtin)g(\()p
+Ft(compat31)p Fu(,)e Ft(compat32)p Fu(,)h Ft(compat40)p
+Fu(,)f Ft(compat41)p Fu(,)g(and)i(so)g(on\).)41 b(There)30
+b(is)g(only)150 1920 y(one)f(curren)m(t)f(compatibilit)m(y)j(lev)m(el)f
+({)f(eac)m(h)h(option)f(is)g(m)m(utually)g(exclusiv)m(e.)41
+b(The)28 b(compatibilit)m(y)j(lev)m(el)150 2030 y(is)39
+b(in)m(tended)g(to)h(allo)m(w)g(users)e(to)i(select)h(b)s(eha)m(vior)e
+(from)f(previous)h(v)m(ersions)g(that)h(is)f(incompatible)150
+2139 y(with)d(new)m(er)g(v)m(ersions)g(while)g(they)g(migrate)h
+(scripts)f(to)h(use)f(curren)m(t)f(features)i(and)e(b)s(eha)m(vior.)58
+b(It's)150 2249 y(in)m(tended)30 b(to)h(b)s(e)f(a)h(temp)s(orary)f
+(solution.)275 2389 y(This)k(section)j(do)s(es)e(not)h(men)m(tion)g(b)s
+(eha)m(vior)g(that)g(is)f(standard)g(for)g(a)h(particular)g(v)m(ersion)
+g(\(e.g.,)150 2499 y(setting)d Ft(compat32)c Fu(means)i(that)i(quoting)
+e(the)h(rhs)f(of)g(the)h(regexp)g(matc)m(hing)h(op)s(erator)e(quotes)h
+(sp)s(e-)150 2608 y(cial)39 b(regexp)e(c)m(haracters)i(in)e(the)g(w)m
+(ord,)i(whic)m(h)e(is)g(default)h(b)s(eha)m(vior)f(in)g(bash-3.2)h(and)
+f(subsequen)m(t)150 2718 y(v)m(ersions\).)275 2858 y(If)29
+b(a)h(user)f(enables,)h(sa)m(y)-8 b(,)31 b Ft(compat32)p
+Fu(,)d(it)i(ma)m(y)g(a\013ect)h(the)f(b)s(eha)m(vior)g(of)g(other)g
+(compatibilit)m(y)h(lev)m(els)150 2968 y(up)23 b(to)h(and)f(including)h
+(the)g(curren)m(t)f(compatibilit)m(y)j(lev)m(el.)41 b(The)23
+b(idea)h(is)g(that)g(eac)m(h)h(compatibilit)m(y)h(lev)m(el)150
+3077 y(con)m(trols)35 b(b)s(eha)m(vior)f(that)g(c)m(hanged)g(in)f(that)
+h(v)m(ersion)g(of)g(Bash,)h(but)e(that)h(b)s(eha)m(vior)g(ma)m(y)g(ha)m
+(v)m(e)h(b)s(een)150 3187 y(presen)m(t)f(in)g(earlier)g(v)m(ersions.)52
+b(F)-8 b(or)35 b(instance,)g(the)f(c)m(hange)h(to)g(use)f(lo)s
+(cale-based)h(comparisons)f(with)150 3296 y(the)e Ft([[)f
+Fu(command)g(came)h(in)g(bash-4.1,)h(and)d(earlier)j(v)m(ersions)f
+(used)f(ASCI)s(I-based)f(comparisons,)i(so)150 3406 y(enabling)27
+b Ft(compat32)e Fu(will)i(enable)g(ASCI)s(I-based)e(comparisons)i(as)g
+(w)m(ell.)41 b(That)26 b(gran)m(ularit)m(y)i(ma)m(y)g(not)150
+3515 y(b)s(e)i(su\016cien)m(t)i(for)f(all)g(uses,)g(and)g(as)g(a)g
+(result)g(users)f(should)g(emplo)m(y)i(compatibilit)m(y)h(lev)m(els)g
+(carefully)-8 b(.)150 3625 y(Read)31 b(the)f(do)s(cumen)m(tation)h(for)
+g(a)f(particular)h(feature)g(to)g(\014nd)e(out)h(the)h(curren)m(t)f(b)s
+(eha)m(vior.)275 3765 y(Bash-4.3)44 b(in)m(tro)s(duced)e(a)h(new)f
+(shell)h(v)-5 b(ariable:)65 b Ft(BASH_COMPAT)p Fu(.)75
+b(The)42 b(v)-5 b(alue)43 b(assigned)g(to)g(this)150
+3875 y(v)-5 b(ariable)32 b(\(a)g(decimal)h(v)m(ersion)e(n)m(um)m(b)s
+(er)f(lik)m(e)j(4.2,)g(or)e(an)h(in)m(teger)g(corresp)s(onding)f(to)h
+(the)f Ft(compat)p Fr(NN)150 3984 y Fu(option,)g(lik)m(e)h(42\))f
+(determines)g(the)f(compatibilit)m(y)j(lev)m(el.)275
+4125 y(Starting)e(with)g(bash-4.4,)h(Bash)f(has)g(b)s(egun)f
+(deprecating)h(older)h(compatibilit)m(y)h(lev)m(els.)44
+b(Ev)m(en)m(tu-)150 4234 y(ally)-8 b(,)32 b(the)e(options)h(will)g(b)s
+(e)f(remo)m(v)m(ed)h(in)f(fa)m(v)m(or)i(of)e Ft(BASH_COMPAT)p
+Fu(.)275 4374 y(Bash-5.0)36 b(is)f(the)g(\014nal)f(v)m(ersion)i(for)e
+(whic)m(h)h(there)g(will)g(b)s(e)f(an)h(individual)f(shopt)h(option)g
+(for)g(the)150 4484 y(previous)30 b(v)m(ersion.)41 b(Users)30
+b(should)g(use)g Ft(BASH_COMPAT)d Fu(on)j(bash-5.0)h(and)f(later)i(v)m
+(ersions.)275 4624 y(The)24 b(follo)m(wing)i(table)g(describ)s(es)e
+(the)i(b)s(eha)m(vior)f(c)m(hanges)h(con)m(trolled)g(b)m(y)f(eac)m(h)h
+(compatibilit)m(y)h(lev)m(el)150 4734 y(setting.)43 b(The)30
+b Ft(compat)p Fr(NN)39 b Fu(tag)32 b(is)f(used)f(as)h(shorthand)e(for)h
+(setting)i(the)f(compatibilit)m(y)i(lev)m(el)f(to)g Fr(NN)150
+4843 y Fu(using)37 b(one)h(of)g(the)g(follo)m(wing)h(mec)m(hanisms.)63
+b(F)-8 b(or)39 b(v)m(ersions)f(prior)f(to)h(bash-5.0,)j(the)d
+(compatibilit)m(y)150 4953 y(lev)m(el)d(ma)m(y)f(b)s(e)e(set)i(using)e
+(the)i(corresp)s(onding)e Ft(compat)p Fr(NN)41 b Fu(shopt)33
+b(option.)50 b(F)-8 b(or)34 b(bash-4.3)f(and)g(later)150
+5062 y(v)m(ersions,)40 b(the)e Ft(BASH_COMPAT)d Fu(v)-5
+b(ariable)39 b(is)e(preferred,)i(and)e(it)i(is)f(required)f(for)g
+(bash-5.1)i(and)e(later)150 5172 y(v)m(ersions.)150 5340
+y Ft(compat31)p eop end
+%%Page: 111 117
+TeXDict begin 111 116 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(111)705 299 y Fq(\017)60
+b Fu(quoting)34 b(the)g(rhs)e(of)i(the)f Ft([[)g Fu(command's)h(regexp)
+f(matc)m(hing)i(op)s(erator)f(\(=)p Ft(~)p Fu(\))f(has)810
+408 y(no)d(sp)s(ecial)h(e\013ect)150 568 y Ft(compat32)705
+702 y Fq(\017)60 b Fu(in)m(terrupting)28 b(a)g(command)g(list)h(suc)m
+(h)f(as)g Ft(")p Fu(a)g(;)h(b)f(;)h(c)p Ft(")f Fu(causes)h(the)f
+(execution)h(of)g(the)810 812 y(next)j(command)f(in)g(the)h(list)g
+(\(in)f(bash-4.0)h(and)f(later)i(v)m(ersions,)f(the)g(shell)f(acts)i
+(as)810 922 y(if)i(it)i(receiv)m(ed)f(the)g(in)m(terrupt,)h(so)f(in)m
+(terrupting)f(one)h(command)f(in)g(a)h(list)g(ab)s(orts)810
+1031 y(the)31 b(execution)g(of)g(the)f(en)m(tire)i(list\))150
+1191 y Ft(compat40)705 1325 y Fq(\017)60 b Fu(the)35
+b(`)p Ft(<)p Fu(')g(and)f(`)p Ft(>)p Fu(')g(op)s(erators)h(to)g(the)g
+Ft([[)f Fu(command)h(do)f(not)h(consider)f(the)h(curren)m(t)810
+1435 y(lo)s(cale)41 b(when)d(comparing)i(strings;)k(they)c(use)f(ASCI)s
+(I)f(ordering.)67 b(Bash)40 b(v)m(ersions)810 1544 y(prior)f(to)i
+(bash-4.1)f(use)g(ASCI)s(I)e(collation)k(and)d(strcmp\(3\);)45
+b(bash-4.1)c(and)e(later)810 1654 y(use)30 b(the)h(curren)m(t)f(lo)s
+(cale's)i(collation)h(sequence)d(and)g(strcoll\(3\).)150
+1813 y Ft(compat41)705 1948 y Fq(\017)60 b Fu(in)29 b(p)s(osix)f(mo)s
+(de,)i Ft(time)e Fu(ma)m(y)h(b)s(e)g(follo)m(w)m(ed)i(b)m(y)e(options)g
+(and)g(still)h(b)s(e)e(recognized)j(as)810 2057 y(a)g(reserv)m(ed)f(w)m
+(ord)g(\(this)h(is)f Fm(posix)g Fu(in)m(terpretation)i(267\))705
+2192 y Fq(\017)60 b Fu(in)37 b(p)s(osix)f(mo)s(de,)i(the)g(parser)e
+(requires)g(that)i(an)f(ev)m(en)g(n)m(um)m(b)s(er)f(of)h(single)g
+(quotes)810 2301 y(o)s(ccur)28 b(in)g(the)h Fr(w)m(ord)i
+Fu(p)s(ortion)d(of)h(a)g(double-quoted)f($)p Fi({)6 b
+Fu(.)23 b(.)f(.)11 b Fi(})29 b Fu(parameter)g(expansion)810
+2411 y(and)34 b(treats)h(them)f(sp)s(ecially)-8 b(,)37
+b(so)e(that)g(c)m(haracters)g(within)f(the)h(single)g(quotes)g(are)810
+2521 y(considered)30 b(quoted)h(\(this)f(is)h Fm(posix)e
+Fu(in)m(terpretation)j(221\))150 2680 y Ft(compat42)705
+2814 y Fq(\017)60 b Fu(the)29 b(replacemen)m(t)i(string)e(in)g
+(double-quoted)h(pattern)f(substitution)g(do)s(es)g(not)h(un-)810
+2924 y(dergo)h(quote)g(remo)m(v)-5 b(al,)32 b(as)e(it)h(do)s(es)f(in)g
+(v)m(ersions)h(after)g(bash-4.2)705 3059 y Fq(\017)60
+b Fu(in)39 b(p)s(osix)g(mo)s(de,)j(single)e(quotes)g(are)g(considered)f
+(sp)s(ecial)h(when)f(expanding)g(the)810 3168 y Fr(w)m(ord)d
+Fu(p)s(ortion)c(of)g(a)h(double-quoted)g($)p Fi({)6 b
+Fu(.)22 b(.)h(.)11 b Fi(})33 b Fu(parameter)g(expansion)f(and)g(can)h
+(b)s(e)810 3278 y(used)40 b(to)i(quote)g(a)f(closing)h(brace)f(or)g
+(other)h(sp)s(ecial)f(c)m(haracter)i(\(this)e(is)g(part)g(of)810
+3387 y Fm(posix)36 b Fu(in)m(terpretation)h(221\);)42
+b(in)36 b(later)h(v)m(ersions,)h(single)f(quotes)g(are)g(not)f(sp)s
+(ecial)810 3497 y(within)30 b(double-quoted)g(w)m(ord)g(expansions)150
+3656 y Ft(compat43)705 3791 y Fq(\017)60 b Fu(the)31
+b(shell)g(do)s(es)g(not)g(prin)m(t)f(a)h(w)m(arning)g(message)h(if)f
+(an)g(attempt)h(is)f(made)f(to)i(use)f(a)810 3900 y(quoted)36
+b(comp)s(ound)e(assignmen)m(t)i(as)g(an)g(argumen)m(t)g(to)g(declare)h
+(\(e.g.,)i(declare)d(-a)810 4010 y(fo)s(o='\(1)31 b(2\)'\).)42
+b(Later)31 b(v)m(ersions)g(w)m(arn)f(that)h(this)f(usage)h(is)g
+(deprecated)705 4144 y Fq(\017)60 b Fu(w)m(ord)21 b(expansion)g(errors)
+g(are)h(considered)f(non-fatal)h(errors)f(that)h(cause)g(the)f(curren)m
+(t)810 4254 y(command)k(to)g(fail,)i(ev)m(en)e(in)g(p)s(osix)f(mo)s(de)
+h(\(the)g(default)g(b)s(eha)m(vior)g(is)g(to)g(mak)m(e)h(them)810
+4364 y(fatal)32 b(errors)d(that)i(cause)g(the)g(shell)f(to)i(exit\))705
+4498 y Fq(\017)60 b Fu(when)37 b(executing)i(a)g(shell)f(function,)i
+(the)f(lo)s(op)f(state)h(\(while/un)m(til/etc.\))68 b(is)38
+b(not)810 4608 y(reset,)c(so)g Ft(break)d Fu(or)i Ft(continue)e
+Fu(in)h(that)i(function)f(will)g(break)g(or)g(con)m(tin)m(ue)h(lo)s
+(ops)810 4717 y(in)h(the)g(calling)h(con)m(text.)57 b(Bash-4.4)37
+b(and)d(later)i(reset)g(the)f(lo)s(op)g(state)i(to)e(prev)m(en)m(t)810
+4827 y(this)150 4986 y Ft(compat44)705 5121 y Fq(\017)60
+b Fu(the)41 b(shell)g(sets)g(up)e(the)i(v)-5 b(alues)41
+b(used)f(b)m(y)h Ft(BASH_ARGV)d Fu(and)i Ft(BASH_ARGC)e
+Fu(so)j(they)810 5230 y(can)26 b(expand)f(to)h(the)g(shell's)g(p)s
+(ositional)g(parameters)g(ev)m(en)h(if)e(extended)h(debugging)810
+5340 y(mo)s(de)k(is)g(not)h(enabled)p eop end
+%%Page: 112 118
+TeXDict begin 112 117 bop 150 -116 a Fu(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2439 b(112)705 299 y Fq(\017)60
+b Fu(a)40 b(subshell)f(inherits)g(lo)s(ops)h(from)g(its)g(paren)m(t)g
+(con)m(text,)k(so)c Ft(break)e Fu(or)i Ft(continue)810
+408 y Fu(will)35 b(cause)g(the)f(subshell)f(to)i(exit.)54
+b(Bash-5.0)36 b(and)d(later)j(reset)f(the)f(lo)s(op)h(state)g(to)810
+518 y(prev)m(en)m(t)c(the)g(exit)705 653 y Fq(\017)60
+b Fu(v)-5 b(ariable)28 b(assignmen)m(ts)h(preceding)f(builtins)f(lik)m
+(e)i Ft(export)d Fu(and)h Ft(readonly)e Fu(that)j(set)810
+762 y(attributes)37 b(con)m(tin)m(ue)h(to)g(a\013ect)g(v)-5
+b(ariables)37 b(with)g(the)f(same)h(name)g(in)g(the)f(calling)810
+872 y(en)m(vironmen)m(t)31 b(ev)m(en)g(if)f(the)h(shell)g(is)f(not)h
+(in)f(p)s(osix)f(mo)s(de)150 1031 y Ft(compat50)f(\(set)h(using)g
+(BASH_COMPAT\))705 1141 y Fq(\017)60 b Fu(Bash-5.1)29
+b(c)m(hanged)g(the)f(w)m(a)m(y)g Ft($RANDOM)e Fu(is)i(generated)h(to)f
+(in)m(tro)s(duce)g(sligh)m(tly)h(more)810 1250 y(randomness.)39
+b(If)30 b(the)f(shell)h(compatibilit)m(y)i(lev)m(el)f(is)f(set)g(to)h
+(50)f(or)g(lo)m(w)m(er,)h(it)f(rev)m(erts)810 1360 y(to)e(the)g(metho)s
+(d)f(from)g(bash-5.0)h(and)f(previous)g(v)m(ersions,)i(so)e(seeding)h
+(the)g(random)810 1469 y(n)m(um)m(b)s(er)36 b(generator)j(b)m(y)e
+(assigning)h(a)g(v)-5 b(alue)38 b(to)g Ft(RANDOM)e Fu(will)i(pro)s
+(duce)e(the)i(same)810 1579 y(sequence)31 b(as)f(in)g(bash-5.0)705
+1714 y Fq(\017)60 b Fu(If)22 b(the)g(command)g(hash)f(table)i(is)f
+(empt)m(y)-8 b(,)25 b(Bash)d(v)m(ersions)g(prior)g(to)h(bash-5.1)f
+(prin)m(ted)810 1823 y(an)29 b(informational)i(message)g(to)f(that)g
+(e\013ect,)h(ev)m(en)g(when)d(pro)s(ducing)g(output)h(that)810
+1933 y(can)40 b(b)s(e)g(reused)f(as)h(input.)69 b(Bash-5.1)42
+b(suppresses)c(that)j(message)g(when)e(the)i Ft(-l)810
+2042 y Fu(option)31 b(is)f(supplied.)150 2202 y Ft(compat51)e(\(set)h
+(using)g(BASH_COMPAT\))705 2311 y Fq(\017)60 b Fu(The)38
+b Ft(unset)g Fu(builtin)g(will)h(unset)f(the)h(arra)m(y)g
+Ft(a)g Fu(giv)m(en)g(an)g(argumen)m(t)g(lik)m(e)h(`)p
+Ft(a[@])p Fu('.)810 2421 y(Bash-5.2)32 b(will)f(unset)f(an)g(elemen)m
+(t)i(with)e(k)m(ey)i(`)p Ft(@)p Fu(')e(\(asso)s(ciativ)m(e)k(arra)m
+(ys\))d(or)f(remo)m(v)m(e)810 2531 y(all)h(the)g(elemen)m(ts)h(without)
+e(unsetting)g(the)h(arra)m(y)g(\(indexed)f(arra)m(ys\))705
+2665 y Fq(\017)60 b Fu(arithmetic)36 b(commands)e(\()h(\(\(...\)\))55
+b(\))f(and)34 b(the)g(expressions)h(in)f(an)g(arithmetic)i(for)810
+2775 y(statemen)m(t)c(can)f(b)s(e)f(expanded)f(more)i(than)f(once)705
+2909 y Fq(\017)60 b Fu(expressions)22 b(used)g(as)h(argumen)m(ts)g(to)h
+(arithmetic)f(op)s(erators)g(in)g(the)g Ft([[)f Fu(conditional)810
+3019 y(command)30 b(can)h(b)s(e)f(expanded)f(more)i(than)f(once)705
+3153 y Fq(\017)60 b Fu(the)35 b(expressions)g(in)g(substring)e
+(parameter)j(brace)f(expansion)g(can)g(b)s(e)g(expanded)810
+3263 y(more)c(than)f(once)705 3397 y Fq(\017)60 b Fu(the)39
+b(expressions)f(in)g(the)h($\(\()h(...)66 b(\)\))f(w)m(ord)39
+b(expansion)f(can)h(b)s(e)f(expanded)g(more)810 3507
+y(than)30 b(once)705 3641 y Fq(\017)60 b Fu(arithmetic)36
+b(expressions)f(used)f(as)h(indexed)f(arra)m(y)i(subscripts)d(can)i(b)s
+(e)g(expanded)810 3751 y(more)c(than)f(once)705 3885
+y Fq(\017)60 b Ft(test)29 b(-v)p Fu(,)35 b(when)f(giv)m(en)h(an)g
+(argumen)m(t)g(of)f(`)p Ft(A[@])p Fu(',)h(where)f Fr(A)h
+Fu(is)f(an)h(existing)g(asso-)810 3995 y(ciativ)m(e)h(arra)m(y)-8
+b(,)37 b(will)d(return)f(true)g(if)h(the)h(arra)m(y)f(has)g(an)m(y)g
+(set)g(elemen)m(ts.)53 b(Bash-5.2)810 4105 y(will)31
+b(lo)s(ok)g(for)f(and)g(rep)s(ort)f(on)i(a)f(k)m(ey)i(named)d(`)p
+Ft(@)p Fu(')705 4239 y Fq(\017)60 b Fu(the)40 b($)p Fi({)p
+Fr(parameter)7 b Fu([:]=)p Fr(v)-5 b(alue)5 b Fi(})42
+b Fu(w)m(ord)e(expansion)f(will)i(return)d Fr(v)-5 b(alue)p
+Fu(,)43 b(b)s(efore)d(an)m(y)810 4349 y(v)-5 b(ariable-sp)s(eci\014c)34
+b(transformations)f(ha)m(v)m(e)h(b)s(een)e(p)s(erformed)f(\(e.g.,)36
+b(con)m(v)m(erting)e(to)810 4458 y(lo)m(w)m(ercase\).)43
+b(Bash-5.2)32 b(will)f(return)e(the)i(\014nal)f(v)-5
+b(alue)31 b(assigned)f(to)i(the)e(v)-5 b(ariable.)705
+4593 y Fq(\017)60 b Fu(P)m(arsing)37 b(command)f(substitutions)g(will)g
+(b)s(eha)m(v)m(e)h(as)g(if)f(extended)g(glob)h(\(see)g(Sec-)810
+4702 y(tion)30 b(4.3.2)h([The)f(Shopt)f(Builtin],)h(page)h(71\))f(is)g
+(enabled,)g(so)g(that)g(parsing)f(a)h(com-)810 4812 y(mand)38
+b(substitution)g(con)m(taining)i(an)f(extglob)h(pattern)f(\(sa)m(y)-8
+b(,)42 b(as)d(part)g(of)g(a)g(shell)810 4922 y(function\))30
+b(will)h(not)g(fail.)41 b(This)30 b(assumes)g(the)h(in)m(ten)m(t)g(is)g
+(to)g(enable)g(extglob)g(b)s(efore)810 5031 y(the)i(command)f(is)g
+(executed)h(and)f(w)m(ord)g(expansions)g(are)h(p)s(erformed.)45
+b(It)33 b(will)f(fail)810 5141 y(at)42 b(w)m(ord)f(expansion)h(time)g
+(if)f(extglob)i(hasn't)e(b)s(een)g(enabled)h(b)m(y)f(the)h(time)g(the)
+810 5250 y(command)30 b(is)h(executed.)p eop end
+%%Page: 113 119
+TeXDict begin 113 118 bop 3614 -116 a Fu(113)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: 114 120
+TeXDict begin 114 119 bop 150 -116 a Fu(Chapter)30 b(7:)41
+b(Job)30 b(Con)m(trol)2526 b(114)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)g(that)j(app)s
+(ears)e(in)g(its)h(command)f(line.)69 b(F)-8 b(or)41
+b(example,)i(`)p Ft(\045ce)p Fu(')c(refers)g(to)i(a)f(stopp)s(ed)e(job)
+150 518 y(whose)30 b(command)g(name)g(b)s(egins)g(with)g(`)p
+Ft(ce)p Fu('.)40 b(Using)31 b(`)p Ft(\045?ce)p Fu(',)f(on)g(the)g
+(other)h(hand,)e(refers)h(to)h(an)m(y)f(job)150 628 y(con)m(taining)e
+(the)e(string)h(`)p Ft(ce)p Fu(')f(in)g(its)h(command)f(line.)40
+b(If)26 b(the)g(pre\014x)g(or)g(substring)f(matc)m(hes)j(more)e(than)
+150 737 y(one)31 b(job,)f(Bash)g(rep)s(orts)g(an)g(error.)275
+869 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 978 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 1088 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
+1219 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 1329 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 1439 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 1548 y(immediately)d(\(see)g(Section)g(4.3.1)g([The)f(Set)g
+(Builtin],)i(page)f(67\).)40 b(An)m(y)24 b(trap)f(on)h
+Ft(SIGCHLD)e Fu(is)i(executed)150 1658 y(for)30 b(eac)m(h)i(c)m(hild)e
+(pro)s(cess)g(that)h(exits.)275 1789 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 1899 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(71\),)i(the)e(shell)f(prin)m(ts)g(a)h(w)m(arning)150
+2009 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 2118 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 2228
+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
+2337 y(jobs)c(are)h(terminated.)275 2469 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
+2578 y(enabled,)i Ft(wait)f Fu(will)g(return)g(when)f(the)i(job)f(c)m
+(hanges)h(state.)51 b(The)33 b Ft(-f)g Fu(option)h(causes)f
+Ft(wait)g Fu(to)h(w)m(ait)150 2688 y(un)m(til)d(the)f(job)g(or)h(pro)s
+(cess)f(terminates)h(b)s(efore)f(returning.)150 2923
+y Fs(7.2)68 b(Job)45 b(Con)l(trol)h(Builtins)150 3104
+y Ft(bg)870 3236 y(bg)h([)p Fj(jobspec)f Ft(...)o(])630
+3367 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 3477 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
+3586 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
+3696 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 3806 y(without)e(job)g(con)m(trol.)150
+3959 y Ft(fg)870 4091 y(fg)47 b([)p Fj(jobspec)p Ft(])630
+4222 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 4332 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 4441 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
+4551 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
+4660 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 4814 y Ft(jobs)870 4945 y(jobs)47
+b([-lnprs])e([)p Fj(jobspec)p Ft(])870 5055 y(jobs)i(-x)g
+Fj(command)f Ft([)p Fj(arguments)p Ft(])630 5187 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: 115 121
+TeXDict begin 115 120 bop 150 -116 a Fu(Chapter)30 b(7:)41
+b(Job)30 b(Con)m(trol)2526 b(115)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
+731 y Ft(-r)384 b Fu(Displa)m(y)32 b(only)e(running)f(jobs.)630
+892 y Ft(-s)384 b Fu(Displa)m(y)32 b(only)e(stopp)s(ed)f(jobs.)630
+1053 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 1163 y Fu(is)30 b(not)h(supplied,)e(the)i
+(status)g(of)f(all)h(jobs)f(is)h(listed.)630 1298 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
+1408 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 1517 y(passing)30 b(it)h Fr(argumen)m(t)r Fu(s,)g(returning)f
+(its)g(exit)i(status.)150 1678 y Ft(kill)870 1814 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 1923
+y Ft(kill)g(-l|-L)f([)p Fj(exit_status)p Ft(])630 2059
+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 2168 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 2278 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 2388 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 2497 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 2607 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
+2716 y(the)c(return)f(status)h(is)g(zero.)41 b Fr(exit)p
+1796 2716 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 2826
+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 2935 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 3045 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 3206 y Ft(wait)870 3342 y(wait)47
+b([-fn])f([-p)h Fj(varname)p Ft(])e([)p Fj(jobspec)h
+Ft(or)h Fj(pid)g Ft(...)o(])630 3477 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 3587 y Fr(jobsp)s(ec)40 b Fu(exits)35
+b(and)f(return)g(the)g(exit)i(status)f(of)g(the)g(last)g(command)f(w)m
+(aited)i(for.)53 b(If)35 b(a)630 3696 y(job)g(sp)s(ec)f(is)h(giv)m(en,)
+i(all)f(pro)s(cesses)f(in)f(the)h(job)g(are)g(w)m(aited)h(for.)54
+b(If)35 b(no)f(argumen)m(ts)i(are)630 3806 y(giv)m(en,)28
+b Ft(wait)c Fu(w)m(aits)j(for)e(all)i(running)c(bac)m(kground)j(jobs)f
+(and)g(the)h(last-executed)h(pro)s(cess)630 3915 y(substitution,)37
+b(if)f(its)g(pro)s(cess)f(id)h(is)f(the)h(same)g(as)g
+Fr($!)p Fu(,)i(and)d(the)h(return)f(status)h(is)g(zero.)630
+4025 y(If)h(the)h Ft(-n)f Fu(option)h(is)f(supplied,)i
+Ft(wait)d Fu(w)m(aits)j(for)e(a)h(single)g(job)f(from)h(the)f(list)i
+(of)e Fr(pid)t Fu(s)630 4134 y(or)31 b Fr(jobsp)s(ec)6
+b Fu(s)30 b(or,)i(if)f(no)g(argumen)m(ts)h(are)f(supplied,)g(an)m(y)g
+(job,)h(to)g(complete)h(and)d(returns)630 4244 y(its)36
+b(exit)h(status.)56 b(If)35 b(none)h(of)g(the)g(supplied)e(argumen)m
+(ts)i(is)f(a)h(c)m(hild)g(of)g(the)g(shell,)h(or)f(if)630
+4354 y(no)31 b(argumen)m(ts)g(are)g(supplied)f(and)g(the)h(shell)g(has)
+g(no)f(un)m(w)m(aited-for)i(c)m(hildren,)f(the)g(exit)630
+4463 y(status)k(is)g(127.)55 b(If)34 b(the)h Ft(-p)g
+Fu(option)g(is)g(supplied,)f(the)h(pro)s(cess)g(or)f(job)h(iden)m
+(ti\014er)g(of)g(the)630 4573 y(job)j(for)g(whic)m(h)f(the)i(exit)g
+(status)f(is)g(returned)f(is)h(assigned)h(to)g(the)f(v)-5
+b(ariable)39 b Fr(v)-5 b(arname)630 4682 y Fu(named)29
+b(b)m(y)f(the)i(option)f(argumen)m(t.)41 b(The)28 b(v)-5
+b(ariable)30 b(will)g(b)s(e)e(unset)h(initially)-8 b(,)31
+b(b)s(efore)e(an)m(y)630 4792 y(assignmen)m(t.)76 b(This)41
+b(is)h(useful)f(only)h(when)f(the)h Ft(-n)f Fu(option)i(is)f(supplied.)
+74 b(Supplying)630 4902 y(the)31 b Ft(-f)g Fu(option,)g(when)f(job)h
+(con)m(trol)i(is)e(enabled,)g(forces)g Ft(wait)f Fu(to)i(w)m(ait)g(for)
+f(eac)m(h)h Fr(pid)i Fu(or)630 5011 y Fr(jobsp)s(ec)40
+b Fu(to)d(terminate)f(b)s(efore)f(returning)g(its)h(status,)h(instead)f
+(of)f(returning)g(when)f(it)630 5121 y(c)m(hanges)j(status.)58
+b(If)35 b(neither)h Fr(jobsp)s(ec)41 b Fu(nor)36 b Fr(pid)i
+Fu(sp)s(eci\014es)e(an)g(activ)m(e)i(c)m(hild)e(pro)s(cess)g(of)630
+5230 y(the)28 b(shell,)h(the)e(return)g(status)h(is)g(127.)41
+b(If)27 b Ft(wait)g Fu(is)g(in)m(terrupted)g(b)m(y)h(a)g(signal,)h(the)
+f(return)630 5340 y(status)j(will)f(b)s(e)g(greater)i(than)e(128,)i(as)
+e(describ)s(ed)g(ab)s(o)m(v)m(e)h(\(see)h(Section)f(3.7.6)h([Signals],)
+p eop end
+%%Page: 116 122
+TeXDict begin 116 121 bop 150 -116 a Fu(Chapter)30 b(7:)41
+b(Job)30 b(Con)m(trol)2526 b(116)630 299 y(page)33 b(45\).)48
+b(Otherwise,)32 b(the)h(return)e(status)i(is)f(the)g(exit)i(status)e
+(of)h(the)f(last)h(pro)s(cess)f(or)630 408 y(job)e(w)m(aited)h(for.)150
+568 y Ft(disown)870 702 y(disown)46 b([-ar])g([-h])h([)p
+Fj(jobspec)f Ft(...)h(|)g Fj(pid)g Ft(...)g(])630 837
+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 946 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 1056 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
+1166 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 1275 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 1385 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.)150
+1544 y Ft(suspend)870 1679 y(suspend)46 b([-f])630 1813
+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 1923 y(shell,)25 b(or)f(a)g(shell)f(without)h(job)f(con)m
+(trol)i(enabled,)g(cannot)f(b)s(e)f(susp)s(ended;)h(the)g
+Ft(-f)e Fu(option)630 2032 y(can)35 b(b)s(e)g(used)f(to)i(o)m(v)m
+(erride)g(this)f(and)f(force)i(the)f(susp)s(ension.)53
+b(The)34 b(return)g(status)h(is)h(0)630 2142 y(unless)43
+b(the)g(shell)h(is)f(a)h(login)g(shell)g(or)f(job)g(con)m(trol)i(is)e
+(not)h(enabled)f(and)g Ft(-f)f Fu(is)i(not)630 2252 y(supplied.)275
+2411 y(When)30 b(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 2521 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
+2761 y Fs(7.3)68 b(Job)45 b(Con)l(trol)h(V)-11 b(ariables)150
+2946 y Ft(auto_resume)630 3055 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 3165 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 3274 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 3384 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 3494 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 3603
+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 3713 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 3822 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 3932 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
+4042 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(113\).)56
+b(If)34 b(set)i(to)g(an)m(y)630 4151 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 4261 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: 117 123
+TeXDict begin 117 122 bop 3614 -116 a Fu(117)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(55\).)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
+(67\),)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(120\).)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: 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)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)c(on)g(y)m(our)g
+(con\014guration,)h(the)f Ft(Backspace)d Fu(k)m(ey)k(migh)m(t)g(b)s(e)e
+(set)i(to)g(delete)g(the)f(c)m(haracter)150 3324 y(to)h(the)f(left)h
+(of)f(the)g(cursor)f(and)h(the)g Ft(DEL)f Fu(k)m(ey)i(set)g(to)f
+(delete)i(the)e(c)m(haracter)h(underneath)e(the)h(cursor,)150
+3434 y(lik)m(e)i Fj(C-d)p Fu(,)d(rather)i(than)f(the)g(c)m(haracter)i
+(to)f(the)g(left)g(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: 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)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)34
+b(from)f(the)g(cursor)g(to)h(the)g(start)g(of)g(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)630
+2217 y(the)28 b(start)g(of)g(the)g(previous)f(w)m(ord.)39
+b(W)-8 b(ord)28 b(b)s(oundaries)e(are)i(the)g(same)g(as)g(those)g(used)
+f(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(152\))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: 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)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 1416
+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 1525 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
+1635 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 1744 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 1854 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 1964
+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
+2094 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 2204 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
+2313 y(used.)275 2444 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 2553 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 2663 y(con)m(ten)m(ts)32
+b(of)f(the)f(curren)m(t)g(line.)150 2896 y Fs(8.3)68
+b(Readline)47 b(Init)e(File)150 3055 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 3165 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
+3274 y(that)39 b(use)g(Readline)g(b)m(y)f(putting)h(commands)f(in)g(an)
+h Fr(inputrc)k Fu(\014le,)e(con)m(v)m(en)m(tionally)h(in)c(their)h
+(home)150 3384 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 3493 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
+3603 y(read,)f(the)f(ultimate)h(default)f(is)g Ft(/etc/inputrc)p
+Fu(.)47 b(The)33 b Ft(bind)g Fu(builtin)g(command)h(can)g(also)h(b)s(e)
+e(used)150 3713 y(to)e(set)g(Readline)g(k)m(eybindings)f(and)g(v)-5
+b(ariables.)41 b(See)31 b(Section)g(4.2)g([Bash)g(Builtins],)g(page)g
+(55.)275 3843 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 3953 y(k)m(ey)i(bindings)e(are)i(set.)275 4083 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
+4193 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g(it.)150
+4384 y Fk(8.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150
+4531 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 4641 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
+4750 y(conditional)e(constructs)f(\(see)g(Section)h(8.3.2)g
+([Conditional)g(Init)e(Constructs],)j(page)e(129\).)64
+b(Other)150 4860 y(lines)31 b(denote)g(v)-5 b(ariable)31
+b(settings)g(and)f(k)m(ey)h(bindings.)150 5011 y(V)-8
+b(ariable)32 b(Settings)630 5121 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 5230 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 5340 y(is)d(simple:)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)870 299 y Ft(set)47
+b Fj(variable)e(value)630 432 y Fu(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 542 y(use)k Ft(vi)g Fu(line)h(editing)g(commands:)870
+675 y Ft(set)47 b(editing-mode)d(vi)630 808 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 917 y(to)c(case.)42
+b(Unrecognized)31 b(v)-5 b(ariable)31 b(names)g(are)f(ignored.)630
+1050 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 1160 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 1270 y(b)s(eing)30 b(set)h(to)g(o\013.)630
+1403 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 1512 y(See)31 b(Section)g(4.2)g([Bash)g(Builtins],)g(page)
+g(55.)630 1645 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 1802 y Ft(active-region-start-colo)o(r)1110
+1911 y Fu(A)27 b(string)f(v)-5 b(ariable)27 b(that)g(con)m(trols)h(the)
+f(text)g(color)h(and)e(bac)m(kground)g(when)1110 2021
+y(displa)m(ying)50 b(the)f(text)h(in)f(the)h(activ)m(e)h(region)f
+(\(see)g(the)g(description)f(of)1110 2131 y Ft(enable-active-region)25
+b Fu(b)s(elo)m(w\).)43 b(This)30 b(string)h(m)m(ust)f(not)h(tak)m(e)i
+(up)d(an)m(y)1110 2240 y(ph)m(ysical)25 b(c)m(haracter)h(p)s(ositions)f
+(on)g(the)f(displa)m(y)-8 b(,)27 b(so)e(it)g(should)f(consist)h(only)
+1110 2350 y(of)37 b(terminal)g(escap)s(e)g(sequences.)61
+b(It)36 b(is)h(output)g(to)g(the)g(terminal)g(b)s(efore)1110
+2459 y(displa)m(ying)h(the)f(text)i(in)e(the)h(activ)m(e)h(region.)63
+b(This)37 b(v)-5 b(ariable)38 b(is)f(reset)h(to)1110
+2569 y(the)29 b(default)g(v)-5 b(alue)29 b(whenev)m(er)f(the)h
+(terminal)g(t)m(yp)s(e)g(c)m(hanges.)41 b(The)28 b(default)1110
+2679 y(v)-5 b(alue)30 b(is)f(the)g(string)g(that)h(puts)e(the)i
+(terminal)f(in)g(standout)g(mo)s(de,)g(as)h(ob-)1110
+2788 y(tained)40 b(from)f(the)h(terminal's)g(terminfo)g(description.)68
+b(A)40 b(sample)f(v)-5 b(alue)1110 2898 y(migh)m(t)31
+b(b)s(e)f(`)p Ft(\\e[01;33m)p Fu('.)630 3054 y Ft
+(active-region-end-color)1110 3164 y Fu(A)48 b(string)g(v)-5
+b(ariable)48 b(that)h Ft(")p Fu(undo)s(es)p Ft(")d Fu(the)i(e\013ects)h
+(of)f Ft(active-region-)1110 3273 y(start-color)36 b
+Fu(and)i(restores)h Ft(")p Fu(normal)p Ft(")f Fu(terminal)h(displa)m(y)
+g(app)s(earance)1110 3383 y(after)26 b(displa)m(ying)h(text)f(in)g(the)
+g(activ)m(e)i(region.)40 b(This)25 b(string)h(m)m(ust)f(not)h(tak)m(e)
+1110 3493 y(up)e(an)m(y)h(ph)m(ysical)h(c)m(haracter)h(p)s(ositions)d
+(on)h(the)h(displa)m(y)-8 b(,)27 b(so)e(it)g(should)f(con-)1110
+3602 y(sist)29 b(only)h(of)f(terminal)h(escap)s(e)f(sequences.)41
+b(It)29 b(is)g(output)g(to)h(the)f(terminal)1110 3712
+y(after)36 b(displa)m(ying)g(the)g(text)h(in)e(the)h(activ)m(e)i
+(region.)58 b(This)34 b(v)-5 b(ariable)37 b(is)f(re-)1110
+3821 y(set)e(to)g(the)g(default)g(v)-5 b(alue)34 b(whenev)m(er)f(the)h
+(terminal)g(t)m(yp)s(e)f(c)m(hanges.)51 b(The)1110 3931
+y(default)38 b(v)-5 b(alue)39 b(is)f(the)h(string)f(that)h(restores)f
+(the)h(terminal)f(from)g(stand-)1110 4041 y(out)30 b(mo)s(de,)f(as)g
+(obtained)h(from)f(the)g(terminal's)h(terminfo)f(description.)41
+b(A)1110 4150 y(sample)31 b(v)-5 b(alue)30 b(migh)m(t)h(b)s(e)f(`)p
+Ft(\\e[0m)p Fu('.)630 4307 y Ft(bell-style)1110 4416
+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 4526 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 4635 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
+4745 y(`)p Ft(audible)p Fu(')j(\(the)i(default\),)i(Readline)e
+(attempts)g(to)h(ring)e(the)g(terminal's)1110 4855 y(b)s(ell.)630
+5011 y Ft(bind-tty-special-chars)1110 5121 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 5230 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 5340 y(Readline)h(equiv)-5 b(alen)m(ts.)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)630 299 y Ft
+(blink-matching-paren)1110 408 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 518 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
+628 y(default)31 b(is)f(`)p Ft(off)p Fu('.)630 792 y
+Ft(colored-completion-prefi)o(x)1110 902 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 1011 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
+1121 y(The)f(color)h(de\014nitions)f(are)h(tak)m(en)g(from)f(the)g(v)-5
+b(alue)26 b(of)g(the)f Ft(LS_COLORS)e Fu(en-)1110 1230
+y(vironmen)m(t)34 b(v)-5 b(ariable.)50 b(If)33 b(there)h(is)g(a)f
+(color)i(de\014nition)e(in)g Ft(LS_COLORS)e Fu(for)1110
+1340 y(the)22 b(custom)g(su\016x)f(`)p Ft(readline-colored-complet)o
+(ion)o(-pre)o(fix)p Fu(',)c(Read-)1110 1450 y(line)24
+b(uses)e(this)i(color)g(for)f(the)h(common)f(pre\014x)f(instead)i(of)f
+(its)h(default.)38 b(The)1110 1559 y(default)31 b(is)f(`)p
+Ft(off)p Fu('.)630 1724 y Ft(colored-stats)1110 1833
+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
+1943 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
+2052 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
+2162 y(is)30 b(`)p Ft(off)p Fu('.)630 2326 y Ft(comment-begin)1110
+2436 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 2545 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 2710 y Ft(completion-display-width)
+1110 2819 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 2929
+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
+3039 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
+3148 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.)630
+3313 y Ft(completion-ignore-case)1110 3422 y Fu(If)d(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 3532 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 3696 y Ft(completion-map-case)1110 3806 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 3915 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
+4025 y(case-insensitiv)m(e)47 b(\014lename)e(matc)m(hing)g(and)f
+(completion.)85 b(The)44 b(default)1110 4134 y(v)-5 b(alue)31
+b(is)f(`)p Ft(off)p Fu('.)630 4299 y Ft(completion-prefix-displa)o
+(y-le)o(ngth)1110 4408 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
+4518 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 4628
+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 4737
+y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible)
+f(completions.)630 4902 y Ft(completion-query-items)1110
+5011 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 5121 y(is)43
+b(ask)m(ed)g(whether)f(the)g(list)h(of)g(p)s(ossibilities)g(should)f(b)
+s(e)g(displa)m(y)m(ed.)77 b(If)1110 5230 y(the)29 b(n)m(um)m(b)s(er)f
+(of)h(p)s(ossible)g(completions)h(is)f(greater)h(than)f(or)g(equal)g
+(to)h(this)1110 5340 y(v)-5 b(alue,)45 b(Readline)e(will)f(ask)g
+(whether)f(or)h(not)g(the)g(user)f(wishes)g(to)i(view)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)1110 299 y(them;)33
+b(otherwise,)f(they)g(are)g(simply)g(listed.)45 b(This)31
+b(v)-5 b(ariable)33 b(m)m(ust)e(b)s(e)g(set)1110 408
+y(to)43 b(an)e(in)m(teger)j(v)-5 b(alue)42 b(greater)h(than)f(or)g
+(equal)g(to)h(zero.)76 b(A)42 b(zero)g(v)-5 b(alue)1110
+518 y(means)40 b(Readline)h(should)f(nev)m(er)g(ask;)46
+b(negativ)m(e)d(v)-5 b(alues)41 b(are)f(treated)i(as)1110
+628 y(zero.)g(The)29 b(default)i(limit)g(is)g Ft(100)p
+Fu(.)630 774 y Ft(convert-meta)1110 883 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 993 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 1103 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 1212 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
+1322 y(that)21 b(con)m(tains)h(eigh)m(t-bit)h(c)m(haracters.)39
+b(This)20 b(v)-5 b(ariable)21 b(is)g(dep)s(enden)m(t)f(on)h(the)1110
+1431 y Ft(LC_CTYPE)26 b Fu(lo)s(cale)31 b(category)-8
+b(,)31 b(and)d(ma)m(y)h(c)m(hange)h(if)e(the)h(lo)s(cale)h(is)f(c)m
+(hanged.)630 1577 y Ft(disable-completion)1110 1687 y
+Fu(If)36 b(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 1797 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 1906 y(to)31 b Ft(self-insert)p
+Fu(.)38 b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630
+2052 y Ft(echo-control-characters)1110 2162 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 2271 y(it,)e(Readline)g(ec)m(ho)s(es)g(a)f(c)m
+(haracter)i(corresp)s(onding)d(to)i(a)f(signal)h(generated)1110
+2381 y(from)h(the)g(k)m(eyb)s(oard.)41 b(The)30 b(default)g(is)h(`)p
+Ft(on)p Fu('.)630 2527 y Ft(editing-mode)1110 2637 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 2746 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 2856 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 2966 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 3112 y Ft
+(emacs-mode-string)1110 3221 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 3331 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
+3440 y(emacs)g(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 3550 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
+3660 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 3769 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 3879 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 3988 y(default)31 b(is)f(`)p Ft(@)p Fu('.)630
+4134 y Ft(enable-active-region)1110 4244 y Fu(The)46
+b Fr(p)s(oin)m(t)j Fu(is)e(the)g(curren)m(t)f(cursor)g(p)s(osition,)52
+b(and)46 b Fr(mark)52 b Fu(refers)46 b(to)i(a)1110 4354
+y(sa)m(v)m(ed)37 b(cursor)f(p)s(osition)g(\(see)i(Section)f(8.4.1)h
+([Commands)d(F)-8 b(or)37 b(Mo)m(ving],)1110 4463 y(page)d(133\).)50
+b(The)33 b(text)h(b)s(et)m(w)m(een)f(the)g(p)s(oin)m(t)g(and)g(mark)g
+(is)g(referred)f(to)i(as)1110 4573 y(the)h Fr(region)p
+Fu(.)53 b(When)34 b(this)g(v)-5 b(ariable)36 b(is)e(set)h(to)g(`)p
+Ft(On)p Fu(',)h(Readline)f(allo)m(ws)g(cer-)1110 4682
+y(tain)30 b(commands)f(to)g(designate)i(the)e(region)h(as)f
+Fr(activ)m(e)p Fu(.)43 b(When)29 b(the)g(region)1110
+4792 y(is)g(activ)m(e,)j(Readline)e(highligh)m(ts)g(the)g(text)g(in)f
+(the)g(region)h(using)f(the)g(v)-5 b(alue)1110 4902 y(of)35
+b(the)g Ft(active-region-start-color)p Fu(,)30 b(whic)m(h)35
+b(defaults)g(to)h(the)f(string)1110 5011 y(that)23 b(enables)f(the)g
+(terminal's)h(standout)e(mo)s(de.)38 b(The)21 b(activ)m(e)k(region)d
+(sho)m(ws)1110 5121 y(the)32 b(text)h(inserted)f(b)m(y)g(brac)m(k)m
+(eted-paste)i(and)e(an)m(y)g(matc)m(hing)h(text)g(found)1110
+5230 y(b)m(y)f(incremen)m(tal)i(and)e(non-incremen)m(tal)i(history)e
+(searc)m(hes.)48 b(The)32 b(default)1110 5340 y(is)e(`)p
+Ft(On)p Fu('.)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 Ft
+(enable-bracketed-paste)1110 408 y Fu(When)36 b(set)h(to)g(`)p
+Ft(On)p Fu(',)h(Readline)f(con\014gures)f(the)h(terminal)f(to)i(insert)
+e(eac)m(h)1110 518 y(paste)27 b(in)m(to)g(the)f(editing)h(bu\013er)e
+(as)h(a)h(single)g(string)f(of)g(c)m(haracters,)j(instead)1110
+628 y(of)d(treating)i(eac)m(h)g(c)m(haracter)f(as)g(if)f(it)h(had)f(b)s
+(een)f(read)i(from)e(the)i(k)m(eyb)s(oard.)1110 737 y(This)36
+b(is)h(called)h(putting)f(the)h(terminal)f(in)m(to)h
+Fr(brac)m(k)m(eted)h(paste)e(mo)s(de)5 b Fu(;)40 b(it)1110
+847 y(prev)m(en)m(ts)30 b(Readline)h(from)e(executing)i(an)m(y)f
+(editing)h(commands)e(b)s(ound)f(to)1110 956 y(k)m(ey)j(sequences)g
+(app)s(earing)f(in)g(the)g(pasted)h(text.)42 b(The)29
+b(default)i(is)f(`)p Ft(On)p Fu('.)630 1113 y Ft(enable-keypad)1110
+1223 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
+1332 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 1442 y(The)j(default)g
+(is)h(`)p Ft(off)p Fu('.)630 1598 y Ft(enable-meta-key)1110
+1708 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
+1817 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 1927 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 2037 y(default)31 b(is)f(`)p Ft(on)p Fu('.)630
+2193 y Ft(expand-tilde)1110 2303 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 2412 y(w)m(ord)i(completion.)42
+b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630 2569
+y Ft(history-preserve-point)1110 2679 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 2788 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 2898 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
+3007 y(is)30 b(`)p Ft(off)p Fu('.)630 3164 y Ft(history-size)1110
+3273 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 3383
+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 3493 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
+3602 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
+3712 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 3821
+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 3931
+y(b)s(e)c(set)h(to)g(500.)630 4088 y Ft(horizontal-scroll-mode)1110
+4197 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 4307 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 4416 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 4526
+y(screen,)c(instead)g(of)f(wrapping)f(on)m(to)i(a)g(new)e(screen)i
+(line.)40 b(This)26 b(v)-5 b(ariable)28 b(is)1110 4635
+y(automatically)k(set)e(to)g(`)p Ft(on)p Fu(')f(for)g(terminals)g(of)h
+(heigh)m(t)g(1.)41 b(By)29 b(default,)h(this)1110 4745
+y(v)-5 b(ariable)31 b(is)g(set)f(to)i(`)p Ft(off)p Fu('.)630
+4902 y Ft(input-meta)1110 5011 y Fu(If)f(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 5121 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
+5230 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 5340 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.)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)1110 299 y(The)29
+b(name)g Ft(meta-flag)e Fu(is)i(a)h(synon)m(ym)f(for)g(this)g(v)-5
+b(ariable.)42 b(This)28 b(v)-5 b(ariable)1110 408 y(is)35
+b(dep)s(enden)m(t)f(on)h(the)g Ft(LC_CTYPE)e Fu(lo)s(cale)k(category)-8
+b(,)39 b(and)34 b(ma)m(y)i(c)m(hange)g(if)1110 518 y(the)31
+b(lo)s(cale)h(is)e(c)m(hanged.)630 675 y Ft(isearch-terminators)1110
+784 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 894 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 1003 y(\(see)38 b(Section)g(8.2.5)h([Searc)m(hing],)h
+(page)e(119\).)62 b(If)37 b(this)g(v)-5 b(ariable)38
+b(has)f(not)1110 1113 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 1223 y(incremen)m(tal)c(searc)m
+(h.)630 1379 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
+1489 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 1598
+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
+1708 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 1817 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 1927 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 2037 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 2193 y Ft(keyseq-timeout)1110
+2303 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 2412
+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 2522 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 2632 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
+2741 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 2851 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 2960 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
+3070 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 3180 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 3289 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 3399 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
+3508 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 3665 y Ft(mark-directories)1110
+3774 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
+3884 y(The)30 b(default)g(is)h(`)p Ft(on)p Fu('.)630
+4041 y Ft(mark-modified-lines)1110 4150 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 4260 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 4369 y(This)d(v)-5
+b(ariable)31 b(is)f(`)p Ft(off)p Fu(')g(b)m(y)g(default.)630
+4526 y Ft(mark-symlinked-directori)o(es)1110 4635 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 4745 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 4855 y Ft(mark-directories)p
+Fu(\).)37 b(The)30 b(default)g(is)g(`)p Ft(off)p Fu('.)630
+5011 y Ft(match-hidden-files)1110 5121 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 5230
+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 5340
+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)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)1110 299 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
+408 y(default.)630 587 y Ft(menu-complete-display-pr)o(efix)1110
+696 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
+806 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 915 y(through)30
+b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p Ft(off)p
+Fu('.)630 1093 y Ft(output-meta)1110 1203 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 1313 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 1422 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 1532 y(eigh)m(t-bit)38 b(c)m(haracters.)61
+b(This)36 b(v)-5 b(ariable)37 b(is)g(dep)s(enden)m(t)e(on)h(the)h
+Ft(LC_CTYPE)1110 1641 y Fu(lo)s(cale)32 b(category)-8
+b(,)33 b(and)d(ma)m(y)h(c)m(hange)g(if)g(the)f(lo)s(cale)i(is)f(c)m
+(hanged.)630 1819 y Ft(page-completions)1110 1929 y Fu(If)i(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
+2039 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
+2148 y(b)m(y)e(default.)630 2326 y Ft(print-completions-horizo)o(ntal)o
+(ly)1110 2436 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
+2545 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 2655 y(The)30 b(default)g(is)h(`)p
+Ft(off)p Fu('.)630 2833 y Ft(revert-all-at-newline)1110
+2943 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
+3052 y(returning)f(when)f Ft(accept-line)f Fu(is)j(executed.)41
+b(By)29 b(default,)g(history)g(lines)1110 3162 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 3271 y Ft(readline\(\))p Fu(.)38
+b(The)30 b(default)g(is)h(`)p Ft(off)p Fu('.)630 3450
+y Ft(show-all-if-ambiguous)1110 3559 y Fu(This)e(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 3669 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 3778 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 3888 y(The)30
+b(default)g(v)-5 b(alue)31 b(is)g(`)p Ft(off)p Fu('.)630
+4066 y Ft(show-all-if-unmodified)1110 4176 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 4285 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 4395 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 4504 y(tial)43 b(completion)h(\(the)f(p)s(ossible)
+f(completions)h(don't)f(share)g(a)h(common)1110 4614
+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 4724 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 4902 y Ft(show-mode-in-prompt)1110 5011 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 5121
+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)1110 5230 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 5340 y(v)-5 b(alue)31
+b(is)f(`)p Ft(off)p Fu('.)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)630 299 y Ft
+(skip-completed-text)1110 408 y Fu(If)32 b(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 518 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 628 y(ing)k(completion)i(in)e(the)g(middle)g(of)g(a)h(w)m(ord.)46
+b(If)32 b(enabled,)g(Readline)h(do)s(es)1110 737 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 847 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
+956 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
+1066 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 1176 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 1285 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 1395 y(is)30 b(`)p Ft(off)p Fu('.)630 1548
+y Ft(vi-cmd-mode-string)1110 1658 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 1767 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
+1877 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
+1987 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
+2096 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 2206 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
+2315 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 2425
+y(the)g(mo)s(de)f(string.)40 b(The)30 b(default)h(is)f(`)p
+Ft(\(cmd\))p Fu('.)630 2578 y Ft(vi-ins-mode-string)1110
+2688 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
+2798 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 2907 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 3017 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 3126 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 3236 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 3345
+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 3455
+y(the)g(mo)s(de)f(string.)40 b(The)30 b(default)h(is)f(`)p
+Ft(\(ins\))p Fu('.)630 3608 y Ft(visible-stats)1110 3718
+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
+3828 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 3981
+y(Key)f(Bindings)630 4091 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 4200 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 4310 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 4419 y(and)30 b(a)h(short)f(description)g(of)h(what)f
+(the)g(command)h(do)s(es.)630 4551 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 4661 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 4770 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 4880 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 4989 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 5099 y(comfortable.)630
+5230 y(In)g(addition)h(to)g(command)g(names,)g(Readline)g(allo)m(ws)h
+(k)m(eys)g(to)f(b)s(e)f(b)s(ound)f(to)i(a)g(string)630
+5340 y(that)d(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g(\(a)
+h Fr(macro)5 b Fu(\).)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(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 408 y(format)28
+b(that)h(can)f(b)s(e)f(put)g(directly)i(in)m(to)f(an)g(initialization)j
+(\014le.)40 b(See)28 b(Section)h(4.2)g([Bash)630 518
+y(Builtins],)i(page)g(55.)630 673 y Fr(k)m(eyname)5 b
+Fu(:)42 b Fr(function-name)35 b Fu(or)c Fr(macro)1110
+783 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
+915 y Ft(Control-u:)45 b(universal-argument)1350 1024
+y(Meta-Rubout:)f(backward-kill-word)1350 1134 y(Control-o:)h(">)i
+(output")1110 1266 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
+1376 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 1485 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 1595 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 1705 y(output)p Fu(')29 b(in)m(to)i(the)g(line\).)1110
+1837 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 1946 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 2056 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
+2211 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 2321 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 2430 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 2540 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 2649 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 2759 y(recognized.)1350
+2891 y Ft("\\C-u":)46 b(universal-argument)1350 3001
+y("\\C-x\\C-r":)f(re-read-init-file)1350 3110 y("\\e[11~":)g("Function)
+h(Key)g(1")1110 3243 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
+3352 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 3462
+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
+3571 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 3726 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 3836 y(k)m(ey)i(sequences:)630
+3991 y Fj(\\C-)336 b Fu(con)m(trol)32 b(pre\014x)630
+4146 y Fj(\\M-)336 b Fu(meta)31 b(pre\014x)630 4301 y
+Fj(\\e)384 b Fu(an)30 b(escap)s(e)h(c)m(haracter)630
+4456 y Fj(\\\\)384 b Fu(bac)m(kslash)630 4611 y Fj(\\)p
+Ft(")g(")p Fu(,)30 b(a)h(double)f(quotation)i(mark)630
+4766 y Fj(\\')384 b Ft(')p Fu(,)30 b(a)h(single)g(quote)g(or)f(ap)s
+(ostrophe)630 4921 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 5030 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630
+5185 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630 5340
+y Ft(\\b)384 b Fu(bac)m(kspace)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)630 299 y Ft(\\d)384
+b Fu(delete)630 460 y Ft(\\f)g Fu(form)30 b(feed)630
+620 y Ft(\\n)384 b Fu(newline)630 781 y Ft(\\r)g Fu(carriage)32
+b(return)630 941 y Ft(\\t)384 b Fu(horizon)m(tal)32 b(tab)630
+1102 y Ft(\\v)384 b Fu(v)m(ertical)32 b(tab)630 1263
+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 1372 y(three)c(digits\))630
+1533 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 1643 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e
+(digits\))630 1803 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 1913 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 2022 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 2132 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 2242 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 2377 y Ft("\\C-x\\\\":)45
+b("\\\\")150 2577 y Fk(8.3.2)63 b(Conditional)41 b(Init)g(Constructs)
+150 2724 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
+2834 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 2943 y(result)f(of)h(tests.)41
+b(There)30 b(are)h(four)f(parser)f(directiv)m(es)j(used.)150
+3105 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 3214 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 3324 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
+3433 y(noted,)i(no)f(c)m(haracters)i(are)f(required)e(to)i(isolate)i
+(it.)630 3594 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 3704 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 3813 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
+3923 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 4032 y(starting)f(out)g
+(in)f Ft(emacs)f Fu(mo)s(de.)630 4193 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 4303 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 4412 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 4522 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 4631 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 4741 y Ft(sun-cmd)p Fu(,)c(for)h(instance.)
+630 4902 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 5011 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
+5121 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
+5230 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)1110 5340 y(the)j(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,)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)1110 299 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 408 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 518 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 628 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 737 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 872 y Ft($if)47
+b(version)f(>=)h(7.0)1350 981 y(set)g(show-mode-in-prompt)42
+b(on)1350 1091 y($endif)630 1250 y(application)1110 1360
+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 1469 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 1579 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 1689 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 1798 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 1908 y(the)e(curren)m(t)f
+(or)g(previous)g(w)m(ord)g(in)g(Bash:)1350 2042 y Ft($if)47
+b(Bash)1350 2152 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)
+1350 2262 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 2371 y($endif)630
+2531 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 2640 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 2750 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 2859 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 2969 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 3078 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 3188 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
+3298 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 3432 y
+Ft($if)47 b(editing-mode)d(==)k(emacs)1350 3542 y(set)f
+(show-mode-in-prompt)42 b(on)1350 3651 y($endif)150 3811
+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
+3970 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 4130 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 4239 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 4349 y Ft(/etc/inputrc)p Fu(:)870 4483 y Ft($include)46
+b(/etc/inputrc)150 4682 y Fk(8.3.3)63 b(Sample)41 b(Init)g(File)150
+4829 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 4939 y(conditional)j(syn)m
+(tax.)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)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: 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)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(150)g(or)g(more)g(possible)e(completions)
+g(for)i(a)g(word,)390 5121 y(#)g(ask)g(whether)f(or)h(not)g(the)g(user)
+g(wants)f(to)h(see)g(all)g(of)g(them)390 5230 y(set)g
+(completion-query-items)42 b(150)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)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(55.\))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(\(M-C-f\))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(\(M-C-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: 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 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
+916 y Ft(clear-display)c(\(M-C-l\))630 1026 y Fu(Clear)33
+b(the)g(screen)g(and,)h(if)e(p)s(ossible,)i(the)f(terminal's)g
+(scrollbac)m(k)i(bu\013er,)e(then)f(redra)m(w)630 1136
+y(the)f(curren)m(t)f(line,)h(lea)m(ving)h(the)e(curren)m(t)h(line)f(at)
+h(the)g(top)g(of)f(the)h(screen.)150 1315 y Ft(clear-screen)c(\(C-l\))
+630 1424 y Fu(Clear)35 b(the)f(screen,)i(then)e(redra)m(w)g(the)h
+(curren)m(t)f(line,)i(lea)m(ving)g(the)f(curren)m(t)f(line)h(at)g(the)
+630 1534 y(top)c(of)f(the)h(screen.)150 1713 y Ft(redraw-current-line)
+25 b(\(\))630 1823 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 2041
+y Fk(8.4.2)63 b(Commands)42 b(F)-10 b(or)41 b(Manipulating)h(The)f
+(History)150 2223 y Ft(accept-line)27 b(\(Newline)h(or)i(Return\))630
+2333 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 2442 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 2552 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 2662 y(its)g(original)g
+(state.)150 2841 y Ft(previous-history)26 b(\(C-p\))630
+2950 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 3129 y Ft(next-history)d
+(\(C-n\))630 3239 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
+3418 y Ft(beginning-of-history)25 b(\(M-<\))630 3528
+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 3707 y Ft(end-of-history)26 b(\(M->\))630 3816
+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
+3995 y Ft(reverse-search-history)24 b(\(C-r\))630 4105
+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
+4215 y(tory)26 b(as)h(necessary)-8 b(.)40 b(This)25 b(is)i(an)f
+(incremen)m(tal)h(searc)m(h.)40 b(This)25 b(command)h(sets)h(the)f
+(region)630 4324 y(to)31 b(the)g(matc)m(hed)g(text)g(and)f(activ)-5
+b(ates)33 b(the)d(mark.)150 4503 y Ft(forward-search-history)24
+b(\(C-s\))630 4613 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 4723 y(history)38 b(as)g(necessary)-8 b(.)65 b(This)38
+b(is)g(an)g(incremen)m(tal)h(searc)m(h.)65 b(This)37
+b(command)h(sets)h(the)630 4832 y(region)31 b(to)g(the)g(matc)m(hed)g
+(text)g(and)f(activ)-5 b(ates)33 b(the)d(mark.)150 5011
+y Ft(non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24
+b(\(M-p\))630 5121 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 5230 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
+5340 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.)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)150 299 y Ft
+(non-incremental-forward-)o(sear)o(ch-h)o(ist)o(ory)24
+b(\(M-n\))630 408 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
+518 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
+628 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 784 y Ft(history-search-forward)
+24 b(\(\))630 894 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 1003 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)630 1113 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 1223 y(command)d(is)h(un)m(b)s(ound.)150
+1379 y Ft(history-search-backward)24 b(\(\))630 1489
+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
+1598 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
+1708 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 1817 y(command)d(is)h(un)m(b)s(ound.)150
+1974 y Ft(history-substring-search)o(-for)o(ward)24 b(\(\))630
+2084 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
+2193 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 2303 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 2412 y(is)e(un)m(b)s(ound.)150 2569 y Ft
+(history-substring-search)o(-bac)o(kwar)o(d)24 b(\(\))630
+2679 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
+2788 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 2898 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 3007 y(is)e(un)m(b)s(ound.)150 3164 y Ft(yank-nth-arg)d
+(\(M-C-y\))630 3273 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
+3383 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 3493 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 3602 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 3712 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 3821 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 3978 y Ft(yank-last-arg)d(\(M-.)i
+(or)h(M-_\))630 4088 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
+4197 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 4307 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 4416 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 4526 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 4635 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 4745 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 4855 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 4964 y(sp)s(eci\014ed.)150 5121 y
+Ft(operate-and-get-next)e(\(C-o\))630 5230 y Fu(Accept)30
+b(the)g(curren)m(t)e(line)i(for)f(return)f(to)h(the)h(calling)g
+(application)h(as)e(if)g(a)h(newline)f(had)630 5340 y(b)s(een)22
+b(en)m(tered,)k(and)d(fetc)m(h)h(the)f(next)g(line)h(relativ)m(e)h(to)f
+(the)f(curren)m(t)g(line)h(from)f(the)g(history)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)630 299 y(for)31
+b(editing.)43 b(A)31 b(n)m(umeric)f(argumen)m(t,)i(if)f(supplied,)f(sp)
+s(eci\014es)h(the)g(history)f(en)m(try)i(to)f(use)630
+408 y(instead)g(of)f(the)h(curren)m(t)f(line.)150 565
+y Ft(fetch-history)d(\(\))630 675 y Fu(With)e(a)f(n)m(umeric)g(argumen)
+m(t,)i(fetc)m(h)f(that)g(en)m(try)f(from)g(the)g(history)g(list)h(and)e
+(mak)m(e)i(it)g(the)630 784 y(curren)m(t)30 b(line.)41
+b(Without)30 b(an)g(argumen)m(t,)h(mo)m(v)m(e)g(bac)m(k)g(to)f(the)g
+(\014rst)f(en)m(try)h(in)g(the)g(history)630 894 y(list.)150
+1090 y Fk(8.4.3)63 b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10
+b(ext)150 1261 y Fj(end-of-file)27 b Ft(\(usually)h(C-d\))630
+1370 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 1480 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 1590 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 1746 y Ft(delete-char)e(\(C-d\))630 1856 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 1966
+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.)150 2122 y Ft(backward-delete-char)25 b(\(Rubout\))630
+2232 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
+2341 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150
+2498 y Ft(forward-backward-delete-)o(char)24 b(\(\))630
+2608 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
+2717 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
+2827 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150
+2983 y Ft(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 3093
+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
+3203 y(sequences)d(lik)m(e)g Fj(C-q)p Fu(,)f(for)g(example.)150
+3359 y Ft(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o(\))630
+3469 y Fu(Insert)g(y)m(ourself.)150 3626 y Ft(bracketed-paste-begin)25
+b(\(\))630 3735 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 3845 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
+3954 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
+4064 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
+4173 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
+4283 y(commands.)630 4416 y(Brac)m(k)m(eted)38 b(paste)f(sets)f(the)h
+(region)f(\(the)h(c)m(haracters)g(b)s(et)m(w)m(een)g(p)s(oin)m(t)f(and)
+g(the)g(mark\))630 4526 y(to)j(the)g(inserted)f(text.)65
+b(It)39 b(uses)f(the)g(concept)h(of)g(an)f Fl(active)i(mark)10
+b Fu(:)57 b(when)38 b(the)g(mark)630 4635 y(is)d(activ)m(e,)k(Readline)
+c(redispla)m(y)h(uses)e(the)h(terminal's)h(standout)f(mo)s(de)f(to)i
+(denote)g(the)630 4745 y(region.)150 4902 y Ft(transpose-chars)26
+b(\(C-t\))630 5011 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 5121 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 5230 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 5340 y(ha)m(v)m(e)32
+b(no)e(e\013ect.)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)150 299 y Ft(transpose-words)
+26 b(\(M-t\))630 408 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 518 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 628 y(last)j(t)m(w)m(o)h
+(w)m(ords)e(on)g(the)h(line.)150 797 y Ft(upcase-word)c(\(M-u\))630
+907 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
+1016 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 1186 y Ft(downcase-word)d(\(M-l\))630
+1296 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 1405 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 1575 y Ft(capitalize-word)26
+b(\(M-c\))630 1684 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 1794 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 1964 y Ft(overwrite-mode)26
+b(\(\))630 2073 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 2183 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 2292 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 2402
+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.)630
+2541 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
+2651 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
+2761 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 2900
+y(By)g(default,)f(this)h(command)f(is)g(un)m(b)s(ound.)150
+3110 y Fk(8.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150
+3287 y Ft(kill-line)28 b(\(C-k\))630 3396 y Fu(Kill)k(the)f(text)i
+(from)d(p)s(oin)m(t)i(to)g(the)f(end)g(of)g(the)h(line.)44
+b(With)31 b(a)h(negativ)m(e)i(n)m(umeric)d(argu-)630
+3506 y(men)m(t,)g(kill)g(bac)m(kw)m(ard)g(from)f(the)g(cursor)g(to)h
+(the)g(b)s(eginning)e(of)i(the)g(curren)m(t)f(line.)150
+3675 y Ft(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630
+3785 y Fu(Kill)40 b(bac)m(kw)m(ard)h(from)e(the)h(cursor)g(to)g(the)g
+(b)s(eginning)g(of)g(the)g(curren)m(t)f(line.)70 b(With)41
+b(a)630 3895 y(negativ)m(e)47 b(n)m(umeric)e(argumen)m(t,)50
+b(kill)c(forw)m(ard)e(from)h(the)g(cursor)g(to)h(the)f(end)f(of)i(the)
+630 4004 y(curren)m(t)30 b(line.)150 4174 y Ft(unix-line-discard)c
+(\(C-u\))630 4283 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
+4453 y Ft(kill-whole-line)c(\(\))630 4562 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
+4672 y(this)30 b(is)h(un)m(b)s(ound.)150 4842 y Ft(kill-word)d(\(M-d\))
+630 4951 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 5061 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 5230 y Ft(backward-kill-word)25 b(\(M-DEL\))630
+5340 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(.)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)150 299 y Ft(shell-kill-word)
+26 b(\(M-C-d\))630 408 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 518 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 692 y Ft(shell-backward-kill-word)24
+b(\(\))630 801 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 911 y(word)p Fu(.)150 1084 y Ft
+(shell-transpose-words)j(\(M-C-t\))630 1194 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
+1304 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 1413 y(last)j(t)m(w)m(o)h(w)m(ords)d(on)i(the)f(line.)41
+b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)f(as)h
+Ft(shell-forward-)630 1523 y(word)e Fu(and)h Ft(shell-backward-word)p
+Fu(.)150 1696 y Ft(unix-word-rubout)c(\(C-w\))630 1806
+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 1915 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f
+(kill-ring.)150 2089 y Ft(unix-filename-rubout)25 b(\(\))630
+2199 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
+2308 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 2482 y Ft
+(delete-horizontal-space)24 b(\(\))630 2591 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 2765
+y Ft(kill-region)d(\(\))630 2874 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 3048 y Ft(copy-region-as-kill)25 b(\(\))630
+3158 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 3267 y(By)31 b(default,)f(this)h(command)f
+(is)g(un)m(b)s(ound.)150 3441 y Ft(copy-backward-word)25
+b(\(\))630 3550 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 3660 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.)150
+3833 y Ft(copy-forward-word)26 b(\(\))630 3943 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
+4053 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
+4226 y Ft(yank)f(\(C-y\))630 4336 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 4509 y Ft(yank-pop)d(\(M-y\))630 4619
+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
+4728 y(command)30 b(is)h Ft(yank)e Fu(or)h Ft(yank-pop)p
+Fu(.)150 4942 y Fk(8.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m
+(ts)150 5121 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 5230 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 5340 y Fj(M--)j Fu(starts)i(a)g(negativ)m(e)i
+(argumen)m(t.)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)150 299 y Ft
+(universal-argument)25 b(\(\))630 408 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
+518 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 628
+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 737
+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
+847 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
+956 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
+1066 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
+1176 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
+1285 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 1468 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 1632 y Ft(complete)28 b(\(TAB\))630
+1741 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
+1851 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
+1961 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 2070 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 2180 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 2289 y(attempted.)150 2433 y Ft
+(possible-completions)25 b(\(M-?\))630 2542 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 2652
+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 2761 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 2871 y(or)30 b(the)h(screen)f(width,)g(in)g
+(that)h(order.)150 3014 y Ft(insert-completions)25 b(\(M-*\))630
+3124 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
+3233 y(b)m(y)g Ft(possible-completions)p Fu(.)150 3376
+y Ft(menu-complete)d(\(\))630 3486 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 3596 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 3705 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.)630 3815 y(A)m(t)e(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 3924 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 4034 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 4143 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 4253 y Ft(TAB)p Fu(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m
+(y)i(default.)150 4396 y Ft(menu-complete-backward)24
+b(\(\))630 4506 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 4615 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
+4758 y Ft(delete-char-or-list)25 b(\(\))630 4868 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 4978 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 5087
+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 5230 y Ft(complete-filename)c(\(M-/\))630
+5340 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.)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 Ft
+(possible-filename-comple)o(tion)o(s)24 b(\(C-x)30 b(/\))630
+408 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
+577 y Ft(complete-username)e(\(M-~\))630 687 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 856 y Ft(possible-username-comple)o(tion)o
+(s)24 b(\(C-x)30 b(~\))630 965 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 1134 y Ft(complete-variable)h(\(M-$\))630
+1244 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
+1412 y Ft(possible-variable-comple)o(tion)o(s)24 b(\(C-x)30
+b($\))630 1522 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 1632 y(v)-5 b(ariable.)150 1800 y Ft(complete-hostname)26
+b(\(M-@\))630 1910 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
+2079 y Ft(possible-hostname-comple)o(tion)o(s)24 b(\(C-x)30
+b(@\))630 2188 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 2357 y Ft(complete-command)h(\(M-!\))630
+2467 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
+2576 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 2686 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 2796 y(order.)150
+2964 y Ft(possible-command-complet)o(ions)24 b(\(C-x)29
+b(!\))630 3074 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
+3184 y(name.)150 3352 y Ft(dynamic-complete-history)e(\(M-TAB\))630
+3462 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
+3572 y(from)e(the)g(history)h(list)g(for)f(p)s(ossible)g(completion)i
+(matc)m(hes.)150 3740 y Ft(dabbrev-expand)26 b(\(\))630
+3850 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
+3960 y(lines)j(from)e(the)i(history)f(list)h(for)g(p)s(ossible)e
+(completion)j(matc)m(hes.)150 4128 y Ft(complete-into-braces)25
+b(\(M-{\))630 4238 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
+4348 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 4457 y(pansion],)30 b(page)h(24\).)150 4666
+y Fk(8.4.7)63 b(Keyb)s(oard)41 b(Macros)150 4842 y Ft(start-kbd-macro)
+26 b(\(C-x)j(\(\))630 4952 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 5121 y Ft(end-kbd-macro)d(\(C-x)i(\)\))630
+5230 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 5340 y(de\014nition.)p eop end
+%%Page: 141 147
+TeXDict begin 141 146 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(141)150 299 y Ft
+(call-last-kbd-macro)25 b(\(C-x)k(e\))630 408 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 518 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 671 y Ft
+(print-last-kbd-macro)25 b(\(\))630 780 y Fu(Prin)m(t)30
+b(the)g(last)h(k)m(eyb)s(oard)f(macro)h(de\014ned)e(in)h(a)g(format)h
+(suitable)g(for)f(the)g Fr(inputrc)35 b Fu(\014le.)150
+973 y Fk(8.4.8)63 b(Some)41 b(Miscellaneous)i(Commands)150
+1141 y Ft(re-read-init-file)26 b(\(C-x)j(C-r\))630 1251
+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 1360 y(assignmen)m(ts)31 b(found)e(there.)150
+1513 y Ft(abort)g(\(C-g\))630 1622 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 1732 y(setting)j(of)g Ft(bell-style)p
+Fu(\).)150 1885 y Ft(do-lowercase-version)25 b(\(M-A,)k(M-B,)g(M-)p
+Fj(x)p Ft(,)g(...)o(\))630 1994 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 2104 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 2213 y Fr(x)37
+b Fu(is)30 b(already)h(lo)m(w)m(er)h(case.)150 2366 y
+Ft(prefix-meta)27 b(\(ESC\))630 2476 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 2585 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 2738 y Ft(undo)e(\(C-_)g(or)h(C-x)
+g(C-u\))630 2847 y Fu(Incremen)m(tal)h(undo,)f(separately)h(remem)m(b)s
+(ered)f(for)g(eac)m(h)i(line.)150 3000 y Ft(revert-line)27
+b(\(M-r\))630 3109 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 3219 y(enough)e(times)h(to)g(get)h(bac)m(k)f
+(to)g(the)f(b)s(eginning.)150 3372 y Ft(tilde-expand)d(\(M-&\))630
+3481 y Fu(P)m(erform)j(tilde)h(expansion)g(on)f(the)g(curren)m(t)h(w)m
+(ord.)150 3634 y Ft(set-mark)d(\(C-@\))630 3743 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
+3853 y(to)f(that)g(p)s(osition.)150 4006 y Ft(exchange-point-and-mark)
+24 b(\(C-x)29 b(C-x\))630 4115 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 4225 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
+4377 y Ft(character-search)26 b(\(C-]\))630 4487 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 4596 y(A)30
+b(negativ)m(e)j(argumen)m(t)e(searc)m(hes)g(for)f(previous)g(o)s
+(ccurrences.)150 4749 y Ft(character-search-backwar)o(d)24
+b(\(M-C-]\))630 4859 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 4968 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(argumen)m(t)f
+(searc)m(hes)g(for)g(subsequen)m(t)e(o)s(ccurrences.)150
+5121 y Ft(skip-csi-sequence)d(\(\))630 5230 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 5340 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)p eop end
+%%Page: 142 148
+TeXDict begin 142 147 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(142)630 299 y(Indicator)37
+b(\(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
+408 y(ducing)29 b(suc)m(h)g(sequences)g(will)h(ha)m(v)m(e)h(no)e
+(e\013ect)i(unless)d(explicitly)j(b)s(ound)d(to)i(a)f(Readline)630
+518 y(command,)j(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
+628 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 792 y Ft(insert-comment)26 b(\(M-#\))630
+902 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 1011 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 1121 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 1230 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 1340
+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 1450
+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
+1559 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
+1669 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
+1778 y(the)31 b(line)f(will)h(b)s(e)f(executed)h(b)m(y)f(the)h(shell.)
+150 1943 y Ft(dump-functions)26 b(\(\))630 2052 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 2162 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 2271 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
+2436 y Ft(dump-variables)26 b(\(\))630 2545 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
+2655 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
+2765 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 2929 y Ft(dump-macros)c(\(\))630 3039 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
+3148 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
+3258 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 3367 y(default.)150 3532 y Ft(spell-correct-word)e(\(C-x)30
+b(s\))630 3641 y Fu(P)m(erform)36 b(sp)s(elling)h(correction)h(on)e
+(the)h(curren)m(t)f(w)m(ord,)i(treating)f(it)g(as)g(a)g(directory)g(or)
+630 3751 y(\014lename,)g(in)e(the)h(same)f(w)m(a)m(y)i(as)e(the)h
+Ft(cdspell)d Fu(shell)j(option.)56 b(W)-8 b(ord)36 b(b)s(oundaries)e
+(are)630 3861 y(the)d(same)f(as)h(those)g(used)e(b)m(y)i
+Ft(shell-forward-word)p Fu(.)150 4025 y Ft(glob-complete-word)25
+b(\(M-g\))630 4134 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 4244 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
+4354 y(\014le)30 b(names)h(for)f(p)s(ossible)g(completions.)150
+4518 y Ft(glob-expand-word)c(\(C-x)j(*\))630 4628 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 4737 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 4847 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 5011 y Ft(glob-list-expansions)25 b(\(C-x)k(g\))630
+5121 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
+5230 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 5340 y(is)c(app)s(ended)f(b)s(efore)h(pathname)g
+(expansion.)p eop end
+%%Page: 143 149
+TeXDict begin 143 148 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(143)150 299 y Ft
+(display-shell-version)25 b(\(C-x)k(C-v\))630 408 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 566 y Ft(shell-expand-line)c(\(M-C-e\))630
+676 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
+785 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
+895 y(page)e(24\).)150 1053 y Ft(history-expand-line)25
+b(\(M-^\))630 1162 y Fu(P)m(erform)30 b(history)h(expansion)f(on)g(the)
+h(curren)m(t)f(line.)150 1320 y Ft(magic-space)d(\(\))630
+1429 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
+1539 y([History)31 b(In)m(teraction],)i(page)e(154\).)150
+1697 y Ft(alias-expand-line)26 b(\(\))630 1806 y Fu(P)m(erform)e(alias)
+i(expansion)e(on)h(the)g(curren)m(t)f(line)h(\(see)g(Section)h(6.6)f
+([Aliases],)j(page)d(100\).)150 1964 y Ft(history-and-alias-expand)o
+(-lin)o(e)f(\(\))630 2073 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 2231 y
+Ft(insert-last-argument)25 b(\(M-.)k(or)h(M-_\))630 2341
+y Fu(A)g(synon)m(ym)g(for)g Ft(yank-last-arg)p Fu(.)150
+2498 y Ft(edit-and-execute-command)24 b(\(C-x)29 b(C-e\))630
+2608 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
+2718 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 2827 y(editor,)31 b(in)f(that)h(order.)150
+3066 y Fs(8.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 3226
+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 3335 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 3445 y(the)e Fm(posix)e
+Fu(standard.)275 3578 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
+3688 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(67\).)83 b(The)150 3798 y(Readline)31 b(default)g(is)f
+Ft(emacs)f Fu(mo)s(de.)275 3931 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 4041 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 4150 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 4260 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 4499 y Fs(8.6)68
+b(Programmable)47 b(Completion)150 4658 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 4768
+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 4878 y([Programmable)h
+(Completion)f(Builtins],)k(page)d(146\),)j(the)c(programmable)g
+(completion)i(facilities)150 4987 y(are)31 b(in)m(v)m(ok)m(ed.)275
+5121 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 5230 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 5340 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)p eop end
+%%Page: 144 150
+TeXDict begin 144 149 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(144)150 299 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 408 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 518
+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 628 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 737 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
+847 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
+956 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 1113 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 1223 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 1332 y([Commands)30
+b(F)-8 b(or)31 b(Completion],)g(page)g(139\))h(is)f(p)s(erformed.)275
+1489 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 1598 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
+1708 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 1817 y(Section)31 b(5.2)h([Bash)e(V)-8
+b(ariables],)33 b(page)e(78,)g(for)f(a)h(description)g(of)f
+Ft(FIGNORE)p Fu(.)275 1974 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 2084 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 2193 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 2303 y(is)30
+b(used.)275 2459 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 2569 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
+2679 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
+2788 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 2898 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 3007 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(24\).)40 b(The)150 3117 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(35\).)150 3226
+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
+3336 y(matc)m(hing)k(w)m(ords)f(b)s(ecome)h(the)g(p)s(ossible)f
+(completions.)275 3493 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 3602 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_)150 3712 y(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 3821 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(78\).)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 3931 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 4041
+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
+4150 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
+4260 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 4369 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 4479 y(function)d(or)g(command)h(has)f(complete)i(freedom)e
+(in)g(generating)h(the)g(matc)m(hes.)275 4635 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
+4745 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 4855 y([Programmable)31 b(Completion)h(Builtins],)f
+(page)h(146\),)g(to)g(generate)g(the)f(matc)m(hes.)42
+b(It)31 b(m)m(ust)g(put)f(the)150 4964 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 5121 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 5230 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 5340 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(.)p eop end
+%%Page: 145 151
+TeXDict begin 145 150 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(145)275 299 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 408 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 518
+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 628 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
+737 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 847 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 956 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
+(71\))h(is)150 1066 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 1203 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 1313
+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
+1422 y(as)e(the)f(list)h(of)g(p)s(ossible)f(completions.)275
+1559 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 1669 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 1778 y(is)h(attempted.)275 1915 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
+2025 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
+2134 y(other)31 b(actions.)275 2271 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 2381 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 2491 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 2600 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 2710 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 2819 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 2929 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 3066 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
+3176 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
+3285 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 3395 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 3532 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
+3641 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)150 3751 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 3861 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 3970 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 4080 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 4189 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 4299 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 4408 y(all)g(at)g(once.)275 4545 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
+4655 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
+4765 y(load)31 b(completions)g(dynamically:)390 4902
+y Ft(_completion_loader\(\))390 5011 y({)581 5121 y(.)47
+b("/etc/bash_completion.d/$1)o(.sh)o(")42 b(>/dev/null)j(2>&1)i(&&)g
+(return)f(124)390 5230 y(})390 5340 y(complete)g(-D)h(-F)g
+(_completion_loader)c(-o)k(bashdefault)e(-o)i(default)p
+eop end
+%%Page: 146 152
+TeXDict begin 146 151 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(146)150 299 y Fs(8.7)68
+b(Programmable)47 b(Completion)f(Builtins)150 458 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 568
+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 677 y(to)e(mo)s(dify)f(the)g(completion)i(as)e(it)h(is)g(happ)s
+(ening.)150 893 y Ft(compgen)870 1046 y(compgen)46 b([)p
+Fj(option)p Ft(])f([)p Fj(word)p Ft(])630 1199 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
+1309 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 1418 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 1528 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 1638 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 1791 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
+1900 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 2010
+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 2120 y(b)s(e)d(displa)m(y)m(ed.)630
+2273 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 2382 y(generated.)150 2579 y Ft(complete)870
+2732 y(complete)46 b([-abcdefgjksuv])d([-o)k Fj(comp-option)p
+Ft(])e([-DEI])h([-A)h Fj(action)p Ft(])e([-)870 2842
+y(G)i Fj(globpat)p Ft(])870 2951 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 3061 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 3171 y(complete)g(-pr)g([-DEI])h([)p Fj(name)f
+Ft(...)o(])630 3324 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 3433 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 3543 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 3653
+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 3762 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)630 3872 y(actions)c(should)e(apply)g
+(to)i(the)f(\\default")h(command)e(completion;)k(that)e(is,)g
+(completion)630 3981 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
+4091 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 4200
+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 4310 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 4420 y(completion)29
+b(on)g(the)f(initial)h(non-assignmen)m(t)g(w)m(ord)f(on)g(the)g(line,)i
+(or)e(after)h(a)f(command)630 4529 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 4639 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
+4748 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 4858 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 4968 y(the)31 b(option.)630 5121 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 5230 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
+5340 y(page)31 b(143\).)p eop end
+%%Page: 147 153
+TeXDict begin 147 152 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(147)630 299 y(Other)28
+b(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
+408 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
+518 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
+669 y Ft(-o)i Fj(comp-option)1110 778 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 888 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 998 y(b)s(e)j(one)g(of:)1110 1148 y
+Ft(bashdefault)1590 1258 y Fu(P)m(erform)d(the)h(rest)f(of)h(the)g
+(default)f(Bash)h(completions)g(if)g(the)1590 1367 y(compsp)s(ec)i
+(generates)i(no)e(matc)m(hes.)1110 1518 y Ft(default)144
+b Fu(Use)22 b(Readline's)g(default)g(\014lename)g(completion)g(if)g
+(the)g(comp-)1590 1628 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110
+1778 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 1888 y(generates)32
+b(no)e(matc)m(hes.)1110 2039 y Ft(filenames)1590 2148
+y Fu(T)-8 b(ell)40 b(Readline)f(that)h(the)f(compsp)s(ec)f(generates)j
+(\014lenames,)1590 2258 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
+2367 y(adding)22 b(a)g(slash)g(to)h(directory)f(names,)i(quoting)f(sp)s
+(ecial)f(c)m(har-)1590 2477 y(acters,)39 b(or)d(suppressing)f(trailing)
+i(spaces\).)59 b(This)35 b(option)i(is)1590 2587 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 2696 y Ft(-F)p Fu(.)1110 2847 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 2956 y(are)j(\014lenames)f(\(quoting)h
+(\014lenames)g(is)f(the)h(default\).)1110 3107 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 3217 y(alphab)s(etically)-8
+b(.)1110 3367 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
+3477 y(w)m(ords)30 b(completed)h(at)g(the)g(end)f(of)g(the)h(line.)1110
+3628 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 3737 y(ated,)g
+(directory)f(name)g(completion)i(is)d(attempted)i(and)f(an)m(y)1590
+3847 y(matc)m(hes)j(are)e(added)g(to)h(the)g(results)f(of)g(the)h
+(other)g(actions.)630 3998 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 4107 y(completions:)1110
+4258 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
+4408 y Ft(arrayvar)96 b Fu(Arra)m(y)31 b(v)-5 b(ariable)31
+b(names.)1110 4559 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
+4669 y(Readline)h(Commands],)f(page)h(133\).)1110 4819
+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 4929
+y(as)31 b Ft(-b)p Fu(.)1110 5080 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 5230 y Ft(directory)1590 5340 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(.)p eop end
+%%Page: 148 154
+TeXDict begin 148 153 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(148)1110 299 y Ft(disabled)96
+b Fu(Names)31 b(of)g(disabled)f(shell)g(builtins.)1110
+455 y Ft(enabled)144 b Fu(Names)31 b(of)g(enabled)f(shell)g(builtins.)
+1110 610 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
+720 y(\014ed)d(as)g Ft(-e)p Fu(.)1110 876 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 1031 y Ft(function)96 b Fu(Names)31
+b(of)g(shell)f(functions.)1110 1187 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 1343 y Ft(helptopic)1590 1452
+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 1562 y(tion)31
+b(4.2)g([Bash)g(Builtins],)g(page)g(55\).)1110 1718 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 1827 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 1937 y(V)-8 b(ariables],)32 b(page)f(78\).)1110
+2093 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
+2202 y(\014ed)f(as)g Ft(-j)p Fu(.)1110 2358 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
+2514 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 2669 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 2825 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 2935
+y(\(see)31 b(Section)h(4.3.1)g([The)e(Set)g(Builtin],)i(page)f(67\).)
+1110 3091 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
+3200 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(55\).)
+1110 3356 y Ft(signal)192 b Fu(Signal)31 b(names.)1110
+3512 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 3667 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 3823 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 3933 y Ft(-v)p
+Fu(.)630 4088 y Ft(-C)30 b Fj(command)1110 4198 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 4308 y(used)38 b(as)h(the)g(p)s(ossible)f
+(completions.)67 b(Argumen)m(ts)39 b(are)g(passed)f(as)h(with)1110
+4417 y(the)31 b Ft(-F)e Fu(option.)630 4573 y Ft(-F)h
+Fj(function)1110 4682 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 4792 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 4902 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 5011 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
+5121 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 5230 y(page)30 b(143\).)42
+b(When)29 b(it)h(\014nishes,)e(the)h(p)s(ossible)g(completions)h(are)g
+(retriev)m(ed)1110 5340 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.)p
+eop end
+%%Page: 149 155
+TeXDict begin 149 154 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(149)630 299 y Ft(-G)30
+b Fj(globpat)1110 408 y Fu(The)39 b(\014lename)h(expansion)g(pattern)g
+Fr(globpat)j Fu(is)d(expanded)f(to)h(generate)1110 518
+y(the)31 b(p)s(ossible)e(completions.)630 708 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
+817 y(all)c(other)g(options)g(ha)m(v)m(e)g(b)s(een)f(applied.)630
+1007 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 1116 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630
+1306 y Ft(-W)h Fj(wordlist)1110 1416 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 1525 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 1635 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 1744 y(w)m(ord)f(b)s(eing)g(completed.)630
+1934 y Ft(-X)g Fj(filterpat)1110 2043 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 2153 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 2263 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 2372
+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 2482 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 2671 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
+2781 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
+2891 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 3000 y(or)f(an)h(error)f(o)s(ccurs)g(adding)g(a)g(completion)i(sp)s
+(eci\014cation.)150 3190 y Ft(compopt)870 3339 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 3489 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
+3598 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 3708 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.)630 3818 y(The)f(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
+3927 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
+4037 y(\\default")33 b(command)f(completion;)i(that)f(is,)g(completion)
+g(attempted)g(on)f(a)g(command)630 4146 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 4256 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 4366 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 4475 y(supplied)23
+b(options)i(should)f(apply)g(to)i(completion)g(on)e(the)h(initial)h
+(non-assignmen)m(t)f(w)m(ord)630 4585 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
+4694 y(command)30 b(name)h(completion.)630 4844 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 4954
+y(b)s(oth)30 b(tak)m(e)i(precedence)e(o)m(v)m(er)i Ft(-I)630
+5103 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 5213 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 5322 y(or)e(an)h(output)f(error)g(o)s(ccurs.)p
+eop end
+%%Page: 150 156
+TeXDict begin 150 155 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(150)150 299 y Fs(8.8)68
+b(A)44 b(Programmable)j(Completion)f(Example)150 458
+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
+568 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 677 y(command)h(using)g Ft(complete)e(-F)p
+Fu(.)275 829 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 939 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 1049
+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 1158 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 1310 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 1420 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 1529 y(expansion)22 b(\(see)h(Section)g(3.5.2)g
+([Tilde)g(Expansion],)g(page)g(25\),)i(searc)m(hing)e(directories)g(in)
+e Fr($CDP)-8 b(A)g(TH)p Fu(,)150 1639 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(48\),)j(and)c(basic)h(supp)s(ort)150
+1748 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(71\).)46
+b Ft(_comp_)150 1858 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
+1968 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 2077 y(line.)275 2229 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
+2339 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
+2448 y(the)h(function)f(returns.)390 2600 y Ft(#)47 b(A)h(completion)d
+(function)g(for)i(the)g(cd)g(builtin)390 2710 y(#)g(based)g(on)g(the)g
+(cd)g(completion)e(function)h(from)g(the)h(bash_completion)d(package)
+390 2819 y(_comp_cd\(\))390 2929 y({)581 3039 y(local)i(IFS=$')g
+(\\t\\n')190 b(#)47 b(normalize)f(IFS)581 3148 y(local)g(cur)h
+(_skipdot)f(_cdpath)581 3258 y(local)g(i)i(j)f(k)581
+3477 y(#)g(Tilde)g(expansion,)e(which)h(also)h(expands)f(tilde)g(to)h
+(full)g(pathname)581 3587 y(case)g("$2")f(in)581 3696
+y(\\~*\))190 b(eval)46 b(cur="$2")g(;;)581 3806 y(*\))286
+b(cur=$2)46 b(;;)581 3915 y(esac)581 4134 y(#)h(no)h(cdpath)e(or)h
+(absolute)e(pathname)h(--)h(straight)f(directory)f(completion)581
+4244 y(if)i([[)g(-z)g("${CDPATH:-}")e(]])i(||)g([[)g("$cur")f(==)h
+(@\(./*|../*|/*\))d(]];)j(then)772 4354 y(#)g(compgen)f(prints)g(paths)
+h(one)f(per)h(line;)g(could)f(also)h(use)g(while)f(loop)772
+4463 y(IFS=$'\\n')772 4573 y(COMPREPLY=\()f($\(compgen)g(-d)i(--)g
+("$cur"\))f(\))772 4682 y(IFS=$')g(\\t\\n')581 4792 y(#)h
+(CDPATH+directories)c(in)k(the)g(current)f(directory)f(if)j(not)e(in)i
+(CDPATH)581 4902 y(else)772 5011 y(IFS=$'\\n')772 5121
+y(_skipdot=false)772 5230 y(#)f(preprocess)e(CDPATH)h(to)i(convert)d
+(null)i(directory)e(names)i(to)g(.)772 5340 y(_cdpath=${CDPATH/#:/.:})p
+eop end
+%%Page: 151 157
+TeXDict begin 151 156 bop 150 -116 a Fu(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(151)772 299 y Ft
+(_cdpath=${_cdpath//::/:.)o(:})772 408 y(_cdpath=${_cdpath/\045:/:.})
+772 518 y(for)47 b(i)g(in)g(${_cdpath//:/$'\\n'};)c(do)963
+628 y(if)k([[)g($i)g(-ef)g(.)h(]];)f(then)f(_skipdot=true;)e(fi)963
+737 y(k="${#COMPREPLY[@]}")963 847 y(for)j(j)g(in)g($\()g(compgen)f(-d)
+h(--)h("$i/$cur")d(\);)i(do)1154 956 y(COMPREPLY[k++]=${j#$i/})375
+b(#)48 b(cut)f(off)f(directory)963 1066 y(done)772 1176
+y(done)772 1285 y($_skipdot)f(||)i(COMPREPLY+=\()e($\(compgen)g(-d)i
+(--)g("$cur"\))f(\))772 1395 y(IFS=$')g(\\t\\n')581 1504
+y(fi)581 1724 y(#)h(variable)f(names)g(if)h(appropriate)e(shell)i
+(option)f(set)h(and)f(no)i(completions)581 1833 y(if)f(shopt)f(-q)i
+(cdable_vars)c(&&)k([[)f(${#COMPREPLY[@]})c(-eq)k(0)g(]];)g(then)772
+1943 y(COMPREPLY=\()e($\(compgen)g(-v)i(--)g("$cur"\))f(\))581
+2052 y(fi)581 2271 y(return)g(0)390 2381 y(})275 2516
+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 2650
+y Ft(#)47 b(Tell)g(readline)f(to)h(quote)f(appropriate)f(and)i(append)f
+(slashes)g(to)h(directories;)390 2760 y(#)g(use)g(the)g(bash)g(default)
+f(completion)f(for)i(other)f(arguments)390 2869 y(complete)g(-o)h
+(filenames)e(-o)i(nospace)f(-o)h(bashdefault)e(-F)i(_comp_cd)f(cd)150
+3004 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 3113 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 3223 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 3333 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 3442
+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 3552 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
+3661 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)150 3771 y(directory)c(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
+3880 y(rest)e(of)g(the)g Ft(")p Fu(Bash)g(default)p Ft(")g
+Fu(completions)h({)f(p)s(ossible)f(completions)i(that)g(Bash)f(adds)f
+(to)i(the)f(default)150 3990 y(Readline)i(set.)40 b(These)28
+b(include)f(things)g(lik)m(e)i(command)e(name)h(completion,)h(v)-5
+b(ariable)28 b(completion)h(for)150 4100 y(w)m(ords)e(b)s(eginning)h
+(with)f(`)p Ft($)p Fu(')h(or)g(`)p Ft(${)p Fu(',)h(completions)g(con)m
+(taining)g(pathname)f(expansion)g(patterns)g(\(see)150
+4209 y(Section)j(3.5.8)h([Filename)g(Expansion],)e(page)i(35\),)f(and)f
+(so)h(on.)275 4344 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 4453 y(completion)32 b(for)e(a)h
+Ft(cd)e Fu(command.)275 4588 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 4697 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 4697 28 4 v 39 w(completion)i(pro)5 b(ject.)150
+4807 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 4917 y(Macdonald,)48 b(the)c(pro)5 b(ject)44
+b(no)m(w)g(liv)m(es)h(at)f Ft(https:)11 b(/)g(/)g(github)g(.)g(com)g(/)
+g(sc)o(op)g(/)f(bash)o(-co)o(mple)o(tion)g(/)h Fu(.)150
+5026 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 5161 y(An)54
+b(older)h(v)m(ersion)h(of)f(the)g(bash)p 1532 5161 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 5270 y Ft(examples/complete)26 b Fu(sub)s(directory)-8
+b(.)p eop end
+%%Page: 152 158
+TeXDict begin 152 157 bop 3614 -116 a Fu(152)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(67\),)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(55\),)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(134\).)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(71,)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: 153 159
+TeXDict begin 153 158 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(153)150
+299 y Ft(fc)870 430 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 540 y(fc)h(-s)g([)p
+Fj(pat)p Ft(=)p Fj(rep)p Ft(])f([)p Fj(command)p Ft(])630
+671 y Fu(The)32 b(\014rst)g(form)g(selects)j(a)e(range)g(of)f(commands)
+h(from)f Fr(\014rst)i Fu(to)f Fr(last)j Fu(from)c(the)h(history)630
+781 y(list)41 b(and)f(displa)m(ys)g(or)g(edits)h(and)e(re-executes)j
+(them.)71 b(Both)40 b Fr(\014rst)i Fu(and)e Fr(last)j
+Fu(ma)m(y)e(b)s(e)630 891 y(sp)s(eci\014ed)33 b(as)h(a)g(string)g(\(to)
+h(lo)s(cate)h(the)e(most)g(recen)m(t)h(command)f(b)s(eginning)f(with)g
+(that)630 1000 y(string\))28 b(or)g(as)h(a)f(n)m(um)m(b)s(er)f(\(an)h
+(index)g(in)m(to)h(the)f(history)g(list,)h(where)f(a)g(negativ)m(e)i(n)
+m(um)m(b)s(er)630 1110 y(is)g(used)g(as)h(an)f(o\013set)h(from)f(the)h
+(curren)m(t)f(command)g(n)m(um)m(b)s(er\).)630 1241 y(When)j(listing,)h
+(a)f Fr(\014rst)h Fu(or)f Fr(last)j Fu(of)d(0)g(is)g(equiv)-5
+b(alen)m(t)34 b(to)g(-1)f(and)g(-0)g(is)g(equiv)-5 b(alen)m(t)34
+b(to)g(the)630 1351 y(curren)m(t)k(command)h(\(usually)g(the)g
+Ft(fc)f Fu(command\);)43 b(otherwise)c(0)g(is)g(equiv)-5
+b(alen)m(t)40 b(to)f(-1)630 1461 y(and)30 b(-0)h(is)f(in)m(v)-5
+b(alid.)630 1592 y(If)33 b Fr(last)j Fu(is)e(not)f(sp)s(eci\014ed,)h
+(it)g(is)f(set)h(to)g Fr(\014rst)p Fu(.)49 b(If)33 b
+Fr(\014rst)i Fu(is)e(not)h(sp)s(eci\014ed,)f(it)h(is)g(set)g(to)g(the)
+630 1702 y(previous)g(command)f(for)h(editing)h(and)e
+Fq(\000)p Fu(16)i(for)f(listing.)53 b(If)33 b(the)h Ft(-l)g
+Fu(\015ag)g(is)g(giv)m(en,)j(the)630 1811 y(commands)27
+b(are)h(listed)g(on)f(standard)g(output.)39 b(The)27
+b Ft(-n)g Fu(\015ag)h(suppresses)e(the)h(command)630
+1921 y(n)m(um)m(b)s(ers)h(when)h(listing.)42 b(The)29
+b Ft(-r)g Fu(\015ag)i(rev)m(erses)f(the)g(order)f(of)i(the)f(listing.)
+41 b(Otherwise,)630 2030 y(the)i(editor)h(giv)m(en)g(b)m(y)f
+Fr(ename)49 b Fu(is)43 b(in)m(v)m(ok)m(ed)i(on)e(a)g(\014le)h(con)m
+(taining)g(those)g(commands.)630 2140 y(If)c Fr(ename)46
+b Fu(is)40 b(not)h(giv)m(en,)j(the)d(v)-5 b(alue)41 b(of)f(the)h(follo)
+m(wing)h(v)-5 b(ariable)41 b(expansion)f(is)g(used:)630
+2250 y Ft(${FCEDIT:-${EDITOR:-vi}})o Fu(.)34 b(This)25
+b(sa)m(ys)i(to)g(use)f(the)g(v)-5 b(alue)27 b(of)f(the)h
+Ft(FCEDIT)d Fu(v)-5 b(ariable)630 2359 y(if)33 b(set,)i(or)e(the)h(v)-5
+b(alue)33 b(of)h(the)f Ft(EDITOR)f Fu(v)-5 b(ariable)34
+b(if)f(that)h(is)f(set,)i(or)e Ft(vi)f Fu(if)i(neither)f(is)g(set.)630
+2469 y(When)d(editing)h(is)g(complete,)h(the)e(edited)h(commands)f(are)
+h(ec)m(ho)s(ed)g(and)e(executed.)630 2600 y(In)34 b(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 2710 y(selected)29 b(command)e(is)h
+(replaced)f(b)m(y)h Fr(rep)p Fu(.)39 b Fr(command)31
+b Fu(is)c(in)m(terpreted)h(the)f(same)h(as)g Fr(\014rst)630
+2819 y Fu(ab)s(o)m(v)m(e.)630 2951 y(A)j(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
+3061 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 3170 y(command)30 b(\(see)h(Section)h(6.6)f([Aliases],)h
+(page)g(100\).)150 3324 y Ft(history)870 3455 y(history)46
+b([)p Fj(n)p Ft(])870 3565 y(history)g(-c)870 3674 y(history)g(-d)h
+Fj(offset)870 3784 y Ft(history)f(-d)h Fj(start)p Ft(-)p
+Fj(end)870 3893 y Ft(history)f([-anrw])g([)p Fj(filename)p
+Ft(])870 4003 y(history)g(-ps)h Fj(arg)630 4134 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
+4244 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 4354 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
+4463 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
+4573 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 4682 y(the)e(history)f(line.)630 4814 y(Options,)g(if)h(supplied,)e
+(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)630 4967
+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 5077 y(to)31 b(replace)g(the)g(history)f(list)h
+(completely)-8 b(.)630 5230 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 5340 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)p eop end
+%%Page: 154 160
+TeXDict begin 154 159 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(154)1110
+299 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
+408 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 518 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 628 y(-d)30 b Fu(command.)630
+785 y Ft(-d)g Fj(start)p Ft(-)p Fj(end)1110 895 y Fu(Delete)e(the)e
+(range)h(of)f(history)g(en)m(tries)h(b)s(et)m(w)m(een)f(p)s(ositions)g
+Fr(start)j Fu(and)c Fr(end)p Fu(,)1110 1004 y(inclusiv)m(e.)44
+b(P)m(ositiv)m(e)33 b(and)e(negativ)m(e)i(v)-5 b(alues)31
+b(for)g Fr(start)j Fu(and)d Fr(end)j Fu(are)d(in)m(ter-)1110
+1114 y(preted)f(as)h(describ)s(ed)e(ab)s(o)m(v)m(e.)630
+1271 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
+1381 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 1490 y(not)31
+b(already)g(app)s(ended)d(to)j(the)g(history)f(\014le.)630
+1648 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
+1758 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
+1867 y(since)31 b(the)f(b)s(eginning)g(of)g(the)h(curren)m(t)f(Bash)h
+(session.)630 2025 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 2182 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 2339
+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
+2449 y(the)d(standard)f(output,)i(without)f(storing)g(the)g(results)g
+(in)g(the)g(history)g(list.)630 2606 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
+2764 y(If)35 b(a)h Fr(\014lename)41 b Fu(argumen)m(t)c(is)e(supplied)g
+(when)g(an)m(y)h(of)g(the)g Ft(-w)p Fu(,)g Ft(-r)p Fu(,)h
+Ft(-a)p Fu(,)g(or)e Ft(-n)h Fu(options)630 2873 y(is)j(used,)i(Bash)e
+(uses)f Fr(\014lename)44 b Fu(as)c(the)f(history)g(\014le.)66
+b(If)39 b(not,)i(then)e(the)g(v)-5 b(alue)40 b(of)f(the)630
+2983 y Ft(HISTFILE)28 b Fu(v)-5 b(ariable)31 b(is)g(used.)630
+3117 y(The)j(return)g(v)-5 b(alue)35 b(is)g(0)g(unless)f(an)h(in)m(v)-5
+b(alid)35 b(option)g(is)g(encoun)m(tered,)h(an)f(error)f(o)s(ccurs)630
+3226 y(while)h(reading)g(or)g(writing)f(the)h(history)g(\014le,)h(an)f
+(in)m(v)-5 b(alid)36 b Fr(o\013set)h Fu(or)e(range)g(is)g(supplied)630
+3336 y(as)c(an)g(argumen)m(t)g(to)h Ft(-d)p Fu(,)e(or)h(the)g(history)g
+(expansion)f(supplied)g(as)h(an)g(argumen)m(t)g(to)h
+Ft(-p)630 3445 y Fu(fails.)150 3684 y Fs(9.3)68 b(History)46
+b(Expansion)150 3844 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 3953 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 4063 y(history)30 b(information.)275
+4196 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
+4306 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
+4415 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g
+(quic)m(kly)-8 b(.)275 4549 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 4659 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 4768 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 4902 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 5011 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
+5121 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 5230 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 5340 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)p
+eop end
+%%Page: 155 161
+TeXDict begin 155 160 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(155)150
+299 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 408 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 518 y(whic)m(h)30 b(is)h(`)p Ft(!)p Fu(')f(b)m(y)g
+(default.)275 655 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 764 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 874 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 983 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 1093 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 1202
+y(double)g(quotes.)275 1339 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 1448 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 1558 y(precedes)30
+b(the)h(closing)g(double)f(quote)h(in)f(a)h(double-quoted)g(string.)275
+1695 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
+1804 y(Builtin],)24 b(page)e(71\))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 1914 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 2023
+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
+2133 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 2242 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 2352 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 2462 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 2571
+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
+2681 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 2817 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 2927 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
+3036 y(page)32 b(78\).)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 3146 y(writing)e(the)h(history)f(\014le.)150 3347
+y Fk(9.3.1)63 b(Ev)m(en)m(t)39 b(Designators)150 3494
+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 3604 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 3766 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 3876 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
+3985 y Fu(builtin\).)150 4147 y Ft(!)p Fj(n)384 b Fu(Refer)30
+b(to)i(command)e(line)g Fr(n)p Fu(.)150 4308 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 4469 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 4631 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
+4740 y(list)31 b(starting)g(with)f Fr(string)p Fu(.)150
+4902 y Ft(!?)p Fj(string)p Ft([?])630 5011 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 5121 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 5230 y(immediately)f(b)m(y)e(a)h
+(newline.)40 b(If)29 b Fr(string)38 b Fu(is)29 b(missing,)h(the)g
+(string)f(from)g(the)h(most)g(recen)m(t)630 5340 y(searc)m(h)h(is)f
+(used;)g(it)h(is)g(an)f(error)g(if)g(there)h(is)f(no)g(previous)g
+(searc)m(h)h(string.)p eop end
+%%Page: 156 162
+TeXDict begin 156 161 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(156)150
+299 y Ft(^)p Fj(string1)p Ft(^)p Fj(string2)p Ft(^)630
+408 y Fu(Quic)m(k)32 b(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 518 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 673 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 867 y Fk(9.3.2)63 b(W)-10 b(ord)41
+b(Designators)150 1014 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
+1124 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 1233 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)150
+1343 y(\014rst)f(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 1452 y(single)h(spaces.)275
+1584 y(F)-8 b(or)31 b(example,)150 1739 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
+1849 y(mand)30 b(is)g(rep)s(eated)g(in)g(toto.)150 2003
+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
+2113 y(to)31 b Ft(!$)p Fu(.)150 2267 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 2377
+y(letters)j Ft(fi)p Fu(.)275 2531 y(Here)e(are)h(the)g(w)m(ord)f
+(designators:)150 2686 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 2840 y Fj(n)432
+b Fu(The)30 b Fr(n)p Fu(th)g(w)m(ord.)150 2995 y Ft(^)432
+b Fu(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m(ord)g(1.)150
+3150 y Ft($)432 b Fu(The)30 b(last)h(argumen)m(t.)150
+3304 y Ft(\045)432 b Fu(The)40 b(\014rst)h(w)m(ord)f(matc)m(hed)i(b)m
+(y)f(the)g(most)g(recen)m(t)h(`)p Ft(?)p Fj(string)p
+Ft(?)p Fu(')d(searc)m(h,)44 b(if)d(the)g(searc)m(h)630
+3414 y(string)30 b(b)s(egins)g(with)g(a)h(c)m(haracter)h(that)f(is)f
+(part)h(of)f(a)h(w)m(ord.)150 3568 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 3723
+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
+3832 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 3942 y(that)j(case.)150 4097 y Fj(x)p
+Ft(*)384 b Fu(Abbreviates)31 b(`)p Fj(x)p Ft(-$)p Fu(')150
+4251 y Fj(x)p Ft(-)384 b Fu(Abbreviates)27 b(`)p Fj(x)p
+Ft(-$)p Fu(')g(lik)m(e)h(`)p Fj(x)p Ft(*)p Fu(',)g(but)e(omits)i(the)f
+(last)h(w)m(ord.)39 b(If)27 b(`)p Ft(x)p Fu(')g(is)g(missing,)g(it)h
+(defaults)630 4361 y(to)j(0.)275 4515 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 4625 y(is)d(used)g(as)h(the)f(ev)m(en)m
+(t.)150 4819 y Fk(9.3.3)63 b(Mo)s(di\014ers)150 4966
+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 5076 y(mo)s(di\014ers,)33 b(eac)m(h)h(preceded)f(b)m(y)g(a)h(`)p
+Ft(:)p Fu('.)50 b(These)33 b(mo)s(dify)-8 b(,)33 b(or)h(edit,)g(the)g
+(w)m(ord)f(or)g(w)m(ords)g(selected)h(from)150 5185 y(the)d(history)f
+(ev)m(en)m(t.)150 5340 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.)p eop end
+%%Page: 157 163
+TeXDict begin 157 162 bop 150 -116 a Fu(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(157)150
+299 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 458 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
+618 y Ft(e)432 b Fu(Remo)m(v)m(e)32 b(all)f(but)f(the)h(trailing)g
+(su\016x.)150 777 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 936 y Ft(q)432 b
+Fu(Quote)31 b(the)f(substituted)g(w)m(ords,)g(escaping)h(further)e
+(substitutions.)150 1096 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 1205 y(and)38 b(newlines.)66
+b(The)39 b(`)p Ft(q)p Fu(')g(and)f(`)p Ft(x)p Fu(')h(mo)s(di\014ers)f
+(are)h(m)m(utually)g(exclusiv)m(e;)45 b(the)39 b(last)h(one)630
+1315 y(supplied)29 b(is)i(used.)150 1474 y Ft(s/)p Fj(old)p
+Ft(/)p Fj(new)p Ft(/)630 1584 y Fu(Substitute)g Fr(new)39
+b Fu(for)32 b(the)g(\014rst)f(o)s(ccurrence)h(of)f Fr(old)36
+b Fu(in)31 b(the)h(ev)m(en)m(t)h(line.)46 b(An)m(y)31
+b(c)m(haracter)630 1694 y(ma)m(y)k(b)s(e)e(used)h(as)g(the)h(delimiter)
+g(in)f(place)h(of)f(`)p Ft(/)p Fu('.)53 b(The)33 b(delimiter)i(ma)m(y)g
+(b)s(e)f(quoted)g(in)630 1803 y Fr(old)40 b Fu(and)c
+Fr(new)44 b Fu(with)36 b(a)h(single)g(bac)m(kslash.)60
+b(If)36 b(`)p Ft(&)p Fu(')h(app)s(ears)e(in)i Fr(new)p
+Fu(,)g(it)h(is)e(replaced)h(b)m(y)630 1913 y Fr(old)p
+Fu(.)k(A)31 b(single)g(bac)m(kslash)g(will)g(quote)g(the)g(`)p
+Ft(&)p Fu('.)41 b(If)31 b Fr(old)j Fu(is)c(n)m(ull,)h(it)g(is)g(set)g
+(to)g(the)g(last)g Fr(old)630 2022 y Fu(substituted,)j(or,)g(if)f(no)g
+(previous)g(history)g(substitutions)g(to)s(ok)h(place,)h(the)e(last)h
+Fr(string)630 2132 y Fu(in)d(a)g(!?)p Fr(string)8 b Ft([?])30
+b Fu(searc)m(h.)44 b(If)31 b Fr(new)38 b Fu(is)31 b(n)m(ull,)h(eac)m(h)
+g(matc)m(hing)g Fr(old)j Fu(is)c(deleted.)44 b(The)30
+b(\014nal)630 2242 y(delimiter)h(is)g(optional)g(if)f(it)h(is)g(the)f
+(last)h(c)m(haracter)h(on)f(the)f(input)g(line.)150 2401
+y Ft(&)432 b Fu(Rep)s(eat)31 b(the)f(previous)g(substitution.)150
+2560 y Ft(g)150 2670 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 2780 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 2939 y
+Ft(G)432 b Fu(Apply)30 b(the)g(follo)m(wing)i(`)p Ft(s)p
+Fu(')f(or)f(`)p Ft(&)p Fu(')h(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: 158 164
+TeXDict begin 158 163 bop 3614 -116 a Fu(158)150 299
+y Fp(10)80 b(Installing)52 b(Bash)150 539 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
+648 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 758 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 867 y Fm(ms-dos)p Fu(,)h Fm(os/2)p
+Fu(,)g(and)g(Windo)m(ws)g(platforms.)150 1111 y Fs(10.1)68
+b(Basic)45 b(Installation)150 1270 y Fu(These)30 b(are)h(installation)h
+(instructions)e(for)h(Bash.)275 1407 y(The)e(simplest)i(w)m(a)m(y)g(to)
+g(compile)h(Bash)e(is:)199 1543 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
+1653 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 1762 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
+1872 y Fu(itself.)330 2007 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 2117 y(features)e(it)g(is)f(c)m(hec)
+m(king)i(for.)199 2252 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 2388
+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 2523
+y(4.)61 b(T)m(yp)s(e)42 b(`)p Ft(make)30 b(install)p
+Fu(')41 b(to)i(install)h Ft(bash)d Fu(and)i Ft(bashbug)p
+Fu(.)76 b(This)42 b(will)h(also)g(install)h(the)f(man-)330
+2633 y(ual)30 b(pages)g(and)g(Info)f(\014le,)h(message)h(translation)g
+(\014les,)f(some)g(supplemen)m(tal)h(do)s(cumen)m(tation,)g(a)330
+2742 y(n)m(um)m(b)s(er)c(of)h(example)h(loadable)g(builtin)f(commands,)
+g(and)g(a)g(set)h(of)f(header)g(\014les)g(for)g(dev)m(eloping)330
+2852 y(loadable)36 b(builtins.)55 b(Y)-8 b(ou)36 b(ma)m(y)f(need)g
+(additional)h(privileges)g(to)g(install)g Ft(bash)e Fu(to)i(y)m(our)f
+(desired)330 2962 y(destination,)f(so)f(`)p Ft(sudo)d(make)f(install)p
+Fu(')i(migh)m(t)i(b)s(e)f(required.)47 b(More)33 b(information)g(ab)s
+(out)f(con-)330 3071 y(trolling)c(the)g(lo)s(cations)g(where)f
+Ft(bash)f Fu(and)h(other)g(\014les)g(are)h(installed)g(is)f(b)s(elo)m
+(w)g(\(see)h(Section)g(10.4)330 3181 y([Installation)k(Names],)g(page)f
+(160\).)275 3343 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 3453 y(v)-5
+b(ariables)38 b(used)f(during)f(compilation.)64 b(It)37
+b(uses)g(those)h(v)-5 b(alues)38 b(to)g(create)h(a)f
+Ft(Makefile)d Fu(in)i(eac)m(h)i(di-)150 3562 y(rectory)32
+b(of)f(the)h(pac)m(k)-5 b(age)33 b(\(the)f(top)f(directory)-8
+b(,)33 b(the)e Ft(builtins)p Fu(,)f Ft(doc)p Fu(,)h Ft(po)p
+Fu(,)g(and)f Ft(support)g Fu(directories,)150 3672 y(eac)m(h)38
+b(directory)g(under)d Ft(lib)p Fu(,)j(and)f(sev)m(eral)h(others\).)61
+b(It)38 b(also)g(creates)g(a)f Ft(config.h)e Fu(\014le)i(con)m(taining)
+150 3781 y(system-dep)s(enden)m(t)31 b(de\014nitions.)44
+b(Finally)-8 b(,)34 b(it)e(creates)h(a)f(shell)g(script)f(named)g
+Ft(config.status)d Fu(that)150 3891 y(y)m(ou)35 b(can)h(run)d(in)i(the)
+g(future)f(to)i(recreate)g(the)g(curren)m(t)e(con\014guration,)j(a)f
+(\014le)f Ft(config.cache)c Fu(that)150 4001 y(sa)m(v)m(es)39
+b(the)e(results)g(of)g(its)h(tests)g(to)g(sp)s(eed)e(up)h
+(recon\014guring,)h(and)f(a)h(\014le)f Ft(config.log)d
+Fu(con)m(taining)150 4110 y(compiler)c(output)g(\(useful)f(mainly)h
+(for)f(debugging)h Ft(configure)p Fu(\).)38 b(If)29 b(at)i(some)f(p)s
+(oin)m(t)f Ft(config.cache)150 4220 y Fu(con)m(tains)j(results)e(y)m
+(ou)g(don't)h(w)m(an)m(t)g(to)g(k)m(eep,)g(y)m(ou)g(ma)m(y)g(remo)m(v)m
+(e)h(or)e(edit)h(it.)275 4356 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 4466 y(stands,)30
+b(t)m(yp)s(e)390 4602 y Ft(bash-4.2$)45 b(./configure)g(--help)150
+4738 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 4875 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 4984 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 5094 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 5204
+y(co)s(de)31 b(in)f Ft(/usr/local/src/bash-4.4)o Fu(:)390
+5340 y Ft(mkdir)46 b(/usr/local/build/bash-4.4)p eop
+end
+%%Page: 159 165
+TeXDict begin 159 164 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(159)390 299 y Ft(cd)47
+b(/usr/local/build/bash-4.4)390 408 y(bash)g(/usr/local/src/bash-4.4)o
+(/con)o(fig)o(ure)390 518 y(make)275 652 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(159,)j(for)c(more)i(information)150
+762 y(ab)s(out)i(building)g(in)g(a)g(directory)h(separate)h(from)e(the)
+g(source.)275 896 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 1006 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 1115 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 1250 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 1359 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 1469 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.69)i(or)f(new)m(er.)275 1603 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 1713 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
+1822 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 2063 y
+Fs(10.2)68 b(Compilers)46 b(and)f(Options)150 2222 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 2332 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
+2441 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 2551 y(line)31 b(lik)m(e)g(this:)390 2685
+y Ft(CC=c89)46 b(CFLAGS=-O2)f(LIBS=-lposix)g(./configure)275
+2819 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
+2954 y Ft(env)47 b(CPPFLAGS=-I/usr/local/in)o(clud)o(e)42
+b(LDFLAGS=-s)j(./configure)275 3088 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 3328 y Fs(10.3)68 b(Compiling)46 b(F)-11
+b(or)45 b(Multiple)g(Arc)l(hitectures)150 3488 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
+3597 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
+3707 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
+3817 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 3926 y(source)32 b(directory)h(\(see)g
+(Section)f(10.1)i([Basic)f(Installation],)i(page)e(158\).)47
+b(Y)-8 b(ou)32 b(ma)m(y)h(need)f(to)g(supply)150 4036
+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 4145 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 4280
+y(If)22 b(y)m(ou)i(ha)m(v)m(e)g(to)g(use)f(a)g Ft(make)f
+Fu(that)i(do)s(es)f(not)g(supp)s(ort)e(the)j Ft(VPATH)d
+Fu(v)-5 b(ariable,)26 b(y)m(ou)d(can)h(compile)g(Bash)150
+4389 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 4499 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 4633 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 4743
+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 4852 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 4962 y(directory)31 b Ft(/usr/gnu/src/bash-2.0)p
+Fu(:)390 5096 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
+5230 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 5340 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.)p
+eop end
+%%Page: 160 166
+TeXDict begin 160 165 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(160)150 299 y Fs(10.4)68
+b(Installation)47 b(Names)150 458 y Fu(By)36 b(default,)g(`)p
+Ft(make)30 b(install)p Fu(')j(will)j(install)g(in)m(to)g
+Ft(/usr/local/bin)p Fu(,)d Ft(/usr/local/man)p Fu(,)g(etc.;)39
+b(that)150 568 y(is,)i(the)d Fr(installation)i(pre\014x)k
+Fu(defaults)38 b(to)h Ft(/usr/local)p Fu(.)62 b(Y)-8
+b(ou)39 b(can)g(sp)s(ecify)f(an)g(installation)i(pre\014x)150
+677 y(other)34 b(than)g Ft(/usr/local)d Fu(b)m(y)j(giving)h
+Ft(configure)d Fu(the)i(option)g Ft(--prefix=)p Fj(PATH)p
+Fu(,)e(or)i(b)m(y)g(sp)s(ecifying)150 787 y(a)h(v)-5
+b(alue)34 b(for)h(the)f Ft(prefix)f Fu(`)p Ft(make)p
+Fu(')g(v)-5 b(ariable)35 b(when)f(running)e(`)p Ft(make)e(install)p
+Fu(')i(\(e.g.,)37 b(`)p Ft(make)30 b(install)150 897
+y(prefix=)p Fj(PATH)p Fu('\).)35 b(The)21 b Ft(prefix)f
+Fu(v)-5 b(ariable)22 b(pro)m(vides)g(a)f(default)h(for)f
+Ft(exec_prefix)e Fu(and)i(other)g(v)-5 b(ariables)150
+1006 y(used)30 b(when)f(installing)i(bash.)275 1159 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
+1268 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 1378 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 1488 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.)275
+1640 y(If)35 b(y)m(ou)i(w)m(ould)e(lik)m(e)j(to)e(c)m(hange)i(the)e
+(installation)i(lo)s(cations)f(for)f(a)h(single)f(run,)h(y)m(ou)f(can)g
+(sp)s(ecify)150 1750 y(these)28 b(v)-5 b(ariables)27
+b(as)h(argumen)m(ts)f(to)h Ft(make)p Fu(:)38 b(`)p Ft(make)29
+b(install)g(exec_prefix=/)p Fu(')23 b(will)28 b(install)g
+Ft(bash)e Fu(and)150 1859 y Ft(bashbug)i Fu(in)m(to)k
+Ft(/bin)d Fu(instead)i(of)f(the)h(default)f Ft(/usr/local/bin)p
+Fu(.)275 2012 y(If)43 b(y)m(ou)i(w)m(an)m(t)g(to)g(see)f(the)h(\014les)
+f(bash)f(will)i(install)g(and)e(where)h(it)g(will)h(install)g(them)f
+(without)150 2122 y(c)m(hanging)35 b(an)m(ything)f(on)f(y)m(our)h
+(system,)h(sp)s(ecify)e(the)h(v)-5 b(ariable)35 b Ft(DESTDIR)d
+Fu(as)i(an)f(argumen)m(t)h(to)h Ft(make)p Fu(.)150 2231
+y(Its)29 b(v)-5 b(alue)29 b(should)f(b)s(e)g(the)h(absolute)h
+(directory)f(path)g(y)m(ou'd)g(lik)m(e)h(to)g(use)e(as)i(the)f(ro)s(ot)
+g(of)g(y)m(our)g(sample)150 2341 y(installation)j(tree.)42
+b(F)-8 b(or)31 b(example,)390 2493 y Ft(mkdir)46 b(/fs1/bash-install)
+390 2603 y(make)h(install)e(DESTDIR=/fs1/bash-install)150
+2756 y Fu(will)37 b(install)g Ft(bash)e Fu(in)m(to)j
+Ft(/fs1/bash-install/usr/l)o(ocal)o(/bin)o(/ba)o(sh)p
+Fu(,)32 b(the)37 b(do)s(cumen)m(tation)g(in)m(to)150
+2865 y(directories)44 b(within)e Ft(/fs1/bash-install/usr/l)o(ocal)o
+(/sha)o(re)p Fu(,)e(the)i(example)i(loadable)g(builtins)150
+2975 y(in)m(to)35 b Ft(/fs1/bash-install/usr/loc)o(al/l)o(ib/b)o(ash)o
+Fu(,)30 b(and)k(so)g(on.)53 b(Y)-8 b(ou)34 b(can)h(use)f(the)h(usual)e
+Ft(exec_)150 3084 y(prefix)c Fu(and)g Ft(prefix)g Fu(v)-5
+b(ariables)31 b(to)g(alter)h(the)e(directory)h(paths)f(b)s(eneath)g
+(the)h(v)-5 b(alue)30 b(of)h Ft(DESTDIR)p Fu(.)275 3237
+y(The)24 b(GNU)i(Mak)m(e\014le)h(standards)d(pro)m(vide)i(a)f(more)h
+(complete)g(description)g(of)f(these)h(v)-5 b(ariables)26
+b(and)150 3346 y(their)k(e\013ects.)150 3614 y Fs(10.5)68
+b(Sp)t(ecifying)45 b(the)g(System)h(T)l(yp)t(e)150 3774
+y Fu(There)c(ma)m(y)h(b)s(e)e(some)i(features)g Ft(configure)c
+Fu(can)k(not)g(\014gure)e(out)i(automatically)-8 b(,)49
+b(but)41 b(needs)h(to)150 3883 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
+3993 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 4103 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 4212 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 4365 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 4633 y Fs(10.6)68
+b(Sharing)45 b(Defaults)150 4792 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
+4902 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
+5011 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 5121 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
+5230 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 5340 y(script,)31 b(but)e(not)i(all)g
+Ft(configure)d Fu(scripts)i(do.)p eop end
+%%Page: 161 167
+TeXDict begin 161 166 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(161)150 299 y Fs(10.7)68
+b(Op)t(eration)46 b(Con)l(trols)150 458 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 606 y Ft(--cache-file=)p Fj(file)630
+716 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 825 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 973 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
+1121 y Ft(--quiet)150 1230 y(--silent)150 1340 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 1487 y Ft(--srcdir=)p
+Fj(dir)630 1597 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 1707 y(mine)e(that)h(directory)g(automatically)-8
+b(.)150 1854 y Ft(--version)630 1964 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 2112 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 2221
+y(--help)p Fu(')29 b(prin)m(ts)h(the)g(complete)i(list.)150
+2450 y Fs(10.8)68 b(Optional)46 b(F)-11 b(eatures)150
+2610 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 2719 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 2829 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 2939 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 3048
+y Ft(--disable-)p Fj(feature)p Fu(.)275 3177 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 3286 y Fu(recognizes.)150 3434 y Ft(--with-afs)630
+3544 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 3691 y Ft(--with-bash-malloc)630
+3801 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 3911 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 4020 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
+4130 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 4239 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
+4349 y(option)j(automatically)i(for)d(a)h(n)m(um)m(b)s(er)e(of)i
+(systems.)150 4497 y Ft(--with-curses)630 4606 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 4716
+y(if)f(y)m(our)h(system)f(has)g(an)h(inadequate)g(or)f(incomplete)i
+(termcap)e(database.)150 4863 y Ft(--with-gnu-malloc)630
+4973 y Fu(A)g(synon)m(ym)g(for)g Ft(--with-bash-malloc)p
+Fu(.)150 5121 y Ft(--with-installed-readlin)o(e[=)p Fj(P)o(REFI)o(X)p
+Ft(])630 5230 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
+5340 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)p eop end
+%%Page: 162 168
+TeXDict begin 162 167 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(162)630 299 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
+408 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 518 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 628 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 737 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 847 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 956 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 1066 y(library)c(in)g Fr(PREFIX)9
+b Fu(/)p Ft(lib)p Fu(\).)150 1236 y Ft(--with-libintl-prefix[=)p
+Fj(P)o(REFI)o(X)p Ft(])630 1345 y Fu(De\014ne)45 b(this)f(to)h(mak)m(e)
+g(Bash)g(link)f(with)g(a)h(lo)s(cally-installed)i(v)m(ersion)e(of)g
+(the)f(libin)m(tl)630 1455 y(library)30 b(instead)h(of)f(the)h(v)m
+(ersion)g(in)f Ft(lib/intl)p Fu(.)150 1625 y Ft
+(--with-libiconv-prefix[=)o Fj(PREF)o(IX)p Ft(])630 1734
+y Fu(De\014ne)g(this)g(to)g(mak)m(e)h(Bash)f(lo)s(ok)g(for)g(libicon)m
+(v)h(in)e Fr(PREFIX)39 b Fu(instead)30 b(of)g(the)g(standard)630
+1844 y(system)h(lo)s(cations.)42 b(There)30 b(is)g(no)g(v)m(ersion)h
+(included)f(with)g(Bash.)150 2014 y Ft(--enable-minimal-config)630
+2123 y Fu(This)23 b(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
+2298 y(There)35 b(are)i(sev)m(eral)h Ft(--enable-)c Fu(options)j(that)g
+(alter)g(ho)m(w)g(Bash)f(is)h(compiled,)i(link)m(ed,)f(and)e(in-)150
+2408 y(stalled,)c(rather)e(than)g(c)m(hanging)h(run-time)f(features.)
+150 2583 y Ft(--enable-largefile)630 2692 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 2802 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)630
+2911 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
+3021 y(op)s(erating)d(system)f(pro)m(vides)h(large)g(\014le)g(supp)s
+(ort.)150 3191 y Ft(--enable-profiling)630 3300 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 3410 y(b)m(y)g Ft(gprof)f Fu(eac)m(h)j(time)f
+(it)g(is)f(executed.)150 3580 y Ft(--enable-separate-helpfi)o(les)630
+3689 y Fu(Use)i(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
+3799 y(of)f(storing)f(the)h(text)g(in)m(ternally)-8 b(.)150
+3969 y Ft(--enable-static-link)630 4078 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 4188 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 4363
+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
+4472 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 4617 y(All)133 b(of)g(the)g(follo)m(wing)i(options)e(except)h
+(for)f(`)p Ft(alt-array-implementation)o Fu(',)150 4727
+y(`)p Ft(disabled-builtins)p Fu(',)212 b(`)p Ft(direxpand-default)p
+Fu(',)h(`)p Ft(strict-posix-default)p Fu(',)f(and)150
+4836 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 4946 y(the)e(necessary)f(supp)s(ort.)150 5121
+y Ft(--enable-alias)630 5230 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 5340 y(tion)31 b(6.6)g([Aliases],)i
+(page)e(100\).)p eop end
+%%Page: 163 169
+TeXDict begin 163 168 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(163)150 299 y Ft
+(--enable-alt-array-imple)o(ment)o(atio)o(n)630 408 y
+Fu(This)33 b(builds)g(bash)g(using)h(an)g(alternate)i(implemen)m
+(tation)f(of)g(arra)m(ys)f(\(see)h(Section)g(6.7)630
+518 y([Arra)m(ys],)43 b(page)d(100\))h(that)f(pro)m(vides)g(faster)g
+(access)h(at)f(the)g(exp)s(ense)f(of)h(using)f(more)630
+628 y(memory)30 b(\(sometimes)i(man)m(y)e(times)h(more,)g(dep)s(ending)
+e(on)h(ho)m(w)h(sparse)f(an)g(arra)m(y)h(is\).)150 774
+y Ft(--enable-arith-for-comma)o(nd)630 883 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
+993 y(C)30 b(language)i Ft(for)d Fu(statemen)m(t)j(\(see)g(Section)f
+(3.2.5.1)i([Lo)s(oping)d(Constructs],)h(page)g(11\).)150
+1139 y Ft(--enable-array-variables)630 1249 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 1358 y(ra)m(ys],)c(page)g(100\).)150
+1504 y Ft(--enable-bang-history)630 1614 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 1724 y(teraction],)c(page)e
+(154\).)150 1870 y Ft(--enable-brace-expansion)630 1979
+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 2089 y([Brace)32 b(Expansion],)e(page)h(24,)h
+(for)e(a)g(complete)i(description.)150 2235 y Ft
+(--enable-casemod-attribu)o(tes)630 2345 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 2454 y(signmen)m(t)43
+b(statemen)m(ts.)78 b(V)-8 b(ariables)44 b(with)e(the)g
+Ft(uppercase)e Fu(attribute,)46 b(for)c(example,)630
+2564 y(will)31 b(ha)m(v)m(e)g(their)g(v)-5 b(alues)30
+b(con)m(v)m(erted)i(to)f(upp)s(ercase)f(up)s(on)f(assignmen)m(t.)150
+2710 y Ft(--enable-casemod-expansi)o(on)630 2819 y Fu(Include)h(supp)s
+(ort)e(for)i(case-mo)s(difying)i(w)m(ord)e(expansions.)150
+2966 y Ft(--enable-command-timing)630 3075 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 3185 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.3)h([Pip)s(elines],)630
+3294 y(page)j(10\).)70 b(This)40 b(allo)m(ws)h(pip)s(elines)e(as)h(w)m
+(ell)h(as)f(shell)h(builtins)e(and)g(functions)h(to)h(b)s(e)630
+3404 y(timed.)150 3550 y Ft(--enable-cond-command)630
+3660 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.5.2)h([Condi-)
+630 3769 y(tional)c(Constructs],)e(page)h(12\).)150 3915
+y Ft(--enable-cond-regexp)630 4025 y Fu(Include)k(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 4134 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.5.2)h
+([Conditional)e(Con-)630 4244 y(structs],)31 b(page)g(12\).)150
+4390 y Ft(--enable-coprocesses)630 4500 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.3)630
+4609 y([Pip)s(elines],)31 b(page)g(10\).)150 4756 y Ft
+(--enable-debugger)630 4865 y Fu(Include)f(supp)s(ort)e(for)i(the)h
+(bash)f(debugger)g(\(distributed)g(separately\).)150
+5011 y Ft(--enable-dev-fd-stat-bro)o(ken)630 5121 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 5230 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 5340 y(for)j(conditional)i(commands)e(that)h
+(test)g(\014le)g(attributes.)p eop end
+%%Page: 164 170
+TeXDict begin 164 169 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(164)150 299 y Ft
+(--enable-direxpand-defau)o(lt)630 408 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 518 y(page)29 b(71\))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 628 y(b)m(y)i(default.)150
+807 y Ft(--enable-directory-stack)630 917 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
+1026 y Fu(builtins)d(\(see)h(Section)g(6.8)h([The)e(Directory)i(Stac)m
+(k],)g(page)f(102\).)150 1205 y Ft(--enable-disabled-builti)o(ns)630
+1315 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 1425 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(55,)630 1534 y(for)e(details)i(of)e(the)h
+Ft(builtin)d Fu(and)i Ft(enable)e Fu(builtin)i(commands.)150
+1714 y Ft(--enable-dparen-arithmet)o(ic)630 1823 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.5.2)i([Conditional)630 1933 y(Constructs],)30
+b(page)h(12\).)150 2112 y Ft(--enable-extended-glob)630
+2222 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
+2331 y(under)29 b(Section)i(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i
+(page)e(36.)150 2511 y Ft(--enable-extended-glob-d)o(efau)o(lt)630
+2620 y Fu(Set)37 b(the)f(default)h(v)-5 b(alue)37 b(of)f(the)h
+Ft(extglob)d Fu(shell)j(option)g(describ)s(ed)e(ab)s(o)m(v)m(e)j(under)
+c(Sec-)630 2730 y(tion)d(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g(71,)
+h(to)f(b)s(e)f(enabled.)150 2909 y Ft(--enable-function-import)630
+3019 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
+3128 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
+3308 y Ft(--enable-glob-asciirange)o(-def)o(ault)630
+3417 y Fu(Set)f(the)f(default)h(v)-5 b(alue)29 b(of)f(the)h
+Ft(globasciiranges)24 b Fu(shell)29 b(option)g(describ)s(ed)e(ab)s(o)m
+(v)m(e)j(un-)630 3527 y(der)c(Section)i(4.3.2)h([The)d(Shopt)g
+(Builtin],)j(page)f(71,)g(to)g(b)s(e)e(enabled.)40 b(This)26
+b(con)m(trols)i(the)630 3636 y(b)s(eha)m(vior)40 b(of)f(c)m(haracter)i
+(ranges)f(when)f(used)f(in)i(pattern)f(matc)m(hing)i(brac)m(k)m(et)g
+(expres-)630 3746 y(sions.)150 3925 y Ft(--enable-help-builtin)630
+4035 y Fu(Include)24 b(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 4144 y(Section)31 b(4.2)h([Bash)e(Builtins],)i(page)f
+(55\).)150 4324 y Ft(--enable-history)630 4433 y Fu(Include)e(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 4543 y(tion)h(9.1)g([Bash)g
+(History)g(F)-8 b(acilities],)34 b(page)d(152\).)150
+4722 y Ft(--enable-job-control)630 4832 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(113\),)630 4941 y(if)c(the)h(op)s(erating)g(system)f
+(supp)s(orts)f(them.)150 5121 y Ft(--enable-multibyte)630
+5230 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
+5340 y(the)h(necessary)f(supp)s(ort.)p eop end
+%%Page: 165 171
+TeXDict begin 165 170 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(165)150 299 y Ft
+(--enable-net-redirection)o(s)630 408 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 518 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
+628 y(tions],)e(page)g(38\).)150 787 y Ft(--enable-process-substit)o
+(utio)o(n)630 897 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
+1006 y(page)31 b(34\))h(if)e(the)h(op)s(erating)f(system)h(pro)m(vides)
+f(the)h(necessary)g(supp)s(ort.)150 1166 y Ft(--enable-progcomp)630
+1275 y Fu(Enable)d(the)g(programmable)g(completion)i(facilities)g
+(\(see)f(Section)g(8.6)g([Programmable)630 1385 y(Completion],)i(page)h
+(143\).)42 b(If)30 b(Readline)h(is)f(not)h(enabled,)f(this)h(option)g
+(has)f(no)g(e\013ect.)150 1544 y Ft(--enable-prompt-string-d)o(ecod)o
+(ing)630 1654 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 1763 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
+1873 y(Prompt],)30 b(page)h(104,)h(for)f(a)f(complete)i(list)f(of)g
+(prompt)e(string)i(escap)s(e)f(sequences.)150 2032 y
+Ft(--enable-readline)630 2142 y Fu(Include)e(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 2252 y(the)i(Readline)g(library)f(\(see)h(Chapter)f(8)
+g([Command)g(Line)g(Editing],)h(page)g(117\).)150 2411
+y Ft(--enable-restricted)630 2521 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 2630 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 2740 y(page)31 b(105,)h(for)e(a)h
+(description)f(of)h(restricted)g(mo)s(de.)150 2899 y
+Ft(--enable-select)630 3009 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 3118 y(men)m(us)k(\(see)h(Section)g(3.2.5.2)i
+([Conditional)e(Constructs],)g(page)g(12\).)150 3278
+y Ft(--enable-single-help-str)o(ings)630 3387 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
+3497 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
+3606 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 3766 y Ft
+(--enable-strict-posix-de)o(faul)o(t)630 3875 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 3985 y(page)31
+b(106\).)150 4144 y Ft(--enable-translatable-st)o(ring)o(s)630
+4254 y Fu(Enable)h(supp)s(ort)e(for)i Ft($")p Fj(string)p
+Ft(")e Fu(translatable)j(strings)f(\(see)h(Section)g(3.1.2.5)h([Lo)s
+(cale)630 4364 y(T)-8 b(ranslation],)32 b(page)f(7\).)150
+4523 y Ft(--enable-usg-echo-defaul)o(t)630 4633 y Fu(A)f(synon)m(ym)g
+(for)g Ft(--enable-xpg-echo-default)p Fu(.)150 4792 y
+Ft(--enable-xpg-echo-defaul)o(t)630 4902 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 5011 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
+5121 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 5230 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(55,)630 5340 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.)p
+eop end
+%%Page: 166 172
+TeXDict begin 166 171 bop 150 -116 a Fu(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(166)275 299 y(The)28 b(\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
+408 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 518 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 628 y(information)c(ab)s(out)f
+(its)h(e\013ect.)p eop end
+%%Page: 167 173
+TeXDict begin 167 172 bop 3614 -116 a Fu(167)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)43 b(for)d(FTP)g(from)g Ft(ftp:)8
+b(/)g(/)g(ftp)g(.)g(gnu)g(.)g(org)g(/)g(pub)g(/)g(gnu)g(/)g(bash)g(/)45
+b Fu(and)40 b(from)g Ft(http:)8 b(/)g(/)g(git)g(.)150
+862 y(savannah.gnu.org/cgit/ba)o(sh.g)o(it/s)o(nap)o(shot)o(/bas)o(h-m)
+o(aste)o(r.ta)o(r.g)o(z)p Fu(.)275 996 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 1106 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
+1215 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 1325 y(Usenet)31 b(newsgroup)e Ft(gnu.bash.bug)p
+Fu(.)275 1460 y(All)i(bug)e(rep)s(orts)h(should)f(include:)225
+1594 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 1729 y Fq(\017)60 b Fu(The)30 b(hardw)m(are)g(and)g(op)s
+(erating)g(system.)225 1863 y Fq(\017)60 b Fu(The)30
+b(compiler)h(used)e(to)i(compile)h(Bash.)225 1998 y Fq(\017)60
+b Fu(A)30 b(description)h(of)f(the)h(bug)f(b)s(eha)m(viour.)225
+2132 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 2291 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 2401 y(bug)h(rep)s(ort.)275
+2535 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: 168 174
+TeXDict begin 168 173 bop 3614 -116 a Fu(168)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(106\).)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
+(91\).)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
+(117\))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(143\),)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(152\))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(154\).)225 2892 y Fq(\017)60 b Fu(Bash)29
+b(has)h(one-dimensional)g(arra)m(y)f(v)-5 b(ariables)30
+b(\(see)h(Section)f(6.7)g([Arra)m(ys],)h(page)f(100\),)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)36 b(3.2.3)h([Pip)s(elines],)g(page)f(10\).)57
+b(V)-8 b(ery)36 b(useful)f(when)f(an)h Ft(if)g Fu(statemen)m(t)i(needs)
+e(to)h(act)h(only)330 4390 y(if)32 b(a)g(test)g(fails.)45
+b(The)31 b(Bash)h(`)p Ft(-o)e(pipefail)p Fu(')g(option)i(to)g
+Ft(set)f Fu(will)h(cause)g(a)g(pip)s(eline)g(to)g(return)f(a)330
+4500 y(failure)g(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.3)g([Pip)s(elines],)330 4743 y(page)d(10\).)43 b(The)31
+b(displa)m(y)g(of)g(the)g(timing)h(statistics)h(ma)m(y)e(b)s(e)f(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.5.1)i([Lo)s
+(oping)d(Constructs],)h(page)g(11\).)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.5.2)i([Conditional)e
+(Constructs],)g(page)g(12\).)p eop end
+%%Page: 169 175
+TeXDict begin 169 174 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(169)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.5.2)j([Conditional)
+d(Constructs],)i(page)f(12\),)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(24\))h(and)d(tilde)330
+898 y(expansion)k(\(see)i(Section)f(3.5.2)h([Tilde)f(Expansion],)f
+(page)h(25\).)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(100\).)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.5.2)j([Con-)
+330 1388 y(ditional)d(Constructs],)e(page)i(12\),)g(and)e(arithmetic)i
+(expansion)e(\(see)i(Section)f(6.5)h([Shell)f(Arith-)330
+1498 y(metic],)h(page)f(98\).)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(26\).)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
+(26\).)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(26\).)225
+3187 y Fq(\017)60 b Fu(The)21 b(expansion)f Ft(${)p Fj(var)p
+Ft(/[/])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)30 b(with)f Fr(replacemen)m(t)k Fu(in)c(the)h(v)-5
+b(alue)30 b(of)g Fr(v)-5 b(ar)p Fu(,)30 b(is)f(a)m(v)-5
+b(ailable)32 b(\(see)e(Section)h(3.5.3)g([Shell)f(P)m(arameter)330
+3406 y(Expansion],)g(page)h(26\).)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(26\).)225 3896 y Fq(\017)60
+b Fu(Bash)22 b(has)g(indirect)g(v)-5 b(ariable)22 b(expansion)g(using)f
+Ft(${!word})f Fu(\(see)i(Section)h(3.5.3)h([Shell)e(P)m(arameter)330
+4006 y(Expansion],)30 b(page)h(26\).)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
+(34\),)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(34\).)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(78,)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
+(35\).)41 b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h
+(hole.)p eop end
+%%Page: 170 176
+TeXDict begin 170 175 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(170)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(c)m(har-)330 646 y(acter)j(classes,)i(equiv)-5
+b(alence)39 b(classes,)j(and)c(collating)j(sym)m(b)s(ols)d(\(see)i
+(Section)f(3.5.8)h([Filename)330 756 y(Expansion],)30
+b(page)h(35\).)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(36\).)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(55\).)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(44\).)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(38\).)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(38\).)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(38\).)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(38\).)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(67\).)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(48\))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(55\).)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
+(55\).)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(55\).)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(48\).)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(19\).)p eop end
+%%Page: 171 177
+TeXDict begin 171 176 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(171)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(48\).)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(55\).)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(55\).)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(55\))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(48\).)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(71\),)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
+(91\).)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(67\).)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(67\).)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(48\))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)f(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(48\))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(48\))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: 172 178
+TeXDict begin 172 177 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(172)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(48\))g(allo)m(ws)g(a)g
+Ft(RETURN)330 759 y Fu(pseudo-signal)f(sp)s(eci\014cation,)k(similar)d
+(to)g Ft(EXIT)e Fu(and)g Ft(DEBUG)p Fu(.)66 b(Commands)38
+b(sp)s(eci\014ed)h(with)g(a)330 869 y Ft(RETURN)g 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(55\).)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(48\).)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)d(to)i
+(manipulate)f(it)h(\(see)g(Section)f(6.8)h([The)f(Directory)h(Stac)m
+(k],)h(page)f(102\).)47 b(Bash)32 b(also)330 2140 y(mak)m(es)f(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(104\).)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(105\);)h(the)f(SVR4.2)g(shell)g(restricted)g(mo)s
+(de)f(is)g(to)s(o)h(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(114\))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(91.)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: 173 179
+TeXDict begin 173 178 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(173)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: 174 180
+TeXDict begin 174 179 bop 3614 -116 a Fu(174)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: 175 181
+TeXDict begin 175 180 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(175)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: 176 182
+TeXDict begin 176 181 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(176)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: 177 183
+TeXDict begin 177 182 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(177)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: 178 184
+TeXDict begin 178 183 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(178)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: 179 185
+TeXDict begin 179 184 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(179)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: 180 186
+TeXDict begin 180 185 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(180)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: 181 187
+TeXDict begin 181 186 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(181)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: 182 188
+TeXDict begin 182 187 bop 3614 -116 a Fu(182)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(48)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(48)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(52)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(55)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(114)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(56)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(49)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(57)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(57)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(49)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(57)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(146)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(146)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(149)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(49)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(58)150 3946 y Fe(dirs)9 b Fc(:)14
+b(:)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(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)24 b Fb(102)150 4033 y Fe(disown)e
+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(116)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(59)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(60)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(49)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(50)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(50)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(50)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(153)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(114)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(50)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(51)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(61)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(153)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(114)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(115)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(61)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(61)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(61)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(61)2021
+3489 y Fs(P)2025 3608 y Fe(popd)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(103)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(62)2025 3784 y Fe(pushd)6 b Fc(:)14 b(:)g(:)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(:)21
+b Fb(103)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(51)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(63)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(64)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(52)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(52)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(67)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(52)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(71)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(64)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(116)p eop end
+%%Page: 183 189
+TeXDict begin 183 188 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(183)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(52)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(54)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(54)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(64)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(65)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(65)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(55)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(66)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(55)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(115)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(!)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(10)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(14)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(14)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(17)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(17)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(13)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(11)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(11)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(12)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(12)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(13)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(12)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(12)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(19)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(12)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(13)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(13)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(12)2025 4611 y Fe(time)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(10)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(11)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(12)p eop end
+%%Page: 184 190
+TeXDict begin 184 189 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(184)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 1072
+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(24)146 1314 y Fs(#)150 1431 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(23)146
+1676 y Fs($)150 1794 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(23)150 1881 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(24)150 1969 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(23)150 2057 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(23)150 2144 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(23)150
+2232 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(23)150 2320 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(23)150 2407 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(23)150 2495 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(78)150 2582 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(24)146 2834 y Fs(*)150 2950 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(23)146 3193 y Fs({)150 3310 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(23)146 3553 y Fs(?)150 3670
+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(23)146 3912 y Fs(@)150 4029 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(23)p
+156 4272 41 6 v 150 4389 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(78)146 4631 y Fs(0)150 4748 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(24)146 4991 y Fs(A)150 5108 y Fe(active-region-end-color)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(121)150 5196 y Fe(active-region-start-color)
+7 b Fc(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)g(:)h(:)21 b Fb(121)150 5283 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(116)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(79)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(79)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(79)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(79)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(80)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(80)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(80)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(80)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(80)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(80)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(80)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(81)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(81)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(81)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(81)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(81)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(81)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(81)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(79)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(79)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(121)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(121)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(122)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(78)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(82)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(122)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(122)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(82)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(122)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(82)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(82)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(82)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(82)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(82)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(82)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(82)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(122)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(122)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(122)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(122)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(122)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(83)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(123)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(83)p
+eop end
+%%Page: 185 191
+TeXDict begin 185 190 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(185)146 294 y Fs(D)150 415 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(83)150 502 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(123)146
+782 y Fs(E)150 903 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(123)150 991 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(123)150 1080 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(123)150 1169
+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(83)150
+1258 y Fe(enable-active-region)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34
+b Fb(123)150 1347 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(124)150 1436 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(124)150 1525 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(83)150
+1613 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(83)150 1702 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(83)150 1791 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(83)150 1880 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(83)150
+1967 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(124)146 2247 y Fs(F)150 2368
+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(84)150
+2457 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(84)150
+2545 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(84)150 2633
+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(84)146 2901 y
+Fs(G)150 3022 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(84)150
+3109 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(84)146 3377 y Fs(H)150 3498 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(84)150 3587 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(84)150 3676 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(85)150
+3765 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(85)150 3854
+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(85)150 3942 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(85)150 4031 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(124)150 4120 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(124)150 4209 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(85)150 4298 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(85)150 4387 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(78)150 4475
+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(124)150
+4564 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(86)150 4653
+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(86)150 4740 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(86)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(78)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(86)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(124)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(86)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(86)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(125)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(125)2021
+1601 y Fs(L)2025 1727 y Fe(LANG)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(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)35
+b Fb(8,)26 b(86)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(86)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(86)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(86)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(8,)26 b(86)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(87)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(87)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(87)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(87)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(87)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(78)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(87)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(78)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(87)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(125)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(125)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(125)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(126)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(124)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(87)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(78)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(87)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(78)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(87)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(126)p eop end
+%%Page: 186 192
+TeXDict begin 186 191 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(186)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(126)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(78)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(87)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(87)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(87)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(87)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(88)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(88)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(78)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(78)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(88)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(88)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(88)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(88)150 1892 y Fe(READLINE_ARGUMENT)12
+b Fc(:)17 b(:)c(:)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(:)26 b Fb(88)150
+1979 y Fe(READLINE_LINE)f 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(88)150 2066 y Fe(READLINE_MARK)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(88)150 2153 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(88)150 2240 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(88)150 2327 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(126)146 2560 y Fs(S)150 2676 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(88)150 2763 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(88)150 2851 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(89)150 2938 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(89)150 3025 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(126)150 3112 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(126)150
+3199 y Fe(show-mode-in-prompt)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(:)37
+b Fb(126)2025 260 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(127)2025 347 y Fe(SRANDOM)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(89)2021 673 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(8)2025 895 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(8)2025 986 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(89)2025
+1078 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(89)2025 1165 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(90)2021 1492 y Fs(U)2025 1617 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(90)2021 1943 y Fs(V)2025 2073
+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(127)2025 2165 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(127)2025 2252
+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(127)150 3845 y Fs(D.4)68 b(F)-11 b(unction)44
+b(Index)146 4330 y(A)150 4447 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(141)150 4535 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(134)150 4622 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(143)146 4873 y Fs(B)150
+4990 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(133)150 5077 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(136)150 5165 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(137)150 5252 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(137)150 5340 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(133)2025 4300
+y Fe(beginning-of-history)k(\(M-<\))11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(134)2025
+4389 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(133)2025 4477 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(136)2021 4769 y Fs(C)2025 4893 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(141)2025 4982
+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(137)2025 5072 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(141)2025 5161 y Fe
+(character-search-backward)31 b(\(M-C-]\))10 b Fc(:)15
+b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fb(141)2025 5250
+y Fe(clear-display)j(\(M-C-l\))7 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)
+h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22
+b Fb(134)2025 5340 y Fe(clear-screen)28 b(\(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(134)p eop
+end
+%%Page: 187 193
+TeXDict begin 187 192 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(187)150 264 y Fe(complete)27 b(\(TAB\))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(139)150 352 y Fe(complete-command)29 b(\(M-!\))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(140)150 440 y Fe(complete-filename)29
+b(\(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(139)150 528 y Fe(complete-hostname)
+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(140)150 616 y Fe
+(complete-into-braces)d(\(M-{\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g
+(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(140)150 704
+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(140)150 792 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(140)150 880 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(138)150 968 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(138)150
+1056 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(138)146 1320 y Fs(D)150 1438 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(140)150 1527 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(136)150 1615 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(139)150 1703 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(138)150
+1791 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(138)150 1879 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(143)150 1958 y Fe(do-lowercase-version)30 b(\(M-A,)227
+2046 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(141)150 2134 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(137)150 2222
+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(142)150 2310 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(142)150 2398 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(142)150
+2485 y Fe(dynamic-complete-history)f(\(M-TAB\))13 b Fc(:)i(:)e(:)g(:)g
+(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(140)146 2749 y Fs(E)150
+2868 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(143)150 2956
+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(140)150 3044 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(136)150 3132 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(134)150 3220 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(133)150 3308 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(141)146 3571 y Fs(F)150 3690 y Fe(fetch-history)d(\(\))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(:)34 b Fb(136)150
+3778 y Fe(forward-backward-delete-char)e(\(\))15 b Fc(:)f(:)f(:)g(:)g
+(:)g(:)g(:)h(:)f(:)g(:)g(:)30 b Fb(136)150 3867 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(133)150 3955 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(134)150 4042 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(133)146 4295
+y Fs(G)150 4414 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(142)150 4502 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(142)150 4590 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(142)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(143)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(143)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(135)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(135)2025 786 y Fe(history-substring-search-backw)q(ard)k
+(\(\))20 b Fc(:)13 b(:)g(:)g(:)g(:)35 b Fb(135)2025 874
+y Fe(history-substring-search-forwa)q(rd)d(\(\))22 b
+Fc(:)13 b(:)h(:)f(:)g(:)g(:)37 b Fb(135)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(142)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(139)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(143)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(137)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(138)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(137)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(137)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(143)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(139)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(139)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(134)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(134)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(135)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(134)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(135)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(137)p
+eop end
+%%Page: 188 194
+TeXDict begin 188 193 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(188)146 294 y Fs(P)150 411 y Fe
+(possible-command-completions)32 b(\(C-x)26 b(!\))9 b
+Fc(:)14 b(:)g(:)f(:)g(:)g(:)24 b Fb(140)150 499 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(139)150
+586 y Fe(possible-filename-completions)32 b(\(C-x)27
+b(/\))7 b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(140)150 674
+y Fe(possible-hostname-completions)32 b(\(C-x)27 b(@\))7
+b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(140)150 762 y Fe
+(possible-username-completions)32 b(\(C-x)27 b(~\))7
+b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(140)150 849 y Fe
+(possible-variable-completions)32 b(\(C-x)27 b($\))7
+b Fc(:)13 b(:)g(:)g(:)g(:)22 b Fb(140)150 937 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(141)150 1025 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(134)150 1112 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(133)150 1200 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(141)146
+1454 y Fs(Q)150 1571 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(136)146 1825 y Fs(R)150 1943 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(141)150 2030 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(134)150 2118 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(134)150 2205 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(141)146
+2449 y Fs(S)150 2567 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(136)150 2654 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(141)150 2742 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(138)150 2830 y Fe(shell-backward-word)30 b(\(M-C-b\))8
+b Fc(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+23 b Fb(133)150 2917 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(143)150 3005 y Fe(shell-forward-word)i(\(M-C-f\))11
+b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+26 b Fb(133)150 3093 y Fe(shell-kill-word)j(\(M-C-d\))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(138)150 3180 y Fe(shell-transpose-words)d
+(\(M-C-t\))22 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+(:)35 b Fb(138)2025 264 y Fe(skip-csi-sequence)29 b(\(\))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(141)2025 361 y
+Fe(spell-correct-word)29 b(\(C-x)e(s\))18 b Fc(:)13 b(:)g(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)33 b Fb(142)2025
+448 y Fe(start-kbd-macro)c(\(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(140)2021 891 y Fs(T)2025 1038 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(141)2025 1135 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(136)2025 1222 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(137)2021
+1676 y Fs(U)2025 1823 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(141)2025 1920 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(139)2025 2017 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(138)2025 2114 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(137)2025 2211 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(138)2025 2298 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(137)2021
+2752 y Fs(Y)2025 2899 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(138)2025 2996 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(135)2025 3093 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(135)2025 3180
+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(138)150 3929 y Fs(D.5)68 b(Concept)45
+b(Index)146 4523 y(A)150 4648 y Fb(alias)27 b(expansion)22
+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(:)37
+b Fb(100)150 4738 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(98)150 4828 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(34)150 4919 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(98)150 5006
+y(arra)n(ys)f 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(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(100)2021
+4523 y Fs(B)2025 4646 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(113)2025
+4735 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(158)2025 4825 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(158)2025 4914 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 5004 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(24)2025 5091 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: 189 195
+TeXDict begin 189 194 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(189)146 294 y Fs(C)150 415 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(118)150 503 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(42)150 592 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(42)150
+681 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(152)150 770 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(42)150 859 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(34)150 947 y(command)26
+b(timing)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(:)g(:)h(:)f(:)g(:)g(:)25
+b Fb(10)150 1036 y(commands,)h(comp)r(ound)c 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(:)37 b Fb(11)150 1125 y(commands,)26
+b(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(12)150 1214 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(17)150 1302 y(commands,)d(lists)10
+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(:)h(:)f(:)24
+b Fb(10)150 1391 y(commands,)i(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(11)150 1480 y(commands,)26
+b(pip)r(elines)16 b Fc(:)e(:)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(:)30
+b Fb(10)150 1569 y(commands,)c(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(9)150 1657 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(9)150 1746 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(9)150
+1835 y(Compatibilit)n(y)f(Lev)n(el)10 b Fc(:)j(:)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(:)25 b Fb(110)150 1924 y(Compatibilit)n(y)i(Mo)r(de)22
+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(:)36 b Fb(110)150
+2013 y(completion)27 b(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(146)150 2101 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(158)150 2190 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 2277 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(18)146 2553 y Fs(D)150 2672 y Fb(directory)26 b(stac)n(k)9
+b Fc(:)k(:)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(:)24
+b Fb(102)146 2948 y Fs(E)150 3069 y Fb(editing)i(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(118)150 3158 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(44)150 3247 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(98)150 3335
+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(155)150 3424 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(43)150 3513
+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(44)150 3602 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(24)150 3691 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(34)150 3779
+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(24)150 3868 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(35)150
+3957 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(26)150 4046 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(35)150
+4134 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(25)150 4223 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(98)150 4310 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(96)2021
+294 y Fs(F)2025 414 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 503 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 591 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(35)2025 680 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(113)2025 767 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(19)2021 1038 y Fs(H)2025 1158 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(152)2025 1247 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(155)2025 1335 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(154)2025 1424 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(152)2025 1511 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(151)2021
+1782 y Fs(I)2025 1903 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 1991 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(120)2025 2080 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(158)2025 2168 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(117)2025
+2257 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(93,)27 b(94)2025 2346 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)2025 2433 y(in)n(ternationalized)27 b(scripts)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(:)g(:)h(:)28 b Fb(7)2021 2704 y
+Fs(J)2025 2824 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 2911 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(113)2021
+3183 y Fs(K)2025 3303 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(119)2025 3390 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(119)2021 3661 y Fs(L)2025 3782 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 3869 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(93)2021 4140 y Fs(M)2025 4260
+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(36)2025 4347 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: 190 196
+TeXDict begin 190 195 bop 150 -116 a Fu(App)s(endix)29
+b(D:)i(Indexes)2623 b(190)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(118)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(26)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(21)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(23)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(23)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(35)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(36)150 1824 y(pip)r(eline)10 b Fc(:)j(:)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(:)24
+b Fb(10)150 1911 y(POSIX)e 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)14 b Fc(:)g(:)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(:)29 b Fb(106)150 2085
+y(pro)r(cess)e(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(34)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(143)150 2434 y(prompting)15
+b Fc(:)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(:)g(:)g(:)g
+(:)g(:)30 b Fb(104)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(116)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(38)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(reserv)n(ed)e(w)n(ords)15 b Fc(:)f(:)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(:)30 b Fb(9)150 3586 y(restricted)c(shell)12
+b Fc(:)i(:)f(:)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(:)27
+b Fb(105)150 3673 y(return)e(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(98)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(19)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(46)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(21)2025 798 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(94)2025 891 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(45)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(77)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(93)2025 1262 y(string)h(translations)8
+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(:)g(:)g(:)23
+b Fb(7)2025 1350 y(susp)r(ending)i(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(113)2021 1710 y Fs(T)2025
+1843 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(25)2025 1936 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 2023
+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 2384 y Fs(V)2025 2517 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(21)2025 2604 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(121)2021 2965 y Fs(W)2025 3098 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 3185
+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(35)2021 3545 y Fs(Y)2025
+3673 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(119)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..b0dc2fa
--- /dev/null
+++ b/doc/bashref.texi
@@ -0,0 +1,10129 @@
+\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--2022 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
+@dfn{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
+@dfn{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
+
+Character sequences of the form $'@var{string}' are treated as a special
+kind of single quotes.
+The sequence expands to @var{string}, with backslash-escaped characters
+in @var{string} 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
+@menu
+* Creating Internationalized Scripts:: How to use translations and different
+ languages in your scripts.
+@end menu
+
+Prefixing a double-quoted string with a dollar sign (@samp{$}), such
+as @verb{|$"hello, world"|},
+will cause the string to be translated according to the current locale.
+The @code{gettext} infrastructure performs the lookup and
+translation, using the @code{LC_MESSAGES}, @code{TEXTDOMAINDIR},
+and @code{TEXTDOMAIN} shell variables, as explained below.
+See the gettext documentation for additional details not covered here.
+If the current locale is @code{C} or @code{POSIX},
+if there are no translations available,
+of if the string is not translated,
+the dollar sign is ignored.
+Since this is a form of double quoting, the string remains double-quoted
+by default, whether or not it is translated and replaced.
+If the @code{noexpand_translation} option is enabled
+using the @code{shopt} builtin (@pxref{The Shopt Builtin}),
+translated strings are single-quoted instead of double-quoted.
+
+The rest of this section is a brief overview of how you use gettext to
+create translations for strings in a shell script named @var{scriptname}.
+There are more details in the gettext documentation.
+
+@node Creating Internationalized Scripts
+@cindex internationalized scripts
+@cindex string translations
+Once you've marked the strings in your script
+that you want to translate using $"...",
+you create a gettext "template" file using the command
+
+@example
+bash --dump-po-strings @var{scriptname} > @var{domain}.pot
+@end example
+
+@noindent
+The @var{domain} is your @dfn{message domain}.
+It's just an arbitrary string that's used to identify the files gettext
+needs, like a package or script name.
+It needs to be unique among all
+the message domains on systems where you install the translations, so
+gettext knows which translations correspond to your script.
+You'll use the template file to create translations for each target language.
+The template file conventionally has the suffix @samp{.pot}.
+
+You copy this template file to a separate file for each target language
+you want to support (called "PO" files, which use the suffix @samp{.po}).
+PO files use various naming conventions, but
+when you are working to translate a template file into a particular
+language, you first copy the template file to a file whose name is the
+language you want to target, with the @samp{.po} suffix.
+For instance, the Spanish translations of your strings would be
+in a file named @samp{es.po}, and to get started using a message
+domain named "example," you would run
+
+@example
+cp example.pot es.po
+@end example
+
+@noindent
+Ultimately, PO files are often named @var{domain}.po and installed in
+directories that contain multiple translation files for a particular language.
+
+Whichever naming convention you choose, you will need to translate the
+strings in the PO files into the appropriate languages.
+This has to be done manually.
+
+When you have the translations and PO files complete, you'll use the
+gettext tools to produce what are called "MO" files, which are compiled
+versions of the PO files the gettext tools use to look up translations
+efficiently.
+MO files are also called "message catalog" files.
+You use the @command{msgfmt} program to do this.
+For instance, if you had a file with Spanish translations, you could run
+
+@example
+msgfmt -o es.mo es.po
+@end example
+
+@noindent
+to produce the corresponding MO file.
+
+Once you have the MO files, you decide where to install them and use the
+@code{TEXTDOMAINDIR} shell variable to tell the gettext tools where they are.
+Make sure to use the same message domain to name the MO files
+as you did for the PO files when you install them.
+
+@vindex LANG
+@vindex LC_MESSAGES
+@vindex TEXTDOMAIN
+@vindex TEXTDOMAINDIR
+Your users will use the @env{LANG} or @env{LC_MESSAGES} shell variables to
+select the desired language.
+
+You set the @env{TEXTDOMAIN} variable to the script's message domain.
+As above, you use the message domain to name your translation files.
+
+You, or possibly your users, set the @env{TEXTDOMAINDIR} variable to the
+name of a directory where the message catalog files are stored.
+If you install the message files into the system's standard message catalog
+directory, you don't need to worry about this variable.
+
+The directory where the message catalog files are stored varies between
+systems.
+Some 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 the @samp{.mo} suffix.
+If you use the @env{TEXTDOMAIN} variable, you may need to set the
+@env{TEXTDOMAINDIR} variable to the location of the message catalog files,
+as above.
+It's common to use both variables in this fashion:
+@env{$TEXTDOMAINDIR}/@env{$LC_MESSAGES}/LC_MESSAGES/@env{$TEXTDOMAIN}.mo.
+
+If you used that last convention, and you wanted to store the message
+catalog files with Spanish (es) and Esperanto (eo) translations into a
+local directory you use for custom translation files, you could run
+
+@example
+TEXTDOMAIN=example
+TEXTDOMAINDIR=/usr/local/share/locale
+
+cp es.mo $@{TEXTDOMAINDIR@}/es/LC_MESSAGES/$@{TEXTDOMAIN@}.mo
+cp eo.mo $@{TEXTDOMAINDIR@}/eo/LC_MESSAGES/$@{TEXTDOMAIN@}.mo
+@end example
+
+When all of this is done, and the message catalog files containing the
+compiled translations are installed in the correct location,
+your users will be able to see translated strings
+in any of the supported languages by setting the @env{LANG} or
+@env{LC_MESSAGES} environment variables before running your script.
+
+@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
+* Reserved Words:: Words that have special meaning to the shell.
+* 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 Reserved Words
+@subsection Reserved Words
+@cindex reserved words
+
+Reserved words are words that have special meaning to the shell.
+They are used to begin and end the shell's compound commands.
+
+The following words are recognized as reserved when unquoted and
+the first word of a command (see below for exceptions):
+
+@multitable @columnfractions .1 .1 .1 .1 .12 .1
+@item @code{if} @tab @code{then} @tab @code{elif}
+@tab @code{else} @tab @code{fi} @tab @code{time}
+@item @code{for} @tab @code{in} @tab @code{until}
+@tab @code{while} @tab @code{do} @tab @code{done}
+@item @code{case} @tab @code{esac} @tab @code{coproc}
+@tab @code{select} @tab @code{function}
+@item @code{@{} @tab @code{@}} @tab @code{[[} @tab @code{]]} @tab @code{!}
+@end multitable
+
+@noindent
+@code{in} is recognized as a reserved word if it is the third word of a
+@code{case} or @code{select} command.
+@code{in} and @code{do} are recognized as reserved
+words if they are the third word in a @code{for} command.
+
+@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
+@var{command1}.
+
+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 @var{command1}.
+
+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 multi-command pipeline,
+where pipes are created,
+is executed in its own @dfn{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
+when job control is not active.
+
+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 @dfn{background},
+and these are referred to as @dfn{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, arithmetic expansion, process substitution, and
+quote removal.
+
+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,
+continuing the case statement execution as if the pattern list had not matched.
+
+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, and 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.
+@code{select} then displays the @env{PS3}
+prompt and reads a line 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 and returns 1.
+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}).
+The @var{expression} undergoes the same expansions
+as if it were within double quotes,
+but double quote characters in @var{expression} are not treated specially
+are removed.
+If the value of the expression is non-zero, the return status is 0;
+otherwise the return status is 1.
+
+
+@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}.
+The words between the @code{[[} and @code{]]} do not undergo word splitting
+and filename expansion.
+The shell performs tilde expansion, parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal on those words
+(the expansions that would occur if the words were enclosed in double quotes).
+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.
+
+If you quote any part of the pattern,
+using any of the shell's quoting mechanisms,
+the quoted portion is matched literally.
+This means every character in the quoted portion matches itself,
+instead of having any special pattern matching meaning.
+
+An additional binary operator, @samp{=~}, is available, with the same
+precedence as @samp{==} and @samp{!=}.
+When you use @samp{=~}, the string to the right of the operator is considered
+a @sc{posix} extended regular expression pattern and matched accordingly
+(using the @sc{posix} @code{regcomp} and @code{regexec} interfaces
+usually described in @i{regex}(3)).
+The return value is 0 if the string matches the pattern, and 1 if it does not.
+If the regular expression is syntactically incorrect, the conditional
+expression returns 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.
+
+You can quote any part of the pattern
+to force the quoted portion to be matched literally
+instead of as a regular expression (see above).
+If the pattern is stored in a shell variable, quoting the variable
+expansion forces the entire pattern to be matched literally.
+
+The pattern will match if it matches any part of the string.
+If you want to force the pattern to match the entire string,
+anchor the pattern using the @samp{^} and @samp{$} regular expression
+operators.
+
+For example, the following will match a line
+(stored in the shell variable @code{line})
+if there is a sequence of characters anywhere in the value consisting of
+any number, including zero, of
+characters in the @code{space} character class,
+immediately followed by zero or one instances of @samp{a},
+then a @samp{b}:
+
+@example
+[[ $line =~ [[:space:]]*(a)?b ]]
+@end example
+
+@noindent
+That means values for @code{line} like
+@samp{aab}, @samp{ aaaaaab}, @samp{xaby}, and @samp{ ab}
+will all match,
+as will a line containing a @samp{b} anywhere in its value.
+
+If you want to match a character that's special to the regular expression
+grammar (@samp{^$|[]()\.*+?}), 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{.}.
+
+Likewise, if you want to include a character in your pattern that has a
+special meaning to the regular expression grammar, you must make sure it's
+not quoted.
+If you want to anchor a pattern at the beginning or end of the string,
+for instance, you cannot quote the @samp{^} or @samp{$}
+characters using any form of shell quoting.
+
+If you want to match @samp{initial string} at the start of a line,
+the following will work:
+@example
+[[ $line =~ ^"initial string" ]]
+@end example
+@noindent
+but this will not:
+@example
+[[ $line =~ "^initial string" ]]
+@end example
+@noindent
+because in the second example the @samp{^} is quoted and doesn't have its
+usual special meaning.
+
+It is sometimes difficult to specify a regular expression properly
+without using quotes, or to keep track of the quoting used by regular
+expressions while paying attention to
+shell quoting and the shell's quote removal.
+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.
+For example, the following is equivalent to the pattern used above:
+
+@example
+pattern='[[:space:]]*(a)?b'
+[[ $line =~ $pattern ]]
+@end example
+
+Shell programmers should take special care with backslashes, since
+backslashes are used by both the shell and regular expressions to remove
+the special meaning from the following character.
+This means that after the shell's word expansions complete
+(@pxref{Shell Expansions}),
+any backslashes remaining in parts of the pattern
+that were originally not quoted can remove the
+special meaning of pattern characters.
+If any part of the pattern is quoted, the shell does its best to ensure that
+the regular expression treats those remaining backslashes as literal,
+if they appeared in a quoted portion.
+
+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 pattern passed to the regular expression
+parser is @samp{\.}. The backslash removes the special meaning from
+@samp{.}, so the literal @samp{.} matches.
+In the second two examples, the pattern passed to the regular expression
+parser has the backslash quoted (e.g., @samp{\\\.}), which will not match
+the string, since it does not contain a backslash.
+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.
+
+Bracket expressions in regular expressions can be sources of errors as well,
+since characters that are normally special in regular expressions
+lose their special meanings between brackets.
+However, you can use bracket expressions to match special pattern characters
+without quoting them, so they are sometimes useful for this purpose.
+
+Though it might seem like a strange way to write it, the following pattern
+will match a @samp{.} in the string:
+
+@example
+[[ . =~ [.] ]]
+@end example
+
+The shell performs any word expansions before passing the pattern
+to the regular expression functions,
+so you can assume that the shell's quoting takes precedence.
+As noted above, the regular expression parser will interpret any
+unquoted backslashes remaining in the pattern after shell expansion
+according to its own rules.
+The intention is to avoid making shell programmers quote things twice
+as much as possible, so shell quoting should be sufficient to quote
+special pattern characters where that's necessary.
+
+The array variable @code{BASH_REMATCH} records which parts of the string
+matched the pattern.
+The element of @code{BASH_REMATCH} with index 0 contains the portion of
+the string matching the entire regular expression.
+Substrings matched by parenthesized subexpressions within the regular
+expression are saved in the remaining @code{BASH_REMATCH} indices.
+The element of @code{BASH_REMATCH} with index @var{n} is the portion of the
+string matching the @var{n}th parenthesized subexpression.
+
+Bash sets
+@code{BASH_REMATCH}
+in the global scope; declaring it as a local variable will lead to
+unexpected results.
+
+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 forces the shell to create
+a subshell (@pxref{Command Execution Environment}), and each
+of the commands in @var{list} is executed in that subshell environment.
+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 reserved words, so they must be separated from the @var{list}
+by @code{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 @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 syntax for a coprocess is:
+
+@example
+coproc [@var{NAME}] @var{command} [@var{redirections}]
+@end example
+
+@noindent
+This creates a coprocess named @var{NAME}.
+@var{command} may be either a simple command (@pxref{Simple Commands})
+or a compound command (@pxref{Compound Commands}).
+@var{NAME} is a shell variable name.
+If @var{NAME} is not supplied, the default name is @code{COPROC}.
+
+The recommended form to use for a coprocess is
+
+@example
+coproc @var{NAME} @{ @var{command}; @}
+@end example
+
+@noindent
+This form is recommended because simple commands result in the coprocess
+always being named @code{COPROC}, and it is simpler to use and more complete
+than the other compound commands.
+
+There are other forms of coprocesses:
+
+@example
+coproc @var{NAME} @var{compound-command}
+coproc @var{compound-command}
+coproc @var{simple-command}
+@end example
+
+@noindent
+If @var{command} is a compound command, @var{NAME} is optional. The
+word following @code{coproc} determines whether that word is interpreted
+as a variable name: it is interpreted as @var{NAME} if it is not a
+reserved word that introduces a compound command.
+If @var{command} is a simple command, @var{NAME} is not allowed; this
+is to avoid confusion between @var{NAME} and the first word of the simple
+command.
+
+When the coprocess is executed, the shell creates an array variable
+(@pxref{Arrays})
+named @var{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 @var{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 @var{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{@var{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, which
+is available at
+@url{https://www.gnu.org/software/parallel/parallel_tutorial.html}.
+
+@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{fname} () @var{compound-command} [ @var{redirections} ]
+@end example
+
+or
+
+@example
+function @var{fname} [()] @var{compound-command} [ @var{redirections} ]
+@end example
+
+This defines a shell function named @var{fname}. The reserved
+word @code{function} is optional.
+If the @code{function} reserved
+word is supplied, the parentheses are optional.
+The @dfn{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.
+If the @code{function} reserved word is used, but the
+parentheses are not supplied, the braces are recommended.
+@var{compound-command} is executed whenever @var{fname} is specified as the
+name of a simple command.
+When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}),
+@var{fname} must be a valid shell name and
+may not be the same as one of the special builtins
+(@pxref{Special Builtins}).
+In default mode, a function name can be any unquoted shell word that does
+not contain @samp{$}.
+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 (@dfn{local variables}).
+Ordinarily, variables and their values
+are shared between a function and its caller.
+These variables are visible only to
+the function and the commands it invokes. This is particularly
+important when a shell function calls other functions.
+
+In the following description, the @dfn{current scope} is a currently-
+executing function.
+Previous scopes consist of that function's caller and so on,
+back to the "global" scope, where the shell is not executing
+any shell function.
+Consequently, a local variable at the current local scope is a variable
+declared using the @code{local} or @code{declare} builtins in the
+function that is currently executing.
+
+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 @dfn{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 @env{var} is declared as local in function
+@code{func1}, and @code{func1} calls another function @code{func2},
+references to @env{var} made from within @code{func2} will resolve to the
+local variable @env{var} from @code{func1}, shadowing any global variable
+named @env{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
+(appearing as unset)
+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
+(see below how @code{localvar_unset}shell option changes this behavior).
+
+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 child shell processes
+(those created when executing a separate shell invocation)
+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 @dfn{parameter} is an entity that stores values.
+It can be a @code{name}, a number, or one of the special characters
+listed below.
+A @dfn{variable} is a parameter denoted by a @code{name}.
+A variable has a @code{value} and zero or more @code{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 (@pxref{Shell Parameter Expansion}).
+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 and filename expansion are 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 (@dfn{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 (declaration commands).
+When @samp{+=} is applied to a variable for which the @code{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 @code{nameref} attribute using the
+@option{-n} option to the @code{declare} or @code{local} builtin commands
+(@pxref{Bash Builtins})
+to create a @dfn{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 @env{ref} whose value is
+the variable name passed as the first argument.
+References and assignments to @env{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 @dfn{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 filename 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 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.
+@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: @dfn{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
+(@dfn{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
+@dfn{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 letters,
+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 letters 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
+(integer or letter).
+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 @dfn{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 @dfn{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 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 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.
+
+@example
+$ v=123
+$ echo $@{v-unset@}
+123
+@end example
+
+@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.
+
+@example
+$ var=
+$ : $@{var:=DEFAULT@}
+$ echo $var
+DEFAULT
+@end example
+
+@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.
+
+@example
+$ var=
+$ : $@{var:?var is unset or null@}
+bash: var: var is unset or null
+@end example
+
+@item $@{@var{parameter}:+@var{word}@}
+If @var{parameter}
+is null or unset, nothing is substituted, otherwise the expansion of
+@var{word} is substituted.
+
+@example
+$ var=123
+$ echo $@{var:+var is set and not null@}
+var is set and not null
+@end example
+
+@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{@@} or @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{@@} or @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{$0} 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 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}@}
+@itemx $@{@var{parameter}//@var{pattern}/@var{string}@}
+@itemx $@{@var{parameter}/#@var{pattern}/@var{string}@}
+@itemx $@{@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}.
+@var{string} undergoes tilde expansion, parameter and variable expansion,
+arithmetic expansion, command and process substitution, and quote removal.
+The match is performed according to the rules described below
+(@pxref{Pattern Matching}).
+
+In the first form above, only the first match is replaced.
+If there are two slashes separating @var{parameter} and @var{pattern}
+(the second form above), all matches of @var{pattern} are
+replaced with @var{string}.
+If @var{pattern} is preceded by @samp{#} (the third form above),
+it must match at the beginning of the expanded value of @var{parameter}.
+If @var{pattern} is preceded by @samp{%} (the fourth form above),
+it must match at the end of the expanded value of @var{parameter}.
+If the expansion of @var{string} is null,
+matches of @var{pattern} are deleted.
+If @var{string} is null,
+matches of @var{pattern} are deleted
+and the @samp{/} following @var{pattern} may be omitted.
+
+If the @code{patsub_replacement} shell option is enabled using @code{shopt},
+any unquoted instances of @samp{&} in @var{string} are replaced with the
+matching portion of @var{pattern}.
+This is intended to duplicate a common @code{sed} idiom.
+
+Quoting any part of @var{string} inhibits replacement in the
+expansion of the quoted portion, including replacement strings stored
+in shell variables.
+Backslash will escape @samp{&} in @var{string}; the backslash is removed
+in order to permit a literal @samp{&} in the replacement string.
+Users should take care if @var{string} is double-quoted to avoid
+unwanted interactions between the backslash and double-quoting, since
+backslash has special meaning within double quotes.
+Pattern substitution performs the check for unquoted @samp{&} after
+expanding @var{string},
+so users should ensure to properly quote any occurrences of @samp{&}
+they want to be taken literally in the replacement
+and ensure any instances of @samp{&} they want to be replaced are unquoted.
+
+For instance,
+
+@example
+var=abcdef
+rep='& '
+echo $@{var/abc/& @}
+echo "$@{var/abc/& @}"
+echo $@{var/abc/$rep@}
+echo "$@{var/abc/$rep@}"
+@end example
+
+@noindent
+will display four lines of "abc def", while
+
+@example
+var=abcdef
+rep='& '
+echo $@{var/abc/\& @}
+echo "$@{var/abc/\& @}"
+echo $@{var/abc/"& "@}
+echo $@{var/abc/"$rep"@}
+@end example
+
+@noindent
+will display four lines of "& def".
+Like the pattern removal operators, double quotes surrounding the
+replacement string quote the expanded characters, while double quotes
+enclosing the entire parameter substitution do not, since
+the expansion is performed in a
+context that doesn't take any enclosing double quotes into account.
+
+Since backslash can escape @samp{&}, it can also escape a backslash in
+the replacement string.
+This means that @samp{\\} will insert a literal
+backslash into the replacement, so these two @code{echo} commands
+
+@example
+var=abcdef
+rep='\\&xyz'
+echo $@{var/abc/\\&xyz@}
+echo $@{var/abc/$rep@}
+@end example
+
+@noindent
+will both output @samp{\abcxyzdef}.
+
+It should rarely be necessary to enclose only @var{string} in double
+quotes.
+
+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 U
+The expansion is a string that is the value of @var{parameter} with lowercase
+alphabetic characters converted to uppercase.
+@item u
+The expansion is a string that is the value of @var{parameter} with the first
+character converted to uppercase, if it is alphabetic.
+@item L
+The expansion is a string that is the value of @var{parameter} with uppercase
+alphabetic characters converted to lowercase.
+@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 K
+Produces a possibly-quoted version of the value of @var{parameter},
+except that it prints the values of
+indexed and associative arrays as a sequence of quoted key-value pairs
+(@pxref{Arrays}).
+@item a
+The expansion is a string consisting of flag values representing
+@var{parameter}'s attributes.
+@item k
+Like the @samp{K} transformation, but expands the keys and values of
+indexed and associative arrays to separate words after word splitting.
+@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 filename
+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 @var{expression} undergoes the same expansions
+as if it were within double quotes,
+but double quote characters in @var{expression} are not treated specially
+and are removed.
+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, and is not quoted, 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.
+In order to match the filenames @samp{.} and @samp{..},
+the pattern must begin with @samp{.} (for example, @samp{.?}),
+even if @code{dotglob} is set.
+If the @code{globskipdots} shell option is enabled, the filenames
+@samp{.} and @samp{..} are never matched, even if the pattern begins
+with a @samp{.}.
+When not matching filenames, 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{globskipdots},
+@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,
+and the characters included in the range,
+are 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{[aBbCcDdxYyZz]}, 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{]}, @dfn{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 @dfn{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, the shell recognizes several extended pattern matching operators.
+In the following description, a @var{pattern-list} is a list of one
+or more patterns separated by a @samp{|}.
+When matching filenames, the @code{dotglob} shell option determines
+the set of filenames that are tested, as described above.
+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
+
+The @code{extglob} option changes the behavior of the parser, since the
+parentheses are normally treated as operators with syntactic meaning.
+To ensure that extended matching patterns are parsed correctly, make sure
+that @code{extglob} is enabled before parsing constructs containing the
+patterns, including shell functions and command substitutions.
+
+When matching filenames, the @code{dotglob} shell option determines
+the set of filenames that are tested:
+when @code{dotglob} is enabled, the set of filenames includes all files
+beginning with @samp{.}, but the filenames
+@samp{.} and @samp{..} must be matched by a
+pattern or sub-pattern that begins with a dot;
+when it is disabled, the set does not
+include any filenames beginning with ``.'' unless the pattern
+or sub-pattern begins with a @samp{.}.
+As above, @samp{.} only has a special meaning when matching filenames.
+
+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 @dfn{redirected}
+using a special notation interpreted by the shell.
+@dfn{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's lifetime manually.
+The @code{varredir_close} shell option manages this behavior
+(@pxref{The Shopt Builtin}).
+
+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.
+Filename 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, in
+the following order.
+
+@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.
+In the case of such a command (one that consists only of assignment
+statements and redirections), assignment statements are performed before
+redirections.
+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
+@dfn{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 @dfn{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.
+
+A @dfn{subshell} is a copy of the shell process.
+
+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 @dfn{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 @code{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
+@code{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.
+
+The exit status of the last command is available in the special
+parameter $? (@pxref{Special Parameters}).
+
+@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.
+
+When job control is not enabled, and Bash is waiting for a foreground
+command to complete, the shell receives keyboard-generated signals
+such as @code{SIGINT} (usually generated by @samp{^C}) that users
+commonly intend to send to that command.
+This happens because the shell and the command are in the same process
+group as the terminal, and @samp{^C} sends @code{SIGINT} to all processes
+in that process group.
+See @ref{Job Control}, for a more in-depth discussion of process groups.
+
+When Bash is running without job control enabled and receives @code{SIGINT}
+while waiting for a foreground command, it waits until that foreground
+command terminates and then decides what to do about the @code{SIGINT}:
+
+@enumerate
+@item
+If the command terminates due to the @code{SIGINT}, Bash concludes
+that the user meant to end the entire script, and acts on the
+@code{SIGINT} (e.g., by running a @code{SIGINT} trap or exiting itself);
+
+@item
+If the pipeline does not terminate due to @code{SIGINT}, the program
+handled the @code{SIGINT} itself and did not treat it as a fatal signal.
+In that case, Bash does not treat @code{SIGINT} as a fatal signal,
+either, instead assuming that the @code{SIGINT} was used as part of the
+program's normal operation (e.g., @command{emacs} uses it to abort editing
+commands) or deliberately discarded. However, Bash will run any
+trap set on @code{SIGINT}, as it does with any other trapped signal it
+receives while it is waiting for the foreground command to
+complete, for compatibility.
+@end enumerate
+
+@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 creates a
+new instance of itself
+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 and, depending on the operating system, one
+or more optional arguments for that interpreter.
+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 one or more optional arguments 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 supplied to the
+script.
+The details of how the interpreter line is split into an interpreter name
+and a set of arguments vary across systems.
+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 a single argument to a maximum of 32 characters, so it's not
+portable to assume that using more than one argument will work.
+
+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. It's a common idiom to use @code{env} to find
+@code{bash} even if it's been installed in another directory:
+@code{#!/usr/bin/env bash} will find the first occurrence of @code{bash}
+in @env{$PATH}.
+
+@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},
+but @var{filename} does not need to be executable.
+When Bash is not in @sc{posix} mode, it searches the current directory
+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{.} inherits any trap on
+@code{DEBUG}; if it is not, any @code{DEBUG} trap string is saved and
+restored around the call to @code{.}, and @code{.} 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{.} 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.
+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.
+
+If the directory change is successful, @code{cd} sets the value of the
+@env{PWD} environment variable to the new directory name, and sets the
+@env{OLDPWD} environment variable to the value of the current working
+directory before the change.
+
+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{name}s 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{arg} @dots{}]
+@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
+supplied as @var{arg} values, @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{$#} down 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
+The following conditions are applied in the order listed.
+
+@enumerate
+@item
+If the first argument is @samp{!}, the result is the negation of
+the three-argument expression composed of the remaining arguments.
+@item
+If the first argument is exactly @samp{(} and the fourth argument is
+exactly @samp{)}, the result is the two-argument test of the second
+and third arguments.
+@item
+Otherwise, the expression is parsed and evaluated according to
+precedence using the rules listed above.
+@end enumerate
+
+@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 @code{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, a function with that name, if any, is
+unset.
+Readonly variables and functions may not be unset.
+Some shell variables lose their special behavior if they are unset; such
+behavior is noted in the description of the individual variables.
+The return status is zero unless a @var{name} is readonly or may not be unset.
+@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}
+bind @var{readline-command-line}
+@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} and @code{READLINE_MARK} variables
+to the current location of the insertion point and the saved insertion
+point (the @var{mark}), respectively.
+The shell assigns any numeric argument the user supplied to the
+@code{READLINE_ARGUMENT} variable.
+If there was no argument, that variable is not set.
+If the executed command changes the value of any of @code{READLINE_LINE},
+@code{READLINE_POINT}, or @code{READLINE_MARK}, 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 [-aAfFgiIlnrtux] [-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 @option{-I} option causes local variables to inherit the attributes
+(except the @code{nameref} attribute)
+and value of any existing variable with the same
+@var{name} at a surrounding scope.
+If there is no existing variable, the local variable is initially unset.
+
+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 @code{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{name}s 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.
+Bash will use the value of the @env{BASH_LOADABLES_PATH} variable as a
+colon-separated list of directories in which to search for @var{filename}.
+The default is system-dependent.
+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}).
+
+If no options are supplied and a @var{name} is not a shell builtin,
+@code{enable} will attempt to load @var{name} from a shared object named
+@var{name}, as if the command were
+@samp{enable -f @var{name} @var{name}}.
+
+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 restore is effected as if a series of @code{set} commands were executed
+to restore the values that were in place before the function.
+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 %Q
+like @code{%q}, but applies any supplied precision to the @var{argument}
+before quoting it.
+@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
+The %b, %q, and %T directives all use the field width and precision
+arguments from the format specification and write that many bytes from
+(or use that wide a field for) the expanded argument, which usually
+contains more characters than the original.
+
+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.
+
+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 any data.
+The exit status is 0 if input is available on the specified file descriptor,
+or the read will return EOF,
+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
+
+If no @var{name}s are supplied, the line read,
+without the ending delimiter but otherwise unmodified,
+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}.
+
+@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{name}s 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 [-HS] -a
+ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [@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; no limits are set.
+
+@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 @sc{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 -R
+The maximum time a real-time process can run before blocking, in microseconds.
+
+@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 more than one
+resource is specified, the limit name and unit, if appropriate,
+are printed before the value.
+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{-R}, which is in microseconds;
+@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 -r
+Enable restricted shell mode.
+This option cannot be unset once it has been set.
+
+@item -t
+Exit after reading and executing one command.
+
+@item -u
+Treat unset variables and parameters other than the special parameters
+@samp{@@} or @samp{*},
+or array variables subscripted with @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{optname}s 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{optname}s 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{optname}s
+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
+@itemx compat32
+@itemx compat40
+@itemx compat41
+@itemx compat42
+@itemx compat43
+@itemx compat44
+These control aspects of the shell's compatibility mode
+(@pxref{Shell Compatibility Mode}).
+
+@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,
+or in a shell startup file,
+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 globskipdots
+If set, filename expansion will never match the filenames
+@samp{.} and @samp{..},
+even if the pattern begins with a @samp{.}.
+This option is enabled by default.
+
+@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 @code{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 (@pxref{Conditional Constructs},
+when performing pattern substitution word expansions,
+or when filtering possible completions as part of programmable completion.
+
+@item noexpand_translation
+If set, Bash
+encloses the translated results of $"..." quoting in single quotes
+instead of double quotes.
+If the string is not translated, this has no effect.
+
+@item nullglob
+If set, Bash allows filename patterns which match no
+files to expand to a null string, rather than themselves.
+
+@item patsub_replacement
+If set, Bash
+expands occurrences of @samp{&} in the replacement string of pattern
+substitution to the text matched by the pattern, as described
+above (@pxref{Shell Parameter Expansion}).
+This option is enabled by default.
+
+@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{.} (@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 varredir_close
+If set, the shell automatically closes file descriptors assigned using the
+@code{@{varname@}} redirection syntax (@pxref{Redirections}) instead of
+leaving them open when the command completes.
+
+@item xpg_echo
+If set, the @code{echo} builtin expands backslash-escape sequences
+by default.
+
+@end table
+@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 _
+@vindex $_
+($_, an underscore.)
+At shell startup, set to the 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.
+
+@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 @env{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 @env{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 @env{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 @env{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.
+If @env{BASH_COMMAND}
+is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@item BASH_COMPAT
+The value is used to set the shell's compatibility level.
+@xref{Shell Compatibility Mode}, 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 @env{BASH_COMPAT} is unset or set to the empty string, the compatibility
+level is set to the default for the current version.
+If @env{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 values correspond to the compatibility levels
+described below (@pxref{Shell Compatibility Mode}).
+For example, 4.2 and 42 are valid values that correspond
+to the @code{compat42} @code{shopt} option
+and set the compatibility level to 42.
+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 @env{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.
+
+@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.
+If @env{BASH_SUBSHELL}
+is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@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 @dfn{release}).
+
+@item BASH_VERSINFO[1]
+The minor version number (the @dfn{version}).
+
+@item BASH_VERSINFO[2]
+The patch level.
+
+@item BASH_VERSINFO[3]
+The build version.
+
+@item BASH_VERSINFO[4]
+The release status (e.g., @code{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:
+@key{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 @env{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
+Expanded and executed similarly to @code{BASH_ENV}
+(@pxref{Bash Startup Files})
+when an interactive 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 @code{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
+@code{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
+@dfn{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.
+Assignments to @env{HISTCMD} are ignored.
+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 @code{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.
+If @env{LINENO}
+is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@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 this variable is set, and is an array,
+the value of each set element is interpreted as a command to execute
+before printing the primary prompt (@env{$PS1}).
+If this is set but not an array variable,
+its value is used as a command to execute instead.
+
+@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 @env{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 @env{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, it expands to a random integer
+between 0 and 32767. Assigning a value to this
+variable seeds the random number generator.
+If @env{RANDOM}
+is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@item READLINE_ARGUMENT
+Any numeric argument given to a Readline command that was defined using
+@samp{bind -x} (@pxref{Bash Builtins}
+when it was invoked.
+
+@item READLINE_LINE
+The contents of the Readline line buffer, for use
+with @samp{bind -x} (@pxref{Bash Builtins}).
+
+@item READLINE_MARK
+The position of the @dfn{mark} (saved insertion point) in the
+Readline line buffer, for use
+with @samp{bind -x} (@pxref{Bash Builtins}).
+The characters between the insertion point and the mark are often
+called the @dfn{region}.
+
+@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.
+The number of seconds at shell invocation and the current time are always
+determined by querying the system clock.
+If @env{SECONDS}
+is unset, it loses its special properties,
+even if it is subsequently reset.
+
+@item SHELL
+This environment variable expands to the full pathname to the shell.
+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 SRANDOM
+This variable expands to a 32-bit pseudo-random number each time it is
+referenced. The random number generator is not linear on systems that
+support @file{/dev/urandom} or @code{arc4random}, so each returned number
+has no relationship to the numbers preceding it.
+The random number generator cannot be seeded, so assignments to this
+variable have no effect.
+If @env{SRANDOM}
+is unset, it loses its special properties,
+even if it is subsequently reset.
+
+@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.
+* Shell Compatibility Mode:: How Bash supports behavior that was present
+ in earlier versions and has changed.
+@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 historical remote shell daemon, usually @code{rshd},
+or the secure shell daemon @code{sshd}.
+If Bash
+determines it is being run non-interactively 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 an 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)
+and without specifying the @option{-c} option,
+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 values of the set elements of the @env{PROMPT_COMMAND}
+array variable as commands 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
+If the @code{cdspell} shell option is enabled, the shell will attempt
+simple spelling correction for directory arguments to the @code{cd}
+builtin (see the description of the @code{cdspell}
+option to the @code{shopt} builtin in @ref{The Shopt Builtin}).
+The @code{cdspell} option is only effective in interactive shells.
+
+@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
+(@pxref{Conditional Constructs})
+and the @code{test} and @code{[} builtin commands
+(@pxref{Bourne Shell Builtins}).
+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
+@code{integer} attribute using @samp{declare -i} is assigned a value.
+A null value evaluates to 0.
+A shell variable need not have its @code{integer} attribute turned on
+to be used in an expression.
+
+Integer constants follow the C language definition, without suffixes or
+character constants.
+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},
+if a non-digit is required,
+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
+
+@dfn{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
+@code{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, use a shell function
+(@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} may be 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.
+
+Each @var{value} in the list undergoes all the shell expansions
+described above (@pxref{Shell Expansions}).
+
+When assigning to an associative array, the words in a compound assignment
+may be either assignment statements, for which the subscript is required,
+or a list of words that is interpreted as a sequence of alternating keys
+and values:
+@var{name}=(@var{key1} @var{value1} @var{key2} @var{value2} @dots{} ).
+These are treated identically to
+@var{name}=( [@var{key1}]=@var{value1} [@var{key2}]=@var{value2} @dots{} ).
+The first word in the list determines how the remaining words
+are interpreted; all assignments in a list must be of the same type.
+When using key/value pairs, the keys may not be missing or empty;
+a final missing value is treated like the empty string.
+
+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.
+
+The @samp{+=} operator will append to an array variable when assigning
+using the compound assignment syntax; see @ref{Shell Parameters} above.
+
+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.
+@code{unset @var{name}[@var{subscript}]} behaves differently
+depending on the array type when given a
+subscript of @samp{*} or @samp{@@}.
+When @var{name} is an associative array, it removes the element with key
+@samp{*} or @samp{@@}.
+If @var{name} is an indexed array, @code{unset} removes all of the elements,
+but does not remove the array itself.
+
+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
+
+Removes elements from the directory stack.
+The elements are numbered from 0 starting at the first directory
+listed by @code{dirs};
+that is, @code{popd} is equivalent to @code{popd +0}.
+
+When no arguments are given, @code{popd}
+removes the top directory from the stack and changes to
+the new top directory.
+
+Arguments, if supplied, have the following meanings:
+
+@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, from the stack.
+@item -@var{N}
+Removes the @var{N}th directory (counting from the right of the
+list printed by @code{dirs}), starting with zero, from the stack.
+@end table
+
+If the top element of the directory stack is modified, and
+the @option{-n} option was not supplied, @code{popd} uses the @code{cd}
+builtin to change to the directory at the top of the stack.
+If the @code{cd} fails, @code{popd} returns a non-zero value.
+
+Otherwise, @code{popd} returns an unsuccessful status if
+an invalid option is encountered, the directory stack
+is empty, or a non-existent directory stack entry is specified.
+
+If the @code{popd} command is successful,
+Bash runs @code{dirs} to show the final contents of the directory stack,
+and the return status is 0.
+
+@btindex pushd
+@item pushd
+@example
+pushd [-n] [@var{+N} | @var{-N} | @var{dir}]
+@end example
+
+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, @code{pushd} exchanges the top two elements
+of the directory stack.
+
+Arguments, if supplied, have the following meanings:
+
+@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.
+@end table
+
+After the stack has been modified, if the @option{-n} option was not
+supplied, @code{pushd} uses the @code{cd} builtin to change to the
+directory at the top of the stack.
+If the @code{cd} fails, @code{pushd} returns a non-zero value.
+
+Otherwise, if no arguments are supplied, @code{pushd} returns 0 unless the
+directory stack is empty.
+When rotating the directory stack, @code{pushd} returns 0 unless
+the directory stack is empty or a non-existent directory stack element
+is specified.
+
+If the @code{pushd} command is successful,
+Bash runs @code{dirs} to show the final contents of the directory stack.
+
+@end table
+
+@node Controlling the Prompt
+@section Controlling the Prompt
+@cindex prompting
+
+Bash examines the value of the array variable @env{PROMPT_COMMAND} just before
+printing each primary prompt.
+If any elements in @env{PROMPT_COMMAND} are set and non-null, Bash
+executes each value, in numeric order,
+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 value of the @code{PWD} shell variable (@env{$PWD}),
+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}).
+This can have unwanted side effects if escaped portions of the string
+appear within command substitution or contain characters special to
+word expansion.
+
+@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{HISTFILE},
+@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 @code{history}
+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{shopt -u restricted_shell}.
+@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.
+
+The restricted shell mode is only one component of a useful restricted
+environment. It should be accompanied by setting @env{PATH} to a value
+that allows execution of only a few verified commands (commands that
+allow shell escapes are particularly vulnerable), changing the current
+directory to a non-writable directory other than @env{$HOME} after login,
+not allowing the restricted shell to execute shell scripts, and cleaning
+the environment of variables that cause some commands to modify their
+behavior (e.g., @env{VISUAL} or @env{PAGER}).
+
+Modern systems provide more secure ways to implement a restricted environment,
+such as @code{jails}, @code{zones}, or @code{containers}.
+
+
+@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
+Bash will not insert a command without the execute bit set into the
+command hash table, even if it returns it as a (last-ditch) result
+from a @env{$PATH} search.
+
+@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
+Alias expansion is performed when initially parsing a command substitution.
+The default mode generally defers it, when enabled, until the command
+substitution is executed. This means that command substitution will not
+expand aliases that are defined after the command substitution is initially
+parsed (e.g., as part of a function definition).
+
+@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{-}.
+
+@ignore
+@item
+When parsing @code{$()} command substitutions containing here-documents,
+the parser does not allow a here-document to be delimited by the closing
+right parenthesis. The newline after the here-document delimiter is required.
+@end ignore
+
+@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. For any other simple
+command, the shell aborts execution of that command, and execution continues
+at the top level ("the shell shall not perform any further processing of the
+command in which the error occurred").
+
+@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
+While variable indirection is available, it may not be applied to the
+@samp{#} and @samp{?} special parameters.
+
+@item
+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
+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
+@code{trap -p} displays signals whose dispositions are set to SIG_DFL and
+those that were ignored when the shell started.
+
+@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 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 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 @code{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
+The @code{printf} builtin uses @code{double} (via @code{strtod}) to convert
+arguments corresponding to floating point conversion specifiers, instead of
+@code{long double} if it's available. The @samp{L} length modifier forces
+@code{printf} to use @code{long double} if it's available.
+
+@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 Shell Compatibility Mode
+@section Shell Compatibility Mode
+@cindex Compatibility Level
+@cindex Compatibility Mode
+
+Bash-4.0 introduced the concept of a @dfn{shell compatibility level},
+specified as a set of options to the shopt builtin
+(@code{compat31},
+@code{compat32},
+@code{compat40},
+@code{compat41},
+and so on).
+There is only one current
+compatibility level -- each option is mutually exclusive.
+The compatibility level is intended to allow users to select behavior
+from previous versions that is incompatible with newer versions
+while they migrate scripts to use current features and
+behavior. It's intended to be a temporary solution.
+
+This section does not mention behavior that is standard for a particular
+version (e.g., setting @code{compat32} means that quoting the rhs of the regexp
+matching operator quotes special regexp characters in the word, which is
+default behavior in bash-3.2 and subsequent versions).
+
+If a user enables, say, @code{compat32}, it may affect the behavior of other
+compatibility levels up to and including the current compatibility level.
+The idea is that each compatibility level controls behavior that changed
+in that version of Bash,
+but that behavior may have been present in earlier versions.
+For instance, the change to use locale-based comparisons with the @code{[[}
+command came in bash-4.1, and earlier versions used ASCII-based comparisons,
+so enabling @code{compat32} will enable ASCII-based comparisons as well.
+That granularity may not be sufficient for
+all uses, and as a result users should employ compatibility levels carefully.
+Read the documentation for a particular feature to find out the
+current behavior.
+
+Bash-4.3 introduced a new shell variable: @env{BASH_COMPAT}.
+The value assigned
+to this variable (a decimal version number like 4.2, or an integer
+corresponding to the @code{compat}@var{NN} option, like 42) determines the
+compatibility level.
+
+Starting with bash-4.4, Bash has begun deprecating older compatibility
+levels.
+Eventually, the options will be removed in favor of @env{BASH_COMPAT}.
+
+Bash-5.0 is the final version for which there will be an individual shopt
+option for the previous version. Users should use @env{BASH_COMPAT}
+on bash-5.0 and later versions.
+
+The following table describes the behavior changes controlled by each
+compatibility level setting.
+The @code{compat}@var{NN} tag is used as shorthand for setting the
+compatibility level
+to @var{NN} using one of the following mechanisms.
+For versions prior to bash-5.0, the compatibility level may be set using
+the corresponding @code{compat}@var{NN} shopt option.
+For bash-4.3 and later versions, the @env{BASH_COMPAT} variable is preferred,
+and it is required for bash-5.1 and later versions.
+
+@table @code
+@item compat31
+@itemize @bullet
+@item
+quoting the rhs of the @code{[[} command's regexp matching operator (=~)
+has no special effect
+@end itemize
+
+@item compat32
+@itemize @bullet
+@item
+interrupting a command list such as "a ; b ; c" causes the execution
+of the next command in the list (in bash-4.0 and later versions,
+the shell acts as if it received the interrupt, so
+interrupting one command in a list aborts the execution of the
+entire list)
+@end itemize
+
+@item compat40
+@itemize @bullet
+@item
+the @samp{<} and @samp{>} operators to the @code{[[} command do not
+consider the current locale when comparing strings; they use ASCII
+ordering.
+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).
+@end itemize
+
+@item compat41
+@itemize @bullet
+@item
+in posix mode, @code{time} may be followed by options and still be
+recognized as a reserved word (this is @sc{posix} interpretation 267)
+@item
+in posix mode, the parser requires that an even number of single
+quotes occur in the @var{word} portion of a double-quoted $@{@dots{}@}
+parameter expansion and treats them specially, so that characters within
+the single quotes are considered quoted
+(this is @sc{posix} interpretation 221)
+@end itemize
+
+@item compat42
+@itemize @bullet
+@item
+the replacement string in double-quoted pattern substitution does not
+undergo quote removal, as it does in versions after bash-4.2
+@item
+in posix mode, single quotes are considered special when expanding
+the @var{word} portion of a double-quoted $@{@dots{}@} parameter expansion
+and can be used to quote a closing brace or other special character
+(this is part of @sc{posix} interpretation 221);
+in later versions, single quotes
+are not special within double-quoted word expansions
+@end itemize
+
+@item compat43
+@itemize @bullet
+@item
+the shell does not print a warning message if an attempt is made to
+use a quoted compound assignment as an argument to declare
+(e.g., declare -a foo='(1 2)'). Later versions warn that this usage is
+deprecated
+@item
+word expansion errors are considered non-fatal errors that cause the
+current command to fail, even in posix mode
+(the default behavior is to make them fatal errors that cause the shell
+to exit)
+@item
+when executing a shell function, the loop state (while/until/etc.)
+is not reset, so @code{break} or @code{continue} in that function will break
+or continue loops in the calling context. Bash-4.4 and later reset
+the loop state to prevent this
+@end itemize
+
+@item compat44
+@itemize @bullet
+@item
+the shell sets up the values used by @env{BASH_ARGV} and @env{BASH_ARGC}
+so they can expand to the shell's positional parameters even if extended
+debugging mode is not enabled
+@item
+a subshell inherits loops from its parent context, so @code{break}
+or @code{continue} will cause the subshell to exit.
+Bash-5.0 and later reset the loop state to prevent the exit
+@item
+variable assignments preceding builtins like @code{export} and @code{readonly}
+that set attributes continue to affect variables with the same
+name in the calling environment even if the shell is not in posix
+mode
+@end itemize
+
+@item compat50 (set using BASH_COMPAT)
+@itemize @bullet
+@item
+Bash-5.1 changed the way @code{$RANDOM} is generated to introduce slightly
+more randomness. If the shell compatibility level is set to 50 or
+lower, it reverts to the method from bash-5.0 and previous versions,
+so seeding the random number generator by assigning a value to
+@env{RANDOM} will produce the same sequence as in bash-5.0
+@item
+If the command hash table is empty, Bash versions prior to bash-5.1
+printed an informational message to that effect, even when producing
+output that can be reused as input. Bash-5.1 suppresses that message
+when the @option{-l} option is supplied.
+@end itemize
+
+@item compat51 (set using BASH_COMPAT)
+@itemize @bullet
+@item
+The @code{unset} builtin will unset the array @code{a} given an argument like
+@samp{a[@@]}.
+Bash-5.2 will unset an element with key @samp{@@} (associative arrays)
+or remove all the elements without unsetting the array (indexed arrays)
+@item
+arithmetic commands ( ((...)) ) and the expressions in an arithmetic for
+statement can be expanded more than once
+@item
+expressions used as arguments to arithmetic operators in the @code{[[}
+conditional command can be expanded more than once
+@item
+the expressions in substring parameter brace expansion can be
+expanded more than once
+@item
+the expressions in the $(( ... )) word expansion can be expanded
+more than once
+@item
+arithmetic expressions used as indexed array subscripts can be
+expanded more than once
+@item
+@code{test -v}, when given an argument of @samp{A[@@]}, where @var{A} is
+an existing associative array, will return true if the array has any set
+elements.
+Bash-5.2 will look for and report on a key named @samp{@@}
+@item
+the $@{@var{parameter}[:]=@var{value}@} word expansion will return
+@var{value}, before any variable-specific transformations have been
+performed (e.g., converting to lowercase).
+Bash-5.2 will return the final value assigned to the variable.
+@item
+Parsing command substitutions will behave as if extended glob
+(@pxref{The Shopt Builtin})
+is enabled, so that parsing a command substitution containing an extglob
+pattern (say, as part of a shell function) will not fail.
+This assumes the intent is to enable extglob before the command is executed
+and word expansions are performed.
+It will fail at word expansion time if extglob hasn't been
+enabled by the time the command is executed.
+@end itemize
+@end table
+
+@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
+@dfn{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 @dfn{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 (@dfn{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 job whose command name begins with @samp{ce}.
+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 causes @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] [-p @var{varname}] [@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,
+@code{wait} waits for all running background jobs and
+the last-executed process substitution, if its process id is the same as
+@var{$!},
+and the return status is zero.
+If the @option{-n} option is supplied, @code{wait} waits for a single job
+from the list of @var{pid}s or @var{jobspec}s or, if no arguments are
+supplied, any job,
+to complete and returns its exit status.
+If none of the supplied arguments is a child of the shell, or if no arguments
+are supplied and the shell has no unwaited-for children, the exit status
+is 127.
+If the @option{-p} option is supplied, the process or job identifier of the job
+for which the exit status is returned is assigned to the variable
+@var{varname} named by the option argument.
+The variable will be unset initially, before any assignment.
+This is useful only when the @option{-n} option is supplied.
+Supplying the @option{-f} option, when job control is enabled,
+forces @code{wait} to wait for each @var{pid} or @var{jobspec} to
+terminate before returning its status, instead 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.
+If @code{wait} is interrupted by a signal, the return status will be greater
+than 128, as described above (@pxref{Signals}).
+Otherwise, the return status is the exit status
+of the last process or job waited for.
+
+@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,
+or a shell without job control enabled,
+cannot be suspended; the @option{-f}
+option can be used to override this and force the suspension.
+The return status is 0 unless the shell is a login shell
+or job control is not enabled
+and
+@option{-f}
+is not supplied.
+
+@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, message translation
+files, some supplemental documentation, a number of example loadable
+builtin commands, and a set of header files for developing loadable
+builtins.
+You may need additional privileges to install @code{bash} to your
+desired destination, so @samp{sudo make install} might be required.
+More information about controlling the locations where @code{bash} and
+other files are installed is below (@pxref{Installation Names}).
+
+@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}, @file{po}, 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.69 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 support 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.;
+that is, the @dfn{installation prefix} defaults to @file{/usr/local}.
+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 @env{prefix} @samp{make}
+variable when running @samp{make install}
+(e.g., @samp{make install prefix=@var{PATH}}).
+The @env{prefix} variable provides a default for @env{exec_prefix} and
+other variables used when installing bash.
+
+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.
+
+If you would like to change the installation locations for a single run,
+you can specify these variables as arguments to @code{make}:
+@samp{make install exec_prefix=/} will install @code{bash} and
+@code{bashbug} into @file{/bin} instead of the default @file{/usr/local/bin}.
+
+If you want to see the files bash will install and where it will install
+them without changing anything on your system, specify the variable
+@env{DESTDIR} as an argument to @code{make}. Its value should be the
+absolute directory path you'd like to use as the root of your sample
+installation tree. For example,
+
+@example
+mkdir /fs1/bash-install
+make install DESTDIR=/fs1/bash-install
+@end example
+
+@noindent
+will install @code{bash} into @file{/fs1/bash-install/usr/local/bin/bash},
+the documentation into directories within
+@file{/fs1/bash-install/usr/local/share}, the example loadable builtins into
+@file{/fs1/bash-install/usr/local/lib/bash}, and so on.
+You can use the usual @env{exec_prefix} and @env{prefix} variables to alter
+the directory paths beneath the value of @env{DESTDIR}.
+
+The GNU Makefile standards provide a more complete description of these
+variables and their effects.
+
+@node Specifying the System Type
+@section Specifying the System Type
+
+There may be some features @code{configure} can not figure out
+automatically, but needs 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-libintl-prefix[=@var{PREFIX}]
+Define this to make Bash link with a locally-installed version of the
+libintl library instead of the version in @file{lib/intl}.
+
+@item --with-libiconv-prefix[=@var{PREFIX}]
+Define this to make Bash look for libiconv in @var{PREFIX} instead of the
+standard system locations. There is no version included with Bash.
+
+@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, linked, and installed, 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-separate-helpfiles
+Use external files for the documentation displayed by the @code{help} builtin
+instead of storing the text internally.
+
+@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{alt-array-implementation},
+@samp{disabled-builtins},
+@samp{direxpand-default},
+@samp{strict-posix-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-alt-array-implementation
+This builds bash using an alternate implementation of arrays
+(@pxref{Arrays}) that provides faster access at the expense of using
+more memory (sometimes many times more, depending on how sparse an array is).
+
+@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 @code{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 @code{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 @code{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-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-translatable-strings
+Enable support for @code{$"@var{string}"} translatable strings
+(@pxref{Locale Translation}).
+
+@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/} and from
+@uref{http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz}.
+
+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}/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}},
+which matches @var{pattern} and replaces it with @var{replacement} in
+the value of @var{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 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 character classes, equivalence classes, and
+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 a @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..1a9b3ed
--- /dev/null
+++ b/doc/builtins.0
@@ -0,0 +1,2083 @@
+BASH_BUILTINS(1) General Commands Manual BASH_BUILTINS(1)
+
+
+
+NNAAMMEE
+ :, ., [, 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,
+ readarray, 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 en-
+ vironment 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, but _f_i_l_e_n_a_m_e does not need to be executable. The file
+ searched for in PPAATTHH need not be executable. When bbaasshh is not
+ in _p_o_s_i_x _m_o_d_e, it searches the current directory 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 positional parameters when
+ _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are
+ unchanged. If the --TT option is enabled, .. inherits any trap on
+ DDEEBBUUGG; if it is not, any DDEEBBUUGG trap string is saved and restored
+ around the call to .., and .. unsets the DDEEBBUUGG trap while it exe-
+ cutes. If --TT is not set, and the sourced file changes the DDEEBBUUGG
+ trap, the new value is retained when .. 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 re-
+ turns 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
+ bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d_-_l_i_n_e
+ 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 ap-
+ pear in a rreeaaddlliinnee initialization file such as _._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 en-
+ tered. 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 and RREEAADDLLIINNEE__MMAARRKK
+ variables to the current location of the insertion point
+ and the saved insertion point (the mark), respectively.
+ The shell assigns any numeric argument the user supplied
+ to the RREEAADDLLIINNEE__AARRGGUUMMEENNTT variable. If there was no argu-
+ ment, that variable is not set. If the executed command
+ changes the value of any of RREEAADDLLIINNEE__LLIINNEE, RREEAADD--
+ LLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, 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 in-
+ put.
+
+ 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 ex-
+ ited. 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. The vari-
+ able CCDDPPAATTHH defines the search path for the directory containing
+ _d_i_r: each directory name in CCDDPPAATTHH is searched for _d_i_r. Alter-
+ native directory names in CCDDPPAATTHH are separated by a colon (:).
+ A null directory name in CCDDPPAATTHH is the same as the current di-
+ rectory, i.e., ``..''. If _d_i_r begins with a slash (/), then CCDD--
+ PPAATTHH 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 sym-
+ bolic links to be followed by resolving the link after process-
+ ing instances of _._. in _d_i_r. If _._. appears in _d_i_r, it is pro-
+ cessed 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 successfully determined after a successful directory
+ change, ccdd will return an unsuccessful status. On systems that
+ support it, the --@@ option presents the extended attributes asso-
+ ciated with a file as a directory. An argument of -- is con-
+ verted to $$OOLLDDPPWWDD before the directory change is attempted. If
+ a non-empty directory name from CCDDPPAATTHH is used, or if -- is the
+ first argument, and the directory change is successful, the ab-
+ solute pathname of the new working directory is written to the
+ standard output. If the directory change is successful, ccdd sets
+ the value of the PPWWDD environment variable to the new directory
+ name, and sets the OOLLDDPPWWDD environment variable to the value of
+ the current working directory before the change. 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 op-
+ tion 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 fa-
+ cilities, 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 initial
+ 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 in _b_a_s_h_(_1_).
+
+ 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 de-
+ fault) to words completed at the end of the
+ line.
+ pplluussddiirrss
+ After any matches defined by the compspec are
+ generated, directory name completion is at-
+ tempted 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. Arguments
+ are passed as with the --FF option.
+ --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 ar-
+ guments 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 cur-
+ rent command line. When it finishes, the possible com-
+ pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY
+ 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 op-
+ tions 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 de-
+ scribed above. The --DD option indicates that other supplied op-
+ tions 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 initial 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 en-
+ closing 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 [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...]
+ ttyyppeesseett [--aaAAffFFggiiIIllnnrrttuuxx] [--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 at-
+ tributes 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 func-
+ tion. It is ignored in all other cases. The --II option causes
+ local variables to inherit the attributes (except the _n_a_m_e_r_e_f
+ attribute) and value of any existing variable with the same _n_a_m_e
+ at a surrounding scope. If there is no existing variable, the
+ local variable is initially unset. The following options can be
+ used to restrict output to variables with the specified attri-
+ bute or to give variables attributes:
+ --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss in
+ _b_a_s_h_(_1_)).
+ --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss in
+ _b_a_s_h_(_1_)).
+ --ff Use function names only.
+ --ii The variable is treated as an integer; arithmetic evalua-
+ tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN in _b_a_s_h_(_1_)) 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 in-
+ herit 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 en-
+ vironment.
+
+ 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 as-
+ sign a value to an array variable without using the compound as-
+ signment syntax (see AArrrraayyss in _b_a_s_h_(_1_)), one of the _n_a_m_e_s 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 --ff.
+
+ ddiirrss [[--ccllppvv]] [[++_n]] [[--_n]]
+ Without options, displays the list of currently remembered di-
+ rectories. The default display is on a single line with direc-
+ tory 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 direc-
+ tory in the stack.
+ --cc Clears the directory stack by deleting all of the en-
+ tries.
+ --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 re-
+ ceives 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 ar-
+ gument 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 es-
+ cape characters by default. eecchhoo does not interpret ---- to mean
+ the end of options. eecchhoo interprets the following escape se-
+ quences:
+ \\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 en-
+ abled. 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.
+ Bash will use the value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a
+ colon-separated list of directories in which to search for _f_i_l_e_-
+ _n_a_m_e. The default is system-dependent. The --dd option will
+ delete a builtin previously loaded with --ff. If no _n_a_m_e argu-
+ ments are given, or if the --pp option is supplied, a list of
+ shell builtins is printed. With no other option arguments, the
+ list consists of all enabled shell builtins. If --nn is supplied,
+ only disabled builtins are printed. If --aa is supplied, the list
+ printed includes all builtins, with an indication of whether or
+ not each is enabled. If --ss is supplied, the output is re-
+ stricted to the POSIX _s_p_e_c_i_a_l builtins. If no options are sup-
+ plied and a _n_a_m_e is not a shell builtin, eennaabbllee will attempt to
+ load _n_a_m_e from a shared object named _n_a_m_e, as if the command
+ were ``enable -f _n_a_m_e _n_a_m_e . 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). When listing, a
+ _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to
+ the current command (usually the ffcc command); otherwise 0 is
+ equivalent to -1 and -0 is invalid. 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 otherwise. If
+ _f_i_r_s_t is not specified, it is set to the previous command 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 in-
+ valid 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 _._._.]
+ 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 ex-
+ pected 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 op-
+ tion requires an argument, ggeettooppttss places that argument into the
+ variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automatically;
+ it must be manually reset between multiple calls to ggeettooppttss
+ within the same shell invocation if a new set of parameters is
+ to be used.
+
+ When the end of options is encountered, ggeettooppttss exits with a re-
+ turn 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 supplied as _a_r_g values, ggeettooppttss parses those in-
+ stead.
+
+ 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 OOPP--
+ TTAARRGG 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 op-
+ tion 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 arguments
+ are supplied with --tt, the _n_a_m_e is printed before the hashed full
+ pathname. The --ll option causes output to be displayed in a for-
+ mat that may be reused as input. If no arguments are given, or
+ if only --ll is supplied, information about remembered 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 range of 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 ap-
+ pended 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 or range
+ is supplied as an argument to --dd, or the history expansion sup-
+ plied 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 ex-
+ ecutes _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 op-
+ tion is encountered.
+
+ lleett _a_r_g [_a_r_g ...]
+ Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH--
+ MMEETTIICC EEVVAALLUUAATTIIOONN in _b_a_s_h_(_1_)). 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.
+ The restore is effected as if a series of sseett commands were exe-
+ cuted to restore the values that were in place before the func-
+ tion. 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. The elements are num-
+ bered from 0 starting at the first directory listed by ddiirrss.
+ With no arguments, ppooppdd removes the top directory from the
+ stack, and changes to the new top directory. Arguments, if sup-
+ plied, have the following meanings:
+ --nn Suppresses the normal change of directory when removing
+ directories from the stack, so that only the stack is ma-
+ nipulated.
+ ++_n Removes the _nth entry counting from the left of the list
+ shown by ddiirrss, starting with zero, from the stack. 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 top element of the directory stack is modified, and the
+ _-_n option was not supplied, ppooppdd uses the ccdd builtin to change
+ to the directory at the top of the stack. If the ccdd fails, ppooppdd
+ returns a non-zero value.
+
+ Otherwise, ppooppdd returns false if an invalid option is encoun-
+ tered, the directory stack is empty, or a non-existent directory
+ stack entry is specified.
+
+ If the ppooppdd command is successful, bash runs ddiirrss to show the
+ final contents of the directory stack, and the return status is
+ 0.
+
+ 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.
+ %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_-
+ _m_e_n_t before quoting it.
+ %%((_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 ar-
+ gument is specified, conversion behaves as if -1 had been
+ given. This is an exception to the usual pprriinnttff behav-
+ ior.
+
+ The %b, %q, and %T directives all use the field width and preci-
+ sion arguments from the format specification and write that many
+ bytes from (or use that wide a field for) the expanded argument,
+ which usually contains more characters than the original.
+
+ 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 ele-
+ ments of the directory stack. 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
+
+ After the stack has been modified, if the --nn option was not sup-
+ plied, ppuusshhdd uses the ccdd builtin to change to the directory at
+ the top of the stack. If the ccdd fails, ppuusshhdd returns a non-zero
+ value.
+
+ Otherwise, if no arguments are supplied, ppuusshhdd returns 0 unless
+ the directory stack is empty. When rotating the directory
+ stack, ppuusshhdd returns 0 unless the directory stack is empty or a
+ non-existent directory stack element is specified.
+
+ If the ppuusshhdd command is successful, bash runs ddiirrss to show the
+ final contents of the directory stack.
+
+ 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 in-
+ valid 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 de-
+ scriptor _f_d supplied as an argument to the --uu option, split into
+ words as described in _b_a_s_h_(_1_) 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 (de-
+ scribed in _b_a_s_h_(_1_) under WWoorrdd SSpplliittttiinngg). The backslash charac-
+ ter (\\) may be used to remove any special meaning for the next
+ character 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 ig-
+ nored.
+ --dd _d_e_l_i_m
+ The first character of _d_e_l_i_m is used to terminate the in-
+ put 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 in _b_a_s_h_(_1_)) 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.
+ --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 re-
+ turns immediately, without trying to read any data. The
+ exit status is 0 if input is available on the specified
+ file descriptor, or the read will return EOF, non-zero
+ otherwise. The exit status 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, without the ending de-
+ limiter but otherwise unmodified, is assigned to the variable
+ RREEPPLLYY. The exit status is zero, unless end-of-file is encoun-
+ tered, rreeaadd times out (in which case the status is greater than
+ 128), a variable assignment error (such as assigning to a read-
+ only variable) occurs, or an invalid file descriptor is supplied
+ 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 ar-
+ rays; the --AA option restricts the variables to associative ar-
+ rays. 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 rree--
+ ttuurrnn is executed by a trap handler, the last command used to de-
+ termine 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 exe-
+ cuted 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 signif-
+ icant 8 bits. The return status is non-zero if rreettuurrnn is sup-
+ plied a non-numeric argument, or is used outside a function and
+ not during execution of a script by .. or ssoouurrccee. Any command
+ associated with the RREETTUURRNN trap is executed before execution re-
+ sumes 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, display the name and value of each shell vari-
+ able in a format that can be reused as input for setting or re-
+ setting the currently-set variables. Read-only variables cannot
+ 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 argu-
+ ments remaining after option processing are treated as values
+ for the positional parameters and are assigned, in order, to $$11,
+ $$22, ...... $$_n. Options, if specified, have the following mean-
+ ings:
+ --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 in _b_a_s_h_(_1_)), 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 fi-
+ nal &&&& 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 in
+ _b_a_s_h_(_1_)), and may cause subshells to exit before execut-
+ ing 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 in _b_a_s_h_(_1_)). All processes
+ run in a separate process group. When a background job
+ completes, the shell prints a line containing its exit
+ status.
+ --nn Read commands but do not execute them. This may be used
+ to check a shell script for syntax errors. This is ig-
+ nored 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 in _b_a_s_h_(_1_)
+ under HHIISSTTOORRYY. This option is on by default in
+ interactive shells.
+ iiggnnoorreeeeooff
+ The effect is as if the shell command ``IG-
+ NOREEOF=10'' had been executed (see SShheellll VVaarrii--
+ aabblleess in _b_a_s_h_(_1_)).
+ 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
+ in _b_a_s_h_(_1_) 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 ap-
+ pear 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.
+ --rr Enable restricted shell mode. This option cannot be un-
+ set once it has been set.
+ --tt Exit after reading and executing one command.
+ --uu Treat unset variables and parameters other than the spe-
+ cial parameters "@" and "*", or array variables sub-
+ scripted with "@" or "*", 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
+ in _b_a_s_h_(_1_)). 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 ex-
+ ecuted 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 op-
+ tions can also be specified as arguments to an invocation of the
+ shell. The current set of options may be found in $$--. The re-
+ turn 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 un-
+ set. _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 param-
+ eters 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 op-
+ tions 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 op-
+ tions, 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 as-
+ sociative array subscripts during arithmetic expression
+ evaluation, while executing builtins that can perform
+ 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 in _b_a_s_h_(_1_)). The shell always post-
+ pones 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 in _b_a_s_h_(_1_) under HHIISS--
+ TTOORRYY.
+ ccoommppaatt3311
+ ccoommppaatt3322
+ ccoommppaatt4400
+ ccoommppaatt4411
+ ccoommppaatt4422
+ ccoommppaatt4433
+ ccoommppaatt4444
+ ccoommppaatt5500
+ These control aspects of the shell's compatibility mode
+ (see SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE in _b_a_s_h_(_1_)).
+
+ 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 ex-
+ pand 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 in _b_a_s_h_(_1_) un-
+ der AALLIIAASSEESS. This option is enabled by default for in-
+ teractive shells.
+
+ eexxttddeebbuugg
+ If set at shell invocation, or in a shell startup file,
+ arrange to execute the debugger profile before the shell
+ starts, identical to the ----ddeebbuuggggeerr option. If set af-
+ ter invocation, behavior 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 in _b_a_s_h_(_1_)).
+
+ 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
+ in _b_a_s_h_(_1_) 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 in _b_a_s_h_(_1_) for a
+ description of FFIIGGNNOORREE. This option is enabled by de-
+ fault.
+
+ gglloobbaasscciiiirraannggeess
+ If set, range expressions used in pattern matching
+ bracket expressions (see PPaatttteerrnn MMaattcchhiinngg in _b_a_s_h_(_1_))
+ 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 bb will not col-
+ late between AA and BB, and upper-case and lower-case
+ ASCII characters will collate together.
+
+ gglloobbsskkiippddoottss
+ If set, pathname expansion will never match the file-
+ names ````..'''' and ````....'''', even if the pattern begins with
+ a ````..''''. This option is enabled by default.
+
+ 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 ex-
+ its, 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 in
+ _b_a_s_h_(_1_)). 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 in _b_a_s_h_(_1_)). 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 at-
+ tribute 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 in _b_a_s_h_(_1_)). 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 at-
+ tempt 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 in _b_a_s_h_(_1_)).
+
+ 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.
+
+ nnooeexxppaanndd__ttrraannssllaattiioonn
+ If set, bbaasshh encloses the translated results of $"..."
+ quoting in single quotes instead of double quotes. If
+ the string is not translated, this has no effect.
+
+ nnuullllgglloobb
+ If set, bbaasshh allows patterns which match no files (see
+ PPaatthhnnaammee EExxppaannssiioonn in _b_a_s_h_(_1_)) to expand to a null
+ string, rather than themselves.
+
+ ppaattssuubb__rreeppllaacceemmeenntt
+ If set, bbaasshh expands occurrences of && in the replacement
+ string of pattern substitution to the text matched by
+ the pattern, as described under PPaarraammeetteerr EExxppaannssiioonn in
+ _b_a_s_h_(_1_). This option is enabled by default.
+
+ pprrooggccoommpp
+ If set, the programmable completion facilities (see PPrroo--
+ ggrraammmmaabbllee CCoommpplleettiioonn in _b_a_s_h_(_1_)) are enabled. This op-
+ tion 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 us-
+ ing the command word resulting from the expanded alias.
+
+ pprroommppttvvaarrss
+ If set, prompt strings undergo parameter expansion, com-
+ mand substitution, arithmetic expansion, and quote re-
+ moval after being expanded as described in PPRROOMMPPTTIINNGG in
+ _b_a_s_h_(_1_). This option is enabled by default.
+
+ rreessttrriicctteedd__sshheellll
+ The shell sets this option if it is started in re-
+ stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL in _b_a_s_h_(_1_)). 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.
+
+ 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.
+
+ vvaarrrreeddiirr__cclloossee
+ If set, the shell automatically closes file descriptors
+ assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see RREE--
+ DDIIRREECCTTIIOONN in _b_a_s_h_(_1_)) instead of leaving them open when
+ the command completes.
+
+ xxppgg__eecchhoo
+ If set, the eecchhoo builtin expands backslash-escape se-
+ quences by default.
+
+ ssuussppeenndd [--ff]
+ Suspend the execution of this shell until it receives a SSIIGGCCOONNTT
+ signal. A login shell, or a shell without job control enabled,
+ cannot be suspended; the --ff option can be used to override this
+ and force the suspension. The return status is 0 unless the
+ shell is a login shell or job control is not enabled and --ff is
+ not supplied.
+
+ 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 in _b_a_s_h_(_1_) under CCOONNDDIITTIIOONNAALL EEXXPPRREESS--
+ SSIIOONNSS. 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 de-
+ pends 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 in
+ _b_a_s_h_(_1_) 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 in _b_a_s_h_(_1_) under CCOONNDDIITTIIOONNAALL EEXXPPRREESS--
+ SSIIOONNSS, the result of the expression is the result of the
+ binary test using the first and third arguments as oper-
+ ands. The --aa and --oo operators are considered binary op-
+ erators when there are three arguments. If the first ar-
+ gument is !!, the value is the negation of the two-argu-
+ ment test using the second and third arguments. If the
+ first argument is exactly (( and the third argument is ex-
+ actly )), the result is the one-argument test of the sec-
+ ond argument. Otherwise, the expression is false.
+ 4 arguments
+ The following conditions are applied in the order listed.
+ If the first argument is !!, the result is the negation of
+ the three-argument expression composed of the remaining
+ arguments. the two-argument test using the second and
+ third arguments. If the first argument is exactly (( and
+ the fourth argument is exactly )), the result is the two-
+ argument test of the second and third arguments. Other-
+ wise, 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 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 re-
+ ceives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a sin-
+ gle _s_i_g_s_p_e_c) or --, each specified signal is reset to its origi-
+ nal 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 com-
+ mands associated with each signal. The --ll option causes the
+ shell to print a list of signal names and their corresponding
+ 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 in
+ _b_a_s_h_(_1_)). 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 finishes 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) op-
+ tion.
+
+ Signals ignored upon entry to the shell cannot be trapped or re-
+ set. 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 re-
+ turned. 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 specified
+ as a command name, or nothing if ``type -t name'' would not re-
+ turn _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 [--HHSS] --aa
+ uulliimmiitt [--HHSS] [--bbccddeeffiikkllmmnnppqqrrssttuuvvxxPPRRTT [_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, re-
+ spectively. 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, if appropriate, are printed before the value. Other op-
+ tions are interpreted as follows:
+ --aa All current limits are reported; no limits are set
+ --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
+ --RR The maximum time a real-time process can run before
+ blocking, in microseconds
+ --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; --RR, which is in microseconds; --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 increments. The return status is 0
+ unless an invalid option or argument 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, a function with that name, if any, is unset.
+ Each unset variable or function is removed from the environment
+ passed to subsequent commands. If any of BBAASSHH__AALLIIAASSEESS,
+ BBAASSHH__AARRGGVV00, BBAASSHH__CCMMDDSS, BBAASSHH__CCOOMMMMAANNDD, BBAASSHH__SSUUBBSSHHEELLLL, BBAASSHHPPIIDD,
+ CCOOMMPP__WWOORRDDBBRREEAAKKSS, DDIIRRSSTTAACCKK, EEPPOOCCHHRREEAALLTTIIMMEE, EEPPOOCCHHSSEECCOONNDDSS, FFUUNNCC--
+ NNAAMMEE, GGRROOUUPPSS, HHIISSTTCCMMDD, LLIINNEENNOO, RRAANNDDOOMM, SSEECCOONNDDSS, or SSRRAANNDDOOMM 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 or may not be unset.
+
+ wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_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, wwaaiitt waits for all running
+ background jobs and the last-executed process substitution, if
+ its process id is the same as $$!!, and the return status is zero.
+ If the --nn option is supplied, wwaaiitt waits for a single job from
+ the list of _i_ds or, if no _i_ds are supplied, any job, to complete
+ and returns its exit status. If none of the supplied arguments
+ is a child of the shell, or if no arguments are supplied and the
+ shell has no unwaited-for children, the exit status is 127. If
+ the --pp option is supplied, the process or job identifier of the
+ job for which the exit status is returned is assigned to the
+ variable _v_a_r_n_a_m_e named by the option argument. The variable
+ will be unset initially, before any assignment. This is useful
+ only when the --nn option is supplied. Supplying the --ff option,
+ when job control is enabled, forces wwaaiitt to wait for _i_d to ter-
+ minate 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. If wwaaiitt is interrupted by a signal,
+ the return status will be greater than 128, as described under
+ SSIIGGNNAALLSS in _b_a_s_h_(_1_). Otherwise, the return status is the exit
+ status of the last process or job waited for.
+
+SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE
+ Bash-4.0 introduced the concept of a _s_h_e_l_l _c_o_m_p_a_t_i_b_i_l_i_t_y _l_e_v_e_l, speci-
+ fied as a set of options to the shopt builtin ( ccoommppaatt3311, ccoommppaatt3322,
+ ccoommppaatt4400, ccoommppaatt4411, and so on). There is only one current compatibil-
+ ity level -- each option is mutually exclusive. The compatibility
+ level is intended to allow users to select behavior from previous ver-
+ sions that is incompatible with newer versions while they migrate
+ scripts to use current features and behavior. It's intended to be a
+ temporary solution.
+
+ This section does not mention behavior that is standard for a particu-
+ lar version (e.g., setting ccoommppaatt3322 means that quoting the rhs of the
+ regexp matching operator quotes special regexp characters in the word,
+ which is default behavior in bash-3.2 and subsequent versions).
+
+ If a user enables, say, ccoommppaatt3322, it may affect the behavior of other
+ compatibility levels up to and including the current compatibility
+ level. The idea is that each compatibility level controls behavior
+ that changed in that version of bbaasshh, but that behavior may have been
+ present in earlier versions. For instance, the change to use locale-
+ based comparisons with the [[[[ command came in bash-4.1, and earlier
+ versions used ASCII-based comparisons, so enabling ccoommppaatt3322 will enable
+ ASCII-based comparisons as well. That granularity may not be suffi-
+ cient for all uses, and as a result users should employ compatibility
+ levels carefully. Read the documentation for a particular feature to
+ find out the current behavior.
+
+ Bash-4.3 introduced a new shell variable: BBAASSHH__CCOOMMPPAATT. The value as-
+ signed to this variable (a decimal version number like 4.2, or an inte-
+ ger corresponding to the ccoommppaatt_N_N option, like 42) determines the com-
+ patibility level.
+
+ Starting with bash-4.4, Bash has begun deprecating older compatibility
+ levels. Eventually, the options will be removed in favor of BBAASSHH__CCOOMM--
+ PPAATT.
+
+ Bash-5.0 is the final version for which there will be an individual
+ shopt option for the previous version. Users should use BBAASSHH__CCOOMMPPAATT on
+ bash-5.0 and later versions.
+
+ The following table describes the behavior changes controlled by each
+ compatibility level setting. The ccoommppaatt_N_N tag is used as shorthand for
+ setting the compatibility level to _N_N using one of the following mecha-
+ nisms. For versions prior to bash-5.0, the compatibility level may be
+ set using the corresponding ccoommppaatt_N_N shopt option. For bash-4.3 and
+ later versions, the BBAASSHH__CCOOMMPPAATT variable is preferred, and it is re-
+ quired for bash-5.1 and later versions.
+
+ ccoommppaatt3311
+ +o quoting the rhs of the [[[[ command's regexp matching oper-
+ ator (=~) has no special effect
+
+ ccoommppaatt3322
+ +o interrupting a command list such as "a ; b ; c" causes
+ the execution of the next command in the list (in
+ bash-4.0 and later versions, the shell acts as if it re-
+ ceived the interrupt, so interrupting one command in a
+ list aborts the execution of the entire list)
+
+ ccoommppaatt4400
+ +o the << and >> operators to the [[[[ command do not consider
+ the current locale when comparing strings; they use ASCII
+ ordering. Bash versions prior to bash-4.1 use ASCII col-
+ lation and _s_t_r_c_m_p(3); bash-4.1 and later use the current
+ locale's collation sequence and _s_t_r_c_o_l_l(3).
+
+ ccoommppaatt4411
+ +o in _p_o_s_i_x mode, ttiimmee may be followed by options and still
+ be recognized as a reserved word (this is POSIX interpre-
+ tation 267)
+ +o in _p_o_s_i_x mode, the parser requires that an even number of
+ single quotes occur in the _w_o_r_d portion of a double-
+ quoted parameter expansion and treats them specially, so
+ that characters within the single quotes are considered
+ quoted (this is POSIX interpretation 221)
+
+ ccoommppaatt4422
+ +o the replacement string in double-quoted pattern substitu-
+ tion does not undergo quote removal, as it does in ver-
+ sions after bash-4.2
+ +o in posix mode, single quotes are considered special when
+ expanding the _w_o_r_d portion of a double-quoted parameter
+ expansion and can be used to quote a closing brace or
+ other special character (this is part of POSIX interpre-
+ tation 221); in later versions, single quotes are not
+ special within double-quoted word expansions
+
+ ccoommppaatt4433
+ +o the shell does not print a warning message if an attempt
+ is made to use a quoted compound assignment as an argu-
+ ment to declare (e.g., declare -a foo='(1 2)'). Later
+ versions warn that this usage is deprecated
+ +o word expansion errors are considered non-fatal errors
+ that cause the current command to fail, even in posix
+ mode (the default behavior is to make them fatal errors
+ that cause the shell to exit)
+ +o when executing a shell function, the loop state
+ (while/until/etc.) is not reset, so bbrreeaakk or ccoonnttiinnuuee in
+ that function will break or continue loops in the calling
+ context. Bash-4.4 and later reset the loop state to pre-
+ vent this
+
+ ccoommppaatt4444
+ +o the shell sets up the values used by BBAASSHH__AARRGGVV and
+ BBAASSHH__AARRGGCC so they can expand to the shell's positional
+ parameters even if extended debugging mode is not enabled
+ +o a subshell inherits loops from its parent context, so
+ bbrreeaakk or ccoonnttiinnuuee will cause the subshell to exit.
+ Bash-5.0 and later reset the loop state to prevent the
+ exit
+ +o variable assignments preceding builtins like eexxppoorrtt and
+ rreeaaddoonnllyy that set attributes continue to affect variables
+ with the same name in the calling environment even if the
+ shell is not in posix mode
+
+ ccoommppaatt5500
+ +o Bash-5.1 changed the way $$RRAANNDDOOMM is generated to intro-
+ duce slightly more randomness. If the shell compatibility
+ level is set to 50 or lower, it reverts to the method
+ from bash-5.0 and previous versions, so seeding the ran-
+ dom number generator by assigning a value to RRAANNDDOOMM will
+ produce the same sequence as in bash-5.0
+ +o If the command hash table is empty, bash versions prior
+ to bash-5.1 printed an informational message to that ef-
+ fect, even when producing output that can be reused as
+ input. Bash-5.1 suppresses that message when the --ll op-
+ tion is supplied.
+
+ ccoommppaatt5511
+ +o The uunnsseett builtin treats attempts to unset array sub-
+ scripts @@ and ** differently depending on whether the ar-
+ ray is indexed or associative, and differently than in
+ previous versions.
+
+SSEEEE AALLSSOO
+ bash(1), sh(1)
+
+
+
+GNU Bash 5.2 2021 November 22 BASH_BUILTINS(1)
diff --git a/doc/builtins.1 b/doc/builtins.1
new file mode 100644
index 0000000..43d92a2
--- /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 "2021 November 22" "GNU Bash 5.2"
+.SH NAME
+:, ., [, 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,
+readarray, 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..1becc2a
--- /dev/null
+++ b/doc/builtins.ps
@@ -0,0 +1,3435 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.22.4
+%%CreationDate: Mon Sep 19 12:02:42 2022
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.22 4
+%%Pages: 27
+%%PageOrder: Ascend
+%%DocumentMedia: Default 612 792 0 () ()
+%%Orientation: Portrait
+%%EndComments
+%%BeginDefaults
+%%PageMedia: Default
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset grops 1.22 4
+%!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 .622(:, ., [, alias, bg, bind, break, b)108 96 R .622
+(uiltin, caller)-.2 F 3.122(,c)-.4 G .622
+(d, command, compgen, complete, compopt, continue, declare,)-3.122 F
+.076(dirs, diso)108 108 R .076(wn, echo, enable, e)-.25 F -.25(va)-.25 G
+.076(l, e).25 F -.15(xe)-.15 G .076(c, e).15 F .077(xit, e)-.15 F .077
+(xport, f)-.15 F .077(alse, fc, fg, getopts, hash, help, history)-.1 F
+2.577(,j)-.65 G .077(obs, kill, let, lo-)-2.577 F .077
+(cal, logout, map\214le, popd, printf, pushd, pwd, read, readarray)108
+120 R 2.577(,r)-.65 G(eadonly)-2.577 E 2.577(,r)-.65 G .076
+(eturn, set, shift, shopt, source, sus-)-2.577 F .279(pend, test, times\
+, 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.33(status of the last command e)144 327.6 R -.15(xe)-.15 G
+1.331(cuted from).15 F F3(\214lename)5.741 E F0 6.331(.I).18 G(f)-6.331
+E F3(\214lename)5.741 E F0 1.331(does not contain a slash, \214le-)4.011
+F .023(names in)144 339.6 R/F4 9/Times-Bold@0 SF -.666(PA)2.523 G(TH)
+-.189 E F0 .022(are used to \214nd the directory containing)2.273 F F3
+(\214lename)4.432 E F0 2.522(,b).18 G(ut)-2.722 E F3(\214lename)2.522 E
+F0 .022(does not need to be)2.522 F -.15(exe)144 351.6 S 3.86
+(cutable. The).15 F 1.36(\214le searched for in)3.86 F F4 -.666(PA)3.86
+G(TH)-.189 E F0 1.361(need not be e)3.61 F -.15(xe)-.15 G 3.861
+(cutable. When).15 F F2(bash)3.861 E F0 1.361(is not in)3.861 F F3
+(posix)3.861 E(mode)144 363.6 Q F0 2.772(,i)C 2.772(ts)-2.772 G .272
+(earches the current directory if no \214le is found in)-2.772 F F4
+-.666(PA)2.771 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .271(If the)
+4.771 F F2(sour)2.771 E(cepath)-.18 E F0 .271(option to the)2.771 F F2
+(shopt)144 375.6 Q F0 -.2(bu)3.659 G 1.159(iltin command is turned of).2
+F 1.159(f, the)-.25 F F4 -.666(PA)3.659 G(TH)-.189 E F0 1.159
+(is not searched.)3.409 F 1.16(If an)6.159 F(y)-.15 E F3(ar)3.66 E
+(guments)-.37 E F0 1.16(are supplied,)3.66 F(the)144 387.6 Q 3.692(yb)
+-.15 G 1.192(ecome the positional parameters when)-3.692 F F3
+(\214lename)3.692 E F0 1.192(is e)3.692 F -.15(xe)-.15 G 3.691
+(cuted. Otherwise).15 F 1.191(the positional pa-)3.691 F .82
+(rameters are unchanged.)144 399.6 R .82(If the)5.82 F F2<ad54>3.32 E F0
+.82(option is enabled,)3.32 F F2(.)3.32 E F0 .82(inherits an)3.32 F 3.32
+(yt)-.15 G .82(rap on)-3.32 F F2(DEB)3.32 E(UG)-.1 E F0 3.32(;i)C 3.32
+(fi)-3.32 G 3.32(ti)-3.32 G 3.32(sn)-3.32 G(ot,)-3.32 E(an)144 411.6 Q
+(y)-.15 E F2(DEB)3.323 E(UG)-.1 E F0 .823(trap string is sa)3.323 F -.15
+(ve)-.2 G 3.322(da).15 G .822(nd restored around the call to)-3.322 F F2
+(.)3.322 E F0 3.322(,a)C(nd)-3.322 E F2(.)3.322 E F0 .822(unsets the)
+3.322 F F2(DEB)3.322 E(UG)-.1 E F0(trap)3.322 E .226(while it e)144
+423.6 R -.15(xe)-.15 G 2.726(cutes. If).15 F F2<ad54>2.727 E F0 .227
+(is not set, and the sourced \214le changes the)2.727 F F2(DEB)2.727 E
+(UG)-.1 E F0 .227(trap, the ne)2.727 F 2.727(wv)-.25 G .227(alue is)
+-2.977 F .891(retained when)144 435.6 R F2(.)3.391 E F0 3.391
+(completes. The)3.391 F .891
+(return status is the status of the last command e)3.391 F .89
+(xited within the)-.15 F(script \(0 if no 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 F2(bind)108 690 Q F3 -.37(re)2.5 G
+(adline-command-line).37 E F0 .238(Display current)144 702 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 .04(macro, or set a)144 714 R F2 -.18(re)2.54 G(adline).18 E F0
+-.25(va)2.54 G 2.54(riable. Each).25 F .039(non-option ar)2.54 F .039
+(gument is a command as it w)-.18 F .039(ould appear in a)-.1 F F2 -.18
+(re)144 726 S(adline).18 E F0 1.471(initialization \214le such as)3.971
+F F3(.inputr)4.201 E(c)-.37 E F0 3.971(,b).31 G 1.472
+(ut each binding or command must be passed as a)-4.171 F(GNU Bash 5.2)72
+768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(1)190.545 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 .574(separate ar)144 84 R .574
+(gument; e.g., '"\\C\255x\\C\255r": re\255read\255init\255\214le'.)-.18
+F .574(Options, if supplied, ha)5.574 F .874 -.15(ve t)-.2 H .574
+(he follo).15 F(wing)-.25 E(meanings:)144 96 Q/F1 10/Times-Bold@0 SF
+<ad6d>144 108 Q/F2 10/Times-Italic@0 SF -.1(ke)2.5 G(ymap)-.2 E F0(Use)
+180 120 Q F2 -.1(ke)5.158 G(ymap)-.2 E F0 2.658(as the k)5.348 F -.15
+(ey)-.1 G 2.658(map to be af).15 F 2.659
+(fected by the subsequent bindings.)-.25 F(Acceptable)7.659 E F2 -.1(ke)
+180 132 S(ymap)-.2 E F0 3.193(names are)5.883 F F2 3.193
+(emacs, emacs\255standar)5.693 F 3.192
+(d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E
+(vi\255command)180 144 Q F0 4.089(,a)C(nd)-4.089 E F2(vi\255insert)4.379
+E F0(.).68 E F2(vi)6.589 E F0 1.589(is equi)4.089 F -.25(va)-.25 G 1.589
+(lent to).25 F F2(vi\255command)4.089 E F0(\()4.089 E F2(vi\255mo)A(ve)
+-.1 E F0 1.59(is also a syn-)4.089 F(on)180 156 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 168 Q F0(List the names of all)180 168
+Q F1 -.18(re)2.5 G(adline).18 E F0(functions.)2.5 E F1<ad70>144 180 Q F0
+(Display)180 180 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 192 Q F0(List current)180 192 Q
+F1 -.18(re)2.5 G(adline).18 E F0(function names and bindings.)2.5 E F1
+<ad73>144 204 Q F0(Display)180 204 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 216 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 228 Q F0(Display)180
+228 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 240 Q F0(Display)180 240 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 252 Q F0(List current)180 252 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 264 Q F2(\214lename)2.5 E F0(Read k)180 276 Q
+.3 -.15(ey b)-.1 H(indings from).15 E F2(\214lename)2.5 E F0(.)A F1
+<ad71>144 288 Q F2(function)2.5 E F0(Query about which k)180 300 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 312 Q F2(function)2.5 E F0
+(Unbind all k)180 324 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 336 Q F2 -.1(ke)2.5 G(yseq)
+-.2 E F0(Remo)180 348 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
+360 Q F2 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F2(shell\255command)A F0(Cause)
+180 372 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 384 Q F0 1.765(is e)4.265 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 396 S(adline).18 E F0 .375(line b)2.874 F(uf)-.2 E .375
+(fer and the)-.25 F F3(READLINE_POINT)2.875 E F0(and)2.625 E F3
+(READLINE_MARK)2.875 E F0 -.25(va)2.625 G .375(riables to the).25 F
+1.186(current location of the insertion point and the sa)180 408 R -.15
+(ve)-.2 G 3.685(di).15 G 1.185(nsertion point \(the mark\), respec-)
+-3.685 F(ti)180 420 Q -.15(ve)-.25 G(ly).15 E 5.377(.T)-.65 G .377
+(he shell assigns an)-5.377 F 2.877(yn)-.15 G .377(umeric ar)-2.877 F
+.377(gument the user supplied to the)-.18 F F3(READLINE_AR-)2.878 E
+(GUMENT)180 432 Q F0 -.25(va)3.605 G 3.855(riable. If).25 F 1.355
+(there w)3.855 F 1.354(as no ar)-.1 F 1.354(gument, that v)-.18 F 1.354
+(ariable is not set.)-.25 F 1.354(If the e)6.354 F -.15(xe)-.15 G(cuted)
+.15 E .343(command changes the v)180 444 R .343(alue of an)-.25 F 2.843
+(yo)-.15 G(f)-2.843 E F3(READLINE_LINE)2.844 E/F4 9/Times-Roman@0 SF(,)A
+F3(READLINE_POINT)2.594 E F4(,)A F0(or)2.594 E F3(READ-)2.844 E
+(LINE_MARK)180 456 Q F4(,)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 468
+Q F0 .83(List all k)180 468 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 480 Q(The return v)
+144 496.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 513.6 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .054
+(Exit from within a)144 525.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 537.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
+549.6 Q F2(n)2.5 E F0(is not greater than or equal to 1.)2.5 E F1 -.2
+(bu)108 566.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 578.4 Q .77
+(ecute the speci\214ed shell b)-.15 F .77(uiltin, passing it)-.2 F F2
+(ar)3.601 E(guments)-.37 E F0 3.271(,a).27 G .771(nd return its e)-3.271
+F .771(xit status.)-.15 F .771(This is useful)5.771 F .616
+(when de\214ning a function whose name is the same as a shell b)144
+590.4 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144
+602.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 614.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 631.2 Q F0([)2.5 E F2 -.2(ex)C(pr)
+.2 E F0(])A .254(Returns the conte)144 643.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 655.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 667.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 679.2 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001
+(This e)144 691.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 703.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 715.2 Q
+(alid position in the call stack.)-.25 E(GNU Bash 5.2)72 768 Q(2021 No)
+136.385 E -.15(ve)-.15 G(mber 22).15 E(2)190.545 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/F1 10/Times-Bold@0 SF(cd)108 84 Q F0([)2.5
+E F1<ad4c>A F0(|[)A F1<ad50>A F0([)2.5 E F1<ad65>A F0(]] [\255@]] [)A/F2
+10/Times-Italic@0 SF(dir)A F0(])A .322(Change the current directory to)
+144 96 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 9
+/Times-Bold@0 SF(HOME)2.821 E F0 .321(shell v)2.571 F .321(ariable is)
+-.25 F .929(the def)144 108 R 3.429(ault. The)-.1 F -.25(va)3.429 G
+(riable).25 E F3(CDP)3.429 E -.855(AT)-.666 G(H).855 E F0 .93
+(de\214nes the search path for the directory containing)3.179 F F2(dir)
+3.78 E F0 3.43(:e).73 G(ach)-3.43 E .407(directory name in)144 120 R F3
+(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 .407(is searched for)2.657 F
+F2(dir)2.907 E F0 5.407(.A)C(lternati)-5.407 E .707 -.15(ve d)-.25 H
+.407(irectory names in).15 F F3(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0
+.406(are sepa-)2.656 F .799(rated by a colon \(:\).)144 132 R 3.299(An)
+5.799 G .799(ull directory name in)-3.299 F F3(CDP)3.299 E -.855(AT)
+-.666 G(H).855 E F0 .799(is the same as the current directory)3.049 F
+3.3(,i)-.65 G(.e.,)-3.3 E -.74(``)144 144 S F1(.).74 E F0 -.74('')C
+5.428(.I).74 G(f)-5.428 E F2(dir)3.278 E F0(be)3.658 E .428
+(gins with a slash \(/\), then)-.15 F F3(CDP)2.928 E -.855(AT)-.666 G(H)
+.855 E F0 .428(is not used.)2.678 F(The)5.428 E F1<ad50>2.927 E F0 .427
+(option causes)2.927 F F1(cd)2.927 E F0 .427(to use the)2.927 F(ph)144
+156 Q .167
+(ysical directory structure by resolving symbolic links while tra)-.05 F
+-.15(ve)-.2 G(rsing).15 E F2(dir)2.668 E F0 .168(and before processing)
+2.668 F 1.225(instances of)144 168 R F2(..)3.725 E F0(in)3.725 E F2(dir)
+3.725 E F0 1.225(\(see also the)3.725 F F1<ad50>3.725 E F0 1.225
+(option to the)3.725 F F1(set)3.725 E F0 -.2(bu)3.725 G 1.225
+(iltin command\); the).2 F F1<ad4c>3.725 E F0 1.225(option forces)3.725
+F .411(symbolic links to be follo)144 180 R .411
+(wed by resolving the link after processing instances of)-.25 F F2(..)
+2.911 E F0(in)2.911 E F2(dir)2.911 E F0 5.411(.I)C(f)-5.411 E F2(..)
+2.912 E F0(ap-)2.912 E .341(pears in)144 192 R F2(dir)2.841 E F0 2.841
+(,i)C 2.841(ti)-2.841 G 2.841(sp)-2.841 G .341(rocessed by remo)-2.841 F
+.341(ving the immediately pre)-.15 F .34(vious pathname component from)
+-.25 F F2(dir)2.84 E F0(,)A .175(back to a slash or the be)144 204 R
+.175(ginning of)-.15 F F2(dir)2.675 E F0 5.175(.I)C 2.675(ft)-5.175 G
+(he)-2.675 E F1<ad65>2.676 E F0 .176(option is supplied with)2.676 F F1
+<ad50>2.676 E F0 2.676(,a)C .176(nd the current w)-2.676 F(ork-)-.1 E
+.341(ing directory cannot be successfully determined after a successful\
+ directory change,)144 216 R F1(cd)2.84 E F0 .34(will return)2.84 F .356
+(an unsuccessful status.)144 228 R .356(On systems that support it, the)
+5.356 F F1<ad40>2.857 E F0 .357(option presents the e)2.857 F .357
+(xtended attrib)-.15 F(utes)-.2 E .07
+(associated with a \214le as a directory)144 240 R 5.07(.A)-.65 G 2.569
+(na)-5.07 G -.18(rg)-2.569 G .069(ument of).18 F F1<ad>2.569 E F0 .069
+(is con)2.569 F -.15(ve)-.4 G .069(rted to).15 F F3($OLDPWD)2.569 E F0
+.069(before the direc-)2.319 F .306(tory change is attempted.)144 252 R
+.306(If a non-empty directory name from)5.306 F F3(CDP)2.806 E -.855(AT)
+-.666 G(H).855 E F0 .306(is used, or if)2.556 F F1<ad>2.807 E F0 .307
+(is the \214rst)2.807 F(ar)144 264 Q .116(gument, and the directory cha\
+nge is successful, the absolute pathname of the ne)-.18 F 2.615(ww)-.25
+G .115(orking direc-)-2.715 F .15
+(tory is written to the standard output.)144 276 R .15
+(If the directory change is successful,)5.15 F F1(cd)2.65 E F0 .15
+(sets the v)2.65 F .15(alue of the)-.25 F F1(PWD)144 288 Q F0(en)2.958 E
+.458(vironment v)-.4 F .458(ariable to the ne)-.25 F 2.958(wd)-.25 G
+.458(irectory name, and sets the)-2.958 F F1(OLDPWD)2.957 E F0(en)2.957
+E .457(vironment v)-.4 F(ari-)-.25 E .125(able to the v)144 300 R .125
+(alue of the current w)-.25 F .126(orking directory before the change.)
+-.1 F .126(The return v)5.126 F .126(alue is true if the)-.25 F
+(directory w)144 312 Q(as successfully changed; f)-.1 E(alse otherwise.)
+-.1 E F1(command)108 328.8 Q F0([)2.5 E F1(\255pVv)A F0(])A F2(command)
+2.5 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(Run)144 340.8 Q F2
+(command)2.765 E F0(with)3.335 E F2(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 352.8 R
+F3 -.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 F1<ad70>3.002 E F0 .502(option is gi)
+3.002 F -.15(ve)-.25 G .502(n, the search for).15 F F2(command)3.202 E
+F0(is)3.772 E .4(performed using a def)144 364.8 R .4(ault v)-.1 F .4
+(alue for)-.25 F F3 -.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 376.8 R F1<ad56>2.674 E F0(or)2.674 E F1
+<ad76>2.674 E F0 .175(option is supplied, a description of)2.674 F F2
+(command)2.875 E F0 .175(is printed.)3.445 F(The)5.175 E F1<ad76>2.675 E
+F0 .175(option causes)2.675 F 3.318(as)144 388.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 F2(command)3.617 E F0 .817(to be displayed; the)4.087
+F F1<ad56>144 400.8 Q F0 .249(option produces a more v)2.749 F .249
+(erbose description.)-.15 F .249(If the)5.249 F F1<ad56>2.749 E F0(or)
+2.749 E F1<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 412.8 R F2(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 F2
+(command)144.2 424.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 F1(command)4.099 E F0 -.2(bu)144 436.8 S
+(iltin is the e).2 E(xit status of)-.15 E F2(command)2.7 E F0(.).77 E F1
+(compgen)108 453.6 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(wor)-2.5 E(d)
+-.37 E F0(])A .013(Generate possible completion matches for)144 465.6 R
+F2(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F2(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 477.6 R F1(complete)3.481 E F0 -.2(bu)3.481 G .981
+(iltin with the e).2 F .981(xception of)-.15 F F1<ad70>3.481 E F0(and)
+3.481 E F1<ad72>3.481 E F0 3.481(,a)C .982(nd write the matches to the)
+-3.481 F .131(standard output.)144 489.6 R .131(When using the)5.131 F
+F1<ad46>2.631 E F0(or)2.631 E F1<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 501.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 525.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
+537.6 R(If)5.02 E F2(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only)
+2.52 F(those completions matching)144 549.6 Q F2(wor)2.5 E(d)-.37 E F0
+(will be displayed.)2.5 E(The return v)144 573.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 F1
+(complete)108 590.4 Q F0([)2.5 E F1(\255abcdefgjksuv)A F0 2.5(][)C F1
+<ad6f>-2.5 E F2(comp-option)2.5 E F0 2.5(][)C F1(\255DEI)-2.5 E F0 2.5
+(][)C F1<ad41>-2.5 E F2(action)2.5 E F0 2.5(][)C F1<ad47>-2.5 E F2
+(globpat)2.5 E F0 2.5(][)C F1<ad57>-2.5 E F2(wor)2.5 E(dlist)-.37 E F0
+(])A([)144 602.4 Q F1<ad46>A F2(function)2.5 E F0 2.5(][)C F1<ad43>-2.5
+E F2(command)2.5 E F0 2.5(][)C F1<ad58>-2.5 E F2(\214lterpat)2.5 E F0
+2.5(][)C F1<ad50>-2.5 E F2(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F1<ad53>
+-2.5 E F2(suf)2.5 E<8c78>-.18 E F0(])A F2(name)2.5 E F0([)2.5 E F2
+(name ...)A F0(])A F1(complete \255pr)108 614.4 Q F0([)2.5 E F1(\255DEI)
+A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E .633(Specify ho)144 626.4 R
+3.133(wa)-.25 G -.18(rg)-3.133 G .633(uments to each).18 F F2(name)3.133
+E F0 .633(should be completed.)3.133 F .634(If the)5.634 F F1<ad70>3.134
+E F0 .634(option is supplied, or if no)3.134 F .14
+(options are supplied, e)144 638.4 R .139
+(xisting completion speci\214cations are printed in a w)-.15 F .139
+(ay that allo)-.1 F .139(ws them to be)-.25 F .31(reused as input.)144
+650.4 R(The)5.31 E F1<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 F2(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 F2
+(name)2.81 E F0(s)A 1.208
+(are supplied, all completion speci\214cations.)144 662.4 R(The)6.208 E
+F1<ad44>3.708 E F0 1.207(option indicates that other supplied options)
+3.707 F .5(and actions should apply to the `)144 674.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
+686.4 S .955(ommand for which no completion has pre)-3.455 F .955
+(viously been de\214ned.)-.25 F(The)5.955 E F1<ad45>3.455 E F0 .955
+(option indicates that)3.455 F .876
+(other supplied options and actions should apply to `)144 698.4 R
+(`empty')-.74 E 3.376('c)-.74 G .876(ommand completion; that is, com-)
+-3.376 F .448(pletion attempted on a blank line.)144 710.4 R(The)5.447 E
+F1<ad49>2.947 E F0 .447
+(option indicates that other supplied options and actions)2.947 F 1.149
+(should apply to completion on the initial non-assignment w)144 722.4 R
+1.15(ord on the line, or after a command)-.1 F(GNU Bash 5.2)72 768 Q
+(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(3)190.545 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 .431(delimiter such as)144 84 R/F1 10
+/Times-Bold@0 SF(;)2.931 E F0(or)2.931 E F1(|)2.931 E F0 2.931(,w)C .431
+(hich is usually command name completion.)-2.931 F .43
+(If multiple options are sup-)5.43 F .707(plied, the)144 96 R F1<ad44>
+3.207 E F0 .707(option tak)3.207 F .707(es precedence o)-.1 F -.15(ve)
+-.15 G(r).15 E F1<ad45>3.208 E F0 3.208(,a)C .708(nd both tak)-3.208 F
+3.208(ep)-.1 G .708(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F1<ad49>
+3.208 E F0 5.708(.I)C 3.208(fa)-5.708 G 1.008 -.15(ny o)-3.208 H(f).15 E
+F1<ad44>3.208 E F0(,)A F1<ad45>144 108 Q F0 2.604(,o)C(r)-2.604 E F1
+<ad49>2.604 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15 G(ther)
+-2.603 E/F2 10/Times-Italic@0 SF(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 120 Q .152
+(The process of applying these completion speci\214cations when w)144
+144 R .153(ord completion is attempted is de-)-.1 F(scribed in)144 156 Q
+F2(bash\(1\))2.5 E F0(.)A .556(Other options, if speci\214ed, ha)144 180
+R .856 -.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.055 E F0(,)A F1
+<ad57>3.055 E F0 3.055(,a)C(nd)-3.055 E F1<ad58>3.055 E F0 .722
+(options \(and, if necessary)144 192 R 3.222(,t)-.65 G(he)-3.222 E F1
+<ad50>3.222 E F0(and)3.222 E F1<ad53>3.222 E F0 .723
+(options\) should be quoted to protect them from e)3.222 F(xpan-)-.15 E
+(sion before the)144 204 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 216 Q F2
+(comp-option)2.5 E F0(The)184 228 Q F2(comp-option)2.791 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 240 Q F2
+(comp-option)5 E F0(may be one of:)2.5 E F1(bashdefault)184 252 Q F0
+.281(Perform the rest of the def)224 264 R(ault)-.1 E F1(bash)2.781 E F0
+.281(completions if the compspec generates no)2.781 F(matches.)224 276 Q
+F1(default)184 288 Q F0 2.876(Use readline')224 288 R 5.376(sd)-.55 G
+(ef)-5.376 E 2.875
+(ault \214lename completion if the compspec generates no)-.1 F(matches.)
+224 300 Q F1(dir)184 312 Q(names)-.15 E F0(Perform directory name compl\
+etion if the compspec generates no matches.)224 324 Q F1(\214lenames)184
+336 Q F0 -.7(Te)224 348 S .137(ll readline that the compspec generates \
+\214lenames, so it can perform an).7 F 2.637<798c>-.15 G(le-)-2.637 E
+.134(name\255speci\214c processing \(lik)224 360 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 372 R .45
+(Intended to be used with shell)5.45 F(functions.)224 384 Q F1(noquote)
+184 396 Q F0 -.7(Te)224 396 S .814
+(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F
+3.314(ya)-.15 G .814(re \214lenames \(quoting)-3.314 F
+(\214lenames is the def)224 408 Q(ault\).)-.1 E F1(nosort)184 420 Q F0
+-.7(Te)224 420 S(ll readline not to sort the list of possible completio\
+ns alphabetically).7 E(.)-.65 E F1(nospace)184 432 Q F0 -.7(Te)224 432 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 444 Q F1
+(plusdirs)184 456 Q F0 1.985(After an)224 456 R 4.485(ym)-.15 G 1.985
+(atches de\214ned by the compspec are generated, directory name)-4.485 F
+.583(completion is attempted and an)224 468 R 3.084(ym)-.15 G .584
+(atches are added to the results of the other)-3.084 F(actions.)224 480
+Q F1<ad41>144 492 Q F2(action)2.5 E F0(The)184 504 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
+516 Q F0(Alias names.)224 516 Q(May also be speci\214ed as)5 E F1<ad61>
+2.5 E F0(.)A F1(arrayv)184 528 Q(ar)-.1 E F0(Array v)224 540 Q
+(ariable names.)-.25 E F1(binding)184 552 Q(Readline)224 552 Q F0 -.1
+(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 564 S(iltin)
+.2 E F0(Names of shell b)224 564 Q(uiltin commands.)-.2 E
+(May also be speci\214ed as)5 E F1<ad62>2.5 E F0(.)A F1(command)184 576
+Q F0(Command names.)224 588 Q(May also be speci\214ed as)5 E F1<ad63>2.5
+E F0(.)A F1(dir)184 600 Q(ectory)-.18 E F0(Directory names.)224 612 Q
+(May also be speci\214ed as)5 E F1<ad64>2.5 E F0(.)A F1(disabled)184 624
+Q F0(Names of disabled shell b)224 636 Q(uiltins.)-.2 E F1(enabled)184
+648 Q F0(Names of enabled shell b)224 648 Q(uiltins.)-.2 E F1(export)184
+660 Q F0(Names of e)224 660 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
+672 Q F0(File names.)224 672 Q(May also be speci\214ed as)5 E F1<ad66>
+2.5 E F0(.)A F1(function)184 684 Q F0(Names of shell functions.)224 696
+Q F1(gr)184 708 Q(oup)-.18 E F0(Group names.)224 708 Q
+(May also be speci\214ed as)5 E F1<ad67>2.5 E F0(.)A(GNU Bash 5.2)72 768
+Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(4)190.545 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(helptopic)184 84 Q F0
+(Help topics as accepted by the)224 96 Q F1(help)2.5 E F0 -.2(bu)2.5 G
+(iltin.).2 E F1(hostname)184 108 Q F0(Hostnames, as tak)224 120 Q
+(en from the \214le speci\214ed by the)-.1 E/F2 9/Times-Bold@0 SF
+(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 132 Q F0
+(Job names, if job control is acti)224 132 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 144 S
+(yw).1 E(ord)-.1 E F0(Shell reserv)224 156 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
+168 Q F0(Names of running jobs, if job control is acti)224 168 Q -.15
+(ve)-.25 G(.).15 E F1(ser)184 180 Q(vice)-.1 E F0(Service names.)224 180
+Q(May also be speci\214ed as)5 E F1<ad73>2.5 E F0(.)A F1(setopt)184 192
+Q F0 -1.11(Va)224 192 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 204 Q F0(Shell option names as accepted by the)224 204 Q F1
+(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 216 Q F0
+(Signal names.)224 216 Q F1(stopped)184 228 Q F0
+(Names of stopped jobs, if job control is acti)224 228 Q -.15(ve)-.25 G
+(.).15 E F1(user)184 240 Q F0(User names.)224 240 Q
+(May also be speci\214ed as)5 E F1<ad75>2.5 E F0(.)A F1 -.1(va)184 252 S
+(riable).1 E F0(Names of all shell v)224 252 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 264 Q/F3
+10/Times-Italic@0 SF(command)2.5 E(command)184 276 Q F0 1.056(is e)3.556
+F -.15(xe)-.15 G 1.056(cuted in a subshell en).15 F 1.056
+(vironment, and its output is used as the possible)-.4 F 2.5
+(completions. Ar)184 288 R(guments are passed as with the)-.18 E F1
+<ad46>2.5 E F0(option.)2.5 E F1<ad46>144 300 Q F3(function)2.5 E F0 .113
+(The shell function)184 312 R F3(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 .114(the func-)2.614 F .817(tion is e)184 324 R
+-.15(xe)-.15 G .817(cuted, the \214rst ar).15 F .817(gument \()-.18 F F1
+($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .816
+(he name of the command whose ar)-3.316 F(guments)-.18 E 1.407
+(are being completed, the second ar)184 336 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 .104(third ar)184 348 R .104
+(gument \()-.18 F F1($3)A F0 2.604(\)i)C 2.604(st)-2.604 G .104(he w)
+-2.604 F .104(ord preceding the w)-.1 F .103
+(ord being completed on the current com-)-.1 F .101(mand line.)184 360 R
+.101(When it \214nishes, the possible completions are retrie)5.101 F
+-.15(ve)-.25 G 2.602(df).15 G .102(rom the v)-2.602 F .102(alue of the)
+-.25 F F2(COMPREPL)184 372 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E
+F1<ad47>144 384 Q F3(globpat)2.5 E F0 1.008(The pathname e)184 396 R
+1.008(xpansion pattern)-.15 F F3(globpat)3.507 E F0 1.007(is e)3.507 F
+1.007(xpanded to generate the possible comple-)-.15 F(tions.)184 408 Q
+F1<ad50>144 420 Q F3(pr)2.5 E(e\214x)-.37 E(pr)184 432 Q(e\214x)-.37 E
+F0 .534(is added at the be)3.034 F .534
+(ginning of each possible completion after all other options ha)-.15 F
+-.15(ve)-.2 G(been applied.)184 444 Q F1<ad53>144 456 Q F3(suf)2.5 E
+<8c78>-.18 E(suf)184 456 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 468 Q F3(wor)2.5 E
+(dlist)-.37 E F0(The)184 480 Q F3(wor)3.64 E(dlist)-.37 E F0 1.14
+(is split using the characters in the)3.64 F F2(IFS)3.64 E F0 1.139
+(special v)3.39 F 1.139(ariable as delimiters, and)-.25 F .98
+(each resultant w)184 492 R .98(ord is e)-.1 F 3.481(xpanded. Shell)-.15
+F .981(quoting is honored within)3.481 F F3(wor)3.481 E(dlist)-.37 E F0
+3.481(,i)C 3.481(no)-3.481 G .981(rder to)-3.481 F(pro)184 504 Q .766
+(vide a mechanism for the w)-.15 F .765
+(ords to contain shell metacharacters or characters in the)-.1 F -.25
+(va)184 516 S 1.964(lue of).25 F F2(IFS)4.464 E/F4 9/Times-Roman@0 SF(.)
+A F0 1.964
+(The possible completions are the members of the resultant list which)
+6.464 F(match the w)184 528 Q(ord being completed.)-.1 E F1<ad58>144 540
+Q F3(\214lterpat)2.5 E(\214lterpat)184 552 Q F0 .456
+(is a pattern as used for pathname e)2.956 F 2.956(xpansion. It)-.15 F
+.455(is applied to the list of possible)2.956 F 1.596
+(completions generated by the preceding options and ar)184 564 R 1.596
+(guments, and each completion)-.18 F(matching)184 576 Q F3(\214lterpat)
+3.205 E F0 .705(is remo)3.205 F -.15(ve)-.15 G 3.205(df).15 G .704
+(rom the list.)-3.205 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)3.204 E F0
+(in)3.204 E F3(\214lterpat)3.204 E F0(ne)3.204 E -.05(ga)-.15 G .704
+(tes the pattern;).05 F(in this case, an)184 588 Q 2.5(yc)-.15 G
+(ompletion not matching)-2.5 E F3(\214lterpat)2.5 E F0(is remo)2.5 E
+-.15(ve)-.15 G(d.).15 E .466(The return v)144 604.8 R .466
+(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.967 E F0
+(or)2.967 E F1<ad72>2.967 E F0 .467(is sup-)2.967 F 1.362
+(plied without a)144 616.8 R F3(name)3.862 E F0(ar)3.862 E 1.361
+(gument, an attempt is made to remo)-.18 F 1.661 -.15(ve a c)-.15 H
+1.361(ompletion speci\214cation for a).15 F F3(name)144 628.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 645.6 Q F0([)2.5 E F1<ad6f>A F3(option)2.5 E F0 2.5(][)C
+F1(\255DEI)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F3(option)2.5 E F0 2.5(][)C
+F3(name)-2.5 E F0(])A .447(Modify completion options for each)144 657.6
+R F3(name)2.947 E F0 .447(according to the)2.947 F F3(option)2.947 E F0
+.447(s, or for the currently-e)B -.15(xe)-.15 G(cuting).15 E .726
+(completion if no)144 669.6 R F3(name)3.226 E F0 3.226(sa)C .726
+(re supplied.)-3.226 F .725(If no)5.725 F F3(option)3.225 E F0 3.225(sa)
+C .725(re gi)-3.225 F -.15(ve)-.25 G .725
+(n, display the completion options for).15 F(each)144 681.6 Q F3(name)
+3.223 E F0 .723(or the current completion.)3.223 F .724(The possible v)
+5.724 F .724(alues of)-.25 F F3(option)3.224 E F0 .724(are those v)3.224
+F .724(alid for the)-.25 F F1(com-)3.224 E(plete)144 693.6 Q F0 -.2(bu)
+2.678 G .178(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.227(the `)144 705.6 R(`def)-.74 E(ault')-.1 E 3.727('c)-.74 G 1.228(o\
+mmand completion; that is, completion attempted on a command for which \
+no)-3.727 F 2.039(completion has pre)144 717.6 R 2.039
+(viously been de\214ned.)-.25 F(The)7.038 E F1<ad45>4.538 E F0 2.038
+(option indicates that other supplied options)4.538 F 1.538
+(should apply to `)144 729.6 R(`empty')-.74 E 4.038('c)-.74 G 1.539
+(ommand completion; that is, completion attempted on a blank line.)
+-4.038 F(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22)
+.15 E(5)190.545 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(The)144 84 Q/F1 10/Times-Bold@0 SF<ad49>
+3.02 E F0 .52(option indicates that other supplied options should apply\
+ to completion on the initial non-)3.02 F .867(assignment w)144 96 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.368(,w)C .868
+(hich is usually com-)-3.368 F(mand name completion.)144 108 Q .432
+(The return v)144 132 R .431(alue is true unless an in)-.25 F -.25(va)
+-.4 G .431(lid option is supplied, an attempt is made to modify the op-)
+.25 F(tions for a)144 144 Q/F2 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 F1(continue)108 160.8 Q F0([)
+2.5 E F2(n)A F0(])A .85(Resume the ne)144 172.8 R .85
+(xt iteration of the enclosing)-.15 F F1 -.25(fo)3.35 G(r).25 E F0(,)A
+F1(while)3.351 E F0(,)A F1(until)3.351 E F0 3.351(,o)C(r)-3.351 E F1
+(select)3.351 E F0 3.351(loop. If)3.351 F F2(n)3.711 E F0 .851
+(is speci\214ed, re-)3.591 F .204(sume at the)144 184.8 R F2(n)2.704 E
+F0 .204(th enclosing loop.)B F2(n)5.564 E F0 .204(must be)2.944 F/F3 10
+/Symbol SF<b3>2.704 E F0 2.703(1. If)2.704 F F2(n)3.063 E F0 .203
+(is greater than the number of enclosing loops,)2.943 F 1.183
+(the last enclosing loop \(the `)144 196.8 R(`top-le)-.74 E -.15(ve)-.25
+G(l').15 E 3.683('l)-.74 G 1.183(oop\) is resumed.)-3.683 F 1.184
+(The return v)6.184 F 1.184(alue is 0 unless)-.25 F F2(n)3.684 E F0
+1.184(is not)3.684 F(greater than or equal to 1.)144 208.8 Q F1(declar)
+108 225.6 Q(e)-.18 E F0([)2.5 E F1(\255aAfFgiIlnrtux)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 F1(typeset)108 237.6 Q F0([)2.5 E F1(\255aAfFgiIlnrtux)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.265(Declare v)144 249.6 R 1.265
+(ariables and/or gi)-.25 F 1.565 -.15(ve t)-.25 H 1.265(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.764(nt).15 G 1.264(hen display the v)
+-3.764 F 1.264(alues of)-.25 F -.25(va)144 261.6 S 3.46(riables. The).25
+F F1<ad70>3.46 E F0 .96(option will display the attrib)3.46 F .96
+(utes and v)-.2 F .96(alues of each)-.25 F F2(name)3.82 E F0 5.96(.W).18
+G(hen)-5.96 E F1<ad70>3.46 E F0 .96(is used)3.46 F(with)144 273.6 Q F2
+(name)2.775 E F0(ar)2.775 E .275
+(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 .274(re ignored.)-2.775 F(When)
+5.274 E F1<ad70>2.774 E F0 .274(is supplied)2.774 F(without)144 285.6 Q
+F2(name)3.789 E F0(ar)3.789 E 1.289(guments, it will display the attrib)
+-.18 F 1.289(utes and v)-.2 F 1.29(alues of all v)-.25 F 1.29
+(ariables ha)-.25 F 1.29(ving the at-)-.2 F(trib)144 297.6 Q .38
+(utes speci\214ed by the additional options.)-.2 F .38
+(If no other options are supplied with)5.38 F F1<ad70>2.88 E F0(,)A F1
+(declar)2.88 E(e)-.18 E F0(will)2.88 E 1.106(display the attrib)144
+309.6 R 1.106(utes and v)-.2 F 1.106(alues of all shell v)-.25 F 3.606
+(ariables. The)-.25 F F1<ad66>3.606 E F0 1.107
+(option will restrict the display to)3.606 F .3(shell functions.)144
+321.6 R(The)5.3 E F1<ad46>2.8 E F0 .299(option inhibits the display of \
+function de\214nitions; only the function name)2.8 F 1.54(and attrib)144
+333.6 R 1.54(utes are printed.)-.2 F 1.54(If the)6.54 F F1(extdeb)4.04 E
+(ug)-.2 E F0 1.54(shell option is enabled using)4.04 F F1(shopt)4.04 E
+F0 4.04(,t)C 1.54(he source \214le)-4.04 F .648
+(name and line number where each)144 345.6 R F2(name)3.148 E F0 .648
+(is de\214ned are displayed as well.)3.148 F(The)5.648 E F1<ad46>3.148 E
+F0 .648(option implies)3.148 F F1<ad66>144 357.6 Q F0 5.836(.T)C(he)
+-5.836 E F1<ad67>3.336 E F0 .836(option forces v)3.336 F .837
+(ariables to be created or modi\214ed at the global scope, e)-.25 F -.15
+(ve)-.25 G 3.337(nw).15 G(hen)-3.337 E F1(de-)3.337 E(clar)144 369.6 Q
+(e)-.18 E F0 .819(is e)3.319 F -.15(xe)-.15 G .819
+(cuted in a shell function.).15 F .818
+(It is ignored in all other cases.)5.818 F(The)5.818 E F1<ad49>3.318 E
+F0 .818(option causes local)3.318 F -.25(va)144 381.6 S .693
+(riables to inherit the attrib).25 F .693(utes \(e)-.2 F .693(xcept the)
+-.15 F F2(namer)3.194 E(ef)-.37 E F0(attrib)3.194 E .694(ute\) and v)-.2
+F .694(alue of an)-.25 F 3.194(ye)-.15 G .694(xisting v)-3.344 F
+(ariable)-.25 E .82(with the same)144 393.6 R F2(name)3.32 E F0 .82
+(at a surrounding scope.)3.32 F .82(If there is no e)5.82 F .82
+(xisting v)-.15 F .82(ariable, the local v)-.25 F .82(ariable is)-.25 F
+.379(initially unset.)144 405.6 R .379(The follo)5.379 F .379
+(wing options can be used to restrict output to v)-.25 F .38
+(ariables with the speci\214ed)-.25 F(attrib)144 417.6 Q(ute or to gi)
+-.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F1<ad61>144
+429.6 Q F0(Each)180 429.6 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(in)2.5 E F2(bash\(1\))2.5 E F0(\).)A F1<ad41>144 441.6 Q F0(Each)180
+441.6 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(in)2.5 E F2
+(bash\(1\))2.5 E F0(\).)A F1<ad66>144 453.6 Q F0
+(Use function names only)180 453.6 Q(.)-.65 E F1<ad69>144 465.6 Q F0
+.558(The v)180 465.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 .557(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION)
+180 477.6 Q F0(in)2.25 E F2(bash\(1\))2.5 E F0 2.5(\)i)C 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 489.6 Q F0 .909(When the v)180 489.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 .91(rted to lo).15 F(wer)
+-.25 E(-)-.2 E 2.5(case. The)180 501.6 R(upper)2.5 E(-case attrib)-.2 E
+(ute is disabled.)-.2 E F1<ad6e>144 513.6 Q F0(Gi)180 513.6 Q 1.62 -.15
+(ve e)-.25 H(ach).15 E F2(name)3.82 E F0(the)3.82 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 .477
+(That other v)180 525.6 R .478(ariable is de\214ned by the v)-.25 F .478
+(alue of)-.25 F F2(name)2.978 E F0 5.478(.A)C .478
+(ll references, assignments, and at-)-5.478 F(trib)180 537.6 Q .782
+(ute modi\214cations to)-.2 F F2(name)3.282 E F0 3.282(,e)C .782
+(xcept those using or changing the)-3.432 F F1<ad6e>3.281 E F0(attrib)
+3.281 E .781(ute itself, are)-.2 F .808(performed on the v)180 549.6 R
+.808(ariable referenced by)-.25 F F2(name)3.308 E F0 1.908 -.55('s v)D
+3.308(alue. The).3 F .809(nameref attrib)3.309 F .809(ute cannot be)-.2
+F(applied to array v)180 561.6 Q(ariables.)-.25 E F1<ad72>144 573.6 Q F0
+(Mak)180 573.6 Q(e)-.1 E F2(name)3.655 E F0 3.655(sr)C(eadonly)-3.655 E
+6.154(.T)-.65 G 1.154(hese names cannot then be assigned v)-6.154 F
+1.154(alues by subsequent as-)-.25 F(signment statements or unset.)180
+585.6 Q F1<ad74>144 597.6 Q F0(Gi)180 597.6 Q .729 -.15(ve e)-.25 H(ach)
+.15 E F2(name)2.929 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.93 E F1(RETURN)2.93 E F0
+(traps from the calling shell.)180 609.6 Q(The trace attrib)5 E
+(ute has no special meaning for v)-.2 E(ariables.)-.25 E F1<ad75>144
+621.6 Q F0 .91(When the v)180 621.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 .909(rted to upper).15 F(-)-.2 E 2.5(case. The)180 633.6
+R(lo)2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F1<ad78>
+144 645.6 Q F0(Mark)180 645.6 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 .143
+(Using `+' instead of `\255' turns of)144 662.4 R 2.643(ft)-.25 G .143
+(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .144
+(xceptions that)-.15 F F1(+a)2.644 E F0(and)2.644 E F1(+A)2.644 E F0
+.144(may not)2.644 F .579(be used to destro)144 674.4 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 .578(used in a)3.078 F(function,)144 686.4 Q F1
+(declar)3.543 E(e)-.18 E F0(and)3.543 E F1(typeset)3.543 E F0(mak)3.543
+E 3.543(ee)-.1 G(ach)-3.543 E F2(name)3.543 E F0 1.043
+(local, as with the)3.543 F F1(local)3.544 E F0 1.044
+(command, unless the)3.544 F F1<ad67>3.544 E F0 1.205
+(option is supplied.)144 698.4 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 710.4 Q F0 5.217(.W)C .217
+(hen using)-5.217 F F1<ad61>2.717 E F0(or)2.717 E F1<ad41>2.717 E F0
+.217(and the compound assignment syntax to create array v)2.717 F .218
+(ariables, addi-)-.25 F .882(tional attrib)144 722.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(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15
+(ve)-.15 G(mber 22).15 E(6)190.545 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(in)144 84 Q -.25(va)-.4 G .365(lid option \
+is encountered, an attempt is made to de\214ne a function using).25 F/F1
+10/Courier@0 SF .366(\255f foo=bar)2.866 F F0 2.866(,a)C 2.866(na)-2.866
+G(t-)-2.866 E .549(tempt is made to assign a v)144 96 R .549
+(alue to a readonly v)-.25 F .548
+(ariable, an attempt is made to assign a v)-.25 F .548(alue to an)-.25 F
+.391(array v)144 108 R .391
+(ariable without using the compound assignment syntax \(see)-.25 F/F2 10
+/Times-Bold@0 SF(Arrays)2.892 E F0(in)2.892 E/F3 10/Times-Italic@0 SF
+(bash\(1\))2.892 E F0 .392(\), one of the)B F3(names)144 120 Q F0 .359
+(is not a v)2.859 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.212(only v)144 132 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.213(ariable, or an attempt is)
+-.25 F(made to display a non-e)144 144 Q(xistent function with)-.15 E F2
+<ad66>2.5 E F0(.)A F2(dirs [\255clpv] [+)108 160.8 Q F3(n)A F2 2.5(][)C
+<ad>-2.5 E F3(n)A F2(])A F0 -.4(Wi)144 172.8 S .329
+(thout options, displays the list of currently remembered directories.)
+.4 F .328(The def)5.328 F .328(ault display is on a)-.1 F 1.238
+(single line with directory names separated by spaces.)144 184.8 R 1.238
+(Directories are added to the list with the)6.238 F F2(pushd)144 196.8 Q
+F0 .928(command; the)3.428 F F2(popd)3.428 E F0 .928(command remo)3.428
+F -.15(ve)-.15 G 3.428(se).15 G .928(ntries from the list.)-3.428 F .928
+(The current directory is al-)5.928 F -.1(wa)144 208.8 S
+(ys the \214rst directory in the stack.).1 E F2<ad63>144 220.8 Q F0
+(Clears the directory stack by deleting all of the entries.)180 220.8 Q
+F2<ad6c>144 232.8 Q F0 .881
+(Produces a listing using full pathnames; the def)180 232.8 R .882
+(ault listing format uses a tilde to denote)-.1 F(the home directory)180
+244.8 Q(.)-.65 E F2<ad70>144 256.8 Q F0
+(Print the directory stack with one entry per line.)180 256.8 Q F2<ad76>
+144 268.8 Q F0 .273(Print the directory stack with one entry per line, \
+pre\214xing each entry with its inde)180 268.8 R 2.772(xi)-.15 G 2.772
+(nt)-2.772 G(he)-2.772 E(stack.)180 280.8 Q F2(+)144 292.8 Q F3(n)A F0
+1.564(Displays the)180 292.8 R F3(n)4.064 E F0 1.565
+(th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F2
+(dirs)4.065 E F0 1.565(when in)4.065 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
+(without options, starting with zero.)180 304.8 Q F2<ad>144 316.8 Q F3
+(n)A F0 1.194(Displays the)180 316.8 R F3(n)3.694 E F0 1.194
+(th entry counting from the right of the list sho)B 1.194(wn by)-.25 F
+F2(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 328.8 Q .257(The return v)144
+345.6 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258
+(lid option is supplied or).25 F F3(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 357.6 Q F2(diso)108 374.4 Q(wn)-.1 E F0([)2.5 E F2
+(\255ar)A F0 2.5(][)C F2<ad68>-2.5 E F0 2.5(][)C F3(jobspec)-2.5 E F0
+(... |)2.5 E F3(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 386.4 S .122
+(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach).15 E F3(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 F3(jobspec)4.362 E F0 .121(is not present, and)2.932
+F .096(neither the)144 398.4 R F2<ad61>2.596 E F0 .096(nor the)2.596 F
+F2<ad72>2.596 E F0 .096(option is supplied, the)2.596 F F3(curr)2.596 E
+.096(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F2
+<ad68>2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each)
+.15 F F3(jobspec)145.74 410.4 Q F0 .586(is not remo)3.396 F -.15(ve)-.15
+G 3.086(df).15 G .585(rom the table, b)-3.086 F .585(ut is mark)-.2 F
+.585(ed so that)-.1 F/F4 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .585
+(is not sent to the job if the)2.835 F .962(shell recei)144 422.4 R -.15
+(ve)-.25 G 3.462(sa).15 G F4(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 .962
+(If no)5.462 F F3(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F2
+<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.359(jobs; the)144 434.4 R F2
+<ad72>3.859 E F0 1.359(option without a)3.859 F F3(jobspec)5.599 E F0
+(ar)4.169 E 1.358(gument restricts operation to running jobs.)-.18 F
+1.358(The return)6.358 F -.25(va)144 446.4 S(lue is 0 unless a).25 E F3
+(jobspec)4.24 E F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E
+F2(echo)108 463.2 Q F0([)2.5 E F2(\255neE)A F0 2.5(][)C F3(ar)-2.5 E(g)
+-.37 E F0(...])2.5 E .424(Output the)144 475.2 R F3(ar)2.924 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 .308
+(error occurs.)144 487.2 R(If)5.308 E F2<ad6e>2.808 E F0 .308
+(is speci\214ed, the trailing ne)2.808 F .308(wline is suppressed.)-.25
+F .307(If the)5.308 F F2<ad65>2.807 E F0 .307(option is gi)2.807 F -.15
+(ve)-.25 G .307(n, inter).15 F(-)-.2 E .197(pretation of the follo)144
+499.2 R .198(wing backslash-escaped characters is enabled.)-.25 F(The)
+5.198 E F2<ad45>2.698 E F0 .198(option disables the in-)2.698 F .067
+(terpretation of these escape characters, e)144 511.2 R -.15(ve)-.25 G
+2.567(no).15 G 2.567(ns)-2.567 G .067(ystems where the)-2.567 F 2.567
+(ya)-.15 G .067(re interpreted by def)-2.567 F 2.567(ault. The)-.1 F F2
+(xpg_echo)144 523.2 Q F0 .601
+(shell option may be used to dynamically determine whether or not)3.101
+F F2(echo)3.102 E F0 -.15(ex)3.102 G .602(pands these).15 F .659
+(escape characters by def)144 535.2 R(ault.)-.1 E F2(echo)5.659 E F0
+.659(does not interpret)3.159 F F2<adad>3.159 E F0 .659
+(to mean the end of options.)3.159 F F2(echo)5.658 E F0(inter)3.158 E(-)
+-.2 E(prets the follo)144 547.2 Q(wing escape sequences:)-.25 E F2(\\a)
+144 559.2 Q F0(alert \(bell\))180 559.2 Q F2(\\b)144 571.2 Q F0
+(backspace)180 571.2 Q F2(\\c)144 583.2 Q F0(suppress further output)180
+583.2 Q F2(\\e)144 595.2 Q(\\E)144 607.2 Q F0(an escape character)180
+607.2 Q F2(\\f)144 619.2 Q F0(form feed)180 619.2 Q F2(\\n)144 631.2 Q
+F0(ne)180 631.2 Q 2.5(wl)-.25 G(ine)-2.5 E F2(\\r)144 643.2 Q F0
+(carriage return)180 643.2 Q F2(\\t)144 655.2 Q F0(horizontal tab)180
+655.2 Q F2(\\v)144 667.2 Q F0 -.15(ve)180 667.2 S(rtical tab).15 E F2
+(\\\\)144 679.2 Q F0(backslash)180 679.2 Q F2(\\0)144 691.2 Q F3(nnn)A
+F0(the eight-bit character whose v)180 691.2 Q(alue is the octal v)-.25
+E(alue)-.25 E F3(nnn)2.5 E F0(\(zero to three octal digits\))2.5 E F2
+(\\x)144 703.2 Q F3(HH)A F0(the eight-bit character whose v)180 703.2 Q
+(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F3(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
+(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(7)
+190.545 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(\\u)144 84 Q/F2 10
+/Times-Italic@0 SF(HHHH)A F0 1.506
+(the Unicode \(ISO/IEC 10646\) character whose v)180 96 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 108 Q 2.5(xd)-.15 G(igits\))-2.5 E F1
+(\\U)144 120 Q F2(HHHHHHHH)A F0 .548
+(the Unicode \(ISO/IEC 10646\) character whose v)180 132 R .547
+(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
+3.047 E(HHH)180 144 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\))
+-2.5 E F1(enable)108 160.8 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 .277(Enable and disable b)144 172.8 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 .834
+(the same name as a shell b)144 184.8 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.333(nt).15 G(hough)-3.333 E .989
+(the shell normally searches for b)144 196.8 R .989
+(uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>3.489 E F0 .99
+(is used, each)3.49 F F2(name)3.49 E F0 .99(is dis-)3.49 F .649
+(abled; otherwise,)144 208.8 R F2(names)3.148 E F0 .648(are enabled.)
+3.148 F -.15(Fo)5.648 G 3.148(re).15 G .648(xample, to use the)-3.298 F
+F1(test)3.148 E F0 .648(binary found via the)3.148 F/F3 9/Times-Bold@0
+SF -.666(PA)3.148 G(TH)-.189 E F0(in-)2.898 E .538(stead of the shell b)
+144 220.8 R .538(uiltin v)-.2 F .538(ersion, run)-.15 F/F4 10/Courier@0
+SF .538(enable -n test)3.038 F F0 5.538(.T)C(he)-5.538 E F1<ad66>3.038 E
+F0 .539(option means to load the ne)3.038 F(w)-.25 E -.2(bu)144 232.8 S
+1.365(iltin command).2 F F2(name)4.225 E F0 1.365(from shared object)
+4.045 F F2(\214lename)5.775 E F0 3.865(,o).18 G 3.865(ns)-3.865 G 1.365
+(ystems that support dynamic loading.)-3.865 F .606(Bash will use the v)
+144 244.8 R .606(alue of the)-.25 F F1 -.3(BA)3.106 G(SH_LO).3 E(AD)-.4
+E(ABLES_P)-.35 E -.95(AT)-.74 G(H).95 E F0 -.25(va)3.106 G .606
+(riable as a colon-separated list of).25 F .549
+(directories in which to search for)144 256.8 R F2(\214lename)3.049 E F0
+5.549(.T)C .549(he def)-5.549 F .548(ault is system-dependent.)-.1 F
+(The)5.548 E F1<ad64>3.048 E F0 .548(option will)3.048 F .546
+(delete a b)144 268.8 R .546(uiltin pre)-.2 F .546(viously loaded with)
+-.25 F F1<ad66>3.046 E F0 5.547(.I)C 3.047(fn)-5.547 G(o)-3.047 E F2
+(name)3.047 E F0(ar)3.047 E .547(guments are gi)-.18 F -.15(ve)-.25 G
+.547(n, or if the).15 F F1<ad70>3.047 E F0 .547(option is)3.047 F .546
+(supplied, a list of shell b)144 280.8 R .545(uiltins is printed.)-.2 F
+-.4(Wi)5.545 G .545(th no other option ar).4 F .545
+(guments, the list consists of all)-.18 F .695(enabled shell b)144 292.8
+R 3.195(uiltins. If)-.2 F F1<ad6e>3.195 E F0 .695
+(is supplied, only disabled b)3.195 F .695(uiltins are printed.)-.2 F
+(If)5.695 E F1<ad61>3.195 E F0 .695(is supplied, the)3.195 F .262
+(list printed includes all b)144 304.8 R .261
+(uiltins, with an indication of whether or not each is enabled.)-.2 F
+(If)5.261 E F1<ad73>2.761 E F0 .261(is sup-)2.761 F .268
+(plied, the output is restricted to the POSIX)144 316.8 R F2(special)
+2.768 E F0 -.2(bu)2.768 G 2.768(iltins. If).2 F .269
+(no options are supplied and a)2.768 F F2(name)2.769 E F0 .285
+(is not a shell b)144 328.8 R(uiltin,)-.2 E F1(enable)2.784 E F0 .284
+(will attempt to load)2.784 F F2(name)2.784 E F0 .284
+(from a shared object named)2.784 F F2(name)2.784 E F0 2.784(,a)C 2.784
+(si)-2.784 G 2.784(ft)-2.784 G(he)-2.784 E 1.41(command were)144 340.8 R
+F4 1.41(enable \255f)3.91 F F2 1.41(name name)3.91 F F0 6.41(.T)3.91 G
+1.41(he return v)-6.41 F 1.41(alue is 0 unless a)-.25 F F2(name)4.27 E
+F0 1.41(is not a shell)4.09 F -.2(bu)144 352.8 S
+(iltin or there is an error loading a ne).2 E 2.5(wb)-.25 G
+(uiltin from a shared object.)-2.7 E F1 -2.3 -.15(ev a)108 369.6 T(l).15
+E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 381.6 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 .478(and e)144 393.6 R -.15(xe)-.15 G
+.478(cuted by the shell, and its e).15 F .478
+(xit status is returned as the v)-.15 F .479(alue of)-.25 F F1 -2.3 -.15
+(ev a)2.979 H(l).15 E F0 5.479(.I)C 2.979(ft)-5.479 G .479(here are no)
+-2.979 F F2(ar)3.309 E(gs)-.37 E F0(,).27 E(or only null ar)144 405.6 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 422.4 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 434.4 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 446.4 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 .48(the zeroth ar)144 458.4 R .48(gument passed to)
+-.18 F F2(command)3.18 E F0 5.48(.T).77 G .48(his is what)-5.48 F F2(lo)
+3.07 E(gin)-.1 E F0 .48(\(1\) does.).24 F(The)5.48 E F1<ad63>2.98 E F0
+.48(option causes)2.98 F F2(com-)3.18 E(mand)144 470.4 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 482.4 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 494.4 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 506.4 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 518.4 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 530.4 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 547.2 Q F0([)2.5 E F2(n)A F0
+(])A .096(Cause the shell to e)144 547.2 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 559.2 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 576 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 588 Q F0
+.256(The supplied)144 600 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 612 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 624 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 636 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 648 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 660 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 672 Q F1(fc)108 688.8 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
+700.8 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 712.8 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
+724.8 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
+(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(8)
+190.545 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(be)144 84 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 .071(is used as an of)144 96 R
+.071(fset from the current command number\).)-.25 F .071
+(When listing, a)5.071 F/F1 10/Times-Italic@0 SF<8c72>2.571 E(st)-.1 E
+F0(or)2.571 E F1(last)2.571 E F0 .071(of 0 is equi)2.571 F -.25(va)-.25
+G(-).25 E .653(lent to \2551 and \2550 is equi)144 108 R -.25(va)-.25 G
+.653(lent to the current command \(usually the).25 F/F2 10/Times-Bold@0
+SF(fc)3.153 E F0 .653(command\); otherwise 0 is)3.153 F(equi)144 120 Q
+-.25(va)-.25 G .242(lent to \2551 and \2550 is in).25 F -.25(va)-.4 G
+2.742(lid. If).25 F F1(last)2.832 E F0 .242
+(is not speci\214ed, it is set to the current command for list-)3.422 F
+.092(ing \(so that)144 132 R/F3 10/Courier@0 SF .092(fc \255l \25510)
+2.592 F F0 .093(prints the last 10 commands\) and to)2.592 F F1<8c72>
+4.503 E(st)-.1 E F0 2.593(otherwise. If)3.273 F F1<8c72>4.503 E(st)-.1 E
+F0 .093(is not speci-)3.273 F(\214ed, it is set to the pre)144 144 Q
+(vious command for editing and \25516 for listing.)-.25 E(The)144 168 Q
+F2<ad6e>2.522 E F0 .022
+(option suppresses the command numbers when listing.)2.522 F(The)5.022 E
+F2<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 180 R .438(If the)5.438
+F F2<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 192 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E F1
+(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 F1(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G
+(n,).15 E .63(the v)144 204 R .63(alue of the)-.25 F/F4 9/Times-Bold@0
+SF(FCEDIT)3.13 E F0 -.25(va)2.88 G .631(riable is used, and the v).25 F
+.631(alue of)-.25 F F4(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F4(FCEDIT)
+3.131 E F0 .631(is not set.)2.881 F .631(If nei-)5.631 F .006(ther v)144
+216 R .006(ariable is set,)-.25 F F1(vi)4.171 E F0 .005(is used.)4.171 F
+.005(When editing is complete, the edited commands are echoed and e)
+5.005 F(x-)-.15 E(ecuted.)144 228 Q .788(In the second form,)144 252 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 264 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 F3 .171(r='fc \255s')2.671 F F0
+2.671(,s)C 2.671(ot)-2.671 G(hat)-2.671 E(typing)144 276 Q F3 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 F3(cc)3.666 E F0 1.166(and typing)3.666 F F3(r)
+3.666 E F0(re-e)3.666 E -.15(xe)-.15 G 1.166(cutes the last com-).15 F
+(mand.)144 288 Q .142(If the \214rst form is used, the return v)144 312
+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 324 R
+.454(If the)5.454 F F2<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 336 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
+348 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 360 Q
+(alid history line, in which case)-.25 E F2(fc)2.5 E F0(returns f)2.5 E
+(ailure.)-.1 E F2(fg)108 376.8 Q F0([)2.5 E F1(jobspec)A F0(])A(Resume)
+144 388.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 400.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 412.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 424.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 441.6 Q F1(optstring name)2.5 E F0([)2.5 E F1(ar)A 2.5
+(g.)-.37 G(..)-2.5 E F0(])A F2(getopts)144 453.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 465.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 477.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 .636
+(acters may not be used as option characters.)144 489.6 R .636
+(Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F2(getopts)
+3.136 E F0 .636(places the ne)3.136 F .635(xt op-)-.15 F .029
+(tion in the shell v)144 501.6 R(ariable)-.25 E F1(name)2.889 E F0 2.529
+(,i).18 G(nitializing)-2.529 E F1(name)2.889 E F0 .029(if it does not e)
+2.709 F .03(xist, and the inde)-.15 F 2.53(xo)-.15 G 2.53(ft)-2.53 G .03
+(he ne)-2.53 F .03(xt ar)-.15 F(gu-)-.18 E .066
+(ment to be processed into the v)144 513.6 R(ariable)-.25 E F4(OPTIND)
+2.566 E/F5 9/Times-Roman@0 SF(.)A F4(OPTIND)4.566 E F0 .065
+(is initialized to 1 each time the shell or a)2.315 F .885
+(shell script is in)144 525.6 R -.2(vo)-.4 G -.1(ke).2 G 3.385(d. When)
+.1 F .885(an option requires an ar)3.385 F(gument,)-.18 E F2(getopts)
+3.385 E F0 .885(places that ar)3.385 F .885(gument into)-.18 F .567
+(the v)144 537.6 R(ariable)-.25 E F4(OPT)3.067 E(ARG)-.81 E F5(.)A F0
+.566(The shell does not reset)5.067 F F4(OPTIND)3.066 E F0 .566
+(automatically; it must be manually reset)2.816 F .389
+(between multiple calls to)144 549.6 R F2(getopts)2.889 E F0 .389
+(within the same shell in)2.889 F -.2(vo)-.4 G .39(cation if a ne).2 F
+2.89(ws)-.25 G .39(et of parameters is to)-2.89 F(be used.)144 561.6 Q
+2.044(When the end of options is encountered,)144 585.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 F4(OPTIND)144 597.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 621.6 Q F0 .485
+(normally parses the positional parameters, b)2.985 F .485
+(ut if more ar)-.2 F .485(guments are supplied as)-.18 F F1(ar)3.315 E
+(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 633.6 Q F2(getopts)2.5 E
+F0(parses those instead.)2.5 E F2(getopts)144 657.6 Q F0 .345
+(can report errors in tw)2.845 F 2.845(ow)-.1 G 2.845(ays. If)-2.945 F
+.345(the \214rst character of)2.845 F F1(optstring)3.075 E F0 .345
+(is a colon,)3.065 F F1(silent)3.185 E F0 .345(error re-)3.525 F 1.668
+(porting is used.)144 669.6 R 1.668
+(In normal operation, diagnostic messages are printed when in)6.668 F
+-.25(va)-.4 G 1.669(lid options or).25 F .394(missing option ar)144
+681.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 693.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 717.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
+729.6 R F4(OPT)2.9 E(ARG)-.81 E F5(.)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 F4
+(OPT)2.899 E(ARG)-.81 E F0 .399(and no)2.649 F(GNU Bash 5.2)72 768 Q
+(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(9)190.545 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(diagnostic message is printed.)144 84 Q
+1.241(If a required ar)144 108 R 1.241(gument is not found, and)-.18 F
+/F1 10/Times-Bold@0 SF(getopts)3.741 E F0 1.241
+(is not silent, a question mark \()3.741 F F1(?).833 E F0 3.742(\)i).833
+G 3.742(sp)-3.742 G 1.242(laced in)-3.742 F/F2 10/Times-Italic@0 SF
+(name)144.36 120 Q F0(,).18 E/F3 9/Times-Bold@0 SF(OPT)2.714 E(ARG)-.81
+E F0 .213(is unset, and a diagnostic message is printed.)2.463 F(If)
+5.213 E F1(getopts)2.713 E F0 .213(is silent, then a colon \()2.713 F F1
+(:).833 E F0(\)).833 E(is placed in)144 132 Q F2(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 F1(getopts)144 156 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 168 Q F1(hash)108 184.8
+Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1<ad70>-2.5 E F2(\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 196.8 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 208.8 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 220.8
+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 .615
+(of the command.)144 232.8 R(The)5.615 E F1<ad72>3.115 E F0 .615
+(option causes the shell to for)3.115 F .615
+(get all remembered locations.)-.18 F(The)5.615 E F1<ad64>3.115 E F0
+(op-)3.115 E .294(tion causes the shell to for)144 244.8 R .294
+(get the remembered location of each)-.18 F F2(name)2.793 E F0 5.293(.I)
+C 2.793(ft)-5.293 G(he)-2.793 E F1<ad74>2.793 E F0 .293
+(option is supplied,)2.793 F .028(the full pathname to which each)144
+256.8 R F2(name)2.528 E F0 .028(corresponds is printed.)2.528 F .028
+(If multiple)5.028 F F2(name)2.528 E F0(ar)2.528 E .028
+(guments are sup-)-.18 F .176(plied with)144 268.8 R F1<ad74>2.676 E F0
+2.676(,t)C(he)-2.676 E F2(name)2.676 E F0 .175
+(is printed before the hashed full pathname.)2.676 F(The)5.175 E F1
+<ad6c>2.675 E F0 .175(option causes output to)2.675 F .783
+(be displayed in a format that may be reused as input.)144 280.8 R .783
+(If no ar)5.783 F .783(guments are gi)-.18 F -.15(ve)-.25 G .783
+(n, or if only).15 F F1<ad6c>3.283 E F0(is)3.283 E .807
+(supplied, information about remembered commands is printed.)144 292.8 R
+.807(The return status is true unless a)5.807 F F2(name)144.36 304.8 Q
+F0(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.)
+.25 E F1(help)108 321.6 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
+333.6 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 .224(help on all commands matching)144
+345.6 R F2(pattern)3.974 E F0 2.723(;o).24 G .223
+(therwise help for all the b)-2.723 F .223
+(uiltins and shell control struc-)-.2 F(tures is printed.)144 357.6 Q F1
+<ad64>144 369.6 Q F0(Display a short description of each)180 369.6 Q F2
+(pattern)2.5 E F1<ad6d>144 381.6 Q F0(Display the description of each)
+180 381.6 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 393.6 Q F0
+(Display only a short usage synopsis for each)180 393.6 Q F2(pattern)2.5
+E F0(The return status is 0 unless no command matches)144 410.4 Q F2
+(pattern)3.75 E F0(.).24 E F1(history [)108 427.2 Q F2(n)A F1(])A
+(history \255c)108 439.2 Q(history \255d)108 451.2 Q F2(of)2.5 E(fset)
+-.18 E F1(history \255d)108 463.2 Q F2(start)2.5 E F0<ad>A F2(end)A F1
+(history \255anrw)108 475.2 Q F0([)2.5 E F2(\214lename)A F0(])A F1
+(history \255p)108 487.2 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 499.2 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
+511.2 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 523.2 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(HISTTIMEFOR-)
+2.88 E(MA)144 535.2 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 547.2 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 559.2 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 571.2 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 583.2 Q F0
+(Clear the history list by deleting all the entries.)180 583.2 Q F1
+<ad64>144 595.2 Q F2(of)2.5 E(fset)-.18 E F0 .39
+(Delete the history entry at position)180 607.2 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
+619.2 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 631.2 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 643.2 Q F2(start)2.5 E F0<ad>A F2(end)A F0 1.25
+(Delete the range of history entries between positions)180 655.2 R F2
+(start)3.75 E F0(and)3.75 E F2(end)3.75 E F0 3.75(,i)C(nclusi)-3.75 E
+-.15(ve)-.25 G 6.25(.P).15 G(ositi)-6.25 E -.15(ve)-.25 G(and ne)180
+667.2 Q -.05(ga)-.15 G(ti).05 E .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 679.2 Q F0 .564(Append the `)180 679.2 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 691.2 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 703.2
+Q F0 .854(Read the history lines not already read from the history \214\
+le into the current history list.)180 703.2 R .772
+(These are lines appended to the history \214le since the be)180 715.2 R
+.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E
+(sion.)180 727.2 Q(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15
+G(mber 22).15 E(10)185.545 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/F1 10/Times-Bold@0 SF<ad72>144 84 Q F0(Rea\
+d the contents of the history \214le and append them to the current his\
+tory list.)180 84 Q F1<ad77>144 96 Q F0
+(Write the current history list to the history \214le, o)180 96 Q -.15
+(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G(ontents.)
+-2.5 E F1<ad70>144 108 Q F0 .626
+(Perform history substitution on the follo)180 108 R(wing)-.25 E/F2 10
+/Times-Italic@0 SF(ar)3.125 E(gs)-.37 E F0 .625
+(and display the result on the standard)3.125 F 2.975(output. Does)180
+120 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 132 Q(xpansion.)-.15 E F1<ad73>144 144 Q F0 .363
+(Store the)180 144 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 156 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 172.8 R/F3 9/Times-Bold@0 SF
+(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 184.8 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 196.8 R .956
+(ginning with the history comment character follo)-.15 F .956
+(wed immediately by a digit)-.25 F .833
+(are interpreted as timestamps for the follo)144 208.8 R .833
+(wing history entry)-.25 F 5.832(.T)-.65 G .832(he return v)-5.832 F
+.832(alue is 0 unless an in-)-.25 F -.25(va)144 220.8 S .168(lid option\
+ is encountered, an error occurs while reading or writing the history \
+\214le, an in).25 F -.25(va)-.4 G(lid).25 E F2(of)2.669 E(f-)-.18 E(set)
+144 232.8 Q F0 .341(or range is supplied as an ar)2.841 F .341
+(gument to)-.18 F F1<ad64>2.841 E F0 2.841(,o)C 2.84(rt)-2.841 G .34
+(he history e)-2.84 F .34(xpansion supplied as an ar)-.15 F .34
+(gument to)-.18 F F1<ad70>144 244.8 Q F0 -.1(fa)2.5 G(ils.).1 E F1(jobs)
+108 261.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5(][)C F2(jobspec)A F0(... ])
+2.5 E F1(jobs \255x)108 273.6 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 285.6 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 297.6 Q F0
+(List process IDs in addition to the normal information.)180 297.6 Q F1
+<ad6e>144 309.6 Q F0 .193(Display information only about jobs that ha)
+180 309.6 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 321.6 Q F1<ad70>
+144 333.6 Q F0(List only the process ID of the job')180 333.6 Q 2.5(sp)
+-.55 G(rocess group leader)-2.5 E(.)-.55 E F1<ad72>144 345.6 Q F0
+(Display only running jobs.)180 345.6 Q F1<ad73>144 357.6 Q F0
+(Display only stopped jobs.)180 357.6 Q(If)144 374.4 Q F2(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 386.4 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 403.2 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 415.2 Q
+-.15(xe)-.15 G(cutes).15 E F2(command)2.7 E F0(passing it)3.27 E F2(ar)
+2.83 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15
+E F1(kill)108 432 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 444 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 .017(Send the signal named by)
+144 456 R F2(sigspec)2.857 E F0(or)2.827 E F2(signum)2.857 E F0 .017
+(to the processes named by)2.837 F F2(pid)3.767 E F0(or)3.287 E F2
+(jobspec)4.257 E F0(.).31 E F2(sigspec)5.357 E F0(is)2.827 E .318
+(either a case-insensiti)144 468 R .618 -.15(ve s)-.25 H .318
+(ignal name such as).15 F F3(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 480 Q F2(signum)3.268 E F0
+.427(is a signal number)3.247 F 5.427(.I)-.55 G(f)-5.427 E F2(sigspec)
+3.267 E F0 .427(is not present, then)3.237 F F3(SIGTERM)2.927 E F0 .427
+(is assumed.)2.677 F .427(An ar)5.427 F(-)-.2 E .313(gument of)144 492 R
+F1<ad6c>2.813 E F0 .314(lists the signal names.)2.814 F .314(If an)5.314
+F 2.814(ya)-.15 G -.18(rg)-2.814 G .314(uments are supplied when).18 F
+F1<ad6c>2.814 E F0 .314(is gi)2.814 F -.15(ve)-.25 G .314
+(n, the names of).15 F .12(the signals corresponding to the ar)144 504 R
+.119(guments are listed, and the return status is 0.)-.18 F(The)5.119 E
+F2 -.2(ex)2.619 G(it_status).2 E F0(ar)2.619 E(-)-.2 E .799(gument to)
+144 516 R F1<ad6c>3.299 E F0 .799
+(is a number specifying either a signal number or the e)3.299 F .8
+(xit status of a process termi-)-.15 F .963(nated by a signal.)144 528 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 540 Q(alse if an error occurs or an in)-.1
+E -.25(va)-.4 G(lid option is encountered.).25 E F1(let)108 556.8 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
+568.8 Q F2(ar)5.817 E(g)-.37 E F0 2.987(is an arithmetic e)5.707 F 2.987
+(xpression to be e)-.15 F -.25(va)-.25 G 2.987(luated \(see).25 F F3
+2.987(ARITHMETIC EV)5.487 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0
+(in)5.238 E F2(bash\(1\))144 580.8 Q F0 2.5(\). If)B(the last)2.5 E 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 597.6 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 609.6 S 2.542(re).15 G .042(ach ar)
+-2.542 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F F2
+(name)2.902 E F0 .042(is created, and assigned)2.722 F F2(value)2.832 E
+F0 5.042(.T).18 G(he)-5.042 E F2(option)2.542 E F0 .041(can be)2.541 F
+(an)144 621.6 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
+633.6 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 .509
+(of shell options is made local to the function in which)144 645.6 R F1
+(local)3.01 E F0 .51(is in)3.01 F -.2(vo)-.4 G -.1(ke).2 G .51
+(d: shell options changed us-).1 F 1.171(ing the)144 657.6 R F1(set)
+3.671 E F0 -.2(bu)3.671 G 1.171
+(iltin inside the function are restored to their original v).2 F 1.17
+(alues when the function re-)-.25 F 3.38(turns. The)144 669.6 R .88
+(restore is ef)3.38 F .88(fected as if a series of)-.25 F F1(set)3.381 E
+F0 .881(commands were e)3.381 F -.15(xe)-.15 G .881
+(cuted to restore the v).15 F(alues)-.25 E .788
+(that were in place before the function.)144 681.6 R -.4(Wi)5.788 G .788
+(th no operands,).4 F F1(local)3.288 E F0 .787(writes a list of local v)
+3.288 F .787(ariables to)-.25 F .654(the standard output.)144 693.6 R
+.654(It is an error to use)5.654 F F1(local)3.154 E F0 .654
+(when not within a function.)3.154 F .655(The return status is 0)5.654 F
+(unless)144 705.6 Q F1(local)2.5 E F0(is used outside a function, an in)
+2.5 E -.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(GNU Bash 5.2)72
+768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(11)185.545 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(logout)108 84 Q F0
+(Exit a login shell.)144 84 Q F1(map\214le)108 100.8 Q F0([)2.5 E F1
+<ad64>A/F2 10/Times-Italic@0 SF(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 112.8 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 .159(Read lines from the standard input into the inde)144 124.8 R
+-.15(xe)-.15 G 2.659(da).15 G .159(rray v)-2.659 F(ariable)-.25 E F2
+(arr)2.989 E(ay)-.15 E F0 2.659(,o).32 G 2.658(rf)-2.659 G .158
+(rom \214le descriptor)-2.658 F F2(fd)4.628 E F0 1.248(if the)144 136.8
+R F1<ad75>3.748 E F0 1.248(option is supplied.)3.748 F 1.249(The v)6.249
+F(ariable)-.25 E/F3 9/Times-Bold@0 SF(MAPFILE)3.749 E F0 1.249
+(is the def)3.499 F(ault)-.1 E F2(arr)3.749 E(ay)-.15 E F0 6.249(.O)C
+1.249(ptions, if supplied,)-6.249 F(ha)144 148.8 Q .3 -.15(ve t)-.2 H
+(he follo).15 E(wing meanings:)-.25 E F1<ad64>144 160.8 Q F0 .911
+(The \214rst character of)180 160.8 R F2(delim)3.411 E F0 .911
+(is used to terminate each input line, rather than ne)3.411 F 3.41
+(wline. If)-.25 F F2(delim)180 172.8 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 184.8 Q F0(Cop)180 184.8 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 196.8 Q F0(Be)180
+196.8 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.73 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 208.8 Q F0
+(Discard the \214rst)180 208.8 Q F2(count)2.5 E F0(lines read.)2.5 E F1
+<ad74>144 220.8 Q F0(Remo)180 220.8 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 232.8 Q F0
+(Read lines from \214le descriptor)180 232.8 Q F2(fd)2.5 E F0
+(instead of the standard input.)2.5 E F1<ad43>144 244.8 Q F0(Ev)180
+244.8 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.75 E F0(.).32 E F1<ad63>144 256.8
+Q F0(Specify the number of lines read between each call to)180 256.8 Q
+F2(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 273.6 Q F1<ad43>2.967 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 .262(plied the inde)144 285.6 R 2.762(xo)-.15
+G 2.762(ft)-2.762 G .262(he ne)-2.762 F .261(xt array element to be ass\
+igned and the line to be assigned to that element)-.15 F .274
+(as additional ar)144 297.6 R(guments.)-.18 E F2(callbac)5.274 E(k)-.2 E
+F0 .274(is e)2.774 F -.25(va)-.25 G .274
+(luated after the line is read b).25 F .275
+(ut before the array element is)-.2 F(assigned.)144 309.6 Q
+(If not supplied with an e)144 326.4 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 343.2 Q F0 .797
+(returns successfully unless an in)3.298 F -.25(va)-.4 G .797
+(lid option or option ar).25 F .797(gument is supplied,)-.18 F F2(arr)
+3.297 E(ay)-.15 E F0 .797(is in-)3.297 F -.25(va)144 355.2 S
+(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 372 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 384 Q -.15(ve)-.15 G 3.091(se)
+.15 G .591(ntries from the directory stack.)-3.091 F .592
+(The elements are numbered from 0 starting at the \214rst)5.591 F .665
+(directory listed by)144 396 R F1(dirs)3.165 E F0 5.665(.W)C .665
+(ith no ar)-6.065 F(guments,)-.18 E F1(popd)3.165 E F0(remo)3.165 E -.15
+(ve)-.15 G 3.165(st).15 G .664(he top directory from the stack, and)
+-3.165 F(changes to the ne)144 408 Q 2.5(wt)-.25 G(op directory)-2.5 E 5
+(.A)-.65 G -.18(rg)-5 G(uments, if supplied, ha).18 E .3 -.15(ve t)-.2 H
+(he follo).15 E(wing meanings:)-.25 E F1<ad6e>144 420 Q F0 .551
+(Suppresses the normal change of directory when remo)180 420 R .551
+(ving directories from the stack, so)-.15 F
+(that only the stack is manipulated.)180 432 Q F1(+)144 444 Q F2(n)A F0
+(Remo)180 444 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 .779
+(from the stack.)180 456 R -.15(Fo)5.779 G 3.279(re).15 G(xample:)-3.429
+E/F4 10/Courier@0 SF .779(popd +0)3.279 F F0(remo)3.279 E -.15(ve)-.15 G
+3.279(st).15 G .779(he \214rst directory)-3.279 F(,)-.65 E F4 .78
+(popd +1)3.28 F F0 .78(the sec-)3.28 F(ond.)180 468 Q F1<ad>144 480 Q F2
+(n)A F0(Remo)180 480 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 492 R(or e)-.15 E(xample:)-.15 E F4(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 F4(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .093
+(If the top element of the directory stack is modi\214ed, and the)144
+508.8 R F2(-n)2.593 E F0 .094(option w)2.594 F .094(as not supplied,)-.1
+F F1(popd)2.594 E F0(uses)2.594 E(the)144 520.8 Q F1(cd)2.697 E F0 -.2
+(bu)2.697 G .196
+(iltin to change to the directory at the top of the stack.).2 F .196
+(If the)5.196 F F1(cd)2.696 E F0 -.1(fa)2.696 G(ils,).1 E F1(popd)2.696
+E F0 .196(returns a non-)2.696 F(zero v)144 532.8 Q(alue.)-.25 E
+(Otherwise,)144 549.6 Q F1(popd)2.67 E F0 .17(returns f)2.67 F .17
+(alse if an in)-.1 F -.25(va)-.4 G .171
+(lid option is encountered, the directory stack is empty).25 F 2.671(,o)
+-.65 G 2.671(ra)-2.671 G(non-e)144 561.6 Q
+(xistent directory stack entry is speci\214ed.)-.15 E 1.556(If the)144
+578.4 R F1(popd)4.056 E F0 1.556(command is successful, bash runs)4.056
+F F1(dirs)4.056 E F0 1.556(to sho)4.056 F 4.055(wt)-.25 G 1.555
+(he \214nal contents of the directory)-4.055 F
+(stack, and the return status is 0.)144 590.4 Q F1(printf)108 607.2 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 .357(Write the formatted)144 619.2 R F2(ar)2.857
+E(guments)-.37 E F0 .357
+(to the standard output under the control of the)2.857 F F2(format)2.858
+E F0 5.358(.T)C(he)-5.358 E F1<ad76>2.858 E F0(op-)2.858 E .714
+(tion causes the output to be assigned to the v)144 631.2 R(ariable)-.25
+E F2(var)3.214 E F0 .714(rather than being printed to the standard)3.214
+F(output.)144 643.2 Q(The)144 667.2 Q F2(format)3.017 E F0 .517(is a ch\
+aracter string which contains three types of objects: plain characters,\
+ which are)3.017 F .704(simply copied to standard output, character esc\
+ape sequences, which are con)144 679.2 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 691.2 R .037
+(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 703.2 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 715.2 Q
+(xtensions:)-.15 E(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15
+G(mber 22).15 E(12)185.545 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-Bold@0 SF(%b)144 84 Q F0
+(causes)180 84 Q F1(printf)2.595 E F0 .096(to e)2.595 F .096
+(xpand backslash escape sequences in the corresponding)-.15 F/F2 10
+/Times-Italic@0 SF(ar)2.596 E(gument)-.37 E F0 .096(in the)2.596 F
+(same w)180 96 Q(ay as)-.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 108 Q
+F0(causes)180 108 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 120 Q F1(%Q)
+144 132 Q F0(lik)180 132 Q(e)-.1 E F1(%q)2.5 E F0 2.5(,b)C
+(ut applies an)-2.7 E 2.5(ys)-.15 G(upplied precision to the)-2.5 E F2
+(ar)2.5 E(gument)-.37 E F0(before quoting it.)2.5 E F1(%\()144 144 Q F2
+(datefmt)A F1(\)T)A F0(causes)180 156 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 168 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
+180 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 192 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 204 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 216 Q(vior)-.2 E(.)-.55 E .902
+(The %b, %q, and %T directi)144 232.8 R -.15(ve)-.25 G 3.401(sa).15 G
+.901(ll use the \214eld width and precision ar)-3.401 F .901
+(guments from the format)-.18 F .357(speci\214cation and write that man)
+144 244.8 R 2.857(yb)-.15 G .358
+(ytes from \(or use that wide a \214eld for\) the e)-2.857 F .358
+(xpanded ar)-.15 F(gument,)-.18 E
+(which usually contains more characters than the original.)144 256.8 Q
+(Ar)144 273.6 Q .464(guments to non-string format speci\214ers are trea\
+ted as C constants, e)-.18 F .463(xcept that a leading plus or)-.15 F
+1.258(minus sign is allo)144 285.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 297.6 Q(alue of the follo)
+-.25 E(wing character)-.25 E(.)-.55 E(The)144 314.4 Q F2(format)2.515 E
+F0 .015(is reused as necessary to consume all of the)2.515 F F2(ar)2.515
+E(guments)-.37 E F0 5.015(.I)C 2.514(ft)-5.015 G(he)-2.514 E F2(format)
+2.514 E F0 .014(requires more)2.514 F F2(ar)2.514 E(-)-.2 E(guments)144
+326.4 Q F0 .565(than are supplied, the e)3.065 F .566
+(xtra format speci\214cations beha)-.15 F .866 -.15(ve a)-.2 H 3.066(si)
+.15 G 3.066(faz)-3.066 G .566(ero v)-3.066 F .566(alue or null string,)
+-.25 F(as appropriate, had been supplied.)144 338.4 Q(The return v)5 E
+(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd)
+108 355.2 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 367.2 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 379.2 R 3.139(wt)
+-.25 G .639(op of the)-3.139 F .088(stack the current w)144 391.2 R .088
+(orking directory)-.1 F 5.088(.W)-.65 G .088(ith no ar)-5.488 F
+(guments,)-.18 E F1(pushd)2.589 E F0 -.15(ex)2.589 G .089
+(changes the top tw).15 F 2.589(oe)-.1 G .089(lements of)-2.589 F
+(the directory stack.)144 403.2 Q(Ar)5 E(guments, if supplied, ha)-.18 E
+.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad6e>144
+415.2 Q F0 1.811(Suppresses the normal change of directory when rotatin\
+g or adding directories to the)180 415.2 R
+(stack, so that only the stack is manipulated.)180 427.2 Q F1(+)144
+439.2 Q F2(n)A F0 1.267(Rotates the stack so that the)180 439.2 R F2(n)
+3.767 E F0 1.268(th directory \(counting from the left of the list sho)B
+1.268(wn by)-.25 F F1(dirs)180 451.2 Q F0 2.5(,s)C
+(tarting with zero\) is at the top.)-2.5 E F1<ad>144 463.2 Q F2(n)A F0
+.92(Rotates the stack so that the)180 463.2 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 475.2 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
+-2.5 E F2(dir)144.35 487.2 Q F0(Adds)180 487.2 Q F2(dir)2.85 E F0
+(to the directory stack at the top)3.23 E .434
+(After the stack has been modi\214ed, if the)144 504 R F1<ad6e>2.934 E
+F0 .434(option w)2.934 F .435(as not supplied,)-.1 F F1(pushd)2.935 E F0
+.435(uses the)2.935 F F1(cd)2.935 E F0 -.2(bu)2.935 G .435(iltin to).2 F
+(change to the directory at the top of the stack.)144 516 Q(If the)5 E
+F1(cd)2.5 E F0 -.1(fa)2.5 G(ils,).1 E F1(pushd)2.5 E F0
+(returns a non-zero v)2.5 E(alue.)-.25 E 1.78(Otherwise, if no ar)144
+532.8 R 1.78(guments are supplied,)-.18 F F1(pushd)4.28 E F0 1.78
+(returns 0 unless the directory stack is empty)4.28 F(.)-.65 E .092
+(When rotating the directory stack,)144 544.8 R F1(pushd)2.592 E F0 .093
+(returns 0 unless the directory stack is empty or a non-e)2.592 F(x-)
+-.15 E(istent directory stack element is speci\214ed.)144 556.8 Q 1.278
+(If the)144 573.6 R F1(pushd)3.778 E F0 1.278
+(command is successful, bash runs)3.778 F F1(dirs)3.778 E F0 1.277
+(to sho)3.777 F 3.777(wt)-.25 G 1.277
+(he \214nal contents of the directory)-3.777 F(stack.)144 585.6 Q F1
+(pwd)108 602.4 Q F0([)2.5 E F1(\255LP)A F0(])A .844
+(Print the absolute pathname of the current w)144 614.4 R .845
+(orking directory)-.1 F 5.845(.T)-.65 G .845
+(he pathname printed contains no)-5.845 F .182(symbolic links if the)144
+626.4 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 .181(iltin command is).2 F 3.263
+(enabled. If)144 638.4 R(the)3.263 E F1<ad4c>3.263 E F0 .763
+(option is used, the pathname printed may contain symbolic links.)3.263
+F .764(The return)5.764 F .405(status is 0 unless an error occurs while\
+ reading the name of the current directory or an in)144 650.4 R -.25(va)
+-.4 G .405(lid op-).25 F(tion is supplied.)144 662.4 Q F1 -.18(re)108
+679.2 S(ad).18 E F0([)3.816 E F1(\255ers)A F0 3.816(][)C F1<ad61>-3.816
+E F2(aname)3.816 E F0 3.816(][)C F1<ad64>-3.816 E F2(delim)3.816 E F0
+3.816(][)C F1<ad69>-3.816 E F2(te)3.816 E(xt)-.2 E F0 3.816(][)C F1
+<ad6e>-3.816 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.817(][)C F1<ad4e>
+-3.817 E F2(nc)3.817 E(har)-.15 E(s)-.1 E F0 3.817(][)C F1<ad70>-3.817 E
+F2(pr)3.817 E(ompt)-.45 E F0 3.817(][)C F1<ad74>-3.817 E F2(timeout)
+3.817 E F0 3.817(][)C F1<ad75>-3.817 E F2(fd)3.817 E F0(])A([)108 691.2
+Q F2(name)A F0(...])2.5 E .516(One line is read from the standard input\
+, or from the \214le descriptor)144 703.2 R F2(fd)3.016 E F0 .516
+(supplied as an ar)3.016 F .516(gument to)-.18 F(the)144 715.2 Q F1
+<ad75>2.753 E F0 .253(option, split into w)2.753 F .253
+(ords as described in)-.1 F F2(bash\(1\))2.754 E F0(under)2.754 E F1
+-.75(Wo)2.754 G .254(rd Splitting).75 F F0 2.754(,a)C .254
+(nd the \214rst w)-2.754 F .254(ord is)-.1 F 1.425
+(assigned to the \214rst)144 727.2 R F2(name)4.285 E F0 3.925(,t).18 G
+1.425(he second w)-3.925 F 1.425(ord to the second)-.1 F F2(name)4.285 E
+F0 3.925(,a).18 G 1.425(nd so on.)-3.925 F 1.425(If there are more)6.425
+F(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E
+(13)185.545 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 -.1(wo)144 84 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 10
+/Times-Italic@0 SF(name)144.36 96 Q F0 5.7(.I).18 G 3.2(ft)-5.7 G .7
+(here are fe)-3.2 F .7(wer w)-.25 F .7
+(ords read from the input stream than names, the remaining names are)-.1
+F .531(assigned empty v)144 108 R 3.031(alues. The)-.25 F .531
+(characters in)3.031 F/F2 9/Times-Bold@0 SF(IFS)3.031 E F0 .532
+(are used to split the line into w)2.781 F .532(ords using the same)-.1
+F 1.326(rules the shell uses for e)144 120 R 1.325
+(xpansion \(described in)-.15 F F1(bash\(1\))3.825 E F0(under)3.825 E/F3
+10/Times-Bold@0 SF -.75(Wo)3.825 G 1.325(rd Splitting).75 F F0 3.825
+(\). The)B(backslash)3.825 E .738(character \()144 132 R F3(\\)A F0
+3.238(\)m)C .739(ay be used to remo)-3.238 F 1.039 -.15(ve a)-.15 H
+1.039 -.15(ny s).15 H .739(pecial meaning for the ne).15 F .739
+(xt character read and for line)-.15 F 2.5(continuation. Options,)144
+144 R(if supplied, ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F3<ad61>144 156 Q F1(aname)2.5 E F0 1.026(The w)
+180 168 R 1.026(ords are assigned to sequential indices of the array v)
+-.1 F(ariable)-.25 E F1(aname)3.855 E F0 3.525(,s).18 G 1.025
+(tarting at 0.)-3.525 F F1(aname)180.33 180 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 F3<ad64>144 192 Q
+F1(delim)2.5 E F0 .28(The \214rst character of)180 204 R F1(delim)2.78 E
+F0 .281(is used to terminate the input line, rather than ne)2.78 F 2.781
+(wline. If)-.25 F F1(de-)2.781 E(lim)180 216 Q F0(is the empty string,)
+2.5 E F3 -.18(re)2.5 G(ad).18 E F0
+(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F3
+<ad65>144 228 Q F0 .629
+(If the standard input is coming from a terminal,)180 228 R F3 -.18(re)
+3.128 G(adline).18 E F0(\(see)3.128 E F2(READLINE)3.128 E F0(in)2.878 E
+F1(bash\(1\))3.128 E F0 3.128(\)i)C(s)-3.128 E .048
+(used to obtain the line.)180 240 R .049
+(Readline uses the current \(or def)5.049 F .049
+(ault, if line editing w)-.1 F .049(as not pre)-.1 F(vi-)-.25 E
+(ously acti)180 252 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 F3<ad69>144 264 Q F1(te)2.5 E(xt)-.2
+E F0(If)180 264 Q F3 -.18(re)2.716 G(adline).18 E F0 .216
+(is being used to read the line,)2.716 F F1(te)2.716 E(xt)-.2 E F0 .216
+(is placed into the editing b)2.716 F(uf)-.2 E .215(fer before edit-)
+-.25 F(ing be)180 276 Q(gins.)-.15 E F3<ad6e>144 288 Q F1(nc)2.5 E(har)
+-.15 E(s)-.1 E F3 -.18(re)180 300 S(ad).18 E F0 .322
+(returns after reading)2.822 F F1(nc)2.823 E(har)-.15 E(s)-.1 E F0 .323
+(characters rather than w)2.823 F .323
+(aiting for a complete line of in-)-.1 F(put, b)180 312 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 F3
+<ad4e>144 324 Q F1(nc)2.5 E(har)-.15 E(s)-.1 E F3 -.18(re)180 336 S(ad)
+.18 E F0 1.269(returns after reading e)3.77 F(xactly)-.15 E F1(nc)3.769
+E(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F 1.269
+(aiting for a complete)-.1 F .274
+(line of input, unless EOF is encountered or)180 348 R F3 -.18(re)2.775
+G(ad).18 E F0 .275(times out.)2.775 F .275(Delimiter characters encoun-)
+5.275 F 1.003
+(tered in the input are not treated specially and do not cause)180 360 R
+F3 -.18(re)3.502 G(ad).18 E F0 1.002(to return until)3.502 F F1(nc)3.502
+E(har)-.15 E(s)-.1 E F0 .608(characters are read.)180 372 R .608
+(The result is not split on the characters in)5.608 F F3(IFS)3.108 E F0
+3.108(;t)C .609(he intent is that the)-3.108 F -.25(va)180 384 S .67
+(riable is assigned e).25 F .669
+(xactly the characters read \(with the e)-.15 F .669
+(xception of backslash; see the)-.15 F F3<ad72>180 396 Q F0(option belo)
+2.5 E(w\).)-.25 E F3<ad70>144 408 Q F1(pr)2.5 E(ompt)-.45 E F0(Display)
+180 420 Q F1(pr)3.66 E(ompt)-.45 E F0 1.161(on standard error)3.66 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 432 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 F3
+<ad72>144 444 Q F0 .544(Backslash does not act as an escape character)
+180 444 R 5.543(.T)-.55 G .543(he backslash is considered to be part of)
+-5.543 F .492(the line.)180 456 R .492(In particular)5.492 F 2.992(,ab)
+-.4 G(ackslash-ne)-2.992 E .493
+(wline pair may not then be used as a line continua-)-.25 F(tion.)180
+468 Q F3<ad73>144 480 Q F0(Silent mode.)180 480 Q
+(If input is coming from a terminal, characters are not echoed.)5 E F3
+<ad74>144 492 Q F1(timeout)2.5 E F0(Cause)180 504 Q F3 -.18(re)2.929 G
+(ad).18 E F0 .428(to time out and return f)2.929 F .428
+(ailure if a complete line of input \(or a speci\214ed num-)-.1 F .56
+(ber of characters\) is not read within)180 516 R F1(timeout)3.061 E F0
+(seconds.)3.061 E F1(timeout)5.561 E F0 .561(may be a decimal number)
+3.061 F(with a fractional portion follo)180 528 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 F3 -.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
+540 R .506(fect when reading)-.25 F .59(from re)180 552 R .59
+(gular \214les.)-.15 F(If)5.59 E F3 -.18(re)3.09 G(ad).18 E F0 .589
+(times out,)3.09 F F3 -.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 .589
+(artial input read into the speci\214ed).15 F -.25(va)180 564 S(riable)
+.25 E F1(name)2.77 E F0 5.27(.I)C(f)-5.27 E F1(timeout)2.77 E F0 .27
+(is 0,)2.77 F F3 -.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 .228(The e)180 576 R .228(xit status is 0 if input is a)
+-.15 F -.25(va)-.2 G .228(ilable on the speci\214ed \214le descriptor)
+.25 F 2.728(,o)-.4 G 2.727(rt)-2.728 G .227(he read will re-)-2.727 F
+1.224(turn EOF)180 588 R 3.724(,n)-.8 G 1.224(on-zero otherwise.)-3.724
+F 1.224(The e)6.224 F 1.225
+(xit status is greater than 128 if the timeout is e)-.15 F(x-)-.15 E
+(ceeded.)180 600 Q F3<ad75>144 612 Q F1(fd)2.5 E F0
+(Read input from \214le descriptor)180 612 Q F1(fd)2.5 E F0(.)A .522
+(If no)144 628.8 R F1(names)3.382 E F0 .522
+(are supplied, the line read, without the ending delimiter b)3.292 F
+.522(ut otherwise unmodi\214ed, is)-.2 F 1.186(assigned to the v)144
+640.8 R(ariable)-.25 E F2(REPL)3.686 E(Y)-.828 E/F4 9/Times-Roman@0 SF
+(.)A F0 1.186(The e)5.686 F 1.186
+(xit status is zero, unless end-of-\214le is encountered,)-.15 F F3 -.18
+(re)3.687 G(ad).18 E F0 .961
+(times out \(in which case the status is greater than 128\), a v)144
+652.8 R .96(ariable assignment error \(such as as-)-.25 F .706
+(signing to a readonly v)144 664.8 R .706(ariable\) occurs, or an in)
+-.25 F -.25(va)-.4 G .706(lid \214le descriptor is supplied as the ar)
+.25 F .707(gument to)-.18 F F3<ad75>144 676.8 Q F0(.)A F3 -.18(re)108
+693.6 S(adonly).18 E F0([)2.5 E F3(\255aAf)A F0 2.5(][)C F3<ad70>-2.5 E
+F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(wor)A(d)-.37 E F0 2.5(].)C(..])
+-2.5 E .77(The gi)144 705.6 R -.15(ve)-.25 G(n).15 E F1(names)3.27 E F0
+.77(are mark)3.27 F .77(ed readonly; the v)-.1 F .77(alues of these)-.25
+F F1(names)3.63 E F0 .77(may not be changed by subse-)3.54 F 1.096
+(quent assignment.)144 717.6 R 1.096(If the)6.096 F F3<ad66>3.596 E F0
+1.097(option is supplied, the functions corresponding to the)3.596 F F1
+(names)3.597 E F0 1.097(are so)3.597 F(mark)144 729.6 Q 4.903(ed. The)
+-.1 F F3<ad61>4.903 E F0 2.403(option restricts the v)4.903 F 2.403
+(ariables to inde)-.25 F -.15(xe)-.15 G 4.903(da).15 G 2.403(rrays; the)
+-4.903 F F3<ad41>4.903 E F0 2.402(option restricts the)4.903 F
+(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E
+(14)185.545 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 -.25(va)144 84 S .424(riables to associati)
+.25 F .724 -.15(ve a)-.25 H 2.924(rrays. If).15 F .425
+(both options are supplied,)2.924 F/F1 10/Times-Bold@0 SF<ad41>2.925 E
+F0(tak)2.925 E .425(es precedence.)-.1 F .425(If no)5.425 F/F2 10
+/Times-Italic@0 SF(name)3.285 E F0(ar)3.105 E(-)-.2 E 1.275
+(guments are gi)144 96 R -.15(ve)-.25 G 1.275(n, or if the).15 F F1
+<ad70>3.775 E F0 1.275
+(option is supplied, a list of all readonly names is printed.)3.775 F
+(The)6.275 E .559(other options may be used to restrict the output to a\
+ subset of the set of readonly names.)144 108 R(The)5.559 E F1<ad70>
+3.059 E F0 .201(option causes output to be displayed in a format that m\
+ay be reused as input.)144 120 R .2(If a v)5.2 F .2(ariable name is)-.25
+F(follo)144 132 Q .133(wed by =)-.25 F F2(wor)A(d)-.37 E F0 2.633(,t)C
+.133(he v)-2.633 F .133(alue of the v)-.25 F .133(ariable is set to)-.25
+F F2(wor)2.633 E(d)-.37 E F0 5.133(.T)C .133
+(he return status is 0 unless an in)-5.133 F -.25(va)-.4 G(lid).25 E .26
+(option is encountered, one of the)144 144 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 156 Q F0
+(that is not a function.)2.68 E F1 -.18(re)108 172.8 S(tur).18 E(n)-.15
+E F0([)2.5 E F2(n)A F0(])A .02(Causes a function to stop e)144 184.8 R
+-.15(xe)-.15 G .02(cuting and return the v).15 F .021
+(alue speci\214ed by)-.25 F F2(n)2.881 E F0 .021(to its caller)2.761 F
+5.021(.I)-.55 G(f)-5.021 E F2(n)2.881 E F0 .021(is omitted,)2.761 F .597
+(the return status is that of the last command e)144 196.8 R -.15(xe)
+-.15 G .596(cuted in the function body).15 F 5.596(.I)-.65 G(f)-5.596 E
+F1 -.18(re)3.096 G(tur).18 E(n)-.15 E F0 .596(is e)3.096 F -.15(xe)-.15
+G(cuted).15 E .267(by a trap handler)144 208.8 R 2.767(,t)-.4 G .267
+(he last command used to determine the status is the last command e)
+-2.767 F -.15(xe)-.15 G .268(cuted be-).15 F .02(fore the trap handler)
+144 220.8 R 5.02(.I)-.55 G(f)-5.02 E F1 -.18(re)2.52 G(tur).18 E(n)-.15
+E F0 .02(is e)2.52 F -.15(xe)-.15 G .02(cuted during a).15 F F1(DEB)2.52
+E(UG)-.1 E F0 .02(trap, the last command used to deter)2.52 F(-)-.2 E
+.885(mine the status is the last command e)144 232.8 R -.15(xe)-.15 G
+.886(cuted by the trap handler before).15 F F1 -.18(re)3.386 G(tur).18 E
+(n)-.15 E F0 -.1(wa)3.386 G 3.386(si).1 G -1.9 -.4(nv o)-3.386 H -.1(ke)
+.4 G 3.386(d. If).1 F F1 -.18(re)144 244.8 S(tur).18 E(n)-.15 E F0 .628
+(is used outside a function, b)3.128 F .628(ut during e)-.2 F -.15(xe)
+-.15 G .628(cution of a script by the).15 F F1(.)3.127 E F0(\()5.627 E
+F1(sour)A(ce)-.18 E F0 3.127(\)c)C .627(ommand, it)-3.127 F .588
+(causes the shell to stop e)144 256.8 R -.15(xe)-.15 G .588
+(cuting that script and return either).15 F F2(n)3.448 E F0 .589
+(or the e)3.329 F .589(xit status of the last com-)-.15 F .326(mand e)
+144 268.8 R -.15(xe)-.15 G .326(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 .325
+(is supplied, the return v)2.826 F .325(alue is)-.25 F .444
+(its least signi\214cant 8 bits.)144 280.8 R .444
+(The return status is non-zero if)5.444 F F1 -.18(re)2.945 G(tur).18 E
+(n)-.15 E F0 .445(is supplied a non-numeric ar)2.945 F(gu-)-.18 E .381
+(ment, or is used outside a function and not during e)144 292.8 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.38(.A)C .68 -.15(ny c)-5.38 H(om-).15 E
+.749(mand associated with the)144 304.8 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 .75(cution resumes after the function).15 F(or script.)144 316.8 Q F1
+(set)108 333.6 Q F0([)2.5 E F1(\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1
+<ad6f>-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1<adad>-2.5 E F0 2.5
+(][)C F1<ad>-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1
+(set)108 345.6 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 F1<adad>-2.5 E F0 2.5(][)C F1
+<ad>-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144
+357.6 S .574(thout options, display the name and v).4 F .574
+(alue of each shell v)-.25 F .573
+(ariable in a format that can be reused)-.25 F .113
+(as input for setting or resetting the currently-set v)144 369.6 R 2.613
+(ariables. Read-only)-.25 F -.25(va)2.613 G .113
+(riables cannot be reset.).25 F(In)5.113 E F2 1.032(posix mode)144 381.6
+R F0 3.532(,o)C 1.032(nly shell v)-3.532 F 1.032(ariables are listed.)
+-.25 F 1.032(The output is sorted according to the current locale.)6.032
+F .58(When options are speci\214ed, the)144 393.6 R 3.081(ys)-.15 G .581
+(et or unset shell attrib)-3.081 F 3.081(utes. An)-.2 F 3.081(ya)-.15 G
+-.18(rg)-3.081 G .581(uments remaining after op-).18 F .161
+(tion processing are treated as v)144 405.6 R .161
+(alues for the positional parameters and are assigned, in order)-.25 F
+2.66(,t)-.4 G(o)-2.66 E F1($1)2.66 E F0(,)A F1($2)144 417.6 Q 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 429.6 Q F0
+1.377(Each v)184 429.6 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.378(xport attrib)-.15 F
+1.378(ute and)-.2 F(mark)184 441.6 Q(ed for e)-.1 E(xport to the en)-.15
+E(vironment of subsequent commands.)-.4 E F1<ad62>144 453.6 Q F0 .132
+(Report the status of terminated background jobs immediately)184 453.6 R
+2.632(,r)-.65 G .131(ather than before the ne)-2.632 F(xt)-.15 E
+(primary prompt.)184 465.6 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 477.6 Q F0
+.087(Exit immediately if a)184 477.6 R F2(pipeline)2.587 E F0 .087
+(\(which may consist of a single)2.587 F F2 .088(simple command)2.588 F
+F0 .088(\), a)B F2(list)2.588 E F0 2.588(,o)C(r)-2.588 E(a)184 489.6 Q
+F2 .86(compound command)3.36 F F0(\(see)3.36 E/F3 9/Times-Bold@0 SF .86
+(SHELL GRAMMAR)3.36 F F0(in)3.11 E F2(bash\(1\))3.36 E F0 .86(\), e)B
+.86(xits with a non-zero sta-)-.15 F 2.852(tus. The)184 501.6 R .352
+(shell does not e)2.852 F .352(xit if the command that f)-.15 F .353
+(ails is part of the command list imme-)-.1 F 1.108(diately follo)184
+513.6 R 1.108(wing a)-.25 F F1(while)3.608 E F0(or)3.608 E F1(until)
+3.608 E F0 -.1(ke)3.608 G(yw)-.05 E 1.107(ord, part of the test follo)
+-.1 F 1.107(wing the)-.25 F F1(if)3.607 E F0(or)3.607 E F1(elif)3.607 E
+F0(re-)3.607 E(serv)184 525.6 Q .279(ed w)-.15 F .279(ords, part of an)
+-.1 F 2.779(yc)-.15 G .279(ommand e)-2.779 F -.15(xe)-.15 G .279
+(cuted in a).15 F F1(&&)2.779 E F0(or)2.779 E F1(||)2.78 E F0 .28
+(list e)2.78 F .28(xcept the command fol-)-.15 F(lo)184 537.6 Q .703
+(wing the \214nal)-.25 F F1(&&)3.203 E F0(or)3.203 E F1(||)3.203 E F0
+3.203(,a)C 1.003 -.15(ny c)-3.203 H .703(ommand in a pipeline b).15 F
+.703(ut the last, or if the command')-.2 F(s)-.55 E .476(return v)184
+549.6 R .476(alue is being in)-.25 F -.15(ve)-.4 G .476(rted with).15 F
+F1(!)2.976 E F0 5.476(.I)C 2.976(fac)-5.476 G .476
+(ompound command other than a subshell re-)-2.976 F .418
+(turns a non-zero status because a command f)184 561.6 R .418
+(ailed while)-.1 F F1<ad65>2.918 E F0 -.1(wa)2.918 G 2.918(sb).1 G .417
+(eing ignored, the shell)-2.918 F .472(does not e)184 573.6 R 2.972
+(xit. A)-.15 F .472(trap on)2.972 F F1(ERR)2.972 E F0 2.972(,i)C 2.972
+(fs)-2.972 G .472(et, is e)-2.972 F -.15(xe)-.15 G .473
+(cuted before the shell e).15 F 2.973(xits. This)-.15 F .473(option ap-)
+2.973 F 2.114(plies to the shell en)184 585.6 R 2.113
+(vironment and each subshell en)-.4 F 2.113(vironment separately \(see)
+-.4 F F3(COM-)4.613 E .675(MAND EXECUTION ENVIR)184 597.6 R(ONMENT)-.27
+E F0(in)2.925 E F2(bash\(1\))3.175 E F0 .675
+(\), and may cause subshells to e)B .676(xit be-)-.15 F(fore e)184 609.6
+Q -.15(xe)-.15 G(cuting all the commands in the subshell.).15 E .999
+(If a compound command or shell function e)184 627.6 R -.15(xe)-.15 G
+.999(cutes in a conte).15 F .998(xt where)-.15 F F1<ad65>3.498 E F0 .998
+(is being ig-)3.498 F .089(nored, none of the commands e)184 639.6 R
+-.15(xe)-.15 G .089(cuted within the compound command or function body)
+.15 F .503(will be af)184 651.6 R .503(fected by the)-.25 F F1<ad65>
+3.002 E F0 .502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f)
+-3.002 E F1<ad65>3.002 E F0 .502(is set and a command returns a f)3.002
+F .502(ailure sta-)-.1 F 4.183(tus. If)184 663.6 R 4.183(ac)4.183 G
+1.683(ompound command or shell function sets)-4.183 F F1<ad65>4.184 E F0
+1.684(while e)4.184 F -.15(xe)-.15 G 1.684(cuting in a conte).15 F(xt)
+-.15 E(where)184 675.6 Q F1<ad65>3.154 E F0 .654
+(is ignored, that setting will not ha)3.154 F .953 -.15(ve a)-.2 H .953
+-.15(ny e).15 H -.25(ff).15 G .653(ect until the compound command).25 F
+(or the command containing the function call completes.)184 687.6 Q F1
+<ad66>144 699.6 Q F0(Disable pathname e)184 699.6 Q(xpansion.)-.15 E F1
+<ad68>144 711.6 Q F0 .988(Remember the location of commands as the)184
+711.6 R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 F
+-.15(xe)-.15 G 3.488(cution. This).15 F .988(is en-)3.488 F
+(abled by def)184 723.6 Q(ault.)-.1 E(GNU Bash 5.2)72 768 Q(2021 No)
+136.385 E -.15(ve)-.15 G(mber 22).15 E(15)185.545 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<ad6b>144 84 Q F0 .514
+(All ar)184 84 R .514
+(guments in the form of assignment statements are placed in the en)-.18
+F .513(vironment for a)-.4 F
+(command, not just those that precede the command name.)184 96 Q F1
+<ad6d>144 108 Q F0 .148(Monitor mode.)184 108 R .148
+(Job control is enabled.)5.148 F .149(This option is on by def)5.148 F
+.149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .235
+(on systems that support it \(see)184 120 R/F2 9/Times-Bold@0 SF .235
+(JOB CONTR)2.735 F(OL)-.27 E F0(in)2.485 E/F3 10/Times-Italic@0 SF
+(bash\(1\))2.735 E F0 2.735(\). All)B .234(processes run in a sepa-)
+2.735 F .252(rate process group.)184 132 R .252
+(When a background job completes, the shell prints a line containing)
+5.252 F(its e)184 144 Q(xit status.)-.15 E F1<ad6e>144 156 Q F0 .653
+(Read commands b)184 156 R .653(ut do not e)-.2 F -.15(xe)-.15 G .653
+(cute them.).15 F .652(This may be used to check a shell script for)
+5.653 F(syntax errors.)184 168 Q(This is ignored by interacti)5 E .3
+-.15(ve s)-.25 H(hells.).15 E F1<ad6f>144 180 Q F3(option\255name)2.5 E
+F0(The)184 192 Q F3(option\255name)2.5 E F0(can be one of the follo)2.5
+E(wing:)-.25 E F1(allexport)184 204 Q F0(Same as)224 216 Q F1<ad61>2.5 E
+F0(.)A F1(braceexpand)184 228 Q F0(Same as)224 240 Q F1<ad42>2.5 E F0(.)
+A F1(emacs)184 252 Q F0 .089
+(Use an emacs-style command line editing interf)224 252 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 264 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 276 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 288 Q(exit)-.18 E F0(Same as)224 288 Q F1<ad65>2.5 E F0(.)A F1
+(errtrace)184 300 Q F0(Same as)224 300 Q F1<ad45>2.5 E F0(.)A F1
+(functrace)184 312 Q F0(Same as)224 324 Q F1<ad54>2.5 E F0(.)A F1
+(hashall)184 336 Q F0(Same as)224 336 Q F1<ad68>2.5 E F0(.)A F1
+(histexpand)184 348 Q F0(Same as)224 360 Q F1<ad48>2.5 E F0(.)A F1
+(history)184 372 Q F0 1.001(Enable command history)224 372 R 3.502(,a)
+-.65 G 3.502(sd)-3.502 G 1.002(escribed in)-3.502 F F3(bash\(1\))3.502 E
+F0(under)3.502 E F2(HIST)3.502 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0
+SF(.)A F0 1.002(This op-)5.502 F(tion is on by def)224 384 Q
+(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184
+396 Q(eeof)-.18 E F0 1.657(The ef)224 408 R 1.657
+(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF(IGNOREEOF=10)
+4.156 E F0 1.656(had been e)4.156 F -.15(xe)-.15 G(cuted).15 E(\(see)224
+420 Q F1(Shell V)2.5 E(ariables)-.92 E F0(in)2.5 E F3(bash\(1\))2.5 E F0
+(\).)A F1 -.1(ke)184 432 S(yw).1 E(ord)-.1 E F0(Same as)224 444 Q F1
+<ad6b>2.5 E F0(.)A F1(monitor)184 456 Q F0(Same as)224 456 Q F1<ad6d>2.5
+E F0(.)A F1(noclob)184 468 Q(ber)-.1 E F0(Same as)224 480 Q F1<ad43>2.5
+E F0(.)A F1(noexec)184 492 Q F0(Same as)224 492 Q F1<ad6e>2.5 E F0(.)A
+F1(noglob)184 504 Q F0(Same as)224 504 Q F1<ad66>2.5 E F0(.)A F1(nolog)
+184 516 Q F0(Currently ignored.)224 516 Q F1(notify)184 528 Q F0
+(Same as)224 528 Q F1<ad62>2.5 E F0(.)A F1(nounset)184 540 Q F0(Same as)
+224 540 Q F1<ad75>2.5 E F0(.)A F1(onecmd)184 552 Q F0(Same as)224 552 Q
+F1<ad74>2.5 E F0(.)A F1(ph)184 564 Q(ysical)-.15 E F0(Same as)224 564 Q
+F1<ad50>2.5 E F0(.)A F1(pipefail)184 576 Q F0 1.029
+(If set, the return v)224 576 R 1.029(alue of a pipeline is the v)-.25 F
+1.03(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 588
+R 1.136
+(xit with a non-zero status, or zero if all commands in the pipeline)
+-.15 F -.15(ex)224 600 S(it successfully).15 E 5(.T)-.65 G
+(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 612 Q F0
+2.09(Change the beha)224 612 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 2.704(POSIX standard to match the standard \()224
+624 R F3 2.704(posix mode)B F0 5.204(\). See)B F2 2.704(SEE ALSO)5.204 F
+F0(in)4.953 E F3(bash\(1\))224 636 Q F0 1.844
+(for a reference to a document that details ho)4.344 F 4.344(wp)-.25 G
+1.845(osix mode af)-4.344 F(fects)-.25 E(bash')224 648 Q 2.5(sb)-.55 G
+(eha)-2.5 E(vior)-.2 E(.)-.55 E F1(pri)184 660 Q(vileged)-.1 E F0
+(Same as)224 672 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 684 S(rbose).1 E
+F0(Same as)224 684 Q F1<ad76>2.5 E F0(.)A F1(vi)184 696 Q F0 .209
+(Use a vi-style command line editing interf)224 696 R 2.709(ace. This)
+-.1 F .209(also af)2.709 F .209(fects the editing in-)-.25 F(terf)224
+708 Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A
+(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E
+(16)185.545 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/F1 10/Times-Bold@0 SF(xtrace)184 84 Q F0
+(Same as)224 84 Q F1<ad78>2.5 E F0(.)A(If)184 102 Q F1<ad6f>3.052 E F0
+.552(is supplied with no)3.052 F/F2 10/Times-Italic@0 SF(option\255name)
+3.053 E F0 3.053(,t)C .553(he v)-3.053 F .553
+(alues of the current options are printed.)-.25 F(If)5.553 E F1(+o)184
+114 Q F0 1.072(is supplied with no)3.572 F F2(option\255name)3.572 E F0
+3.572(,a)C 1.071(series of)-.001 F F1(set)3.571 E F0 1.071
+(commands to recreate the current)3.571 F
+(option settings is displayed on the standard output.)184 126 Q F1<ad70>
+144 138 Q F0 -.45(Tu)184 138 S 1.071(rn on).45 F F2(privile)4.821 E -.1
+(ge)-.4 G(d).1 E F0 3.572(mode. In)4.341 F 1.072(this mode, the)3.572 F
+/F3 9/Times-Bold@0 SF($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)
+-.27 E F0 1.072(\214les are not pro-)3.322 F 1.501
+(cessed, shell functions are not inherited from the en)184 150 R 1.5
+(vironment, and the)-.4 F F3(SHELLOPTS)4 E/F4 9/Times-Roman@0 SF(,)A F3
+-.27(BA)184 162 S(SHOPTS).27 E F4(,)A F3(CDP)2.774 E -.855(AT)-.666 G(H)
+.855 E F4(,)A F0(and)2.774 E F3(GLOBIGNORE)3.024 E F0 -.25(va)2.774 G
+.524(riables, if the).25 F 3.025(ya)-.15 G .525(ppear in the en)-3.025 F
+(vironment,)-.4 E .38(are ignored.)184 174 R .38
+(If the shell is started with the ef)5.38 F(fecti)-.25 E .679 -.15(ve u)
+-.25 H .379(ser \(group\) id not equal to the real).15 F .461
+(user \(group\) id, and the)184 186 R F1<ad70>2.961 E F0 .461
+(option is not supplied, these actions are tak)2.961 F .462
+(en and the ef)-.1 F(fec-)-.25 E(ti)184 198 Q .695 -.15(ve u)-.25 H .395
+(ser id is set to the real user id.).15 F .395(If the)5.395 F F1<ad70>
+2.895 E F0 .394(option is supplied at startup, the ef)2.895 F(fecti)-.25
+E -.15(ve)-.25 G .386(user id is not reset.)184 210 R -.45(Tu)5.386 G
+.386(rning this option of).45 F 2.886(fc)-.25 G .387(auses the ef)-2.886
+F(fecti)-.25 E .687 -.15(ve u)-.25 H .387(ser and group ids to be).15 F
+(set to the real user and group ids.)184 222 Q F1<ad72>144 234 Q F0
+(Enable restricted shell mode.)184 234 Q
+(This option cannot be unset once it has been set.)5 E F1<ad74>144 246 Q
+F0(Exit after reading and e)184 246 Q -.15(xe)-.15 G
+(cuting one command.).15 E F1<ad75>144 258 Q F0 -.35(Tr)184 258 S .774
+(eat unset v).35 F .773(ariables and parameters other than the special \
+parameters "@" and "*", or)-.25 F .459(array v)184 270 R .459(ariables \
+subscripted with "@" or "*", as an error when performing parameter e)
+-.25 F(x-)-.15 E 2.891(pansion. If)184 282 R -.15(ex)2.891 G .391
+(pansion is attempted on an unset v).15 F .391(ariable or parameter)-.25
+F 2.89(,t)-.4 G .39(he shell prints an)-2.89 F
+(error message, and, if not interacti)184 294 Q -.15(ve)-.25 G 2.5(,e)
+.15 G(xits with a non-zero status.)-2.65 E F1<ad76>144 306 Q F0
+(Print shell input lines as the)184 306 Q 2.5(ya)-.15 G(re read.)-2.5 E
+F1<ad78>144 318 Q F0 .315(After e)184 318 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.236(or arithmetic)184 330 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 342 Q(xpanded ar)-.15 E
+(guments or associated w)-.18 E(ord list.)-.1 E F1<ad42>144 354 Q F0
+1.053(The shell performs brace e)184 354 R 1.053(xpansion \(see)-.15 F
+F1 1.053(Brace Expansion)3.553 F F0(in)3.553 E F2(bash\(1\))3.553 E F0
+3.553(\). This)B 1.053(is on by)3.553 F(def)184 366 Q(ault.)-.1 E F1
+<ad43>144 378 Q F0 .214(If set,)184 378 R F1(bash)2.714 E F0 .214
+(does not o)2.714 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.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F
+3.053(tors. This)184 390 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 402 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
+<ad45>144 414 Q F0 .104(If set, an)184 414 R 2.604(yt)-.15 G .104
+(rap on)-2.604 F F1(ERR)2.604 E F0 .103
+(is inherited by shell functions, command substitutions, and com-)2.604
+F .838(mands e)184 426 R -.15(xe)-.15 G .838(cuted in a subshell en).15
+F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839
+(trap is normally not inherited in)3.339 F(such cases.)184 438 Q F1
+<ad48>144 450 Q F0(Enable)184 450 Q F1(!)3.032 E F0 .532
+(style history substitution.)5.532 F .531(This option is on by def)5.532
+F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 462 Q -.15
+(ve)-.25 G(.).15 E F1<ad50>144 474 Q F0 .959
+(If set, the shell does not resolv)184 474 R 3.459(es)-.15 G .959
+(ymbolic links when e)-3.459 F -.15(xe)-.15 G .96
+(cuting commands such as).15 F F1(cd)3.46 E F0 1.453
+(that change the current w)184 486 R 1.453(orking directory)-.1 F 6.453
+(.I)-.65 G 3.952(tu)-6.453 G 1.452(ses the ph)-3.952 F 1.452
+(ysical directory structure in-)-.05 F 3.334(stead. By)184 498 R(def)
+3.334 E(ault,)-.1 E F1(bash)3.334 E F0(follo)3.334 E .834
+(ws the logical chain of directories when performing com-)-.25 F
+(mands which change the current directory)184 510 Q(.)-.65 E F1<ad54>144
+522 Q F0 .89(If set, an)184 522 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 534 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 546 Q F0
+(traps are normally not inherited in such cases.)2.5 E F1<adad>144 558 Q
+F0 .401(If no ar)184 558 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.4 E(the positional parameters are set to the)184 570 Q F2
+(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
+582 Q F0 .796(Signal the end of options, cause all remaining)184 582 R
+F2(ar)3.297 E(g)-.37 E F0 3.297(st)C 3.297(ob)-3.297 G 3.297(ea)-3.297 G
+.797(ssigned to the positional pa-)-3.297 F 3.022(rameters. The)184 594
+R F1<ad78>3.022 E F0(and)3.022 E F1<ad76>3.022 E F0 .522
+(options are turned of)3.022 F 3.022(f. If)-.25 F .522(there are no)
+3.022 F F2(ar)3.022 E(g)-.37 E F0 .521(s, the positional pa-)B
+(rameters remain unchanged.)184 606 Q .425(The options are of)144 622.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 .178
+(to be turned of)144 634.8 R 2.678(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 .177(cation of the shell.).2 F(The)5.177 E .066
+(current set of options may be found in)144 646.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 .067(lid option).25 F
+(is encountered.)144 658.8 Q F1(shift)108 675.6 Q F0([)2.5 E F2(n)A F0
+(])A .429(The positional parameters from)144 687.6 R F2(n)2.929 E F0
+.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G
+.428(rameters represented by the num-).15 F(bers)144 699.6 Q F1($#)2.582
+E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0<ad>A F2(n)A F0 .082
+(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga)
+-.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to)
+.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06
+(is 0, no parameters are changed.)144 711.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 .143(positional parameters are not changed.)144 723.6 R
+.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0
+.144(is greater than)2.884 F F1($#)2.644 E F0(GNU Bash 5.2)72 768 Q
+(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(17)185.545 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(or less than zero; otherwise 0.)144 84 Q/F1
+10/Times-Bold@0 SF(shopt)108 100.8 Q F0([)2.5 E F1(\255pqsu)A F0 2.5(][)
+C F1<ad6f>-2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(optname)-2.5 E F0
+(...])2.5 E -.8(To)144 112.8 S .64(ggle the v).8 F .639
+(alues of settings controlling optional shell beha)-.25 F(vior)-.2 E
+5.639(.T)-.55 G .639(he settings can be either those)-5.639 F .374
+(listed belo)144 124.8 R 1.674 -.65(w, o)-.25 H 1.174 -.4(r, i).65 H
+2.874(ft).4 G(he)-2.874 E F1<ad6f>2.874 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 .375(option to the)2.875 F F1(set)2.875 E F0 -.2
+(bu)2.875 G .375(iltin com-).2 F 2.566(mand. W)144 136.8 R .066
+(ith no options, or with the)-.4 F F1<ad70>2.566 E F0 .066
+(option, a list of all settable options is displayed, with an in-)2.566
+F .074(dication of whether or not each is set; if)144 148.8 R F2
+(optnames)2.574 E F0 .074
+(are supplied, the output is restricted to those op-)2.574 F 3.105
+(tions. The)144 160.8 R F1<ad70>3.105 E F0 .605(option causes output to\
+ be displayed in a form that may be reused as input.)3.105 F(Other)5.605
+E(options ha)144 172.8 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad73>144 184.8 Q F0(Enable \(set\) each)180
+184.8 Q F2(optname)2.5 E F0(.)A F1<ad75>144 196.8 Q F0
+(Disable \(unset\) each)180 196.8 Q F2(optname)2.5 E F0(.)A F1<ad71>144
+208.8 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\
+tus indicates whether the)180 208.8 R F2(optname)2.504 E F0(is)2.504 E
+.256(set or unset.)180 220.8 R .256(If multiple)5.256 F F2(optname)2.756
+E F0(ar)2.756 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.755(,t)C .255
+(he return status is zero if)-2.755 F(all)180 232.8 Q F2(optnames)2.5 E
+F0(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 244.8 Q F0
+(Restricts the v)180 244.8 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 .624(If either)144 261.6 R F1
+<ad73>3.124 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 .984
+(set or unset, respecti)144 273.6 R -.15(ve)-.25 G(ly).15 E 5.984(.U)
+-.65 G .984(nless otherwise noted, the)-5.984 F F1(shopt)3.484 E F0 .983
+(options are disabled \(unset\) by de-)3.483 F -.1(fa)144 285.6 S(ult.)
+.1 E 1.544(The return status when listing options is zero if all)144
+302.4 R F2(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.)
+4.045 F .696
+(When setting or unsetting options, the return status is zero unless an)
+144 314.4 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695
+(alid shell)-.25 F(option.)144 326.4 Q(The list of)144 343.2 Q F1(shopt)
+2.5 E F0(options is:)2.5 E F1(assoc_expand_once)144 361.2 Q F0 1.944
+(If set, the shell suppresses multiple e)184 373.2 R -.25(va)-.25 G
+1.945(luation of associati).25 F 2.245 -.15(ve a)-.25 H 1.945
+(rray subscripts during).15 F .885(arithmetic e)184 385.2 R .885
+(xpression e)-.15 F -.25(va)-.25 G .885(luation, while e).25 F -.15(xe)
+-.15 G .885(cuting b).15 F .885(uiltins that can perform v)-.2 F .885
+(ariable as-)-.25 F(signments, and while e)184 397.2 Q -.15(xe)-.15 G
+(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E F1
+(autocd)144 409.2 Q F0 .199
+(If set, a command name that is the name of a directory is e)184 409.2 R
+-.15(xe)-.15 G .2(cuted as if it were the ar).15 F(gu-)-.18 E
+(ment to the)184 421.2 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 433.2 Q(ars)-.1 E F0 .156(If set, an ar)184 445.2 R .156
+(gument to the)-.18 F F1(cd)2.656 E F0 -.2(bu)2.656 G .155
+(iltin command that is not a directory is assumed to be the).2 F
+(name of a v)184 457.2 Q(ariable whose v)-.25 E
+(alue is the directory to change to.)-.25 E F1(cdspell)144 469.2 Q F0
+1.055
+(If set, minor errors in the spelling of a directory component in a)184
+469.2 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988
+(corrected. The)184 481.2 R 1.488(errors check)3.988 F 1.487
+(ed for are transposed characters, a missing character)-.1 F 3.987(,a)
+-.4 G(nd)-3.987 E .77(one character too man)184 493.2 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 505.2 Q
+(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.)
+.15 E F1(checkhash)144 517.2 Q F0 .737(If set,)184 529.2 R F1(bash)3.237
+E F0 .736(checks that a command found in the hash table e)3.237 F .736
+(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184
+541.2 Q(If a hashed command no longer e)5 E
+(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 553.2
+Q F0 .448(If set,)184 565.2 R F1(bash)2.948 E F0 .448
+(lists the status of an)2.948 F 2.949(ys)-.15 G .449
+(topped and running jobs before e)-2.949 F .449(xiting an interacti)-.15
+F -.15(ve)-.25 G 2.662(shell. If)184 577.2 R(an)2.662 E 2.661(yj)-.15 G
+.161(obs are running, this causes the e)-2.661 F .161
+(xit to be deferred until a second e)-.15 F .161(xit is at-)-.15 F 1.091
+(tempted without an interv)184 589.2 R 1.091(ening command \(see)-.15 F
+/F3 9/Times-Bold@0 SF 1.091(JOB CONTR)3.591 F(OL)-.27 E F0(in)3.341 E F2
+(bash\(1\))3.591 E F0 3.591(\). The)B(shell)3.591 E(al)184 601.2 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 613.2 Q F0 1.09(If set,)184
+625.2 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 637.2 Q 3.35(,u)-.65 G .85
+(pdates the v)-3.35 F .85(alues of)-.25 F F3(LINES)3.35 E F0(and)3.1 E
+F3(COLUMNS)3.35 E/F4 9/Times-Roman@0 SF(.)A F0 .85
+(This option is enabled by de-)5.35 F -.1(fa)184 649.2 S(ult.).1 E F1
+(cmdhist)144 661.2 Q F0 .173(If set,)184 661.2 R F1(bash)2.673 E F0 .173
+(attempts to sa)2.673 F .473 -.15(ve a)-.2 H .172
+(ll lines of a multiple-line command in the same history en-).15 F(try)
+184 673.2 Q 5.596(.T)-.65 G .597(his allo)-5.596 F .597
+(ws easy re-editing of multi-line commands.)-.25 F .597
+(This option is enabled by de-)5.597 F -.1(fa)184 685.2 S .052(ult, b).1
+F .052(ut only has an ef)-.2 F .052
+(fect if command history is enabled, as described in)-.25 F F2
+(bash\(1\))2.552 E F0(under)2.552 E F3(HIST)184 697.2 Q(OR)-.162 E(Y)
+-.315 E F4(.)A F0(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G
+(mber 22).15 E(18)185.545 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(compat31)144 84 Q
+(compat32)144 96 Q(compat40)144 108 Q(compat41)144 120 Q(compat42)144
+132 Q(compat43)144 144 Q(compat44)144 156 Q(compat50)144 168 Q F0 .889
+(These control aspects of the shell')184 180 R 3.389(sc)-.55 G .889
+(ompatibility mode \(see)-3.389 F/F2 9/Times-Bold@0 SF .889(SHELL COMP)
+3.389 F -.855(AT)-.666 G(IBILITY).855 E(MODE)184 192 Q F0(in)2.25 E/F3
+10/Times-Italic@0 SF(bash\(1\))2.5 E F0(\).)A F1(complete_fullquote)144
+208.8 Q F0 .654(If set,)184 220.8 R F1(bash)3.153 E F0 .653(quotes all \
+shell metacharacters in \214lenames and directory names when per)3.153 F
+(-)-.2 E 1.524(forming completion.)184 232.8 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
+244.8 R .028(metacharacters appear in shell v)184 256.8 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 268.8 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 280.8 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
+292.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 304.8 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 321.6 Q(expand)-.18 E F0 .486
+(If set,)184 333.6 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
+345.6 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 357.6 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 374.4 Q F0 .858(If set,)184
+374.4 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 386.4 Q(xist.)-.15
+E F1(dotglob)144 403.2 Q F0 .165(If set,)184 403.2 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 415.2 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 432 Q F0 .516(If set, a non-interacti)184
+432 R .816 -.15(ve s)-.25 H .516(hell will not e).15 F .516
+(xit if it cannot e)-.15 F -.15(xe)-.15 G .517
+(cute the \214le speci\214ed as an ar).15 F(-)-.2 E(gument to the)184
+444 Q 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 460.8 Q F0 .743
+(If set, aliases are e)184 472.8 R .743(xpanded as described in)-.15 F
+F3(bash\(1\))3.243 E F0(under)3.243 E F2(ALIASES)3.243 E/F4 9
+/Times-Roman@0 SF(.)A F0 .742(This option is en-)5.243 F(abled by def)
+184 484.8 Q(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1
+(extdeb)144 501.6 Q(ug)-.2 E F0 .17(If set at shell in)184 513.6 R -.2
+(vo)-.4 G .17(cation, or in a shell startup \214le, arrange to e).2 F
+-.15(xe)-.15 G .17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.082
+(before the shell starts, identical to the)184 525.6 R F1<adad646562>
+3.582 E(ugger)-.2 E F0 3.581(option. If)3.581 F 1.081(set after in)3.581
+F -.2(vo)-.4 G 1.081(cation, be-).2 F(ha)184 537.6 Q
+(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184
+554.4 Q F0(The)220 554.4 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 566.4
+Q(gument.)-.18 E F1(2.)184 583.2 Q F0 1.667(If the command run by the)
+220 583.2 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 595.2 Q -.15(xe)-.15 G(cuted.).15 E F1
+(3.)184 612 Q F0 .84(If the command run by the)220 612 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 624 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 636 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 652.8 Q F2 -.27(BA)220 652.8 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(in)220 664.8 Q
+F3(bash\(1\))2.5 E F0(\).)A F1(5.)184 681.6 Q F0 1.637(Function tracing\
+ is enabled: command substitution, shell functions, and sub-)220 681.6 R
+(shells in)220 693.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E
+F1(\()2.5 E F3(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 710.4
+Q F0 1.082(Error tracing is enabled: command substitution, shell functi\
+ons, and subshells)220 710.4 R(in)220 722.4 Q -.2(vo)-.4 G -.1(ke).2 G
+2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F3(command)2.5 E F1(\))2.5 E F0
+(inherit the)2.5 E F1(ERR)2.5 E F0(trap.)2.5 E(GNU Bash 5.2)72 768 Q
+(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(19)185.545 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(extglob)144 84 Q F0
+.273(If set, the e)184 84 R .273
+(xtended pattern matching features described in)-.15 F/F2 10
+/Times-Italic@0 SF(bash\(1\))2.772 E F0(under)2.772 E F1 -.1(Pa)2.772 G
+.272(thname Ex-).1 F(pansion)184 96 Q F0(are enabled.)2.5 E F1(extquote)
+144 112.8 Q F0 .86(If set,)184 124.8 R F1($)3.36 E F0<08>A F2(string)A
+F0 3.36<0861>C(nd)-3.36 E F1($)3.36 E F0(")A F2(string)A F0 3.36("q)C
+.86(uoting is performed within)-3.36 F F1(${)3.36 E F2(par)A(ameter)-.15
+E F1(})A F0 -.15(ex)3.36 G .86(pansions en-).15 F
+(closed in double quotes.)184 136.8 Q(This option is enabled by def)5 E
+(ault.)-.1 E F1(failglob)144 153.6 Q F0 .243(If set, patterns which f)
+184 153.6 R .243(ail to match \214lenames during pathname e)-.1 F .243
+(xpansion result in an e)-.15 F(x-)-.15 E(pansion error)184 165.6 Q(.)
+-.55 E F1 -.25(fo)144 182.4 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
+.936(If set, the suf)184 194.4 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 206.4 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 3.293(pletions. See)184 218.4 R
+F3 .793(SHELL V)3.293 F(ARIABLES)-1.215 E F0(in)3.043 E F2(bash\(1\))
+3.293 E F0 .794(for a description of)3.293 F F3(FIGNORE)3.294 E/F4 9
+/Times-Roman@0 SF(.)A F0 .794(This op-)5.294 F(tion is enabled by def)
+184 230.4 Q(ault.)-.1 E F1(globasciiranges)144 247.2 Q F0 2.519
+(If set, range e)184 259.2 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 271.2 Q F0(in)3.115 E F2(bash\(1\))3.365 E F0 3.365(\)b)C
+(eha)-3.365 E 1.165 -.15(ve a)-.2 H 3.365(si).15 G 3.365(fi)-3.365 G
+3.365(nt)-3.365 G .866(he traditional C locale when performing compar)
+-3.365 F(-)-.2 E 2.668(isons. That)184 283.2 R .168
+(is, the current locale')2.668 F 2.668(sc)-.55 G .168
+(ollating sequence is not tak)-2.668 F .168(en into account, so)-.1 F F1
+(b)2.668 E F0(will)2.668 E .562(not collate between)184 295.2 R F1(A)
+3.062 E F0(and)3.062 E F1(B)3.062 E F0 3.062(,a)C .562(nd upper)-3.062 F
+.562(-case and lo)-.2 F(wer)-.25 E .563
+(-case ASCII characters will col-)-.2 F(late together)184 307.2 Q(.)-.55
+E F1(globskipdots)144 324 Q F0 .285(If set, pathname e)184 336 R .285
+(xpansion will ne)-.15 F -.15(ve)-.25 G 2.785(rm).15 G .285
+(atch the \214lenames)-2.785 F F1 -.63(``)2.785 G -.55(.').63 G(')-.08 E
+F0(and)5.285 E F1 -.63(``)2.784 G(..).63 E -.63('')-.55 G F0 2.784(,e)
+.63 G -.15(ve)-3.034 G 2.784(ni).15 G 2.784(ft)-2.784 G .284(he pat-)
+-2.784 F(tern be)184 348 Q(gins with a)-.15 E F1 -.63(``)2.5 G -.55(.')
+.63 G(')-.08 E F0 5(.T)C(his option is enabled by def)-5 E(ault.)-.1 E
+F1(globstar)144 364.8 Q F0 .518(If set, the pattern)184 364.8 R F1(**)
+3.018 E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F
+.519(xt will match all \214les and zero)-.15 F .432
+(or more directories and subdirectories.)184 376.8 R .431
+(If the pattern is follo)5.432 F .431(wed by a)-.25 F F1(/)2.931 E F0
+2.931(,o)C .431(nly directories)-2.931 F(and subdirectories match.)184
+388.8 Q F1(gnu_errfmt)144 405.6 Q F0(If set, shell error messages are w\
+ritten in the standard GNU error message format.)184 417.6 Q F1
+(histappend)144 434.4 Q F0 .676
+(If set, the history list is appended to the \214le named by the v)184
+446.4 R .676(alue of the)-.25 F F3(HISTFILE)3.177 E F0 -.25(va)2.927 G
+(ri-).25 E(able when the shell e)184 458.4 Q(xits, rather than o)-.15 E
+-.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 475.2 Q(eedit)
+-.18 E F0 .576(If set, and)184 487.2 R F1 -.18(re)3.076 G(adline).18 E
+F0 .575(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15
+G .575(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F
+(tory substitution.)184 499.2 Q F1(histv)144 516 Q(erify)-.1 E F0 .402
+(If set, and)184 528 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 .662(passed to the shell parser)184 540 R 5.662(.I)-.55 G .661
+(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161
+G(adline).18 E F0(editing)3.161 E -.2(bu)184 552 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 568.8 Q F0 1.181(If set, and)184 580.8 R F1 -.18(re)
+3.681 G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0
+1.182(will attempt to perform hostname completion)3.682 F .503(when a w)
+184 592.8 R .503(ord containing a)-.1 F F1(@)3.003 E F0 .503
+(is being completed \(see)3.003 F F1(Completing)3.003 E F0(under)3.003 E
+F3(READLINE)3.003 E F0(in)2.752 E F2(bash\(1\))184 604.8 Q F0 2.5
+(\). This)B(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 621.6 Q
+F0(If set,)184 633.6 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 650.4 Q(exit)-.18 E
+F0 .219(If set, command substitution inherits the v)184 662.4 R .219
+(alue of the)-.25 F F1(err)2.719 E(exit)-.18 E F0 .22
+(option, instead of unsetting)2.719 F(it in the subshell en)184 674.4 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 691.2 Q -.1(ve)-.1 G(_comments)
+.1 E F0 .33(If set, allo)184 703.2 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 .39
+(that line to be ignored in an interacti)184 715.2 R .69 -.15(ve s)-.25
+H .39(hell \(see).15 F F3(COMMENTS)2.89 E F0(in)2.64 E F2(bash\(1\))2.89
+E F0 2.89(\). This)B(option)2.89 E(is enabled by def)184 727.2 Q(ault.)
+-.1 E(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15
+E(20)185.545 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(lastpipe)144 84 Q F0
+.066(If set, and job control is not acti)184 84 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 96 Q(vironment.)-.4
+E F1(lithist)144 112.8 Q F0 .654(If set, and the)184 112.8 R F1(cmdhist)
+3.154 E F0 .654(option is enabled, multi-line commands are sa)3.154 F
+-.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history)-3.155 F
+(with embedded ne)184 124.8 Q
+(wlines rather than using semicolon separators where possible.)-.25 E F1
+(localv)144 141.6 Q(ar_inherit)-.1 E F0 .422(If set, local v)184 153.6 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
+165.6 S .173(ists at a pre).15 F .173(vious scope before an)-.25 F 2.673
+(yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .174
+(The nameref attrib)5.174 F .174(ute is not)-.2 F(inherited.)184 177.6 Q
+F1(localv)144 194.4 Q(ar_unset)-.1 E F0 .329(If set, calling)184 206.4 R
+F1(unset)2.829 E F0 .329(on local v)2.829 F .329(ariables in pre)-.25 F
+.328(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 218.4 R(v-)-.2 E(ior of unsetting local v)184 230.4 Q
+(ariables at the current function scope.)-.25 E F1(login_shell)144 247.2
+Q F0 .693
+(The shell sets this option if it is started as a login shell \(see)184
+259.2 R/F2 9/Times-Bold@0 SF(INV)3.192 E(OCA)-.405 E(TION)-.855 E F0(in)
+2.942 E/F3 10/Times-Italic@0 SF(bash\(1\))3.192 E F0(\).)A(The v)184
+271.2 Q(alue may not be changed.)-.25 E F1(mailwar)144 288 Q(n)-.15 E F0
+.814(If set, and a \214le that)184 300 R F1(bash)3.314 E F0 .815
+(is checking for mail has been accessed since the last time it)3.314 F
+-.1(wa)184 312 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
+328.8 Q F0 .325(If set, and)184 340.8 R F1 -.18(re)2.825 G(adline).18 E
+F0 .325(is being used,)2.825 F F1(bash)2.824 E F0 .324
+(will not attempt to search the)2.824 F F2 -.666(PA)2.824 G(TH)-.189 E
+F0 .324(for possible)2.574 F
+(completions when completion is attempted on an empty line.)184 352.8 Q
+F1(nocaseglob)144 369.6 Q F0 .436(If set,)184 381.6 R F1(bash)2.936 E F0
+.436(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f)
+-.25 H .437(ashion when performing pathname).05 F -.15(ex)184 393.6 S
+(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(in)2.5 E
+F3(bash\(1\))2.5 E F0(\).)A F1(nocasematch)144 410.4 Q F0 1.194(If set,)
+184 422.4 R F1(bash)3.694 E F0 1.194
+(matches patterns in a case\255insensiti)3.694 F 1.493 -.15(ve f)-.25 H
+1.193(ashion when performing matching).05 F .551(while e)184 434.4 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 446.4 S .623(rd e).1 F .623(xpansions, or when \214ltering\
+ possible completions as part of programmable com-)-.15 F(pletion.)184
+458.4 Q F1(noexpand_translation)144 475.2 Q F0 1.117(If set,)184 487.2 R
+F1(bash)3.617 E F0 1.117(encloses the translated results of $"..." quot\
+ing in single quotes instead of)3.617 F(double quotes.)184 499.2 Q
+(If the string is not translated, this has no ef)5 E(fect.)-.25 E F1
+(nullglob)144 516 Q F0 .319(If set,)184 528 R F1(bash)2.819 E F0(allo)
+2.819 E .319(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)
+2.818 G .318(thname Expansion).1 F F0(in)2.818 E F3(bash\(1\))2.818 E F0
+(\))A(to e)184 540 Q(xpand to a null string, rather than themselv)-.15 E
+(es.)-.15 E F1(patsub_r)144 556.8 Q(eplacement)-.18 E F0 .105(If set,)
+184 568.8 R F1(bash)2.605 E F0 -.15(ex)2.605 G .105
+(pands occurrences of).15 F F1(&)2.606 E F0 .106
+(in the replacement string of pattern substitution to)2.606 F .989
+(the te)184 580.8 R .988(xt matched by the pattern, as described under)
+-.15 F F1 -.1(Pa)3.488 G .988(rameter Expansion).1 F F0(in)3.488 E F3
+(bash\(1\))3.488 E F0(.)A(This option is enabled by def)184 592.8 Q
+(ault.)-.1 E F1(pr)144 609.6 Q(ogcomp)-.18 E F0 2.802
+(If set, the programmable completion f)184 621.6 R 2.802
+(acilities \(see)-.1 F F1(Pr)5.302 E 2.803(ogrammable Completion)-.18 F
+F0(in)5.303 E F3(bash\(1\))184 633.6 Q F0 2.5(\)a)C(re enabled.)-2.5 E
+(This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 650.4 Q
+(ogcomp_alias)-.18 E F0 2.124
+(If set, and programmable completion is enabled,)184 662.4 R F1(bash)
+4.624 E F0 2.124(treats a command name that)4.624 F(doesn')184 674.4 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 686.4 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 698.4 Q(xpanded alias.)-.15 E
+(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E
+(21)185.545 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(pr)144 84 Q(omptv)
+-.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)184 96 R 1.448
+(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic)
+-.15 F -.15(ex)184 108 S 1.834(pansion, and quote remo).15 F -.25(va)
+-.15 G 4.334(la).25 G 1.834(fter being e)-4.334 F 1.834
+(xpanded as described in)-.15 F/F2 9/Times-Bold@0 SF(PR)4.333 E(OMPTING)
+-.27 E F0(in)4.083 E/F3 10/Times-Italic@0 SF(bash\(1\))184 120 Q F0 5
+(.T)C(his option is enabled by def)-5 E(ault.)-.1 E F1 -.18(re)144 136.8
+S(stricted_shell).18 E F0 .329
+(The shell sets this option if it is started in restricted mode \(see)
+184 148.8 R F2 .329(RESTRICTED SHELL)2.829 F F0(in)2.58 E F3(bash\(1\))
+184 160.8 Q F0 2.731(\). The)B -.25(va)2.731 G .231
+(lue may not be changed.).25 F .23
+(This is not reset when the startup \214les are e)5.231 F(x-)-.15 E
+(ecuted, allo)184 172.8 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 189.6 Q(erbose)-.1 E F0 .501(If set, the)184 201.6 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 213.6 Q F1(sour)
+144 230.4 Q(cepath)-.18 E F0 .771(If set, the)184 242.4 R F1(.)3.271 E
+F0(\()3.271 E F1(sour)A(ce)-.18 E 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 254.4 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E
+(ault.)-.1 E F1 -.1(va)144 271.2 S(rr).1 E(edir_close)-.18 E F0 .74(If \
+set, the shell automatically closes \214le descriptors assigned using t\
+he)184 283.2 R F3({varname})3.24 E F0(redi-)3.24 E .908
+(rection syntax \(see)184 295.2 R F2(REDIRECTION)3.408 E F0(in)3.157 E
+F3(bash\(1\))3.407 E F0 3.407(\)i)C .907(nstead of lea)-3.407 F .907
+(ving them open when the)-.2 F(command completes.)184 307.2 Q F1
+(xpg_echo)144 324 Q F0(If set, the)184 336 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 352.8 Q F0([)2.5 E F1<ad66>A F0(])A .909(Suspend the e)
+144 364.8 R -.15(xe)-.15 G .909(cution of this shell until it recei).15
+F -.15(ve)-.25 G 3.41(sa).15 G F2(SIGCONT)A F0 3.41(signal. A)3.16 F .91
+(login shell, or a shell)3.41 F .753
+(without job control enabled, cannot be suspended; the)144 376.8 R F1
+<ad66>3.253 E F0 .752(option can be used to o)3.252 F -.15(ve)-.15 G
+.752(rride this and).15 F .107(force the suspension.)144 388.8 R .107(T\
+he return status is 0 unless the shell is a login shell or job control \
+is not en-)5.107 F(abled and)144 400.8 Q F1<ad66>2.5 E F0
+(is not supplied.)2.5 E F1(test)108 417.6 Q F3 -.2(ex)2.5 G(pr).2 E F1
+([)108 429.6 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .878
+(Return a status of 0 \(true\) or 1 \(f)144 429.6 R .877
+(alse\) depending on the e)-.1 F -.25(va)-.25 G .877
+(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)144 441.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 1.232
+(primaries described in)144 453.6 R F3(bash\(1\))3.732 E F0(under)3.731
+E F2(CONDITION)3.731 E 1.231(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF
+(.)A F1(test)5.731 E F0 1.231(does not accept an)3.731 F(y)-.15 E
+(options, nor does it accept and ignore an ar)144 465.6 Q(gument of)-.18
+E F1<adad>2.5 E F0(as signifying the end of options.)2.5 E .785
+(Expressions may be combined using the follo)144 483.6 R .786
+(wing operators, listed in decreasing order of prece-)-.25 F 3.412
+(dence. The)144 495.6 R -.25(eva)3.412 G .912
+(luation depends on the number of ar).25 F .911(guments; see belo)-.18 F
+4.711 -.65(w. O)-.25 H .911(perator precedence is).65 F
+(used when there are \214v)144 507.6 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G
+(ore ar)-2.5 E(guments.)-.18 E F1(!)144 519.6 Q F3 -.2(ex)2.5 G(pr).2 E
+F0 -.35(Tr)180 519.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 531.6 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0
+.26(Returns the v)180 531.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 543.6 Q F3 -.2
+(ex)144 555.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 567.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 F3 -.2(ex)144 579.6 S
+(pr1).2 E F0<ad>2.5 E F1(o)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180
+591.6 S(ue if either).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F3 -.2
+(ex)2.5 G(pr2).2 E F0(is true.)2.52 E F1(test)144 608.4 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 626.4 S -.18(rg)-2.5 G(uments).18 E(The e)
+180 638.4 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 650.4 S -.18
+(rg)-2.5 G(ument).18 E(The e)180 662.4 Q
+(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18
+E 2.5(2a)144 674.4 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
+180 686.4 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 1.682(If the \214rst ar)180 698.4 R 1.683
+(gument is one of the unary conditional operators listed in)-.18 F F3
+(bash\(1\))4.183 E F0(under)4.183 E F2(CONDITION)180 710.4 Q .122
+(AL EXPRESSIONS)-.18 F F4(,)A F0 .122(the e)2.372 F .122
+(xpression is true if the unary test is true.)-.15 F .121
+(If the \214rst)5.121 F(ar)180 722.4 Q(gument is not a v)-.18 E
+(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E
+(xpression is f)-.15 E(alse.)-.1 E(GNU Bash 5.2)72 768 Q(2021 No)136.385
+E -.15(ve)-.15 G(mber 22).15 E(22)185.545 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 2.5(3a)144 84 S -.18(rg)-2.5 G(uments).18 E
+.236(The follo)180 96 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 .546
+(the binary conditional operators listed in)180 108 R/F1 10
+/Times-Italic@0 SF(bash\(1\))3.046 E F0(under)3.046 E/F2 9/Times-Bold@0
+SF(CONDITION)3.046 E .546(AL EXPRESSIONS)-.18 F/F3 9/Times-Roman@0 SF(,)
+A F0 .887(the result of the e)180 120 R .888(xpression is the result of\
+ the binary test using the \214rst and third ar)-.15 F(gu-)-.18 E .434
+(ments as operands.)180 132 R(The)5.434 E/F4 10/Times-Bold@0 SF<ad61>
+2.934 E F0(and)2.934 E F4<ad6f>2.934 E F0 .434
+(operators are considered binary operators when there)2.934 F .645
+(are three ar)180 144 R 3.145(guments. If)-.18 F .645(the \214rst ar)
+3.145 F .646(gument is)-.18 F F4(!)3.146 E F0 3.146(,t)C .646(he v)
+-3.146 F .646(alue is the ne)-.25 F -.05(ga)-.15 G .646(tion of the tw)
+.05 F(o-ar)-.1 E(gu-)-.18 E .452
+(ment test using the second and third ar)180 156 R 2.951(guments. If)
+-.18 F .451(the \214rst ar)2.951 F .451(gument is e)-.18 F(xactly)-.15 E
+F4(\()2.951 E F0 .451(and the)2.951 F 1.164(third ar)180 168 R 1.164
+(gument is e)-.18 F(xactly)-.15 E F4(\))3.664 E F0 3.664(,t)C 1.164
+(he result is the one-ar)-3.664 F 1.165(gument test of the second ar)
+-.18 F(gument.)-.18 E(Otherwise, the e)180 180 Q(xpression is f)-.15 E
+(alse.)-.1 E 2.5(4a)144 192 S -.18(rg)-2.5 G(uments).18 E .43(The follo)
+180 204 R .43(wing conditions are applied in the order listed.)-.25 F
+.429(If the \214rst ar)5.429 F .429(gument is)-.18 F F4(!)2.929 E F0
+2.929(,t)C .429(he re-)-2.929 F 1.314(sult is the ne)180 216 R -.05(ga)
+-.15 G 1.314(tion of the three-ar).05 F 1.314(gument e)-.18 F 1.314
+(xpression composed of the remaining ar)-.15 F(gu-)-.18 E 2.745
+(ments. the)180 228 R(tw)2.745 E(o-ar)-.1 E .245
+(gument test using the second and third ar)-.18 F 2.744(guments. If)-.18
+F .244(the \214rst ar)2.744 F(gument)-.18 E .309(is e)180 240 R(xactly)
+-.15 E F4(\()2.809 E F0 .309(and the fourth ar)2.809 F .309(gument is e)
+-.18 F(xactly)-.15 E F4(\))2.809 E F0 2.809(,t)C .31
+(he result is the tw)-2.809 F(o-ar)-.1 E .31(gument test of the)-.18 F
+.184(second and third ar)180 252 R 2.684(guments. Otherwise,)-.18 F .184
+(the e)2.684 F .183(xpression is parsed and e)-.15 F -.25(va)-.25 G .183
+(luated according).25 F(to precedence using the rules listed abo)180 264
+Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 276 S 2.5(rm)-2.5 G(ore ar)-2.5 E
+(guments)-.18 E 1.635(The e)180 288 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 300
+Q -.15(ve)-.15 G(.).15 E(When used with)144 318 Q F4(test)2.5 E F0(or)
+2.5 E F4([)2.5 E F0 2.5(,t)C(he)-2.5 E F4(<)2.5 E F0(and)2.5 E F4(>)2.5
+E F0(operators sort le)2.5 E(xicographically using ASCII ordering.)-.15
+E F4(times)108 334.8 Q F0 1.229(Print the accumulated user and system t\
+imes for the shell and for processes run from the shell.)144 334.8 R
+(The return status is 0.)144 346.8 Q F4(trap)108 363.6 Q F0([)2.5 E F4
+(\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 .682(The command)144 375.6 R F1(ar)3.512 E(g)-.37 E F0
+.682(is to be read and e)3.402 F -.15(xe)-.15 G .682
+(cuted when the shell recei).15 F -.15(ve)-.25 G 3.183(ss).15 G
+(ignal\(s\))-3.183 E F1(sigspec)3.523 E F0 5.683(.I).31 G(f)-5.683 E F1
+(ar)3.513 E(g)-.37 E F0(is)3.403 E .609(absent \(and there is a single)
+144 387.6 R F1(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F4<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 399.6 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 411.6 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 F4<ad70>3.08 E F0(has)3.08 E 1.214
+(been supplied, then the trap commands associated with each)144 423.6 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 435.6 R F4<ad70>3.36
+E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F4(trap)3.36 E F0 .86
+(prints the list of commands associated with each)3.36 F 2.83
+(signal. The)144 447.6 R F4<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 459.6 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 471.6 Q .3 -.15(ve a)-.25 H(nd the).15 E
+F2(SIG)2.5 E F0(pre\214x is optional.)2.25 E .666(If a)144 489.6 R F1
+(sigspec)3.506 E F0(is)3.476 E F2(EXIT)3.166 E F0 .666
+(\(0\) the command)2.916 F F1(ar)3.496 E(g)-.37 E F0 .666(is e)3.386 F
+-.15(xe)-.15 G .666(cuted on e).15 F .667(xit from the shell.)-.15 F
+.667(If a)5.667 F F1(sigspec)3.507 E F0(is)3.477 E F2(DE-)3.167 E -.09
+(BU)144 501.6 S(G).09 E F3(,)A F0 .484(the command)2.734 F F1(ar)3.314 E
+(g)-.37 E F0 .484(is e)3.204 F -.15(xe)-.15 G .484(cuted before e).15 F
+-.15(ve)-.25 G(ry).15 E F1 .483(simple command)2.984 F F0(,)A F1(for)
+2.983 E F0(command,)2.983 E F1(case)2.983 E F0(command,)2.983 E F1
+(select)144 513.6 Q F0 .562(command, e)3.062 F -.15(ve)-.25 G .563
+(ry arithmetic).15 F F1(for)3.063 E F0 .563
+(command, and before the \214rst command e)3.063 F -.15(xe)-.15 G .563
+(cutes in a shell).15 F .442(function \(see)144 525.6 R F2 .442
+(SHELL GRAMMAR)2.942 F F0(in)2.692 E F1(bash\(1\))2.942 E F0 2.941
+(\). Refer)B .441(to the description of the)2.941 F F4(extdeb)2.941 E
+(ug)-.2 E F0 .441(option to)2.941 F(the)144 537.6 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
+549.6 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 561.6 Q -.15(xe)
+-.15 G(cuting.).15 E .96(If a)144 579.6 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(sin\
+gle simple command\), a list, or a compound command returns a non\255ze\
+ro e)144 591.6 R .184(xit status, subject to)-.15 F .451(the follo)144
+603.6 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 615.6 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 627.6 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 639.6 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 651.6 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 .132
+(Signals ignored upon entry to the shell cannot be trapped or reset.)144
+669.6 R -.35(Tr)5.133 G .133(apped signals that are not be-).35 F .117
+(ing ignored are reset to their original v)144 681.6 R .117
+(alues in a subshell or subshell en)-.25 F .117
+(vironment when one is cre-)-.4 F 2.5(ated. The)144 693.6 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(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)
+-.15 G(mber 22).15 E(23)185.545 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(type)108 84 Q F0([)
+2.5 E F1(\255aftpP)A F0(])A/F2 10/Times-Italic@0 SF(name)2.5 E F0([)2.5
+E F2(name)A F0(...])2.5 E -.4(Wi)144 96 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 108 Q F0 .715(option is used,)3.215 F F1(type)3.215 E F0
+.715(prints a string which is one of)3.215 F F2(alias)3.545 E F0(,).27 E
+F2 -.1(ke)3.215 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)5.185 E F0
+(,).24 E F2 -.2(bu)3.215 G(iltin).2 E F0 3.215(,o).24 G(r)-3.215 E F2
+(\214le)5.125 E F0(if)3.395 E F2(name)144.36 120 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 132 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 144 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 .529(mand name, or nothing if)
+144 156 R/F3 10/Courier@0 SF .528(type -t name)3.028 F F0 -.1(wo)3.028 G
+.528(uld not return).1 F F2(\214le)4.938 E F0 5.528(.T).18 G(he)-5.528 E
+F1<ad50>3.028 E F0 .528(option forces a)3.028 F/F4 9/Times-Bold@0 SF
+-.666(PA)3.028 G(TH)-.189 E F0 .006(search for each)144 168 R F2(name)
+2.506 E F0 2.506(,e)C -.15(ve)-2.756 G 2.506(ni).15 G(f)-2.506 E F3 .007
+(type -t name)2.506 F F0 -.1(wo)2.507 G .007(uld not return).1 F F2
+(\214le)4.417 E F0 5.007(.I).18 G 2.507(fac)-5.007 G .007
+(ommand is hashed,)-2.507 F F1<ad70>2.507 E F0(and)144 180 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 192 Q F0 .823(option is used,)3.323 F F1(type)3.323 E
+F0 .824(prints all of the places that contain an e)3.323 F -.15(xe)-.15
+G .824(cutable named).15 F F2(name)3.684 E F0 5.824(.T).18 G .824
+(his in-)-5.824 F 1.176
+(cludes aliases and functions, if and only if the)144 204 R F1<ad70>
+3.676 E F0 1.176(option is not also used.)3.676 F 1.176
+(The table of hashed)6.176 F 1.223(commands is not consulted when using)
+144 216 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 228 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 240 Q F1(ulimit)108 256.8 Q F0([)2.5 E F1
+(\255HS)A F0(])A F1<ad61>2.5 E(ulimit)108 268.8 Q F0([)2.5 E F1(\255HS)A
+F0 2.5(][)C F1(\255bcde\214klmnpqrstuvxPR)-2.5 E(T)-.4 E F0([)2.5 E F2
+(limit)A F0(]])A(Pro)144 280.8 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 292.8 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 304.8 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 316.8 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
+328.8 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 340.8 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 .023
+(soft limit, and no limit, respecti)144 352.8 R -.15(ve)-.25 G(ly).15 E
+5.023(.I)-.65 G(f)-5.023 E F2(limit)2.613 E F0 .023
+(is omitted, the current v)3.203 F .023
+(alue of the soft limit of the re-)-.25 F .985
+(source is printed, unless the)144 364.8 R F1<ad48>3.485 E F0 .984
+(option is gi)3.485 F -.15(ve)-.25 G 3.484(n. When).15 F .984
+(more than one resource is speci\214ed, the)3.484 F .7
+(limit name and unit, if appropriate, are printed before the v)144 376.8
+R 3.2(alue. Other)-.25 F .7(options are interpreted as)3.2 F(follo)144
+388.8 Q(ws:)-.25 E F1<ad61>144 400.8 Q F0
+(All current limits are reported; no limits are set)180 400.8 Q F1<ad62>
+144 412.8 Q F0(The maximum sock)180 412.8 Q(et b)-.1 E(uf)-.2 E
+(fer size)-.25 E F1<ad63>144 424.8 Q F0
+(The maximum size of core \214les created)180 424.8 Q F1<ad64>144 436.8
+Q F0(The maximum size of a process')180 436.8 Q 2.5(sd)-.55 G(ata se)
+-2.5 E(gment)-.15 E F1<ad65>144 448.8 Q F0
+(The maximum scheduling priority \("nice"\))180 448.8 Q F1<ad66>144
+460.8 Q F0
+(The maximum size of \214les written by the shell and its children)180
+460.8 Q F1<ad69>144 472.8 Q F0(The maximum number of pending signals)180
+472.8 Q F1<ad6b>144 484.8 Q F0
+(The maximum number of kqueues that may be allocated)180 484.8 Q F1
+<ad6c>144 496.8 Q F0(The maximum size that may be lock)180 496.8 Q
+(ed into memory)-.1 E F1<ad6d>144 508.8 Q F0
+(The maximum resident set size \(man)180 508.8 Q 2.5(ys)-.15 G
+(ystems do not honor this limit\))-2.5 E F1<ad6e>144 520.8 Q F0 .791(Th\
+e maximum number of open \214le descriptors \(most systems do not allo)
+180 520.8 R 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F
+(be set\))180 532.8 Q F1<ad70>144 544.8 Q F0
+(The pipe size in 512-byte blocks \(this may not be set\))180 544.8 Q F1
+<ad71>144 556.8 Q F0
+(The maximum number of bytes in POSIX message queues)180 556.8 Q F1
+<ad72>144 568.8 Q F0(The maximum real-time scheduling priority)180 568.8
+Q F1<ad73>144 580.8 Q F0(The maximum stack size)180 580.8 Q F1<ad74>144
+592.8 Q F0(The maximum amount of cpu time in seconds)180 592.8 Q F1
+<ad75>144 604.8 Q F0(The maximum number of processes a)180 604.8 Q -.25
+(va)-.2 G(ilable to a single user).25 E F1<ad76>144 616.8 Q F0 .47
+(The maximum amount of virtual memory a)180 616.8 R -.25(va)-.2 G .47
+(ilable to the shell and, on some systems, to).25 F(its children)180
+628.8 Q F1<ad78>144 640.8 Q F0(The maximum number of \214le locks)180
+640.8 Q F1<ad50>144 652.8 Q F0(The maximum number of pseudoterminals)180
+652.8 Q F1<ad52>144 664.8 Q F0(The maximum time a real-time process can\
+ run before blocking, in microseconds)180 664.8 Q F1<ad54>144 676.8 Q F0
+(The maximum number of threads)180 676.8 Q(If)144 693.6 Q F2(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 .044
+(no option is gi)144 705.6 R -.15(ve)-.25 G .044(n, then).15 F F1<ad66>
+2.544 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 .045(xcept for)-.15 F F1
+<ad74>2.545 E F0 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144
+717.6 R F1<ad52>3.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F
+F1<ad70>3.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;)
+-3.17 F F1<ad50>3.17 E F0(,)A F1<ad54>3.17 E F0(,)A F1<ad62>3.17 E F0(,)
+A F1<ad6b>144 729.6 Q F0(,)A F1<ad6e>3.736 E F0 3.736(,a)C(nd)-3.736 E
+F1<ad75>3.736 E F0 3.736(,w)C 1.236(hich are unscaled v)-3.736 F 1.236
+(alues; and, when in posix mode,)-.25 F F1<ad63>3.736 E F0(and)3.736 E
+F1<ad66>3.736 E F0 3.736(,w)C 1.237(hich are in)-3.736 F(GNU Bash 5.2)72
+768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(24)185.545 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 .239(512-byte increments.)144 84 R .238
+(The return status is 0 unless an in)5.239 F -.25(va)-.4 G .238
+(lid option or ar).25 F .238(gument is supplied, or an)-.18 F
+(error occurs while setting a ne)144 96 Q 2.5(wl)-.25 G(imit.)-2.5 E/F1
+10/Times-Bold@0 SF(umask)108 112.8 Q F0([)2.5 E F1<ad70>A F0 2.5(][)C F1
+<ad53>-2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(mode)-2.5 E F0(])A .18
+(The user \214le-creation mask is set to)144 124.8 R F2(mode)3.06 E F0
+5.18(.I).18 G(f)-5.18 E F2(mode)3.06 E F0(be)2.86 E .18
+(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 136.8 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
+148.8 Q F2(mode)3.262 E F0 .382(is omitted, the current v)3.062 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 160.8 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 172.8 Q F0 .551
+(is omitted, the output is in a form that may be reused as input.)3.231
+F .552(The return status is 0 if the)5.552 F(mode w)144 184.8 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 201.6 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C F2(name)-2.5 E F0
+(...])2.5 E(Remo)144 213.6 Q 1.058 -.15(ve e)-.15 H(ach).15 E F2(name)
+3.258 E F0 .758(from the list of de\214ned aliases.)3.258 F(If)5.758 E
+F1<ad61>3.258 E F0 .757(is supplied, all alias de\214nitions are re-)
+3.258 F(mo)144 225.6 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 242.4 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 254.4 S 3.803(re).15 G(ach)-3.803 E F2(name)4.163 E F0
+3.803(,r).18 G(emo)-3.803 E 1.603 -.15(ve t)-.15 H 1.303
+(he corresponding v).15 F 1.303(ariable or function.)-.25 F 1.303
+(If the)6.303 F F1<ad76>3.804 E F0 1.304(option is gi)3.804 F -.15(ve)
+-.25 G 1.304(n, each).15 F F2(name)144.36 266.4 Q F0 .465
+(refers to a shell v)3.145 F .464(ariable, and that v)-.25 F .464
+(ariable is remo)-.25 F -.15(ve)-.15 G 2.964(d. Read-only).15 F -.25(va)
+2.964 G .464(riables may not be un-).25 F 2.768(set. If)144 278.4 R F1
+<ad66>2.768 E F0 .269(is speci\214ed, each)2.768 F F2(name)3.129 E F0
+.269(refers to a shell function, and the function de\214nition is remo)
+2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 290.4 R F1<ad6e>2.904 E
+F0 .404(option is supplied, and)2.904 F F2(name)2.904 E F0 .404(is a v)
+2.904 F .404(ariable with the)-.25 F F2(namer)2.904 E(ef)-.37 E F0
+(attrib)2.904 E(ute,)-.2 E F2(name)2.904 E F0 .403(will be unset)2.904 F
+.719(rather than the v)144 302.4 R .719(ariable it references.)-.25 F F1
+<ad6e>5.719 E F0 .719(has no ef)3.219 F .719(fect if the)-.25 F F1<ad66>
+3.22 E F0 .72(option is supplied.)3.22 F .72(If no options)5.72 F .737
+(are supplied, each)144 314.4 R F2(name)3.237 E F0 .737(refers to a v)
+3.237 F .737(ariable; if there is no v)-.25 F .736
+(ariable by that name, a function with)-.25 F 1.761(that name, if an)144
+326.4 R 3.061 -.65(y, i)-.15 H 4.261(su).65 G 4.261(nset. Each)-4.261 F
+1.761(unset v)4.261 F 1.761(ariable or function is remo)-.25 F -.15(ve)
+-.15 G 4.262(df).15 G 1.762(rom the en)-4.262 F(vironment)-.4 E 3.172
+(passed to subsequent commands.)144 338.4 R 3.172(If an)8.172 F 5.672
+(yo)-.15 G(f)-5.672 E/F3 9/Times-Bold@0 SF -.27(BA)5.672 G(SH_ALIASES)
+.27 E/F4 9/Times-Roman@0 SF(,)A F3 -.27(BA)5.421 G(SH_ARGV0).27 E F4(,)A
+F3 -.27(BA)5.421 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 350.4 S
+(SH_COMMAND).27 E F4(,)A F3 -.27(BA)11.481 G(SH_SUBSHELL).27 E F4(,)A F3
+-.27(BA)11.482 G(SHPID).27 E F4(,)A F3(COMP_W)11.482 E(ORDBREAKS)-.09 E
+F4(,)A F3(DIRST)11.482 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL)
+144 362.4 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN)
+2.67 E(AME)-.18 E F4(,)A F3(GR)2.67 E(OUPS)-.27 E F4(,)A F3(HISTCMD)2.67
+E F4(,)A F3(LINENO)2.67 E F4(,)A F3(RANDOM)2.67 E F4(,)A F3(SECONDS)144
+374.4 Q F4(,)A F0(or)4.029 E F3(SRANDOM)4.279 E F0 1.779(are unset, the)
+4.029 F 4.279(yl)-.15 G 1.779(ose their special properties, e)-4.279 F
+-.15(ve)-.25 G 4.279(ni).15 G 4.28(ft)-4.279 G(he)-4.28 E 4.28(ya)-.15 G
+1.78(re subse-)-4.28 F(quently reset.)144 386.4 Q(The e)5 E
+(xit status is true unless a)-.15 E F2(name)2.86 E F0
+(is readonly or may not be unset.)2.68 E F1(wait)108 403.2 Q F0([)2.5 E
+F1(\255fn)A F0 2.5(][)C F1<ad70>-2.5 E F2(varname)2.5 E F0 2.5(][)C F2
+(id ...)-2.5 E F0(])A -.8(Wa)144 415.2 S .659(it for each speci\214ed c\
+hild process and return its termination status.).8 F(Each)5.659 E F2(id)
+3.169 E F0 .658(may be a process)3.928 F .008
+(ID or a job speci\214cation; if a job spec is gi)144 427.2 R -.15(ve)
+-.25 G .009(n, all processes in that job').15 F 2.509(sp)-.55 G .009
+(ipeline are w)-2.509 F .009(aited for)-.1 F 5.009(.I)-.55 G(f)-5.009 E
+F2(id)144.01 439.2 Q F0 .442(is not gi)3.712 F -.15(ve)-.25 G(n,).15 E
+F1(wait)2.942 E F0 -.1(wa)2.942 G .441
+(its for all running background jobs and the last-e).1 F -.15(xe)-.15 G
+.441(cuted process substitu-).15 F .597
+(tion, if its process id is the same as)144 451.2 R F1($!)3.098 E F0
+3.098(,a)C .598(nd the return status is zero.)-3.098 F .598(If the)5.598
+F F1<ad6e>3.098 E F0 .598(option is supplied,)3.098 F F1(wait)144 463.2
+Q F0 -.1(wa)3.083 G .583(its for a single job from the list of).1 F F2
+(id)3.083 E F0 3.083(so)C 1.383 -.4(r, i)-3.083 H 3.083(fn).4 G(o)-3.083
+E F2(id)3.083 E F0 3.083(sa)C .583(re supplied, an)-3.083 F 3.083(yj)
+-.15 G .582(ob, to complete and)-3.083 F .403(returns its e)144 475.2 R
+.403(xit status.)-.15 F .403(If none of the supplied ar)5.403 F .403
+(guments is a child of the shell, or if no ar)-.18 F(guments)-.18 E .573
+(are supplied and the shell has no unw)144 487.2 R .573
+(aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .572
+(If the)5.573 F F1<ad70>3.072 E F0 .572(option is)3.072 F .39
+(supplied, the process or job identi\214er of the job for which the e)
+144 499.2 R .39(xit status is returned is assigned to)-.15 F .905(the v)
+144 511.2 R(ariable)-.25 E F2(varname)3.405 E F0 .905
+(named by the option ar)3.405 F 3.405(gument. The)-.18 F -.25(va)3.405 G
+.905(riable will be unset initially).25 F 3.405(,b)-.65 G(efore)-3.405 E
+(an)144 523.2 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39
+(is useful only when the)3.89 F F1<ad6e>3.89 E F0 1.39
+(option is supplied.)3.89 F 1.39(Supplying the)6.39 F F1<ad66>3.89 E F0
+(option,)3.89 E .575(when job control is enabled, forces)144 535.2 R F1
+(wait)3.075 E F0 .575(to w)3.075 F .575(ait for)-.1 F F2(id)3.075 E F0
+.574(to terminate before returning its status, in-)3.075 F .635
+(stead of returning when it changes status.)144 547.2 R(If)5.635 E F2
+(id)3.145 E F0 .635(speci\214es a non-e)3.905 F .635
+(xistent process or job, the return)-.15 F .802(status is 127.)144 559.2
+R(If)5.801 E F1(wait)3.301 E F0 .801(is interrupted by a signal, the re\
+turn status will be greater than 128, as de-)3.301 F 1.758
+(scribed under)144 571.2 R F1(SIGN)4.258 E(ALS)-.2 E F0(in)4.258 E F2
+(bash\(1\))4.258 E F0 6.758(.O)C 1.759
+(therwise, the return status is the e)-6.758 F 1.759
+(xit status of the last)-.15 F(process or job w)144 583.2 Q(aited for)
+-.1 E(.)-.55 E/F5 10.95/Times-Bold@0 SF(SHELL COMP)72 600 Q -1.04(AT)
+-.81 G(IBILITY MODE)1.04 E F0 1.355
+(Bash-4.0 introduced the concept of a)108 612 R F2 1.355
+(shell compatibility le)3.855 F(vel)-.15 E F0 3.855(,s)C 1.354
+(peci\214ed as a set of options to the shopt)-3.855 F -.2(bu)108 624 S
+.398(iltin \().2 F F1(compat31)2.898 E F0(,)A F1(compat32)2.898 E F0(,)A
+F1(compat40)2.898 E F0(,)A F1(compat41)2.898 E F0 2.898(,a)C .399
+(nd so on\).)-2.898 F .399(There is only one current compatibility)5.399
+F(le)108 636 Q -.15(ve)-.25 G 3.254(l-).15 G 3.254(-e)-3.254 G .754
+(ach option is mutually e)-3.254 F(xclusi)-.15 E -.15(ve)-.25 G 5.754
+(.T).15 G .754(he compatibility le)-5.754 F -.15(ve)-.25 G 3.253(li).15
+G 3.253(si)-3.253 G .753(ntended to allo)-3.253 F 3.253(wu)-.25 G .753
+(sers to select be-)-3.253 F(ha)108 648 Q 1.083(vior from pre)-.2 F
+1.083(vious v)-.25 F 1.083(ersions that is incompatible with ne)-.15 F
+1.083(wer v)-.25 F 1.083(ersions while the)-.15 F 3.584(ym)-.15 G 1.084
+(igrate scripts to use)-3.584 F(current features and beha)108 660 Q
+(vior)-.2 E 2.5(.I)-.55 G(t')-2.5 E 2.5(si)-.55 G
+(ntended to be a temporary solution.)-2.5 E 1.457
+(This section does not mention beha)108 676.8 R 1.457
+(vior that is standard for a particular v)-.2 F 1.456
+(ersion \(e.g., setting)-.15 F F1(compat32)3.956 E F0 .886
+(means that quoting the rhs of the re)108 688.8 R(ge)-.15 E .886
+(xp matching operator quotes special re)-.15 F(ge)-.15 E .887
+(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 700.8 Q
+(ault beha)-.1 E(vior in bash-3.2 and subsequent v)-.2 E(ersions\).)-.15
+E .523(If a user enables, say)108 717.6 R(,)-.65 E F1(compat32)3.023 E
+F0 3.023(,i)C 3.023(tm)-3.023 G .523(ay af)-3.023 F .523(fect the beha)
+-.25 F .523(vior of other compatibility le)-.2 F -.15(ve)-.25 G .522
+(ls up to and includ-).15 F .259(ing the current compatibility le)108
+729.6 R -.15(ve)-.25 G 2.759(l. The).15 F .259
+(idea is that each compatibility le)2.759 F -.15(ve)-.25 G 2.76(lc).15 G
+.26(ontrols beha)-2.76 F .26(vior that changed)-.2 F(GNU Bash 5.2)72 768
+Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E(25)185.545 E 0 Cg EP
+%%Page: 26 26
+%%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 1.646(in that v)108 84 R 1.646(ersion of)
+-.15 F/F1 10/Times-Bold@0 SF(bash)4.146 E F0 4.146(,b)C 1.646
+(ut that beha)-4.346 F 1.646(vior may ha)-.2 F 1.946 -.15(ve b)-.2 H
+1.646(een present in earlier v).15 F 4.146(ersions. F)-.15 F 1.645
+(or instance, the)-.15 F .76
+(change to use locale-based comparisons with the)108 96 R F1([[)3.261 E
+F0 .761(command came in bash-4.1, and earlier v)3.261 F .761
+(ersions used)-.15 F 1.905(ASCII-based comparisons, so enabling)108 108
+R F1(compat32)4.405 E F0 1.904
+(will enable ASCII-based comparisons as well.)4.405 F(That)6.904 E .295
+(granularity may not be suf)108 120 R .296
+(\214cient for all uses, and as a result users should emplo)-.25 F 2.796
+(yc)-.1 G .296(ompatibility le)-2.796 F -.15(ve)-.25 G .296(ls care-).15
+F(fully)108 132 Q 5(.R)-.65 G(ead the documentation for a particular fe\
+ature to \214nd out the current beha)-5 E(vior)-.2 E(.)-.55 E .532
+(Bash-4.3 introduced a ne)108 148.8 R 3.032(ws)-.25 G .531(hell v)-3.032
+F(ariable:)-.25 E/F2 9/Times-Bold@0 SF -.27(BA)3.031 G(SH_COMP).27 E
+-.855(AT)-.666 G/F3 9/Times-Roman@0 SF(.).855 E F0 .531(The v)5.031 F
+.531(alue assigned to this v)-.25 F .531(ariable \(a decimal)-.25 F -.15
+(ve)108 160.8 S .107(rsion number lik).15 F 2.607(e4)-.1 G .107
+(.2, or an inte)-2.607 F .107(ger corresponding to the)-.15 F F1(compat)
+2.608 E/F4 10/Times-Italic@0 SF(NN)A F0 .108(option, lik)2.608 F 2.608
+(e4)-.1 G .108(2\) determines the com-)-2.608 F(patibility le)108 172.8
+Q -.15(ve)-.25 G(l.).15 E .388(Starting with bash-4.4, Bash has be)108
+189.6 R .388(gun deprecating older compatibility le)-.15 F -.15(ve)-.25
+G 2.887(ls. Ev).15 F(entually)-.15 E 2.887(,t)-.65 G .387
+(he options will)-2.887 F(be remo)108 201.6 Q -.15(ve)-.15 G 2.5(di).15
+G 2.5(nf)-2.5 G -.2(avo)-2.6 G 2.5(ro).2 G(f)-2.5 E F2 -.27(BA)2.5 G
+(SH_COMP).27 E -.855(AT)-.666 G F3(.).855 E F0 1.163
+(Bash-5.0 is the \214nal v)108 218.4 R 1.163
+(ersion for which there will be an indi)-.15 F 1.164
+(vidual shopt option for the pre)-.25 F 1.164(vious v)-.25 F(ersion.)
+-.15 E(Users should use)108 230.4 Q F2 -.27(BA)2.5 G(SH_COMP).27 E -.855
+(AT)-.666 G F0(on bash-5.0 and later v)3.105 E(ersions.)-.15 E 1.614
+(The follo)108 247.2 R 1.613(wing table describes the beha)-.25 F 1.613
+(vior changes controlled by each compatibility le)-.2 F -.15(ve)-.25 G
+4.113(ls).15 G 4.113(etting. The)-4.113 F F1(compat)108 259.2 Q F4(NN)A
+F0 1.186(tag is used as shorthand for setting the compatibility le)3.685
+F -.15(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F4(NN)3.686 E F0 1.186
+(using one of the follo)3.686 F(wing)-.25 E 3.807(mechanisms. F)108
+271.2 R 1.307(or v)-.15 F 1.307
+(ersions prior to bash-5.0, the compatibility le)-.15 F -.15(ve)-.25 G
+3.806(lm).15 G 1.306(ay be set using the corresponding)-3.806 F F1
+(compat)108 283.2 Q F4(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502
+G 3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the)
+-.15 F F2 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va)
+3.607 G .502(riable is preferred, and it).25 F
+(is required for bash-5.1 and later v)108 295.2 Q(ersions.)-.15 E F1
+(compat31)108 312 Q F0<83>144 324 Q(quoting the rhs of the)180 324 Q F1
+([[)2.5 E F0(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15 G
+2.5(pm).15 G(atching operator \(=~\) has no special ef)-2.5 E(fect)-.25
+E F1(compat32)108 340.8 Q F0<83>144 352.8 Q .35
+(interrupting a command list such as "a ; b ; c" causes the e)180 352.8
+R -.15(xe)-.15 G .35(cution of the ne).15 F .35(xt command)-.15 F .017
+(in the list \(in bash-4.0 and later v)180 364.8 R .018
+(ersions, the shell acts as if it recei)-.15 F -.15(ve)-.25 G 2.518(dt)
+.15 G .018(he interrupt, so in-)-2.518 F
+(terrupting one command in a list aborts the e)180 376.8 Q -.15(xe)-.15
+G(cution of the entire list\)).15 E F1(compat40)108 393.6 Q F0<83>144
+405.6 Q(the)180 405.6 Q F1(<)2.674 E F0(and)2.674 E F1(>)2.673 E F0 .173
+(operators to the)2.673 F F1([[)2.673 E F0 .173
+(command do not consider the current locale when compar)2.673 F(-)-.2 E
+.067(ing strings; the)180 417.6 R 2.567(yu)-.15 G .067
+(se ASCII ordering.)-2.567 F .068(Bash v)5.068 F .068
+(ersions prior to bash-4.1 use ASCII collation)-.15 F(and)180 429.6 Q F4
+(str)4.743 E(cmp)-.37 E F0 1.903
+(\(3\); bash-4.1 and later use the current locale').19 F 4.402(sc)-.55 G
+1.902(ollation sequence and)-4.402 F F4(str)4.742 E(-)-.2 E(coll)180
+441.6 Q F0(\(3\).).51 E F1(compat41)108 458.4 Q F0<83>144 470.4 Q(in)180
+470.4 Q F4(posix)3.79 E F0(mode,)3.79 E F1(time)3.79 E F0 1.29
+(may be follo)3.79 F 1.29
+(wed by options and still be recognized as a reserv)-.25 F(ed)-.15 E -.1
+(wo)180 482.4 S(rd \(this is POSIX interpretation 267\)).1 E<83>144
+494.4 Q(in)180 494.4 Q F4(posix)2.709 E F0 .208
+(mode, the parser requires that an e)2.709 F -.15(ve)-.25 G 2.708(nn).15
+G .208(umber of single quotes occur in the)-2.708 F F4(wor)2.708 E(d)
+-.37 E F0 .281(portion of a double-quoted parameter e)180 506.4 R .282
+(xpansion and treats them specially)-.15 F 2.782(,s)-.65 G 2.782(ot)
+-2.782 G .282(hat charac-)-2.782 F(ters within the single quotes are co\
+nsidered quoted \(this is POSIX interpretation 221\))180 518.4 Q F1
+(compat42)108 535.2 Q F0<83>144 547.2 Q 1.056(the replacement string in\
+ double-quoted pattern substitution does not under)180 547.2 R 1.055
+(go quote re-)-.18 F(mo)180 559.2 Q -.25(va)-.15 G(l, as it does in v)
+.25 E(ersions after bash-4.2)-.15 E<83>144 571.2 Q .021
+(in posix mode, single quotes are considered special when e)180 571.2 R
+.021(xpanding the)-.15 F F4(wor)2.521 E(d)-.37 E F0 .021(portion of a)
+2.521 F .018(double-quoted parameter e)180 583.2 R .017
+(xpansion and can be used to quote a closing brace or other spe-)-.15 F
+.998(cial character \(this is part of POSIX interpretation 221\); in la\
+ter v)180 595.2 R .999(ersions, single quotes)-.15 F
+(are not special within double-quoted w)180 607.2 Q(ord e)-.1 E
+(xpansions)-.15 E F1(compat43)108 624 Q F0<83>144 636 Q 1.071
+(the shell does not print a w)180 636 R 1.07
+(arning message if an attempt is made to use a quoted com-)-.1 F .71
+(pound assignment as an ar)180 648 R .711
+(gument to declare \(e.g., declare -a foo=\010\(1 2\)\010\). Later v)
+-.18 F(ersions)-.15 E -.1(wa)180 660 S(rn that this usage is deprecated)
+.1 E<83>144 672 Q -.1(wo)180 672 S .501(rd e).1 F .501
+(xpansion errors are considered non-f)-.15 F .501
+(atal errors that cause the current command to)-.1 F -.1(fa)180 684 S
+.605(il, e).1 F -.15(ve)-.25 G 3.105(ni).15 G 3.105(np)-3.105 G .605
+(osix mode \(the def)-3.105 F .605(ault beha)-.1 F .605(vior is to mak)
+-.2 F 3.105(et)-.1 G .605(hem f)-3.105 F .605
+(atal errors that cause the)-.1 F(shell to e)180 696 Q(xit\))-.15 E<83>
+144 708 Q .355(when e)180 708 R -.15(xe)-.15 G .354
+(cuting a shell function, the loop state \(while/until/etc.\)).15 F .354
+(is not reset, so)5.354 F F1(br)2.854 E(eak)-.18 E F0(or)2.854 E F1
+(continue)180 720 Q F0 .052
+(in that function will break or continue loops in the calling conte)
+2.552 F .053(xt. Bash-4.4 and)-.15 F(GNU Bash 5.2)72 768 Q(2021 No)
+136.385 E -.15(ve)-.15 G(mber 22).15 E(26)185.545 E 0 Cg EP
+%%Page: 27 27
+%%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(later reset the loop state to pre)180 84 Q
+-.15(ve)-.25 G(nt this).15 E/F1 10/Times-Bold@0 SF(compat44)108 100.8 Q
+F0<83>144 112.8 Q .719(the shell sets up the v)180 112.8 R .719
+(alues used by)-.25 F/F2 9/Times-Bold@0 SF -.27(BA)3.219 G(SH_ARGV).27 E
+F0(and)2.969 E F2 -.27(BA)3.219 G(SH_ARGC).27 E F0 .719(so the)2.969 F
+3.218(yc)-.15 G .718(an e)-3.218 F(xpand)-.15 E(to the shell')180 124.8
+Q 2.5(sp)-.55 G(ositional parameters e)-2.5 E -.15(ve)-.25 G 2.5(ni).15
+G 2.5(fe)-2.5 G(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>
+144 136.8 Q 2.634(as)180 136.8 S .134
+(ubshell inherits loops from its parent conte)-2.634 F .135(xt, so)-.15
+F F1(br)2.635 E(eak)-.18 E F0(or)2.635 E F1(continue)2.635 E F0 .135
+(will cause the sub-)2.635 F(shell to e)180 148.8 Q 2.5(xit. Bash-5.0)
+-.15 F(and later reset the loop state to pre)2.5 E -.15(ve)-.25 G
+(nt the e).15 E(xit)-.15 E<83>144 160.8 Q -.25(va)180 160.8 S .619
+(riable assignments preceding b).25 F .618(uiltins lik)-.2 F(e)-.1 E F1
+(export)3.118 E F0(and)3.118 E F1 -.18(re)3.118 G(adonly).18 E F0 .618
+(that set attrib)3.118 F .618(utes con-)-.2 F .119(tinue to af)180 172.8
+R .119(fect v)-.25 F .119(ariables with the same name in the calling en)
+-.25 F .12(vironment e)-.4 F -.15(ve)-.25 G 2.62(ni).15 G 2.62(ft)-2.62
+G .12(he shell is)-2.62 F(not in posix mode)180 184.8 Q F1(compat50)108
+201.6 Q F0<83>144 213.6 Q 1.209(Bash-5.1 changed the w)180 213.6 R(ay)
+-.1 E F2($RANDOM)3.709 E F0 1.209
+(is generated to introduce slightly more random-)3.459 F 1.018
+(ness. If the shell compatibility le)180 225.6 R -.15(ve)-.25 G 3.518
+(li).15 G 3.518(ss)-3.518 G 1.018(et to 50 or lo)-3.518 F(wer)-.25 E
+3.518(,i)-.4 G 3.518(tr)-3.518 G -2.15 -.25(ev e)-3.518 H 1.019
+(rts to the method from).25 F .733(bash-5.0 and pre)180 237.6 R .733
+(vious v)-.25 F .732
+(ersions, so seeding the random number generator by assigning a)-.15 F
+-.25(va)180 249.6 S(lue to).25 E F2(RANDOM)2.5 E F0
+(will produce the same sequence as in bash-5.0)2.25 E<83>144 261.6 Q
+.695(If the command hash table is empty)180 261.6 R 3.196(,b)-.65 G .696
+(ash v)-3.196 F .696(ersions prior to bash-5.1 printed an informa-)-.15
+F 1.321(tional message to that ef)180 273.6 R 1.321(fect, e)-.25 F -.15
+(ve)-.25 G 3.821(nw).15 G 1.321
+(hen producing output that can be reused as input.)-3.821 F
+(Bash-5.1 suppresses that message when the)180 285.6 Q F1<ad6c>2.5 E F0
+(option is supplied.)2.5 E F1(compat51)108 302.4 Q F0<83>144 314.4 Q
+(The)180 314.4 Q F1(unset)2.954 E F0 -.2(bu)2.954 G .454
+(iltin treats attempts to unset array subscripts).2 F F1(@)2.955 E F0
+(and)2.955 E F1(*)2.955 E F0(dif)2.955 E .455(ferently depending)-.25 F
+(on whether the array is inde)180 326.4 Q -.15(xe)-.15 G 2.5(do).15 G
+2.5(ra)-2.5 G(ssociati)-2.5 E -.15(ve)-.25 G 2.5(,a).15 G(nd dif)-2.5 E
+(ferently than in pre)-.25 E(vious v)-.25 E(ersions.)-.15 E/F3 10.95
+/Times-Bold@0 SF(SEE ALSO)72 343.2 Q F0(bash\(1\), sh\(1\))108 355.2 Q
+(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E
+(27)185.545 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/rbash.0 b/doc/rbash.0
new file mode 100644
index 0000000..96845d0
--- /dev/null
+++ b/doc/rbash.0
@@ -0,0 +1,64 @@
+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, HHIISSTTFFIILLEE, 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
+ hhiissttoorryy 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 sshhoopptt --uu rree--
+ ssttrriicctteedd__sshheellll.
+
+ 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)
+
+
+
+Bash-5.2 2021 November 22 RBASH(1)
diff --git a/doc/rbash.1 b/doc/rbash.1
new file mode 100644
index 0000000..39309b4
--- /dev/null
+++ b/doc/rbash.1
@@ -0,0 +1,8 @@
+.TH RBASH 1 "2021 November 22" "Bash-5.2"
+.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..06fe883
--- /dev/null
+++ b/doc/rbash.ps
@@ -0,0 +1,290 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.22.4
+%%CreationDate: Mon Sep 19 12:02:42 2022
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%DocumentSuppliedResources: procset grops 1.22 4
+%%Pages: 1
+%%PageOrder: Ascend
+%%DocumentMedia: Default 612 792 0 () ()
+%%Orientation: Portrait
+%%EndComments
+%%BeginDefaults
+%%PageMedia: Default
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset grops 1.22 4
+%!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)3.582 E F0 1.081
+(is started with the name)3.581 F F2(rbash)3.581 E F0 3.581(,o)C 3.581
+(rt)-3.581 G(he)-3.581 E F2<ad72>3.581 E F0 1.081
+(option is supplied at in)3.581 F -.2(vo)-.4 G 1.081
+(cation, the shell becomes re-).2 F 2.976(stricted. A)108 136.8 R .476
+(restricted shell is used to set up an en)2.976 F .476
+(vironment more controlled than the standard shell.)-.4 F .477(It be-)
+5.477 F(ha)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(HISTFILE)2.25 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
+(specifying a \214lename containing a slash as an ar)144 232.8 Q
+(gument to the)-.18 E F2(history)2.5 E F0 -.2(bu)2.5 G(iltin command).2
+E<83>108 249.6 Q .45
+(specifying a \214lename containing a slash as an ar)144 249.6 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 261.6 Q
+<83>108 278.4 Q(importing function de\214nitions from the shell en)144
+278.4 Q(vironment at startup)-.4 E<83>108 295.2 Q(parsing the v)144
+295.2 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 312 Q(redirecting output using the >\
+, >|, <>, >&, &>, and >> redirection operators)144 312 Q<83>108 328.8 Q
+(using the)144 328.8 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
+345.6 Q(adding or deleting b)144 345.6 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 362.4 Q
+(using the)144 362.4 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
+379.2 Q(specifying the)144 379.2 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 396 Q
+(turning of)144 396 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F2
+(set +r)2.5 E F0(or)2.5 E F2(shopt -u r)2.5 E(estricted_shell)-.18 E F0
+(.)A(These restrictions are enforced after an)108 412.8 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 429.6 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 441.6 Q(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E
+F1(SEE ALSO)72 458.4 Q F0(bash\(1\))108 470.4 Q 157.215(Bash-5.2 2021)72
+768 R(No)2.5 E -.15(ve)-.15 G(mber 22).15 E(1)190.545 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..175aa07
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,11 @@
+@ignore
+Copyright (C) 1988-2022 Free Software Foundation, Inc.
+@end ignore
+
+@set LASTCHANGE Mon Sep 19 11:13:51 EDT 2022
+
+@set EDITION 5.2
+@set VERSION 5.2
+
+@set UPDATED 19 September 2022
+@set UPDATED-MONTH September 2022